/* Astra Aviation design system.
   Brand colour is blue, not green: on flight decks green means "normal / safe" (CS 25.1322, ECAM/EICAS), red warning, amber caution,
   magenta active guidance, cyan/blue advisory and selectable. Green, amber and red are kept for status only (valid, expiring, expired).
   The sidebar is a dark "flight deck" panel in both themes; content is calm and light (or dark at night).
   All text pairs meet WCAG AA (4.5:1). Type: Inter (self-hosted, SIL Open Font License), tabular numbers for times and hours. */
@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/static/fonts/inter-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/static/fonts/inter-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
:root{--bg:#f4f6fa;--surface:#fff;--surface2:#f7f9fc;--fg:#0b1625;--muted:#55657a;--line:#e1e7ef;--line-strong:#c3cfdd;
--accent:#0b5cad;--accent-hover:#094d92;--accent-soft:#e3eefa;--accent-fg:#fff;--ok:#1b7a43;--ok-bg:#def2e6;--warn:#8f5200;--warn-bg:#fbeccf;--bad:#a3262a;--bad-bg:#fbe0e0;
--deck:#0a1a30;--deck2:#10243f;--deck-fg:#c8d4e5;--deck-muted:#7f93ae;--deck-line:rgba(255,255,255,.08);--deck-on:rgba(92,184,255,.16);--deck-accent:#5cb8ff;--logo-hole:#0a1a30;
--mono:ui-monospace,'SFMono-Regular',Menlo,Consolas,monospace;--sans:Inter,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
--radius:8px;--radius-lg:12px;--shadow:0 1px 2px rgba(16,36,63,.05),0 1px 3px rgba(16,36,63,.06);--shadow-lg:0 10px 30px rgba(16,36,63,.14);color-scheme:light}
@media (prefers-color-scheme:dark){:root{--bg:#060b14;--surface:#0c1524;--surface2:#111d2f;--fg:#e8eef6;--muted:#8b9bb0;--line:#1a2740;--line-strong:#2a3d5e;
--accent:#5cb8ff;--accent-hover:#82c9ff;--accent-soft:rgba(92,184,255,.14);--accent-fg:#03182b;--ok:#7be0a4;--ok-bg:#10281c;--warn:#ebbd6b;--warn-bg:#2c230f;--bad:#ff8f94;--bad-bg:#3a171a;
--deck:#050a13;--deck2:#0b1424;--shadow:0 1px 2px rgba(0,0,0,.4);--shadow-lg:0 10px 30px rgba(0,0,0,.5);color-scheme:dark}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.5 var(--sans);font-feature-settings:'cv11','ss01';-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}
a.btn{color:var(--fg);display:inline-flex;align-items:center}a.btn:hover{text-decoration:none;border-color:var(--accent)}
h1{font-size:1.6rem;line-height:1.25;margin:0 0 .25rem;letter-spacing:-.02em;font-weight:700}
h2{font-size:1.02rem;margin:1.8rem 0 .7rem;letter-spacing:-.005em;font-weight:650}
.muted{color:var(--muted)}.mono{font-family:var(--mono);letter-spacing:.02em}.right{margin-inline-start:auto}
.ic{width:20px;height:20px;flex:none}

/* shell: dark deck sidebar, light content */
.shell{display:grid;grid-template-columns:244px 1fr;min-height:100vh}
nav.side{background:var(--deck);color:var(--deck-fg);padding:1rem .7rem .7rem;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;gap:.25rem}
.brand{display:flex;align-items:center;gap:.55rem;font-weight:600;letter-spacing:.16em;font-size:.78rem;padding:.25rem .55rem;color:#fff}.brand:hover{text-decoration:none}
.brand b{color:var(--deck-accent);font-weight:800}.logo{width:24px;height:24px;color:var(--deck-accent)}
.orgname{padding:.15rem .55rem .7rem;font-size:.82rem;color:var(--deck-muted);border-bottom:1px solid var(--deck-line);margin-bottom:.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.navscroll{overflow-y:auto;flex:1;margin:0 -.3rem;padding:0 .3rem;scrollbar-width:thin}
.navgroup{margin-bottom:.55rem}.navlabel{font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:var(--deck-muted);padding:.5rem .6rem .25rem;font-weight:600}
nav.side .navgroup a{display:flex;align-items:center;gap:.7rem;padding:.48rem .6rem;border-radius:var(--radius);color:var(--deck-fg);font-size:.92rem;position:relative}
nav.side .navgroup a:hover{background:var(--deck2);color:#fff;text-decoration:none}
nav.side .navgroup a.on{background:var(--deck-on);color:#fff;font-weight:600}
nav.side .navgroup a.on::before{content:'';position:absolute;inset-inline-start:-.7rem;top:.45rem;bottom:.45rem;width:3px;border-radius:0 3px 3px 0;background:var(--deck-accent)}
nav.side .navgroup a .ic{opacity:.85}nav.side .navgroup a.on .ic{opacity:1;color:var(--deck-accent)}
nav.side .badge{margin-inline-start:auto;background:var(--deck-accent);color:#03182b}
nav.side .foot{border-top:1px solid var(--deck-line);padding:.7rem .4rem .1rem;font-size:.82rem}
nav.side .who{display:flex;gap:.6rem;align-items:center;line-height:1.3}nav.side .who b{color:#fff;font-weight:600}nav.side .who span span{color:var(--deck-muted)}
nav.side .who .av{background:var(--deck-on);color:var(--deck-accent)}
nav.side .foot select{margin:.55rem 0 0;background:var(--deck2);color:var(--deck-fg);border-color:var(--deck-line);padding:.35rem .5rem;font-size:.85rem}
.footlinks{display:flex;flex-wrap:wrap;gap:.3rem .9rem;margin-top:.55rem}.footlinks>*{white-space:nowrap}.footlinks a,.footlinks .link{color:var(--deck-muted);font-size:.82rem}.footlinks a:hover,.footlinks .link:hover{color:#fff}
nav.bottom{display:none}
main{min-width:0;padding:1.75rem clamp(1rem,3.2vw,2.75rem) 4rem;max-width:1240px;width:100%}
.banner{background:var(--warn-bg);color:var(--warn);padding:.4rem .85rem;font-size:.82rem;border-radius:var(--radius);margin-bottom:1.1rem}

/* page parts */
.head{display:flex;align-items:flex-end;gap:1rem;flex-wrap:wrap;margin-bottom:1.25rem}
.head>div:first-child>a.muted{font-size:.85rem;display:inline-block;margin-bottom:.15rem}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:1.1rem 1.2rem;box-shadow:var(--shadow)}
.grid{display:grid;gap:.85rem;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
.stat{position:relative;overflow:hidden}.stat b{display:block;font-size:1.85rem;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.15}
.stat span{color:var(--muted);font-size:.85rem}
.stat::after{content:'';position:absolute;inset-inline-start:0;top:0;bottom:0;width:3px;background:var(--accent);opacity:.75}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow)}
table{width:100%;border-collapse:collapse;background:var(--surface)}
.tablewrap table{border:0}
th,td{text-align:start;padding:.65rem .85rem;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600;background:var(--surface2);white-space:nowrap}
tr:last-child td{border-bottom:0}tbody tr.click{cursor:pointer}tbody tr:hover td{background:var(--surface2)}
.num{text-align:end;font-variant-numeric:tabular-nums}
.pill{display:inline-flex;align-items:center;gap:.25rem;padding:.08rem .55rem;border-radius:99px;font-size:.76rem;font-weight:600;white-space:nowrap;background:var(--surface2);color:var(--muted);border:1px solid var(--line);line-height:1.5}
.pill.ok{background:var(--ok-bg);color:var(--ok);border-color:transparent}.pill.warning{background:var(--warn-bg);color:var(--warn);border-color:transparent}
.pill.critical,.pill.expired,.pill.overdue{background:var(--bad-bg);color:var(--bad);border-color:transparent}
.alert{display:flex;gap:.8rem;align-items:center;padding:.7rem .95rem;border-bottom:1px solid var(--line);transition:background .12s}.alert:last-child{border:0}
a.alert:hover{background:var(--surface2);text-decoration:none}
.alert .t{font-weight:600}.alert .pill{min-width:7.2rem;justify-content:center}

/* controls */
button,.btn{font:inherit;font-size:.92rem;font-weight:500;min-height:36px;padding:.42rem .95rem;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);color:var(--fg);cursor:pointer;box-shadow:var(--shadow);transition:border-color .12s,background .12s}
button:hover,.btn:hover{border-color:var(--accent)}
button.primary{background:var(--accent);color:var(--accent-fg);border-color:var(--accent);font-weight:600}button.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
button.link{border:0;background:none;color:var(--accent);padding:0;min-height:0;box-shadow:none;font-weight:500}button.link:hover{text-decoration:underline}
button.wide{width:100%;margin-top:1rem;min-height:42px}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
input,select,textarea{font:inherit;width:100%;padding:.55rem .7rem;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);color:var(--fg);transition:border-color .12s,box-shadow .12s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
input[type=checkbox],input[type=radio]{accent-color:var(--accent)}
label{display:block;font-size:.85rem;font-weight:600;margin:.85rem 0 .3rem}label small{font-weight:400;color:var(--muted)}
.row{display:grid;grid-template-columns:1fr 1fr;gap:.85rem}.checks{display:grid;grid-template-columns:1fr 1fr;gap:.3rem .85rem}
.checks label{font-weight:400;margin:0;display:flex;gap:.45rem;align-items:center}.checks input{width:auto}
.actions{display:flex;gap:.55rem;justify-content:flex-end;margin-top:1.25rem;flex-wrap:wrap}
.err{color:var(--bad);font-size:.9rem;min-height:1.2em;margin-top:.5rem}
dialog{border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--fg);padding:1.4rem 1.5rem;width:min(560px,94vw);max-height:92vh;box-shadow:var(--shadow-lg)}
dialog::backdrop{background:rgba(6,14,28,.55);backdrop-filter:blur(2px)}dialog h2{margin-top:0;font-size:1.2rem}
.secret{font-family:var(--mono);font-size:1.1rem;background:var(--surface2);padding:.6rem .8rem;border-radius:var(--radius);border:1px dashed var(--line-strong);user-select:all}
.kv{display:grid;grid-template-columns:max-content 1fr;gap:.35rem 1.4rem}.kv dt{color:var(--muted)}.kv dd{margin:0}
#toast{position:fixed;inset-inline:0;bottom:1.4rem;margin:auto;width:max-content;max-width:90vw;background:var(--deck);color:#fff;padding:.6rem 1.1rem;border-radius:99px;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;transform:translateY(6px);box-shadow:var(--shadow-lg);z-index:50}
#toast.show{opacity:1;transform:none}
.toolbar{display:flex;gap:.55rem;flex-wrap:wrap;margin-bottom:.9rem}.toolbar input,.toolbar select{width:auto;min-width:190px}

/* sign-in */
.auth{display:grid;grid-template-columns:minmax(320px,44%) 1fr;min-height:100vh}
.authside{background:radial-gradient(1200px 600px at 10% 110%,rgba(92,184,255,.22),transparent 60%),linear-gradient(160deg,var(--deck2),var(--deck) 70%);color:#fff;padding:2.5rem 3rem;display:flex;flex-direction:column;position:relative;overflow:hidden}
.authside::after{content:'';position:absolute;inset:auto -10% -30% 30%;height:70%;background:repeating-linear-gradient(90deg,rgba(255,255,255,.05) 0 2px,transparent 2px 64px);transform:perspective(500px) rotateX(60deg);transform-origin:bottom}
.authbrand{display:flex;gap:.6rem;align-items:center;font-weight:600;letter-spacing:.16em;font-size:.85rem}.authbrand b{color:var(--deck-accent)}.authbrand .logo{width:30px;height:30px}
.authcopy{margin-top:auto;max-width:30rem;position:relative;z-index:1}.authcopy h2{font-size:2rem;line-height:1.2;letter-spacing:-.02em;margin:0 0 .8rem;font-weight:700}
.authcopy p{color:var(--deck-fg);font-size:1.02rem;margin:0}
.authfoot{margin-top:2.5rem;color:var(--deck-muted);font-size:.82rem;position:relative;z-index:1}
.authmain{display:grid;place-items:center;padding:2rem 1.25rem}
.authcard{width:min(400px,100%)}.authcard h1{font-size:1.75rem}.authcard #forgot{display:block;margin:1rem auto 0}
.login{max-width:400px;margin:12vh auto;padding:0 1rem}.login .card{padding:1.6rem}.login .brand{color:var(--fg)}.login .brand b{color:var(--accent)}.login .logo{color:var(--accent)}

/* phone */
@media (max-width:860px){
  .shell{grid-template-columns:1fr}
  nav.side{display:none}
  nav.bottom{display:flex;position:fixed;inset-inline:0;bottom:0;z-index:20;background:var(--deck);padding:.3rem .3rem calc(.3rem + env(safe-area-inset-bottom));justify-content:space-around;box-shadow:0 -4px 16px rgba(0,0,0,.18)}
  nav.bottom a,nav.bottom button{flex:1;display:flex;flex-direction:column;align-items:center;gap:.15rem;color:var(--deck-muted);font-size:.68rem;font-weight:500;padding:.35rem .2rem;border-radius:var(--radius);position:relative;background:none;border:0;box-shadow:none;min-height:0}
  nav.bottom a.on{color:#fff}nav.bottom a.on .ic{color:var(--deck-accent)}nav.bottom a:hover{text-decoration:none}
  nav.bottom .badge{position:absolute;top:0;inset-inline-start:52%;background:var(--deck-accent);color:#03182b;font-size:.65rem;min-width:1.05rem;line-height:1.05rem}
  main{padding:1.1rem 1rem 6rem}h1{font-size:1.4rem}.row{grid-template-columns:1fr}.hide-sm{display:none}
  .auth{grid-template-columns:1fr}.authside{padding:1.5rem 1.4rem;min-height:auto}.authcopy{margin-top:2rem}.authcopy h2{font-size:1.45rem}.authfoot{display:none}
  .head{align-items:flex-start}.head .right{margin-inline-start:0}
  dialog{width:100vw;max-width:100vw;margin:auto 0 0;border-radius:18px 18px 0 0;max-height:88vh}
}
.sheet h2{margin-bottom:.8rem}.sheetgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}
.sheetgrid a{display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:.8rem .3rem;border-radius:var(--radius-lg);background:var(--surface2);color:var(--fg);font-size:.82rem;text-align:center}
.sheetgrid a.on{background:var(--accent-soft);color:var(--accent);font-weight:600}.sheetgrid a:hover{text-decoration:none;background:var(--accent-soft)}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}

/* schedule board */
.board{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.lane{display:grid;grid-template-columns:150px 1fr;border-bottom:1px solid var(--line);min-height:40px}.lane:last-child{border-bottom:0}
.lane-h{padding:.35rem .6rem;display:flex;flex-direction:column;justify-content:center;border-inline-end:1px solid var(--line);font-size:.85rem;line-height:1.2}
.lane-b{position:relative;background:repeating-linear-gradient(to right,transparent 0,transparent calc(100%/14 - 1px),var(--line) calc(100%/14 - 1px),var(--line) calc(100%/14))}
.lane-t{padding:.25rem .6rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600;background:var(--surface2);border-bottom:1px solid var(--line)}
.ticks{display:grid;grid-template-columns:repeat(14,1fr);background:none;font-size:.72rem;color:var(--muted);font-variant-numeric:tabular-nums}.ticks span{padding:.3rem .25rem}
.blk{position:absolute;top:4px;bottom:4px;border-radius:5px;border:1px solid var(--accent);background:var(--accent-soft);color:var(--fg);padding:0 .35rem;font-size:.78rem;text-align:start;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1}
.blk.maintenance,.blk.other{border-style:dashed;border-color:var(--line-strong);background:repeating-linear-gradient(135deg,var(--surface2),var(--surface2) 6px,var(--line) 6px,var(--line) 7px)}
.blk.completed{border-color:var(--ok);background:var(--ok-bg)}.blk.no_show{border-color:var(--bad);background:var(--bad-bg)}
.chk{padding:.35rem .6rem;border-radius:var(--radius);margin-top:.35rem;font-size:.9rem}.chk.bad{background:var(--bad-bg);color:var(--bad)}.chk.warn{background:var(--warn-bg);color:var(--warn)}.chk.good{background:var(--ok-bg);color:var(--ok)}
.checks-out{margin-top:.8rem;min-height:2.2rem}
.bar{position:relative;height:1.4rem;background:var(--surface);border:1px solid var(--line);border-radius:99px;overflow:hidden;margin:.4rem 0 .8rem}
.bar i{display:block;height:100%;background:var(--accent-soft);border-inline-end:2px solid var(--accent)}.bar span{position:absolute;inset:0;text-align:center;font-size:.8rem;font-weight:600;line-height:1.35rem}
details summary{cursor:pointer;color:var(--accent);margin:.3rem 0 .5rem}
table,.stat b,.mono{font-variant-numeric:tabular-nums}

/* training file: a document, not a screen */
.paper{max-width:820px;margin:0 auto;padding:1.5rem;background:var(--surface);min-height:100vh}.paper table{font-size:.88rem}.paper h2{border-bottom:1px solid var(--line);padding-bottom:.2rem}
.rec{padding:.55rem 0;border-bottom:1px solid var(--line);font-size:.92rem;break-inside:avoid}
@media print{.noprint,nav.side,#toast{display:none!important}body,.paper{background:#fff;color:#000}.paper{padding:0;max-width:none}.muted{color:#444}a{color:inherit}}

.week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.5rem}.wk{padding:.6rem;min-height:8rem}
.wkb{display:block;width:100%;text-align:start;margin-top:.4rem;padding:.3rem .45rem;font-size:.8rem;line-height:1.3;border-color:var(--accent);background:var(--accent-soft);overflow:hidden}
.wkb.maintenance,.wkb.other{border-style:dashed;border-color:var(--line-strong);background:var(--surface2)}.wkb.completed{border-color:var(--ok);background:var(--ok-bg)}
@media (max-width:900px){.week{grid-template-columns:1fr}.wk{min-height:0}}

.blk.absence{border-color:var(--warn);background:repeating-linear-gradient(135deg,var(--warn-bg),var(--warn-bg) 6px,transparent 6px,transparent 9px);cursor:default}

.mini{height:.55rem;background:var(--surface2);border:1px solid var(--line);border-radius:99px;overflow:hidden;margin:.25rem 0}.mini i{display:block;height:100%;background:var(--accent)}
@media (max-width:760px){nav.side{justify-content:flex-start;overflow-x:auto;gap:.1rem;scrollbar-width:none}nav.side a{white-space:nowrap;flex:0 0 auto}}

.paper tfoot td{border-bottom:0;padding-top:.25rem;padding-bottom:.25rem}.paper tfoot tr:first-child td{border-top:2px solid var(--line-strong)}

/* inbox, groups, import, status card */
.badge{display:inline-block;min-width:1.25rem;padding:0 .35rem;border-radius:999px;background:var(--accent);color:var(--accent-fg);font-size:.75rem;line-height:1.25rem;text-align:center;font-variant-numeric:tabular-nums;vertical-align:1px}
.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin:.5rem 0 1rem}.tabs a{padding:.45rem .8rem;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.tabs a.on{color:var(--fg);border-bottom-color:var(--accent);font-weight:600}.tabs a:hover{text-decoration:none;color:var(--fg)}
.note{display:grid;grid-template-columns:7.5rem 1fr auto;gap:.8rem;padding:.7rem 1rem;border-bottom:1px solid var(--line);color:inherit}.note:last-child{border-bottom:0}.note:hover{background:var(--surface2);text-decoration:none}
.note .k{font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding-top:.15rem}.note .w{font-size:.85rem;white-space:nowrap;font-variant-numeric:tabular-nums}
.note.unread{background:var(--accent-soft)}.note.unread .k{color:var(--accent);font-weight:600}
.pre{white-space:pre-wrap;overflow-wrap:anywhere}
.msgs{display:flex;flex-direction:column;gap:.6rem;margin:1rem 0}.msg{max-width:min(40rem,88%);padding:.6rem .85rem;border-radius:12px;background:var(--surface);border:1px solid var(--line)}
.msg.mine{align-self:flex-end;background:var(--accent-soft);border-color:transparent}.msg .who{font-size:.8rem;margin-bottom:.2rem}
textarea{width:100%;font:inherit;padding:.5rem .6rem;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--fg);resize:vertical}
.chips{display:flex;flex-wrap:wrap;gap:.3rem;margin:.4rem 0}.chip{background:var(--accent-soft);border-radius:999px;padding:.1rem .3rem .1rem .65rem;font-size:.9rem}
.pick{display:flex;flex-direction:column;max-height:12rem;overflow:auto;border:1px solid var(--line);border-radius:var(--radius)}.pick button{text-align:start;border:0;border-bottom:1px solid var(--line);border-radius:0;background:var(--surface);padding:.45rem .6rem}.pick button:hover{background:var(--surface2)}
.pick>.muted{padding:.5rem .6rem}
.sc{border:1px solid var(--line);border-radius:var(--radius);padding:.55rem .7rem;margin-top:.8rem;background:var(--surface2);font-size:.9rem}
.si{display:grid;grid-template-columns:1rem 6.5rem 1fr;gap:.4rem;padding:.12rem 0}.si .l{color:var(--muted)}.si.ok>span:first-child{color:var(--ok)}.si.warning>span:first-child{color:var(--warn)}.si.problem>span:first-child{color:var(--bad)}.si.problem>span:last-child{color:var(--bad)}
.bar{display:inline-block;width:6rem;height:.45rem;background:var(--line);border-radius:999px;overflow:hidden;vertical-align:middle;margin-inline-end:.4rem}.bar span{display:block;height:100%;background:var(--accent)}
.toolbar button{margin:0 .3rem .3rem 0}
@media (max-width:720px){.note{grid-template-columns:1fr auto}.note .k{grid-column:1/-1;padding:0}.si{grid-template-columns:1rem 5.5rem 1fr}}

[hidden]{display:none!important}
button:disabled{opacity:.55;cursor:not-allowed}
td.mono{white-space:nowrap}
/* chat-style inbox */
.inbox{display:grid;grid-template-columns:minmax(16rem,22rem) 1fr;height:calc(100vh - 13.5rem);min-height:26rem;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--surface)}
.convs{overflow-y:auto;border-inline-end:1px solid var(--line)}
.conv{display:flex;gap:.65rem;align-items:flex-start;padding:.7rem .8rem;border-bottom:1px solid var(--line);color:inherit;position:relative}
.conv:hover{background:var(--surface2);text-decoration:none}.conv.on{background:var(--accent-soft)}
.conv .cx{min-width:0;flex:1;display:flex;flex-direction:column}.conv .ct{display:flex;gap:.5rem;justify-content:space-between}
.conv .ct b{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conv.unread .ct b{font-weight:700}
.conv .w{font-size:.78rem;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.conv .cs{font-size:.82rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conv .cp{font-size:.88rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.conv.unread .cp{color:var(--fg)}
.conv .dot{position:absolute;inset-inline-end:.8rem;bottom:.9rem;width:.55rem;height:.55rem;border-radius:50%;background:var(--accent)}
.av{flex:none;width:2.3rem;height:2.3rem;border-radius:50%;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);font-weight:700;font-size:.85rem}
.av.ann{background:var(--warn-bg)}.av.sm{width:1.9rem;height:1.9rem;font-size:.75rem}.avsp{flex:none;width:1.9rem}
.pane{display:flex;flex-direction:column;min-width:0;min-height:0}
.chathead{display:flex;gap:.7rem;align-items:center;padding:.65rem .9rem;border-bottom:1px solid var(--line)}.chathead .muted{font-size:.85rem}
.chathead .back{display:none;font-size:1.6rem;line-height:1;padding:0 .3rem;color:var(--fg)}
.chat{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.15rem;background:var(--bg)}
.day{text-align:center;margin:.8rem 0 .5rem}.day span{font-size:.75rem;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:.15rem .7rem}
.bub{display:flex;gap:.45rem;align-items:flex-end;margin-top:.45rem}.bub.cont{margin-top:.1rem}
.bub .bb{max-width:min(36rem,78%);background:var(--surface);border:1px solid var(--line);border-radius:16px 16px 16px 4px;padding:.45rem .75rem .3rem}
.bub.cont .bb{border-radius:16px 16px 16px 4px}
.bub.mine{flex-direction:row-reverse}.bub.mine .avsp{display:none}
.bub.mine .bb{background:var(--accent);color:var(--accent-fg);border-color:transparent;border-radius:16px 16px 4px 16px}
.bub .who{font-size:.78rem;font-weight:600;color:var(--accent);margin-bottom:.1rem}
.bub .tm{font-size:.7rem;opacity:.7;text-align:end;margin-top:.1rem;font-variant-numeric:tabular-nums}
.composer{display:flex;gap:.5rem;align-items:flex-end;padding:.6rem .7rem;border-top:1px solid var(--line);background:var(--surface)}
.composer textarea{flex:1;resize:none;border-radius:20px;padding:.55rem .9rem;max-height:10rem;line-height:1.4}.composer button{border-radius:20px}
.composer.ro{color:var(--muted);font-size:.9rem}
.empty{margin:auto;text-align:center;color:var(--muted);padding:2rem}.empty .big{font-size:2.4rem;opacity:.5}
@media (max-width:720px){
  .inbox{grid-template-columns:1fr;height:calc(100vh - 15rem)}
  .inbox.has-open .convs{display:none}.inbox:not(.has-open) .pane{display:none}
  .chathead .back{display:block}.bub .bb{max-width:85%}
}
/* access grid */
.grid-acc th.rot{height:9.5rem;vertical-align:bottom;padding:.3rem .2rem;min-width:2rem}
.grid-acc th.rot span{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;font-weight:500;text-transform:none;letter-spacing:0;font-size:.8rem}
.grid-acc td.c{text-align:center;padding:.3rem}.grid-acc td.c span{color:var(--ok)}.grid-acc input{width:1.05rem;height:1.05rem}
/* 0.19 refinements */
.board{border-radius:var(--radius-lg);box-shadow:var(--shadow)}
.blk{border-radius:6px;border-inline-start-width:3px;font-weight:500}
@media (max-width:860px){.alert{align-items:flex-start;flex-wrap:wrap}.alert .pill{min-width:0}.grid{grid-template-columns:1fr 1fr}.stat b{font-size:1.5rem}}
.kv{margin:0}
.seen{align-self:flex-end;font-size:.72rem;color:var(--muted);margin:.2rem .2rem 0}
.prog td.c,.prog th.c{text-align:center;padding:.5rem .3rem}.prog .pill{font-size:.7rem;padding:0 .4rem}.prog a.pill:hover{text-decoration:none;border-color:var(--accent)}
.blk.drag{opacity:.85;box-shadow:var(--shadow-lg);z-index:3;cursor:grabbing}.lane-b .blk{cursor:pointer}
nav.side .navgroup a{padding:.4rem .6rem}.navgroup{margin-bottom:.35rem}.navlabel{padding:.4rem .6rem .2rem}
/* flight kit */
.kitgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:.7rem;margin:.5rem 0 .8rem}
.kitbtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.25rem;min-height:110px;border-radius:var(--radius-lg);font-size:1rem;background:var(--surface);border:2px solid var(--line-strong);touch-action:manipulation;user-select:none}
.kitbtn span{font-weight:600;color:var(--muted);text-transform:uppercase;font-size:.78rem;letter-spacing:.06em}.kitbtn b{font-size:1.45rem}.kitbtn small{color:var(--muted);font-size:.75rem}
.kitbtn.set{border-color:var(--accent);background:var(--accent-soft)}.kitbtn.big{border-color:var(--accent)}.kitbtn.big b{font-size:2.2rem}
.kitbtn:active{transform:scale(.98)}
.kitsum{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;align-items:center;margin-bottom:.5rem;color:var(--muted)}.kitsum b{color:var(--fg);font-size:1.1rem}
.kitclock{font-size:1.35rem;font-weight:600}
.kitchips{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.5rem}
.chip{min-height:34px;border-radius:99px;padding:.3rem .8rem;font-size:.86rem;box-shadow:none}
.kitnote{display:flex;gap:.5rem;align-items:stretch;margin-bottom:.7rem}.kitnote textarea{flex:1;margin:0}.kitnote button{min-width:5rem}
button.alert{width:100%;text-align:start;border-radius:0;box-shadow:none;border:0;border-bottom:1px solid var(--line);background:transparent;min-height:0}
.two{display:grid;grid-template-columns:1fr 1fr;gap:0 .8rem}
@media (max-width:640px){.kitgrid{grid-template-columns:1fr 1fr}.kitbtn{min-height:96px}.kitbtn.big{grid-column:1/-1;order:-1;min-height:120px}}
/* calculators */
.calcs{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1rem;align-items:start}
.calcs h2{margin-top:0;font-size:1.05rem}.cres{background:var(--surface2);border:1px solid var(--line);border-radius:var(--radius);padding:.55rem .7rem;margin:.5rem 0 .2rem;line-height:1.55}
.cres .ok{color:var(--ok)}.cres .bad,.cres .warn{color:var(--bad)}
/* offline */
.offbar{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;padding:.7rem 1rem;background:var(--deck,#0a1a30);color:#fff}.offbar .logo{width:22px;height:22px;color:#5cb8ff}
.offbar a{color:#c8d4e5}.offbar a.on{color:#fff;font-weight:600;text-decoration:underline}.offbar .link{color:#5cb8ff;margin-inline-start:auto}
/* planner */
.tabs button{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;border:0;border-bottom:2px solid transparent;border-radius:0;box-shadow:none;background:none;padding:.45rem .9rem;color:var(--muted);margin-bottom:-1px}
.tabs button small{font-size:.75rem;font-weight:400}.tabs button.on{color:var(--fg);border-bottom-color:var(--accent);font-weight:600}
.kpis{display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;margin:.4rem 0;color:var(--muted)}.kpis b{color:var(--fg);font-size:1.05rem}
.spin{width:28px;height:28px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite;margin:1rem auto}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spin{animation-duration:3s}}
/* currency bars */
.barrow{display:flex;gap:.6rem;align-items:center;margin:.3rem 0}.barrow .bl{flex:0 0 15rem}.barrow .bt{flex:1;height:8px;background:var(--line);border-radius:4px;overflow:hidden}
.barrow .bv{flex:0 0 11.5rem;text-align:end;white-space:nowrap}
@media (max-width:640px){.barrow{flex-wrap:wrap;gap:.2rem .6rem}.barrow .bl{flex-basis:100%}.barrow .bv{flex:0 0 auto}}
/* language */
.authmain{position:relative}
.authlang{position:absolute;top:1rem;right:1.25rem;display:flex;gap:.5rem;align-items:center}
.authlang .btn{min-height:0;padding:.35rem .7rem;font-size:.85rem}
.authlang select{width:auto;min-width:8rem;padding:.35rem .6rem;font-size:.85rem}
.radios label{display:flex;align-items:center;gap:.6rem;padding:.5rem 0;font-weight:500}
.radios input{width:auto;margin:0}
/* test checklist (platform admin portal) */
.clsec{font-size:1rem;margin:1.6rem 0 .5rem}
.clitem{display:flex;gap:1rem;justify-content:space-between;align-items:flex-start;padding:.8rem 1rem;margin-bottom:.5rem;border-inline-start:3px solid var(--line)}
.clitem.passed{border-inline-start-color:var(--ok)}.clitem.failed{border-inline-start-color:var(--bad)}.clitem.skipped{opacity:.7}
.clhead{display:flex;gap:.8rem;min-width:0;flex:1}
.clnum{font-weight:700;color:var(--muted);min-width:1.8rem;font-variant-numeric:tabular-nums}
.cldo{min-width:0;flex:1}
.clmore{white-space:pre-wrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82rem;background:var(--surface);border-radius:6px;padding:.4rem .6rem;margin:.4rem 0;overflow-x:auto}
.clexp{color:var(--muted);margin-top:.35rem}
.clnote{margin-top:.4rem;padding:.35rem .6rem;border-radius:6px;background:color-mix(in srgb,var(--bad) 10%,transparent);white-space:pre-wrap}
.clitem.passed .clnote,.clitem.skipped .clnote{background:var(--surface)}
.clbtns{display:flex;flex-wrap:wrap;gap:.35rem;justify-content:flex-end;flex-shrink:0}
.clbtns button{padding:.3rem .65rem;font-size:.85rem}
.clbtns button.danger{background:var(--bad);border-color:var(--bad);color:#fff}
.clbtns button.on{background:var(--surface);font-weight:600}
@media (max-width:640px){.clitem{flex-direction:column}.clbtns{justify-content:flex-start}}
@media print{.clbtns,#clprint,.tabs{display:none}.clitem{break-inside:avoid}}
/* file viewer */
dialog.viewer{width:min(1100px,96vw);height:92vh;max-height:92vh;padding:0;display:flex;flex-direction:column}
dialog.viewer:not([open]){display:none}
.vhead{display:flex;align-items:center;gap:.5rem;padding:.6rem .8rem;border-bottom:1px solid var(--line)}
.vname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vbody{flex:1;min-height:0;overflow:auto;background:var(--surface)}
.vbody iframe{width:100%;height:100%;border:0;display:block;background:#fff}
.vbody img{display:block;max-width:100%;margin:0 auto}
.vtext{margin:0;padding:1rem;white-space:pre-wrap;font:12px/1.5 ui-monospace,Menlo,monospace}
.vnone{padding:3rem 1rem;text-align:center}
@media (max-width:640px){dialog.viewer{width:100vw;height:100dvh;max-height:100dvh;max-width:100vw;border-radius:0}}
/* message attachments */
.atts{display:flex;flex-direction:column;gap:.25rem;margin-top:.35rem}
.att{display:inline-flex;gap:.4rem;align-items:center;padding:.3rem .55rem;border-radius:8px;background:color-mix(in srgb,var(--surface) 70%,transparent);border:1px solid var(--line);font-size:.86rem;word-break:break-all}
.attbtn{cursor:pointer;font-size:1.15rem;padding:.35rem .4rem;align-self:flex-end;user-select:none}
.rbw{flex:1;min-width:0;display:flex;flex-direction:column}.rbw .chips:empty{display:none}.rbw .chips{margin-bottom:.3rem}
.attpick{margin-top:.6rem;cursor:pointer}
/* ICAO flight plan form */
dialog:has(.fplform){width:min(1000px,96vw)}
.fplform .row2 input,.fplform .row2 select{width:100%}
.fplgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}
.fplgrid fieldset{border:1px solid var(--line);border-radius:var(--radius);padding:.4rem .8rem .8rem;margin:0;min-width:0}
.fplgrid legend{font-weight:600;font-size:.85rem;padding:0 .3rem}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.fplmsg{font:600 .95rem/1.45 ui-monospace,Menlo,Consolas,monospace;background:var(--surface2);border:1px solid var(--line);border-radius:var(--radius);padding:.7rem .9rem;white-space:pre-wrap;word-break:break-word;margin:0 0 .4rem}
#printonly{display:none}
@media print{body.printing>*:not(#printonly){display:none!important}body.printing #printonly{display:block}#printonly pre{font:13pt/1.5 ui-monospace,Menlo,Consolas,monospace;white-space:pre-wrap}}
@media (max-width:760px){.fplgrid{grid-template-columns:1fr}}
/* radar */
.radarmap{height:min(62vh,560px);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface2);margin-top:.6rem}
.rac svg{width:26px;height:26px;fill:#6b7a90;stroke:#fff;stroke-width:.8;filter:drop-shadow(0 1px 1px rgba(0,0,0,.35))}
.rac.mine svg{fill:#0b6bcb;width:30px;height:30px;margin:-2px}
.rac.gnd svg{opacity:.55}
.rbase span{display:inline-block;transform:translate(-50%,-50%);font:700 11px/1 system-ui,sans-serif;background:#0a1a30;color:#fff;padding:3px 5px;border-radius:4px;white-space:nowrap}
.leaflet-tooltip.rtip{font:12px/1.35 system-ui,sans-serif;padding:3px 6px}
.leaflet-tooltip.rtip.mine{border-color:#0b6bcb;color:#0a1a30}
.small{font-size:.85rem}
/* programmes */
.pathway{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem}
.pstep{display:inline-flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius);padding:.35rem .6rem;min-width:4.5rem;background:var(--surface)}
.pstep small{color:var(--muted);font-size:.75rem}
.pstep.done,.pstep.credited{border-color:#1f8a4c55;background:#1f8a4c12}
.pstep.current{border-color:#c98a0b88;background:#c98a0b14}
.parrow{color:var(--muted)}
.steps{font-size:.9rem}
.lrow{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.7rem 1rem;border-bottom:1px solid var(--line)}
.lrow:last-child{border-bottom:0}.lrow.click{cursor:pointer}.lrow.click:hover{background:var(--surface2)}
/* shared read-only page (examiners, sponsors) */
main.shared{max-width:980px;margin:0 auto;padding:1.5rem 1.2rem 4rem}
.shead{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;border-bottom:1px solid var(--line);padding-bottom:1rem}
.shead h1{margin:.2rem 0}
main.shared section{margin:1.4rem 0}
@media print{.noprint{display:none}main.shared{padding:0}}

/* two-step sign-in */
.tfsteps{padding-left:1.2rem;margin:.6rem 0}.tfsteps li{margin:.7rem 0}
.qr{margin:.6rem 0;line-height:0}.qr svg{width:190px;height:190px;border-radius:6px;background:#fff}
.codein{font-family:var(--mono);font-size:1.4rem;letter-spacing:.2em;text-align:center;max-width:14rem}
.rcodes{columns:2;font-family:var(--mono);font-size:1.05rem;background:var(--surface2);border:1px dashed var(--line-strong);border-radius:var(--radius);padding:.8rem .8rem .8rem 2.2rem;user-select:all}
.rcodes li{margin:.2rem 0}

.authlegal{text-align:center;font-size:.8rem;color:var(--muted);margin:1rem 0 0}.authlegal a{color:var(--muted);text-decoration:underline}
/* Personal callsign: five letters, unique in the school */
.callsign { display:inline-block; font:600 .72rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing:.08em; padding:.2rem .4rem; border-radius:.35rem; background:rgba(92,184,255,.14); color:var(--accent, #0b5cad); vertical-align:middle; }
.callsign-lg { font-size:.85rem; padding:.25rem .5rem; margin-left:.35rem; }
