/* glen-design: v1 */
/* Visual block types for tailored sections (modules/section-visuals.js).
   Prefix vz- plus one short prefix per form. Tokens only; every form works in
   Day and Night from the same rules. Each form builds once when .vz gets .in. */
:root{ --vz-dim: .32; }

.vz{ position:relative; min-width:0; }
.vz-legend{ margin-bottom:var(--s4); }
.vz-legend .vz-k-solid{ background:var(--accent); }
.vz-legend .vz-k-ghost{ background:transparent; box-shadow:inset 0 0 0 1.5px var(--ink-dim); }
.vz-legend .vz-k-dash{ height:0; border-top:2px dashed var(--accent); background:none; border-radius:0; }
.vz-legend .vz-k-dots{ height:0; border-top:3px dotted var(--ink-dim); background:none; border-radius:0; }
.vz-legend .vz-k-line{ height:2px; background:var(--ink); opacity:.55; }
.vz-legend .vz-k-dot{ width:10px; height:10px; border-radius:50%; background:var(--accent); }
.vz-legend .vz-k-dot.is-warn{ background:var(--warn); }
.vz-legend .vz-k-dashring{ background:none; box-shadow:none; border:1.5px dashed var(--ink-dim); height:10px; }
.vz-read{ display:flex; gap:var(--s2); align-items:flex-start; margin:var(--s4) 0 0; color:var(--ink-dim); font-size:var(--fs-sm); line-height:1.45; }
.vz-read .ic{ width:16px; height:16px; flex:none; color:var(--accent); margin-top:1px; }
.vz-scroll{ overflow-x:auto; overscroll-behavior-x:contain; scrollbar-width:thin; }
.vz svg text{ font-family:var(--font-body); }
[data-tip]{ cursor:default; }
.vz-tip{ position:fixed; left:0; top:0; z-index:80; pointer-events:none; display:grid; gap:2px; max-width:280px; padding:var(--s2) var(--s3); border-radius:var(--r-sm);
  background:var(--mat-float); -webkit-backdrop-filter:var(--mat-blur); backdrop-filter:var(--mat-blur); box-shadow:var(--shadow-2),var(--ring);
  color:var(--ink); font-size:var(--fs-sm); line-height:1.35; opacity:0; }
.vz-tip b{ font-weight:600; }
.vz-tip span{ color:var(--ink-dim); font-family:var(--font-mono); font-size:var(--fs-micro); }
.vz-tip.on{ opacity:1; }
.vz :focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }

/* ---------------- BLUEPRINT ---------------- */
.bp-sheet{ position:relative; border-radius:var(--r); overflow:hidden; padding:var(--s3);
  background-color:var(--bp-paper);
  background-image:linear-gradient(var(--bp-grid-2) 1px,transparent 1px),linear-gradient(90deg,var(--bp-grid-2) 1px,transparent 1px),linear-gradient(var(--bp-grid) 1px,transparent 1px),linear-gradient(90deg,var(--bp-grid) 1px,transparent 1px);
  background-size:60px 60px,60px 60px,12px 12px,12px 12px; box-shadow:inset 0 0 0 1px var(--bp-grid-2); }
.bp-svg{ display:block; width:100%; height:auto; overflow:visible; }
.bp-svg.vz-tall{ display:none; }
.bp-ink{ fill:none; stroke:var(--bp-ink); stroke-width:1.6; stroke-linecap:round; }
.bp-thin{ stroke-width:1; opacity:.55; }
.bp-strong{ stroke-width:2.2; }
.bp-flow{ fill:none; stroke:var(--accent); stroke-width:3; stroke-linecap:round; stroke-dasharray:2 11; opacity:0; }
.bp-dim{ fill:var(--bp-ink); font:500 var(--fs-sm) var(--font-mono)!important; paint-order:stroke; stroke:var(--bp-paper); stroke-width:7px; stroke-linejoin:round; }
.bp-dim--big{ font-size:var(--fs-base)!important; font-weight:500; }
.bp-station .bp-box{ fill:var(--bp-fill); stroke:var(--bp-ink); stroke-width:1.8; }
.bp-station .bp-box-in{ fill:none; stroke:var(--bp-ink); stroke-width:.8; opacity:.45; }
.bp-station.is-hot .bp-box{ fill:var(--bp-hot); }
.bp-label{ fill:var(--ink); font-weight:600; font-size:var(--fs-base); }
.bp-step{ fill:var(--bp-ink); font:500 var(--fs-micro) var(--font-mono)!important; opacity:.8; }
.bp-count{ fill:var(--ink); font:300 30px var(--font-display)!important; letter-spacing:-.03em; }
.bp-count--sm{ font-size:26px!important; }
.bp-unit{ fill:var(--ink-dim); font-size:var(--fs-sm); }
.bp-station{ transform-box:fill-box; transform-origin:center; }
.bp-cloud{ fill:none; stroke:var(--bad); stroke-width:2.2; stroke-linejoin:round; }
.bp-note-mark circle{ fill:var(--bp-paper); stroke:var(--bp-ink); stroke-width:1.6; }
.bp-note-mark text{ fill:var(--bp-ink); font:600 var(--fs-sm) var(--font-mono)!important; }
.bp-note-mark.is-bad circle{ stroke:var(--bad); } .bp-note-mark.is-bad text{ fill:var(--bad); }
.bp-note-mark.is-warn circle{ stroke:var(--warn); } .bp-note-mark.is-warn text{ fill:var(--warn); }
.bp-leader{ fill:none; stroke:var(--bp-ink); stroke-width:1; stroke-dasharray:3 3; }
.bp-title rect,.bp-title path{ fill:var(--bp-paper); stroke:var(--bp-ink); stroke-width:1.2; }
.bp-title path{ fill:none; }
.bp-t-org{ fill:var(--bp-ink); font-weight:600; font-size:var(--fs-sm); }
.bp-t-name{ fill:var(--ink); font-weight:600; font-size:var(--fs-sm); }
.bp-t-meta{ fill:var(--ink-dim); font:400 var(--fs-micro) var(--font-mono)!important; }
.bp-notes{ list-style:none; margin:var(--s4) 0 0; padding:0; display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:var(--s3); }
.bp-notes li{ display:flex; gap:var(--s3); align-items:flex-start; font-size:var(--fs-sm); line-height:1.45; }
.bp-notes b{ flex:none; display:grid; place-items:center; width:26px; height:26px; border-radius:50%; box-shadow:inset 0 0 0 1.6px var(--bp-ink); color:var(--bp-ink); font:600 var(--fs-sm) var(--font-mono); }
.bp-notes .is-bad b{ box-shadow:inset 0 0 0 1.6px var(--bad); color:var(--bad); }
.bp-notes .is-warn b{ box-shadow:inset 0 0 0 1.6px var(--warn); color:var(--warn); }

