/* FORM v4 "Instrument". Numbers first, rows not cards, colour means status. */
:root{
  --font: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-num: var(--font);
  --bg:#FFFFFF; --bg-elev:#F4F4F6; --surface:#FFFFFF; --fill:#ECECF0; --fill-2:#E0E0E6;
  --hair:#E6E6EB; --hair-strong:#C7C7CD; --control-edge:#82828B;
  --ink:#0B0B0C; --ink-2:#47474E; --ink-3:#696971; --ink-4:#B4B4BA;
  --done:#157034; --live:#0062C4; --warn:#9E4F00; --bad:#D0021B;
  --done-tint:rgb(21 112 52 / .12); --live-tint:rgb(0 98 196 / .10); --warn-tint:rgb(158 79 0 / .10); --bad-tint:rgb(208 2 27 / .08);
  --due:#FFD60A; --on-due:#000; --due-edge:rgb(0 0 0 / .18);
  --primary:#0B0B0C; --on-primary:#FFF; --on-status:#FFF; --focus:#0062C4;
  --island:#1C1C1F; --island-edge:transparent; --island-ink:#F5F5F7; --island-ink-2:#A1A1A8; --island-fill:#2E2E32; --island-live:#4FA3FF; --island-go:#30D158;
  --scrim:rgb(0 0 0 / .32); --shadow-sheet:0 -12px 40px rgb(0 0 0 / .14); --shadow-float:0 8px 28px rgb(0 0 0 / .16),0 0 0 .5px rgb(0 0 0 / .06);
  --row-now-edge:inset 0 0 0 1px var(--hair);
  --gutter:16px; --section:32px; --nav-total:calc(64px + 10px + env(safe-area-inset-bottom)); --dock:0px;
  --ease:cubic-bezier(.2,.8,.2,1); --ease-sheet:cubic-bezier(.32,.72,0,1); --dur-2:200ms; --dur-3:320ms;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#0A0A0C; --bg-elev:#151517; --surface:#1C1C1F; --fill:#26262A; --fill-2:#323236;
  --hair:#232327; --hair-strong:#3A3A40; --control-edge:#6E6E78;
  --ink:#F5F5F7; --ink-2:#AEAEB6; --ink-3:#8E8E97; --ink-4:#4A4A50;
  --done:#30D158; --live:#4FA3FF; --warn:#FF9F0A; --bad:#FF5C52;
  --done-tint:rgb(48 209 88 / .16); --live-tint:rgb(79 163 255 / .16); --warn-tint:rgb(255 159 10 / .16); --bad-tint:rgb(255 92 82 / .18);
  --due-edge:transparent; --primary:#F5F5F7; --on-primary:#0A0A0C; --on-status:#0A0A0C; --focus:#4FA3FF;
  --island-edge:#3A3A40; --scrim:rgb(0 0 0 / .64); --shadow-sheet:none; --shadow-float:0 10px 30px rgb(0 0 0 / .7); --row-now-edge:none;
  color-scheme:dark;
}}
:root[data-theme="dark"]{
  --bg:#0A0A0C; --bg-elev:#151517; --surface:#1C1C1F; --fill:#26262A; --fill-2:#323236;
  --hair:#232327; --hair-strong:#3A3A40; --control-edge:#6E6E78;
  --ink:#F5F5F7; --ink-2:#AEAEB6; --ink-3:#8E8E97; --ink-4:#4A4A50;
  --done:#30D158; --live:#4FA3FF; --warn:#FF9F0A; --bad:#FF5C52;
  --done-tint:rgb(48 209 88 / .16); --live-tint:rgb(79 163 255 / .16); --warn-tint:rgb(255 159 10 / .16); --bad-tint:rgb(255 92 82 / .18);
  --due-edge:transparent; --primary:#F5F5F7; --on-primary:#0A0A0C; --on-status:#0A0A0C; --focus:#4FA3FF;
  --island-edge:#3A3A40; --scrim:rgb(0 0 0 / .64); --shadow-sheet:none; --shadow-float:0 10px 30px rgb(0 0 0 / .7); --row-now-edge:none;
  color-scheme:dark;
}
@media (min-width:600px){:root{--gutter:24px;--section:40px}}
body[data-dock="pill"]{--dock:54px} body[data-dock="rest"]{--dock:106px} body[data-dock="rest-rir"]{--dock:158px}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:400 15px/20px var(--font);-webkit-font-smoothing:antialiased;font-synthesis:none;min-height:100dvh}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;-webkit-tap-highlight-color:transparent}
h1,h2,h3,p{margin:0}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}
svg{width:20px;height:20px;flex:none}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.num,.metric-v,.when,.val,.set input,.dock .t,.now-pill .t,#sess-t,.big2,.kc,.gv{font-family:var(--font-num);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
.u{font-size:.34em;font-weight:500;letter-spacing:0;color:var(--ink-3);margin-left:.16em}
.of{font-weight:400;color:var(--ink-3)}
.dim{color:var(--ink-3)} .ink2{color:var(--ink-2)}
.t-title{font:700 28px/32px var(--font);letter-spacing:-.02em}
.t-title-2{font:700 22px/26px var(--font);letter-spacing:-.015em}
.t-display{font:700 44px/44px var(--font-num);letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.t-sub{font:400 13px/18px var(--font);color:var(--ink-2)}
.t-meta{font:500 13px/18px var(--font);color:var(--ink-2)}
.mt1{margin-top:4px}.mt2{margin-top:8px}.mt3{margin-top:12px}.mt4{margin-top:16px}.mt5{margin-top:24px}
.row{display:flex;align-items:center;gap:8px}.between{display:flex;align-items:center;justify-content:space-between;gap:12px}.grow{flex:1;min-width:0}.wrap{flex-wrap:wrap}

/* Shell */
.shell{min-height:100dvh}
.topbar{position:sticky;top:0;z-index:20}
.topbar[data-scrolled]{background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(20px) saturate(1.6);-webkit-backdrop-filter:blur(20px) saturate(1.6);box-shadow:0 1px 0 var(--hair)}
@supports not (backdrop-filter:blur(1px)){.topbar[data-scrolled]{background:var(--bg)}}
.topbar-in{max-width:1040px;margin:0 auto;display:flex;align-items:center;gap:4px;min-height:52px;padding:env(safe-area-inset-top) 4px 0 var(--gutter)}
.lead{flex:1;min-width:0;display:flex;align-items:center;gap:4px;white-space:nowrap;overflow:hidden}
.lead .meta{font:500 13px/18px var(--font);color:var(--ink-2);overflow:hidden;text-overflow:ellipsis}
.lead .compact{display:none;font:700 15px/20px var(--font-num);color:var(--ink)}
.topbar[data-collapsed] .lead .meta{display:none}.topbar[data-collapsed] .lead .compact{display:inline}
.lead .daybtn{border:0;background:none;padding:0 4px;min-height:44px;font:700 15px/20px var(--font);color:var(--ink);white-space:nowrap}
.lead .daybtn span{font:500 13px var(--font);color:var(--ink-2);margin-left:6px}
.status-pill{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border:0;border-radius:999px;background:none;font:500 13px/1 var(--font);color:var(--ink-2);white-space:nowrap}
.status-pill[data-state="idle"]{display:none}
.status-pill .dot{width:6px;height:6px;border-radius:50%;background:currentColor}
.status-pill[data-state="saving"]{pointer-events:none}.status-pill[data-state="saving"] .dot{animation:pulse 1s infinite}
.status-pill[data-state="offline"]{color:var(--warn);background:var(--warn-tint)}
.status-pill[data-state="error"]{color:var(--bad);background:var(--bad-tint);font-weight:700}
.icon-btn{width:44px;height:44px;display:inline-grid;place-items:center;border:0;border-radius:22px;background:none;color:var(--ink-2);flex:none}
.icon-btn:active{background:var(--fill)}
.icon-btn[disabled]{opacity:.3}
.main{max-width:1040px;margin:0 auto;padding:0 var(--gutter) calc(var(--nav-total) + var(--dock) + 24px)}
.panes{display:block}
.pane + .pane{margin-top:var(--section)}
@media (min-width:600px){.panes{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:48px;align-items:start}.pane + .pane{margin-top:0}}
@media (min-width:1024px){.panes{column-gap:56px}.shell{padding-left:112px}}
@keyframes pulse{50%{opacity:.3}}
@keyframes spin{to{transform:rotate(360deg)}}

/* Navigation capsule with a centred + */
.nav{position:fixed;left:12px;right:12px;bottom:calc(10px + env(safe-area-inset-bottom));z-index:30;display:flex;justify-content:center;pointer-events:none}
.nav-cap{pointer-events:auto;width:100%;max-width:440px;height:64px;padding:4px;border-radius:32px;display:grid;grid-template-columns:1fr 1fr 64px 1fr 1fr;align-items:center;background:color-mix(in srgb,var(--bg-elev) 84%,transparent);backdrop-filter:blur(24px) saturate(1.8);-webkit-backdrop-filter:blur(24px) saturate(1.8);border:1px solid var(--hair);box-shadow:var(--shadow-float)}
@supports not (backdrop-filter:blur(1px)){.nav-cap{background:var(--bg-elev)}}
.nav-item{min-height:56px;border:0;border-radius:28px;background:none;display:grid;place-items:center;align-content:center;gap:2px;font:500 12px/14px var(--font);color:var(--ink-3)}
.nav-item svg{width:24px;height:24px}
.nav-item[aria-current="page"]{background:var(--fill-2);color:var(--ink);font-weight:700}
.nav-log{justify-self:center;width:52px;height:52px;border:0;border-radius:50%;background:var(--primary);color:var(--on-primary);display:grid;place-items:center}
.nav-log svg{width:26px;height:26px;stroke-width:2.2}
.nav-log:active,.nav-item:active{transform:scale(.94)}
@media (min-width:1024px){.nav{top:16px;bottom:16px;left:16px;right:auto;width:80px}.nav-cap{height:auto;max-width:none;grid-template-columns:1fr;grid-auto-rows:64px;padding:8px 4px;align-content:start}.nav-log{order:-1;margin-bottom:8px}}

/* Section headers, rows, groups */
.sec-h{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;margin:var(--section) 0 4px;font:700 15px/20px var(--font);color:var(--ink)}
.pane > .sec-h:first-child{margin-top:8px}
.sec-h .act{display:flex;align-items:center;gap:4px}
.lrow{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;width:100%;min-height:52px;padding:6px 16px;border:0;background:none;text-align:left;color:inherit;font:400 15px/20px var(--font)}
.lrow.lead-sg{grid-template-columns:18px minmax(0,1fr) auto auto}
.lrow .l1{display:block;font:500 16px/22px var(--font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lrow .l2{display:block;font:400 13px/18px var(--font);color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lrow .v{font:500 15px/20px var(--font-num);color:var(--ink-2);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.lrow .v.ink{color:var(--ink);font-weight:700}
.lrow .v.live{color:var(--live);font-weight:700}
.lrow .chev{width:16px;height:16px;color:var(--ink-3)}
.lrow + .lrow::before,.lrow + .goalbar::before,.goalbar + .lrow::before{content:"";position:absolute;top:0;left:16px;right:0;height:1px;background:var(--hair)}
button.lrow:active{background:var(--fill)}
.lrow.danger .l1{color:var(--bad)}
.lrow[disabled]{opacity:.45}
.group{background:var(--bg-elev);border-radius:20px;overflow:hidden}
.sheet .group{background:var(--fill)}
.group-foot{font:500 13px/18px var(--font);color:var(--ink-2);margin:8px 16px 0;display:flex;justify-content:space-between;align-items:center;gap:8px}
.flat .lrow,.flat .goalbar{padding-left:0;padding-right:0}.flat .lrow + .lrow::before,.flat .goalbar + .goalbar::before{left:0}
.empty-line{font:400 15px/20px var(--font);color:var(--ink-3);padding:12px 0}

/* Buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:0 20px;border:0;border-radius:999px;background:var(--primary);color:var(--on-primary);font:500 16px/1 var(--font);white-space:nowrap;text-decoration:none}
.btn svg{width:18px;height:18px}
.btn:active,.chipbtn:active{transform:scale(.97)}
.btn.secondary{background:var(--fill);color:var(--ink)}
.btn.ghost{background:none;color:var(--ink);padding:0 12px}
.btn.ghost.dim{color:var(--ink-2)}
.btn.danger{background:var(--fill);color:var(--bad)}.btn.danger.ghost{background:none}
.btn.danger.filled{background:var(--bad);color:var(--on-status)}
.btn.sm{min-height:44px;padding:0 16px;font-size:15px}
.btn.xl{min-height:56px;width:100%;font:700 17px/1 var(--font)}
.btn.full{width:100%}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.38;cursor:not-allowed}
.btn.busy{color:transparent!important;position:relative}
.btn.busy::after{content:"";position:absolute;width:18px;height:18px;border:2px solid var(--on-primary);border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}
.btn.secondary.busy::after,.btn.ghost.busy::after{border-color:var(--ink);border-right-color:transparent}

/* Tags, tokens, chips */
.tag{display:inline-flex;align-items:center;gap:4px;font:500 13px/18px var(--font);color:var(--ink-2);white-space:nowrap}
.tag.done{color:var(--done)}.tag.live{color:var(--live)}.tag.warn{color:var(--warn)}.tag.bad{color:var(--bad)}
.tag.box{height:24px;padding:0 8px;border-radius:6px;background:var(--fill)}
.tag.box.warn{background:var(--warn-tint)}.tag.box.bad{background:var(--bad-tint);border:0;cursor:pointer;min-height:36px}
.token{display:inline-flex;align-items:center;height:24px;padding:0 8px;border-radius:999px;border:1px dashed var(--control-edge);font:500 13px/1 var(--font-num);color:var(--ink-2);white-space:nowrap}
.chipbtn{position:relative;min-width:48px;min-height:44px;padding:0 14px;border:0;border-radius:12px;background:var(--fill);color:var(--ink);font:700 16px/1 var(--font-num);display:inline-flex;align-items:center;justify-content:center;gap:6px}
.chipbtn[aria-pressed="true"],.chipbtn:has(input:checked){background:var(--primary);color:var(--on-primary)}
.chipbtn input{position:absolute;opacity:0;pointer-events:none}
.chips{display:flex;flex-wrap:wrap;gap:8px}

/* Hero metric and fuel line */
.hero{display:grid;width:100%;text-align:left;border:0;background:none;color:inherit;padding:12px 0 0;border-radius:16px}
button.hero:active{opacity:.72}
.metric-v{font:700 64px/60px var(--font-num);letter-spacing:-.04em;margin:0;color:var(--ink)}
@media (max-width:359px){.metric-v{font-size:56px;line-height:52px}}
@media (max-height:600px){.metric-v{font-size:48px;line-height:46px}}
.metric-v .to{font-size:22px;font-weight:700;color:var(--ink-3);letter-spacing:-.01em;margin-left:8px}
.metric-l{font:500 15px/20px var(--font);color:var(--ink-2);margin-top:4px}
.metric.over .metric-l{color:var(--warn)}
.metric-x{font:700 15px/20px var(--font-num);margin-top:8px}
.hero .fuel{margin-top:16px}
.hero-sub{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;font:400 13px/18px var(--font);color:var(--ink-2)}
.hero-sub b{font:700 13px/18px var(--font-num);color:var(--ink)}
.est{color:var(--ink-2);text-decoration:underline dotted var(--ink-3);text-decoration-thickness:1.5px;text-underline-offset:3px}
.fuel{position:relative;display:block;height:6px;border-radius:3px;background:var(--fill-2);overflow:hidden}
.fuel .plan{position:absolute;top:0;bottom:0;right:0;width:var(--pl,0%);background:repeating-linear-gradient(90deg,var(--ink-3) 0 2px,transparent 2px 5px)}
.fuel .eat{position:absolute;z-index:1;top:0;bottom:0;left:0;width:min(var(--e),100%);border-radius:3px;background:var(--ink)}
.fuel.over .eat{width:var(--t);border-radius:3px 0 0 3px}
.fuel.over .ovr{position:absolute;top:0;bottom:0;left:var(--t);right:0;background:repeating-linear-gradient(135deg,var(--warn) 0 2px,transparent 2px 5px)}
.fuel.over .tick{position:absolute;z-index:2;top:0;bottom:0;left:var(--t);width:2px;background:var(--bg)}
.fuel.thin{height:4px;border-radius:2px}
.fuel.done .eat{background:var(--done)}
.prot{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;margin-top:20px;font:500 15px/20px var(--font)}
.prot .val{font-size:15px}
.macros{display:flex;justify-content:space-between;gap:8px;margin-top:16px;font:500 15px/20px var(--font-num);color:var(--ink-2)}
.macros b{color:var(--ink)}

/* Segmented control and switch */
.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:3px;padding:3px;border-radius:14px;background:var(--fill)}
.seg button{min-height:44px;border:0;border-radius:11px;background:none;font:500 15px/1 var(--font);color:var(--ink-2);padding:0 8px}
.seg button[aria-pressed="true"]{background:var(--primary);color:var(--on-primary);font-weight:700}
.seg button[disabled]{color:var(--ink-3);opacity:.6}
.switch{position:relative;flex:none;width:52px;height:32px;border-radius:16px;background:var(--fill-2);box-shadow:inset 0 0 0 1px var(--control-edge)}
.switch::after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:var(--bg);box-shadow:0 1px 3px rgb(0 0 0 / .3)}
[aria-checked="true"] > .switch{background:var(--done);box-shadow:none}
[aria-checked="true"] > .switch::after{left:23px;background:#fff}
[aria-checked="true"] > .switch::before{content:"✓";position:absolute;left:9px;top:8px;font:700 13px/1 var(--font);color:#fff}

/* Departure board and status glyphs */
.sg{position:relative;z-index:1;flex:none;justify-self:center;display:grid;place-items:center;width:12px;height:12px;border-radius:50%;background:var(--bg);box-shadow:inset 0 0 0 2px var(--ink-3);color:var(--ink-3)}
.group .sg,.sheet .sg,.ex-panel .sg{background:transparent}
.is-now .sg:not(.now):not(.done){background:var(--bg-elev)}
.sg.now{width:14px;height:14px;box-shadow:0 0 0 4px var(--live-tint);background:var(--live)}
.sg.prog{width:16px;height:16px;box-shadow:inset 0 0 0 2px var(--live);background:linear-gradient(90deg,var(--live) 50%,transparent 50%)}
.sg.done{width:18px;height:18px;box-shadow:none;background:var(--done);color:var(--on-status)}.sg.done svg{width:12px;height:12px;stroke-width:3}
.sg.skip{box-shadow:none;outline:2px dashed var(--ink-3);outline-offset:-2px}.sg.skip::after{content:"";position:absolute;width:14px;height:2px;background:var(--ink-3);transform:rotate(-45deg)}
.sg.ask{width:18px;height:18px;box-shadow:none;outline:2px dashed var(--warn);outline-offset:-2px;color:var(--warn);font:700 11px/1 var(--font)}
.board{list-style:none;margin:24px 0 0;padding:0;position:relative}
.board::before{content:"";position:absolute;left:59px;top:36px;bottom:36px;width:2px;border-radius:1px;background:var(--hair-strong)}
.brow{position:relative;display:grid;grid-template-columns:44px 16px minmax(0,1fr) auto;column-gap:8px;align-items:center;min-height:64px;padding:8px 0}
.brow + .brow::after{content:"";position:absolute;top:0;left:68px;right:0;height:1px;background:var(--hair)}
.brow.is-now{background:var(--bg-elev);box-shadow:var(--row-now-edge);border-radius:16px;margin:4px -12px;padding:10px 12px}
.brow.is-now::after,.brow.is-now + .brow::after{display:none}
.when{font:700 17px/1 var(--font-num);color:var(--ink)}
.when.word{font:500 15px/1 var(--font);color:var(--ink-3)}
.due{display:inline-grid;place-items:center;height:26px;padding:0 6px;margin-left:-6px;border-radius:6px;background:var(--due);color:var(--on-due);box-shadow:inset 0 0 0 1px var(--due-edge);font:700 17px/1 var(--font-num)}
.bmain{min-width:0;text-align:left;border:0;background:none;padding:6px 0;min-height:48px;display:grid;align-content:center;color:inherit}
.title{font:500 17px/22px var(--font);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sub{font:400 13px/18px var(--font);color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trail{display:flex;align-items:center;gap:8px;justify-self:end}
.val{font:700 17px/1 var(--font-num);color:var(--ink);white-space:nowrap}
.val .u{font:400 13px var(--font);color:var(--ink-3);margin-left:2px}
.val.done{color:var(--done)}.val.live{color:var(--live)}.val.warn{color:var(--warn)}.val.dim{color:var(--ink-3);font-weight:500;font-size:15px}.val.est{color:var(--ink-2)}
.brow .row2{grid-column:3 / -1;display:flex;align-items:center;gap:8px;margin-top:6px}
.qw{display:flex;align-items:center;gap:8px;width:100%}
.qw input{width:96px;min-height:44px;font:700 22px/1 var(--font-num);text-align:center;padding:0 6px}
.qw .u{font-size:15px}
.qw .btn{margin-left:auto}
.reco{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;margin-top:8px;padding:12px 0;border-top:1px solid var(--hair)}
.reco .t1{font:500 15px/20px var(--font)}
.reco .t2{font:400 13px/18px var(--font);color:var(--ink-2)}
.reco .btns{display:flex;gap:8px}

/* Week strip and coverage */
.weekstrip{display:grid;grid-template-columns:repeat(7,minmax(40px,1fr));margin-top:24px}
.weekstrip.tight{margin-top:4px}
.wday{min-height:68px;border:0;background:none;border-radius:14px;display:grid;justify-items:center;align-content:center;gap:4px;color:var(--ink)}
.wday .d{font:500 12px/1 var(--font);color:var(--ink-3)}
.wday .n{width:32px;height:32px;display:grid;place-items:center;border-radius:50%;font:700 17px/1 var(--font-num)}
.wday[aria-current="date"] .n{background:var(--ink);color:var(--bg)}
.wday[aria-pressed="true"] .n{box-shadow:inset 0 0 0 2px var(--ink)}
.wday[aria-current="date"][aria-pressed="true"] .n{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--ink)}
.wday .marks{display:flex;gap:3px;height:6px;align-items:center}
.marks i.lift{width:10px;height:4px;border-radius:2px;box-shadow:inset 0 0 0 1.5px var(--ink-3)}
.marks i.ten{width:6px;height:6px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--ink-3)}
.marks i.done{background:var(--done);box-shadow:none}.marks i.live{background:var(--live);box-shadow:none}
.weeknav{display:flex;align-items:center;justify-content:space-between;margin-top:4px}
.weeknav .t-meta{flex:1;text-align:center}
.coverage{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:8px}
.cov{min-height:52px;border-radius:12px;display:grid;align-content:center;justify-items:center;gap:3px}
.cov .d{font:500 12px/1 var(--font);color:var(--ink-3)}.cov .g{font:700 15px/1 var(--font-num)}
.cov.complete{background:var(--done-tint)}.cov.complete .g{color:var(--done)}
.cov.partial{background:var(--warn-tint)}.cov.partial .g{color:var(--warn)}
.cov.unknown{box-shadow:inset 0 0 0 1.5px var(--control-edge)}.cov.unknown .g{color:var(--ink-2)}
.cov.future .d{color:var(--ink-4)}

/* Train: session header, exercise list, panel, sets */
.plan-h{margin-top:20px}
.plan-h .t-sub{margin-top:4px}
.warnrow{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:44px;margin-top:8px;padding:0;border:0;background:none;color:var(--warn);font:500 15px/20px var(--font);text-align:left}
.warnrow svg{width:16px;height:16px}
.sessbar{position:sticky;top:0;z-index:20;margin:0 calc(-1 * var(--gutter));padding:calc(4px + env(safe-area-inset-top)) var(--gutter) 10px;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 1px 0 var(--hair)}
.sessbar .r1{display:flex;align-items:center;gap:10px;min-height:44px}
#sess-t{font:700 28px/1 var(--font-num);letter-spacing:-.02em;color:var(--live)}
.sessbar .cnt{flex:1;font:700 17px/1 var(--font-num);white-space:nowrap}.sessbar .cnt small{font:400 13px var(--font);color:var(--ink-3);margin-left:4px}
.segline{display:grid;grid-template-columns:repeat(var(--n),1fr);gap:3px;margin-top:6px}
.segline > i{height:3px;border-radius:2px;background:linear-gradient(90deg,var(--c,var(--ink)) var(--p,0%),var(--fill-2) var(--p,0%))}
.segline > i.cur{--c:var(--live)}
.exlist{margin-top:12px}
.ex-panel{background:var(--bg-elev);box-shadow:var(--row-now-edge);border-radius:20px;padding:12px;margin:8px -8px}
.ex-panel .pmeta{display:flex;align-items:center;justify-content:space-between;gap:8px;font:500 13px/18px var(--font);color:var(--ink-2);min-height:44px;margin-top:-6px}
.ex-panel .pname{font:700 22px/26px var(--font);letter-spacing:-.015em}
.tline{display:flex;align-items:center;gap:10px;margin-top:6px;flex-wrap:wrap}
.tline .tw{font:700 17px/1 var(--font-num)}
.tline s{color:var(--ink-3);font:500 15px var(--font-num)}
.tline .grow{flex:1}
.pline{font:400 13px/18px var(--font);color:var(--ink-2);margin-top:6px}
.loadseg{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center;margin-top:10px;font:500 13px var(--font);color:var(--ink-2)}
.sets{display:grid;gap:4px;margin-top:12px}
.set-h,.set{display:grid;grid-template-columns:24px 52px minmax(0,1fr) minmax(0,1fr) 48px;column-gap:6px;align-items:center}
.set-h{min-height:28px;font:500 12px/16px var(--font);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);text-align:center}
.sethbtn{border:0;background:none;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;min-height:44px;text-decoration:underline dotted;text-underline-offset:3px}
.rir-col{display:none}
.set{min-height:56px;scroll-margin-bottom:calc(var(--nav-total) + var(--dock) + 16px)}
.set-n{font:700 15px/1 var(--font-num);color:var(--ink-3);text-align:center}
.last{min-height:44px;border:0;background:none;padding:0;font:500 13px/1 var(--font-num);color:var(--ink-3);text-align:center;white-space:nowrap;overflow:hidden}
.set input{min-height:48px;padding:0 4px;border:1px solid var(--control-edge);border-radius:10px;background:transparent;text-align:center;font:700 20px/1 var(--font-num);color:var(--ink-2);width:100%}
.set.dirty input{color:var(--ink)}
.set.dirty .set-n::after{content:"";display:block;width:6px;height:6px;margin:3px auto 0;border-radius:50%;background:var(--warn)}
.set-done{width:48px;height:48px;border-radius:50%;border:2px solid var(--control-edge);background:none;display:grid;place-items:center;color:var(--ink-3)}
.set-done svg{width:22px;height:22px;stroke-width:2.4}
.set.complete input{border-color:transparent;background:var(--done-tint);color:var(--ink);-webkit-text-fill-color:currentColor;opacity:1}
.set.complete .set-done{border:0;background:var(--done);color:var(--on-status)}
.set.warm .set-n{font-size:12px}.set.warm input{font:500 16px/1 var(--font-num)}
.rirb{display:inline-grid;place-items:center;width:20px;height:20px;margin-left:4px;border:1.5px solid var(--ink-3);border-radius:50%;font:700 12px/1 var(--font-num);color:var(--ink-2);vertical-align:middle}
.set.failed{box-shadow:inset 3px 0 0 var(--bad)}
.set-fail{grid-column:2 / -1;justify-self:start}
.set.cur{grid-template-columns:24px 52px minmax(0,1fr) minmax(0,1fr);grid-template-areas:"n last w r" ". . sw sr" "log log log log";row-gap:8px;padding:8px 0 4px}
.set.cur .set-n{grid-area:n;color:var(--ink)}.set.cur .last{grid-area:last}
.tile{position:relative;display:block}.tile-w{grid-area:w}.tile-r{grid-area:r}
.set.cur input{height:64px;padding:0 4px 14px;border:1.5px solid var(--ink);border-radius:12px;background:var(--surface);font:700 32px/1 var(--font-num);letter-spacing:-.02em;color:var(--ink)}
.tile .cap{position:absolute;left:0;right:0;bottom:8px;text-align:center;pointer-events:none;font:500 12px/1 var(--font);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.steps{display:grid;grid-template-columns:1fr 1fr;gap:6px}.steps-w{grid-area:sw}.steps-r{grid-area:sr}
.steps button{min-height:44px;border:0;border-radius:999px;background:var(--fill);color:var(--ink);font:700 15px/1 var(--font-num)}
.ex-panel .steps button{background:var(--fill-2)}
.steps button:active{transform:scale(.95)}
.set.cur .log{grid-area:log}
.set.just .set-done,.sg.just{animation:pop var(--dur-2) var(--ease)}
@keyframes pop{0%{transform:scale(.6)}70%{transform:scale(1.08)}100%{transform:scale(1)}}
@media (max-width:359px){.set-h,.set{grid-template-columns:22px 46px minmax(0,1fr) minmax(0,1fr) 48px;column-gap:4px}.set.cur{grid-template-columns:22px 46px minmax(0,1fr) minmax(0,1fr)}.set.cur input{font-size:28px}}
@media (min-width:1024px){.set-h,.set{grid-template-columns:28px 64px 1fr 1fr 64px 48px}.rir-col{display:block}.set.cur{grid-template-columns:28px 64px 1fr 1fr 64px;grid-template-areas:"n last w r rir" ". . sw sr ." "log log log log log"}.set.cur .rir-col{grid-area:rir;height:64px}.set select.rir-col{min-height:48px;padding:0 4px;text-align:center}}
.mobrow{display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:12px;align-items:center;min-height:60px;width:100%;border:0;background:none;text-align:left;color:inherit;padding:4px 0;position:relative}
.mobrow + .mobrow::before{content:"";position:absolute;top:0;left:60px;right:0;height:1px;background:var(--hair)}
.mobrow .chk{width:44px;height:44px;border-radius:50%;border:2px solid var(--control-edge);display:grid;place-items:center;color:var(--ink-3)}
.mobrow[aria-pressed="true"] .chk{border:0;background:var(--done);color:var(--on-status)}
.mobrow .chk svg{width:20px;height:20px;stroke-width:2.4}
.mobrow .l1{display:block;font:500 16px/22px var(--font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mobrow .l2{display:block;font:400 13px/18px var(--font);color:var(--ink-2)}
.donestats{display:flex;gap:32px;margin-top:12px}
.donestats .big2{font:700 44px/44px var(--font-num);letter-spacing:-.03em}
.donestats small{display:block;font:400 13px/18px var(--font);color:var(--ink-2);margin-top:4px}

/* Rest dock and now-pill */
.dock{position:fixed;left:12px;right:12px;bottom:calc(var(--nav-total) + 8px);z-index:28;max-width:560px;margin:0 auto;display:grid;grid-template-columns:1fr auto;grid-template-areas:"t c" "n c" "r r";column-gap:12px;align-items:center;padding:14px 8px 12px 20px;border-radius:24px;overflow:hidden;background:var(--island);color:var(--island-ink);box-shadow:var(--shadow-float),0 0 0 1px var(--island-edge)}
.dock .line{position:absolute;left:0;right:0;top:0;height:3px;background:var(--island-fill)}.dock .line > i{display:block;height:100%;background:var(--island-live);transition:width .5s linear}
.dock .t{grid-area:t;font:700 44px/1 var(--font-num);letter-spacing:-.03em}
.dock .n{grid-area:n;font:500 13px/18px var(--font-num);color:var(--island-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dock .c{grid-area:c;display:flex;gap:6px}
.dock .rb{width:48px;height:48px;border:0;border-radius:50%;background:var(--island-fill);color:var(--island-ink);font:700 15px/1 var(--font-num);display:grid;place-items:center}
.dock .rir-row{grid-area:r;display:flex;align-items:center;gap:8px;margin-top:10px;font:500 13px var(--font);color:var(--island-ink-2)}
.dock .rir-row .chipbtn{background:var(--island-fill);color:var(--island-ink);min-width:44px}
.dock.go{background:var(--island-go);color:#000}.dock.go .n{color:#000}.dock.go .line{display:none}
.dock.go .rb,.dock.go .chipbtn{background:rgb(0 0 0 / .14);color:#000}
.dock.go.just{animation:nudge 400ms var(--ease)}
@keyframes nudge{50%{transform:scale(1.03)}}
@media (min-width:600px){.dock{left:auto;right:var(--gutter);margin:0;width:min(420px,calc((100% - 2*var(--gutter) - 48px)/2))}}
@media (min-width:1024px){.dock{bottom:24px}}
.now-pill{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--nav-total) + 8px);z-index:28;height:44px;max-width:calc(100% - 24px);padding:0 16px;display:flex;align-items:center;gap:10px;border:0;border-radius:22px;background:var(--island);color:var(--island-ink);box-shadow:var(--shadow-float),0 0 0 1px var(--island-edge);font:700 15px/1 var(--font-num)}
.now-pill .dot{width:8px;height:8px;border-radius:50%;background:var(--island-live)}
.now-pill .lbl{font:500 13px/1 var(--font);color:var(--island-ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.now-pill.go .dot{background:var(--island-go)}
@media (min-width:1024px){.now-pill{bottom:24px}}

/* Food ledger */
.food-row{grid-template-columns:minmax(0,1fr) auto}
.food-row .l1{font-weight:400}
.kc{font:500 15px/20px var(--font-num);text-align:right;white-space:nowrap;color:var(--ink)}
.kc.e{color:var(--ink-2)}
.kc .ai{font:500 12px var(--font);color:var(--ink-3);margin-right:4px}
.gtot{font:700 15px/20px var(--font-num);color:var(--ink);font-variant-numeric:tabular-nums}
.switchrow{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:0;border:0;background:none;text-align:left;color:inherit}
.switchrow .l1{display:block;font:500 16px/22px var(--font)}
.switchrow .l2{display:block;font:400 13px/18px var(--font);color:var(--ink-2)}

/* Progress */
.verdict{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:24px;width:100%;border:0;background:none;padding:0;text-align:left;color:inherit;min-height:44px}
.verdict .vw{font:700 22px/26px var(--font);letter-spacing:-.015em}
.verdict .vw.done{color:var(--done)}.verdict .vw.warn{color:var(--warn)}.verdict .vw.live{color:var(--live)}.verdict .vw.dim{color:var(--ink-3)}
.prop{margin-top:8px;font:700 17px/22px var(--font-num)}
.prop .from{color:var(--ink-3)}
.chart{display:block;width:100%;height:auto;touch-action:pan-y;margin-top:12px}
.chart .grid{stroke:var(--hair);stroke-width:1}
.chart .band{fill:var(--done-tint)}
.chart .dot{fill:var(--ink-3);opacity:.55}
.chart .avg{fill:none;stroke:var(--ink);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.chart .goal{stroke:var(--ink-3);stroke-width:1.5;stroke-dasharray:4 4}
.chart .here{fill:var(--live);stroke:var(--bg);stroke-width:2}
.chart text{font:500 12px var(--font-num);fill:var(--ink-3)}.chart text.v{font:700 13px var(--font-num);fill:var(--ink)}
.chart-empty{display:grid;gap:8px;padding:24px 0;font:400 15px var(--font);color:var(--ink-3)}
.goalbar{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;align-items:center;width:100%;min-height:68px;padding:12px 16px;border:0;background:none;text-align:left;color:inherit;position:relative}
.goalbar + .goalbar::before{content:"";position:absolute;top:0;left:16px;right:0;height:1px;background:var(--hair)}
.goalbar .gn{font:500 16px/22px var(--font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.goalbar .gv{font:700 15px/20px var(--font-num);text-align:right;white-space:nowrap}
.goalbar .gv .of{font-weight:400}
.goalbar .fuel{grid-column:1 / -1}
.goalbar .gs{grid-column:1 / -1;font:400 13px/18px var(--font);color:var(--ink-2);margin-top:-2px}
button.goalbar:active{background:var(--fill)}
.lvl{display:flex;gap:4px;justify-content:flex-end;align-items:center}
.lvl i{width:14px;height:6px;border-radius:3px;background:var(--fill-2)}
.lvl i.on{background:var(--ink)}
.stat4{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:0}
.stat4 dt{font:500 13px/18px var(--font);color:var(--ink-2)}
.stat4 dd{margin:2px 0 0;font:700 22px/26px var(--font-num);letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.stat4 dd .u{font-size:13px}
.stat4 .f{font:400 12px/16px var(--font);color:var(--ink-3);margin-top:2px}
table.data{width:100%;border-collapse:collapse;font:400 15px/20px var(--font-num)}
table.data th{text-align:left;font:500 13px var(--font);color:var(--ink-3);padding:6px 4px}
table.data td{padding:6px 4px;border-top:1px solid var(--hair);font-variant-numeric:tabular-nums}

/* Sheets */
.overlay{position:fixed;inset:0;z-index:50;background:var(--scrim);display:flex;align-items:flex-end;justify-content:center}
.overlay.enter{animation:fade var(--dur-2) var(--ease)}
.overlay.enter .sheet{animation:rise var(--dur-3) var(--ease-sheet)}
@keyframes rise{from{transform:translateY(100%)}} @keyframes fade{from{opacity:0}}
.sheet{width:100%;max-width:560px;max-height:92dvh;background:var(--surface);border-radius:24px 24px 0 0;box-shadow:var(--shadow-sheet);display:flex;flex-direction:column;touch-action:pan-y}
.grabber{flex:none;width:36px;height:5px;border-radius:3px;background:var(--fill-2);margin:8px auto 0;touch-action:none}
.sheet-head{display:flex;align-items:center;gap:4px;min-height:56px;padding:4px 8px 0 20px;touch-action:none}
.sheet-head h2{flex:1;font:700 22px/26px var(--font);letter-spacing:-.015em;margin:0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sheet-head .back{margin-left:-12px}
.sheet-body{overflow-y:auto;overscroll-behavior:contain;padding:8px 20px 20px;display:grid;gap:16px;align-content:start}
.sheet-body p.line{font:400 15px/20px var(--font);color:var(--ink-2);margin:0}
.sheet-body .note{font:400 13px/18px var(--font);color:var(--ink-3);margin:0}
.sheet-body h3{font:700 15px/20px var(--font);margin:8px 0 -8px}
.sheet-foot{display:flex;gap:8px;padding:12px 20px calc(12px + env(safe-area-inset-bottom))}
.sheet-foot .btn{flex:1;min-height:52px}
.sheet-foot .btn.ghost,.sheet-foot .btn.danger{flex:0 0 auto}
.inline-error{display:flex;gap:8px;margin:0;color:var(--bad);font:500 15px/20px var(--font)}
.info p{font:400 15px/22px var(--font);color:var(--ink-2);max-width:60ch;margin:0 0 12px}
.info p:last-child{margin-bottom:0}
.info p b{color:var(--ink);font-weight:700}
.info ul,.info ol{margin:0 0 12px;padding-left:20px;color:var(--ink-2);font:400 15px/22px var(--font)}
@media (min-width:600px){.overlay{align-items:center;padding:24px}.sheet{max-width:480px;border-radius:24px}.grabber{display:none}}
@media (prefers-reduced-motion:reduce){.overlay.enter .sheet{animation:fade var(--dur-2) linear}}
.quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.qtile{min-height:96px;border:0;border-radius:20px;background:var(--fill);display:grid;justify-items:center;align-content:center;gap:8px;color:var(--ink);font:500 15px/1 var(--font);padding:8px 4px}
.qtile svg{width:28px;height:28px}
.qtile .glyph{width:44px;height:44px;border-radius:50%;background:var(--fill-2);display:grid;place-items:center;font:700 17px/1 var(--font-num)}
.qtile small{font:400 12px/1 var(--font);color:var(--ink-2)}
.qtile:active{transform:scale(.97)}
.bignum{display:flex;align-items:baseline;justify-content:center;gap:6px}
.bignum input{width:7ch;min-height:72px;text-align:center;font:700 44px/1 var(--font-num);letter-spacing:-.03em;border:0;border-bottom:2px solid var(--control-edge);border-radius:0;background:none;padding:0}
.bignum .u{font:500 17px/1 var(--font);color:var(--ink-3)}
.stepper{display:inline-grid;grid-template-columns:48px 88px 48px;align-items:center;border-radius:12px;background:var(--fill)}
.stepper button{height:48px;border:0;background:none;font:700 22px/1 var(--font);color:var(--ink)}
.stepper input{min-height:48px;border:0;background:none;text-align:center;font:700 22px/1 var(--font-num);padding:0;width:100%}
.wf .lrow{grid-template-columns:18px minmax(0,1fr) auto}
.wf .lrow.nosg{grid-template-columns:minmax(0,1fr) auto}
.wf .lrow.tot .l1,.wf .lrow.tot .v{font-weight:700;color:var(--ink)}
.calib{display:grid;grid-template-columns:minmax(0,1fr) 76px 14px 56px;gap:8px;align-items:center;min-height:60px}
.calib + .calib{border-top:1px solid var(--hair)}
.calib .l1{font:500 15px/20px var(--font)}
.calib .l2{font:400 12px/16px var(--font);color:var(--ink-3)}
.calib input{min-height:44px;text-align:center;font:700 17px/1 var(--font-num);padding:0 4px}
.calib .x{text-align:center;color:var(--ink-3)}

/* Inputs */
input,select,textarea{width:100%;min-height:52px;padding:0 14px;border:1px solid var(--control-edge);border-radius:12px;background:var(--fill);color:var(--ink);font:500 17px/1 var(--font)}
textarea{min-height:96px;padding:14px;resize:vertical;line-height:22px}
input:focus,select:focus,textarea:focus{outline:2px solid var(--focus);outline-offset:0;border-color:transparent}
input[aria-invalid="true"]{border-color:var(--bad);border-width:2px}
input[type=checkbox]{width:22px;height:22px;min-height:0;accent-color:var(--ink)}
.field{display:grid;gap:6px;font:500 13px/18px var(--font);color:var(--ink-2)}
.field .hint{font:400 12px/16px var(--font);color:var(--ink-3)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.check{display:flex;gap:12px;align-items:center;font:400 15px/20px var(--font);color:var(--ink);min-height:44px}
details.more summary{list-style:none;cursor:pointer;min-height:44px;display:flex;align-items:center;font:500 15px var(--font);color:var(--ink-2)}
details.more summary::-webkit-details-marker{display:none}
details.more summary::after{content:"›";margin-left:8px;transition:transform .15s}
details.more[open] summary::after{transform:rotate(90deg)}

/* Toast */
.toast{position:fixed;left:50%;bottom:calc(var(--nav-total) + var(--dock) + 12px);transform:translate(-50%,12px);z-index:60;opacity:0;pointer-events:none;display:flex;align-items:center;gap:4px;min-height:48px;max-width:calc(100vw - 32px);padding:0 4px 0 16px;border-radius:16px;background:var(--island);color:var(--island-ink);box-shadow:var(--shadow-float),0 0 0 1px var(--island-edge);font:500 15px/20px var(--font);transition:opacity var(--dur-2),transform var(--dur-2) var(--ease)}
.toast.show{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.toast span{padding:12px 12px 12px 0}
.toast.error::before{content:"▲";color:#FF5C52;margin-right:6px}
.toast button{min-height:44px;padding:0 14px;border:0;border-radius:12px;background:var(--island-fill);color:inherit;font:700 15px/1 var(--font)}
@media (min-width:1024px){.toast{bottom:24px}}

/* Login, boot */
.center-screen{min-height:100dvh;display:grid;place-items:center;padding:24px}
.login{width:min(400px,100%);display:grid;gap:20px}
.wordmark{font:700 15px/1 var(--font);letter-spacing:.2em}
.skel{background:var(--fill);border-radius:8px;animation:pulse 1.4s infinite}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media (forced-colors:active){.btn,.set-done,.switch,.seg button[aria-pressed=true],.sg,.cov,.chipbtn{border:1px solid CanvasText}.seg button[aria-pressed=true],.chipbtn[aria-pressed=true]{outline:2px solid Highlight}}
.only-wide{display:none}
@media (min-width:600px){.only-wide{display:block}.only-narrow{display:none}}
.metric-v.changed{animation:digits 160ms var(--ease)}
@keyframes digits{from{opacity:0;transform:translateY(.12em)}}
.result{display:grid;gap:4px}
.stack{display:grid;gap:16px}
