/* Command Centre · Fable redesign
   Brand tokens are lifted verbatim from the scanned dashboard. Everything else
   is derived (tints of those tokens) so the palette never drifts. */
@font-face { font-family:'Clash Grotesk'; src:url('fonts/ClashGrotesk-Regular.woff2') format('woff2'); font-weight:400; font-display:swap; }
@font-face { font-family:'Clash Grotesk'; src:url('fonts/ClashGrotesk-Medium.woff2') format('woff2'); font-weight:500; font-display:swap; }
@font-face { font-family:'Clash Grotesk'; src:url('fonts/ClashGrotesk-Semibold.woff2') format('woff2'); font-weight:600; font-display:swap; }

:root {
  /* — scanned tokens — */
  --bg:#0f0f0f; --card:#1a1a1a; --card-hi:#202020; --line:#2a2a2a;
  --text:#fafafa; --muted:#b9b9b9; --faint:#8b8b8b;
  --ember:#7fa3b5;
  --done:#46c26e; --active:#e8b53a; --stall:#e0715f; --stall-bg:#2a1512; --on-stall:#1a0e0c; --on-active:#241a05;
  --pending:#242428; --pending2:#4a4a52;
  --xds:#ff6700; --bld:#e3ba1c;
  /* — derived — */
  --bg-2:#131315; --bg-3:#171719;
  --line-2:#1e1e1e; --line-hi:#3a3a3a;
  --ember-12:rgba(127,163,181,.12); --ember-25:rgba(127,163,181,.25); --ember-50:rgba(127,163,181,.5);
  --done-15:rgba(70,194,110,.15); --active-15:rgba(232,181,58,.15); --stall-15:rgba(224,113,95,.15);
  --xds-15:rgba(255,103,0,.15); --bld-15:rgba(227,186,28,.15);
  --shadow:0 20px 60px rgba(0,0,0,.55), 0 2px 6px rgba(0,0,0,.4);
  --r-s:6px; --r-m:10px; --r-l:16px;
  /* density scale — relaxed by default */
  --sp:1; --row-py:16px; --row-gap:14px; --fs-body:14px; --card-pad:22px; --track-h:12px;
  --ease-out:cubic-bezier(.16,1,.3,1); --ease-io:cubic-bezier(.65,0,.35,1);
  --rail-w:236px; --top-h:64px;
  --sel:rgba(255,103,0,.3); --thumb:#333; --scrim:rgba(0,0,0,.55);
  --bg-a10:rgba(15,15,15,.1); --bg-a15:rgba(15,15,15,.15); --bg-a30:rgba(15,15,15,.3); --bg-a60:rgba(15,15,15,.6); --bg-a72:rgba(15,15,15,.72); --bg-a85:rgba(15,15,15,.85); --bg-a90:rgba(15,15,15,.9); --bg-a92:rgba(15,15,15,.92); --bg-a94:rgba(15,15,15,.94);
  --card-a55:rgba(26,26,26,.55); --card-a60:rgba(26,26,26,.6); --card-a72:rgba(26,26,26,.72); --card-a92:rgba(26,26,26,.92); --card2-a92:rgba(23,23,25,.92);
  --hi-4:rgba(255,255,255,.04); --hi-8:rgba(255,255,255,.08);
  --ambient-filter:saturate(.85) brightness(.55); --ambient-op:1;
  color-scheme:dark;
}

/* Light theme: same brand hues, surfaces inverted, status colours darkened for contrast on white.
   Applied by data-theme="light" on <html>, chosen by the toggle or the system preference. */
[data-theme="light"] {
  --bg:#f3f3f1; --card:#ffffff; --card-hi:#f7f7f5; --line:#e1e1dd;
  --text:#0f0f0f; --muted:#454545; --faint:#6f6f6f;
  --ember:#4b7d95;
  --done:#1e8a45; --active:#a1720c; --stall:#c4503b; --stall-bg:#fbe7e3; --on-stall:#1a0e0c; --on-active:#241a05;
  --pending:#dededb; --pending2:#b9b9b6;
  --xds:#e05a00; --bld:#a8880a;
  --bg-2:#efefec; --bg-3:#eaeae7;
  --line-2:#ebebe8; --line-hi:#c9c9c5;
  --ember-12:rgba(75,125,149,.12); --ember-25:rgba(75,125,149,.25); --ember-50:rgba(75,125,149,.5);
  --done-15:rgba(30,138,69,.13); --active-15:rgba(161,114,12,.14); --stall-15:rgba(196,80,59,.13);
  --xds-15:rgba(224,90,0,.13); --bld-15:rgba(168,136,10,.15);
  --shadow:0 20px 60px rgba(15,15,15,.14), 0 2px 6px rgba(15,15,15,.08);
  --sel:rgba(224,90,0,.22); --thumb:#c8c8c4; --scrim:rgba(15,15,15,.32);
  --bg-a10:rgba(243,243,241,.1); --bg-a15:rgba(243,243,241,.15); --bg-a30:rgba(243,243,241,.3); --bg-a60:rgba(243,243,241,.6); --bg-a72:rgba(243,243,241,.72); --bg-a85:rgba(243,243,241,.85); --bg-a90:rgba(243,243,241,.9); --bg-a92:rgba(243,243,241,.92); --bg-a94:rgba(255,255,255,.96);
  --card-a55:rgba(255,255,255,.7); --card-a60:rgba(255,255,255,.75); --card-a72:rgba(255,255,255,.72); --card-a92:rgba(255,255,255,.94); --card2-a92:rgba(252,252,250,.94);
  --hi-4:rgba(15,15,15,.04); --hi-8:rgba(15,15,15,.06);
  --ambient-filter:saturate(.5) brightness(1.6) contrast(.8); --ambient-op:.5;
  color-scheme:light;
}
[data-theme="light"] .grain { opacity:.05; mix-blend-mode:multiply; }
[data-density="dense"] { --sp:.62; --row-py:8px; --row-gap:8px; --fs-body:13px; --card-pad:14px; --track-h:8px; }

*, *::before, *::after { box-sizing:border-box; margin:0; padding:0; }
html { background:var(--bg); }
html, body { overflow-x:hidden; max-width:100vw; }
body { font-family:'Clash Grotesk', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size:var(--fs-body);
  color:var(--text); background:var(--bg); font-variant-numeric:tabular-nums; line-height:1.45; min-height:100vh;
  -webkit-font-smoothing:antialiased; overflow-x:hidden; }
::selection { background:var(--sel); }
::-webkit-scrollbar { width:10px; height:10px; }
::-webkit-scrollbar-thumb { background:var(--thumb); border-radius:5px; border:2px solid var(--bg); }
::-webkit-scrollbar-track { background:transparent; }
a { color:inherit; }
button { font:inherit; color:inherit; background:none; border:0; cursor:pointer; }
:focus-visible { outline:2px solid var(--ember); outline-offset:2px; border-radius:4px; }
.sr { position:absolute !important; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
[hidden] { display:none !important; }
code { font-family:ui-monospace, SFMono-Regular, Menlo, monospace; font-size:.92em; background:var(--card-hi); padding:1px 5px; border-radius:3px; }

/* ---------- ambient background ---------- */
.ambient { position:fixed; inset:0; z-index:0; pointer-events:none; overflow:hidden; }
.ambient img { position:absolute; inset:-4%; width:108%; height:108%; object-fit:cover; opacity:0; filter:var(--ambient-filter); transition:opacity 2.4s var(--ease-out); }
body.ready .ambient img { opacity:.26; }
.ambient::after { content:""; position:absolute; inset:0; background:
  radial-gradient(120% 90% at 20% 0%, var(--bg-a15), var(--bg-a92) 60%),
  linear-gradient(180deg, var(--bg-a30), var(--bg) 85%); }
.grain { position:fixed; inset:0; z-index:1; pointer-events:none; opacity:.035; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); }