/* ---------------- ORBIT ---------------- */
.vz-orbit{ display:grid; grid-template-columns:minmax(0,1.05fr) minmax(260px,.95fr); gap:var(--s5) var(--s6); align-items:center; }
.vz-orbit .vz-read{ grid-column:1/-1; margin-top:0; }
.ob-svg{ display:block; width:100%; max-width:640px; margin:0 auto; height:auto; overflow:visible; }
.ob-ring{ fill:none; stroke:var(--line-2); stroke-width:1.5; stroke-dasharray:3 5; }
.ob-spoke{ stroke:var(--line); stroke-width:1; }
.ob-wedge{ fill:var(--accent); opacity:0; }
.ob-ringlabel{ fill:var(--ink-dim); font:500 var(--fs-micro) var(--font-mono)!important; paint-order:stroke; stroke:var(--surface-1); stroke-width:5px; stroke-linejoin:round; }
.ob-sector{ fill:var(--ink-dim); font-size:var(--fs-sm); font-weight:600; }
.ob-bubble circle{ fill:color-mix(in oklab,var(--accent) 22%,var(--surface-1)); stroke:var(--accent); stroke-width:1.8; }
.ob-bubble text{ fill:var(--ink); font:500 var(--fs-sm) var(--font-mono)!important; pointer-events:none; }
.ob-bubble.is-warn circle{ stroke:var(--warn); } .ob-bubble.is-ok circle{ stroke:var(--ok); }
.ob-bubble{ transform-box:fill-box; transform-origin:center; }
.ob-core-disc{ fill:var(--accent); }
.ob-core-pulse{ fill:none; stroke:var(--accent); stroke-width:2; opacity:0; transform-box:fill-box; transform-origin:center; }
.ob-core-v{ fill:var(--on-accent); font:300 36px var(--font-display)!important; }
.ob-core-l{ fill:var(--on-accent); font-size:var(--fs-micro); font-weight:600; }
.vz-orbit.is-hl .ob-bubble:not(.is-on){ opacity:var(--vz-dim); }
.vz-orbit.is-hl .ob-wedge.is-on{ opacity:.07; }
.vz-orbit.is-hl .ob-sector.is-on{ fill:var(--accent); }
.ob-side-head{ display:flex; justify-content:space-between; align-items:baseline; gap:var(--s3); margin-bottom:var(--s3); }
.ob-list{ list-style:none; margin:0; padding:0; display:grid; gap:2px; }
.ob-list li{ display:grid; grid-template-columns:minmax(0,1fr) 72px auto; grid-template-rows:auto auto; gap:2px var(--s3); align-items:center; padding:var(--s2) var(--s3); border-radius:var(--r-sm); cursor:default; }
.ob-l-name{ font-weight:600; font-size:var(--fs-sm); }
.ob-l-bar{ height:6px; border-radius:var(--r-pill); background:var(--surface-3); overflow:hidden; }
.ob-l-bar i{ display:block; height:100%; width:calc(var(--p) * 100%); background:var(--accent); border-radius:inherit; transform-origin:left; }
.ob-l-v{ text-align:right; font-size:var(--fs-base); }
.ob-l-v small{ color:var(--ink-dim); font-size:var(--fs-micro); margin-left:4px; font-family:var(--font-body); }
.ob-l-s{ grid-column:1/-1; color:var(--ink-dim); font-size:var(--fs-micro); }
.ob-list li.is-on{ background:var(--tint); }

/* ---------------- SKYLINE ---------------- */
.sky-svg{ display:block; width:100%; min-width:680px; height:auto; overflow:visible; }
.sky-ground{ stroke:var(--line-2); stroke-width:1.5; }
.sky-plane{ fill:var(--sky-plane); }
.sky-ghost{ fill:none; stroke:var(--ink-dim); stroke-width:1.4; stroke-dasharray:5 4; stroke-linejoin:round; }
.sky-front{ fill:var(--sky-front); } .sky-side{ fill:var(--sky-side); } .sky-top{ fill:var(--sky-top); }
.sky-win{ fill:var(--sky-win); }
.sky-solid{ transform-box:fill-box; transform-origin:bottom; }
.sky-pct{ fill:var(--ink); font:300 26px var(--font-display)!important; letter-spacing:-.02em; }
.sky-bldg.is-bad .sky-pct{ fill:var(--bad); font-weight:700!important; } .sky-bldg.is-warn .sky-pct{ fill:var(--warn); font-weight:700!important; } .sky-bldg.is-ok .sky-pct{ fill:var(--ok); font-weight:700!important; }
.sky-of{ fill:var(--ink-dim); font:400 var(--fs-micro) var(--font-mono)!important; }
.sky-name{ fill:var(--ink); font-size:var(--fs-sm); font-weight:600; }
.sky-bldg{ transition:opacity var(--dur-base) var(--ease-out); }

/* ---------------- HEATMAP ---------------- */
.hm-top{ display:flex; justify-content:flex-end; margin-bottom:var(--s3); }
.hm-scale{ display:flex; align-items:center; gap:4px; color:var(--ink-dim); font-size:var(--fs-sm); }
.hm-scale span:first-child{ margin-right:var(--s2); } .hm-scale span:last-child{ margin-left:var(--s2); }
.hm-scale i{ width:14px; height:14px; border-radius:3px; }
.hm-body{ display:grid; grid-template-columns:minmax(0,1fr) 220px; gap:var(--s6); align-items:start; }
.hm-grid{ display:grid; grid-template-columns:auto repeat(var(--cols),minmax(0,1fr)); grid-template-rows:auto repeat(5,auto); gap:4px; }
.hm-m{ grid-row:1; font-size:var(--fs-micro); color:var(--ink-dim); white-space:nowrap; padding-bottom:2px; }
.hm-d{ grid-column:1; font-size:var(--fs-micro); color:var(--ink-dim); padding-right:var(--s2); align-self:center; }
.hm-grid i{ display:block; aspect-ratio:1; border-radius:4px; background:var(--heat-1); transform-origin:center; }
.hm-grid i.lv-2,.hm-scale .lv-2{ background:var(--heat-2); } .hm-grid i.lv-3,.hm-scale .lv-3{ background:var(--heat-3); }
.hm-grid i.lv-4,.hm-scale .lv-4{ background:var(--heat-4); } .hm-grid i.lv-5,.hm-scale .lv-5{ background:var(--heat-5); }
.hm-scale .lv-1{ background:var(--heat-1); }
.hm-grid i.is-closed{ background:transparent; box-shadow:inset 0 0 0 1px var(--line-2); }
.hm-grid i.is-mark{ box-shadow:0 0 0 2px var(--surface-1),0 0 0 4px var(--warn); }
.hm-grid i.is-peak{ box-shadow:0 0 0 2px var(--surface-1),0 0 0 4px var(--ink); }
.hm-side{ display:grid; gap:var(--s2); }
.hm-side-t{ font-size:var(--fs-sm); margin-bottom:var(--s1); }
.hm-dow{ display:grid; grid-template-columns:36px minmax(0,1fr) 44px; gap:var(--s2); align-items:center; font-size:var(--fs-sm); }
.hm-dow span:first-child{ color:var(--ink-dim); }
.hm-dow-bar{ height:10px; border-radius:var(--r-pill); background:var(--surface-3); overflow:hidden; }
.hm-dow-bar i{ display:block; height:100%; width:calc(var(--p) * 100%); background:var(--accent); border-radius:inherit; transform-origin:left; }
.hm-dow b{ text-align:right; font-weight:500; }
.hm-foot{ display:flex; flex-wrap:wrap; gap:var(--s2) var(--s5); margin:var(--s4) 0 0; font-size:var(--fs-sm); color:var(--ink-dim); }
.hm-foot b{ color:var(--ink); font-weight:600; }

/* ---------------- RINGS ---------------- */
.vz-rings{ display:grid; grid-template-columns:auto minmax(0,1fr); gap:var(--s5) var(--s6); align-items:center; }
.vz-rings .vz-read{ grid-column:1/-1; margin-top:0; }
.rg-stage{ position:relative; width:220px; aspect-ratio:1; }
.rg-stage svg{ width:100%; height:100%; display:block; overflow:visible; }
.rg-track{ fill:none; stroke:var(--surface-3); stroke-width:20; }
.rg-fill{ fill:none; stroke:var(--accent); stroke-width:20; stroke-linecap:round; stroke-dasharray:1 1; stroke-dashoffset:calc(1 - var(--p)); }
.rg.is-ok .rg-fill{ stroke:var(--ok); } .rg.is-warn .rg-fill{ stroke:var(--warn); } .rg.is-bad .rg-fill{ stroke:var(--bad); }
.rg-core{ position:absolute; inset:0; display:grid; place-content:center; text-align:center; pointer-events:none; }
.rg-core .fig{ font-size:var(--fs-xl); } .rg-core small{ font-size:var(--fs-sm); color:var(--ink-dim); font-family:var(--font-body); font-weight:400; letter-spacing:0; }
.rg-core span{ font-size:var(--fs-micro); color:var(--ink-dim); }
.rg-list{ list-style:none; margin:0; padding:0; display:grid; gap:var(--s3); }
.rg-list li{ display:grid; grid-template-columns:12px minmax(0,1fr) auto; grid-template-rows:auto auto; gap:2px var(--s3); align-items:center; }
.rg-list i{ width:12px; height:12px; border-radius:50%; background:var(--accent); }
.rg-list .is-ok i{ background:var(--ok); } .rg-list .is-warn i{ background:var(--warn); } .rg-list .is-bad i{ background:var(--bad); }
.rg-l{ font-weight:600; font-size:var(--fs-sm); }
.rg-list b{ font-size:var(--fs-lg); font-weight:500; text-align:right; }
.rg-t{ grid-column:2/-1; color:var(--ink-dim); font-size:var(--fs-micro); }
.rg-t em{ font-style:normal; font-weight:600; }
.rg-list .is-ok em{ color:var(--ok); } .rg-list .is-warn em{ color:var(--warn); } .rg-list .is-bad em{ color:var(--bad); }

