/* PlanSift viz components (web/viz/*.js). Everything is scoped under .pv. Tokens read the host's variables (web/css/app.css) and fall
   back to the validated palette of the traceability spec (7.1), so the components also work stand-alone (web/viz/gallery.html).
   Light + dark: prefers-color-scheme, or the host's data-theme attribute on <html>. No inline styles are needed (CSP style-src 'self'). */
.pv{
  --pv-font:var(--font,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif);
  --pv-mono:var(--mono,ui-monospace,SFMono-Regular,Menlo,Consolas,monospace);
  --pv-surface:var(--surface,#ffffff); --pv-surface-2:var(--surface-2,#f4f6f9); --pv-surface-3:var(--surface-3,#e9edf2);
  --pv-ink:var(--ink,#161b22); --pv-ink-2:var(--ink-2,#444c59); --pv-ink-3:var(--ink-3,#5d6673); --pv-line:var(--line,#cfd5de); --pv-line-2:var(--line-2,#e2e6ec);
  --pv-focus:var(--focus,#1b46c0); --pv-shadow:var(--shadow,0 1px 2px rgba(15,23,42,.08),0 6px 18px rgba(15,23,42,.12));
  --pv-brand:#4338ca; --pv-brand-bg:#e0e7ff; --pv-brand-ink:#3730a3; --pv-evidence:#f59e0b; --pv-evidence-bg:#fef3c7; --pv-evidence-ink:#1e1b4b;
  --pv-ok:var(--ok,#2ba16f); --pv-ok-bg:var(--ok-bg,#e6f4ee); --pv-ok-ink:var(--ok-ink,#006c41);
  --pv-verify:var(--verify,#b27923); --pv-verify-bg:var(--verify-bg,#f6efe5); --pv-verify-ink:var(--verify-ink,#865400);
  --pv-alarm:var(--alarm,#b7282b); --pv-alarm-bg:var(--alarm-bg,#f6e5e6); --pv-alarm-ink:var(--alarm-ink,#a72729);
  --pv-conflict:var(--conflict,#772393); --pv-conflict-bg:var(--conflict-bg,#efe5f2); --pv-conflict-ink:var(--conflict-ink,#742a8e);
  --pv-assumed:var(--assumed,#c56db2); --pv-assumed-bg:var(--assumed-bg,#f8edf6); --pv-assumed-ink:var(--assumed-ink,#8e417e);
  --pv-nf:var(--nf,#6b7380); --pv-nf-bg:var(--nf-bg,#edeef0); --pv-nf-ink:var(--nf-ink,#555c68);
  --pv-d0:#d7af83; --pv-d1:#c59254; --pv-d2:#b07521; --pv-d3:#995a00;
  --pv-m1:#3730a3; --pv-m2:#6366f1; --pv-m3:#a5b4fc;
  font:13px/1.4 var(--pv-font); color:var(--pv-ink); -webkit-font-smoothing:antialiased; box-sizing:border-box;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .pv{
  --pv-surface:var(--surface,#161b22); --pv-surface-2:var(--surface-2,#1c232c); --pv-surface-3:var(--surface-3,#242d38);
  --pv-ink:var(--ink,#e8edf3); --pv-ink-2:var(--ink-2,#b9c2cf); --pv-ink-3:var(--ink-3,#97a3b3); --pv-line:var(--line,#323c49); --pv-line-2:var(--line-2,#262f3a);
  --pv-focus:var(--focus,#8fb0ff); --pv-shadow:var(--shadow,0 1px 2px rgba(0,0,0,.4),0 6px 20px rgba(0,0,0,.45));
  --pv-brand:#818cf8; --pv-brand-bg:#272a5c; --pv-brand-ink:#c7d2fe; --pv-evidence:#fbbf24; --pv-evidence-bg:#3d3113; --pv-evidence-ink:#1e1b4b;
  --pv-ok:var(--ok,#37ad67); --pv-ok-bg:var(--ok-bg,#1d3b31); --pv-ok-ink:var(--ok-ink,#5fc583);
  --pv-verify:var(--verify,#ca8402); --pv-verify-bg:var(--verify-bg,#3e321b); --pv-verify-ink:var(--verify-ink,#e4a247);
  --pv-alarm:var(--alarm,#e5533a); --pv-alarm-bg:var(--alarm-bg,#3f211b); --pv-alarm-ink:var(--alarm-ink,#ff7955);
  --pv-conflict:var(--conflict,#9d7fe0); --pv-conflict-bg:var(--conflict-bg,#2d2a43); --pv-conflict-ink:var(--conflict-ink,#b29af0);
  --pv-assumed:var(--assumed,#e055ab); --pv-assumed-bg:var(--assumed-bg,#3c1e3a); --pv-assumed-ink:var(--assumed-ink,#fd70c3);
  --pv-nf:var(--nf,#8d97a6); --pv-nf-bg:var(--nf-bg,#30363f); --pv-nf-ink:var(--nf-ink,#a9b3c1);
  --pv-d0:#715129; --pv-d1:#916630; --pv-d2:#b37c36; --pv-d3:#d49441;
  --pv-m1:#a5b4fc; --pv-m2:#6366f1; --pv-m3:#3f3f8f;
}}
:root[data-theme="dark"] .pv{
  --pv-surface:var(--surface,#161b22); --pv-surface-2:var(--surface-2,#1c232c); --pv-surface-3:var(--surface-3,#242d38);
  --pv-ink:var(--ink,#e8edf3); --pv-ink-2:var(--ink-2,#b9c2cf); --pv-ink-3:var(--ink-3,#97a3b3); --pv-line:var(--line,#323c49); --pv-line-2:var(--line-2,#262f3a);
  --pv-focus:var(--focus,#8fb0ff); --pv-shadow:var(--shadow,0 1px 2px rgba(0,0,0,.4),0 6px 20px rgba(0,0,0,.45));
  --pv-brand:#818cf8; --pv-brand-bg:#272a5c; --pv-brand-ink:#c7d2fe; --pv-evidence:#fbbf24; --pv-evidence-bg:#3d3113; --pv-evidence-ink:#1e1b4b;
  --pv-ok:var(--ok,#37ad67); --pv-ok-bg:var(--ok-bg,#1d3b31); --pv-ok-ink:var(--ok-ink,#5fc583);
  --pv-verify:var(--verify,#ca8402); --pv-verify-bg:var(--verify-bg,#3e321b); --pv-verify-ink:var(--verify-ink,#e4a247);
  --pv-alarm:var(--alarm,#e5533a); --pv-alarm-bg:var(--alarm-bg,#3f211b); --pv-alarm-ink:var(--alarm-ink,#ff7955);
  --pv-conflict:var(--conflict,#9d7fe0); --pv-conflict-bg:var(--conflict-bg,#2d2a43); --pv-conflict-ink:var(--conflict-ink,#b29af0);
  --pv-assumed:var(--assumed,#e055ab); --pv-assumed-bg:var(--assumed-bg,#3c1e3a); --pv-assumed-ink:var(--assumed-ink,#fd70c3);
  --pv-nf:var(--nf,#8d97a6); --pv-nf-bg:var(--nf-bg,#30363f); --pv-nf-ink:var(--nf-ink,#a9b3c1);
  --pv-d0:#715129; --pv-d1:#916630; --pv-d2:#b37c36; --pv-d3:#d49441;
  --pv-m1:#a5b4fc; --pv-m2:#6366f1; --pv-m3:#3f3f8f;
}
.pv *,.pv *::before,.pv *::after{box-sizing:border-box}
.pv [hidden]{display:none!important}
.pv-sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.pv :focus-visible{outline:2px solid var(--pv-focus);outline-offset:2px;border-radius:4px}
.pv-muted{color:var(--pv-ink-3)}

/* ---- state colour sets: --c mark, --c-bg tint, --c-ink text on tint */
.pv-st-ok{--c:var(--pv-ok);--c-bg:var(--pv-ok-bg);--c-ink:var(--pv-ok-ink)}
.pv-st-verify{--c:var(--pv-verify);--c-bg:var(--pv-verify-bg);--c-ink:var(--pv-verify-ink)}
.pv-st-alarm{--c:var(--pv-alarm);--c-bg:var(--pv-alarm-bg);--c-ink:var(--pv-alarm-ink)}
.pv-st-conflict{--c:var(--pv-conflict);--c-bg:var(--pv-conflict-bg);--c-ink:var(--pv-conflict-ink)}
.pv-st-assumed{--c:var(--pv-assumed);--c-bg:var(--pv-assumed-bg);--c-ink:var(--pv-assumed-ink)}
.pv-st-not_found{--c:var(--pv-nf);--c-bg:var(--pv-nf-bg);--c-ink:var(--pv-nf-ink)}

/* ---- glyphs (status silhouettes, method marks) */
.pv-gl-s{fill:var(--c,var(--pv-ink-3))}
.pv-gl-m{fill:none;stroke:var(--pv-surface);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.pv-gl-o{fill:var(--pv-surface);stroke:var(--c,var(--pv-ink-3));stroke-width:1.5}
.pv-gl-dot{stroke-dasharray:1.4 2.3;stroke-linecap:round}
.pv-gl-dash{stroke-dasharray:3.3 2.2}
.pv-gl-q{fill:none;stroke:var(--c-ink,var(--pv-ink-2));stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.pv-mg{fill:none;stroke:var(--pv-ink-3);stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.pv-mg-dot{stroke-dasharray:1.5 2.2}
.pv-ic{flex:none;vertical-align:-3px}
.pv-ic-s{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

/* ---- chips, buttons */
.pv-chip{display:inline-flex;align-items:center;gap:5px;padding:1px 8px 1px 5px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;
  background:var(--c-bg,var(--pv-surface-3));color:var(--c-ink,var(--pv-ink-2));border:1px solid color-mix(in srgb,var(--c,var(--pv-line)) 40%,transparent)}
.pv-chip .pv-ic{width:13px;height:13px}
.pv-chip-n{padding-left:8px}
.pv-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 9px;border:1px solid var(--pv-line);border-radius:6px;background:var(--pv-surface);color:var(--pv-ink-2);
  font:500 12.5px var(--pv-font);cursor:pointer;white-space:nowrap}
.pv-btn:hover{background:var(--pv-surface-3);color:var(--pv-ink)}
.pv-btn[aria-pressed="true"]{background:var(--pv-brand-bg);border-color:var(--pv-brand);color:var(--pv-brand-ink);font-weight:650}
.pv-seg{display:inline-flex}
.pv-seg .pv-btn{border-radius:0;margin-left:-1px}
.pv-seg .pv-btn:first-child{border-radius:6px 0 0 6px;margin-left:0}
.pv-seg .pv-btn:last-child{border-radius:0 6px 6px 0}
.pv-seg .pv-btn[aria-pressed="true"]{position:relative;z-index:1}
.pv-link{display:inline-flex;align-items:center;gap:4px;border:0;background:none;padding:2px 0;color:var(--pv-brand-ink);font:600 12.5px var(--pv-font);cursor:pointer;text-align:left}
.pv-link:hover{text-decoration:underline}
.pv-sep{width:1px;height:18px;background:var(--pv-line);margin:0 2px}
.pv-spacer{flex:1}
.pv-toolbar{display:flex;gap:6px;align-items:center;padding:6px 8px;border-bottom:1px solid var(--pv-line-2);background:var(--pv-surface-2);flex-wrap:wrap}
.pv-toolbar-count{font-size:11.5px;color:var(--pv-ink-3);font-variant-numeric:tabular-nums}

/* ================================================================= dependency graph */
.pv-graph{display:flex;flex-direction:column;height:100%;min-height:340px;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:10px;overflow:hidden;container-type:inline-size;position:relative}
.pv-graph-body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(250px,300px)}
.pv-graph-body>.pv-stage:only-child{grid-column:1/-1}
@container (max-width:700px){.pv-graph-body{grid-template-columns:1fr;grid-template-rows:minmax(260px,1fr) minmax(0,auto)}.pv-explain{max-height:220px;border-left:0!important;border-top:1px solid var(--pv-line-2)}}
.pv-stage{position:relative;overflow:hidden;min-height:0;background-color:var(--pv-surface-2);
  background-image:radial-gradient(circle,color-mix(in srgb,var(--pv-ink-3) 22%,transparent) 1px,transparent 1.2px);background-size:22px 22px}
.pv-graph-svg{display:block;width:100%;height:100%;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
.pv-graph-svg.pv-dragging{cursor:grabbing}
.pv-graph-svg:focus-visible{outline-offset:-3px}
.pv-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--pv-ink-3);font-size:14px;padding:24px;text-align:center}
.pv-note{position:absolute;left:10px;bottom:10px;padding:3px 9px;border-radius:999px;background:var(--pv-surface);border:1px solid var(--pv-line);font-size:11.5px;color:var(--pv-ink-2)}

/* nodes */
.pv-node,.pv-dot{cursor:pointer}
.pv-n-bg{fill:var(--pv-surface);stroke:color-mix(in srgb,var(--c,var(--pv-line)) 60%,var(--pv-line));stroke-width:1.2}
.pv-node:hover .pv-n-bg{stroke:var(--c,var(--pv-ink-3));stroke-width:1.8}
.pv-node.pv-st-verify .pv-n-bg,.pv-node.pv-st-alarm .pv-n-bg,.pv-node.pv-st-conflict .pv-n-bg,.pv-node.pv-st-assumed .pv-n-bg{fill:color-mix(in srgb,var(--c-bg) 62%,var(--pv-surface))}
.pv-node.pv-st-not_found .pv-n-bg{fill:var(--pv-surface-2);stroke-dasharray:5 4}
.pv-node.pv-st-assumed .pv-n-bg{stroke-dasharray:1.5 3.6;stroke-linecap:round}
.pv-n-rail{fill:var(--c,var(--pv-line))}
.pv-node.pv-st-ok .pv-n-rail{opacity:.75}
.pv-n-hatch{pointer-events:none}
.pv-hatch path{stroke:var(--c);stroke-width:1;opacity:.3;fill:none}
.pv-hatch circle{fill:var(--c);opacity:.4}
.pv-n-label{font:600 12.5px var(--pv-font);fill:var(--pv-ink)}
.pv-n-sub{font-weight:500;fill:var(--pv-ink-3)}
.pv-n-val{font:650 13px var(--pv-font);fill:var(--pv-ink);font-variant-numeric:tabular-nums lining-nums}
.pv-n-meta{font:11px var(--pv-font);fill:var(--pv-ink-3)}
.pv-n-partial{fill:none;stroke:var(--pv-verify);stroke-width:3;stroke-dasharray:3 3}
.pv-role-differs,.pv-role-conflict{fill:var(--pv-verify-ink);color:var(--pv-verify-ink);font-weight:650}
.pv-role-agrees{fill:var(--pv-ok-ink);color:var(--pv-ok-ink)}
/* certainty ring: arc length = confidence; calm ink when sure, doubt ramp when not (a meter never wears a state colour) */
.pv-ring-bg{fill:var(--pv-surface);stroke:var(--pv-line-2);stroke-width:3.6}
.pv-ring-fg{fill:none;stroke:var(--pv-ink-2);stroke-width:3.6}
.pv-tier1 .pv-ring-fg{stroke:var(--pv-ink-3)}
.pv-tier2 .pv-ring-fg{stroke:var(--pv-d2);stroke-width:4.6}
.pv-tier3 .pv-ring-fg{stroke:var(--pv-d3);stroke-width:5.4}
.pv-ring-none .pv-ring-bg{stroke-dasharray:3 3;stroke:var(--pv-line)}
.pv-ring-t{font:700 10.5px var(--pv-font);fill:var(--pv-ink);font-variant-numeric:tabular-nums}
.pv-ring-tb{font-size:12.5px}
/* focus, weakest chain, suspects, selection */
.pv-focus .pv-n-bg{fill:var(--pv-surface);stroke:var(--pv-brand);stroke-width:2.2}
.pv-focus .pv-n-label{font-size:14px}
.pv-focus .pv-n-val{font-size:19px;font-weight:700}
.pv-n-brackets{fill:none;stroke:var(--pv-brand);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.pv-weak:not(.pv-focus) .pv-n-bg{stroke:var(--pv-ink);stroke-width:2}
.pv-weakest:not(.pv-focus) .pv-n-bg{stroke:var(--pv-evidence);stroke-width:2.8}
.pv-flag rect{fill:var(--pv-evidence)}
.pv-flag text{font:700 10.5px var(--pv-font);fill:var(--pv-evidence-ink)}
.pv-suspect:not(.pv-focus) .pv-n-bg{stroke:var(--pv-alarm);stroke-width:2.2}
.pv-badge circle{fill:var(--pv-alarm);stroke:var(--pv-surface);stroke-width:2}
.pv-badge text{font:800 12px var(--pv-font);fill:#fff}
.pv-row .pv-badge text{font-size:10px}
.pv-sel .pv-n-bg,.pv-node.pv-sel:hover .pv-n-bg{stroke:var(--pv-brand);stroke-width:3}
/* thumbnail slot of a reading */
.pv-th-bg{fill:#fff;stroke:none}
.pv-th-paper{fill:#fff}
.pv-th-box{fill:color-mix(in srgb,var(--pv-evidence) 22%,transparent);stroke:var(--pv-evidence);stroke-width:1.5;vector-effect:non-scaling-stroke}
.pv-th-frame{fill:none;stroke:var(--pv-line);stroke-width:1}
.pv-th-has:hover .pv-th-frame{stroke:var(--pv-brand);stroke-width:2}
.pv-th-ph .pv-mg{stroke:#5d6673}
/* expanders */
.pv-exp circle{fill:var(--pv-surface);stroke:var(--pv-ink-3);stroke-width:1.3}
.pv-exp path{fill:none;stroke:var(--pv-ink-2);stroke-width:1.7;stroke-linecap:round}
.pv-exp:hover circle{fill:var(--pv-brand-bg);stroke:var(--pv-brand)}
/* clusters */
.pv-k-cluster .pv-n-bg{fill:var(--pv-surface);stroke:var(--pv-ink-3);stroke-dasharray:3 3}
.pv-k-cluster .pv-n-label{font:600 11.5px var(--pv-font);fill:var(--pv-ink-2)}
.pv-k-cluster:hover .pv-n-bg{fill:var(--pv-brand-bg);stroke:var(--pv-brand)}
.pv-cl-seg{fill:var(--c)}
/* compact rows (tall columns) */
.pv-row .pv-n-label{font:500 11.5px var(--pv-font)}
.pv-row .pv-n-val{font:600 11.5px var(--pv-font)}
.pv-n-conf{font:700 11px var(--pv-font);fill:var(--pv-ink-2);font-variant-numeric:tabular-nums}
.pv-n-conf.pv-tier2{fill:var(--pv-d2)} .pv-n-conf.pv-tier3{fill:var(--pv-d3)}
/* rule gauge */
.pv-gauge-track{fill:var(--pv-line)}
.pv-gauge-band{fill:color-mix(in srgb,var(--pv-ok) 45%,var(--pv-surface));stroke:var(--pv-ok);stroke-width:1}
.pv-gauge-mark{fill:var(--c)}
.pv-gauge-line{stroke:var(--c);stroke-width:2;fill:none}
/* edges */
.pv-e{fill:none;stroke:var(--pv-ink-3);stroke-width:1.2;opacity:.42}
.pv-e-feeds{opacity:.6}
.pv-e-lim{stroke:var(--pv-ink-2);stroke-width:1.8;opacity:.78}
.pv-e-weak{stroke:var(--pv-ink);stroke-width:3.2;opacity:1}
.pv-e-blame{stroke:var(--pv-alarm);opacity:.9}
.pv-e-sus{stroke:var(--pv-alarm);stroke-width:2.4;opacity:.95}
.pv-e-blocked{stroke:var(--pv-alarm);stroke-width:2;stroke-dasharray:6 3;opacity:.9}
.pv-loose-h{font:650 11px var(--pv-font);letter-spacing:.04em;text-transform:uppercase;fill:var(--pv-ink-3)}
.pv-e-evidence{stroke-dasharray:5 3;opacity:.6}
.pv-e-evidence.pv-e-weak{stroke-width:2.2}
.pv-e-differs{stroke:var(--pv-verify);opacity:.95;stroke-width:1.8}
.pv-e-cluster{stroke-dasharray:2 4}
.pv-arr path{fill:var(--pv-ink-3)}
.pv-arr-blame path{fill:var(--pv-alarm)}
.pv-arr-weak path{fill:var(--pv-ink)}
.pv-hop rect{fill:var(--pv-ink)}
.pv-hop text{font:700 10.5px var(--pv-font);fill:var(--pv-surface);font-variant-numeric:tabular-nums}
.pv-has-sel .pv-e:not(.pv-e-on){opacity:.16}
.pv-e.pv-e-on{opacity:1;stroke:var(--pv-brand);stroke-width:2.4}
.pv-e-weak.pv-e-on{stroke:var(--pv-ink);stroke-width:3.4}
.pv-e-blame.pv-e-on{stroke:var(--pv-alarm)}
/* zoom levels: less text when small */
.pv-lod1 .pv-n-meta,.pv-lod1 .pv-n-mg,.pv-lod1 .pv-hop,.pv-lod1 .pv-exp{display:none}
.pv-lod2 .pv-node text,.pv-lod2 .pv-n-mg,.pv-lod2 .pv-hop,.pv-lod2 .pv-exp,.pv-lod2 .pv-gl,.pv-lod2 .pv-th,.pv-lod2 .pv-gauge,.pv-lod2 .pv-flag{display:none}
.pv-lod2 .pv-node:not(.pv-k-cluster) .pv-n-bg{fill:color-mix(in srgb,var(--c,var(--pv-line)) 45%,var(--pv-surface))}
.pv-lod2 .pv-node.pv-st-ok .pv-n-bg{fill:color-mix(in srgb,var(--c) 16%,var(--pv-surface))}
.pv-dot{fill:color-mix(in srgb,var(--c,var(--pv-line)) 70%,var(--pv-surface));stroke:none}
.pv-dot.pv-st-ok{fill:color-mix(in srgb,var(--c) 22%,var(--pv-surface))}
.pv-dot.pv-weak{stroke:var(--pv-ink);stroke-width:6}
.pv-dot.pv-suspect{stroke:var(--pv-alarm);stroke-width:8}
.pv-dot.pv-focus{fill:var(--pv-brand);stroke:var(--pv-brand);stroke-width:14}
.pv-dot.pv-sel{stroke:var(--pv-brand);stroke-width:10}
@media (prefers-reduced-motion:no-preference){.pv-nodes .pv-node{animation:pv-in .18s ease-out both}}
@keyframes pv-in{from{opacity:0}to{opacity:1}}

/* hover / selection card */
.pv-card{position:absolute;z-index:5;width:max-content;max-width:min(320px,calc(100% - 16px));padding:10px 12px;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:8px;
  box-shadow:var(--pv-shadow);pointer-events:none;font-size:12.5px}
.pv-card-head{display:flex;align-items:flex-start;gap:8px;justify-content:space-between}
.pv-card-title{font-weight:650;font-size:13.5px;overflow-wrap:anywhere}
.pv-card-sub{font-weight:500;color:var(--pv-ink-3)}
.pv-card-key{font:11px var(--pv-mono);color:var(--pv-ink-3);overflow-wrap:anywhere;margin-top:1px}
.pv-card-val{font-size:19px;font-weight:700;font-variant-numeric:tabular-nums lining-nums;margin:4px 0 2px}
.pv-card-band{font-size:12px;font-weight:500;color:var(--pv-ink-3)}
.pv-card-row{display:grid;grid-template-columns:86px 1fr;gap:8px;padding:2px 0;border-top:1px solid var(--pv-line-2)}
.pv-card-k{color:var(--pv-ink-3)}
.pv-card-v{overflow-wrap:anywhere}
.pv-card-quote .pv-card-v,.pv-card-formula .pv-card-v{font-family:var(--pv-mono);font-size:11.5px}
.pv-card-warn .pv-card-v,.pv-card-msg .pv-card-v{color:var(--pv-verify-ink)}
.pv-card-chips{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}
.pv-card-sus{margin-top:6px;padding:6px 8px;border-radius:6px;background:var(--pv-alarm-bg);color:var(--pv-alarm-ink)}
.pv-card-sus ul{margin:3px 0 0;padding-left:16px}
.pv-card-weak{margin-top:6px;padding:3px 8px;border-radius:6px;background:var(--pv-evidence-bg);color:var(--pv-ink);font-weight:650;border-left:3px solid var(--pv-evidence)}
.pv-card-hint{margin-top:6px;color:var(--pv-ink-3);font-size:11.5px}
.pv-mgi{vertical-align:-1px}

/* legend */
.pv-legend{position:absolute;left:10px;top:10px;z-index:4;max-width:min(440px,calc(100% - 20px));padding:8px 12px 10px;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:8px;box-shadow:var(--pv-shadow)}
.pv-legend-h{font:650 11px var(--pv-font);letter-spacing:.04em;text-transform:uppercase;color:var(--pv-ink-3);margin:6px 0 4px}
.pv-legend-h:first-child{margin-top:0}
.pv-legend-row{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.pv-legend-item{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--pv-ink-2)}
.pv-legend-t{font-size:11.5px;color:var(--pv-ink-3);flex:1 1 180px}
.pv-lg-line{overflow:visible}

/* explain panel */
.pv-explain{border-left:1px solid var(--pv-line-2);background:var(--pv-surface);overflow:auto;padding:12px 14px 14px;min-height:0}
.pv-explain section{padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid var(--pv-line-2)}
.pv-explain h3{margin:0;font-size:15px;font-weight:650;overflow-wrap:anywhere}
.pv-explain h4{margin:0 0 4px;font:650 11px var(--pv-font);letter-spacing:.04em;text-transform:uppercase;color:var(--pv-ink-3)}
.pv-explain p{margin:0 0 5px}
.pv-ex-kicker{font:650 11px var(--pv-font);letter-spacing:.04em;text-transform:uppercase;color:var(--pv-brand-ink)}
.pv-ex-sub{font-weight:500;color:var(--pv-ink-3)}
.pv-ex-val{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:4px}
.pv-ex-num{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums lining-nums}
.pv-ex-conf{font-size:12px;color:var(--pv-ink-2);font-variant-numeric:tabular-nums}
.pv-link-weak{margin-top:2px;padding:3px 8px;border-radius:6px;background:var(--pv-evidence-bg);color:var(--pv-ink);border-left:3px solid var(--pv-evidence)}
.pv-sus-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.pv-sus{display:grid;grid-template-columns:24px 1fr;gap:1px 8px;width:100%;text-align:left;padding:6px 8px;border:1px solid var(--pv-line);border-radius:8px;background:var(--pv-surface);color:inherit;font:inherit;cursor:pointer}
.pv-sus:hover{border-color:var(--pv-alarm);background:color-mix(in srgb,var(--pv-alarm-bg) 50%,var(--pv-surface))}
.pv-sus-rank{grid-row:1/4;align-self:start;width:22px;height:22px;border-radius:50%;background:var(--pv-alarm);color:#fff;font-weight:800;font-size:12px;display:grid;place-items:center}
.pv-sus-main{overflow-wrap:anywhere}
.pv-sus-val{font-variant-numeric:tabular-nums;color:var(--pv-ink-2)}
.pv-sus-level{font-size:11.5px;font-weight:650;color:var(--pv-alarm-ink)}
.pv-lv-mid{color:var(--pv-verify-ink)} .pv-lv-low{color:var(--pv-ink-3)}
.pv-sus-why{font-size:12px;color:var(--pv-ink-2)}
.pv-sus-plan{margin:2px 0 0 32px;font-size:12px}
.pv-impact-chips{display:flex;flex-wrap:wrap;gap:4px;margin:4px 0}
.pv-caveat{font-size:11.5px;color:var(--pv-ink-3);margin:0}

/* ================================================================= uncertainty overlay (canvas) */
.pv-overlay{display:flex;flex-direction:column;height:100%;min-height:300px;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:10px;overflow:hidden;position:relative}
.pv-ov-stage{position:relative;flex:1;min-height:0;overflow:hidden;background:var(--pv-surface-3)}
.pv-ov-paper{position:absolute;left:0;top:0;transform-origin:0 0;background:#fff;box-shadow:0 1px 8px rgba(0,0,0,.28);pointer-events:none}
.pv-ov-img{display:block;width:100%;height:100%;max-width:none;user-select:none;-webkit-user-select:none}
.pv-ov-canvas{position:absolute;inset:0;width:100%;height:100%;cursor:grab;touch-action:none}
.pv-ov-canvas.pv-ov-hit{cursor:pointer}
.pv-ov-canvas.pv-dragging{cursor:grabbing}
.pv-ov-canvas:focus-visible{outline-offset:-3px}
/* as a layer over the host's own plan viewer: no chrome, pointer events stay with the host (it forwards them: hoverAt / clickAt) */
.pv-overlay-layer{position:absolute;inset:0;height:auto;min-height:0;border:0;border-radius:0;background:none;pointer-events:none;overflow:visible}
.pv-overlay-layer .pv-ov-stage{background:none;overflow:visible}
.pv-overlay-layer .pv-ov-canvas{cursor:inherit}
.pv-ov-legend{display:grid;gap:5px;padding:8px 10px;border-top:1px solid var(--pv-line-2);background:var(--pv-surface-2);font-size:12px}
.pv-ov-lg-row{display:flex;flex-wrap:wrap;gap:5px 10px;align-items:center}
.pv-ov-lg-h{font:650 11px var(--pv-font);letter-spacing:.04em;text-transform:uppercase;color:var(--pv-ink-3)}
.pv-ov-lg-item{display:inline-flex;align-items:center;gap:5px;color:var(--pv-ink-2)}
.pv-ov-sw{border-radius:3px}
.pv-ov-lg-btn{cursor:pointer;font:600 11.5px var(--pv-font)}
.pv-ov-lg-btn[aria-pressed="false"]{opacity:.45;text-decoration:line-through}
.pv-ov-tip{max-width:min(300px,calc(100% - 12px))}

/* ================================================================= coverage + review queue */
.pv-h{margin:0;font:650 11px var(--pv-font);letter-spacing:.04em;text-transform:uppercase;color:var(--pv-ink-3)}
.pv-coverage{display:flex;flex-wrap:wrap;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:10px;overflow:hidden}
.pv-cov-chart{flex:3 1 480px;min-width:0;padding:14px 16px 12px}
.pv-cov-queue{flex:2 1 300px;min-width:0;padding:14px 16px;box-shadow:-1px -1px 0 var(--pv-line-2);max-height:560px;overflow:auto}
.pv-cov-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px}
.pv-cov-head .pv-h{flex-basis:100%}
.pv-cov-big{display:flex;align-items:baseline;gap:4px}
.pv-cov-num{font-size:30px;font-weight:750;font-variant-numeric:tabular-nums lining-nums;line-height:1.1}
.pv-cov-of{font-size:16px;color:var(--pv-ink-3);font-variant-numeric:tabular-nums}
.pv-cov-cap{font-size:12.5px;color:var(--pv-ink-2);margin-left:8px}
.pv-cov-tiers{display:flex;gap:6px;margin-left:auto}
.pv-cov-bar{display:block;margin:8px 0 8px;max-width:100%}
.pv-cov-legend{display:flex;flex-wrap:wrap;gap:5px 6px;margin-bottom:14px}
.pv-cov-lg{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--pv-line);border-radius:999px;background:var(--pv-surface);padding:2px 10px 2px 5px;font:500 12px var(--pv-font);color:var(--pv-ink-2);cursor:pointer}
.pv-cov-lg[aria-pressed="false"]{opacity:.45;text-decoration:line-through}
.pv-m-read{--mf:var(--pv-m1);--mt:var(--pv-surface);--mb:var(--pv-m1)}
.pv-m-measured{--mf:var(--pv-m2);--mt:#ffffff;--mb:var(--pv-m2)}
.pv-m-calculated{--mf:var(--pv-m3);--mt:var(--pv-ink);--mb:var(--pv-m2)}
.pv-m-assumed{--mf:var(--pv-assumed-bg);--mt:var(--pv-assumed-ink);--mb:var(--pv-assumed)}
.pv-m-conflict{--mf:var(--pv-conflict-bg);--mt:var(--pv-conflict-ink);--mb:var(--pv-conflict)}
.pv-m-not_found{--mf:var(--pv-surface);--mt:var(--pv-ink-3);--mb:var(--pv-nf)}
.pv-cov-sw{display:inline-block;width:14px;height:14px;border-radius:4px;background:var(--mf);border:1.5px solid var(--mb)}
.pv-cov-sw.pv-m-not_found{border-style:dashed}
.pv-cov-sw.pv-m-assumed{border-style:dotted}
.pv-cov-seg{fill:var(--mf);stroke:var(--mb);stroke-width:1}
.pv-cov-seg.pv-m-not_found{stroke-dasharray:3 2.5}
.pv-cov-seg-t{font:700 11px var(--pv-font);fill:var(--mt);font-variant-numeric:tabular-nums}
.pv-cov-map{display:block;max-width:100%;overflow:visible}
.pv-cov-cell{cursor:pointer}
.pv-cov-bg{fill:var(--mf);stroke:var(--mb);stroke-width:1.2}
.pv-cov-cell.pv-m-not_found .pv-cov-bg{stroke-dasharray:3 2.5}
.pv-cov-cell.pv-m-assumed .pv-cov-bg{stroke-dasharray:1.5 2.6;stroke-linecap:round}
.pv-cov-hatch{pointer-events:none}
.pv-cov-t{font:700 10.5px var(--pv-font);fill:var(--mt);font-variant-numeric:tabular-nums;pointer-events:none}
.pv-cov-track{fill:color-mix(in srgb,var(--mt) 28%,transparent)}
.pv-cov-frac{fill:var(--mt)}
.pv-cov-doubt{fill:var(--pv-d2);stroke:var(--pv-surface);stroke-width:1.5}
.pv-cov-doubt3{fill:var(--pv-d3)}
.pv-cov-cell:hover .pv-cov-bg{stroke:var(--pv-ink);stroke-width:2}
.pv-cov-cell.pv-sel .pv-cov-bg{stroke:var(--pv-evidence);stroke-width:3.2}
.pv-cov-cell.pv-dim{opacity:.16}
.pv-cov-cell:focus{outline:none}
.pv-cov-cell:focus-visible .pv-cov-bg{stroke:var(--pv-focus);stroke-width:3}
.pv-cov-sec{font:600 12.5px var(--pv-font);fill:var(--pv-ink)}
.pv-cov-sec-n{font:500 12px var(--pv-font);fill:var(--pv-ink-3);font-variant-numeric:tabular-nums}
.pv-cov-info{min-height:20px;margin-top:10px;font-size:12.5px;color:var(--pv-ink-2)}
.pv-cov-info-rv{color:var(--pv-verify-ink);font-weight:600}
.pv-cov-qn{font-variant-numeric:tabular-nums;color:var(--pv-ink-2)}
.pv-cov-clear{margin-top:6px;cursor:pointer}
.pv-rv-list{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}
.pv-rv{display:grid;grid-template-columns:24px minmax(0,1fr);gap:2px 8px;width:100%;text-align:left;padding:7px 9px;border:1px solid var(--pv-line);border-left:4px solid var(--c,var(--pv-line));border-radius:8px;
  background:var(--pv-surface);font:inherit;color:inherit;cursor:pointer}
.pv-rv:hover{background:color-mix(in srgb,var(--c-bg) 55%,var(--pv-surface))}
.pv-rv-rank{grid-row:1/3;align-self:start;width:22px;height:22px;border-radius:50%;background:var(--pv-surface-3);color:var(--pv-ink-2);font-weight:700;font-size:11.5px;display:grid;place-items:center;font-variant-numeric:tabular-nums}
.pv-rv-main{display:flex;flex-wrap:wrap;align-items:center;gap:3px 6px;min-width:0}
.pv-rv-main b{overflow-wrap:anywhere}
.pv-rv-sub{color:var(--pv-ink-3)}
.pv-rv-val{margin-left:auto;font-variant-numeric:tabular-nums lining-nums;font-weight:650}
.pv-rv-why{font-size:12px;color:var(--pv-ink-2);overflow-wrap:anywhere}

/* ================================================================= diff panel (before -> after) */
.pv-diff{background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:10px;padding:14px 16px;container-type:inline-size}
.pv-df-head{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}
.pv-df-sum{display:flex;flex-wrap:wrap;gap:6px}
.pv-df-sum .pv-chip{font-size:12.5px;padding-top:2px;padding-bottom:2px}
.pv-df-warn{margin:8px 0 0;padding:6px 10px;border-radius:6px;background:var(--pv-alarm-bg);color:var(--pv-alarm-ink);font-weight:600}
.pv-df-sec{margin-top:14px}
.pv-df-list{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:4px}
.pv-df-row,.pv-df-rule{display:grid;grid-template-columns:minmax(150px,1.5fr) minmax(190px,1.2fr) 68px 100px;align-items:center;gap:2px 12px;width:100%;text-align:left;padding:6px 10px;
  border:1px solid var(--pv-line-2);border-left:4px solid var(--c,var(--pv-line));border-radius:8px;background:var(--pv-surface);font:inherit;color:inherit;cursor:pointer}
.pv-df-rule{grid-template-columns:minmax(150px,1.5fr) minmax(120px,.7fr) minmax(70px,auto) 194px}
.pv-df-row:hover,.pv-df-rule:hover{background:var(--pv-surface-2)}
.pv-df-d1{margin-left:14px}.pv-df-d2{margin-left:28px}.pv-df-d3{margin-left:42px}.pv-df-d4{margin-left:56px}.pv-df-d5{margin-left:70px}.pv-df-d6{margin-left:84px}
.pv-df-list li{position:relative}
.pv-df-list li[class^="pv-df-d"]::before{content:"";position:absolute;left:-9px;top:-4px;height:calc(50% + 4px);width:7px;border-left:1.5px solid var(--pv-line);border-bottom:1.5px solid var(--pv-line);border-bottom-left-radius:5px}
.pv-df-row.pv-df-edited{background:color-mix(in srgb,var(--pv-brand-bg) 50%,var(--pv-surface));border-color:var(--pv-brand)}
.pv-df-name{display:flex;align-items:center;gap:6px;min-width:0}
.pv-df-name b{overflow-wrap:anywhere}
.pv-df-pen{color:var(--pv-brand-ink)}
.pv-df-sub{color:var(--pv-ink-3);white-space:nowrap}
.pv-df-val{display:flex;align-items:baseline;gap:6px;justify-content:flex-end;font-variant-numeric:tabular-nums lining-nums;white-space:nowrap}
.pv-df-old{color:var(--pv-ink-3);text-decoration:line-through;text-decoration-thickness:1px}
.pv-df-new{font-weight:700;font-size:14px}
.pv-df-gone{font-weight:600;color:var(--pv-ink-3)}
.pv-df-arrow{color:var(--pv-ink-3)}
.pv-df-delta{font:650 12px var(--pv-font);text-align:right;font-variant-numeric:tabular-nums;color:var(--pv-ink-2);white-space:nowrap}
.pv-df-chip{justify-self:start}
.pv-df-svg{display:inline-flex;justify-self:end}
.pv-df-track{stroke:var(--pv-line);stroke-width:1;fill:none}
.pv-df-axis{stroke:var(--pv-ink-3);stroke-width:1.3;fill:none}
.pv-df-fill{fill:var(--pv-brand)}
.pv-df-meta{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;font-size:12px;color:var(--pv-ink-2)}
.pv-df-meta:empty{display:none}
.pv-df-states{display:inline-flex;align-items:center;gap:4px}
.pv-df-move{stroke:var(--pv-ink-3);stroke-width:1.2;stroke-dasharray:2 2;fill:none}
.pv-df-m0{fill:var(--pv-surface);stroke:var(--pv-ink-3);stroke-width:1.3}
.pv-df-l0{stroke:var(--pv-ink-3);stroke-width:1.2;stroke-dasharray:2 2;fill:none}
.pv-df-m1{fill:var(--c)}
.pv-df-l1{stroke:var(--c);stroke-width:2.2;fill:none}
@container (max-width:640px){.pv-df-row,.pv-df-rule{grid-template-columns:minmax(0,1fr) auto}.pv-df-row .pv-df-svg,.pv-df-delta{display:none}.pv-df-rule .pv-df-svg{grid-column:1/-1;justify-self:start}}

/* ================================================================= BoQ treemap + price waterfall */
.pv-boq,.pv-wf{background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:10px;padding:14px 16px}
.pv-bq-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-bottom:10px}
.pv-bq-total{font-size:20px;font-weight:750;font-variant-numeric:tabular-nums lining-nums}
.pv-bq-wrap{min-width:0}
.pv-bq-svg,.pv-wf-svg{display:block;max-width:100%}
.pv-bq-group{fill:var(--pv-surface-2);stroke:var(--pv-line);stroke-width:1}
.pv-bq-gl{font:650 11.5px var(--pv-font);fill:var(--pv-ink-2)}
.pv-bq-gs{font:600 11.5px var(--pv-font);fill:var(--pv-ink-2);font-variant-numeric:tabular-nums}
.pv-bq-leaf{cursor:pointer}
.pv-bq-bg{stroke:var(--pv-surface);stroke-width:1}
.pv-bq-t0 .pv-bq-bg,.pv-bq-sw.pv-bq-t0{fill:color-mix(in srgb,var(--pv-d0) 38%,var(--pv-surface));background:color-mix(in srgb,var(--pv-d0) 38%,var(--pv-surface))}
.pv-bq-t1 .pv-bq-bg,.pv-bq-sw.pv-bq-t1{fill:color-mix(in srgb,var(--pv-d1) 62%,var(--pv-surface));background:color-mix(in srgb,var(--pv-d1) 62%,var(--pv-surface))}
.pv-bq-t2 .pv-bq-bg,.pv-bq-sw.pv-bq-t2{fill:var(--pv-d2);background:var(--pv-d2)}
.pv-bq-t3 .pv-bq-bg,.pv-bq-sw.pv-bq-t3{fill:var(--pv-d3);background:var(--pv-d3)}
.pv-bq-tn .pv-bq-bg{fill:var(--pv-surface);stroke:var(--pv-nf);stroke-dasharray:4 3}
.pv-bq-nr{font:600 11px var(--pv-font);fill:var(--pv-ink-2);font-variant-numeric:tabular-nums}
.pv-bq-text{font:650 12.5px var(--pv-font);fill:var(--pv-ink)}
.pv-bq-val{font:750 14px var(--pv-font);fill:var(--pv-ink);font-variant-numeric:tabular-nums lining-nums}
.pv-bq-sub{font:11px var(--pv-font);fill:var(--pv-ink-2);font-variant-numeric:tabular-nums}
.pv-bq-t2 text,.pv-bq-t3 text{fill:#ffffff}
:root[data-theme="dark"] .pv-bq-t3 text{fill:#0d1117}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .pv-bq-t3 text{fill:#0d1117}}
.pv-bq-hatch path{stroke:var(--pv-ink);stroke-width:1;opacity:.22;fill:none}
.pv-bq-as{pointer-events:none}
.pv-bq-leaf:hover .pv-bq-bg{stroke:var(--pv-ink);stroke-width:2}
.pv-bq-leaf.pv-sel .pv-bq-bg{stroke:var(--pv-brand);stroke-width:3}
.pv-bq-leaf:focus{outline:none}
.pv-bq-leaf:focus-visible .pv-bq-bg{stroke:var(--pv-focus);stroke-width:3}
.pv-bq-legend{display:flex;flex-wrap:wrap;gap:5px 10px;align-items:center;margin-top:8px;font-size:12px}
.pv-bq-sw{display:inline-block;width:16px;height:12px;border-radius:3px;border:1px solid var(--pv-line)}
.pv-bq-swas{background:repeating-linear-gradient(45deg,transparent 0 3px,color-mix(in srgb,var(--pv-ink) 28%,transparent) 3px 4px)}
.pv-bq-swnf{border:1.5px dashed var(--pv-nf);background:var(--pv-surface)}
.pv-wf-notes{display:grid;gap:4px;margin-bottom:8px}
.pv-wf-notes:empty{display:none}
.pv-wf-note{margin:0;padding:5px 10px;border-radius:6px;font-weight:600;font-size:12.5px}
.pv-wf-assumed{background:var(--pv-assumed-bg);color:var(--pv-assumed-ink);border-left:3px solid var(--pv-assumed)}
.pv-wf-incomplete{background:var(--pv-verify-bg);color:var(--pv-verify-ink);border-left:3px solid var(--pv-verify)}
.pv-wf-zero{stroke:var(--pv-line);stroke-width:1;fill:none}
.pv-wf-label{font:500 12px var(--pv-font);fill:var(--pv-ink-2)}
.pv-wf-total .pv-wf-label{font-weight:700;fill:var(--pv-ink)}
.pv-wf-val{font:600 12px var(--pv-font);fill:var(--pv-ink-2);font-variant-numeric:tabular-nums lining-nums}
.pv-wf-total .pv-wf-val{font-weight:750;fill:var(--pv-ink);font-size:12.5px}
.pv-wf-bar{fill:var(--pv-m3);stroke:var(--pv-m2);stroke-width:1}
.pv-wf-total .pv-wf-bar{fill:var(--pv-m2);stroke:var(--pv-m2)}
.pv-wf-final .pv-wf-bar{fill:var(--pv-brand);stroke:var(--pv-brand)}
.pv-wf-empty .pv-wf-val{fill:var(--pv-verify-ink);font-weight:600}
.pv-wf-whisker{stroke:var(--pv-ink);stroke-width:1.6;fill:none}
.pv-wf-link{stroke:var(--pv-ink-3);stroke-width:1;stroke-dasharray:2 2;fill:none}
.pv-wf-step{cursor:default}
.pv-ov-stack{grid-template-columns:minmax(0,1.3fr) auto}
.pv-ov-stack .pv-card-k{color:var(--pv-ink);display:flex;align-items:center;gap:5px}
.pv-ov-stack .pv-card-v{font-variant-numeric:tabular-nums;text-align:right}
.pv-root .pv-sus-rank{background:var(--pv-nf)}
.pv-root:hover{border-color:var(--pv-ink-3)!important;background:var(--pv-surface-2)!important}

/* ================================================================= semantic building graph (web/viz/building.js) */
.pv-bld{display:flex;flex-direction:column;height:100%;min-height:420px;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:10px;overflow:hidden;container-type:inline-size;position:relative}
.pv-bld-bar{row-gap:6px}
.pv-bld-grp{display:inline-flex;align-items:center;gap:6px}
.pv-bld-lab{font-size:11.5px;font-weight:600;color:var(--pv-ink-3);letter-spacing:.01em}
.pv-bld-sel{height:28px;max-width:136px;padding:0 22px 0 8px;border:1px solid var(--pv-line);border-radius:6px;background:var(--pv-surface);color:var(--pv-ink);font:500 12.5px var(--pv-font)}
.pv-bld-sel:disabled{opacity:.55}
.pv-bld-range{width:84px;accent-color:var(--pv-brand);margin:0}
.pv-bld-ico{padding:0 7px}
.pv-bld-view .pv-ic{color:var(--pv-ink-3)}
.pv-bld-view[aria-pressed="true"] .pv-ic{color:var(--pv-brand-ink)}
.pv-bld-count{display:inline-block;min-width:17px;padding:0 5px;border-radius:999px;background:var(--pv-surface-3);color:var(--pv-ink-2);font-size:10.5px;font-weight:700;line-height:17px;text-align:center;font-variant-numeric:tabular-nums}
.pv-btn[aria-pressed="true"] .pv-bld-count,.pv-bld-tab[aria-selected="true"] .pv-bld-count{background:var(--pv-brand);color:var(--pv-surface)}
.pv-bld-search{position:relative;display:inline-flex;align-items:center;color:var(--pv-ink-3)}
.pv-bld-search>.pv-ic{position:absolute;left:8px;pointer-events:none}
.pv-bld-search-in{width:150px;height:28px;padding:0 8px 0 28px;border:1px solid var(--pv-line);border-radius:6px;background:var(--pv-surface);color:var(--pv-ink);font:500 12.5px var(--pv-font)}
.pv-bld-search-in::placeholder{color:var(--pv-ink-3)}
.pv-bld-results{position:absolute;z-index:30;top:32px;right:0;width:max(100%,290px);margin:0;padding:4px;list-style:none;background:var(--pv-surface);border:1px solid var(--pv-line);border-radius:8px;box-shadow:var(--pv-shadow)}
.pv-bld-res{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 8px;padding:5px 8px;border-radius:5px;cursor:pointer;color:var(--pv-ink)}
.pv-bld-res[aria-selected="true"],.pv-bld-res:hover{background:var(--pv-brand-bg);color:var(--pv-brand-ink)}
.pv-bld-res-k{grid-row:1/3;align-self:center;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--pv-ink-3);min-width:46px}
.pv-bld-res-l{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-bld-res-s{font-size:11.5px;color:var(--pv-ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-bld-res-none{padding:6px 8px;color:var(--pv-ink-3)}
.pv-bld-body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(264px,318px)}
.pv-bld-body>.pv-bld-stage:only-child{grid-column:1/-1}
.pv-bld-stage{min-height:300px}
.pv-bld-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
.pv-bld[data-mode="plan"] .pv-bld-canvas,.pv-bld[data-mode="quantity"] .pv-bld-canvas{cursor:move}
.pv-bld-canvas.pv-hot{cursor:pointer}
.pv-bld-canvas.pv-dragging{cursor:grabbing}
.pv-bld-canvas:focus-visible{outline:2px solid var(--pv-focus);outline-offset:-3px}
.pv-bld-crumb{position:absolute;left:10px;top:8px;display:flex;align-items:center;gap:2px;max-width:calc(100% - 20px);padding:2px 4px;border-radius:999px;background:color-mix(in srgb,var(--pv-surface) 88%,transparent);border:1px solid var(--pv-line-2);backdrop-filter:blur(4px)}
.pv-bld-crumb-b{border:0;background:none;padding:2px 7px;border-radius:999px;color:var(--pv-ink-2);font:600 12px var(--pv-font);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:190px}
.pv-bld-crumb-b:hover{background:var(--pv-surface-3);color:var(--pv-ink)}
.pv-bld-crumb-b[aria-current="true"]{color:var(--pv-brand-ink);background:var(--pv-brand-bg)}
.pv-bld-crumb-sep{color:var(--pv-ink-3);font-size:12px}
.pv-bld-approx{position:absolute;left:10px;bottom:10px;width:max-content;max-width:min(430px,calc(100% - 250px));padding:5px 12px;border-radius:8px;background:var(--pv-evidence-bg);border:1px solid color-mix(in srgb,var(--pv-evidence) 55%,transparent);color:var(--pv-ink);font-size:12px;line-height:1.35;pointer-events:none}
.pv-bld-approx strong{font-weight:700}
.pv-bld-veil{position:absolute;left:10px;bottom:10px;max-width:calc(100% - 260px);padding:4px 11px;border-radius:999px;border:1px solid var(--pv-brand);background:var(--pv-brand-bg);color:var(--pv-brand-ink);font:600 12px var(--pv-font);cursor:pointer;text-align:left}
.pv-bld-hint{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);max-width:calc(100% - 420px);padding:4px 12px;border-radius:999px;background:color-mix(in srgb,var(--pv-surface) 90%,transparent);border:1px solid var(--pv-line-2);color:var(--pv-ink-3);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.pv-bld-corner{position:absolute;right:10px;bottom:10px;display:flex;align-items:flex-end;gap:8px;pointer-events:none}
.pv-bld-corner>*{pointer-events:auto}
.pv-bld-ladder{display:flex;flex-direction:column;gap:2px;padding:3px;border-radius:8px;background:color-mix(in srgb,var(--pv-surface) 92%,transparent);border:1px solid var(--pv-line);max-height:240px;overflow:auto}
.pv-bld-rung{height:22px;min-width:38px;padding:0 6px;justify-content:center;border-color:transparent;background:none;font-size:11.5px;font-weight:650;font-variant-numeric:tabular-nums}
.pv-bld-rung[aria-pressed="true"]{border-color:var(--pv-brand)}
.pv-bld-minibox{border-radius:8px;background:color-mix(in srgb,var(--pv-surface) 92%,transparent);border:1px solid var(--pv-line);overflow:hidden;box-shadow:var(--pv-shadow)}
.pv-bld-mini-cap{padding:3px 8px 0;font-size:10.5px;font-weight:700;color:var(--pv-ink-3);letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:168px}
.pv-bld-mini{display:block;width:168px;height:112px;cursor:crosshair;touch-action:none}
.pv-bld-tip{position:absolute;z-index:20;left:0;top:0;max-width:290px;padding:7px 10px;border-radius:8px;background:var(--pv-surface);border:1px solid var(--pv-line);box-shadow:var(--pv-shadow);pointer-events:none;font-size:12px;line-height:1.35}
.pv-bld-tip-t{font-weight:700;font-size:12.5px}
.pv-bld-tip-s{color:var(--pv-ink-3)}
.pv-bld-tip-v{display:flex;align-items:center;gap:6px;margin-top:3px}
.pv-bld-tip-n{margin-left:auto;padding-left:10px;font-weight:650;font-variant-numeric:tabular-nums}
.pv-bld-tip-why{margin-top:4px;padding-top:4px;border-top:1px dashed var(--pv-line);color:var(--pv-ink-2)}
.pv-bld-tip-f{display:flex;align-items:center;gap:5px;margin-top:4px;color:var(--c-ink);font-weight:600}
.pv-bld-tip-f .pv-ic{width:13px;height:13px}
.pv-bld-help{position:absolute;z-index:25;right:10px;top:8px;width:min(360px,calc(100% - 20px));padding:10px 14px 12px;border-radius:10px;background:var(--pv-surface);border:1px solid var(--pv-line);box-shadow:var(--pv-shadow)}
.pv-bld-help h3{margin:0 0 6px;font-size:13px}
.pv-bld-help dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;margin:0;font-size:12px}
.pv-bld-help dt{font-family:var(--pv-mono);font-size:11.5px;color:var(--pv-brand-ink);white-space:nowrap}
.pv-bld-help dd{margin:0;color:var(--pv-ink-2)}
.pv-bld-panel{display:flex;flex-direction:column;min-height:0;border-left:1px solid var(--pv-line-2);background:var(--pv-surface)}
.pv-bld-legend{padding:10px 12px 8px;border-bottom:1px solid var(--pv-line-2);max-height:46%;overflow:auto;flex:none}
.pv-bld-legend-float{position:absolute;left:10px;top:44px;width:230px;max-height:calc(100% - 110px);border:1px solid var(--pv-line);border-radius:8px;background:color-mix(in srgb,var(--pv-surface) 94%,transparent);box-shadow:var(--pv-shadow)}
.pv-bld-lg-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:3px}
.pv-bld-lg-h+ul+.pv-bld-lg-h,.pv-bld-lg-note+.pv-bld-lg-h{margin-top:8px}
.pv-bld-lg-t{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--pv-ink-3)}
.pv-bld-lg-u{font-size:10.5px;color:var(--pv-ink-3)}
.pv-bld-lg{list-style:none;margin:0;padding:0}
.pv-bld-lg-btn{display:flex;align-items:center;gap:8px;width:100%;padding:2.5px 4px;margin:0 -4px;border:0;border-radius:5px;background:none;color:var(--pv-ink);font:500 12.5px var(--pv-font);text-align:left;cursor:pointer}
.pv-bld-lg-btn:hover{background:var(--pv-surface-3)}
.pv-bld-lg-btn[aria-pressed="false"]{color:var(--pv-ink-3);text-decoration:line-through}
.pv-bld-lg-btn[aria-pressed="false"] .pv-bld-sw{opacity:.3}
.pv-bld-lg-l{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pv-bld-lg-n{color:var(--pv-ink-3);font-size:11.5px;font-variant-numeric:tabular-nums;white-space:nowrap}
.pv-bld-lg-note{margin:5px 0 0;font-size:11.5px;color:var(--pv-ink-3);line-height:1.35}
.pv-bld-sw{flex:none}
.pv-bld-tabs{display:flex;gap:2px;padding:6px 8px 0;border-bottom:1px solid var(--pv-line-2);flex:none}
.pv-bld-tab{display:inline-flex;align-items:center;gap:6px;padding:5px 9px 7px;border:0;border-bottom:2px solid transparent;background:none;color:var(--pv-ink-3);font:600 12.5px var(--pv-font);cursor:pointer;margin-bottom:-1px}
.pv-bld-tab:hover{color:var(--pv-ink)}
.pv-bld-tab[aria-selected="true"]{color:var(--pv-brand-ink);border-bottom-color:var(--pv-brand)}
.pv-bld-tabbody{flex:1;min-height:0;overflow:auto;padding:10px 12px 14px}
.pv-bld-tabbody>*+*{margin-top:10px}
.pv-bld-tabbody p{margin:0}
.pv-bld-tabbody h4{margin:0 0 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--pv-ink-3)}
.pv-bld-head h3{margin:1px 0 0;font-size:15.5px;line-height:1.25;font-weight:700;overflow-wrap:anywhere}
.pv-bld-kind{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--pv-ink-3)}
.pv-bld-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.pv-bld-acts{margin-top:8px}
.pv-bld-dl{margin:0;display:grid;gap:3px}
.pv-bld-kv{display:grid;grid-template-columns:104px minmax(0,1fr);gap:8px;align-items:baseline}
.pv-bld-kv dt{color:var(--pv-ink-3);font-size:12px}
.pv-bld-kv dd{margin:0;font-weight:550;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.pv-bld-kv dd>span{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 6px}
.pv-bld-kv dd>span>.pv-bld-partial{margin-left:0}
.pv-bld-q dd{display:flex;flex-direction:column}
.pv-bld-path{font-family:var(--pv-mono);font-size:11px;font-weight:400;color:var(--pv-ink-2)}
.pv-bld-origin{font-size:11px;font-weight:400;color:var(--pv-ink-3)}
.pv-bld-partial{display:inline-block;margin-left:6px;padding:0 6px;border-radius:999px;background:var(--pv-verify-bg);color:var(--pv-verify-ink);font-size:10.5px;font-weight:700;white-space:nowrap}
.pv-bld-why{padding:6px 9px;border-radius:7px;border:1px dashed var(--pv-nf);background:var(--pv-nf-bg);color:var(--pv-ink-2);font-size:12px;line-height:1.4}
.pv-bld-small{font-size:12px}
.pv-bld-list{list-style:none;margin:0;padding:0;display:grid;gap:1px}
.pv-bld-cols{grid-template-columns:1fr 1fr;column-gap:10px}
.pv-bld-ev{list-style:none;margin:0;padding:0;display:grid;gap:5px}
.pv-bld-ev .pv-link{gap:5px}
.pv-bld-quote{display:block;padding-left:21px;color:var(--pv-ink-2);font-size:12px;quotes:"„" "“"}
.pv-bld-unk{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:12px;color:var(--pv-ink-2);line-height:1.35}
.pv-bld-unk code{font-family:var(--pv-mono);font-size:11px;padding:0 4px;border-radius:4px;background:var(--pv-nf-bg);color:var(--pv-nf-ink)}
.pv-bld-findlist{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.pv-bld-find-b{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 8px;align-items:center;width:100%;padding:7px 9px;border:1px solid var(--pv-line-2);border-left:3px solid var(--c);border-radius:7px;background:var(--pv-surface);color:var(--pv-ink);font:inherit;text-align:left;cursor:pointer}
.pv-bld-find-b:hover{background:var(--pv-surface-2)}
.pv-bld-find-b[aria-pressed="true"]{background:var(--c-bg);border-color:var(--c)}
.pv-bld-find-t{font-weight:650}
.pv-bld-find-m,.pv-bld-find-n{grid-column:1/-1;font-size:12px;color:var(--pv-ink-2);line-height:1.35}
.pv-bld-find-n{color:var(--pv-ink-3);font-family:var(--pv-mono);font-size:11px}
.pv-bld-table{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}
.pv-bld-table caption{text-align:left;padding-bottom:3px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--pv-ink-3)}
.pv-bld-table th,.pv-bld-table td{padding:3px 4px;border-bottom:1px solid var(--pv-line-2);text-align:right;font-weight:500;white-space:nowrap}
.pv-bld-table thead th{font-size:11px;color:var(--pv-ink-3);font-weight:600}
.pv-bld-table th[scope="row"]{text-align:left;max-width:120px;overflow:hidden;text-overflow:ellipsis}
.pv-bld-table tr.pv-on{background:var(--pv-brand-bg)}
.pv-bld-table sup{margin-left:2px;font-size:9px;color:var(--pv-verify-ink)}
.pv-bld-part{color:var(--pv-ink-2)}
.pv-bld-selq{padding:8px 10px;border-radius:8px;background:var(--pv-surface-2);border:1px solid var(--pv-line-2)}
@container (max-width:860px){
  .pv-bld-body{grid-template-columns:1fr;grid-template-rows:minmax(300px,1fr) auto}
  .pv-bld-panel{border-left:0;border-top:1px solid var(--pv-line-2);max-height:300px}
  .pv-bld-legend{max-height:108px}
  .pv-bld-lg{display:flex;flex-wrap:wrap;gap:0 10px}
  .pv-bld-lg-btn{width:auto}
  .pv-bld-view-l{display:none}
  .pv-bld-search-in{width:150px}
}
@container (max-width:520px){
  .pv-bld-minibox{display:none}
  .pv-bld-hint{display:none}
  .pv-bld-lab{display:none}
  .pv-bld-range{width:72px}
  .pv-bld-approx{max-width:calc(100% - 70px);padding:3px 10px;border-radius:999px}
  .pv-bld-approx-l{display:none}
  .pv-bld-body{grid-template-rows:minmax(400px,1fr) auto}
  .pv-bld-panel{max-height:260px}
  .pv-bld-bar .pv-spacer{display:none}
  .pv-bld-search{flex:1;min-width:130px}
  .pv-bld-search-in{width:100%}
  .pv-bld-sel{max-width:118px}
  .pv-bld-crumb-b{max-width:96px}
}
@media (prefers-reduced-motion:reduce){.pv-bld *{transition:none!important}}

/* ---- plan overlay layer of the building graph (web/viz/building-overlay.js) */
.pv-wl{position:relative;overflow:hidden;min-height:260px;height:100%;background:var(--pv-surface-3);border:1px solid var(--pv-line);border-radius:10px}
.pv-wl.pv-wl-host{position:absolute;inset:0;min-height:0;background:none;border:0;border-radius:0;pointer-events:none}
.pv-wl-img{position:absolute;max-width:none;background:#ffffff;box-shadow:0 1px 3px rgba(15,23,42,.25);user-select:none;-webkit-user-select:none;pointer-events:none}
.pv-wl-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;cursor:grab;touch-action:none;pointer-events:auto}
.pv-wl-host .pv-wl-canvas{cursor:default}
.pv-wl-canvas.pv-hot{cursor:pointer}
.pv-wl-canvas:focus-visible{outline:2px solid var(--pv-focus);outline-offset:-3px}
.pv-wl-legend{position:absolute;left:10px;bottom:10px;display:flex;flex-wrap:wrap;align-items:center;gap:2px 4px;max-width:calc(100% - 20px);padding:4px 8px;border-radius:8px;background:color-mix(in srgb,var(--pv-surface) 94%,transparent);border:1px solid var(--pv-line);pointer-events:auto}
.pv-wl-lg-t{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--pv-ink-3);margin-right:6px}
.pv-wl-lg-btn{display:inline-flex;align-items:center;gap:6px;padding:2px 6px;border:0;border-radius:5px;background:none;color:var(--pv-ink);font:500 12px var(--pv-font);cursor:pointer}
.pv-wl-lg-btn:hover{background:var(--pv-surface-3)}
.pv-wl-lg-btn[aria-pressed="false"]{color:var(--pv-ink-3);text-decoration:line-through}
.pv-wl-lg-btn[aria-pressed="false"] svg{opacity:.3}