/* ---------- app shell ---------- */
.app { position:relative; z-index:2; display:grid; grid-template-columns:var(--rail-w) minmax(0,1fr); min-height:100vh; }
.rail { position:sticky; top:0; height:100vh; display:flex; flex-direction:column; padding:22px 14px 18px; border-right:1px solid var(--line);
  background:linear-gradient(180deg, var(--card-a72), var(--bg-a60)); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); }
.brand { display:flex; align-items:center; gap:11px; padding:4px 8px 22px; text-decoration:none; }
.brand .ticks { display:inline-flex; gap:3px; }
.brand .ticks i { width:5px; height:22px; border-radius:2px; display:block; }
.brand .ticks i:first-child { background:var(--xds); } .brand .ticks i:last-child { background:var(--bld); }
.brand b { font-weight:600; font-size:17px; letter-spacing:.005em; display:block; line-height:1.1; }
.brand small { display:block; color:var(--faint); font-weight:500; font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; margin-top:3px; }
.rlab { font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--faint); margin:16px 0 6px 10px; }
.rail nav { display:flex; flex-direction:column; gap:2px; }
.nv { display:flex; align-items:center; gap:10px; text-decoration:none; color:var(--muted); font-size:14px; padding:0 10px; height:40px; border-radius:8px;
  border:1px solid transparent; position:relative; transition:background .18s, color .18s, border-color .18s; width:100%; text-align:left; }
.nv svg { width:16px; height:16px; flex:0 0 16px; stroke:currentColor; fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; opacity:.8; }
.nv:hover { background:var(--hi-4); color:var(--text); }
.nv[aria-current="page"] { background:var(--card-hi); color:var(--text); border-color:var(--line); }
.nv[aria-current="page"]::before { content:""; position:absolute; left:-15px; top:10px; bottom:10px; width:3px; border-radius:0 3px 3px 0; background:var(--ember); }
.nv b { margin-left:auto; font-size:11.5px; font-weight:600; color:var(--faint); min-width:20px; text-align:right; }
.nv[aria-current="page"] b { color:var(--muted); }
.nv.hi b { color:var(--stall); }
.nv kbd { font:inherit; font-size:10px; color:var(--faint); border:1px solid var(--line); border-radius:4px; padding:0 4px; line-height:16px; opacity:0; transition:opacity .15s; }
.rail:hover .nv kbd, .nv:focus-visible kbd { opacity:1; }
.rfoot { margin-top:auto; padding:16px 10px 0; border-top:1px solid var(--line); font-size:11.5px; line-height:1.6; color:var(--faint); }
.rfoot b { color:var(--muted); font-weight:500; }

/* ---------- top bar ---------- */
.main { min-width:0; display:flex; flex-direction:column; overflow-x:clip; }
.topbar { position:sticky; top:0; z-index:20; height:var(--top-h); display:flex; align-items:center; gap:12px; padding:0 28px; border-bottom:1px solid var(--line);
  background:var(--bg-a72); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); }
.search { position:relative; flex:0 1 360px; min-width:180px; }
.search svg { position:absolute; left:12px; top:50%; transform:translateY(-50%); width:15px; height:15px; stroke:var(--faint); fill:none; stroke-width:1.7; pointer-events:none; }
.search input { width:100%; height:38px; padding:0 68px 0 36px; border-radius:9px; border:1px solid var(--line); background:var(--card); color:var(--text); font:inherit; font-size:14px; transition:border-color .18s, box-shadow .18s; }
.search input::placeholder { color:var(--faint); }
.search input:focus { outline:none; border-color:var(--ember-50); box-shadow:0 0 0 3px var(--ember-12); }
.search kbd { position:absolute; right:10px; top:50%; transform:translateY(-50%); font:inherit; font-size:10.5px; color:var(--faint); border:1px solid var(--line); border-radius:4px; padding:1px 6px; }
.seg { display:inline-flex; background:var(--card); border:1px solid var(--line); border-radius:9px; padding:3px; gap:2px; }
.seg button { white-space:nowrap; padding:0 12px; height:30px; border-radius:6px; color:var(--muted); font-weight:500; font-size:13px; display:inline-flex; align-items:center; gap:7px; transition:background .18s, color .18s; }
.seg button b { font-weight:600; font-size:11px; color:var(--faint); }
.seg button[aria-pressed="true"] { background:var(--card-hi); color:var(--text); box-shadow:inset 0 0 0 1px var(--line-hi); }
.seg button[aria-pressed="true"] b { color:var(--ember); }
.seg button:disabled { opacity:.38; cursor:default; }
.seg button .dot { width:7px; height:7px; border-radius:50%; }
.seg button .dot.xds { background:var(--xds); } .seg button .dot.bld { background:var(--bld); }
.tb-right { margin-left:auto; display:flex; align-items:center; gap:10px; }
.chip { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:600; letter-spacing:.1em; padding:3px 9px; border-radius:999px; border:1px solid; white-space:nowrap; text-transform:uppercase; line-height:1.4; }
.chip.xds { border-color:rgba(255,103,0,.55); color:var(--xds); }
.chip.bld { border-color:rgba(227,186,28,.5); color:var(--bld); }
.chip.q { border-color:var(--line-hi); color:var(--muted); }
.chip.sample { border-color:var(--ember-50); color:var(--ember); background:var(--ember-12); }
.chip.sample i { width:6px; height:6px; border-radius:50%; background:var(--ember); box-shadow:0 0 0 0 var(--ember-50); animation:ping 2.2s infinite; }
@keyframes ping { 0%{box-shadow:0 0 0 0 var(--ember-50)} 70%{box-shadow:0 0 0 7px rgba(127,163,181,0)} 100%{box-shadow:0 0 0 0 rgba(127,163,181,0)} }
.btn { display:inline-flex; align-items:center; gap:8px; height:36px; padding:0 13px; border-radius:9px; border:1px solid var(--line); background:var(--card); color:var(--muted);
  font-weight:500; font-size:13px; white-space:nowrap; transition:color .18s, border-color .18s, background .18s; }