/* ---------------- GAUGE ---------------- */
.vz-gauge{ display:grid; grid-template-columns:minmax(220px,.8fr) minmax(0,1.6fr); gap:var(--s5) var(--s6); align-items:start; }
.vz-gauge .vz-read{ grid-column:1/-1; margin-top:0; }
.gg-pick{ display:grid; gap:var(--s2); }
.gg-opt{ display:grid; grid-template-columns:minmax(0,1fr) auto; gap:2px var(--s3); padding:var(--s3); border:0; border-radius:var(--r-sm); background:var(--surface-2); color:var(--ink); text-align:left; font:inherit; cursor:pointer; box-shadow:inset 0 0 0 1px var(--line); }
.gg-o-name{ font-weight:600; font-size:var(--fs-sm); }
.gg-o-v{ font-size:var(--fs-sm); text-align:right; }
.gg-o-s{ grid-column:1/-1; font-size:var(--fs-micro); font-weight:600; color:var(--ink-dim); }
.gg-opt.is-bad .gg-o-s{ color:var(--bad); } .gg-opt.is-warn .gg-o-s{ color:var(--warn); } .gg-opt.is-ok .gg-o-s{ color:var(--ok); }
.gg-opt[aria-selected="true"]{ background:var(--surface-1); box-shadow:var(--shadow-1),inset 0 0 0 2px var(--accent); }
.gg-main{ display:grid; grid-template-columns:minmax(0,1.3fr) minmax(200px,.9fr); gap:var(--s5); align-items:center; }
.gg-dial{ position:relative; }
.gg-svg{ display:block; width:100%; height:auto; overflow:visible; }
.gg-track{ fill:none; stroke:var(--surface-3); stroke-width:34; }
.gg-tick{ stroke:var(--ink-faint); stroke-width:1.5; }
.gg-seg{ fill:none; stroke-width:34; stroke:var(--accent); }
.gg-seg-1{ stroke:color-mix(in oklab,var(--accent) 70%,var(--surface-1)); }
.gg-seg-2{ stroke:color-mix(in oklab,var(--accent) 48%,var(--surface-1)); }
.gg-seg-3{ stroke:color-mix(in oklab,var(--accent) 32%,var(--surface-1)); }
.gg-now{ stroke:var(--warn); }
.gg-seg.is-over{ stroke:var(--bad); }
.gg-ceil{ stroke:var(--ink); stroke-width:3; stroke-linecap:round; }
.gg-ceil-l{ fill:var(--ink); font-size:var(--fs-sm); font-weight:600; }
.gg-needle{ transform-box:view-box; transform-origin:220px 214px; transform:rotate(0deg); }
.gg-needle path{ stroke:var(--ink); stroke-width:4; stroke-linecap:round; }
.gg-needle circle{ fill:var(--ink); }
.gg-read{ display:grid; justify-items:center; text-align:center; gap:var(--s1); margin-top:calc(var(--s3) * -1); }
.gg-read .fig{ font-size:var(--fs-2xl); }
.gg-read .is-bad{ color:var(--bad); font-weight:700; } .gg-read .is-warn{ color:var(--warn); font-weight:700; } .gg-read .is-ok{ color:var(--ok); font-weight:700; }
.gg-read span{ color:var(--ink-dim); font-size:var(--fs-sm); }
.gg-parts{ list-style:none; margin:0; padding:0; display:grid; gap:var(--s2); font-size:var(--fs-sm); }
.gg-parts li{ display:grid; grid-template-columns:12px minmax(0,1fr) auto; gap:var(--s2); align-items:center; }
.gg-parts li i{ width:12px; height:12px; border-radius:3px; background:var(--accent); }
.gg-parts .gp-seg-1 i{ background:color-mix(in oklab,var(--accent) 70%,var(--surface-1)); }
.gg-parts .gp-seg-2 i{ background:color-mix(in oklab,var(--accent) 48%,var(--surface-1)); }
.gg-parts .gp-seg-3 i{ background:color-mix(in oklab,var(--accent) 32%,var(--surface-1)); }
.gg-parts .gp-now i{ background:var(--warn); }
.gg-parts b{ font-weight:500; text-align:right; }
.gg-parts .gp-total,.gg-parts .gp-ceil{ grid-template-columns:minmax(0,1fr) auto; border-top:1px solid var(--line-2); padding-top:var(--s2); font-weight:600; }
.gg-parts .gp-ceil{ border-top:0; padding-top:0; color:var(--ink-dim); font-weight:400; }

/* ---------------- LANES ---------------- */
.ln-board{ min-width:920px; position:relative; }
.ln-head{ display:grid; grid-template-columns:150px minmax(0,1fr); height:26px; }
.ln-ticks{ position:relative; border-bottom:1px solid var(--line-2); }
.ln-ticks span{ position:absolute; bottom:6px; transform:translateX(-50%); font:500 var(--fs-micro) var(--font-mono); color:var(--ink-dim); white-space:nowrap; }
.ln-body{ position:relative; }
.ln-overlay{ position:absolute; top:0; bottom:0; left:150px; right:0; pointer-events:none; }
.ln-mark{ position:absolute; top:0; bottom:0; border-left:1.5px dashed var(--ink-faint); pointer-events:auto; }
.ln-head--marks{ height:34px; }
.ln-mrow{ position:relative; }
.ln-pill{ position:absolute; top:6px; transform:translateX(-12px); white-space:nowrap; font-size:var(--fs-micro); font-weight:600; color:var(--ink); background:var(--surface-3); padding:3px var(--s2); border-radius:var(--r-pill); }
.ln-pill.is-end{ transform:translateX(calc(-100% + 12px)); }
.ln-pill.is-today{ background:var(--accent); color:var(--on-accent); }
.ln-today{ position:absolute; top:0; bottom:0; border-left:2px solid var(--accent); }
.ln-row{ display:grid; grid-template-columns:150px minmax(0,1fr); min-height:calc(var(--depth) * 34px + 18px); border-bottom:1px solid var(--line); }
.ln-name{ font-weight:600; font-size:var(--fs-sm); padding:var(--s3) var(--s3) 0 0; }
.ln-track{ position:relative; }
.ln-item{ position:absolute; top:calc(12px + var(--k) * 34px); display:inline-flex; align-items:center; gap:6px; transform:translateX(-5px); white-space:nowrap; font-size:var(--fs-sm); padding:3px var(--s2) 3px 4px; border-radius:var(--r-pill); background:var(--surface-2); box-shadow:inset 0 0 0 1px var(--line); }
.ln-item i{ width:10px; height:10px; border-radius:50%; background:var(--accent); flex:none; }
.ln-item.is-warn i{ background:var(--warn); } .ln-item.is-warn{ box-shadow:inset 0 0 0 1px var(--warn); }
.ln-item.is-ok i{ background:var(--ok); }
.ln-item.is-end{ flex-direction:row-reverse; transform:translateX(calc(-100% + 5px)); padding:3px 4px 3px var(--s2); }
.ln-marks-key{ display:flex; flex-wrap:wrap; gap:var(--s2) var(--s4); margin-top:var(--s3); font-size:var(--fs-micro); color:var(--ink-dim); }

