:root{--navy:#083D77;--cream:#EBEBD3;--yellow:#F4D35E;--orange:#EE964B;--coral:#F95738;--ink:#10243e;--bg:#e7ebf0;--grid:#ccd4de;--green:#176b32;--lightgreen:#b6df76;--lightblue:#acd7f4;--slot:#e5443f;--row-height:52px;--hour-width:80px;--sidebar:205px}
*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:var(--bg);color:var(--ink);overflow:hidden}.app{display:grid;grid-template-columns:var(--sidebar) 1fr;height:100vh}.sidebar{background:linear-gradient(180deg,#062f5c,#041f3f);color:white;padding:13px 10px;display:flex;flex-direction:column;transition:.2s}.brand{padding:3px 7px 18px}.brand img{width:158px;background:white;border-radius:5px;padding:5px}.one{font-weight:800;letter-spacing:.28em;font-size:10px;margin:5px 0 0 100px;color:var(--yellow)}nav{display:grid;gap:4px}.nav{border:0;background:transparent;color:#d5e1ed;text-align:left;padding:10px;border-radius:5px;font-size:13px;cursor:pointer}.nav span{margin-left:8px}.nav.active,.nav:hover{background:#0d4c89;color:white}.version{margin-top:10px;padding:12px 8px;color:#b9c9d9;font-size:11px}.version small{color:#7596b7}.collapseBtn{margin-top:auto;background:transparent;border:1px solid #315b83;color:#d6e4f2;padding:8px;text-align:left;border-radius:5px;cursor:pointer}body.sidebarCollapsed{--sidebar:54px}.sidebarCollapsed .brand img,.sidebarCollapsed .brand .one,.sidebarCollapsed .nav span,.sidebarCollapsed .version,.sidebarCollapsed .collapseBtn span{display:none}.sidebarCollapsed .nav{text-align:center;font-size:17px}.sidebarCollapsed .collapseBtn{text-align:center}main{min-width:0;overflow:hidden;padding:0 12px 12px}header{height:70px;display:flex;align-items:center;justify-content:space-between}h1{margin:0;font-size:21px}.subtitle{color:#6b7b90;font-size:11px;margin-top:3px}.topcontrols{display:flex;gap:8px}input,select,button{font:inherit;border:1px solid #cad3df;background:white;border-radius:4px;padding:7px 9px}.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.page{display:none;height:calc(100vh - 82px);overflow:auto}.page.active{display:block}.cards{display:grid;grid-template-columns:repeat(6,minmax(120px,1fr));gap:9px;margin-bottom:10px}.card,.panel{background:#fff;border:1px solid #d4dbe4;border-radius:7px}.card{padding:14px}.card .value{font-size:25px;font-weight:750;color:var(--navy)}.card .label{font-size:11px;color:#718096}.grid2{display:grid;grid-template-columns:1.45fr 1fr;gap:10px}.panel{padding:14px}.panelhead{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.panelhead h2{font-size:15px;margin:0}.pill{font-size:10px;background:#eef3f8;color:var(--navy);padding:4px 7px;border-radius:999px}.line{display:grid;grid-template-columns:65px 1fr 75px;align-items:center;padding:8px 3px;border-top:1px solid #edf1f6;font-size:11px}.routechips{display:flex;gap:4px;overflow:hidden}.chip{background:#edf3fa;color:#174c87;border-radius:4px;padding:4px 6px;white-space:nowrap}.basegrid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px}.baseitem{border:1px solid #e6ebf2;border-radius:6px;padding:8px;font-size:11px}.baseitem b{color:var(--navy)}.baseitem span{float:right;color:#6b7b90}.tablewrap{overflow:auto;max-height:70vh}table{border-collapse:collapse;width:100%;font-size:11px}th{text-align:left;color:#6c7b8d;font-size:10px;background:#f7f9fc;position:sticky;top:0}th,td{padding:8px;border-bottom:1px solid #e9eef4;white-space:nowrap}.status{padding:3px 6px;border-radius:999px;background:#e9f5ef;color:var(--green);font-size:9px;font-weight:700}.hint{color:#69798e;font-size:12px}.statusbox{border-left:4px solid var(--yellow);background:#fff8df;padding:12px;border-radius:5px;font-size:12px}
.opsPage{overflow:hidden!important;position:relative}.opsToolbar{height:46px;background:white;border:1px solid #ccd5df;border-bottom:0;border-radius:5px 5px 0 0;display:flex;align-items:center;gap:7px;padding:5px 8px}.toolGroup{display:flex;align-items:center;gap:5px}.toolGroup label{font-size:9px;color:#6b7788;text-transform:uppercase;font-weight:bold}.toolGroup select,.toolGroup input{padding:5px 7px;font-size:11px}.compactBtn{padding:5px 8px;font-size:11px}.toolbarSpacer{flex:1}.opsSearchbar{height:34px;background:#f8fafc;border:1px solid #ccd5df;display:flex;align-items:center;padding:3px 8px;gap:6px}.opsSearchbar input{border:0;background:transparent;padding:3px;outline:0;min-width:280px;font-size:11px}.legendInline{margin-left:auto;font-size:9px;color:#5b6774;display:flex;align-items:center;gap:5px}.legend{width:10px;height:10px;border-radius:1px;display:inline-block;margin-left:5px;border:1px solid #8290a0}.legend.planned{background:var(--navy)}.legend.complete{background:white}.legend.airborne{background:var(--green)}.legend.predicted{background:var(--lightgreen)}.legend.offblocks{background:var(--lightblue)}.legend.slot{background:var(--slot)}
.timelineShell{display:grid;grid-template-columns:132px 1fr;grid-template-rows:31px 1fr;height:calc(100vh - 173px);border:1px solid #bfc8d3;border-top:0;background:#dfe4ea;overflow:hidden}.timelineCorner{grid-column:1;grid-row:1;background:#eef1f4;border-right:1px solid #bfc8d3;border-bottom:1px solid #bfc8d3;font-size:10px;font-weight:bold;padding:9px 8px}.timeHeader{grid-column:2;grid-row:1;position:relative;background:#e8ebef;border-bottom:1px solid #bfc8d3;height:31px;overflow:hidden}.timeHeaderCanvas{position:relative;height:31px;min-width:100%}.hourTick{position:absolute;top:0;height:31px;border-left:1px solid #c7ced7;font-size:9px;color:#607080}.hourTick span{position:absolute;left:3px;top:9px;white-space:nowrap}.rowLabels{grid-column:1;grid-row:2;overflow:hidden;background:#eef1f4;border-right:1px solid #bfc8d3;min-height:0}.rowLabel{border-bottom:1px solid #cbd2da;padding:5px 7px;display:flex;flex-direction:column;justify-content:center}.rowLabel b{font-size:11px;color:#163b62}.rowLabel small{font-size:8px;color:#718090;margin-top:2px}.timelineScroll{grid-column:2;grid-row:2;overflow:scroll;position:relative;background:#dfe4ea;min-height:0;min-width:0;scrollbar-gutter:stable both-edges}.timelineCanvas{position:relative;background:repeating-linear-gradient(to right,transparent 0,transparent calc(var(--hour-width) - 1px),#c7ced7 calc(var(--hour-width) - 1px),#c7ced7 var(--hour-width))}.rowGuide{position:absolute;left:0;width:100%;border-bottom:1px solid #cbd2da;background:rgba(255,255,255,.08)}.puck{position:absolute;height:18px;border-radius:2px;display:grid;grid-template-columns:minmax(22px,.8fr) minmax(30px,.8fr) minmax(25px,1fr) minmax(30px,.8fr) minmax(22px,.8fr);align-items:center;gap:2px;padding:0 4px;font-size:9px;line-height:18px;white-space:nowrap;overflow:hidden;cursor:pointer;border:1px solid #49627e;z-index:3}.puck span:first-child{text-align:left}.puck span:last-child{text-align:right}.puck b,.puck strong{text-align:center;font-weight:700;overflow:hidden;text-overflow:ellipsis}.puck.compactPuck{grid-template-columns:minmax(24px,1fr) minmax(30px,.9fr) minmax(24px,1fr);gap:3px}.puck.compactPuck strong{font-weight:800}.puck.compactPuck span:last-child{text-align:right}.plannedPuck{background:var(--navy);color:white;border-color:#052c58}.livePuck.complete{background:white;color:#172b43;border-color:#8794a2}.livePuck.airborne{background:var(--green);color:white;border-color:#0f5625}.livePuck.predicted{background:var(--lightgreen);color:#183f22;border-color:#88bd50}.livePuck.offblocks{background:var(--lightblue);color:#123753;border-color:#70aed6}.livePuck.slot{background:var(--slot);color:white;border-color:#b52e2c}.nowLine{position:absolute;top:0;bottom:0;width:1px;background:#e53935;z-index:7;pointer-events:none}.nowLine span{position:absolute;top:2px;transform:translateX(-50%);background:#e53935;color:white;font-size:8px;padding:2px 4px;border-radius:2px}.puckTooltip{display:none;position:fixed;z-index:100;background:#3e4653;color:white;width:355px;padding:10px 12px;font-size:11px;line-height:1.45;box-shadow:0 6px 20px #0005;pointer-events:none;border-top:3px solid var(--yellow)}.ttTitle{margin-bottom:4px}.ttGrid{display:grid;grid-template-columns:50px 1fr 50px 1fr;column-gap:5px;border-top:1px solid #aab2bd;margin-top:6px;padding-top:6px}.ttGrid span{color:#d5dae0}.flightDrawer{position:absolute;right:-350px;top:80px;width:335px;height:calc(100% - 80px);background:white;border-left:1px solid #c7d0db;box-shadow:-7px 0 24px #11243a22;z-index:20;padding:15px;transition:.2s;overflow:auto}.flightDrawer.open{right:0}.drawerClose{float:right;border:0;background:transparent;font-size:22px;padding:0}.drawerFlight{display:flex;align-items:center;gap:8px;margin-top:4px}.drawerNumber{font-size:20px;font-weight:800;color:var(--navy)}.drawerStatus{font-size:9px;padding:3px 6px;border-radius:3px;background:#e8eef5}.drawerStatus.airborne{background:var(--green);color:white}.drawerStatus.predicted{background:var(--lightgreen)}.drawerStatus.offblocks{background:var(--lightblue)}.drawerStatus.slot{background:var(--slot);color:white}.drawerStatus.complete{background:white;border:1px solid #c3ccd6}.flightDrawer h2{font-size:18px;margin:10px 0 2px}.drawerAirportNames{font-size:10px;color:#6e7c8c}.drawerSection{border-top:1px solid #e0e5eb;margin-top:14px;padding-top:9px}.drawerSection h3{font-size:10px;text-transform:uppercase;color:#5c6a7a;margin:0 0 7px}.dataGrid{display:grid;grid-template-columns:1fr 1fr;row-gap:5px;font-size:10px}.dataGrid span{color:#687687}.dataGrid b{text-align:right}.dataGrid b:nth-of-type(n){color:#193b62}#toast{display:none;position:fixed;right:22px;bottom:22px;background:#102d50;color:white;padding:12px 15px;border-radius:6px;z-index:200;font-size:12px}
@media(max-width:1000px){.cards{grid-template-columns:repeat(3,1fr)}.grid2{grid-template-columns:1fr}.legendInline{display:none}.timelineShell{grid-template-columns:105px 1fr}.timelineCorner{font-size:9px}}

.assignmentBox{margin-top:14px;padding:12px;border:1px solid #d7dee7;background:#f7f9fc;border-radius:6px;display:flex;align-items:center;justify-content:space-between;gap:14px}.assignmentBox small{display:block;color:#6b7b90;margin-top:3px}.assignmentControls{display:flex;gap:7px;align-items:center}
/* v0.2 Aircraft Control */
.unassignedStrip{display:flex;gap:8px;overflow-x:auto;padding:10px 0 16px;min-height:58px}.unassignedLeg{flex:0 0 auto;background:#083D77;color:#fff;border-radius:4px;padding:7px 10px;font-size:12px;min-width:150px}.unassignedLeg b{display:block}.acGrid{display:grid;grid-template-columns:2fr 1fr;gap:20px;margin-top:8px}.availabilityList{max-height:360px;overflow:auto;border:1px solid #dbe3ee;border-radius:6px}.availabilityItem{display:grid;grid-template-columns:100px 90px 1fr auto;gap:10px;padding:9px;border-bottom:1px solid #e6ebf2;align-items:center}.availabilityItem .kind{font-weight:700;color:#F95738}.acForm{display:grid;gap:8px;align-content:start}.acForm input,.acForm select,.swapBox input,.swapBox select{padding:8px;border:1px solid #d5deea;border-radius:5px}.swapBox{margin-top:18px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.aogBlock{position:absolute;height:calc(var(--row-height) - 8px);top:4px;background:repeating-linear-gradient(135deg,#F95738,#F95738 8px,#EE964B 8px,#EE964B 16px);border:1px solid #b63220;color:white;border-radius:3px;font-size:10px;font-weight:700;padding:3px 5px;overflow:hidden;z-index:4}.drawerTabs{display:flex;gap:3px;border-bottom:1px solid #dce3ed;margin:12px 0 8px}.drawerTabs button{background:none;color:#334155;padding:7px 8px;border-radius:0;border-bottom:2px solid transparent}.drawerTabs button.active{border-bottom-color:#083D77;color:#083D77}.editGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.editGrid label{font-size:10px;text-transform:uppercase;color:#64748b}.editGrid input,.editGrid select,.editGrid textarea{width:100%;padding:6px;border:1px solid #d6deea;border-radius:4px}.editGrid .wide{grid-column:1/-1}.historyItem{padding:7px 0;border-bottom:1px solid #e8edf4;font-size:11px}.historyItem b{display:block}.rowGuide{overflow:visible}

/* v0.2.2 Operational Times & Puck Behaviour */
.timelineShell{height:calc(100vh - 173px);min-height:320px}
.timelineScroll{overflow:auto!important;overscroll-behavior:contain;scrollbar-gutter:stable;scrollbar-width:auto;touch-action:pan-x pan-y}
.timelineScroll::-webkit-scrollbar{width:14px;height:14px}.timelineScroll::-webkit-scrollbar-track{background:#cfd6de}.timelineScroll::-webkit-scrollbar-thumb{background:#7b8795;border:3px solid #cfd6de;border-radius:7px}.timelineScroll::-webkit-scrollbar-corner{background:#cfd6de}
.timelineCanvas{min-height:100%;flex:none}.rowLabels{overflow:hidden!important}.timeHeader{overflow:hidden!important}
.aogBlock{height:18px!important;line-height:12px;padding:2px 5px!important;background:repeating-linear-gradient(135deg,#F95738,#F95738 8px,#EE964B 8px,#EE964B 16px);z-index:5}
.flightDrawer{right:-455px;width:440px;padding:14px}.flightDrawer.open{right:0}.drawerTabs{overflow-x:auto;white-space:nowrap}.drawerTabs button{flex:0 0 auto;font-size:10px}
.opsAutoState{background:#edf4fb;border-left:3px solid var(--navy);padding:8px 9px;margin-bottom:10px;font-size:10px;color:#44556a}
.timeEntry{display:grid;grid-template-columns:1fr 52px;gap:4px}.timeEntry select{min-width:0}.livePreview{background:#f7f9fc;border:1px solid #dbe3ec;border-radius:4px;padding:7px;text-transform:none!important;color:#56677a!important}
.editGrid input[type=time]{font-variant-numeric:tabular-nums}.editGrid label{display:block}.editGrid .wide input[type=date]{max-width:180px}
.dataGrid{grid-template-columns:minmax(110px,1fr) minmax(100px,1fr)}
@media(max-width:900px){.flightDrawer{width:min(92vw,440px);right:-95vw}}

/* v0.3.0: make Ops a true scrollable canvas rather than a page-within-page. */
.opsPage.active{display:flex;flex-direction:column;overflow:hidden;min-height:0}.opsToolbar,.opsSearchbar{flex:0 0 auto}.opsPage .timelineShell{flex:1 1 auto;height:auto!important;min-height:0}.opsPage .timelineScroll{height:100%;max-height:none!important;overflow:scroll!important}.opsPage .rowLabels{height:100%;min-height:0;overflow:hidden!important}.opsPage .timeHeader{min-width:0}.timelineCanvas{min-height:101%;}

/* Crew Planning */
.crewPage.active{display:flex;flex-direction:column;overflow:hidden;min-height:0}.crewToolbar{display:flex;align-items:end;gap:8px;padding:8px 0;flex:0 0 auto}.crewSummary{display:grid;grid-template-columns:repeat(7,minmax(90px,1fr));gap:7px;margin-bottom:8px;flex:0 0 auto}.crewStat{background:#fff;border:1px solid #d4dbe4;border-radius:5px;padding:8px 10px}.crewStat b{display:block;color:var(--navy);font-size:18px}.crewStat span{font-size:9px;color:#6c7b8d;text-transform:uppercase}.crewRosterShell{background:#fff;border:1px solid #bfc8d3;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden}.crewRosterHead{display:grid;grid-template-columns:230px 1fr;height:31px;background:#e8ebef;border-bottom:1px solid #bfc8d3;flex:0 0 31px;font-size:10px;font-weight:700}.crewRosterHead>div:first-child{padding:9px;border-right:1px solid #bfc8d3}.crewTimeHeader{position:relative;min-width:1440px;background:repeating-linear-gradient(to right,transparent 0,transparent 59px,#c7ced7 59px,#c7ced7 60px)}.crewHour{position:absolute;top:8px;color:#607080;font-size:9px}.crewRosterScroll{overflow:auto;min-height:0;flex:1 1 auto}.crewRosterRows{position:relative;min-width:1670px}.crewRow{display:grid;grid-template-columns:230px 1440px;height:38px;border-bottom:1px solid #d4dae2}.crewIdentity{position:sticky;left:0;z-index:5;background:#f3f5f8;border-right:1px solid #bfc8d3;padding:5px 8px;display:grid;grid-template-columns:1fr auto;align-items:center}.crewIdentity b{font-size:10px}.crewIdentity small{font-size:8px;color:#6f7c8b}.crewCycle{font-size:8px;font-weight:700;border-radius:3px;padding:3px 5px;background:#e8eef5;color:#284867}.crewTimeline{position:relative;background:repeating-linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,.5) 59px,#d7dce3 59px,#d7dce3 60px)}.crewBar{position:absolute;top:6px;height:25px;border-radius:3px;padding:5px 7px;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #5d7590}.crewBar.flight{background:#083D77;color:white}.crewBar.ad{background:#EE964B;color:#182638;border-color:#c4742f}.crewBar.hsby{background:#F4D35E;color:#1d2d40;border-color:#c3a631}.crewBar.rdo{background:#edf1f4;color:#607080;border-color:#cbd2d9}.crewBar .sub{opacity:.8;margin-left:6px}.crewUncovered{max-height:90px;overflow:auto;background:#fff6f3;border-left:4px solid #F95738;margin-top:7px;padding:6px 9px;font-size:10px;display:none}.crewUncovered.show{display:block}.puQual{color:#EE964B;font-weight:700;margin-left:5px}

/* v0.3.1 Crew FTL / ROCS-style crew Gantt */
.crewRosterHead{grid-template-columns:230px 2160px}.crewTimeHeader{min-width:2160px!important;background:repeating-linear-gradient(to right,transparent 0,transparent 59px,#c7ced7 59px,#c7ced7 60px)}
.crewRosterRows{min-width:2390px}.crewRow{grid-template-columns:230px 2160px;height:44px}.crewTimeline{overflow:visible}
.crewDutyLine{position:absolute;top:21px;height:3px;background:#20252b;z-index:1}.crewDutyLine:before,.crewDutyLine:after{content:"";position:absolute;top:-3px;width:2px;height:9px;background:#20252b}.crewDutyLine:before{left:0}.crewDutyLine:after{right:0}.crewDutyLine.rest{background:#20252b;height:2px;opacity:.72}.crewDutyLine.rest:before,.crewDutyLine.rest:after{height:6px;top:-2px}
.crewFlightPuck{position:absolute;top:7px;height:18px;background:#149bea;color:#fff;border:1px solid #0879bb;border-radius:1px;z-index:3;display:grid;grid-template-columns:auto 1fr;gap:5px;align-items:center;padding:1px 5px;font-size:8px;white-space:nowrap;overflow:hidden}.crewFlightPuck b{font-size:9px}.crewFlightPuck span{opacity:.92;overflow:hidden;text-overflow:ellipsis}
.crewReportTag,.crewReleaseTag{position:absolute;top:27px;font-size:7px;color:#555;transform:translateX(-2px);z-index:4}.crewReleaseTag{transform:translateX(-100%)}
.crewDrawer{position:absolute;right:-470px;top:0;width:455px;height:100%;background:#fff;border-left:1px solid #bfc9d6;box-shadow:-7px 0 24px #10243a26;z-index:35;padding:16px;overflow:auto;transition:.18s}.crewDrawer.open{right:0}.crewProfileHead{display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:10px;border-bottom:1px solid #e2e7ed}.crewProfileHead h2{margin:4px 0 2px;color:var(--navy)}.crewRankBadge{display:inline-block;background:var(--navy);color:#fff;padding:3px 6px;border-radius:3px;font-size:10px;font-weight:800}.puQualBig{background:#fff2d8;color:#8a5a00;border:1px solid #f4d35e;padding:5px 7px;border-radius:4px;font-size:9px;font-weight:800}.crewProfileGrid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#dfe5ec;border:1px solid #dfe5ec;margin-top:12px}.crewProfileGrid>div{background:#fff;padding:7px 8px}.crewProfileGrid span{display:block;color:#6f7c8c;font-size:8px;text-transform:uppercase}.crewProfileGrid b{font-size:10px}.dutyHero{display:flex;justify-content:space-between;background:#eef4fa;border-left:3px solid var(--navy);padding:8px}.dutyHero b{font-size:11px}.dutyHero span{font-size:9px;color:#53667c}.miniSector{display:flex;justify-content:space-between;padding:5px 7px;border-bottom:1px solid #edf0f4;font-size:9px}.miniSector b{color:var(--navy)}
.ftlHero{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px}.ftlHero>div{background:#f4f7fa;border:1px solid #e1e6ed;padding:7px}.ftlHero span{display:block;font-size:8px;color:#6c7988;text-transform:uppercase}.ftlHero b{font-size:11px;color:#183a61}.ftlRow{display:grid;grid-template-columns:1fr 120px 18px;align-items:center;padding:5px 2px;border-bottom:1px solid #edf0f4;font-size:9px}.ftlRow b{text-align:right}.ftlRow i{font-style:normal;text-align:right;font-weight:800}.ftlRow i.ok{color:#65a30d}.ftlRow i.bad{color:#d72f2f}.qualChip{display:inline-block;background:#eef4fa;border:1px solid #d0dbe7;color:#294b70;padding:4px 6px;border-radius:3px;font-size:9px;margin:2px}.emptyState{padding:12px;color:#748294;font-size:10px;background:#f7f9fb}
.crewContext{display:none;position:fixed;background:#fff;border:1px solid #aeb9c6;box-shadow:0 8px 25px #0f243933;z-index:100;min-width:220px;padding:3px}.crewContext.show{display:block}.crewContext button{display:block;width:100%;text-align:left;background:#fff;color:#1e344e;border:0;border-radius:0;padding:8px 10px;font-size:10px}.crewContext button:hover{background:#eaf1f8;color:var(--navy)}
.crewModal{display:none;position:fixed;inset:0;background:#0b1f3455;z-index:110;align-items:center;justify-content:center}.crewModal.show{display:flex}.crewModalCard{width:min(760px,90vw);max-height:78vh;overflow:auto;background:#fff;border-radius:4px;padding:16px;box-shadow:0 15px 50px #0005}.crewModalCard h3{margin-top:0;color:var(--navy)}.dutyOption{display:grid;grid-template-columns:1fr auto auto;gap:6px;align-items:center;padding:8px;border-bottom:1px solid #e4e8ed}.dutyOption b{display:block}.dutyOption small{display:block;color:#6b798a;margin-top:2px}.dutyOption button{padding:5px 9px;background:var(--navy);color:#fff}
.flightCrewList{display:grid;gap:4px}.flightCrewRow{display:grid;grid-template-columns:45px 1fr;grid-template-rows:auto auto;background:#f7f9fb;color:#233a55;border:1px solid #dce3eb;text-align:left;padding:7px;border-radius:3px}.flightCrewRow b{grid-row:1/3;align-self:center;color:var(--navy)}.flightCrewRow span{font-weight:700}.flightCrewRow small{color:#778596}

/* v0.3.2 — robust OCC canvas + Crew Control */
.rowLabels{position:relative;overflow:hidden!important}
.rowLabelsCanvas{position:absolute;left:0;right:0;top:0;will-change:transform}
.timeHeaderCanvas{will-change:transform}
.timelineScroll{overflow:auto!important;min-height:0!important;min-width:0!important;scrollbar-gutter:stable both-edges}
.timelineCanvas{display:block;position:relative;flex:none!important}
.opsPage .timelineShell{overflow:hidden}

.crewToolbar{flex-wrap:wrap;align-items:end}
.toolGroup.grow{min-width:170px;flex:1}.toolGroup.grow input{width:100%}
.crewFlightPuck.live{box-shadow:inset 0 -3px 0 #F4D35E}

.crewControlPage.active{display:flex;flex-direction:column;overflow:hidden;min-height:0}
.crewControlToolbar{display:flex;align-items:end;gap:8px;padding:8px 0;flex:0 0 auto}
.ccGrid{display:grid;grid-template-columns:minmax(0,3fr) minmax(260px,1fr);gap:9px;flex:1 1 auto;min-height:0}
.ccMain,.ccIssues{min-height:0;overflow:hidden;display:flex;flex-direction:column}
.ccTableWrap{max-height:none!important;flex:1;overflow:auto}
.ccTableWrap table{font-size:10px}.ccTableWrap th{z-index:3}
.ccRow{cursor:default}.ccRow:hover td{background:#f3f7fb}.ccRow td:first-child b{display:block;color:#173f68}.ccRow td:first-child small{color:#778596}
.ccStatus{display:inline-block;padding:3px 6px;border-radius:3px;font-size:8px;font-weight:800;background:#edf1f5;color:#4d5f73}
.ccStatus.operating{background:#daf0df;color:#176b32}.ccStatus.ad{background:#fde4c9;color:#8c4a12}.ccStatus.hsby{background:#fff1b8;color:#715b00}.ccStatus.rdo{background:#e9edf2;color:#667586}
.ccMenu{border:0;background:transparent;padding:2px 6px;font-size:16px;color:#4e6278}
.ccIssue{border-left:4px solid #F95738;background:#fff6f3;padding:8px 9px;margin-bottom:6px;display:grid;gap:2px;font-size:9px}.ccIssue b{color:#a62d1d}.ccIssue span{color:#5f6f80}.ccIssue strong{color:#d43723}
@media(max-width:1100px){.ccGrid{grid-template-columns:1fr}.ccIssues{max-height:200px}.crewControlToolbar{flex-wrap:wrap}}

/* v0.3.3 Crew Recovery & Control */
.timelineScroll{overscroll-behavior:contain;touch-action:none}
.crewControlPage.active{display:flex;flex-direction:column;overflow:hidden;min-height:0;gap:7px}
.crewControlToolbar{display:flex;align-items:end;gap:8px;flex:0 0 auto;padding-top:4px}
.ccFlightPanel{flex:0 0 auto;height:min(58vh,620px);min-height:340px;overflow:hidden;display:flex;flex-direction:column}
.ccGanttShell{display:flex;flex-direction:column;min-height:0;flex:1;overflow:hidden}
.ccGanttHead{display:grid;grid-template-columns:210px 2160px;height:30px;flex:0 0 30px;background:#e8ebef;border-top:1px solid #d4dbe4;border-bottom:1px solid #bec8d3;font-size:9px;font-weight:700;min-width:2370px}
.ccGanttHead>div:first-child{padding:8px;border-right:1px solid #bec8d3;position:sticky;left:0;z-index:8;background:#e8ebef}
.ccTimeHeader{position:relative;width:2160px;background:repeating-linear-gradient(to right,transparent 0,transparent 59px,#c7ced7 59px,#c7ced7 60px)}
.ccHour{position:absolute;top:8px;font-size:8px;color:#607080}
.ccGanttScroll{overflow:scroll;min-height:0;flex:1;overscroll-behavior:contain;scrollbar-gutter:stable both-edges;touch-action:pan-x pan-y}
#ccGanttRows{position:relative;min-width:2370px}
.ccGanttRow{display:grid;grid-template-columns:210px 2160px;height:38px;border-bottom:1px solid #d4dae2}
.ccDutyLabel{position:sticky;left:0;z-index:6;background:#f3f5f8;border-right:1px solid #bfc8d3;padding:5px 7px;overflow:hidden}
.ccDutyLabel b{display:block;font-size:9px;color:#173f68}.ccDutyLabel small{display:block;font-size:7px;color:#718090;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ccDutyTimeline{position:relative;background:repeating-linear-gradient(to right,rgba(255,255,255,.55) 0,rgba(255,255,255,.55) 59px,#d7dce3 59px,#d7dce3 60px)}
.ccDutyBar{position:absolute;top:5px;height:27px;border-radius:2px;padding:3px 7px;font-size:8px;white-space:nowrap;overflow:hidden;cursor:pointer;z-index:2;border:1px solid}
.ccDutyBar b{display:block;font-size:8px;overflow:hidden;text-overflow:ellipsis}.ccDutyBar span{display:block;font-size:7px;opacity:.88;overflow:hidden;text-overflow:ellipsis}
.ccDutyBar.rostered{background:#2f9e44;color:white;border-color:#237b34}.ccDutyBar.ftl{background:#d73737;color:white;border-color:#a92828}.ccDutyBar.uncovered{background:#7e57c2;color:white;border-color:#5d3b9f}
.ccFlightMarker{position:absolute;top:29px;height:7px;background:#082f5e;color:white;font-size:6px;line-height:7px;text-align:center;overflow:hidden;z-index:3;border-left:1px solid white}
.ccRecoveryGrid{flex:1 1 46%;min-height:220px;display:grid;grid-template-columns:1.05fr 1.05fr 1fr 1.15fr;gap:7px;overflow:hidden}
.ccRecoveryGrid>.panel{min-height:0;display:flex;flex-direction:column;overflow:hidden}.ccRecoveryList{overflow:auto;min-height:0;padding:5px}
.ccIssue.clickable{cursor:pointer}.ccIssue.clickable:hover{background:#f3eefa}
.recoveryPerson{display:grid;grid-template-columns:1fr auto;gap:1px 7px;border-bottom:1px solid #e4e8ed;padding:6px 7px;font-size:8px}.recoveryPerson b{font-size:9px;color:#173f68}.recoveryPerson span{color:#718090}.recoveryPerson strong{grid-column:2;grid-row:1/3;align-self:center;font-size:7px;background:#eef2f7;padding:3px 5px;border-radius:3px;color:#4d6177}.standbyPerson{cursor:pointer}.standbyPerson:hover{background:#f4f8fc}
.replaceHead{background:#eef3f8;border-left:4px solid var(--navy);padding:9px 11px;margin:4px 0 12px;display:grid;gap:3px}.replaceHead b{color:var(--navy);font-size:13px}.replaceHead span{font-size:9px;color:#617184}.replaceForm{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}.replaceForm label,.crewModalCard>label{font-size:9px;color:#5e6e80;display:grid;gap:4px}.replaceForm select,.replaceForm input,.crewModalCard textarea,.crewModalCard select{padding:7px;border:1px solid #c7d0db;border-radius:3px;background:#fff}
.replacementCard{width:min(850px,94vw)}.replacementList{border:1px solid #d8dee6;max-height:390px;overflow:auto;margin:6px 0 10px}.replacementCandidate{display:grid!important;grid-template-columns:1fr auto!important;gap:2px 10px;width:100%;text-align:left;border:0;border-bottom:1px solid #e5e9ee!important;background:white!important;color:#1e344e!important;padding:8px 10px!important;border-radius:0!important}.replacementCandidate:hover{background:#edf5fc!important}.replacementCandidate b{font-size:10px}.replacementCandidate span{font-size:8px;color:#6d7b8b}.replacementCandidate strong{grid-column:2;grid-row:1/3;align-self:center;color:var(--navy);font-size:8px}.dangerBtn{background:#fff!important;color:#b93027!important;border:1px solid #d65a50!important;padding:7px 10px!important}
.crewContext{min-width:240px}
@media(max-width:1100px){.ccRecoveryGrid{grid-template-columns:1fr}.ccFlightPanel{min-height:340px}.ccRecoveryGrid{overflow:auto}}
.dutyControlHead{display:flex;justify-content:space-between;background:#eef3f8;border-left:4px solid var(--navy);padding:9px 11px;margin-bottom:10px;font-size:9px}.dutyControlHead b{color:var(--navy)}.dutyCrewList{border:1px solid #d8dee6}.dutyCrewMember{display:grid;grid-template-columns:1fr auto;align-items:center;padding:7px 9px;border-bottom:1px solid #e6eaf0}.dutyCrewMember b{display:block;font-size:9px}.dutyCrewMember small{display:block;color:#718090;font-size:8px}.dutyCrewMember button,.vacancyButton{font-size:8px;padding:5px 8px}.vacancyButton{display:block;width:100%;text-align:left;background:#f4eefc;color:#5e389e;border:1px solid #cbb8e9;margin:5px 0}
/* v0.3.4 continuous roster */
.crewTimeHeader{overflow:hidden}.crewDayHeader{position:absolute;top:0;height:31px;border-left:2px solid #8d99a7;background:rgba(8,61,119,.05);padding:2px 7px;pointer-events:none}.crewDayHeader b{font-size:8px;color:#083D77}.crewHour{top:15px!important;font-size:7px!important}.crewTimeline{background:repeating-linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,.5) 59px,#d7dce3 59px,#d7dce3 60px)}
.crewBar.activity{top:7px;height:25px;font-size:8px;z-index:4}.crewBar.activity b{font-weight:800}.crewBar.usick,.crewBar.cself,.crewBar.csick{background:#8a91a0;color:#fff;border-color:#626b79}.crewBar.meeting{background:#6f42c1;color:#fff;border-color:#543199}.crewBar.gd{background:#495057;color:#fff;border-color:#343a40}.crewBar.late{background:#F95738;color:#fff;border-color:#c8422a}.crewBar.activity.hsby{background:#F4D35E;color:#1d2d40}.crewBar.activity.ad{background:#EE964B;color:#182638}
.auditList{max-height:560px;overflow:auto;border:1px solid #d8dee6}.auditItem{padding:9px 11px;border-bottom:1px solid #e6eaf0;display:grid;grid-template-columns:1fr auto;gap:3px 12px}.auditItem b{font-size:9px;color:#173f68}.auditItem span{font-size:8px;font-weight:800;color:#EE6C4D}.auditItem p{grid-column:1/3;margin:2px 0 0;font-size:9px;color:#526171}.crewModal input[type=datetime-local],.crewModal input[type=time],.crewModal input[type=date]{padding:7px;border:1px solid #c7d0db;border-radius:3px;background:white}
.crewRow{content-visibility:auto;contain-intrinsic-size:44px 4550px}.crewRosterRows{will-change:transform}.crewRosterScroll{scrollbar-gutter:stable both-edges}

/* v0.3.4a crew header scroll sync */
.crewRosterHead>div:nth-child(2){overflow:hidden;position:relative}.crewTimeHeader{will-change:transform}
/* v0.3.5 crew recovery */
.calloutDutySummary,.calloutCalc{margin:10px 0;padding:10px 12px;border:1px solid var(--line,#d9e1ea);border-radius:8px;background:#f7f9fc;display:flex;gap:12px;align-items:center;justify-content:space-between}.calloutDutySummary span,.calloutCalc{font-size:12px;color:#43536a}
/* v0.3.6 sector recovery and discretion */
.ccDutyBar.discretion{background:#d68b13!important;color:#071d34!important;border-color:#a96d08!important}.warningBtn{background:#f2b134;border:1px solid #d99716;color:#071d34;font-weight:800;border-radius:7px;padding:8px 12px;cursor:pointer}.dutyActionRow{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 16px}.segmentMissing{display:grid;grid-template-columns:minmax(180px,1fr) minmax(120px,1fr) auto;gap:8px;align-items:center;padding:9px 10px;border:1px solid #d7deea;border-radius:8px;margin:7px 0;background:#faf8ff}.segmentMissing button{margin-left:5px}.discretionNote{display:flex;flex-direction:column;gap:3px;background:#fff4dc;border:1px solid #e5b454;padding:10px;border-radius:8px;margin:8px 0}.ccIssue strong{color:#6e2b91}

/* v0.3.7 login */
.loginScreen{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:#061b31}.loginScreen.hidden{display:none}.loginBackdrop{position:absolute;inset:0;background:radial-gradient(circle at 20% 20%,rgba(0,196,255,.18),transparent 35%),linear-gradient(135deg,#04172b,#0b3154 55%,#071b31)}.loginCard{position:relative;width:min(420px,calc(100vw - 40px));padding:38px;border-radius:20px;background:rgba(255,255,255,.97);box-shadow:0 28px 80px rgba(0,0,0,.35);color:#09213a}.loginBrand{display:flex;align-items:center;gap:14px;margin-bottom:26px}.loginBrand img{width:165px;max-height:52px;object-fit:contain;object-position:left}.loginBrand span{font-size:25px;font-weight:900;letter-spacing:.18em;color:#0b3154}.loginCard h1{margin:0 0 6px;font-size:28px}.loginCard>p{margin:0 0 26px;color:#60758b}.loginCard form{display:grid;gap:16px}.loginCard label{font-size:12px;font-weight:800;color:#53697e;display:grid;gap:7px}.loginCard input{height:46px;border:1px solid #cbd7e2;border-radius:9px;padding:0 13px;font-size:15px;outline:none}.loginCard input:focus{border-color:#0b75bb;box-shadow:0 0 0 3px rgba(11,117,187,.12)}.loginCard button{height:48px;border:0;border-radius:9px;background:#0a3155;color:white;font-weight:800;font-size:15px;cursor:pointer}.loginCard>small{display:block;margin-top:22px;color:#8292a1;text-align:center}.loginError{min-height:18px;color:#b42318;font-size:13px}.signedInUser{font-size:12px;font-weight:700;color:#53697e}.recoverySelect{display:grid;grid-template-columns:55px 1fr;align-items:center;gap:10px;margin:8px 0}.recoverySelect select{width:100%;padding:9px}.dutyActionRow{display:flex;gap:8px;flex-wrap:wrap}

/* v0.3.8 Crew Portal */
.crewPortalPage{overflow:auto}.crewPortalToolbar{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin-bottom:12px}.portalPreviewNote{background:#fff3d6;border:1px solid #f2cf76;border-radius:8px;padding:9px 12px;margin-bottom:10px;color:#6d5511;font-size:12px}.portalProfile{display:flex;justify-content:space-between;align-items:center;background:#fff;border:1px solid #dce3ea;border-radius:10px;padding:12px 16px;margin-bottom:12px}.portalProfile>div:first-child{display:flex;gap:10px;align-items:center}.portalProfile small{color:#667788}.portalLayout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(320px,.8fr);gap:12px}.portalRoster,.portalChanges{max-height:66vh;overflow:auto}.portalDayCard{position:relative;display:grid;grid-template-columns:125px 1fr;gap:12px;min-height:70px;padding:10px 12px;border-bottom:1px solid #e7ebef;background:#fff}.portalDayCard.changed{padding-bottom:18px}.portalDayDate{display:flex;flex-direction:column}.portalDayDate small,.portalDayDuty>span,.portalChange span{font-size:11px;color:#6f7b87}.portalDayDuty{display:flex;flex-direction:column;gap:3px}.portalSectors,.portalActivityChips{display:flex;gap:5px;flex-wrap:wrap;margin-top:3px}.portalSectors span,.portalActivityChips span{background:#edf2f7;border-radius:4px;padding:2px 5px;font-size:10px}.ackTab{display:inline-flex;align-items:center;justify-content:center;border-radius:4px;padding:2px 7px;font-size:10px;font-weight:800;color:#fff}.ackTab.red{background:#d3374b}.ackTab.yellow{background:#e0a600;color:#302500}.ackTab.green{background:#168a55}.portalDayCard>.ackTab{position:absolute;bottom:0;left:125px;right:12px;border-radius:4px 4px 0 0;height:7px;padding:0;font-size:0}.portalAckLegend{display:flex;gap:6px}.portalChange{display:flex;justify-content:space-between;gap:12px;padding:12px;border-bottom:1px solid #e6ebef;background:#fff}.portalChange p{margin:5px 0 0;font-size:12px}.portalChangeActions{display:flex;flex-direction:column;align-items:flex-end;gap:6px;min-width:110px}.portalChangeActions button{font-size:11px;padding:5px 8px}.recoverySelect{display:grid;grid-template-columns:52px 1fr;align-items:center;gap:8px;margin:6px 0}.recoverySelect select{min-width:360px}
@media(max-width:1000px){.portalLayout{grid-template-columns:1fr}.portalChanges{max-height:none}}

/* v0.3.9a scope-first crew loading + performance UX */
.scopePrompt{background:linear-gradient(135deg,#f7f9fc,#eef3f8);border:1px solid #cbd6e2;border-left:4px solid #083D77;border-radius:5px;padding:16px 18px;margin:8px 0 12px;display:flex;gap:10px;align-items:center;color:#334a62}
.scopePrompt b{color:#083D77}.scopePrompt span{font-size:11px}.scopePrompt.loading{border-left-color:#EE964B}.scopePrompt.loaded{display:none}
.performanceBadge{font-size:9px;color:#607080;margin-left:auto;padding:3px 7px;background:#edf2f7;border-radius:3px}
#crewLoadView,#ccLoadView{min-width:104px}

.crewCycle{display:flex;flex-direction:column;align-items:flex-end;gap:1px}.crewCycle small{font-size:8px;font-weight:600;opacity:.7}.autoRosterSummary{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:8px 0 14px}.autoRosterSummary>div{padding:10px;background:#f2f5f8;border:1px solid #d7dee7;border-radius:8px;display:flex;flex-direction:column}.autoRosterSummary b{font-size:20px}.autoRosterSummary span{font-size:9px;text-transform:uppercase}.autoRosterIssues{max-height:430px;overflow:auto;display:flex;flex-direction:column;gap:6px}.autoRosterIssues button{display:grid;grid-template-columns:1.5fr 1fr 80px;text-align:left;gap:4px 10px;padding:10px;border:1px solid #d6dde6;background:white;border-radius:8px;cursor:pointer}.autoRosterIssues button:hover{background:#eef4fa}.autoRosterIssues button small{grid-column:1/-1;color:#5b6572}.autoRosterIssues strong{color:#5b2c83}


/* v0.3.11 Standby Coverage / Airport Duty planning */
.standbyPlan{margin:10px 14px 0;border:1px solid #d6dee9;border-radius:10px;background:#fff;box-shadow:0 2px 8px rgba(10,36,68,.06);overflow:hidden}
.standbyPlanHead{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;background:#f4f7fb;border-bottom:1px solid #dce4ee}.standbyPlanHead>div:first-child{display:flex;flex-direction:column;gap:2px}.standbyPlanHead b{color:#083d77}.standbyPlanHead span{font-size:12px;color:#637083}.standbyPlanTotals{display:flex;gap:8px}.standbyPlanTotals span{background:#fff;border:1px solid #d6dee9;border-radius:999px;padding:5px 9px;font-weight:700}.standbyPlanTotals .bad{color:#a3232b;border-color:#e7b9bc;background:#fff4f4}.standbyPlanTotals .ok{color:#217342;border-color:#b8dcc6;background:#f2fbf5}
.standbyPlanGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:10px}.standbyWave{display:grid;grid-template-columns:minmax(170px,1.7fr) repeat(3,minmax(70px,.55fr));gap:8px;align-items:center;border:1px solid #d9e1eb;border-left:4px solid #2e8b57;border-radius:8px;padding:9px 11px}.standbyWave.short{border-left-color:#c33;background:#fff7f7}.standbyWave>div{display:flex;flex-direction:column;gap:2px}.standbyWave>div:not(:first-child){text-align:center}.standbyWave span{font-size:11px;color:#687586}.standbyWave b{font-size:13px;color:#15304e}.autoRosterAdIssue{display:grid;grid-template-columns:1.2fr 1fr 1.3fr;gap:10px;padding:10px;border:1px solid #efc1c1;background:#fff6f6;border-radius:7px;align-items:center}.autoRosterAdIssue strong{color:#a3232b}
@media(max-width:1000px){.standbyPlanGrid{grid-template-columns:1fr}.standbyWave{grid-template-columns:1.4fr repeat(3,.6fr)}}

/* v0.4.0 Operations Control Core */
.disruptionPage{padding-bottom:24px}.disruptionCards{margin:10px 0 14px}.disruptionGrid{display:grid;grid-template-columns:1.25fr .9fr;gap:12px}.disruptionList{max-height:420px;overflow:auto}.disruptionItem{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:9px 10px;border-bottom:1px solid #d9e1e8;background:#fff}.disruptionItem button{border:0;background:transparent;color:#083D77;font-weight:700;text-align:left;padding:0;cursor:pointer}.disruptionItem .metric{font-weight:800}.disruptionItem .bad{color:#b42318}.disruptionItem .warn{color:#9a6700}.disruptionItem small{display:block;color:#64748b;margin-top:2px}.flightDrawer{width:min(610px,42vw)}.workspaceHero{display:grid;grid-template-columns:1fr auto;gap:8px;padding:8px 0 12px;border-bottom:1px solid #d7e0e8}.workspaceHero h2{margin:0}.workspaceMeta{display:flex;gap:8px;flex-wrap:wrap;color:#5f6b78;font-size:12px}.opsChip{display:inline-flex;padding:3px 7px;border-radius:4px;background:#edf2f7;font-size:11px;font-weight:700}.opsChip.bad{background:#fee4e2;color:#b42318}.opsChip.warn{background:#fff3cd;color:#7a5200}.turnBox{padding:10px;border:1px solid #dbe4ec;background:#f8fafc;margin:8px 0}.turnBox strong.bad{color:#b42318}.turnBox strong.warn{color:#9a6700}.crewFtlRow{border:1px solid #dbe4ec;border-radius:4px;margin:7px 0;background:#fff}.crewFtlHead{display:grid;grid-template-columns:52px 1fr auto auto;gap:8px;align-items:center;padding:8px}.crewFtlHead button{border:0;background:transparent;text-align:left;color:#083D77;font-weight:700;cursor:pointer}.crewFtlDetails{display:none;padding:8px 10px;border-top:1px solid #e4e9ef;background:#f8fafc}.crewFtlRow.open .crewFtlDetails{display:grid;grid-template-columns:1fr auto;gap:5px 12px}.delayAdd{display:grid;grid-template-columns:1fr 90px auto;gap:7px;margin-bottom:10px}.delayAdd select,.delayAdd input{min-width:0}.delayRow{display:grid;grid-template-columns:46px 1fr 70px 28px;gap:8px;padding:8px 0;border-bottom:1px solid #e3e8ee;align-items:center}.delayCodeBadge{background:#083D77;color:#fff;border-radius:3px;padding:3px 5px;text-align:center;font-weight:800}.delayMinutes{font-weight:800;text-align:right}.suggestionCard{padding:9px;border:1px solid #dbe4ec;border-left:4px solid #083D77;background:#fff;margin:7px 0}.suggestionCard button{margin-top:7px}.recoveryActions{display:flex;gap:7px;flex-wrap:wrap}.dangerBtn{background:#fff;color:#b42318;border:1px solid #f0a29c}.aogForm{display:grid;grid-template-columns:1fr 1fr;gap:7px}.aogForm .wide{grid-column:1/-1}.drawerTabs{overflow-x:auto;white-space:nowrap}.drawerTabs button{flex:0 0 auto}
@media(max-width:900px){.disruptionGrid{grid-template-columns:1fr}.flightDrawer{width:min(94vw,610px)}}

/* v0.4.1 Operations Recovery & Live Ops Foundation */
.flightDrawer{display:none;right:0!important}
.flightDrawer.open{display:block}
.clickableReg{cursor:pointer}.clickableReg:hover{background:#dce8f4}.clickableReg b{text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}
.persistentFlightHeader{position:sticky;top:0;z-index:3;background:#fff;border-bottom:1px solid #d7e0e8;padding:4px 0 10px;margin-bottom:8px;display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.persistentFlightHeader strong{display:block;color:#083D77;font-size:19px}.persistentFlightHeader span:not(.opsChip){display:block;color:#5f6b78;font-size:11px;margin-top:3px}
.committedOps{margin-top:14px;padding:10px;border:1px solid #d7e0e8;background:#f7f9fb}.committedOps h3{margin:0 0 8px;font-size:11px;text-transform:uppercase;color:#526170}
.liveOpsTop{display:grid;grid-template-columns:150px 1fr;gap:10px;align-items:end;padding:8px 0 12px}.liveOpsTop label{font-size:10px;font-weight:700;color:#536170}.liveOpsTop select{width:100%;margin-top:4px}.liveOpsTop b,.liveOpsTop span{display:block}.liveOpsTop span{font-size:10px;color:#6b7785;margin-top:2px}.liveOpsCols{display:grid;grid-template-columns:1fr;gap:10px}.liveOpsCols section{border:1px solid #dbe4ec;background:#fff;padding:9px}.liveOpsCols h3{font-size:11px;color:#083D77;margin:0 0 7px}.liveEvent{display:grid;grid-template-columns:14px 1fr auto;gap:7px;align-items:center;border-top:1px solid #eef2f5;padding:7px 0;font-size:11px}.liveEvent i{width:9px;height:9px;border-radius:50%;background:#d6dde5}.liveEvent.done i{background:#66c68c}.liveEvent.pending{color:#6c7784}.liveOpsFoot{margin-top:10px;padding:9px;background:#f2f5f8;border-left:3px solid #083D77}.liveOpsFoot b,.liveOpsFoot span{display:block}.liveOpsFoot span{font-size:10px;color:#697684;margin-top:2px}
.reassignBox{max-width:760px}.reassignForm{display:grid;grid-template-columns:1fr 1fr;gap:9px}.reassignForm label{display:flex;flex-direction:column;gap:4px;font-size:11px}.reassignForm .wide{grid-column:1/-1}.reassignPreview{margin-top:12px}.impactSummary{border:1px solid #c9d8e6;background:#f7fbff;padding:10px;margin-bottom:9px}.impactSummary span{display:block;color:#5c6977;font-size:11px;margin:4px 0}.impactSummary.conflict{background:#fff2f0;border-color:#f3a49d}.impactSummary.conflict>b{color:#b42318}.impactSummary.ok>b{color:#157347}
.aircraftFlightRow{width:100%;display:grid;grid-template-columns:70px 1fr auto;gap:8px;text-align:left;border:0;border-bottom:1px solid #e1e7ed;background:#fff;padding:8px;color:#173d66;cursor:pointer}.aircraftFlightRow:hover{background:#f3f7fb}
.dvRecoveryWorkspace{margin:10px 0 12px;background:white;border:1px solid #cfd9e3;padding:12px}.recoveryMiniGantt{display:flex;gap:3px;overflow-x:auto;padding:8px 0 12px}.recoveryMiniGantt button{min-width:110px;background:#0b4a83;color:white;border:0;border-radius:3px;padding:7px 8px;text-align:left}.recoveryMiniGantt button b,.recoveryMiniGantt button span,.recoveryMiniGantt button small{display:block}.recoveryMiniGantt button small{opacity:.85}.recoverySuggestionGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:8px}
@media(max-width:900px){.reassignForm{grid-template-columns:1fr}.reassignForm .wide{grid-column:auto}.persistentFlightHeader{flex-direction:column}.liveOpsTop{grid-template-columns:1fr}}
.aircraftConflict{outline:2px solid #d92d20!important;box-shadow:0 0 0 2px rgba(217,45,32,.18);z-index:8}.aircraftConflictItem{background:#fff3f2}.aircraftConflictItem button{color:#b42318!important}

/* v0.4.1a interaction + modal + swap finder */
button,[role="button"],.nav,.puck,.rowLabel.clickableReg,.unassignedLeg,.disruptionItem button,.aircraftFlightRow,.drawerTabs button,.suggestionCard button,.autoRosterIssues button{cursor:pointer}
button:hover:not(:disabled),.unassignedLeg:hover{filter:brightness(.97);box-shadow:0 1px 0 rgba(8,61,119,.14)}
button:active:not(:disabled){transform:translateY(1px)}
button:disabled{cursor:not-allowed;opacity:.5}
.modal{display:none;position:fixed;inset:0;background:rgba(7,24,42,.48);z-index:1000;align-items:center;justify-content:center;padding:24px}.modal.show{display:flex}.modalBox{position:relative;width:min(760px,94vw);max-height:84vh;overflow:auto;background:#fff;border-radius:8px;padding:18px;box-shadow:0 22px 65px rgba(0,0,0,.35)}.modalClose{position:absolute;right:10px;top:8px;border:0;background:transparent;font-size:22px}.reassignBox{width:min(780px,94vw)}
.acTabs{display:flex;gap:4px;border-bottom:1px solid #d7e0e8;margin:4px 0 12px}.acTabs button{border:0;border-radius:4px 4px 0 0;background:#edf2f7;padding:8px 12px}.acTabs button.active{background:var(--navy);color:white}.swapFinderHead{margin-top:8px}.swapFinderList{border:1px solid #dbe3ee;border-radius:6px;overflow:auto;max-height:62vh}.swapFinderItem{display:grid;grid-template-columns:80px 1fr 120px auto;gap:10px;align-items:center;padding:10px 12px;border-bottom:1px solid #e4e9ef;background:white}.swapFinderItem:hover{background:#f5f8fb}.swapFinderAirport{font-weight:900;color:var(--navy);font-size:16px}.swapFinderItem small{display:block;color:#657589;margin-top:3px}.swapFinderOverlap{font-weight:800;color:#168a55}.unassignedLeg{border:0;text-align:left}.unassignedLeg small{display:block;opacity:.82;margin-top:3px}.assignLegForm{display:grid;grid-template-columns:1fr 1fr;gap:10px}.assignLegForm label{display:grid;gap:5px;font-size:11px;font-weight:700}.assignLegForm .wide{grid-column:1/-1}.assignLegSummary{background:#f3f7fb;border-left:4px solid var(--navy);padding:10px;margin:10px 0}.eobtBadge{display:inline-flex;align-items:center;gap:5px}.eobtBadge small{font-weight:600;color:#6b7a8c}

/* v0.4.2 OCC recovery & situational awareness */
.conflictLaneFlag{position:absolute;right:6px;height:18px;line-height:18px;padding:0 7px;background:#b42318;color:#fff;border-radius:3px;font-size:10px;font-weight:800;z-index:12;pointer-events:none}.v42AogStripe{height:8px!important;line-height:8px!important;font-size:0!important;opacity:.92;border-radius:0!important;z-index:4}.v42MiniGantt button{border:2px solid transparent}.v42MiniGantt button.late{border-color:#e0a100}.v42MiniGantt button.severe{border-color:#d92d20}.v42MiniGantt button em{display:block;font-size:9px;font-style:normal;opacity:.78;margin-top:2px}.v42Suggestion{display:flex;flex-direction:column;gap:5px}.recoveryImpact{display:grid;grid-template-columns:1fr auto;gap:3px 8px;background:#f3f6f9;border-radius:4px;padding:7px;margin-top:5px}.recoveryImpact span{font-size:10px;color:#657589}.recoveryImpact b{font-size:12px}.recoveryImpact strong{grid-column:1/-1;color:#168a55;font-size:10px}.disruptionItem button{width:100%}.rowLabel.clickableReg{align-items:flex-start;justify-content:center}

/* v0.4.2b Operations multi-sector crew control */
.plannedPuck.crewUncoveredPuck{background:#6f42c1!important;border-color:#51308e!important;color:#fff!important}
.plannedPuck.opsSectorSelected{outline:3px solid #f4c542!important;outline-offset:2px;z-index:40!important}
.opsCrewContext{position:fixed;z-index:10050;width:250px;background:#fff;border:1px solid #cbd5e1;border-radius:10px;box-shadow:0 14px 38px rgba(15,23,42,.25);padding:6px;overflow:hidden}
.opsCrewContextHead{padding:8px 10px;border-bottom:1px solid #e2e8f0;margin-bottom:4px}.opsCrewContextHead b,.opsCrewContextHead small{display:block}.opsCrewContextHead small{color:#64748b;margin-top:3px;line-height:1.25}
.opsCrewContext button{display:block;width:100%;border:0;background:transparent;text-align:left;padding:9px 10px;border-radius:6px;cursor:pointer}.opsCrewContext button:hover{background:#eef5fb}.opsCrewContext button:disabled{opacity:.4;cursor:not-allowed}
.opsCrewModalBox{max-width:720px}.opsCrewSelectedSummary{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 12px}.opsCrewSelectedSummary span{background:#eef5fb;border:1px solid #d8e5f0;border-radius:6px;padding:6px 8px;font-size:12px}.opsCrewSlots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:12px 0}.opsCrewSlots label span{display:block;font-weight:700;font-size:12px;margin-bottom:4px}.opsCrewSlots select{width:100%}
@media(max-width:700px){.opsCrewSlots{grid-template-columns:1fr}}

/* v0.4.2c recovery cards */
.opsCrewCardSlots{display:grid;gap:14px}.recoverySlotCards{border-top:1px solid var(--line);padding-top:10px}.candidateCardRow{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}.crewCandidateCard{display:flex;flex-direction:column;align-items:flex-start;text-align:left;padding:10px;border:1px solid var(--line);border-radius:9px;background:var(--panel);cursor:pointer}.crewCandidateCard:hover,.crewCandidateCard.selected{border-color:#4b8cff;box-shadow:0 0 0 2px rgba(75,140,255,.18)}.crewCandidateCard strong{font-size:11px;margin:3px 0}.crewCandidateCard small{opacity:.75}.candidateFtl{display:grid;grid-template-columns:1fr auto;gap:2px 8px;width:100%;font-size:11px;margin-top:7px}.badText,.manualBad{color:#d83b3b}.manualOk{color:#21854a}.manualCrewCode{display:flex;gap:8px;align-items:center;margin-top:8px}.manualCrewCode input{min-width:180px}.dispositionGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:12px 0}.dispositionGrid button{padding:14px 8px;cursor:pointer;border:1px solid var(--line);border-radius:8px}.dispositionGrid button.selected{border-color:#4b8cff;box-shadow:0 0 0 2px rgba(75,140,255,.18)}.dispositionGrid button span{display:block;font-size:11px;opacity:.7}.pushStandbyBtn{margin-left:auto}

/* v0.4.2d crew hardening */
.ccOutHour{border-left:4px solid #d33;background:#fff4f4;padding:8px;margin:5px 0;border-radius:5px;display:grid;gap:3px}.ccOutHour b{color:#8c1515}.ccOutHour .actions{display:flex;gap:5px;flex-wrap:wrap;margin-top:4px}.activityContextNote{font-size:11px;color:#69798e;padding:6px 8px}.plannedActualGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.plannedActualGrid>div{border:1px solid #dbe3ec;border-radius:6px;padding:8px;background:#f8fafc}.plannedActualGrid span{display:block;font-size:10px;color:#6d7b8c;text-transform:uppercase}.plannedActualGrid b{display:block;margin:2px 0 6px}.inlineError{color:#a50000;background:#fff0f0;border:1px solid #efb6b6;border-radius:5px;padding:7px;margin:8px 0}.ccIssueGroup{border-left:4px solid #9346cc;background:#faf5ff;padding:8px;margin:5px 0;border-radius:5px}.ccIssueGroup .positions{font-weight:700;color:#6e2da3;margin:4px 0}.ccIssueGroup button{margin-top:5px}

/* v0.4.3 Diversions / ad-hoc / crew recovery */
#ccOutOfHoursOnly.active{background:#0b4a82;color:#fff;border-color:#0b4a82}
.v43ModalBox{max-width:900px}
.v43ReplacementCard.selected{outline:3px solid #f4d35e;background:#fff9df}
.persistentFlightHeader{align-items:center}.persistentFlightActions,.aircraftWorkspaceActions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.aircraftWorkspaceActions{padding:10px 0}
.diversionItem{border-left:4px solid #f95738}.livePuck.predicted .opsChip{font-size:10px}


/* ========================================================================
   v0.4.4 Crew Control redesign — ROCS-inspired light operational workspace
   ======================================================================== */
.cc044Page{gap:6px!important;background:#eef2f6!important;padding-bottom:4px}
.cc044Toolbar{background:#fff;border:1px solid #d7e0ea;border-radius:5px;padding:7px!important;box-shadow:0 1px 2px rgba(30,55,80,.06)}
.cc044Tabs{display:flex;gap:5px;align-items:center;flex:0 0 auto;padding:0 1px}
.cc044Tab{border:1px solid #cbd6e1;background:#fff;color:#304a65;border-radius:4px;padding:6px 10px;font-size:9px;font-weight:800;cursor:pointer}
.cc044Tab span{margin-left:5px;padding:1px 5px;border-radius:8px;background:#edf2f7}.cc044Tab.active{background:#083d77;color:#fff;border-color:#083d77}.cc044Tab.active span{background:rgba(255,255,255,.22)}
.cc044Tab.covered{color:#23783a}.cc044Tab.uncovered{color:#6943a8}.cc044Tab.warning{color:#9a6400}.cc044Tab.ftl,.cc044Tab.ooh{color:#b22525}
.cc044Workspace{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:7px;flex:1;min-height:0;overflow:hidden}.cc044Main{display:grid;grid-template-rows:minmax(250px,45%) minmax(300px,55%);gap:7px;min-width:0;min-height:0}
.cc044DutyPanel,.cc044CrewPanel{min-height:0;overflow:hidden;display:flex;flex-direction:column}.cc044DutyPanel .ccGanttShell{flex:1}
.cc044Details{background:#fff;border:1px solid #d7e0ea;border-radius:5px;min-height:0;overflow:auto;padding:10px;box-shadow:0 1px 2px rgba(30,55,80,.05)}.cc044DetailsEmpty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:#718295;gap:7px;padding:25px}.cc044DetailsEmpty b{font-size:14px;color:#24435f}.cc044DetailsEmpty span{font-size:9px;max-width:230px}
.cc044DutyPanel .ccGanttHead{grid-template-columns:185px 2160px;min-width:2345px}.cc044DutyPanel #ccGanttRows{min-width:2345px}.cc044DutyPanel .ccGanttRow{grid-template-columns:185px 2160px;height:43px}.cc044DutyPanel .ccDutyLabel{padding:5px 6px}.cc044DutyPanel .ccDutyTimeline{overflow:hidden}.cc044DutyPanel .ccDutyBar{top:6px;height:24px;border-radius:3px;padding:2px 7px}.cc044DutyPanel .ccFlightMarker{top:25px;height:6px;line-height:6px}
.cc044RestLine{position:absolute;height:2px;background:#586879;top:34px;z-index:1}.cc044RestLine:after{content:'';position:absolute;right:0;top:-2px;width:5px;height:5px;border-radius:50%;background:inherit}.cc044RestText{position:absolute;top:31px;font-size:6px;color:#64788d;white-space:nowrap}
.ccDutyBar.warning{background:#f4b942;color:#2b3540;border-color:#d29216}.ccDutyBar.ftl,.ccDutyBar.ooh{background:#d73a3a!important;color:#fff;border-color:#a51f1f!important}.ccDutyBar.uncovered{background:#7c55bd!important;color:#fff;border-color:#593995!important}.ccDutyBar.rostered{background:#2f9e44!important;color:#fff;border-color:#237b34!important}
.cc044CrewHead{display:grid;grid-template-columns:185px 2160px;height:29px;flex:0 0 29px;background:#e8edf3;border-top:1px solid #d5dde7;border-bottom:1px solid #c5d0dc;min-width:2345px;font-size:8px;font-weight:800}.cc044CrewHead>div:first-child{position:sticky;left:0;z-index:8;background:#e8edf3;border-right:1px solid #c5d0dc;padding:8px}.cc044CrewTimeHeader{position:relative;width:2160px;background:repeating-linear-gradient(to right,transparent 0,transparent 59px,#c9d3df 59px,#c9d3df 60px)}
.cc044CrewHour{position:absolute;top:8px;font-size:7px;color:#617386}.cc044CrewScroll{overflow:auto;flex:1;min-height:0;scrollbar-gutter:stable both-edges}.cc044CrewRows{min-width:2345px}.cc044CrewRow{display:grid;grid-template-columns:185px 2160px;height:42px;border-bottom:1px solid #dce3ea}.cc044CrewLabel{position:sticky;left:0;z-index:6;background:#f8fafc;border-right:1px solid #cbd6e1;padding:5px 7px;cursor:pointer}.cc044CrewLabel b{display:block;font-size:9px;color:#173f68}.cc044CrewLabel small{display:block;font-size:7px;color:#718295}.cc044CrewTimeline{position:relative;background:repeating-linear-gradient(to right,#fff 0,#fff 59px,#dfe5ec 59px,#dfe5ec 60px)}
.cc044CrewPuck{position:absolute;top:7px;height:24px;border:1px solid;border-radius:3px;padding:2px 6px;font-size:7px;overflow:hidden;white-space:nowrap;z-index:3;cursor:pointer}.cc044CrewPuck b{display:block;font-size:7px}.cc044CrewPuck.flight{background:#2f9e44;color:#fff;border-color:#237b34}.cc044CrewPuck.hsby{background:#f4d35e;color:#27384a;border-color:#c5a824}.cc044CrewPuck.ad{background:#ee964b;color:#27384a;border-color:#c6712d}.cc044CrewPuck.off{background:#edf1f5;color:#586a7e;border-color:#cbd3dc}.cc044CrewPuck.ooh{background:#d73a3a;color:#fff;border-color:#a51f1f}.cc044CrewPuck.warning{box-shadow:inset 0 0 0 2px #f4b942}.cc044CrewRest{position:absolute;top:33px;height:2px;background:#596b7e}.cc044CrewRest:after{content:'';position:absolute;right:0;top:-2px;width:5px;height:5px;border-radius:50%;background:#596b7e}
.cc044DetailTitle{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;border-bottom:1px solid #e1e7ed;padding-bottom:9px;margin-bottom:9px}.cc044DetailTitle h2{margin:0;font-size:16px;color:#133e69}.cc044DetailTitle small{display:block;color:#6d7f91;margin-top:3px}.cc044Status{font-size:8px;font-weight:900;padding:4px 7px;border-radius:4px;background:#eaf1f7;color:#486075}.cc044Status.ok{background:#dff2e3;color:#28763c}.cc044Status.warn{background:#fff0cc;color:#966100}.cc044Status.bad{background:#fde0e0;color:#ad2828}.cc044Status.purple{background:#eee5fb;color:#6b42a7}
.cc044MetricGrid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:8px 0}.cc044Metric{background:#f5f8fb;border:1px solid #e0e6ed;padding:7px;border-radius:4px}.cc044Metric span{display:block;font-size:7px;color:#718295}.cc044Metric b{display:block;font-size:11px;color:#263f58;margin-top:2px}.cc044Section{border-top:1px solid #e2e8ee;padding-top:9px;margin-top:9px}.cc044Section h3{margin:0 0 6px;font-size:10px;color:#24435f}.cc044CrewPerson{display:grid;grid-template-columns:1fr auto;gap:2px 6px;padding:6px 0;border-bottom:1px solid #edf1f5;cursor:pointer}.cc044CrewPerson b{font-size:9px;color:#213d59}.cc044CrewPerson span{font-size:7px;color:#718295}.cc044CrewPerson strong{font-size:8px;color:#2b8542}.cc044ActionRow{display:flex;gap:5px;flex-wrap:wrap;margin-top:8px}.cc044ActionRow button{font-size:8px;padding:6px 8px;cursor:pointer}.cc044Alert{border-left:4px solid #f4b942;background:#fff8e8;padding:7px;margin:5px 0;font-size:8px}.cc044Alert.bad{border-color:#d73a3a;background:#fff0f0}.cc044Alert.purple{border-color:#7c55bd;background:#f6f1fc}.cc044FdpNear{color:#9b6500!important}.cc044FdpBad{color:#b92525!important}
@media(max-width:1200px){.cc044Workspace{grid-template-columns:1fr}.cc044Details{position:absolute;right:8px;top:110px;width:340px;max-height:calc(100% - 125px);z-index:30;box-shadow:0 5px 20px rgba(0,0,0,.18)}}

/* v0.4.4a Crew Control ROCS-style workspace — sole visible Crew Control UI */
#crewcontrol.cc044Page{height:calc(100vh - 64px);min-height:620px;overflow:hidden;padding:8px;background:#eef3f8;box-sizing:border-box}
#crewcontrol .cc044Toolbar{height:auto;min-height:42px;margin:0}
#crewcontrol .cc044Tabs{min-height:34px;background:#fff;border:1px solid #d5dee8;border-radius:5px;padding:4px 6px}
#crewcontrol .cc044Workspace{min-height:0;height:calc(100% - 92px);grid-template-columns:minmax(0,1fr) 365px}
#crewcontrol .cc044Main{min-height:0;grid-template-rows:minmax(235px,43%) minmax(300px,57%)}
#crewcontrol .cc044DutyPanel,#crewcontrol .cc044CrewPanel{border:1px solid #cdd8e4;border-radius:5px;background:#fff}
#crewcontrol .panelhead{min-height:32px;padding:6px 9px}
#crewcontrol .ccGanttShell{position:relative;min-height:0;overflow:hidden}
#crewcontrol .ccGanttScroll{overflow:auto;height:calc(100% - 29px);scrollbar-gutter:stable both-edges}
#crewcontrol .ccGanttHead{height:29px;position:sticky;top:0;z-index:10;background:#e8edf3}
#crewcontrol .ccGanttRow{position:relative}
#crewcontrol .ccDutyTimeline{position:relative;background:repeating-linear-gradient(to right,#fff 0,#fff 59px,#dfe5ec 59px,#dfe5ec 60px)}
#crewcontrol .ccDutyBar{cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.08)}
#crewcontrol .ccDutyBar.rostered{background:#2d9348;border-color:#1e7635;color:#fff}
#crewcontrol .ccDutyBar.warning{background:#efad32;border-color:#c98513;color:#2c3640}
#crewcontrol .ccDutyBar.ftl{background:#d74343;border-color:#a62525;color:#fff}
#crewcontrol .ccDutyBar.uncovered{background:#7650ad;border-color:#58388a;color:#fff}
#crewcontrol .cc044RestLine{background:#43586d;height:2px}
#crewcontrol .cc044CrewRest{background:#43586d;height:2px}
#crewcontrol .cc044Details{border:1px solid #cdd8e4;background:#fff}
#crewcontrol .cc044CrewRow:hover .cc044CrewLabel,#crewcontrol .ccGanttRow:hover .ccDutyLabel{background:#edf5fd}
#crewcontrol .cc044CrewLabel b{font-size:9px}
#crewcontrol .cc044CrewPuck{top:6px;height:25px}
#crewcontrol .cc044CrewPuck.ooh{background:#d74343;border-color:#a62525}
#crewcontrol .cc044CrewPuck.flight{background:#29924a;border-color:#1f7339}
#crewcontrol .cc044CrewPuck.hsby{background:#f0cf56;border-color:#c0a02e}
#crewcontrol .cc044CrewPuck.ad{background:#e99543;border-color:#bd6f27}
#crewcontrol .cc044CrewPuck.off{background:#e9eef3;border-color:#c3ced9}
#crewcontrol .cc044Tab{font-size:9px;padding:6px 11px}
@media(max-width:1350px){#crewcontrol .cc044Workspace{grid-template-columns:minmax(0,1fr) 320px}}


/* ========================================================================
   v0.4.4b Crew Control finish pass — Operations-style compact duty pucks
   ======================================================================== */
#crewcontrol .cc044DutyPanel .ccGanttRow.cc044bDutyRow{height:38px}
#crewcontrol .cc044DutyPanel .ccDutyLabel{padding:4px 6px}
.cc044bDutyLabelTop{display:flex;align-items:center;gap:5px}.cc044bDutyLabelTop b{font-size:9px}.cc044bMiniStatus{width:7px;height:7px;border-radius:50%;display:inline-block;flex:none}.cc044bMiniStatus.rostered{background:#1f8f46}.cc044bMiniStatus.warning{background:#e5a11a}.cc044bMiniStatus.ftl{background:#cf3535}.cc044bMiniStatus.uncovered{background:#7a4db1}
#crewcontrol .cc044bDutyTimeline{overflow:hidden;position:relative;background:repeating-linear-gradient(to right,#fff 0,#fff 59px,#dfe5ec 59px,#dfe5ec 60px)}
.cc044bDutyLine{position:absolute;top:19px;height:2px;background:#344d65;z-index:1}.cc044bDutyLine:before,.cc044bDutyLine:after{content:'';position:absolute;top:-2px;width:5px;height:5px;border-radius:50%;background:#344d65}.cc044bDutyLine:before{left:0}.cc044bDutyLine:after{right:0}.cc044bDutyLine.warning{background:#b57b0a}.cc044bDutyLine.ftl{background:#b52222}.cc044bDutyLine.uncovered{background:#68439d}
.cc044bDutyMarker{position:absolute;top:27px;font-size:5px;color:#65798c;z-index:2;transform:translateX(-2px)}
.cc044bFlightPuck{position:absolute;top:7px;height:19px;border:1px solid #063762;border-radius:2px;background:#07508b;color:#fff;display:flex;align-items:center;justify-content:space-between;gap:4px;padding:1px 5px;font-size:6px;font-weight:700;overflow:hidden;white-space:nowrap;z-index:4;cursor:pointer;box-shadow:none}.cc044bFlightPuck b{font-size:7px}.cc044bFlightPuck.warning{background:#e6a72a;border-color:#b47a0c;color:#263849}.cc044bFlightPuck.ftl{background:#cf3838;border-color:#9f2222}.cc044bFlightPuck.uncovered{background:#7750ad;border-color:#573684}.cc044bFlightPuck:hover{filter:brightness(1.08);z-index:6}
#crewcontrol .cc044DutyPanel .ccDutyBar{display:none!important}
#crewcontrol .cc044DutyPanel .ccFlightMarker{display:none!important}
#crewcontrol .cc044RestLine{top:31px}
#crewcontrol .cc044CrewPuck.flight{background:#07508b;border-color:#063762;color:#fff}
#crewcontrol .cc044CrewPuck.ooh{background:#cf3838;border-color:#9f2222;color:#fff}
#crewcontrol .cc044CrewPuck.hsby{background:#f0cf56;border-color:#c0a02e;color:#263849}
#crewcontrol .cc044CrewPuck.ad{background:#e99543;border-color:#bd6f27;color:#263849}
.cc044bDayLabel{position:absolute;top:0;font-size:7px;font-weight:900;color:#123f69;background:#e8edf3;padding-right:5px;z-index:2}.cc044CrewTimeHeader .cc044bDayLabel{top:0}
#crewcontrol .ccTimeHeader,#crewcontrol .cc044CrewTimeHeader{height:29px}.cc044CrewHour,#crewcontrol .ccHour{top:14px!important}
#crewcontrol .cc044Toolbar select#ccDays{min-width:76px}

/* v0.4.5 Flight Planning Core */
.fpEmpty{padding:18px;border:1px dashed #b8c4d2;border-radius:8px;background:#f8fbff}.fpEmpty h3{margin:0 0 6px;color:#0d315c}.fpHero{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:12px 0;border-bottom:1px solid #dce4ed}.fpHero h3{margin:0;color:#0b396b}.fpHero p{margin:4px 0 0;font-size:11px;color:#69798b}.fpActions{display:flex;gap:6px;align-items:center}.fpAccepted{padding:5px 8px;border-radius:5px;background:#e5f7eb;color:#17763a;font-weight:700}.fpSection{margin-top:14px;padding-top:2px}.fpSection h3{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:#42566d;margin:0 0 8px}.fpGrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.fpGrid label{display:flex;flex-direction:column;gap:3px;font-size:10px;color:#64758a;font-weight:700}.fpGrid label.wide{grid-column:1/-1}.fpGrid input{border:1px solid #c8d3df;border-radius:4px;padding:7px 8px;font:inherit;color:#14283e;background:#fff}.fpFuelSummary{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:9px}.fpFuelSummary>div{border:1px solid #d9e2ec;background:#f6f9fc;border-radius:5px;padding:7px}.fpFuelSummary span{display:block;font-size:9px;color:#6e7d8e;text-transform:uppercase}.fpFuelSummary b{font-size:13px;color:#183b63}.fpFuelSummary .total{background:#eaf3ff;border-color:#a8c9ef}.fpFuelSummary .total b{color:#0757a8}.fpNotice{margin:12px 0;padding:9px;border-left:3px solid #4f8fcf;background:#f4f8fc;color:#5a6d80;font-size:10px;line-height:1.45}

/* v0.4.6 Flight Planning weather */
.fpWeatherMeta{display:flex;justify-content:space-between;gap:10px;padding:7px 9px;background:#eef4fa;border-left:3px solid var(--navy);font-size:10px}.fpWeatherMeta span{color:#66788d}.fpWxGrid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:8px}.fpWxGrid>div{border:1px solid #dce4ed;background:#f8fafc;padding:7px;border-radius:4px;min-width:0}.fpWxGrid span,.fpUpperWind span{display:block;font-size:8px;text-transform:uppercase;color:#6d7b8c;margin-bottom:4px}.fpWxGrid code{display:block;white-space:normal;font-family:ui-monospace,Consolas,monospace;font-size:9px;line-height:1.35;color:#173b62}.fpUpperWind{margin-top:7px;padding:7px;border:1px solid #dce4ed;background:#fff;font-size:10px}.fpAccepted{color:#176b32;font-weight:700;font-size:10px}


/* v0.4.7 LiveOPS */
.liveOpsWaiting{border-left:4px solid var(--navy);background:#f4f7fb;padding:18px;display:grid;gap:6px}.liveOpsWaiting b{font-size:15px;color:var(--navy)}.liveOpsWaiting span,.liveOpsWaiting small{color:#66778b}.liveOpsTop{display:grid;grid-template-columns:150px 1fr;gap:12px;align-items:center;margin-bottom:10px}.liveOpsTop label{font-size:9px;text-transform:uppercase;color:#66778b}.liveOpsTop select{display:block;width:100%;margin-top:4px}.liveOpsTop b{display:block;font-size:17px;color:var(--navy)}.liveOpsTop span{font-size:10px;color:#738195}.loCritical{display:flex;justify-content:space-between;align-items:center;background:#eef5fb;border-left:4px solid var(--navy);padding:9px 10px;margin-bottom:8px;font-size:10px}.loCritical b{color:var(--navy)}.loCritical strong{font-size:13px}.loGroup{border-top:1px solid #dde5ee;padding:8px 0}.loGroup h3{display:flex;justify-content:space-between;color:var(--navy);font-size:11px;margin:0 0 4px}.loGroup h3 small{font-weight:400;color:#718096}.loEvent{display:grid;grid-template-columns:21px 1fr 44px 45px;align-items:center;min-height:28px;border-bottom:1px solid #edf1f5;font-size:10px}.loEvent i{width:16px;height:16px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-weight:bold}.loEvent time{text-align:right}.loOffset{text-align:center;padding:3px 4px;border-radius:4px;font-weight:800}.loGreen i{background:#b9efcc;color:#0b6a31}.loGreen .loOffset{background:#e4e8ef;color:#3d4a5a}.loRed i{background:#ffd2d2;color:#a41414}.loRed b{color:#c62828}.loRed .loOffset{background:#df3038;color:#fff}.loPending i{background:#e6ebf1;color:#8995a4}.loPending{color:#7c8998}.loPending .loOffset{background:#f0f3f7;color:#6d7885}.liveOpsPage.active{display:flex;flex-direction:column;overflow:hidden}.liveOpsPageToolbar{display:flex;gap:12px;align-items:end;background:#fff;border:1px solid #d3dbe5;padding:10px;border-radius:6px;margin-bottom:8px}.liveOpsPageToolbar>div:first-child{margin-right:auto}.liveOpsPageToolbar h2{margin:0;color:var(--navy);font-size:17px}.liveOpsPageToolbar>div:first-child span{font-size:10px;color:#738195}.liveOpsStats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:8px}.liveOpsStats>div{background:#fff;border:1px solid #d3dbe5;border-radius:6px;padding:12px}.liveOpsStats b{display:block;font-size:25px;color:var(--navy)}.liveOpsStats span{font-size:10px;color:#68788b}.liveOpsTablePanel{flex:1;min-height:0;overflow:hidden}.liveOpsTablePanel .tablewrap{max-height:calc(100vh - 245px)}.liveOpsTable tbody tr{cursor:pointer}.liveOpsTable tbody tr:hover{background:#f0f6fb}.loCellGood{background:#d8f4df!important}.loCellBad{background:#ffdcdc!important;color:#b51f1f;font-weight:700}.loState{padding:3px 6px;border-radius:4px;font-size:9px;font-weight:700;background:#e8eef5}.loState.in_progress{background:#dceafa;color:#174f87}.loState.complete{background:#d9f2df;color:#176b32}

/* v0.4.7a LiveOPS progressive critical-path display */
.loLegend,.loEvent{grid-template-columns:21px minmax(120px,1fr) 48px 48px 46px!important;column-gap:6px}.loLegend{align-items:center;padding:4px 0 5px;border-bottom:1px solid #dce5ee;font-size:8px;text-transform:uppercase;color:#758399}.loLegend strong{text-align:center}.loLegend strong:last-child{text-align:right}.loEvent time{text-align:right;color:#526173}.loTarget,.loActual{text-align:center;padding:3px 4px;border-radius:4px;font-weight:800;font-variant-numeric:tabular-nums}.loTarget{background:#dce9fb;color:#0b4f91;border:1px solid #c7dcf6}.loActual{background:#eef2f6;color:#788595}.loGreen .loActual{background:#d9f3e2;color:#126b34;border:1px solid #b6e5c5}.loRed .loActual{background:#df3038;color:#fff;border:1px solid #c8212a}.loPending .loActual{background:#f2f4f7;color:#a0a9b5}.loPending .loTarget{background:#e4eefb;color:#356596}.loGreen b{color:#1f3b2b}.loCritical span{font-variant-numeric:tabular-nums}

/* v0.4.8 Overnight Ops Simulator */
.simulatorStatus{display:flex;align-items:center;gap:6px;border:1px solid #cbd5e1;background:#f8fafc;border-radius:5px;padding:6px 9px;font-size:10px;color:#64748b;white-space:nowrap}.simulatorStatus small{color:#8492a6;margin-left:2px}.simDot{width:8px;height:8px;border-radius:50%;background:#94a3b8;box-shadow:0 0 0 2px #e2e8f0}.simulatorStatus.on{background:#eef8f1;border-color:#9dccaa;color:#176b32}.simulatorStatus.on .simDot{background:#22a447;box-shadow:0 0 0 2px #cfead6}.simStop{border-color:#d45d55!important;color:#9f2922!important;background:#fff5f4!important}.loProfile{display:block;font-size:8px;color:#75859a;margin-top:2px;text-transform:uppercase}.loCritical strong{font-variant-numeric:tabular-nums}

/* v0.4.8a crew identity cards / employer profiles */
.crewRow{height:54px}
.crewIdentity{padding:3px 6px!important;display:block!important}
.crewIdCard{width:100%;height:100%;display:grid;grid-template-rows:16px 13px 16px;align-content:center;gap:0;font-variant-numeric:tabular-nums}
.crewIdTop{display:grid;grid-template-columns:10px 1fr auto;align-items:center;gap:4px;min-width:0}.crewIdTop b{font-size:10px!important;letter-spacing:.02em;color:#153e69;overflow:hidden;text-overflow:ellipsis}.crewIdTop strong{font-size:8px;color:#172f4b}
.crewLegalDot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#2aa65a;box-shadow:0 0 0 1px #ffffff}.crewLegalDot.green{background:#2aa65a}.crewLegalDot.yellow{background:#e5a11a}.crewLegalDot.red{background:#df3d3d}
.crewIdMeta{display:flex;justify-content:space-between;gap:5px;min-width:0;font-size:7px;color:#65778a}.crewIdMeta span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crewIdMeta b{font-size:7px!important;color:#243e5d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.crewIdStats{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,8px);font-size:6.5px;line-height:8px;color:#5e6f82;text-align:center}.crewIdStats span{border-right:1px solid #e5eaf0}.crewIdStats span:nth-child(3n){border-right:0}.crewIdCard.compact .crewIdMeta span{display:none}.crewIdCard.compact .crewIdStats{font-size:6px}
.crewProfileStatus{display:flex;align-items:center;gap:5px;font-size:9px;color:#52677e}.crewProfileLine{display:grid;grid-template-columns:minmax(150px,1fr) minmax(140px,1fr);gap:8px;padding:7px 3px;border-bottom:1px solid #edf1f5;font-size:9px}.crewProfileLine span{color:#6d7d8e}.crewProfileLine b{text-align:right;color:#173d65}
.cc044CrewRow{height:54px!important}.cc044CrewLabel{padding:3px 6px!important}.cc044CrewHead{grid-template-columns:230px 2160px!important;min-width:2390px!important}.cc044CrewRows{min-width:2390px!important}

.dispatcherRemarks{margin-top:14px;border-top:2px solid #164f82;background:#f5f8fb;padding:10px 12px}.dispatcherRemarks h3{margin:0 0 6px;font-size:10px;text-transform:uppercase;color:#164f82}.dispatcherRemarks p{margin:0;font-size:11px;font-weight:700;color:#25384c;line-height:1.45}


/* v0.4.8d Ops tabs / CTOT / alignment / LiveOPS monitoring drawer */
.opsModeTabs{display:flex;gap:5px;padding:5px 0 4px;flex:0 0 auto}.opsModeTabs button{border:1px solid #cbd6e1;background:#fff;color:#304a65;border-radius:4px;padding:6px 11px;font-size:10px;font-weight:800;cursor:pointer}.opsModeTabs button.active{background:#083d77;color:#fff;border-color:#083d77}.opsModeTabs button span{margin-left:5px;background:#e9eef4;border-radius:10px;padding:1px 6px;color:#384d63}.opsModeTabs button.active span{background:#ffffff2b;color:#fff}
.ctotView{flex:1;min-height:0;overflow:auto}.ctotView .panel{margin:0}.ctotTable{width:100%;border-collapse:collapse;font-size:11px}.ctotTable th,.ctotTable td{padding:9px 10px;border-bottom:1px solid #dde4eb;text-align:left}.ctotTable tbody tr{cursor:pointer}.ctotTable tbody tr:hover{background:#f0f5fa}.ctotHeld{font-size:9px;font-weight:900;padding:4px 7px;border-radius:4px;background:#e8eef5}.ctotHeld.held{background:#d6403a;color:#fff}
/* stable only on the scrollbar side: both-edges introduced a left gutter that offset the puck canvas from the time header */
.timelineScroll{scrollbar-gutter:stable!important}.timeHeaderCanvas,.timelineCanvas{transform-origin:0 0}
.liveOpsPage{position:relative;overflow:hidden}.liveOpsPageDrawer{position:absolute;right:-650px;top:0;width:min(620px,52vw);height:100%;background:#fff;border-left:1px solid #c7d0db;box-shadow:-7px 0 24px #11243a22;z-index:50;padding:15px;transition:.2s;overflow:auto;box-sizing:border-box}.liveOpsPageDrawer.open{right:0}.liveOpsDrawerHero{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #dde4eb;padding:3px 30px 10px 0;margin-bottom:10px}.liveOpsDrawerHero h2{margin:0;font-size:17px;color:#123d69}.liveOpsDrawerHero span{font-size:10px;color:#64748b}

/* v0.4.8e CTOT/ASRT split-state */
.slotHoldPuck{z-index:5!important}.slotPredictionPuck{z-index:4!important}.slotHoldPuck+ .slotPredictionPuck{border-left-color:rgba(0,0,0,.18)}


/* v0.4.8f Operations filter/list framework */
.opsFilterBar{display:flex;align-items:center;gap:5px;padding:5px 0 4px;overflow-x:auto;flex:0 0 auto;white-space:nowrap}
.opsFilterBar button,.opsListTabs button{border:1px solid #cbd6e1;background:#fff;color:#304a65;border-radius:4px;padding:6px 9px;font-size:9px;font-weight:800;cursor:pointer;white-space:nowrap}
.opsFilterBar button.active,.opsListTabs button.active{background:#083d77;color:#fff;border-color:#083d77}
.opsFilterBar button .count,.opsListTabs button .count{display:inline-block;margin-left:4px;min-width:16px;text-align:center;background:#e9eef4;color:#384d63;border-radius:10px;padding:1px 4px;font-size:8px}
.opsFilterBar button.active .count,.opsListTabs button.active .count{background:#ffffff2b;color:#fff}
.opsListDock{flex:0 0 auto;background:#f7f9fb;border:1px solid #cbd4de;border-top:0}
.opsListTabs{display:flex;gap:4px;padding:5px 6px;overflow-x:auto;white-space:nowrap}
.opsListView{max-height:290px;overflow:auto;background:#fff;border-top:1px solid #d9e0e7}
.opsListHeader{display:flex;justify-content:space-between;align-items:center;padding:9px 11px;border-bottom:1px solid #e1e6ec;background:#f8fafc}
.opsListHeader h3{margin:0;color:#183b61;font-size:12px}.opsListHeader small{color:#6c7886;font-size:9px}
.opsUniversalTable{width:100%;border-collapse:collapse;font-size:10px}.opsUniversalTable th,.opsUniversalTable td{padding:7px 9px;border-bottom:1px solid #e3e8ee;text-align:left;white-space:nowrap}.opsUniversalTable th{position:sticky;top:0;background:#edf2f6;color:#526273;font-size:8px;text-transform:uppercase;z-index:2}.opsUniversalTable tbody tr{cursor:pointer}.opsUniversalTable tbody tr:hover{background:#f1f6fb}.opsUniversalTable .bad{color:#b12622;font-weight:800}.opsUniversalTable .warn{color:#9a6700;font-weight:800}.opsUniversalTable .good{color:#147436;font-weight:800}
.opsCategoryBadge{display:inline-block;font-size:8px;font-weight:900;padding:3px 6px;border-radius:3px;background:#e8eef5;color:#304a65}.opsCategoryBadge.red{background:#d6403a;color:#fff}.opsCategoryBadge.blue{background:#cde9fa;color:#174663}.opsCategoryBadge.green{background:#1f7b3c;color:#fff}.opsCategoryBadge.amber{background:#fff0c7;color:#805d00}.opsCategoryBadge.purple{background:#e9def8;color:#5d3785}
.opsPage.listMode #opsTimelineShell{display:none!important}.opsPage.listMode #opsBoardSearch{display:none!important}.opsPage.listMode .opsListView{display:block!important;max-height:none;flex:1 1 auto}.opsPage.listMode .opsListDock{display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.opsPage.listMode .opsListTabs{flex:0 0 auto}
.opsPage:not(.listMode) .opsListView{display:none!important}
@media(max-width:1200px){.opsFilterBar button,.opsListTabs button{font-size:8px;padding:5px 7px}}


/* v0.4.9 Crew Support / HQ roster */
.crewSupportLayout{display:grid;grid-template-columns:minmax(420px,.95fr) minmax(480px,1.25fr);gap:14px}.crewSimMode{display:flex;align-items:center;gap:6px}.crewSimMode button{border:1px solid #cbd5e1;background:#fff;border-radius:7px;padding:7px 10px}.crewSimMode button.active{background:#0f2746;color:#fff;border-color:#0f2746}.csTicketList{display:flex;flex-direction:column;max-height:68vh;overflow:auto}.csTicket{display:grid;grid-template-columns:1fr auto auto;gap:12px;text-align:left;border:0;border-bottom:1px solid #e5e7eb;background:#fff;padding:13px 14px;align-items:center}.csTicket:hover{background:#f8fafc}.csTicket.new{border-left:4px solid #dc2626}.csTicket div{display:flex;flex-direction:column;gap:4px}.csTicket span,.csTicket small{color:#64748b}.csThreadPanel{min-height:620px}.csTicketHero,.csCrewContext{display:flex;flex-direction:column;gap:5px;padding:14px;border-bottom:1px solid #e5e7eb}.csTicketHero{background:#f8fafc}.csCrewContext{background:#eef6ff}.csMessages{padding:14px;display:flex;flex-direction:column;gap:10px;max-height:330px;overflow:auto}.csMsg{max-width:84%;padding:10px 12px;border-radius:10px;background:#eef2f7}.csMsg.hq{margin-left:auto;background:#dbeafe}.csMsg>div{display:flex;gap:5px;align-items:center}.csMsg small{margin-left:auto;color:#64748b}.csMsg p{margin:6px 0 0}.csReply{padding:12px;border-top:1px solid #e5e7eb;display:grid;grid-template-columns:1fr auto;gap:8px}.csReply textarea{min-height:58px;resize:vertical}.csActions{padding:12px;display:flex;gap:7px;flex-wrap:wrap;border-top:1px solid #e5e7eb}.csActions b{width:100%}.hqRosterTable{white-space:nowrap}.hqShift{display:inline-block;padding:4px 7px;border-radius:999px;font-weight:700;font-size:11px}.hqShift.early{background:#dbeafe;color:#1d4ed8}.hqShift.late{background:#ede9fe;color:#6d28d9}.hqShift.off{background:#f1f5f9;color:#64748b}@media(max-width:1100px){.crewSupportLayout{grid-template-columns:1fr}}

/* v0.4.9a standby activation marker */
.crewBar.called,.crewBar.activity.called{background:#0b5cab;color:#fff;border-color:#084780;font-weight:800}.cc044CrewPuck.called{background:#0b5cab;color:#fff;border-color:#084780}


/* v0.4.9c Crew Details */
.crewDetailsPanel{margin-top:10px}.crewDetailsTable{width:100%;border-collapse:collapse}.crewDetailsTable th,.crewDetailsTable td{padding:10px 12px;border-bottom:1px solid #d9e2ec;text-align:left}.crewDetailsTable tbody tr{cursor:pointer}.crewDetailsTable tbody tr:hover{background:#eef6ff}.crewCodeLink{border:0;background:none;padding:0;color:#064a86;font-weight:800;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.crewActiveBadge{display:inline-block;padding:3px 7px;border-radius:4px;background:#dff4e6;color:#176b38;font-size:11px;font-weight:800}.crewProfileTabs{display:flex;gap:4px;position:sticky;top:0;z-index:3;background:#fff;padding:8px 0 10px;border-bottom:1px solid #d6e0ea;margin-bottom:6px}.crewProfileTabs button{border:1px solid #c6d4e2;background:#f4f7fa;color:#15324d;border-radius:4px;padding:7px 12px;font-weight:700;cursor:pointer}.crewProfileTabs button.active{background:#084b83;color:#fff;border-color:#084b83}.attendanceSummary{display:grid;grid-template-columns:repeat(auto-fit,minmax(105px,1fr));gap:8px}.attendanceTotal,.attendanceCount{border:1px solid #d7e1eb;border-radius:5px;padding:10px;background:#f7f9fb}.attendanceTotal b,.attendanceCount b{display:block;font-size:22px;color:#083f70}.attendanceTotal span,.attendanceCount span{font-size:11px;color:#607489;text-transform:uppercase}.attendanceHistory{display:flex;flex-direction:column;gap:7px}.attendanceRow{border:1px solid #d7e1eb;border-left:4px solid #0b4d83;border-radius:4px;padding:9px 11px;background:#fff}.attendanceRow>div{display:flex;justify-content:space-between;gap:12px}.attendanceRow p{margin:5px 0;color:#334e68}.attendanceRow small{color:#7b8fa3}.crewDetailsToolbar{align-items:end}

/* v0.5.0 Schedule Planning */
.schedulePlanningPage{padding-bottom:24px}.scheduleTopbar,.scheduleProgrammeHead,.scheduleBuilderToolbar{display:flex;align-items:center;gap:16px;justify-content:space-between;background:#fff;border:1px solid #dfe5ec;border-radius:10px;padding:14px 16px;margin-bottom:10px}.scheduleTopbar h2,.scheduleProgrammeHead h3{margin:0}.scheduleTopbar span,.scheduleProgrammeHead p{color:#657384;font-size:12px;margin:3px 0 0}.scheduleSeasonControls{display:flex;align-items:end;gap:10px}.scheduleSeasonControls label{display:flex;flex-direction:column;font-size:11px;color:#667}.scheduleSeasonControls select{min-width:220px}.scheduleState{font-weight:800;font-size:11px;padding:7px 10px;border-radius:999px;background:#e8eef7;color:#264a76}.scheduleMainTabs{display:flex;gap:4px;margin:8px 0 12px}.scheduleMainTabs button{border:1px solid #ccd5df;background:#f4f7fa;padding:9px 16px;border-radius:8px;font-weight:700}.scheduleMainTabs button.active{background:#173f6d;color:#fff;border-color:#173f6d}.schedBaseAlloc{display:flex;gap:10px;flex-wrap:wrap;padding:10px}.schedBaseCard{display:grid;grid-template-columns:auto 70px;gap:3px 10px;align-items:center;border:1px solid #dbe2e9;border-radius:8px;padding:9px 11px;background:#f8fafc}.schedBaseCard b{font-size:15px;grid-row:1/3}.schedBaseCard span{font-size:10px;color:#718096}.schedBaseCard input{width:62px}.schedProgrammeTable{min-width:1250px}.schedProgrammeTable input{width:58px;padding:5px}.schedProgrammeTable input.tiny{width:52px;text-transform:uppercase}.pairInputs{display:flex;gap:3px}.pairInputs input{width:70px}.iconBtn.danger{color:#a52b2b}.scheduleBuilderToolbar{justify-content:flex-start}.scheduleLegend{display:flex;align-items:center;gap:6px;font-size:11px;color:#59697a}.scheduleLegend i{width:20px;height:8px;border-radius:2px;display:inline-block;margin-left:8px}.scheduleLegend i.flight{background:#8bc7a0}.scheduleLegend i.turn{background:#276d48}.scheduleLegend i.crewchange{background:#163e75}.scheduleLegend i.overnight{background:#e6c84a}.scheduleBuilderWorkspace{display:grid;grid-template-columns:230px minmax(720px,1fr) 250px;gap:10px;align-items:start}.schedulePool,.scheduleCanvasPanel,.scheduleFdpPanel{background:#fff;border:1px solid #dfe5ec;border-radius:10px;overflow:hidden}.schedulePool{padding:10px;min-height:420px}.schedFlightPool{display:flex;flex-direction:column;gap:7px}.schedPoolCard{border:1px solid #b8c7d5;border-left:4px solid #5b9f71;border-radius:7px;padding:8px;background:#f6fbf8;cursor:grab}.schedPoolCard b,.schedPoolCard span,.schedPoolCard small{display:block}.schedPoolCard span{font-size:12px}.schedPoolCard small{font-size:10px;color:#687788;margin-top:3px}.scheduleCanvasPanel{overflow:auto}.schedTimeHead{display:grid;grid-template-columns:115px 1620px;position:sticky;top:0;z-index:4;background:#fff;border-bottom:1px solid #cdd6df}.schedLineCorner{padding:10px;font-size:11px;font-weight:800;background:#eef3f7;position:sticky;left:0;z-index:5}.schedTimeScale{position:relative;height:34px;width:1620px;background:repeating-linear-gradient(to right,#dce3ea 0,#dce3ea 1px,transparent 1px,transparent 60px)}.schedTimeScale span{position:absolute;top:9px;transform:translateX(-50%);font-size:10px;color:#536274}.schedLines{min-width:1735px}.schedLineRow{display:grid;grid-template-columns:115px 1620px;min-height:54px;border-bottom:1px solid #e2e7ec}.schedLineRow.selected{box-shadow:inset 0 0 0 2px #4479ad}.schedLineLabel{position:sticky;left:0;z-index:3;border:0;border-right:1px solid #cdd6df;background:#f4f7f9;text-align:left;padding:8px;color:#263b50}.schedLineLabel b,.schedLineLabel span{display:block}.schedLineLabel span{font-size:9px;color:#778392}.schedLineTimeline{position:relative;height:54px;background:linear-gradient(to right,rgba(229,198,72,.18),rgba(229,198,72,.18)),repeating-linear-gradient(to right,#e5e9ee 0,#e5e9ee 1px,transparent 1px,transparent 60px)}.schedLineTimeline.dragover{background-color:#e8f3ff}.schedBlock{position:absolute;top:9px;height:35px;overflow:hidden;display:flex;align-items:center;justify-content:center;border-radius:3px;color:#fff;font-size:9px;z-index:2;box-sizing:border-box}.schedBlock.flight{background:#78b98e;color:#0d3920;border:1px solid #3f8257;flex-direction:column}.schedBlock.flight b{font-size:9px}.schedBlock.flight span{font-size:8px;white-space:nowrap}.schedBlock.turn{background:#276d48}.schedBlock.crewchange{background:#163e75}.schedBlock.turn span,.schedBlock.crewchange span{font-size:8px}.scheduleFdpPanel{padding:10px;min-height:420px}.schedFdpTitle{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.schedFdpTitle span{font-size:10px;color:#667}.schedFdpCard{border:1px solid #ccd6df;border-radius:7px;padding:8px;margin-bottom:8px}.schedFdpCard>div{display:flex;justify-content:space-between}.schedFdpCard>div span{font-size:10px;color:#667}.schedFdpCard dl{display:grid;grid-template-columns:1fr auto;gap:4px;margin:8px 0 0;font-size:11px}.schedFdpCard dt{color:#667}.schedFdpCard dd{margin:0;font-weight:700}.schedFdpCard.tight{border-color:#dcaa42;background:#fff9ea}.schedFdpCard.illegal{border-color:#c74a4a;background:#fff0f0}.scheduleValidation{display:flex;gap:8px;margin-top:10px}.scheduleValidation>div{flex:1;background:#fff;border:1px solid #dfe5ec;border-radius:8px;padding:9px 12px}.scheduleValidation b,.scheduleValidation span{display:block}.scheduleValidation span{font-size:10px;color:#677687}.scheduleValidation .ok{border-left:4px solid #3a8b58}.scheduleValidation .warn{border-left:4px solid #d2982b}.scheduleValidation .bad{border-left:4px solid #bc3b3b}.scheduleActivateCard label{display:flex;flex-direction:column;gap:4px;margin:9px 0}.scheduleActivateCard textarea{font-family:monospace}.scheduleActivateCard{max-width:520px}@media(max-width:1200px){.scheduleBuilderWorkspace{grid-template-columns:200px minmax(600px,1fr)}.scheduleFdpPanel{grid-column:1/-1}.scheduleTopbar{align-items:flex-start;flex-direction:column}}

/* v0.5.1 Scheduler interaction polish */
.schedPlacedFlight{cursor:grab;user-select:none}
.schedPlacedFlight:active{cursor:grabbing}
.schedLineTimeline.dragover{outline:2px dashed #2b6cb0;outline-offset:-2px}

.simTop,.euroBar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px}.simTop h2{margin:0}.simCards{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px}.simCard{background:#fff;border:1px solid #cad7e3;padding:10px;border-radius:4px}.simCard b{color:#0b4a83}.simCard strong{display:block;font-size:24px;margin-top:5px}.simTabs{display:flex;border-bottom:1px solid #b8cadb;gap:3px;margin-bottom:10px}.simTab{padding:8px 12px;border:1px solid #bdd0df;border-bottom:0;background:#eef4f8}.simTab.active{background:#0b4a83;color:#fff}.simBody{display:none}.simBody.active{display:block}.simEngines{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.simEngine{display:flex;justify-content:space-between;align-items:center;border:1px solid #d2dde7;padding:10px}.simEngine h3{margin:0 0 3px;color:#0b4a83}.simEngine select{min-width:130px}.euroBar small{display:block;color:#6a7c8d}.euroViewBtns{display:flex}.euroViewBtns button.active{background:#0b4a83;color:#fff}.atfmLegend{display:flex;gap:7px;align-items:center;font-size:12px;margin:8px 0;color:#536577}.atfmLegend span{width:16px;height:12px;display:inline-block;margin-left:6px}.b1{background:#78b9ed}.b2{background:#f3e760}.b3{background:#eda05e}.b4{background:#e8788e}.atfmLayout{display:grid;grid-template-columns:minmax(650px,1fr) 380px;gap:10px}.atfmMapCard{border:1px solid #bdcbd5;background:#dde3e7}.mapCountry{fill:#f6f7f7;stroke:#bac3ca;stroke-width:1}.regShape{cursor:pointer;stroke:#285274;stroke-width:1.3;opacity:.8}.regShape:hover{stroke-width:3}.regText{font-size:13px;font-weight:700}.atfmDetail{background:#fff;border:1px solid #c7d5e1;padding:12px;max-height:620px;overflow:auto}.detailRow{display:flex;justify-content:space-between;border-bottom:1px solid #e1e8ee;padding:6px 0}.atfmFlight{display:grid;grid-template-columns:70px 1fr 55px 55px;width:100%;border:0;border-bottom:1px solid #e2e8ee;background:#fff;padding:6px;text-align:left}.atfmTable{width:100%;border-collapse:collapse}.atfmTable th,.atfmTable td{padding:7px;border-bottom:1px solid #dbe4eb}.atfmTable tbody tr{cursor:pointer}.atfmTable tbody tr:hover{background:#edf5fb}.formgrid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.formgrid label{display:flex;flex-direction:column;gap:3px}.atfmModal{width:min(700px,90vw)}.crewNowLine{position:absolute;top:0;bottom:0;width:1px;background:#e22d2d;z-index:12;pointer-events:none}.crewNowLine:before{content:attr(data-t);position:absolute;top:0;left:2px;color:#e22d2d;font-size:9px;font-weight:700}

.atfmNetworkStatus{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #c6d4e0;padding:7px 10px;margin:7px 0}.atfmNetworkStatus>b{color:#0b4a83}.atfmNetworkStatus>span{flex:1;color:#52697c}
.mapLabel{font-size:13px;fill:#6b7880;font-weight:600;text-anchor:middle}.seaLabel{font-size:11px;fill:#96a4ad;letter-spacing:1px}
.atfmFlightWrap{border-bottom:1px solid #dce5ec}.atfmFlightWrap .atfmFlight{border-bottom:0}.slotHistory{padding:3px 7px 8px 77px;background:#f7fafc}.slotHistory span{display:block;font-size:10px;color:#627689;margin:2px 0}.slotHistory b{color:#0b4a83}

/* v0.5.5c */
.simCheckCard{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid #cbd8e3;background:#fff;padding:13px;border-radius:5px;cursor:pointer}
.simCheckCard h3{margin:0 0 3px;color:#0b4a83}.simCheckCard input{width:22px;height:22px;accent-color:#0b4a83}
.simSaveBar{display:flex;align-items:center;gap:12px;margin-top:12px}.simSaveBar .hint.ok{color:#13733d;font-weight:700}.simSaveBar .hint.bad{color:#a12626;font-weight:700}
.leafletAtfmMap{width:100%;height:620px;background:#dce4e9}.atfmMapCard{min-height:620px}
.leaflet-container{font-family:inherit}.leaflet-control-zoom a{color:#0b4a83}.leaflet-popup-content-wrapper{border-radius:4px}.leaflet-popup-content{margin:10px 12px}
.atfmRegPopup b{color:#0b4a83}.atfm-reg-label{background:#0b4a83;color:#fff;border:0;box-shadow:none;padding:2px 5px;font-weight:700}
.crewNowLineV055c{position:absolute;top:0;bottom:auto;width:1px;background:#e22d2d;z-index:20;pointer-events:none}
.crewNowLineV055c:before{content:attr(data-t);position:absolute;top:0;left:2px;background:#e22d2d;color:#fff;font-size:9px;padding:1px 3px;border-radius:2px;white-space:nowrap}

/* v0.5.5d simulation three-state selector */
.simModeGrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.simModeEngine{border:1px solid #cbd8e3;background:#fff;border-radius:5px;padding:13px}
.simModeEngineHead h3{margin:0 0 3px;color:#0b4a83}.simModeEngineHead small{color:#65798c}
.simModeChoices{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-top:12px}
.simModeChoices button{border:1px solid #b8c8d7;background:#eef3f7;color:#435b6e;padding:9px 6px;font-weight:700;border-radius:4px;cursor:pointer}
.simModeChoices button.selected{background:#0b4a83;border-color:#0b4a83;color:#fff;box-shadow:0 0 0 2px rgba(11,74,131,.12)}
.simStateMessage{color:#617587}.simStateMessage.ok{color:#15763d;font-weight:700}.simStateMessage.bad{color:#a32727;font-weight:700}.simStateMessage.pending{color:#9a6c00;font-weight:700}
@media(max-width:1050px){.simModeGrid{grid-template-columns:1fr}}

.atfmFallbackTiles{filter:grayscale(1) hue-rotate(175deg) saturate(.45) brightness(1.06)}

/* v0.5.5f Network Manager basemap */
.leafletAtfmMap{background:#dfe6eb}
.atfmFallbackTiles{filter:grayscale(1) sepia(.08) hue-rotate(165deg) saturate(.55) brightness(1.06)}

/* v0.5.5g — Leaflet overlay safety */
.atfmMapCard{position:relative;overflow:hidden}
.atfmMapCard .leafletAtfmMap{width:100%;height:620px;display:block}
.atfmMapCard .leaflet-pane svg{width:auto!important;height:auto!important;max-width:none!important;max-height:none!important}
.atfmMapCard .leaflet-overlay-pane svg{overflow:visible!important}

.atfmDetailHead{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;border-bottom:2px solid #0b4a83;padding-bottom:8px;margin-bottom:6px}
.atfmDetailHead h3{margin:0;color:#0b4a83}.atfmDetailHead small{color:#6b7d8e}
.atfmAffectedHeader{display:flex;align-items:center;justify-content:space-between;margin-top:14px;border-bottom:1px solid #c9d5df;padding-bottom:5px}
.atfmAffectedHeader h4{margin:0;color:#0b4a83}.atfmAffectedHeader span{background:#e8f0f7;color:#0b4a83;padding:2px 7px;border-radius:10px;font-weight:700}
.atfmAffectedList{display:flex;flex-direction:column}
.atfmAffectedFlight{padding:8px 0;border-bottom:1px solid #e0e7ed;cursor:pointer}
.atfmAffectedFlight:hover{background:#f5f9fc}
.atfmAffectedMain{display:grid;grid-template-columns:70px 1fr auto;gap:6px;align-items:center}
.atfmAffectedMain b{color:#0b4a83}.atfmAffectedMain em{font-style:normal;color:#15723e;font-size:10px;font-weight:700}
.atfmAffectedSlot{display:grid;grid-template-columns:70px 70px 1fr;gap:6px;margin:4px 0 0 70px;font-size:11px;color:#586f81}
.atfmAffectedSlot b{color:#0b4a83}.atfmRegActions{display:flex;gap:5px;margin:12px 0}

/* v0.5.5h — CTOT visibility */
.puck.hasCtotFlag{overflow:visible}
.ctotCornerFlag{position:absolute;top:-1px;right:-1px;width:0;height:0;border-top:10px solid #d51f2f;border-left:10px solid transparent;z-index:25;pointer-events:auto;cursor:help}
.puck.hasCtotFlag:hover .ctotCornerFlag{border-top-width:12px;border-left-width:12px}

/* v0.5.6 Network Manager rebuild */
#atfmFirSearch{min-width:290px}
#atfmFirHint{display:block;color:#6b7f91;font-size:10px;margin-top:3px}
.atfmNetworkStatus .good{color:#168344}.atfmNetworkStatus .bad{color:#b12626}

/* v0.5.7 reliability */
[data-regrow]:hover{background:#eef5fb}
.atfmAffectedFlight .slotHistory{cursor:default}

/* v0.5.8 Route Planner */
.routePlannerPage{padding-bottom:40px}
.rpTop{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:10px}
.rpTop h2{margin:0;color:#0b4a83}.rpTop>div>span{color:#6a7d8e}
.rpStatus{background:#eef4f8;border:1px solid #c9d7e2;padding:8px 11px;border-radius:4px;color:#425b70}
.rpImportPanel{margin-bottom:10px}.rpImportGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.rpImportCard{display:grid;grid-template-columns:1fr auto;gap:7px;align-items:center;border:1px solid #d8e2ea;background:#f9fbfc;padding:10px}
.rpImportCard>b{color:#0b4a83}.rpImportCard>span{grid-column:1/-1;color:#61778b}.rpImportCard input{min-width:0}
.rpWarning{margin-top:9px;background:#fff6df;border-left:4px solid #c98b13;padding:7px 10px;color:#745414;font-size:11px}
.rpControls{display:flex;align-items:end;gap:8px;margin-bottom:10px}.rpField{display:flex;flex-direction:column;gap:3px}.rpField label{font-size:10px;color:#60778b;font-weight:700}
.rpField input,.rpField select{min-width:135px}.rpControls #rpGenerate{margin-left:auto}
.rpWork{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(310px,.8fr);gap:10px}
.rpMap{height:560px;background:#dfe6eb}.rpCandidatesPanel{min-height:560px}.rpCandidatesPanel #rpCandidates{display:flex;flex-direction:column;gap:7px}
.rpCandidate{display:block;width:100%;text-align:left;border:1px solid #c7d5df;background:#fff;padding:10px;border-radius:4px;cursor:pointer;color:#334d61}
.rpCandidate:hover{background:#f5f9fc}.rpCandidate.selected{border:2px solid #0b4a83;background:#edf5fb;padding:9px}
.rpCandidateHead{display:flex;justify-content:space-between;gap:8px}.rpCandidateHead>b{color:#0b4a83}.rpCandidate strong{display:block;font-size:16px;margin:6px 0 2px;color:#1e3f59}
.rpCandidate small{display:block;color:#6c7e8d;margin-bottom:6px}.rpCandidate>div:last-child{display:flex;justify-content:space-between;font-size:10px}
.rpDetailGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}.rpWide{grid-column:1/-1}
.rpMetricGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.rpMetricGrid>div{background:#f5f8fa;border:1px solid #dbe4eb;padding:8px}
.rpMetricGrid span,.rpMetricGrid small{display:block;color:#687e90;font-size:10px}.rpMetricGrid b{display:block;color:#0b4a83;font-size:14px;margin:2px 0}
.rpRouteString{margin-top:8px}.rpRouteString span{display:block;color:#657b8d;font-size:10px}.rpRouteString code{display:block;white-space:normal;background:#0f2638;color:#e9f2f8;padding:9px;margin-top:3px;line-height:1.45}
.rpRadInfo{display:flex;flex-direction:column;gap:3px;margin-top:8px}.rpRadInfo>span,.rpRadInfo small{color:#63798c}
.rpProfileSvg{width:100%;height:250px;background:#f8fbfd}.rpAxis{stroke:#8095a6;stroke-width:1}.rpProfilePath{fill:none;stroke:#0b4a83;stroke-width:4}.rpProfileSvg text{font-size:11px;fill:#52697b}
.rpProfileMeta{display:grid;grid-template-columns:1fr 1fr;gap:5px;font-size:10px;color:#61778a}.rpProfileMeta span{background:#f5f8fa;padding:5px}
.rpFirList{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.rpFirList>div{display:grid;grid-template-columns:1fr auto;gap:2px 8px;border:1px solid #d9e3ea;background:#f8fafb;padding:7px}
.rpFirList b{color:#0b4a83}.rpFirList span,.rpFirList small{color:#6b7f90;font-size:10px}.rpFirList strong{font-size:11px}
.good{color:#16753e!important}.warn{color:#a26500!important}
@media(max-width:1200px){.rpWork{grid-template-columns:1fr}.rpMap{height:470px}.rpDetailGrid{grid-template-columns:1fr}.rpWide{grid-column:auto}.rpImportGrid{grid-template-columns:1fr}}

/* v0.5.13c Operational Route Planner */
.rpImportPanel{margin-bottom:10px}
.rpImportPanel summary{cursor:pointer;padding:4px 0;color:#0b4a83}
.rpFlightToolbar{display:flex;gap:9px;align-items:end;margin-bottom:10px}
.rpFlightToolbar .grow{flex:1}.rpFlightToolbar .grow input{width:100%}
.rpFlightWorkspace{display:grid;grid-template-columns:330px minmax(0,1fr);gap:10px}
.rpFlightListPanel{min-height:650px;max-height:calc(100vh - 210px);overflow:hidden}
.rpFlightList{overflow:auto;max-height:calc(100vh - 270px);display:flex;flex-direction:column;gap:4px}
.rpFlightRow{width:100%;display:grid;grid-template-columns:1fr auto;gap:4px 8px;text-align:left;border:1px solid #d4e0e8;background:#fff;padding:8px;cursor:pointer;border-radius:3px;color:#314e63}
.rpFlightRow:hover{background:#f4f8fb}.rpFlightRow.selected{border:2px solid #0b4a83;background:#eef6fb;padding:7px}
.rpFlightRow>div:first-child{display:flex;gap:8px;align-items:center}.rpFlightRow strong{color:#0b4a83}
.rpFlightRow>div:nth-child(2){display:flex;gap:7px;align-items:center;color:#62798b;font-size:10px}
.rpFlightRow small{grid-column:1/-1;font-size:10px}
.rpSelectedFlight{margin-bottom:10px}.rpSelectedHead{display:flex;align-items:center;justify-content:space-between;gap:10px}.rpSelectedHead h3{margin:0;color:#0b4a83}.rpSelectedHead span{color:#667d8f}
.rpCurrentPlan{margin-top:7px;padding-top:7px;border-top:1px solid #dbe4ea;color:#536d80}
.rpCandidate{padding:0!important;overflow:hidden}.rpCandidateSelect{display:block;width:100%;text-align:left;border:0;background:transparent;padding:10px;color:inherit;cursor:pointer}.rpCandidate.selected{padding:0!important}
.rpAcceptRoute{width:100%;border:0;border-top:1px solid #cbd9e3;background:#0b4a83;color:#fff;padding:8px;cursor:pointer}.rpAcceptRoute:hover{background:#083b69}

/* v0.5.13c Live Network Map */
.networkMapTop{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;margin-bottom:10px}.networkMapTop h2{margin:0;color:#0b4a83}.networkMapTop>div>span{color:#6a7e90}
.networkMapFilters{display:flex;align-items:end;gap:7px}.networkMapFilters label{display:flex;flex-direction:column;gap:2px;color:#60778a;font-size:10px;font-weight:700}.networkMapFilters input,.networkMapFilters select{min-width:120px}
.networkMapWorkspace{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:10px}.networkMap{height:calc(100vh - 190px);min-height:620px;background:#dfe6eb}
.networkMapDetail{min-height:620px;overflow:auto;max-height:calc(100vh - 190px)}.networkMapLegend{display:flex;gap:18px;align-items:center;padding:8px 3px;color:#5d7385;font-size:10px}
.nmDot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:4px}.nmDot.airport{background:#fff;border:2px solid #0b4a83}.nmDot.aircraft{background:#0b4a83}
.nmAircraftIcon{background:transparent!important;border:0!important}.nmPlane{display:inline-block;background:#0b4a83;color:#fff;border-radius:50%;width:24px;height:24px;line-height:24px;text-align:center;font-size:13px;box-shadow:0 1px 4px #456}
.nmLabel{position:absolute;left:27px;top:-1px;background:rgba(255,255,255,.92);border:1px solid #c8d5de;border-radius:2px;padding:2px 4px;white-space:nowrap;color:#173f5d;font-size:9px;font-weight:700;line-height:1.2}
.nmAirportHead,.nmFlightHead{display:flex;flex-direction:column;gap:3px;padding-bottom:10px;border-bottom:1px solid #dbe4ea}.nmAirportHead h3,.nmFlightHead h3{margin:0;color:#0b4a83}.nmAirportHead span{color:#6b7e8f}
.nmWeather{display:flex;flex-direction:column;gap:4px;margin-top:10px}.nmWeather>span{font-size:9px;font-weight:700;color:#657b8c}.nmWeather code{display:block;white-space:normal;background:#f1f5f8;border:1px solid #d7e1e8;padding:7px;color:#263f52}
.nmGround h4{color:#0b4a83;margin:13px 0 5px}.nmGroundRow{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;border-top:1px solid #e0e7ec;padding:7px 0}.nmGroundRow span{color:#6b7f90}.nmGroundRow strong{grid-column:1/-1;font-size:10px}
.nmFlightMetrics{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin:10px 0}.nmFlightMetrics>div{background:#f5f8fa;border:1px solid #dbe4ea;padding:7px}.nmFlightMetrics span{display:block;color:#6a7f91;font-size:9px}.nmFlightMetrics b{color:#0b4a83}
@media(max-width:1100px){.rpFlightWorkspace{grid-template-columns:1fr}.rpFlightListPanel{max-height:none;min-height:0}.rpFlightList{max-height:320px}.networkMapWorkspace{grid-template-columns:1fr}.networkMap{height:600px}.networkMapDetail{min-height:0;max-height:none}.networkMapTop{align-items:flex-start;flex-direction:column}.networkMapFilters{flex-wrap:wrap}}

/* v0.5.13c live-map declutter */
.nmPlaneWrap{position:absolute;left:0;top:0;width:24px;height:24px}
.nmPlane{transform-origin:50% 50%;transition:transform .25s linear}
.nmLabel{min-width:90px}


/* -------------------------------------------------------------------------
   v0.5.13c Mobile Responsive Shell
   ------------------------------------------------------------------------- */
.mobileMenuBtn,.mobileNavBackdrop{display:none}

@media(max-width:1024px){
  :root{--sidebar:0px;--hour-width:72px}
  html,body{width:100%;height:100%;overflow:hidden}
  body{font-size:13px}
  .app{display:block;height:100dvh}
  main{padding:0 7px 7px;height:100dvh;overflow:hidden}

  /* Mobile navigation drawer */
  .sidebar{
    position:fixed;z-index:1000;left:-86vw;top:0;bottom:0;width:min(82vw,310px);
    padding:12px 10px;box-shadow:8px 0 28px #001a2f55;transition:left .2s ease;
    overflow:auto
  }
  body.mobileNavOpen .sidebar{left:0}
  .sidebar nav{padding-bottom:18px}
  .sidebar .brand img{width:145px}
  .sidebar .nav{min-height:44px;font-size:14px;padding:11px 12px}
  .sidebar .version{display:block!important;margin-top:8px}
  .sidebar .collapseBtn{display:none}
  body.sidebarCollapsed .sidebar{width:min(82vw,310px)}
  body.sidebarCollapsed .brand img,
  body.sidebarCollapsed .brand .one,
  body.sidebarCollapsed .nav span,
  body.sidebarCollapsed .version{display:initial}
  body.sidebarCollapsed .nav{text-align:left;font-size:14px}
  .mobileNavBackdrop{
    display:block;position:fixed;z-index:999;inset:0;background:#071d31aa;
    opacity:0;pointer-events:none;transition:opacity .2s
  }
  body.mobileNavOpen .mobileNavBackdrop{opacity:1;pointer-events:auto}

  /* Header */
  header{
    height:58px;display:grid;grid-template-columns:42px minmax(0,1fr) auto;
    gap:7px;align-items:center;padding:4px 0
  }
  .mobileMenuBtn{
    display:block;width:40px;height:40px;padding:0;font-size:21px;
    border:1px solid #bfcddd;background:#fff;color:var(--navy);border-radius:6px
  }
  .headerTitle{min-width:0}
  header h1{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .subtitle{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .topcontrols{gap:4px;align-items:center}
  .signedInUser{display:none}
  .topcontrols #logoutBtn{display:none}
  .topcontrols input[type=date]{width:124px;padding:6px 4px;font-size:11px}

  .page{height:calc(100dvh - 65px);overflow:auto;-webkit-overflow-scrolling:touch}
  .panel{padding:9px;border-radius:5px}
  .panelhead{margin-bottom:7px}
  .panelhead h2{font-size:13px}
  input,select,button{min-height:38px}
  .compactBtn{min-height:36px;padding:7px 9px}
  .primary{min-height:40px}

  /* Dashboard */
  .cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-bottom:7px}
  .card{padding:10px}
  .card .value{font-size:20px}
  .grid2{grid-template-columns:1fr;gap:7px}
  .basegrid{grid-template-columns:1fr 1fr}
  .line{grid-template-columns:52px minmax(0,1fr) 56px;padding:7px 2px}

  /* Operations — preserve Gantt, make controls touch friendly */
  .opsPage{overflow:hidden!important}
  .opsToolbar{
    height:auto;min-height:48px;display:flex;overflow-x:auto;overflow-y:hidden;
    gap:5px;padding:5px;white-space:nowrap;-webkit-overflow-scrolling:touch
  }
  .opsToolbar .toolGroup{flex:0 0 auto}
  .opsToolbar .toolbarSpacer{display:none}
  .opsToolbar label{display:none}
  .opsToolbar select,.opsToolbar input,.opsToolbar button{min-height:36px}
  .opsFilterBar{overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}
  .opsSearchbar{height:40px;overflow-x:auto}
  .opsSearchbar input{min-width:190px;width:100%;font-size:12px}
  .legendInline{display:none!important}
  .timelineShell{
    grid-template-columns:82px 1fr;grid-template-rows:29px 1fr;
    height:calc(100dvh - 184px)
  }
  .timelineCorner{font-size:8px;padding:8px 4px}
  .rowLabel{padding:4px}.rowLabel b{font-size:9px}.rowLabel small{font-size:7px}
  .puck{font-size:8px}
  .puckTooltip{display:none!important}
  .flightDrawer{
    position:fixed;z-index:900;left:0;right:0;top:auto;bottom:-88dvh;
    width:100%;height:min(82dvh,760px);border-left:0;border-top:1px solid #c7d0db;
    border-radius:14px 14px 0 0;box-shadow:0 -8px 28px #11243a33;
    padding:13px;transition:bottom .2s
  }
  .flightDrawer.open{right:0;bottom:0}
  .drawerClose{min-width:40px;min-height:40px}

  /* Tables and general admin pages */
  .tablewrap{max-height:none;width:100%;overflow:auto;-webkit-overflow-scrolling:touch}
  table{min-width:680px}
  th,td{padding:8px 7px}
  .filters,.toolbar,.filterBar,.crewToolbar,.ccToolbar,.supportToolbar{
    overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch
  }

  /* Live Network Map */
  .networkMapTop{display:block;margin-bottom:6px}
  .networkMapTop>div:first-child{margin-bottom:6px}
  .networkMapTop h2{font-size:16px}
  .networkMapFilters{
    display:flex;overflow-x:auto;gap:5px;padding-bottom:2px;-webkit-overflow-scrolling:touch
  }
  .networkMapFilters label{flex:0 0 auto}
  .networkMapFilters label span{display:none}
  .networkMapFilters input,.networkMapFilters select{min-width:115px;max-width:155px}
  .networkMapWorkspace{display:block}
  .networkMapPanel{padding:0;overflow:hidden}
  .networkMapPanel .panelhead{padding:8px 8px 0}
  .networkMap{height:calc(100dvh - 190px);min-height:420px}
  .networkMapDetail{
    min-height:0;max-height:none;margin-top:7px;padding:10px
  }
  .networkMapLegend{display:none}
  .nmLabel{font-size:9px;line-height:1.15;max-width:115px}
  .nmFlightMetrics{grid-template-columns:repeat(2,1fr)}
  .nmGroundRow{font-size:11px}

  /* Route Planner */
  .rpTop{display:block}.rpStatus{margin-top:6px}
  .rpImportGrid{grid-template-columns:1fr}
  .rpFlightToolbar{
    display:flex;overflow-x:auto;align-items:end;gap:5px;padding:7px;
    white-space:nowrap;-webkit-overflow-scrolling:touch
  }
  .rpFlightToolbar .grow{flex:0 0 180px}
  .rpFlightWorkspace{display:block}
  .rpFlightListPanel{min-height:0;max-height:none;margin-bottom:7px}
  .rpFlightList{max-height:240px}
  .rpFlightRow{min-height:54px}
  .rpMain{min-width:0}
  .rpSelectedHead{align-items:flex-start}
  .rpSelectedHead h3{font-size:14px}
  .rpWork{display:block}
  .rpMapPanel{padding:0;overflow:hidden}
  .rpMapPanel .panelhead{padding:8px 8px 0}
  .rpMap{height:380px}
  .rpCandidatesPanel{min-height:0;margin-top:7px}
  .rpDetailGrid{display:block}
  .rpDetailGrid>.panel{margin-top:7px}
  .rpMetricGrid{grid-template-columns:repeat(2,1fr)}
  .rpProfileSvg{height:190px}
  .rpFirList{grid-template-columns:1fr}
  .rpRouteString code{font-size:10px;overflow-wrap:anywhere}

  /* Crew Control / Crew Planning */
  #crew.page,#crewcontrol.page{overflow:hidden}
  #crew .panel,#crewcontrol .panel{padding:8px}
  .crewScopeCard,.ccScopeCard{margin:6px}
  .crewGanttWrap,.ccGanttWrap,.crewTimelineWrap,.ccTimelineWrap{
    overflow:auto;-webkit-overflow-scrolling:touch
  }
  .crewTimeline,.ccTimeline,.crewGantt,.ccGantt{min-width:900px}
  .ccFlightDrawer,.crewDrawer{
    position:fixed!important;left:0!important;right:0!important;top:auto!important;
    bottom:0!important;width:100%!important;max-height:80dvh!important
  }

  /* Simulation / ATFM / support */
  .simEngineGrid{grid-template-columns:1fr!important}
  .atfmWorkspace,.supportWorkspace,.crewSupportGrid{grid-template-columns:1fr!important}
  #atfmMap,.atfmMap{min-height:430px!important;height:55dvh!important}
  .atfmDetail{max-height:none!important}
  .supportInbox{max-height:260px;overflow:auto}

  /* Forms and modal dialogs */
  .modal,.dialog,.modalCard{
    width:calc(100vw - 18px)!important;max-width:none!important;
    max-height:88dvh!important;overflow:auto!important
  }
  .formGrid,.grid3,.grid4{grid-template-columns:1fr!important}
  #toast{left:8px;right:8px;bottom:10px;text-align:center}

  /* Prevent Safari from zooming on form focus */
  input,select,textarea{font-size:16px}
  .toolGroup select,.toolGroup input,.opsSearchbar input,
  .networkMapFilters input,.networkMapFilters select,
  .rpField input,.rpField select{font-size:16px}
}

@media(max-width:430px){
  .cards{grid-template-columns:1fr 1fr}
  .basegrid{grid-template-columns:1fr}
  .topcontrols input[type=date]{width:116px;font-size:10px}
  .rpMetricGrid{grid-template-columns:1fr 1fr}
  .networkMap{height:calc(100dvh - 178px)}
}


/* v0.5.13ca mobile overlay hotfix */
@media(max-width:1024px){
  .flightDrawer,
  .ccFlightDrawer,
  .crewDrawer,
  .modal,
  .dialog,
  .modalCard{
    visibility:hidden;
    pointer-events:none;
  }
  .flightDrawer.open,
  .ccFlightDrawer.open,
  .crewDrawer.open,
  .modal.open,
  .dialog.open,
  .modalCard.open{
    visibility:visible;
    pointer-events:auto;
  }

  /* Flight drawer specifically: keep it fully off-canvas until opened. */
  .flightDrawer{
    bottom:-90dvh!important;
    display:block!important;
  }
  .flightDrawer.open{
    bottom:0!important;
  }

  /* Generic stray close buttons should never float over normal pages. */
  .drawerClose{
    display:none;
  }
  .flightDrawer.open .drawerClose,
  .ccFlightDrawer.open .drawerClose,
  .crewDrawer.open .drawerClose{
    display:block;
  }

  /* Restore usable Operations timeline area. */
  .opsPage .timelineShell{
    display:grid!important;
    min-height:420px;
  }
  .opsPage .timelineScroll,
  .opsPage .rowLabels,
  .opsPage .timeHeader{
    min-height:0;
  }
}


/* v0.5.13c consolidated mobile compatibility */
@media(max-width:1024px){
  body{--sidebar:0px!important}
  .app{display:block!important;width:100%!important;max-width:100%!important}
  main{width:100%!important;max-width:100%!important;margin:0!important}
  .sidebar{position:fixed!important;left:-86vw!important;width:min(82vw,310px)!important;top:0!important;bottom:0!important;z-index:1000!important}
  body.mobileNavOpen .sidebar{left:0!important}
  .mobileMenuBtn{display:block!important}
  .mobileNavBackdrop{display:block!important}
  .topcontrols .signedInUser,.topcontrols #logoutBtn{display:none!important}

  .timelineScroll,#crewRosterScroll,.crewRosterScroll,#ccGanttScroll,.ccGanttScroll,#ccCrewScroll,.cc044CrewScroll,
  .crewGanttWrap,.ccGanttWrap,.crewTimelineWrap,.ccTimelineWrap{
    overflow:auto!important;-webkit-overflow-scrolling:touch!important;
    touch-action:pan-x pan-y!important;overscroll-behavior:contain!important
  }
  .timelineCanvas,#crewRosterRows,#ccGanttRows,#ccCrewRows{touch-action:pan-x pan-y!important}
  .puck,.crewBar,.cc044CrewPuck,.cc044bFlightPuck{touch-action:manipulation!important}

  .crewSummary,.cc044Tabs,.liveOpsStats,.opsFilterBar{
    display:flex!important;overflow-x:auto!important;overflow-y:hidden!important;
    flex-wrap:nowrap!important;gap:6px!important;-webkit-overflow-scrolling:touch!important;scrollbar-width:none
  }
  .crewSummary::-webkit-scrollbar,.cc044Tabs::-webkit-scrollbar,.liveOpsStats::-webkit-scrollbar,.opsFilterBar::-webkit-scrollbar{display:none}
  .crewSummary>*{flex:0 0 150px!important}.cc044Tabs>*{flex:0 0 auto!important}

  .crewPage.active{overflow:auto!important}
  .crewToolbar,.crewControlToolbar{
    display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;
    gap:7px!important;overflow:visible!important;white-space:normal!important
  }
  .crewToolbar .toolGroup,.crewControlToolbar .toolGroup{display:flex!important;min-width:0!important}
  .crewToolbar .toolGroup label,.crewControlToolbar .toolGroup label{display:block!important;flex:0 0 auto}
  .crewToolbar input,.crewToolbar select,.crewControlToolbar input,.crewControlToolbar select{min-width:0!important;width:100%!important}
  .crewToolbar button,.crewControlToolbar button{width:100%!important}
  .crewRosterShell{width:100%!important;overflow:hidden!important}
  .crewRosterHead{min-width:max-content}.crewRosterScroll{width:100%!important}

  .crewControlPage.active{overflow:auto!important}
  .cc044Workspace{display:block!important;width:100%!important;min-width:0!important}
  .cc044Main{display:block!important;width:100%!important;min-width:0!important}
  .cc044DutyPanel,.cc044CrewPanel{width:100%!important;min-width:0!important;overflow:hidden!important;margin-bottom:8px}
  .cc044DutyPanel .panelhead,.cc044CrewPanel .panelhead{display:block!important}
  .cc044DutyPanel .hint,.cc044CrewPanel .hint{display:block;margin-top:3px}
  .ccGanttShell,.cc044CrewHead,#ccGanttScroll,#ccCrewScroll{width:100%!important;max-width:100%!important}
  .cc044Details{
    display:none!important;position:fixed!important;z-index:1100!important;
    left:8px!important;right:8px!important;top:auto!important;bottom:8px!important;
    width:auto!important;max-height:78dvh!important;overflow:auto!important;
    background:#fff!important;border:1px solid #cbd7e2!important;border-radius:12px!important;
    box-shadow:0 10px 35px #001a2f55!important;padding:14px!important
  }
  .cc044Details.mobileOpen{display:block!important}
  .ccMobileDetailsClose{display:none;position:sticky;float:right;top:0;z-index:2;width:38px;height:38px;min-height:38px;border:0;background:#eef4f8;color:#0b4a83;font-size:22px;border-radius:50%}
  .cc044Details.mobileOpen .ccMobileDetailsClose{display:block!important}
  .cc044DetailsEmpty{display:none!important}

  .liveOpsPage.active{overflow:auto!important}
  .liveOpsPageToolbar{
    display:grid!important;grid-template-columns:1fr 1fr!important;
    gap:7px!important;height:auto!important;align-items:end!important
  }
  .liveOpsPageToolbar>div:first-child{grid-column:1/-1!important;display:block!important}
  .liveOpsPageToolbar>div:first-child h2{margin:0 0 2px!important}
  .liveOpsPageToolbar>div:first-child span{display:block!important;white-space:normal!important}
  .liveOpsPageToolbar .toolGroup{display:flex!important;min-width:0!important}
  .liveOpsPageToolbar input,.liveOpsPageToolbar select{width:100%!important;min-width:0!important}
  .simulatorStatus{min-width:0!important;width:100%!important;overflow:hidden}
  #simulatorToggle,#liveOpsRefresh{width:100%!important}
  .liveOpsTablePanel{overflow:hidden!important}.liveOpsTablePanel .panelhead{display:block!important}
  .liveOpsTablePanel .tablewrap{width:100%!important;overflow:auto!important;-webkit-overflow-scrolling:touch!important}
  .liveOpsTable{min-width:920px!important}

  .routePlannerPage.active{overflow:auto!important}
  .rpTop{display:block!important}.rpStatus{width:100%!important;margin-top:7px!important;overflow-wrap:anywhere}
  .rpFlightToolbar{
    display:grid!important;grid-template-columns:1fr 1fr!important;
    gap:7px!important;overflow:visible!important;white-space:normal!important
  }
  .rpFlightToolbar .rpField,.rpFlightToolbar .grow{min-width:0!important;width:auto!important;flex:auto!important}
  .rpFlightToolbar .grow{grid-column:1/-1!important}
  .rpFlightToolbar input,.rpFlightToolbar select{width:100%!important;min-width:0!important}
  #rpFlightRefresh{grid-column:1/-1!important;width:100%!important}
  .rpFlightWorkspace,.rpMain,.rpWork,.rpDetailGrid{width:100%!important;min-width:0!important}
  .rpMap{min-height:360px!important;height:46dvh!important}
  .rpFlightListPanel{width:100%!important}#rpFlightSearch{max-width:100%!important}

  .atfmPage.active{overflow:auto!important}
  .euroBar{display:grid!important;grid-template-columns:1fr auto!important;gap:7px!important;align-items:start!important}
  .euroBar>div:first-child{grid-column:1/-1!important}
  .euroViewBtns{justify-self:start}#atfmAdd{justify-self:end}
  .atfmNetworkStatus{display:grid!important;grid-template-columns:auto 1fr!important;gap:6px!important;align-items:center!important}
  .atfmNetworkStatus button{grid-column:1/-1!important;width:100%!important}
  .atfmLayout{display:block!important;width:100%!important}.atfmMapCard{width:100%!important}
  .leafletAtfmMap{height:58dvh!important;min-height:380px!important}
  .atfmDetail{width:100%!important;max-height:none!important;margin-top:7px!important}

  .flightDrawer:not(.open),.crewDrawer:not(.open),.ccFlightDrawer:not(.open),.liveOpsPageDrawer:not(.open){
    visibility:hidden!important;pointer-events:none!important;transform:none!important
  }
  .drawerClose{display:none!important}
  .flightDrawer.open .drawerClose,.crewDrawer.open .drawerClose,.ccFlightDrawer.open .drawerClose,.liveOpsPageDrawer.open .drawerClose{display:block!important}
}