.btn:hover { color:var(--text); border-color:var(--line-hi); }
.btn.primary { background:var(--text); color:var(--bg); border-color:var(--text); font-weight:600; }
.btn.primary:hover { background:#fff; }
.btn.icon { width:36px; padding:0; justify-content:center; }
.btn svg { width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.btn.busy svg { animation:spin 1s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }
.gen { color:var(--faint); font-size:12px; white-space:nowrap; }

/* ---------- banners ---------- */
.banner { display:flex; align-items:center; gap:12px; padding:11px 28px; font-size:13.5px; border-bottom:1px solid; }
.banner.stale { background:#331b16; border-color:var(--stall); color:#f0a396; }
.banner.high { background:var(--stall-bg); border-color:rgba(224,113,95,.5); color:var(--text); }
.banner a, .banner button.link { padding:3px 0; color:var(--stall); text-decoration:underline; text-underline-offset:3px; margin-left:auto; white-space:nowrap; font:inherit; }
.sev { font-size:10.5px; font-weight:700; letter-spacing:.12em; text-align:center; padding:3px 8px; border-radius:4px; text-transform:uppercase; white-space:nowrap; min-width:72px; }
.sev.high { background:var(--stall); color:var(--on-stall); box-shadow:0 0 18px rgba(224,113,95,.35); }
.sev.open { background:var(--active); color:var(--on-active); }
.sev.med { background:var(--pending); color:var(--muted); border:1px solid var(--line-hi); }
.sev.ack { background:transparent; color:var(--faint); border:1px dashed var(--line-hi); }

/* ---------- views ---------- */
.view { padding:calc(28px * var(--sp) + 8px) 28px 120px; min-height:calc(100vh - var(--top-h)); }
.vhead { display:flex; align-items:flex-end; gap:18px; flex-wrap:wrap; margin-bottom:calc(22px * var(--sp) + 6px); }
.vhead h1 { font-size:26px; font-weight:600; letter-spacing:-.015em; line-height:1.1; display:flex; align-items:baseline; gap:12px; }
.vhead h1 .cnt { font-size:14px; color:var(--faint); font-weight:500; letter-spacing:.04em; }
.vhead .gsub { color:var(--faint); font-size:13px; padding-bottom:3px; }
.vhead .tools { margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.sel { position:relative; }
.sel select { appearance:none; -webkit-appearance:none; height:34px; padding:0 30px 0 12px; border-radius:8px; border:1px solid var(--line); background:var(--card); color:var(--muted); font:inherit; font-size:13px; font-weight:500; cursor:pointer; }
.sel::after { content:""; position:absolute; right:11px; top:50%; width:7px; height:7px; border-right:1.6px solid var(--faint); border-bottom:1.6px solid var(--faint); transform:translateY(-70%) rotate(45deg); pointer-events:none; }
.sel select:focus { outline:none; border-color:var(--ember-50); box-shadow:0 0 0 3px var(--ember-12); }
.lbl { font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--faint); }

/* ---------- overview hero ---------- */
.hero { display:grid; grid-template-columns:minmax(0, 1.45fr) minmax(320px, .9fr); gap:18px; margin-bottom:22px; }
.card { background:linear-gradient(180deg, var(--card-a92), var(--card2-a92)); border:1px solid var(--line); border-radius:var(--r-l); padding:var(--card-pad); position:relative; overflow:hidden; }
.card::before { content:""; position:absolute; inset:0 0 auto 0; height:1px; background:linear-gradient(90deg, transparent, var(--hi-8), transparent); pointer-events:none; }
.card h2, .card h3 { font-size:12px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); font-weight:600; display:flex; align-items:center; gap:10px; }
.card h2 .sub, .card h3 .sub { text-transform:none; letter-spacing:0; font-weight:400; color:var(--faint); font-size:12px; }
.card .src { position:absolute; right:var(--card-pad); top:calc(var(--card-pad) - 2px); font-size:10.5px; color:var(--faint); letter-spacing:.06em; text-transform:uppercase; }
.field { min-height:500px; padding:0; display:grid; grid-template-rows:auto 1fr auto; }
.field .fhead { display:flex; align-items:center; gap:12px; padding:var(--card-pad) var(--card-pad) 0; flex-wrap:wrap; }
.field .fhead h2 { margin-right:auto; }
.field .fhead .gsub { font-size:11.5px; }
.field .legendf { display:flex; gap:14px; flex-wrap:wrap; padding:10px var(--card-pad) var(--card-pad); font-size:11.5px; color:var(--faint); align-items:center; }
.field .legendf i { display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:6px; vertical-align:-1px; }
.heat { display:grid; gap:3px; padding:14px var(--card-pad); overflow-x:auto; }
.heat > div { min-width:520px; }
.heat .hr { display:grid; grid-template-columns:150px repeat(18, minmax(0, 1fr)); gap:3px; align-items:center; }
.heat .hr span:first-child { font-size:12px; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; padding-right:8px; }
.heat .hr i { height:14px; border-radius:3px; background:var(--pending); display:block; }
.heat .hr.axis i { background:none; height:auto; font-style:normal; font-size:9px; color:var(--faint); text-align:center; letter-spacing:.04em; }

.kpis { display:grid; grid-template-columns:1fr 1fr; gap:12px; align-content:start; }
.kpi { background:var(--card); border:1px solid var(--line); border-radius:var(--r-m); padding:calc(var(--card-pad) - 4px) var(--card-pad); position:relative; overflow:hidden; cursor:pointer; text-align:left;
  transform-style:preserve-3d; transition:transform .35s var(--ease-out), border-color .2s; }
.kpi:hover { border-color:var(--line-hi); }
.kpi .k { font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); font-weight:600; }
.kpi .n { font-size:44px; font-weight:600; letter-spacing:-.035em; line-height:1; margin:10px 0 4px; display:flex; align-items:baseline; gap:8px; }
.kpi .n small { font-size:15px; letter-spacing:0; color:var(--muted); font-weight:500; }
.kpi .d { font-size:12.5px; color:var(--faint); }
.kpi .d b { color:var(--muted); font-weight:500; }
.kpi.stall .n { color:var(--stall); } .kpi.done .n { color:var(--done); } .kpi.active .n { color:var(--active); }
.kpi .glow { position:absolute; inset:auto -30% -60% auto; width:70%; aspect-ratio:1; border-radius:50%; filter:blur(40px); opacity:.18; pointer-events:none; }
.kpi.stall .glow { background:var(--stall); } .kpi.done .glow { background:var(--done); } .kpi.active .glow { background:var(--active); } .kpi.ember .glow { background:var(--ember); }
.kpi.span { grid-column:1 / -1; }
.kpi .split { display:flex; gap:22px; margin-top:12px; flex-wrap:wrap; }
.kpi .split div { display:flex; flex-direction:column; }
.kpi .split .v { font-size:22px; font-weight:600; letter-spacing:-.02em; line-height:1.1; }
.kpi .split .l { font-size:11px; color:var(--faint); letter-spacing:.08em; text-transform:uppercase; margin-top:2px; }

.grid { display:grid; grid-template-columns:repeat(12, 1fr); gap:14px; }
.c4 { grid-column:span 4; } .c6 { grid-column:span 6; } .c8 { grid-column:span 8; } .c12 { grid-column:span 12; }
.chart { margin-top:14px; }
.chart svg { width:100%; height:auto; display:block; overflow:visible; }
.chart text { font-family:inherit; fill:var(--faint); font-size:11px; }
.chart .ax line { stroke:var(--line); }
.chart .thr { stroke:var(--stall); stroke-dasharray:3 4; opacity:.7; }
.chart .thr-l { fill:var(--stall); font-size:10px; letter-spacing:.06em; }
.chart .lab { fill:var(--muted); font-size:12px; }
.chart .val { fill:var(--text); font-size:12px; font-weight:600; }
.chart .bar { transition:opacity .15s; }
.chart .bar:hover, .chart .bar:focus { opacity:.8; outline:none; }
.chart rect.bar, .chart circle.bar { cursor:pointer; }
.chart .bar[tabindex]:focus-visible { stroke:var(--text); stroke-width:1.5; }
details.dt { margin-top:12px; }
details.dt summary { font-size:11.5px; color:var(--faint); cursor:pointer; letter-spacing:.06em; text-transform:uppercase; }
details.dt table { width:100%; border-collapse:collapse; margin-top:8px; font-size:12.5px; }
details.dt th, details.dt td { text-align:left; padding:5px 8px 5px 0; border-bottom:1px solid var(--line-2); }
details.dt th { color:var(--faint); font-weight:500; font-size:11px; letter-spacing:.08em; text-transform:uppercase; }
.legend { display:flex; gap:14px; flex-wrap:wrap; font-size:11.5px; color:var(--faint); margin-top:12px; }
.legend i { display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:6px; vertical-align:-1px; }
.k-done { background:var(--done); } .k-active { background:var(--active); } .k-pending { background:var(--pending); border:1px solid var(--line-hi); }
.k-incomplete { background:transparent; box-shadow:inset 0 0 0 2px var(--stall); } .k-override { background:transparent; box-shadow:inset 0 0 0 2px var(--pending2); }
.k-implied { background:transparent; box-shadow:inset 0 0 0 2px var(--done); } .k-na { background:transparent; border:1px dashed var(--line-hi); }

/* ---------- board rows ---------- */
.board { display:flex; flex-direction:column; gap:calc(var(--row-gap) * .5); }
.axis { display:grid; gap:0 22px; padding:0 18px 8px; align-items:end; }
.axis .lab { font-size:10.5px; letter-spacing:.14em; color:var(--faint); text-transform:uppercase; }
.axis .codes { display:grid; grid-template-columns:repeat(18, 1fr); gap:3px; }
.axis .codes i { font-style:normal; font-size:9px; letter-spacing:.04em; color:var(--faint); text-align:center; text-transform:uppercase; overflow:hidden; }
.axis .codes i.post { opacity:.55; }
.rowgrid { grid-template-columns:minmax(190px, 16%) minmax(240px, 24%) minmax(140px, 11%) minmax(220px, 1fr) 132px; }
.rowgrid.mgrid { grid-template-columns:minmax(190px, 16%) minmax(330px, 30%) minmax(120px, 10%) minmax(200px, 1fr) 150px; }
.row { display:grid; gap:0 22px; align-items:center; padding:var(--row-py) 18px; border:1px solid var(--line); border-radius:var(--r-m); background:var(--card-a55);
  text-decoration:none; color:inherit; width:100%; text-align:left; transition:background .15s, border-color .15s, transform .25s var(--ease-out); position:relative; }
.row:hover { background:var(--card-hi); border-color:var(--line-hi); }
.row[aria-expanded="true"] { background:var(--card-hi); border-color:var(--ember-50); border-bottom-left-radius:0; border-bottom-right-radius:0; }
.row.cur { border-color:var(--ember-50); box-shadow:0 0 0 3px var(--ember-12); }
.row h3 { font-size:14.5px; font-weight:600; line-height:1.25; display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.row h3 .origin { font-size:11px; color:var(--faint); font-weight:400; }
.track { display:grid; grid-template-columns:repeat(18, 1fr); gap:3px; align-items:end; height:calc(var(--track-h) + 6px); }
.track i { display:block; height:var(--track-h); border-radius:3px; background:var(--pending); transform-origin:left center; position:relative; }
.track i.done { background:var(--done); }
.track i.implied { background:transparent; box-shadow:inset 0 0 0 2px var(--done); }
.track i.active { background:var(--active); height:calc(var(--track-h) + 6px); box-shadow:0 0 14px rgba(232,181,58,.45); }
.track i.active::after { content:""; position:absolute; inset:0; border-radius:3px; background:var(--active); animation:breathe 2.4s ease-in-out infinite; }
@keyframes breathe { 0%,100%{opacity:0} 50%{opacity:.55} }
.track i.na { visibility:hidden; }
.track i.incomplete { background:transparent; box-shadow:inset 0 0 0 2px var(--stall); }
.track i.override { background:transparent; box-shadow:inset 0 0 0 2px var(--pending2); }
.track i.post { opacity:.45; }
body.ready .track i { animation:grow .7s var(--ease-out) both; animation-delay:calc(var(--i) * 18ms); }
@keyframes grow { from { transform:scaleX(0); } to { transform:scaleX(1); } }
.phase { font-size:13px; font-weight:600; letter-spacing:.06em; color:var(--active); line-height:1.25; }
.phase.is-done, .phase.is-verified { color:var(--done); }
.phase.is-none { color:var(--faint); }
.phase .frac { color:var(--faint); font-weight:500; letter-spacing:0; margin-left:6px; }
.wait { display:inline-block; font-size:10.5px; font-weight:600; letter-spacing:.1em; padding:2px 7px; border-radius:999px; border:1px solid var(--line-hi); color:var(--muted); margin-top:5px; white-space:nowrap; }
.since { font-size:11px; color:var(--faint); margin-top:4px; }
.state { font-size:13.5px; color:var(--muted); line-height:1.5; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
[data-density="dense"] .state { -webkit-line-clamp:1; }
.state .frac { color:var(--faint); font-size:12px; }
.meta { font-size:11.5px; color:var(--faint); text-align:right; line-height:1.7; }
.stall { color:var(--stall); font-weight:600; }
.lnk { color:var(--muted); font-weight:500; margin-left:10px; text-decoration:none; display:inline-block; padding:5px 0; }
.lnk:hover { color:var(--ember); }
.expand { border:1px solid var(--ember-50); border-top:0; border-radius:0 0 var(--r-m) var(--r-m); background:var(--card); padding:18px 22px 22px; margin-top:-1px; display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:30px; }
.expand h4 { font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); margin-bottom:10px; }
.exp-tl { list-style:none; display:grid; grid-template-columns:repeat(auto-fill, minmax(190px, 1fr)); gap:8px; }
.exp-tl li { border:1px solid var(--line-2); border-radius:8px; padding:9px 11px; font-size:12px; background:var(--bg-3); }
.exp-tl li b { display:block; font-size:11px; letter-spacing:.06em; margin-bottom:3px; }
.exp-tl li em { font-style:normal; color:var(--faint); font-size:11px; display:block; }
.exp-tl li.t-done b { color:var(--done); } .exp-tl li.t-active b { color:var(--active); } .exp-tl li.t-incomplete b { color:var(--stall); } .exp-tl li.t-pending b, .exp-tl li.t-override b { color:var(--faint); }
.panel { background:var(--bg-3); border:1px solid var(--line-2); border-radius:10px; padding:13px 15px; font-size:13px; color:var(--muted); line-height:1.6; }
.panel.now { color:var(--text); border-left:2px solid var(--ember); }
.hcs { display:flex; flex-wrap:wrap; gap:6px; align-items:flex-start; align-content:flex-start; }
.hc { height:26px; font-size:10.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--faint); background:var(--pending); border:1px solid var(--line); border-radius:5px; padding:4px 8px; white-space:nowrap; display:inline-flex; align-items:center; gap:6px; }
.hc b { font-weight:600; color:var(--muted); font-size:12px; letter-spacing:0; text-transform:none; }
.hc.ok b { color:var(--done); } .hc.warn b { color:var(--active); } .hc.bad { border-color:var(--stall); } .hc.bad b { color:var(--stall); }
.hc .ring { width:14px; height:14px; }
.hc .ring circle { fill:none; stroke-width:3; }
.hc .ring .bg { stroke:var(--line-hi); } .hc .ring .fg { stroke:var(--done); stroke-linecap:round; transform:rotate(-90deg); transform-origin:50% 50%; }
.hc.warn .ring .fg { stroke:var(--active); } .hc.bad .ring .fg { stroke:var(--stall); }
.strip { list-style:none; display:flex; flex-direction:column; gap:6px; }
.strip li { display:flex; gap:12px; align-items:center; padding:12px 18px; border:1px solid var(--line); border-radius:var(--r-m); background:var(--card-a55); font-size:13.5px; }
.strip li button.t { font-weight:600; color:var(--text); padding:4px 0; }
.strip li button.t:hover { color:var(--ember); }
.strip li .legend { margin:0 0 0 auto; }
h2.sec { font-size:12px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); font-weight:600; margin:34px 0 12px; display:flex; align-items:baseline; gap:10px; }
h2.sec .cnt { color:var(--muted); }
h2.sec .gsub { margin-left:auto; text-transform:none; letter-spacing:0; font-weight:400; }
h2.sec.att { color:var(--stall); }