/* ---------------- TRAJECTORY ---------------- */
.tj-chart{ position:relative; height:280px; margin:var(--s2) 110px 0 0; }
.tj-chart svg{ position:absolute; inset:0; width:100%; height:100%; overflow:visible; }
.tj-grid{ stroke:var(--line); stroke-width:1; vector-effect:non-scaling-stroke; }
.tj-target{ stroke:var(--ink); stroke-width:1.5; opacity:.55; vector-effect:non-scaling-stroke; }
.tj-ghost{ fill:none; stroke:var(--ink-dim); stroke-width:2; stroke-dasharray:1 5; stroke-linecap:round; vector-effect:non-scaling-stroke; }
.tj-area{ fill:var(--tint-2); }
.tj-line{ fill:none; stroke:var(--accent); stroke-width:3; stroke-linejoin:round; stroke-linecap:round; vector-effect:non-scaling-stroke; }
.tj-proj{ fill:none; stroke:var(--accent); stroke-width:2.5; stroke-dasharray:7 6; vector-effect:non-scaling-stroke; }
.tj-lab{ position:absolute; font-size:var(--fs-sm); color:var(--ink-dim); white-space:nowrap; transform:translateY(-50%); }
.tj-lab b{ color:var(--ink); font-weight:500; }
.tj-lab small{ font-size:var(--fs-micro); }
.tj-lab--target{ right:-110px; }
.tj-lab--end,.tj-lab--ghost{ display:grid; padding-left:var(--s3); line-height:1.15; }
.tj-lab--end b{ font-size:var(--fs-base); }
.tj-lab--ghost{ color:var(--ink-dim); }
.tj-now{ position:absolute; display:grid; justify-items:start; transform:translate(-7px,-7px); }
.tj-now i{ width:14px; height:14px; border-radius:50%; background:var(--accent); box-shadow:0 0 0 4px var(--tint-2); }
.tj-now b{ position:absolute; left:-4px; bottom:22px; font-size:var(--fs-xl); font-weight:500; white-space:nowrap; }
.tj-now small{ position:absolute; left:20px; top:-1px; font-size:var(--fs-micro); color:var(--ink-dim); white-space:nowrap; }
.tj-axis{ position:relative; height:24px; margin:var(--s2) 110px 0 0; border-top:1px solid var(--line-2); }
.tj-axis span{ position:absolute; top:6px; transform:translateX(-50%); font:500 var(--fs-micro) var(--font-mono); color:var(--ink-dim); white-space:nowrap; }
.tj-axis span:first-child{ transform:none; }
.tj-phases{ position:relative; height:30px; margin:var(--s3) 110px 0 0; }
.tj-phases span{ position:absolute; top:0; bottom:0; display:flex; align-items:center; padding:0 var(--s2); overflow:hidden; white-space:nowrap; text-overflow:ellipsis; border-radius:var(--r-sm); background:var(--surface-3); font-size:var(--fs-micro); font-weight:600; color:var(--ink-dim); box-shadow:inset 0 0 0 1px var(--surface-1); }
.tj-phases .is-now{ background:var(--tint-2); color:var(--accent); }
.tj-phases .is-past{ opacity:.6; }
.tj-say{ margin:var(--s4) 0 0; font-size:var(--fs-base); }
.tj-say .is-ok{ color:var(--ok); } .tj-say .is-bad{ color:var(--bad); }

/* ---------------- RADAR ---------------- */
.rd-wrap{ display:grid; grid-template-columns:minmax(0,1.1fr) minmax(240px,.9fr); gap:var(--s5) var(--s6); align-items:center; }
.rd-svg{ display:block; width:100%; max-width:540px; height:auto; margin:0 auto; overflow:visible; }
.rd-grid{ fill:none; stroke:var(--line-2); stroke-width:1; }
.rd-axis{ stroke:var(--line-2); stroke-width:1; }
.rd-target{ fill:none; stroke:var(--ink-dim); stroke-width:2; stroke-dasharray:6 5; }
.rd-shape{ fill:var(--tint-2); stroke:var(--accent); stroke-width:3; stroke-linejoin:round; transform-box:view-box; transform-origin:280px 280px; }
.rd-pt{ fill:var(--surface-1); stroke:var(--accent); stroke-width:3; transform-box:fill-box; transform-origin:center; }
.rd-pt.is-bad{ stroke:var(--bad); } .rd-pt.is-warn{ stroke:var(--warn); } .rd-pt.is-ok{ stroke:var(--ok); }
.rd-label{ fill:var(--ink); font-size:var(--fs-base); font-weight:600; }
.rd-num,.rd-k{ display:none; }
.rd-num circle{ fill:var(--surface-1); stroke:var(--ink-dim); stroke-width:2; }
.rd-num text{ fill:var(--ink); font:600 26px var(--font-mono)!important; }
.rd-k{ place-items:center; width:20px; height:20px; margin-right:var(--s2); border-radius:50%; box-shadow:inset 0 0 0 1.5px var(--ink-dim); font:600 var(--fs-micro) var(--font-mono); }
.rd-list{ list-style:none; margin:0; padding:0; display:grid; gap:var(--s3); }
.rd-list li{ display:grid; grid-template-columns:minmax(0,1fr) auto; gap:2px var(--s3); padding-left:var(--s3); border-left:3px solid var(--accent); }
.rd-list .is-ok{ border-left-color:var(--ok); } .rd-list .is-warn{ border-left-color:var(--warn); } .rd-list .is-bad{ border-left-color:var(--bad); }
.rd-l{ font-weight:600; font-size:var(--fs-sm); }
.rd-list b{ font-size:var(--fs-lg); font-weight:500; text-align:right; }
.rd-t{ grid-column:1/-1; color:var(--ink-dim); font-size:var(--fs-micro); }
.rd-t em{ font-style:normal; font-weight:600; }
.rd-list .is-ok em{ color:var(--ok); } .rd-list .is-warn em{ color:var(--warn); } .rd-list .is-bad em{ color:var(--bad); }

/* ---------------- SANKEY ---------------- */
.sk-svg{ display:block; width:100%; min-width:900px; height:auto; overflow:visible; }
.sk-head{ fill:var(--ink-dim); font:500 var(--fs-micro) var(--font-mono)!important; }
.sk-link{ fill:none; stroke:var(--accent); stroke-opacity:.22; transition:stroke-opacity var(--dur-base) ease; }
.sk-node rect{ fill:var(--accent); }
.sk-name{ fill:var(--ink); font-size:var(--fs-sm); font-weight:600; }
.sk-v-inline{ fill:var(--ink-dim); font:500 var(--fs-micro) var(--font-mono); }
.sk-v{ fill:var(--ink-dim); font:500 var(--fs-micro) var(--font-mono)!important; }
.sk-name--mid{ paint-order:stroke; stroke:var(--surface-1); stroke-width:5px; stroke-linejoin:round; }
.vz-sankey.is-hl .sk-link{ stroke-opacity:.07; }
.vz-sankey.is-hl .sk-link.is-on{ stroke-opacity:.55; }
.vz-sankey.is-hl .sk-node:not(.is-on) rect{ opacity:.55; }

/* ---------------- CHIP ---------------- */
.cp-die{ position:relative; padding:28px; border-radius:var(--r); background:var(--die-bg); box-shadow:inset 0 0 0 1px var(--die-edge),var(--shadow-2); }
.cp-pins{ position:absolute; pointer-events:none; opacity:.7; }
.cp-pins--t,.cp-pins--b{ left:40px; right:40px; height:10px; background:repeating-linear-gradient(90deg,var(--die-pin) 0 6px,transparent 6px 20px); }
.cp-pins--t{ top:8px; } .cp-pins--b{ bottom:8px; }
.cp-pins--l,.cp-pins--r{ top:40px; bottom:40px; width:10px; background:repeating-linear-gradient(180deg,var(--die-pin) 0 6px,transparent 6px 20px); }
.cp-pins--l{ left:8px; } .cp-pins--r{ right:8px; }
.cp-core{ position:relative; display:grid; grid-template-columns:repeat(var(--cols),minmax(0,1fr)); grid-template-rows:repeat(var(--rows),minmax(46px,auto)); gap:14px; padding:14px; border-radius:var(--r-sm); box-shadow:inset 0 0 0 1px var(--die-edge);
  background-image:linear-gradient(var(--die-edge) 1px,transparent 1px),linear-gradient(90deg,var(--die-edge) 1px,transparent 1px); background-size:24px 24px; background-position:-1px -1px; }
.cp-core::before{ content:''; position:absolute; inset:0; border-radius:inherit; background:var(--die-bg); opacity:.82; pointer-events:none; }
.cp-traces{ position:absolute; inset:14px; width:calc(100% - 28px); height:calc(100% - 28px); overflow:visible; pointer-events:none; }
.cp-trace{ fill:none; stroke:var(--die-trace); stroke-width:3; opacity:.55; vector-effect:non-scaling-stroke; }
.cp-signal{ fill:none; stroke:var(--die-ink); stroke-width:3; stroke-linecap:round; stroke-dasharray:.25 12; vector-effect:non-scaling-stroke; opacity:0; }
.cp-block{ position:relative; display:flex; flex-direction:column; justify-content:space-between; gap:var(--s1); padding:var(--s3); border-radius:6px; background:var(--die-block); box-shadow:inset 0 0 0 1px var(--die-edge); color:var(--die-ink); min-width:0; }
.cp-block .cp-l{ font-size:var(--fs-sm); font-weight:600; color:var(--die-ink); }
.cp-block .fig{ font-size:var(--fs-xl); color:var(--die-ink); }
.cp-block small{ font-size:var(--fs-micro); color:var(--die-dim); line-height:1.35; }
.cp-block.cp-hub{ box-shadow:inset 0 0 0 1.5px var(--die-trace),0 0 24px color-mix(in oklab,var(--die-trace) 25%,transparent); }
.cp-block.is-warn{ box-shadow:inset 0 0 0 1.5px var(--warn); }
.cp-block.cp-io{ background:var(--die-bg); box-shadow:inset 0 0 0 1px var(--die-edge); }
.cp-etch{ position:absolute; right:18px; bottom:12px; z-index:1; font:500 var(--fs-micro) var(--font-mono); color:var(--die-dim); opacity:.8; }

/* ---------------- STAIRS ---------------- */
.st-row{ display:grid; grid-template-columns:repeat(var(--n),minmax(0,1fr)); gap:var(--s2); align-items:end; height:340px; }
.st-step{ position:relative; display:flex; flex-direction:column; justify-content:flex-end; height:100%; min-width:0; }
.st-dots{ display:flex; flex-wrap:wrap-reverse; gap:5px; align-content:flex-start; padding:0 var(--s1) var(--s2); }
.st-dots i{ width:11px; height:11px; border-radius:50%; background:var(--accent); box-shadow:0 0 0 2px var(--surface-1); transform-origin:center; }
.st-riser{ height:calc(var(--h) * .62); min-height:76px; display:flex; flex-direction:column; justify-content:flex-start; gap:2px; padding:var(--s2) var(--s3); border-radius:var(--r-sm) var(--r-sm) 0 0;
  background:linear-gradient(180deg,var(--tint-2),var(--tint)); box-shadow:inset 0 2px 0 var(--accent); transform-origin:bottom; }
.st-riser b{ font-size:var(--fs-xl); font-weight:500; }
.st-riser small{ font-size:var(--fs-micro); color:var(--ink-dim); font-family:var(--font-mono); }
.st-name{ display:flex; gap:var(--s2); align-items:flex-start; min-height:52px; overflow-wrap:anywhere; hyphens:auto; padding-top:var(--s2); font-size:var(--fs-sm); font-weight:600; line-height:1.3; border-top:2px solid var(--line-2); }
.st-short{ display:none; }
.st-step.is-warn .st-dots i{ background:var(--warn); } .st-step.is-warn .st-riser b{ color:var(--warn); } .st-step.is-warn .st-name{ border-top-color:var(--warn); }
.st-step.is-ok .st-dots i{ background:var(--ok); } .st-step.is-ok .st-riser b{ color:var(--ok); } .st-step.is-ok .st-name{ border-top-color:var(--ok); }
.st-step.is-bad .st-dots i{ background:var(--bad); } .st-step.is-bad .st-riser b{ color:var(--bad); } .st-step.is-bad .st-name{ border-top-color:var(--bad); }
.st-n{ flex:none; display:grid; place-items:center; width:20px; height:20px; border-radius:50%; background:var(--surface-3); font:600 var(--fs-micro) var(--font-mono); }

/* ---------------- MATRIX ---------------- */
.mx-wrap{ display:grid; grid-template-columns:minmax(0,1fr) minmax(260px,1fr); gap:var(--s5) var(--s6); align-items:start; }
.mx-plot{ display:grid; grid-template-columns:22px auto minmax(0,1fr); grid-template-rows:minmax(0,1fr) auto auto; gap:var(--s2); }
.mx-yl{ grid-row:1; grid-column:1; writing-mode:vertical-rl; transform:rotate(180deg); text-align:center; font-size:var(--fs-sm); font-weight:600; color:var(--ink-dim); }
.mx-yt{ grid-row:1; grid-column:2; display:grid; font-size:var(--fs-micro); color:var(--ink-dim); text-align:right; }
.mx-yt span{ display:flex; align-items:center; justify-content:flex-end; }
.mx-grid{ grid-row:1; grid-column:3; display:grid; grid-template-columns:repeat(var(--nx),minmax(0,1fr)); grid-template-rows:repeat(var(--ny),minmax(52px,1fr)); gap:4px; }
.mx-cell{ display:flex; flex-wrap:wrap; align-content:center; justify-content:center; gap:4px; padding:4px; border-radius:6px; background:var(--surface-2); }
.mx-cell.z-warn{ background:var(--warn-tint); } .mx-cell.z-bad{ background:var(--bad-tint); }
.mx-xt{ grid-row:2; grid-column:3; display:grid; grid-template-columns:repeat(var(--nx),minmax(0,1fr)); font-size:var(--fs-micro); color:var(--ink-dim); text-align:center; }
.mx-xl{ grid-row:3; grid-column:3; text-align:center; font-size:var(--fs-sm); font-weight:600; color:var(--ink-dim); }
.mx-dot{ display:grid; place-items:center; width:30px; height:30px; border:0; border-radius:50%; background:var(--surface-1); color:var(--ink); font:600 var(--fs-sm) var(--font-mono); box-shadow:inset 0 0 0 2.5px var(--accent),var(--shadow-1); cursor:pointer; }
.mx-dot.is-bad{ box-shadow:inset 0 0 0 2.5px var(--bad),var(--shadow-1); } .mx-dot.is-warn{ box-shadow:inset 0 0 0 2.5px var(--warn),var(--shadow-1); } .mx-dot.is-ok{ box-shadow:inset 0 0 0 2.5px var(--ok),var(--shadow-1); }
.mx-list{ list-style:none; margin:0; padding:0; display:grid; gap:var(--s2); }
.mx-list li{ display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:var(--s3); align-items:start; padding:var(--s2) var(--s3); border-radius:var(--r-sm); font-size:var(--fs-sm); }
.mx-list li>b{ display:grid; place-items:center; width:26px; height:26px; border-radius:50%; font-family:var(--font-mono); box-shadow:inset 0 0 0 2px var(--accent); }
.mx-list .is-bad>b{ box-shadow:inset 0 0 0 2px var(--bad); } .mx-list .is-warn>b{ box-shadow:inset 0 0 0 2px var(--warn); } .mx-list .is-ok>b{ box-shadow:inset 0 0 0 2px var(--ok); }
.mx-l{ display:grid; gap:2px; font-weight:600; } .mx-l small{ font-weight:400; color:var(--ink-dim); font-size:var(--fs-micro); line-height:1.4; }
.mx-list .num{ font-weight:500; white-space:nowrap; }
.vz-matrix.is-hl .mx-dot:not(.is-on){ opacity:var(--vz-dim); }
.vz-matrix.is-hl .mx-list li.is-on{ background:var(--tint); }

/* ---------------- WATERFALL ---------------- */
.wf-row{ display:grid; grid-template-columns:repeat(var(--n),minmax(0,1fr)); gap:var(--s3); }
.wf-col{ display:grid; grid-template-rows:auto 220px auto; gap:var(--s2); min-width:0; text-align:center; }
.wf-v{ font-size:var(--fs-sm); font-weight:500; }
.wf-plot{ position:relative; border-bottom:1.5px solid var(--line-2); }
.wf-bar{ position:absolute; left:14%; right:14%; border-radius:4px; background:var(--accent); transform-origin:bottom; }
.wf-bar.wf-down{ background:var(--surface-3); box-shadow:inset 0 0 0 1.5px var(--ink-faint); transform-origin:top; }
.wf-bar.wf-down.is-ok{ background:var(--ok-tint); box-shadow:inset 0 0 0 1.5px var(--ok); }
.wf-bar.wf-down.is-bad{ background:var(--bad-tint); box-shadow:inset 0 0 0 1.5px var(--bad); }
.wf-bar.wf-down.is-warn{ background:var(--warn-tint); box-shadow:inset 0 0 0 1.5px var(--warn); }
.wf-bar.is-end{ background:var(--warn); }
.wf-bar.is-end.is-ok{ background:var(--ok); }
.wf-link{ position:absolute; left:86%; width:calc(28% + var(--s3)); border-top:1.5px dashed var(--ink-faint); }
.wf-l{ font-size:var(--fs-sm); font-weight:600; line-height:1.3; }