/* ---------- attention lists ---------- */
ul.attn { list-style:none; display:flex; flex-direction:column; gap:6px; }
ul.attn.noact li { grid-template-columns:86px minmax(150px, 200px) 1fr; }
ul.attn li { display:grid; grid-template-columns:86px minmax(150px, 240px) 1fr auto; gap:14px; align-items:center; padding:12px 16px; border:1px solid var(--line); border-radius:var(--r-m); background:var(--card-a55); font-size:13.5px; transition:border-color .15s, background .15s; }
ul.attn li:hover { border-color:var(--line-hi); background:var(--card-hi); }
ul.attn li.is-high { border-color:rgba(224,113,95,.5); background:linear-gradient(90deg, var(--stall-bg), rgba(26,26,26,.55) 40%); }
ul.attn li b { color:var(--text); font-weight:600; }
ul.attn li button.b { color:var(--text); font-weight:600; text-align:left; padding:3px 0; }
ul.attn li button.b:hover { color:var(--ember); }
ul.attn li span.x { color:var(--muted); line-height:1.5; }
ul.attn li em { display:block; font-style:normal; font-size:12px; color:var(--faint); margin-top:3px; }
ul.attn li .act { display:flex; gap:6px; }
ul.attn li .act .btn { height:30px; font-size:12px; padding:0 10px; }
ul.attn li.ackd { opacity:.5; }
.fchips { display:flex; gap:6px; flex-wrap:wrap; }
.fchip { height:30px; padding:0 12px; border-radius:999px; border:1px solid var(--line); color:var(--muted); font-size:12.5px; font-weight:500; display:inline-flex; align-items:center; gap:7px; transition:all .15s; }
.fchip b { font-size:11px; color:var(--faint); }
.fchip[aria-pressed="true"] { background:var(--card-hi); color:var(--text); border-color:var(--line-hi); }
.fchip.high[aria-pressed="true"] { border-color:var(--stall); color:var(--stall); }
.fchip.open[aria-pressed="true"] { border-color:var(--active); color:var(--active); }