/* ---------------- WAFFLE ---------------- */
.vz-waffle{ display:grid; grid-template-columns:minmax(150px,260px) minmax(0,1fr); gap:var(--s5) var(--s6); align-items:center; }
.vz-waffle .vz-read{ grid-column:1/-1; margin-top:0; }
.wf-grid{ display:grid; grid-template-columns:repeat(10,1fr); grid-template-rows:repeat(10,1fr); grid-auto-flow:column; gap:4px; aspect-ratio:1; }
.wf-grid i{ border-radius:4px; background:var(--accent); opacity:var(--o); transform-origin:center; transition:opacity var(--dur-base) ease,transform var(--dur-base) var(--ease-out); }
.wf-key{ list-style:none; margin:0; padding:0; display:grid; gap:var(--s2); }
.wf-key li{ display:grid; grid-template-columns:14px minmax(0,1fr) auto; gap:var(--s3); align-items:center; padding:var(--s2) var(--s3); border-radius:var(--r-sm); font-size:var(--fs-sm); cursor:default; }
.wf-key li>i{ width:14px; height:14px; border-radius:4px; background:var(--accent); opacity:var(--o); }
.wf-kl{ display:grid; gap:2px; font-weight:600; } .wf-kl small{ font-weight:400; color:var(--ink-dim); font-size:var(--fs-micro); }
.wf-key b{ display:grid; justify-items:end; font:500 var(--fs-xl) var(--font-mono); line-height:1.1; }
.wf-key b small{ font:400 var(--fs-micro) var(--font-body); color:var(--ink-dim); }
.vz-waffle.is-hl .wf-grid i:not(.is-on){ opacity:.12; }
.vz-waffle.is-hl .wf-key li.is-on{ background:var(--tint); }

/* ---------------- TREEMAP ---------------- */
.tm-box{ position:relative; width:100%; aspect-ratio:2.4; }
.tm-tall{ display:none; aspect-ratio:.84; }
.tm-tile{ position:absolute; padding:2px; transform-origin:center; }
.tm-tile>span{ position:absolute; inset:2px; display:flex; flex-direction:column; justify-content:space-between; gap:var(--s1); padding:var(--s2) var(--s3); overflow:hidden; border-radius:6px;
  background:color-mix(in oklab,var(--accent) calc(var(--o) * 100%),var(--surface-2)); color:var(--on-accent); }
.tm-tile.is-light>span{ color:var(--ink); }
.tm-tile b{ font-size:var(--fs-sm); font-weight:600; line-height:1.25; }
.tm-tile small{ font-size:var(--fs-sm); }
.tm-key{ background:color-mix(in oklab,var(--accent) calc(var(--o) * 100%),var(--surface-2))!important; }

/* ---------------- CARDS ---------------- */
.vz-cards{ display:grid; grid-template-columns:repeat(var(--n),minmax(0,1fr)); gap:var(--s3); }
.vz-cards .vz-read{ grid-column:1/-1; margin-top:0; }
.cd-tile{ display:grid; align-content:start; gap:var(--s1); padding:var(--s4); border-radius:var(--r-sm); background:var(--surface-2); box-shadow:inset 0 0 0 1px var(--line); min-width:0; }
.cd-ic{ width:32px; height:32px; display:grid; place-items:center; border-radius:10px; background:var(--tint); color:var(--accent); margin-bottom:var(--s2); }
.cd-ic .ic{ width:18px; height:18px; }
.cd-l{ font-size:var(--fs-sm); font-weight:600; }
.cd-tile .fig{ font-size:var(--fs-2xl); margin:var(--s1) 0; }
.cd-tile small{ font-size:var(--fs-micro); color:var(--ink-dim); line-height:1.4; }
.cd-tile .cd-src{ font-family:var(--font-mono); }
.cd-tile.is-ok .fig{ color:var(--ok); } .cd-tile.is-warn .fig{ color:var(--warn); }

/* phone-only variants, hidden on wider screens */
.sky-list,.ln-agenda{ display:none; }

/* ---------------- HOVER AND PRESS ---------------- */
@media(hover:hover) and (pointer:fine){
 .bp-station:hover{ transform:scale(1.04); }
 .bp-station:hover .bp-box{ stroke-width:2.6; }
 .bp-pipe:hover .bp-flow{ stroke-width:4.5; }
 .ob-bubble:hover{ transform:scale(1.18); }
 .ob-list li:hover{ background:var(--tint); }
 .sky-bldg:hover .sky-solid{ filter:brightness(1.08); }
 .vz-skyline svg:hover .sky-bldg:not(:hover){ opacity:.55; }
 .hm-grid i:not(.is-closed):hover{ transform:scale(1.35); box-shadow:0 0 0 2px var(--surface-1),var(--shadow-2); position:relative; z-index:1; }
 .rg:hover .rg-fill{ stroke-width:24; }
 .rg-list li:hover .rg-l{ color:var(--accent); }
 .gg-opt:hover{ transform:translateY(-2px); box-shadow:var(--shadow-1),inset 0 0 0 1px var(--accent); }
 .gg-seg:hover{ stroke-width:40; }
 .ln-item:hover{ transform:translateX(-5px) translateY(-2px) scale(1.05); }
 .ln-item.is-end:hover{ transform:translateX(calc(-100% + 5px)) translateY(-2px) scale(1.05); }
 .ln-item:hover,.ln-item.is-end:hover{ box-shadow:var(--shadow-2),inset 0 0 0 1px var(--accent); z-index:2; }
 .tj-now:hover i{ transform:scale(1.25); }
 .rd-pt:hover{ transform:scale(1.35); }
 .rd-list li:hover .rd-l{ color:var(--accent); }
 .sk-link:hover{ stroke-opacity:.55; }
 .sk-node:hover rect{ filter:brightness(1.12); }
 .cp-block:hover{ transform:translateY(-3px); box-shadow:inset 0 0 0 1.5px var(--die-trace),0 10px 28px color-mix(in oklab,var(--die-trace) 30%,transparent); }
 .st-step:hover .st-riser{ background:linear-gradient(180deg,var(--glow),var(--tint)); }
 .st-step:hover .st-dots i{ transform:scale(1.2); }
 .mx-dot:hover{ transform:scale(1.18); }
 .mx-list li:hover{ background:var(--surface-2); }
 .wf-col:hover .wf-bar{ filter:brightness(1.08); transform:scaleX(1.06); }
 .wf-key li:hover{ background:var(--surface-2); }
 .wf-grid i:hover{ transform:scale(1.2); }
 .tm-tile:hover{ transform:scale(1.02); z-index:2; }
 .cd-tile:hover{ transform:translateY(-2px); background:var(--surface-3); }
 .tm-tile:hover>span{ box-shadow:var(--shadow-2),0 0 0 2px var(--surface-1); }
}
.gg-opt:active,.mx-dot:active{ transform:scale(.97); }

/* ---------------- MOTION: each form builds once when it comes into view ---------------- */
@media(prefers-reduced-motion:no-preference){
 .vz-tip{ transition:opacity var(--dur-fast) ease; }
 .bp-station,.ob-bubble,.ob-list li,.sky-solid,.hm-grid i,.rg-fill,.gg-opt,.gg-seg,.ln-item,.rd-pt,.cp-block,.cd-tile,.st-riser,.st-dots i,.mx-dot,.mx-list li,.wf-bar,.tm-tile,.tm-tile>span{ transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-base) ease,background var(--dur-fast) ease,filter var(--dur-fast) ease,stroke-width var(--dur-fast) ease; }

 /* blueprint: ink draws on, stations settle, the revision cloud comes last */
 .vz-blueprint .bp-ink{ stroke-dasharray:1 1; stroke-dashoffset:1; }
 .vz-blueprint .bp-ink:not([pathLength]){ stroke-dasharray:none; opacity:0; }
 .vz-blueprint.in .bp-ink{ stroke-dashoffset:0; transition:stroke-dashoffset var(--dur-reveal) var(--ease-out) var(--d,0s); }
 .vz-blueprint.in .bp-ink:not([pathLength]){ opacity:1; transition:opacity var(--dur-slow) ease .9s; }
 .vz-blueprint .bp-station,.vz-blueprint .bp-dim,.vz-blueprint .bp-title,.vz-blueprint .bp-note-mark{ opacity:0; }
 .vz-blueprint .bp-station{ transform:scale(.96); }
 .vz-blueprint.in .bp-station{ opacity:1; transform:none; transition:opacity var(--dur-slow) var(--ease-out) var(--d),transform var(--dur-reveal) var(--ease-out) var(--d); }
 .vz-blueprint.in .bp-dim{ opacity:1; transition:opacity var(--dur-slow) ease var(--delay-mid); }
 .vz-blueprint.in .bp-title{ opacity:1; transition:opacity var(--dur-slow) ease var(--d); }
 .vz-blueprint.in .bp-note-mark{ opacity:1; transition:opacity var(--dur-slow) ease var(--d); }
 .vz-blueprint .bp-cloud{ stroke-dasharray:1 1; stroke-dashoffset:1; }
 .vz-blueprint.in .bp-cloud{ stroke-dashoffset:0; transition:stroke-dashoffset var(--dur-build) var(--ease-in-out) var(--delay-late); }
 .vz-blueprint.in .bp-flow{ opacity:.9; transition:opacity var(--dur-slow) ease var(--dur-sweep); animation:bp-flow var(--loop-flow) linear infinite; }
 @keyframes bp-flow{ to{ stroke-dashoffset:-26; } }
 .bp-notes li{ opacity:0; transform:translateY(6px); }
 .vz-blueprint.in .bp-notes li{ opacity:1; transform:none; transition:opacity var(--dur-slow) var(--ease-out),transform var(--dur-slow) var(--ease-out); }
 .vz-blueprint.in .bp-notes li:nth-child(1){ transition-delay:1.9s; } .vz-blueprint.in .bp-notes li:nth-child(2){ transition-delay:2s; } .vz-blueprint.in .bp-notes li:nth-child(3){ transition-delay:2.1s; }

 /* orbit: rings draw, projects travel in to their stage, the core pulses once */
 .vz-orbit .ob-ring{ opacity:0; transform:scale(.96); transform-box:fill-box; transform-origin:center; }
 .vz-orbit.in .ob-ring{ opacity:1; transform:none; transition:opacity var(--dur-reveal) ease var(--d),transform var(--dur-reveal) var(--ease-out) var(--d); }
 .vz-orbit .ob-bubble{ opacity:0; transform:translate(var(--dx),var(--dy)) scale(.96); }
 .vz-orbit.in .ob-bubble{ opacity:1; transform:none; transition:opacity var(--dur-reveal) ease var(--d),transform var(--dur-build) var(--ease-out) var(--d); }
 .vz-orbit.in .ob-core-pulse{ animation:ob-pulse var(--dur-sweep) var(--ease-out) var(--delay-late) 2; }
 @keyframes ob-pulse{ from{ opacity:.8; transform:scale(1); } to{ opacity:0; transform:scale(1.9); } }
 .vz-orbit .ob-l-bar i{ transform:scaleX(0); }
 .vz-orbit.in .ob-l-bar i{ transform:scaleX(1); transition:transform var(--dur-reveal) var(--ease-out) .4s; }

 /* skyline: pledges sketch in, then each building rises */
 .vz-skyline .sky-ghost{ stroke-dasharray:1 1; stroke-dashoffset:1; }
 .vz-skyline.in .sky-ghost{ stroke-dasharray:.012 .008; stroke-dashoffset:0; transition:stroke-dashoffset var(--dur-reveal) var(--ease-out) var(--d); }
 .vz-skyline .sky-solid{ transform:scaleY(.02); }
 .vz-skyline.in .sky-solid{ transform:none; transition:transform var(--dur-build) var(--ease-out) calc(var(--d) + .35s); }
 .vz-skyline .sky-pct,.vz-skyline .sky-of{ opacity:0; }
 .vz-skyline.in .sky-pct,.vz-skyline.in .sky-of{ opacity:1; transition:opacity var(--dur-slow) ease calc(var(--d) + var(--delay-mid)); }

 /* heatmap: days wash in diagonally */
 .vz-heatmap .hm-grid i{ opacity:0; transform:scale(.95); }
 .vz-heatmap.in .hm-grid i{ opacity:1; transform:none; transition:opacity var(--dur-slow) ease var(--d),transform var(--dur-slow) var(--ease-out) var(--d); }
 .vz-heatmap .hm-dow-bar i{ transform:scaleX(0); }
 .vz-heatmap.in .hm-dow-bar i{ transform:scaleX(1); transition:transform var(--dur-reveal) var(--ease-out) calc(.6s + var(--i) * 60ms); }
 .hm-dow{ --i:0; }

 /* rings close one by one */
 .vz-rings .rg-fill{ stroke-dashoffset:1; }
 .vz-rings.in .rg-fill{ stroke-dashoffset:calc(1 - var(--p)); transition:stroke-dashoffset var(--dur-build-l) var(--ease-out) var(--d); }

 /* gauge: segments fill, the needle sweeps; switching applicants swings it */
 .vz-gauge .gg-seg{ opacity:0; }
 .vz-gauge.in .gg-seg{ opacity:1; transition:opacity var(--dur-slow) ease var(--d),stroke-width var(--dur-fast) ease; }
 .vz-gauge.in .gg-needle{ transform:rotate(var(--rot,0deg)); transition:transform var(--dur-build) var(--spring); }

 /* lanes: items settle into their weeks */
 .vz-lanes .ln-item{ opacity:0; }
 .vz-lanes.in .ln-item{ opacity:1; transition:opacity var(--dur-slow) ease var(--d),transform var(--dur-base) var(--ease-out); }
 .vz-lanes .ln-today{ transform:scaleY(0); transform-origin:top; }
 .vz-lanes.in .ln-today{ transform:none; transition:transform var(--dur-reveal) var(--ease-out); }

 /* trajectory: the line draws, today's dot lands, the pace line follows */
 .vz-traj .tj-line,.vz-traj .tj-area{ clip-path:inset(0 100% 0 0); }
 .vz-traj.in .tj-line,.vz-traj.in .tj-area{ clip-path:inset(0 0 0 0); transition:clip-path var(--dur-build) var(--ease-out),opacity var(--dur-reveal) ease; }
 .vz-traj .tj-proj,.vz-traj .tj-now,.vz-traj .tj-lab--end{ opacity:0; }
 .vz-traj.in .tj-now{ opacity:1; transition:opacity var(--dur-slow) ease var(--delay-mid); }
 .vz-traj.in .tj-proj,.vz-traj.in .tj-lab--end{ opacity:1; transition:opacity var(--dur-reveal) ease var(--dur-build-l); }
 .vz-traj.in .tj-now i{ animation:tj-land var(--dur-build) var(--ease-out) var(--dur-build); }
 @keyframes tj-land{ 0%{ box-shadow:0 0 0 0 var(--glow); } 100%{ box-shadow:0 0 0 18px transparent; } }

 /* radar: the shape opens from the centre */
 .vz-radar .rd-shape{ transform:scale(.2); opacity:0; }
 .vz-radar.in .rd-shape{ transform:none; opacity:1; transition:transform var(--dur-build) var(--ease-out) .2s,opacity var(--dur-slow) ease .2s; }
 .vz-radar .rd-pt{ opacity:0; }
 .vz-radar.in .rd-pt{ opacity:1; transition:opacity var(--dur-slow) ease calc(var(--d) + .6s),transform var(--dur-base) var(--ease-out); }

 /* sankey: money flows left to right, column by column */
 .vz-sankey .sk-link{ clip-path:inset(0 100% 0 0); }
 .vz-sankey.in .sk-link{ clip-path:inset(0 0 0 0); transition:clip-path var(--dur-build) var(--ease-out) var(--d),stroke-opacity var(--dur-base) ease; }
 .vz-sankey .sk-node{ opacity:0; }
 .vz-sankey.in .sk-node{ opacity:1; transition:opacity var(--dur-slow) ease var(--d); }

 /* chip: blocks light up, then signals run the traces */
 .vz-chip .cp-block{ opacity:0; transform:scale(.96); }
 .vz-chip.in .cp-block{ opacity:1; transform:none; transition:opacity var(--dur-slow) ease var(--d),transform var(--dur-reveal) var(--ease-out) var(--d); }
 .vz-chip.in .cp-signal{ opacity:.9; animation:cp-run var(--ambient-a) linear infinite; animation-delay:calc(var(--d) + 1.2s); }
 @keyframes cp-run{ from{ stroke-dashoffset:12.25; } to{ stroke-dashoffset:-49; } }

 /* stairs: steps rise, dots pop */
 .vz-stairs .st-riser{ transform:scaleY(.04); }
 .vz-stairs.in .st-riser{ transform:none; transition:transform var(--dur-reveal) var(--ease-out) calc(var(--i) * 110ms); }
 .vz-stairs .st-dots i{ opacity:0; transform:scale(.95); }
 .vz-stairs.in .st-dots i{ opacity:1; transform:none; transition:opacity var(--dur-base) ease calc(.5s + var(--i) * 110ms + var(--k) * 30ms),transform var(--dur-base) var(--ease-out) calc(.5s + var(--i) * 110ms + var(--k) * 30ms); }

 /* matrix: cells tint in, risks drop onto them */
 .vz-matrix .mx-cell{ opacity:0; }
 .vz-matrix.in .mx-cell{ opacity:1; transition:opacity var(--dur-slow) ease var(--d); }
 .vz-matrix .mx-dot{ opacity:0; transform:translateY(-8px); }
 .vz-matrix.in .mx-dot{ opacity:1; transform:none; transition:opacity var(--dur-slow) ease .5s,transform var(--dur-slow) var(--ease-out) .5s; }

 /* waterfall: each step follows the last */
 .vz-waterfall .wf-bar{ transform:scaleY(0.02); }
 .vz-waterfall.in .wf-bar{ transform:none; transition:transform var(--dur-reveal) var(--ease-out) calc(var(--i) * 140ms); }
 .wf-col{ --i:0; }

 /* waffle: squares fill in reading order */
 .vz-waffle .wf-grid i{ transform:scale(.95); opacity:0; }
 .vz-waffle.in .wf-grid i{ transform:none; opacity:var(--o); transition:transform var(--dur-slow) var(--ease-out) var(--d),opacity var(--dur-slow) ease var(--d); }
 .vz-waffle.is-hl .wf-grid i:not(.is-on){ opacity:.12; transition-delay:0s; }

 .vz-cards .cd-tile{ opacity:0; transform:translateY(6px); }
 .vz-cards.in .cd-tile{ opacity:1; transform:none; transition:opacity var(--dur-slow) ease calc(var(--i) * 60ms),transform var(--dur-reveal) var(--ease-out) calc(var(--i) * 60ms); }
 /* treemap: tiles open */
 .vz-treemap .tm-tile>span{ opacity:0; transform:scale(.96); }
 .vz-treemap.in .tm-tile>span{ opacity:1; transform:none; transition:opacity var(--dur-slow) ease var(--d),transform var(--dur-reveal) var(--ease-out) var(--d); }
}
.vz.no-build,.vz.no-build *{ transition-duration:0s!important; transition-delay:0s!important; }
.vz.no-build .ob-core-pulse,.vz.no-build .tj-now i{ animation:none!important; }
.motion-paused .bp-flow,.motion-paused .cp-signal{ animation-play-state:paused; }
@media(prefers-reduced-motion:reduce){
 .vz *{ animation:none!important; }
 .gg-needle{ transform:rotate(var(--rot,0deg)); }
}