/* ---------- pipeline reference ---------- */
.subway { overflow-x:auto; padding:10px 0 18px; }
.subway ol { list-style:none; display:grid; grid-auto-flow:column; grid-auto-columns:minmax(96px, 1fr); gap:0; min-width:1120px; position:relative; }
.subway ol::before { content:""; position:absolute; left:20px; right:20px; top:15px; height:2px; background:linear-gradient(90deg, var(--ember), var(--ember) 76%, var(--line-hi) 76%); }
.subway li { position:relative; padding:36px 10px 0 0; }
.subway li::before { content:""; position:absolute; left:14px; top:9px; width:14px; height:14px; border-radius:50%; background:var(--bg); border:3px solid var(--ember); box-sizing:border-box; }
.subway li.post::before { border-color:var(--line-hi); }
.subway li.gate::before { border-radius:3px; transform:rotate(45deg); background:var(--ember); }
.subway li .no { font-size:11px; color:var(--ember); font-weight:600; letter-spacing:.08em; }
.subway li.post .no { color:var(--faint); }
.subway li b { display:block; font-size:11.5px; font-weight:600; letter-spacing:.02em; line-height:1.25; margin-top:2px; }
.subway li i { display:block; font-style:normal; font-size:10px; color:var(--faint); letter-spacing:.08em; text-transform:uppercase; margin-top:3px; }
.subway li .occ { display:flex; gap:3px; margin-top:8px; flex-wrap:wrap; }
.subway li .occ span { width:8px; height:8px; border-radius:2px; background:var(--active); }
.subway li .occ span.d { background:var(--done); opacity:.5; }
.pipe { display:flex; flex-direction:column; gap:10px; margin-top:18px; counter-reset:stage; list-style:none; }
.pipe li { display:grid; grid-template-columns:64px 220px 1fr; gap:20px; align-items:start; background:var(--card-a60); border:1px solid var(--line); border-radius:12px; padding:18px 22px; }
.pipe li::before { counter-increment:stage; content:counter(stage, decimal-leading-zero); color:var(--ember); font-size:26px; font-weight:600; line-height:1; letter-spacing:-.02em;
  -webkit-text-stroke:1px var(--ember); -webkit-text-fill-color:transparent; }
.pipe li.grp { grid-template-columns:1fr; gap:8px; background:none; border:0; border-top:2px solid var(--ember); border-radius:0; padding:30px 0 12px; margin-top:14px; }
.pipe li.grp::before { content:none; counter-increment:none; }
.pipe li.grp > b { font-size:22px; font-weight:600; letter-spacing:-.01em; }
.pipe li.grp > span { max-width:80ch; font-size:14px; color:var(--muted); }
.pipe li.post { opacity:.75; } .pipe li.post::before { color:var(--faint); -webkit-text-stroke-color:var(--faint); }
.pipe b { font-size:16px; letter-spacing:.03em; display:block; font-weight:600; padding-top:4px; }
.pipe i { display:block; font-style:normal; font-size:10.5px; color:var(--faint); letter-spacing:.1em; text-transform:uppercase; margin-top:5px; }
.pipe span { font-size:13.5px; color:var(--muted); line-height:1.65; display:block; padding-top:4px; max-width:75ch; }

/* ---------- setup kit ---------- */
table.setup { width:100%; border-collapse:collapse; margin:10px 0 26px; font-size:13.5px; }
table.setup th { text-align:left; color:var(--faint); font-weight:500; font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; padding:0 14px 8px 0; border-bottom:1px solid var(--line); }
table.setup td { padding:13px 14px 13px 0; border-bottom:1px solid var(--line-2); vertical-align:top; line-height:1.5; }
table.setup td:first-child { width:36%; }
table.setup a { color:var(--active); word-break:break-all; display:inline-block; padding:4px 0; }
.muted { color:var(--muted); } .missing { color:var(--stall); font-size:12.5px; } .stored { color:var(--done); font-size:12.5px; }
.chip.free { border-color:var(--done); color:var(--done); } .chip.paid { border-color:var(--active); color:var(--active); }
.warn { background:var(--card-hi); border:1px solid var(--line); border-left:2px solid var(--active); padding:13px 16px; border-radius:0 8px 8px 0; margin:18px 0; font-size:13.5px; line-height:1.6; }
ol.steps { font-size:13.5px; line-height:1.75; padding-left:20px; }

/* ---------- drawer (client detail) ---------- */
.scrim { position:fixed; inset:0; background:var(--scrim); z-index:40; opacity:0; pointer-events:none; transition:opacity .3s; backdrop-filter:blur(2px); }
.scrim.on { opacity:1; pointer-events:auto; }
.drawer { position:fixed; top:0; right:0; bottom:0; width:min(760px, 100vw); z-index:41; background:var(--bg-2); border-left:1px solid var(--line); transform:translateX(102%); transition:transform .5s var(--ease-out); display:flex; flex-direction:column; box-shadow:var(--shadow); }
.drawer.on { transform:none; }
.drawer .dhead { padding:20px 26px 16px; border-bottom:1px solid var(--line); display:flex; align-items:flex-start; gap:12px; }
.drawer .dhead h2 { font-size:22px; font-weight:600; letter-spacing:-.015em; display:flex; align-items:center; gap:10px; flex-wrap:wrap; line-height:1.2; }
.drawer .dhead .btn.icon { margin-left:auto; flex:0 0 auto; }
.drawer .dbody { overflow:auto; padding:22px 26px 60px; }
.dtrack { display:grid; grid-template-columns:repeat(18, 1fr); gap:4px; }
.dtrack i { display:block; height:14px; border-radius:3px; background:var(--pending); position:relative; }
.dtrack i.done { background:var(--done); } .dtrack i.active { background:var(--active); box-shadow:0 0 14px rgba(232,181,58,.45); }
.dtrack i.na { visibility:hidden; } .dtrack i.incomplete { background:transparent; box-shadow:inset 0 0 0 2px var(--stall); }
.dtrack i.override { background:transparent; box-shadow:inset 0 0 0 2px var(--pending2); } .dtrack i.implied { background:transparent; box-shadow:inset 0 0 0 2px var(--done); } .dtrack i.post { opacity:.45; }
.dtrack.codes i { visibility:visible; height:auto; background:none; font-style:normal; font-size:9.5px; color:var(--faint); text-align:center; letter-spacing:.04em; box-shadow:none; }
.dtrack.codes i.post { opacity:.55; }
.facts { display:grid; grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); gap:1px; background:var(--line); border:1px solid var(--line); border-radius:12px; overflow:hidden; margin-top:20px; }
.facts div { background:var(--card); padding:12px 14px; }
.facts dt { font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--faint); margin-bottom:4px; }
.facts dd { font-size:13.5px; font-weight:500; overflow-wrap:anywhere; }
.facts dd.big { font-size:24px; font-weight:600; letter-spacing:-.02em; line-height:1; margin-top:2px; }
.facts dd.big small { font-size:12px; color:var(--faint); font-weight:500; letter-spacing:0; margin-left:4px; }
.facts dd a { color:var(--text); text-decoration:none; border-bottom:1px solid var(--line-hi); }
.facts dd a:hover { color:var(--ember); border-bottom-color:var(--ember); }
.gauge { display:flex; align-items:center; gap:10px; margin-top:4px; }
.gauge .g { flex:1; height:6px; border-radius:3px; background:var(--pending); overflow:hidden; }
.gauge .g i { display:block; height:100%; border-radius:3px; background:var(--done); width:0; transition:width 1s var(--ease-out); }
.gauge.warn .g i { background:var(--active); } .gauge.bad .g i { background:var(--stall); }
.timeline { list-style:none; margin-top:6px; }
.timeline li { position:relative; padding:0 0 18px 30px; }
.timeline li::before { content:""; position:absolute; left:5px; top:16px; bottom:-2px; width:2px; background:var(--line); }
.timeline li:last-child::before { display:none; }
.timeline .dot { position:absolute; left:0; top:4px; width:12px; height:12px; border-radius:50%; background:var(--pending); }
.timeline .t-done .dot { background:var(--done); } .timeline .t-implied .dot { background:transparent; box-shadow:inset 0 0 0 2px var(--done); }
.timeline .t-active .dot { background:var(--active); box-shadow:0 0 0 4px rgba(232,181,58,.14); }
.timeline .t-pending .dot { box-shadow:inset 0 0 0 2px var(--line-hi); background:transparent; }
.timeline .t-incomplete .dot { box-shadow:inset 0 0 0 2px var(--stall); background:transparent; }
.timeline .t-override .dot { box-shadow:inset 0 0 0 2px var(--pending2); background:transparent; }
.timeline h4 { font-size:13.5px; font-weight:600; display:flex; gap:10px; align-items:baseline; flex-wrap:wrap; }
.timeline h4 em { font-style:normal; font-size:11px; font-weight:600; letter-spacing:.06em; }
.t-done h4 em, .t-implied h4 em { color:var(--done); } .t-active h4 em { color:var(--active); } .t-incomplete h4 em { color:var(--stall); }
.t-pending h4 em, .t-pending h4, .t-override h4 em { color:var(--faint); }
.timeline p { font-size:13px; color:var(--muted); line-height:1.6; margin-top:5px; max-width:66ch; }
.t-pending p { color:var(--faint); }
.dsec { font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); font-weight:600; margin:26px 0 10px; }

/* ---------- command palette ---------- */
.pal { position:fixed; inset:0; z-index:60; display:none; align-items:flex-start; justify-content:center; padding-top:12vh; background:var(--scrim); backdrop-filter:blur(4px); }
.pal.on { display:flex; }
.pal .box { width:min(620px, 92vw); background:var(--bg-2); border:1px solid var(--line-hi); border-radius:14px; box-shadow:var(--shadow); overflow:hidden; animation:pop .25s var(--ease-out); }
@keyframes pop { from { transform:translateY(-8px) scale(.98); opacity:0; } }
.pal input { width:100%; height:54px; padding:0 18px; border:0; border-bottom:1px solid var(--line); background:transparent; color:var(--text); font:inherit; font-size:16px; }
.pal input:focus { outline:none; }
.pal ul { list-style:none; max-height:50vh; overflow:auto; padding:6px; }
.pal li { display:flex; align-items:center; gap:12px; padding:10px 12px; border-radius:8px; font-size:14px; cursor:pointer; color:var(--muted); }
.pal li[aria-selected="true"], .pal li:hover { background:var(--card-hi); color:var(--text); }
.pal li .k { margin-left:auto; font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--faint); }
.pal li .chip { font-size:9.5px; padding:1px 6px; }