/* ---------------- RESPONSIVE ---------------- */
@media(max-width:1100px){
 .vz-orbit,.rd-wrap,.mx-wrap{ grid-template-columns:1fr; }
 .hm-body{ grid-template-columns:1fr; gap:var(--s4); }
 .hm-side{ grid-template-columns:repeat(5,minmax(0,1fr)); gap:var(--s2); }
 .hm-side-t{ grid-column:1/-1; }
 .hm-dow{ grid-template-columns:1fr; text-align:center; gap:2px; } .hm-dow b{ text-align:center; }
 .vz-gauge{ grid-template-columns:1fr; }
 .gg-pick{ grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); }
}
@media(max-width:700px){
 .gg-main{ grid-template-columns:1fr; }
 .vz-rings{ grid-template-columns:1fr; justify-items:center; } .rg-list{ width:100%; }
 .vz-waffle{ grid-template-columns:1fr; } .wf-grid{ max-width:300px; width:100%; margin:0 auto; }
 .wf-row{ gap:var(--s1); } .wf-col{ grid-template-rows:auto 180px auto; } .wf-l{ font-size:var(--fs-micro); } .wf-v{ font-size:var(--fs-micro); }
}
@media(max-width:600px){
 .vz-cards{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--s2); } .cd-tile{ padding:var(--s3); } .cd-tile .fig{ font-size:var(--fs-xl); }
 .sky-svg{ display:none; }
 .sky-list{ display:grid; gap:var(--s3); list-style:none; margin:0; padding:0; }
 .sky-list li{ display:grid; grid-template-columns:minmax(0,1fr) auto; gap:var(--s1) var(--s3); align-items:center; }
 .sl-name{ font-weight:600; font-size:var(--fs-sm); }
 .sl-pct{ font-size:var(--fs-lg); font-weight:500; }
 .sky-list .is-ok .sl-pct{ color:var(--ok); } .sky-list .is-warn .sl-pct{ color:var(--warn); } .sky-list .is-bad .sl-pct{ color:var(--bad); }
 .sl-bldg{ grid-column:1/-1; position:relative; height:22px; width:calc(var(--p) * 100%); border-radius:4px; box-shadow:inset 0 0 0 1.5px var(--ink-dim); background:repeating-linear-gradient(90deg,transparent 0 9px,var(--line) 9px 10px); }
 .sl-bldg i{ position:absolute; inset:0 auto 0 0; width:calc(var(--v) * 100%); border-radius:4px 0 0 4px; background:var(--sky-front); box-shadow:inset 0 -5px 0 var(--sky-side); transform-origin:left; }
 .sky-list small{ grid-column:1/-1; font:400 var(--fs-micro) var(--font-mono); color:var(--ink-dim); }
 .ln-scroll{ display:none; }
 .ln-agenda{ display:grid; gap:var(--s4); }
 .ln-agenda h3{ font-size:var(--fs-sm); font-weight:600; margin:0 0 var(--s2); }
 .ln-agenda ol{ list-style:none; margin:0; padding:0; display:grid; gap:var(--s1); }
 .ln-agenda li{ display:grid; grid-template-columns:60px minmax(0,1fr); gap:var(--s3); align-items:baseline; padding:var(--s2) var(--s3); border-radius:var(--r-sm); background:var(--surface-2); font-size:var(--fs-sm); }
 .ln-agenda li .num{ color:var(--ink-dim); font-size:var(--fs-micro); }
 .ln-agenda li.is-warn{ box-shadow:inset 3px 0 0 var(--warn); }
 .ln-ag-dates li{ background:transparent; box-shadow:inset 0 0 0 1px var(--line-2); }
 .tj-phases{ position:static; height:auto; display:flex; flex-wrap:wrap; gap:var(--s2); margin-right:0; }
 .tj-phases span{ position:static; width:auto!important; padding:var(--s1) var(--s3); min-height:28px; }
 .gg-ceil-l{ font-size:20px; } .gg-read .fig{ font-size:var(--fs-xl); }
 .ob-ringlabel{ font-size:30px!important; stroke-width:8px; } .ob-bubble text{ font-size:22px!important; } .ob-core-l{ font-size:20px; } .ob-core-v{ font-size:44px!important; }
 .bp-svg.vz-wide{ display:none; } .bp-svg.vz-tall{ display:block; }
 .bp-sheet{ padding:var(--s2); }
 .ob-stage{ overflow:hidden; } .ob-svg{ width:114.3%; max-width:none; margin-left:-7.14%; } .ob-sector{ display:none; } .ob-ringlabel{ font-size:var(--fs-base)!important; } .ob-bubble text{ font-size:var(--fs-lg)!important; }
 .tm-wide{ display:none; } .tm-tall{ display:block; }
 .tj-chart,.tj-axis,.tj-phases{ margin-right:64px; } .tj-lab--target{ right:-64px; white-space:normal; width:60px; line-height:1.2; }
 .tj-chart{ height:220px; } .tj-axis span:nth-child(even),.tj-axis span:first-child{ display:none; }
 .rd-label{ display:none; } .rd-num{ display:inline; } .rd-k{ display:inline-grid; }
 .ln-head,.ln-row{ grid-template-columns:112px minmax(0,1fr); } .ln-overlay{ left:112px; }
 .cp-core{ grid-template-columns:repeat(2,minmax(0,1fr)); grid-template-rows:none; grid-auto-rows:minmax(80px,auto); }
 .cp-block{ grid-column:auto!important; grid-row:auto!important; }
 .cp-block.cp-hub{ grid-column:1 / -1!important; }
 .cp-traces{ display:none; } .cp-die{ padding:22px; }
 .st-row{ height:300px; gap:var(--s1); } .st-riser{ padding:var(--s2); } .st-riser b{ font-size:var(--fs-lg); } .st-name{ font-size:var(--fs-micro); min-height:64px; } .st-n{ display:none; } .st-full{ display:none; } .st-short{ display:inline; } .st-dots i{ width:7px; height:7px; } .st-dots{ gap:3px; }
 .mx-grid{ grid-template-rows:repeat(var(--ny),minmax(44px,1fr)); } .mx-dot{ width:26px; height:26px; }
}