/* ---------- states ---------- */
.empty { display:grid; place-items:center; text-align:center; padding:56px 20px; border:1px dashed var(--line-hi); border-radius:var(--r-l); position:relative; overflow:hidden; min-height:320px; }
.empty img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; opacity:.22; filter:saturate(.8); }
.empty::after { content:""; position:absolute; inset:0; background:radial-gradient(60% 60% at 50% 55%, var(--bg-a10), var(--bg-a85)); }
.empty > div { position:relative; z-index:1; max-width:44ch; }
.empty h3 { font-size:20px; font-weight:600; letter-spacing:-.01em; margin-bottom:8px; }
.empty p { color:var(--muted); font-size:14px; line-height:1.6; }
.empty .btn { margin-top:18px; }
.skel { border-radius:var(--r-m); background:linear-gradient(90deg, var(--card) 0%, var(--card-hi) 40%, var(--card) 80%); background-size:200% 100%; animation:shimmer 1.4s linear infinite; border:1px solid var(--line-2); }
@keyframes shimmer { to { background-position:-200% 0; } }
.errbox { border:1px solid var(--stall); background:var(--stall-bg); border-radius:var(--r-l); padding:22px 24px; display:grid; grid-template-columns:auto 1fr auto; gap:16px; align-items:center; }
.errbox h3 { font-size:16px; font-weight:600; color:var(--stall); }
.errbox p { color:var(--muted); font-size:13.5px; margin-top:4px; line-height:1.5; }
.errbox .ic { width:40px; height:40px; border-radius:50%; background:var(--stall); color:var(--on-stall); display:grid; place-items:center; font-weight:700; font-size:20px; }
.toast { position:fixed; left:50%; bottom:28px; transform:translate(-50%, 20px); z-index:70; background:var(--card-hi); border:1px solid var(--line-hi); border-radius:10px; padding:11px 16px; font-size:13.5px; box-shadow:var(--shadow); opacity:0; transition:all .35s var(--ease-out); display:flex; gap:10px; align-items:center; pointer-events:none; }
.toast.on { opacity:1; transform:translate(-50%, 0); }
.toast i { width:8px; height:8px; border-radius:50%; background:var(--done); } .toast.err i { background:var(--stall); }

/* ---------- boot ---------- */
.boot { position:fixed; inset:0; z-index:100; background:var(--bg); display:grid; place-items:center; transition:opacity .8s var(--ease-io), visibility .8s; }
.boot.off { opacity:0; visibility:hidden; }
.boot .bwrap { text-align:center; }
.boot .bticks { display:inline-grid; grid-template-columns:repeat(18, 6px); gap:4px; margin-bottom:20px; }
.boot .bticks i { height:22px; border-radius:2px; background:var(--pending); animation:bt 1.6s var(--ease-io) infinite; animation-delay:calc(var(--i) * 45ms); }
@keyframes bt { 0%,100%{background:var(--pending); transform:scaleY(.5)} 50%{background:var(--ember); transform:scaleY(1)} }
.boot .bl { font-size:11px; letter-spacing:.24em; text-transform:uppercase; color:var(--faint); }
.boot .bl b { color:var(--text); }

/* ---------- view transitions ---------- */
.view > * { animation:rise .55s var(--ease-out) both; }
.view > *:nth-child(2) { animation-delay:.05s; } .view > *:nth-child(3) { animation-delay:.1s; } .view > *:nth-child(4) { animation-delay:.15s; } .view > *:nth-child(5) { animation-delay:.2s; }
@keyframes rise { from { opacity:0; transform:translateY(10px); } }
.board .row { animation:rise .5s var(--ease-out) both; animation-delay:calc(var(--i, 0) * 35ms); }

/* ---------- mobile nav ---------- */
.mnav { display:none; }

/* ---------- responsive ---------- */
@media (max-width:1240px) {
  .hero { grid-template-columns:1fr; }
  .kpis { grid-template-columns:repeat(4, 1fr); }
  .kpi.span { grid-column:span 2; }
  .c4 { grid-column:span 6; } .c8 { grid-column:span 12; }
}
@media (max-width:1100px) {
  .rowgrid { grid-template-columns:minmax(170px, 22%) minmax(200px, 1fr) minmax(120px, 14%) 120px; }
  .row .state, .axis .lab.lstate { display:none; }
  .rowgrid.mgrid { grid-template-columns:minmax(170px, 24%) minmax(200px, 1fr) minmax(120px, 15%) 100px; }
}
@media (max-width:900px) {
  .app { grid-template-columns:1fr; }
  .rail { display:none; }
  .mnav { display:flex; position:fixed; left:0; right:0; bottom:0; z-index:30; background:var(--bg-a90); backdrop-filter:blur(18px); border-top:1px solid var(--line); padding:6px 6px calc(6px + env(safe-area-inset-bottom)); gap:2px; overflow-x:auto; }
  .mnav .nv { flex:1 0 auto; flex-direction:column; gap:4px; height:52px; font-size:10.5px; padding:0 8px; justify-content:center; }
  .mnav .nv b { margin:0; position:absolute; top:6px; right:8px; font-size:9.5px; }
  .mnav .nv kbd { display:none; }
  .mnav .nv[aria-current="page"]::before { display:none; }
  .topbar { flex-wrap:wrap; height:auto; padding:10px 16px; gap:8px; }
  .search { flex:1 1 100%; }
  .tb-right { margin-left:0; flex:1 1 100%; justify-content:flex-start; flex-wrap:wrap; }
  .tb-right .btn.primary { margin-left:auto; }
  .gen { display:none; }
  .view { padding:18px 16px 110px; }
  .axis { display:none; }
  .row, .rowgrid, .rowgrid.mgrid { grid-template-columns:1fr; gap:10px; }
  .row .state { display:-webkit-box; }
  .meta { text-align:left; }
  .expand { grid-template-columns:1fr; padding:14px; }
  .kpis { grid-template-columns:1fr 1fr; }
  .kpi.span { grid-column:1 / -1; }
  .kpi .n { font-size:36px; }
  .c4, .c6, .c8 { grid-column:span 12; }
  .field { min-height:340px; }
    ul.attn li { grid-template-columns:1fr; gap:6px; }
  .sev { justify-self:start; }
  .pipe li { grid-template-columns:44px 1fr; } .pipe li span { grid-column:1 / -1; }
  .drawer { width:100vw; }
  .strip li { flex-wrap:wrap; } .strip li .legend { flex:1 1 100%; margin:0; }
  .vhead .tools .lbl { display:none; }
  .heat { padding:10px 12px; }
  .kpi .n { font-size:34px; }
  .banner { padding:10px 16px; flex-wrap:wrap; } .banner a, .banner button.link { margin-left:0; }
  table.setup, table.setup thead, table.setup tbody, table.setup tr, table.setup td { display:block; width:auto; }
  table.setup thead { display:none; } table.setup td { padding:6px 0; border:0; } table.setup tr { padding:12px 0; border-bottom:1px solid var(--line-2); }
}
@media (max-width:560px) {
  .kpis { grid-template-columns:1fr 1fr; }
  .seg button { padding:0 9px; }
  .seg button b { display:none; }
  .heat .hr { grid-template-columns:90px repeat(18, 1fr); gap:2px; }
  .heat .hr span:first-child { font-size:10.5px; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration:.001s !important; animation-iteration-count:1 !important; transition-duration:.001s !important; }
  .track i.active::after { display:none; }
}

/* ---------- Skills: plugin cards + process views ---------- */
.tally { display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:12px; margin-bottom:calc(18px * var(--sp) + 6px); }
.tally .kpi { cursor:default; }
.tally .kpi .n { font-size:36px; }
.chip.ours { border-color:var(--ember-50); color:var(--ember); }
.chip.upstream { border-color:rgba(227,186,28,.5); color:var(--bld); }
.chip.lk { cursor:pointer; background:none; font:inherit; font-size:11px; font-weight:600; letter-spacing:.04em; text-transform:none; color:var(--text); border-color:var(--line-hi); }
.chip.lk:hover { border-color:var(--ember); color:var(--ember); }
.pgrid { display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:12px; margin-bottom:calc(26px * var(--sp)); }
.sec.cat { margin-top:calc(8px * var(--sp)); }
@media (max-width:1240px) { .pgrid { grid-template-columns:repeat(3, minmax(0, 1fr)); } }
@media (max-width:900px) { .pgrid { grid-template-columns:repeat(2, minmax(0, 1fr)); } }
@media (max-width:560px) { .pgrid { grid-template-columns:1fr; } }
.pcard { display:flex; flex-direction:column; gap:10px; text-align:left; font:inherit; color:inherit; cursor:pointer; background:linear-gradient(180deg, var(--card-a92), var(--card2-a92)); border:1px solid var(--line); border-radius:var(--r-l); padding:18px 18px 16px; min-height:172px; position:relative; overflow:hidden;
  transition:transform .35s var(--ease-out), border-color .25s, box-shadow .35s; animation:pin .6s var(--ease-out) both; animation-delay:calc(var(--i) * 28ms); }
.pcard::before { content:""; position:absolute; inset:0 0 auto 0; height:1px; background:linear-gradient(90deg, transparent, var(--hi-8), transparent); }
.pcard::after { content:""; position:absolute; right:-40px; top:-40px; width:140px; height:140px; border-radius:50%; background:radial-gradient(circle, var(--ember-12), transparent 70%); opacity:0; transition:opacity .35s; }
.pcard:hover, .pcard.cur { transform:translateY(-3px); border-color:var(--ember-50); box-shadow:0 14px 40px rgba(0,0,0,.18); }
.pcard:hover::after, .pcard.cur::after { opacity:1; }
.pcard:focus-visible { outline:2px solid var(--ember); outline-offset:2px; }
.pcard.dep { opacity:.55; } .pcard.dep .pn b { text-decoration:line-through; text-decoration-color:var(--faint); }
.pi { width:30px; height:30px; stroke:var(--ember); fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; flex:none; }
.pcard .pi { padding:5px; box-sizing:content-box; border-radius:10px; background:var(--ember-12); border:1px solid var(--ember-25); }
.pcard .pn { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.pcard .pn b { font-size:16px; font-weight:600; letter-spacing:-.01em; line-height:1.2; }
.pcard .pdsc { font-size:12.5px; color:var(--muted); line-height:1.5; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden; }
.pcard .pft { margin-top:auto; display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; }
.pcard .ver { font-size:11px; color:var(--faint); white-space:nowrap; }
.pk { font-size:10.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; padding:4px 9px; border-radius:999px; border:1px solid var(--line-hi); color:var(--muted); white-space:nowrap; }
.pk.sequence, .pk.mixed { border-color:var(--done); color:var(--done); background:var(--done-15); }
.pk.toolbox { border-color:var(--line-hi); }
.pk.none { border-style:dashed; }
@keyframes pin { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:none; } }
.loose2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:calc(22px * var(--sp) + 4px); }
.chips { display:flex; flex-wrap:wrap; gap:6px; margin-top:14px; align-items:center; }
.chips code, .chipgrp code { font-family:inherit; font-size:11.5px; font-weight:500; color:var(--muted); border:1px solid var(--line-2); border-radius:7px; padding:4px 9px; background:var(--bg-3); cursor:help; }
.chips code i { font-style:normal; color:var(--ember); margin-left:4px; font-size:10px; }
.chipgrp { display:inline-flex; align-items:center; gap:5px; flex-wrap:wrap; padding:4px 6px 4px 10px; border:1px dashed var(--line-hi); border-radius:10px; }
.chipgrp b { font-size:11px; letter-spacing:.06em; text-transform:uppercase; color:var(--faint); margin-right:4px; }
.vhead .ph1 { align-items:center; gap:12px; }
.vhead .ph1 .pi { width:32px; height:32px; }
.lede { font-size:16px; line-height:1.6; color:var(--muted); max-width:78ch; margin:-6px 0 18px; }
.flow { display:flex; gap:24px; flex-wrap:wrap; margin-bottom:18px; }
.flow > span { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.flow i { font-style:normal; font-size:10.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); font-weight:600; margin-right:4px; }
.pmap ol::before { background:var(--ember); }
.pmap li.opt::before { border-style:dashed; border-color:var(--faint); }
.pmap li.opt .no { color:var(--faint); }
.pmap li .or { display:inline-block; font-size:9.5px; letter-spacing:.14em; text-transform:uppercase; color:var(--faint); margin:2px 0; }
.legend .k-gate { border-radius:2px; transform:rotate(45deg) scale(.8); background:var(--ember); }
.legend .k-opt { border:2px dashed var(--faint); background:none; }
.pproc { counter-reset:stage; }
.pproc li { grid-template-columns:64px 250px 1fr; }
.pproc i em { font-style:normal; text-transform:none; letter-spacing:0; color:var(--ember); }
.pproc .alt { display:inline; font-size:13px; color:var(--text); padding:0; }
.pproc .gt { display:block; margin-top:10px; padding:8px 12px; border-left:2px solid var(--ember); background:var(--ember-12); border-radius:0 8px 8px 0; font-size:12.5px; color:var(--text); }
.pproc .gt i { display:inline; margin:0 8px 0 0; color:var(--ember); }
.pproc cite, .tcard cite { display:block; font-style:normal; font-size:10.5px; color:var(--faint); margin-top:8px; letter-spacing:.02em; }
.tgrid { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:10px; }
.tcard { background:var(--card-a60); border:1px solid var(--line); border-radius:12px; padding:16px 18px; }
.tcard b { display:block; font-size:15px; font-weight:600; }
.tcard i { display:block; font-style:normal; font-size:10.5px; color:var(--faint); letter-spacing:.1em; text-transform:uppercase; margin-top:4px; }
.tcard i em { font-style:normal; text-transform:none; letter-spacing:0; color:var(--ember); }
.tcard p { font-size:13px; color:var(--muted); line-height:1.55; margin-top:8px; }
.flash { animation:flash 1.6s var(--ease-out); }
@keyframes flash { 0% { box-shadow:0 0 0 3px var(--ember-50); } 100% { box-shadow:0 0 0 0 transparent; } }
.foot { margin-top:34px; padding-top:14px; border-top:1px solid var(--line); color:var(--faint); font-size:12px; line-height:1.5; max-width:100ch; }
[data-density="dense"] .pgrid { gap:8px; } [data-density="dense"] .pcard { min-height:140px; padding:14px; }
[data-density="dense"] .pproc li { padding:12px 16px; }
@media (max-width:900px) { .tally { grid-template-columns:1fr 1fr; } .loose2 { grid-template-columns:1fr; } .pproc li { grid-template-columns:44px 1fr; } .pproc li > span { grid-column:2; } }
