
  /* ---- tokens (Stage 60C: lift to web/css/dashboard.css unchanged) ---- */
  :root{
    --paper:#F5F6F4; --surface:#FCFCFB; --ink:#17211D; --ink-soft:#5A655F;
    --line:#DBE0DB; --brand:#0B5D51; --brand-soft:#0B5D5118;
    --pass:#1F7A5C; --evidence:#9A6400; --blocked:#A4322B;
    --mono:'IBM Plex Mono',ui-monospace,monospace;
    --sans:'IBM Plex Sans',system-ui,sans-serif;
    --r:10px; --shadow:0 1px 0 #0000000a, 0 1px 2px #0000000f;
  }
  *{box-sizing:border-box}
  html{-webkit-text-size-adjust:100%}
  body{
    margin:0; background:var(--paper); color:var(--ink); font-family:var(--sans);
    font-size:15px; line-height:1.5; letter-spacing:-0.006em;
  }
  .wrap{max-width:1180px; margin:0 auto; padding:0 20px 96px}

  /* ---- masthead ---- */
  header.top{
    position:sticky; top:0; z-index:20; background:var(--paper);
    border-bottom:1px solid var(--line);
  }
  .top-inner{max-width:1180px; margin:0 auto; padding:12px 20px; display:flex; align-items:center; gap:14px}
  .brand{display:flex; align-items:baseline; gap:10px; font-weight:700}
  .brand .mark{
    font-family:var(--mono); font-weight:600; font-size:13px; color:#fff;
    background:var(--brand); padding:3px 7px; border-radius:6px; letter-spacing:0.02em;
  }
  .brand small{color:var(--ink-soft); font-weight:500; letter-spacing:0}
  .spacer{flex:1}
  .mode{
    display:inline-flex; align-items:center; gap:8px; font-family:var(--mono);
    font-size:12px; color:var(--ink-soft); border:1px solid var(--line);
    padding:5px 9px; border-radius:999px; background:var(--surface); cursor:pointer;
  }
  .mode .dot{width:7px; height:7px; border-radius:50%; background:var(--evidence)}
  .mode[data-mode="live"] .dot{background:var(--pass)}
  .mode[data-mode="mock"] .dot{background:var(--evidence)}
  .source-note{
    margin:10px 2px 0; font-family:var(--mono); font-size:11px; color:var(--ink-soft);
  }
  .source-note strong{color:var(--evidence); font-weight:600}

  /* ---- query bar (compact) ---- */
  .ask{padding:22px 0 4px}
  .ask h1{font-size:12px; font-weight:600; letter-spacing:0.04em; text-transform:uppercase; color:var(--ink-soft); margin:0 0 10px}
  .field{
    background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
    box-shadow:var(--shadow); padding:5px 5px 5px 14px; display:flex; gap:8px; align-items:flex-end;
    transition:border-color .15s;
  }
  .field:focus-within{border-color:var(--brand)}
  .field textarea{
    flex:1; border:0; resize:none; background:transparent; font-family:var(--sans);
    font-size:15px; color:var(--ink); padding:8px 0; outline:none; line-height:1.45;
    min-height:22px; max-height:140px;
  }
  .field textarea::placeholder{color:#9aa39d}
  .run{
    font-family:var(--sans); font-weight:600; font-size:14px; color:#fff; background:var(--brand);
    border:0; border-radius:8px; padding:9px 18px; cursor:pointer; white-space:nowrap;
    align-self:stretch; transition:filter .15s;
  }
  .run:hover{filter:brightness(1.08)}
  .run:disabled{opacity:.5; cursor:default}
  .examples{margin:10px 2px 0; display:flex; flex-wrap:wrap; gap:8px}
  .chip{
    font-family:var(--mono); font-size:12px; color:var(--brand); background:var(--brand-soft);
    border:0; border-radius:999px; padding:5px 11px; cursor:pointer;
  }
  .chip:hover{background:#0B5D5124}

  /* ---- results: two-column workbench ---- */
  #results{margin-top:20px; display:none}
  #results.on{display:grid; grid-template-columns:minmax(0,1fr) 336px; gap:18px; align-items:start}
  .col-main{min-width:0}
  .col-side{min-width:0}
  @media (max-width:960px){ #results.on{grid-template-columns:1fr} }
  .card{
    background:var(--surface); border:1px solid var(--line); border-radius:var(--r);
    box-shadow:var(--shadow); padding:18px 20px; margin-bottom:16px;
    animation:rise .32s cubic-bezier(.2,.7,.3,1) both;
  }
  .col-side .card{padding:15px 17px}
  @keyframes rise{from{opacity:0; transform:translateY(6px)}to{opacity:1; transform:none}}
  @media (prefers-reduced-motion:reduce){.card{animation:none}}
  .eyebrow{
    font-family:var(--mono); font-size:11px; letter-spacing:0.06em; text-transform:uppercase;
    color:var(--ink-soft); margin:0 0 10px;
  }
  .micro{font-size:12px; color:var(--ink-soft); margin:10px 0 0}

  /* answer */
  .verdict{display:flex; align-items:center; gap:12px; margin-bottom:8px; flex-wrap:wrap}
  .badge{
    font-family:var(--mono); font-size:12px; font-weight:600; padding:5px 10px; border-radius:7px;
    color:#fff; letter-spacing:0.02em; text-transform:uppercase; white-space:nowrap;
  }
  .badge.pass{background:var(--pass)} .badge.conditional{background:var(--evidence)}
  .badge.blocked{background:var(--blocked)} .badge.insufficient_data{background:var(--ink-soft)}
  /* Stage 77D: "needs inputs" replaces the bare insufficient-data badge when
     only a few material facts are missing. */
  .badge.needs_inputs{background:var(--evidence)}
  .headline{font-size:21px; font-weight:600; letter-spacing:-0.01em; margin:0}
  .advisory{margin:12px 0 0; color:#2c3833}
  .advisory .tag{
    font-family:var(--mono); font-size:10px; color:var(--ink-soft); border:1px solid var(--line);
    border-radius:5px; padding:1px 5px; margin-right:8px; vertical-align:1px; text-transform:uppercase; letter-spacing:0.05em;
  }
  .checks{margin-top:14px; border-top:1px solid var(--line); padding-top:12px; display:grid; gap:2px}
  .check{display:grid; grid-template-columns:1fr auto auto; gap:12px; align-items:baseline; padding:6px 0; font-size:14px}
  .check + .check{border-top:1px dashed var(--line)}
  .check .lbl{font-weight:500}
  .check .rule{display:block; font-family:var(--mono); font-size:11px; color:var(--ink-soft); margin-top:2px}
  .check .val{font-family:var(--mono); font-size:13px; color:var(--ink-soft)}
  .check .res{font-family:var(--mono); font-size:11px; font-weight:600; text-transform:uppercase}
  .res.pass{color:var(--pass)} .res.fail{color:var(--blocked)} .res.unknown{color:var(--evidence)}

  /* jurisdiction — the signature */
  .juris{border-left:3px solid var(--brand); padding-left:14px}
  .track{display:flex; align-items:center; flex-wrap:wrap; gap:6px; font-family:var(--mono); font-size:13px}
  .node{background:var(--paper); border:1px solid var(--line); border-radius:6px; padding:3px 8px}
  .node.frame{background:var(--brand); color:#fff; border-color:var(--brand); font-weight:600}
  .node.frame.unknown{background:var(--evidence); border-color:var(--evidence)}
  .arrow{color:var(--ink-soft)}
  .conf{margin-top:10px; display:flex; align-items:center; gap:10px; font-size:12px; color:var(--ink-soft)}
  .meter{flex:1; max-width:150px; height:6px; background:var(--line); border-radius:3px; overflow:hidden}
  .meter i{display:block; height:100%; background:var(--brand)}
  .confirm{
    margin-top:10px; background:#9A640012; border:1px solid #9A640033; border-radius:8px;
    padding:9px 11px; font-size:12.5px; color:#5a4200; display:flex; gap:8px; align-items:flex-start;
  }
  .confirm b{color:var(--evidence)}

  /* generic rows */
  .rows{display:grid; gap:2px}
  .row{padding:9px 0; font-size:14px}
  .row + .row{border-top:1px dashed var(--line)}
  .row .k{font-weight:600}
  .row .meta{font-family:var(--mono); font-size:12px; color:var(--ink-soft); margin-top:2px}
  .pill{font-family:var(--mono); font-size:10px; padding:1px 6px; border-radius:5px; text-transform:uppercase; letter-spacing:0.04em; margin-left:6px}
  .pill.stated{background:#1F7A5C18; color:var(--pass)}
  .pill.computed{background:var(--brand-soft); color:var(--brand)}
  .pill.assumed{background:#9A640018; color:var(--evidence)}
  .pill.required{background:#A4322B18; color:var(--blocked)}
  .pill.recommended{background:#9A640018; color:var(--evidence)}

  /* assumption confirm / flag */
  .assume-acts{display:flex; gap:6px; margin-top:6px}
  .act{
    font-family:var(--mono); font-size:11px; color:var(--ink-soft); background:transparent;
    border:1px solid var(--line); border-radius:6px; padding:2px 9px; cursor:pointer;
  }
  .act:hover{border-color:var(--brand); color:var(--brand)}
  .act.on-confirm{background:#1F7A5C14; border-color:var(--pass); color:var(--pass); font-weight:600}
  .act.on-flag{background:#A4322B14; border-color:var(--blocked); color:var(--blocked); font-weight:600}
  .act:disabled{opacity:.45; cursor:default}
  .row.confirmed .k::after{content:" ✓"; color:var(--pass)}
  .row.flagged .k::after{content:" ⚑"; color:var(--blocked)}

  /* evidence workflow */
  .evi{border-left:3px solid var(--line); padding:8px 0 8px 11px; margin:0 0 8px}
  .evi.required{border-left-color:var(--blocked); background:#A4322B08; border-radius:0 8px 8px 0}
  .evi.recommended{border-left-color:var(--evidence)}
  .evi .k{font-weight:600; font-size:14px}
  .evi .why{font-size:12.5px; color:var(--ink-soft); margin-top:2px}
  .evi .do{
    display:inline-block; margin-top:6px; font-family:var(--mono); font-size:12px; font-weight:600;
    color:var(--brand); background:var(--brand-soft); border-radius:6px; padding:3px 9px;
  }
  .evi .links{font-family:var(--mono); font-size:11px; color:var(--ink-soft); margin-top:5px}

  /* Stage 72: local evidence attachment ledger. This is not an upload or parser. */
  .attach-box{
    margin-top:16px; border:1px solid var(--line); border-radius:var(--r);
    background:var(--surface); box-shadow:var(--shadow); padding:16px 18px;
  }
  .attach-box h3{margin:0; font-size:16px; font-weight:600}
  .attach-box p{margin:6px 0 0; color:var(--ink-soft); font-size:13px}
  .attach-form{display:grid; grid-template-columns:minmax(190px,1fr) minmax(190px,1fr) minmax(220px,1.2fr) auto; gap:10px; margin-top:12px; align-items:end}
  .attach-field label{display:block; font-family:var(--mono); font-size:10.5px; letter-spacing:0.04em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:4px}
  .attach-field select, .attach-field input{
    width:100%; border:1px solid var(--line); border-radius:7px; background:var(--paper);
    color:var(--ink); font-family:var(--sans); font-size:14px; padding:7px 9px; outline:none;
  }
  .attach-field select:focus, .attach-field input:focus{border-color:var(--brand)}
  .attach-btn{border:0; border-radius:7px; background:var(--brand); color:#fff; font-weight:600; padding:8px 13px; cursor:pointer; white-space:nowrap}
  .attach-btn:hover{filter:brightness(1.08)}
  .attach-grid{display:grid; gap:8px; margin-top:12px}
  .attach-row{border:1px solid var(--line); border-radius:8px; padding:10px 12px; background:var(--paper)}
  .attach-row .ar-head{display:flex; gap:8px; align-items:baseline; flex-wrap:wrap}
  .attach-row .ar-label{font-weight:600}
  .attach-row .ar-ref{font-family:var(--mono); font-size:11px; color:var(--ink-soft)}
  .attach-status{display:inline-flex; align-items:center; font-family:var(--mono); font-size:10px; text-transform:uppercase; letter-spacing:0.04em; border-radius:5px; padding:2px 6px; margin-top:6px}
  .attach-status.parsed{background:#1F7A5C18; color:var(--pass)}
  .attach-status.attached{background:#9A640018; color:var(--evidence)}
  .attach-status.prototype{background:#0B5D5118; color:var(--brand)}
  .attach-status.pending{background:#A4322B14; color:var(--blocked)}
  .attach-row .ar-note{font-size:12.5px; color:var(--ink-soft); margin-top:6px}
  .attach-row .ar-helper{font-family:var(--mono); font-size:10.5px; color:var(--ink-soft); margin-top:5px}
  .attach-empty{font-size:12.5px; color:var(--ink-soft); font-style:italic; margin-top:10px}
  .candidate-row{border:1px dashed var(--line); border-radius:8px; padding:9px 11px; background:#0B5D5108}
  .candidate-row .cf-grid{display:grid; grid-template-columns:1fr 1fr 1fr auto; gap:8px; align-items:center}
  .candidate-row .cf-k{font-family:var(--mono); font-size:10px; color:var(--ink-soft); text-transform:uppercase; letter-spacing:0.04em}
  .candidate-row .cf-v{font-size:13px; font-weight:600}
  .candidate-row .cf-actions{display:flex; gap:5px; flex-wrap:wrap}
  .candidate-row.rejected{opacity:.6}
  .candidate-row.confirmed{border-color:var(--pass); background:#1F7A5C10}
  .candidate-row.needs-redraw{border-color:#9A6400; background:#9A64000d}
  .confirm-queue{border:1px solid var(--line); border-radius:10px; padding:12px 14px; background:#0B5D5106}
  .confirm-queue h4{margin:0 0 4px; font-size:14.5px}
  .confirm-queue .cq-note{font-family:var(--mono); font-size:10.5px; color:var(--ink-soft); margin:0 0 8px}
  .confirm-queue .cq-bucket{margin-top:10px}
  .confirm-queue .cq-bucket-head{font-family:var(--mono); font-size:11px; text-transform:uppercase; letter-spacing:0.05em; color:var(--ink-soft); margin-bottom:6px}
  .confirm-queue .cq-actions{display:flex; gap:8px; flex-wrap:wrap; margin:8px 0}
  .confirm-queue .cq-missing li{font-size:12.5px; margin:2px 0}
  .confirm-queue .cq-changed{border-left:3px solid var(--pass); padding:6px 10px; margin-top:8px; font-size:12.5px; background:#1F7A5C0d}
  .fusion-summary{border:1px dashed var(--line); border-radius:8px; padding:8px 11px; margin:8px 0; font-family:var(--mono); font-size:11px; color:var(--ink-soft)}
  .bnd-editor{border:1px solid #1d4ed855; border-radius:10px; padding:12px 14px; margin-top:10px; background:#1d4ed808}
  .bnd-editor h4{margin:0 0 6px; font-size:14px}
  /* The PDF preview / frontage-selection surface spans the full width (like the
     Boundary review), so edge labels (E9, E10 …) are large enough to read and
     click accurately; the vertex/frontage panel stacks below it. */
  .bnd-editor .be-grid{display:grid; grid-template-columns:1fr; gap:12px}
  .bnd-editor .be-preview{width:100%}
  .bnd-editor .be-preview svg{width:100%; height:auto; border:1px solid var(--line); border-radius:7px; background:#fff}
  .bnd-editor .pdf-boundary-overlay{position:relative;background:#fff;border:1px solid var(--line);border-radius:7px;overflow:auto;max-height:650px}
  /* The underlay image drives the box at its own true proportions (no vertical
     stretch); the geometry overlay is layered exactly over that same box, so the
     blue candidate and the PDF share one undistorted coordinate frame.
     That frame is the STAGE, not the scrolling box around it. `inset:0` against a
     box carrying max-height:650px and overflow:auto resolves to the VISIBLE height,
     not the image's: past the point where zoom makes the page taller than 650px, the
     drawing was being fitted into a shorter box than the PDF under it and the two
     visibly came apart. The stage takes its height from the image, so they cannot. */
  .bnd-editor .pdf-boundary-overlay .pdf-stage{position:relative;display:block;width:100%;margin:0 auto}
  .bnd-editor .be-view-controls{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 6px}
  .bnd-editor .be-view-controls button{font:inherit;font-size:12.5px;padding:4px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:pointer}
  .bnd-editor .be-view-zoom{font-size:12px;color:var(--ink-soft,#666);margin-left:4px}
  .bnd-editor .pdf-boundary-overlay img{display:block;width:100%;height:auto;border:0}
  .bnd-editor .pdf-boundary-overlay embed{display:block;width:100%;height:360px;border:0}
  .bnd-editor .pdf-boundary-overlay .geometry-overlay{position:absolute;inset:0;pointer-events:auto;opacity:.82}
  .bnd-editor .pdf-boundary-overlay .geometry-overlay svg{width:100%;height:100%;background:transparent;border:0}
  .bnd-editor [data-boundary-edge-hit]{cursor:crosshair;pointer-events:stroke}
  /* Vertices sit above the edge hit strokes, so aiming at a corner picks the corner and
     not the line running through it. */
  .bnd-editor [data-boundary-vertex]{cursor:crosshair}
  .bnd-editor [data-boundary-vertex-group]{pointer-events:auto}
  .bnd-editor [data-boundary-edge-visible].edge-hover{stroke:#f59e0b!important;stroke-width:8!important}
  .bnd-editor [data-frontage-edge-row].edge-hover{outline:2px solid #f59e0b;background:#fffbeb}
  .bnd-editor .be-layer-controls{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:7px 0;font:11px var(--mono)}
  .bnd-editor .be-layer-controls input[type=range]{width:120px}
  .bnd-editor .dimension-schedule{width:100%;border-collapse:collapse;font:10.5px var(--mono);margin:6px 0}
  .bnd-editor .dimension-schedule th,.bnd-editor .dimension-schedule td{border:1px solid var(--line);padding:4px;text-align:left}
  .bnd-editor .road-choice{border:1px solid var(--line);border-radius:6px;padding:6px;margin:5px 0;background:#fff}
  .bnd-editor .road-choice.selected{border-color:#f97316;background:#fff7ed}
  .bnd-editor .be-row{display:flex; gap:6px; align-items:center; margin:2px 0; font-size:12px}
  .bnd-editor .be-row input{width:70px; font-size:12px; padding:2px 4px}
  .bnd-editor .be-note{font-family:var(--mono); font-size:10.5px; color:var(--ink-soft); margin:6px 0}
  .bnd-editor .be-warn{font-family:var(--mono); font-size:10.5px; color:#5a4200; margin:6px 0}
  @media (max-width:820px){.bnd-editor .be-grid{grid-template-columns:1fr}}
  .candidate-diagram{border:1px solid #9A640044; border-radius:8px; padding:10px 12px; background:#9A64000d}
  .candidate-diagram h4{margin:0 0 6px; font-size:14px}
  .candidate-diagram .diagram-frame{background:#fff; border:1px solid var(--line); border-radius:7px; padding:8px; margin-top:8px; overflow:auto}
  .candidate-diagram .diagram-frame svg{width:100%; height:auto; max-height:280px}
  .candidate-diagram .diagram-warning{font-family:var(--mono); font-size:10.5px; color:#5a4200; margin-top:6px}
  @media (max-width:820px){.candidate-row .cf-grid{grid-template-columns:1fr}}
  @media (max-width:760px){.attach-form{grid-template-columns:1fr}.attach-btn{width:100%}}

  /* drawing board: families, thumbnails, viewer, downloads */
  .vis-status{font-family:var(--mono); font-size:11px; color:var(--ink-soft); margin:0 0 10px}
  .vis-group{margin:0 0 16px}
  .vis-group:last-child{margin-bottom:0}
  .vis-type{font-family:var(--mono); font-size:11px; letter-spacing:0.05em; text-transform:uppercase; color:var(--ink-soft); margin:0 0 4px}
  .fam-warning{font-size:11.5px; color:#5a4200; margin:0 0 8px}
  .visuals{display:grid; grid-template-columns:repeat(auto-fill,minmax(168px,1fr)); gap:12px}
  .visuals.primary{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
  .visual{
    border:1px solid var(--line); border-radius:8px; background:var(--surface); padding:8px;
    cursor:pointer; transition:border-color .12s, box-shadow .12s;
  }
  .visual:hover{border-color:var(--brand)}
  .visual.open{border-color:var(--brand); box-shadow:0 0 0 1px var(--brand)}
  .visual .frame{background:var(--paper); border:1px solid var(--line); border-radius:6px; padding:6px; display:flex; justify-content:center; min-height:88px; align-items:center}
  .visual svg{width:100%; height:auto; max-height:120px}
  .visual .no-thumb{font-family:var(--mono); font-size:10px; color:var(--ink-soft); text-align:center}
  .visual .vt{font-size:12px; font-weight:600; margin-top:6px; line-height:1.3}
  .visual .vmeta{display:flex; flex-wrap:wrap; gap:4px; margin-top:5px}
  .vtag{font-family:var(--mono); font-size:9.5px; color:var(--ink-soft); border:1px solid var(--line); border-radius:5px; padding:1px 5px; text-transform:uppercase; letter-spacing:0.04em}
  .vtag.warn{color:var(--evidence); border-color:#9A640044}
  .visual .cap{font-family:var(--mono); font-size:10.5px; color:var(--ink-soft); margin-top:5px; line-height:1.35}
  .visual .v-open{font-family:var(--mono); font-size:10.5px; font-weight:600; color:var(--brand); margin-top:7px; text-transform:uppercase; letter-spacing:0.05em}
  /* Stage 68: curated drawing-board tiers — collapsed by default */
  details.vis-tier{margin:0 0 14px; border:1px dashed var(--line); border-radius:8px; padding:9px 12px}
  details.vis-tier summary{font-family:var(--mono); font-size:11.5px; color:var(--ink-soft); cursor:pointer; list-style:none}
  details.vis-tier summary::before{content:"▸ "; color:var(--brand)}
  details.vis-tier[open] summary::before{content:"▾ "}
  details.vis-tier .vis-group{margin-top:10px}
  /* Stage 68: parking status panel */
  .pk-line{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px}
  .pk-badge{font-family:var(--mono); font-size:12px; font-weight:600; padding:4px 10px; border-radius:7px; background:#9A640018; color:var(--evidence)}
  .pk-badge.ok{background:#1F7A5C18; color:var(--pass)}
  .pk-badge.blocked{background:#A4322B18; color:var(--blocked)}
  .drawing-viewer{
    margin-top:14px; border:1px solid var(--brand); border-radius:9px; background:#0B5D5106;
    padding:14px 16px; animation:rise .25s cubic-bezier(.2,.7,.3,1) both;
  }
  .drawing-viewer .dv-head{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap}
  .drawing-viewer h3{margin:0; font-size:16px; font-weight:600}
  .drawing-viewer .dv-id{font-family:var(--mono); font-size:11px; color:var(--ink-soft)}
  .drawing-viewer .dv-close{margin-left:auto; font-family:var(--mono); font-size:11px; color:var(--ink-soft); background:none; border:1px solid var(--line); border-radius:6px; padding:2px 9px; cursor:pointer}
  .drawing-viewer .dv-close:hover{border-color:var(--brand); color:var(--brand)}
  .drawing-viewer .dv-frame{background:#fff; border:1px solid var(--line); border-radius:8px; padding:14px; margin-top:10px; display:flex; justify-content:center}
  .drawing-viewer .dv-frame svg{width:100%; height:auto; max-height:520px}
  .dv-advisory{margin-top:10px; font-family:var(--mono); font-size:11px; color:#5a4200; background:#9A640012; border:1px solid #9A640033; border-radius:7px; padding:7px 10px}
  .dv-narrative{margin:10px 0 0; padding-left:18px; font-size:13px}
  .dv-actions{display:flex; gap:8px; margin-top:12px; flex-wrap:wrap}
  .dv-actions .act{padding:5px 12px; font-size:12px}
  details.dv-meta{margin-top:10px; border-top:1px dashed var(--line); padding-top:8px}
  details.dv-meta summary{font-family:var(--mono); font-size:11px; color:var(--ink-soft); cursor:pointer; list-style:none}
  details.dv-meta summary::before{content:"▸ "; color:var(--brand)}
  details.dv-meta[open] summary::before{content:"▾ "}
  .downloads{margin-top:16px; border-top:1px dashed var(--line); padding-top:12px}
  .downloads .dl-title{font-family:var(--mono); font-size:11px; letter-spacing:0.05em; text-transform:uppercase; color:var(--ink-soft); margin:0 0 8px}
  .downloads a.dl{display:inline-flex; align-items:center; gap:6px; font-family:var(--mono); font-size:12px; color:var(--brand); background:var(--brand-soft); border-radius:6px; padding:4px 10px; margin:0 8px 6px 0; text-decoration:none}
  .downloads a.dl:hover{background:#0B5D5124}
  .downloads .dl-none{font-size:12.5px; color:var(--ink-soft); font-style:italic}
  .dxf-row{border:1px solid var(--line); border-radius:8px; padding:9px 12px; margin:0 0 8px; display:flex; align-items:center; gap:10px; flex-wrap:wrap}
  .dxf-row .k{font-weight:600; font-size:13.5px}
  .dxf-row .meta{font-family:var(--mono); font-size:11px; color:var(--ink-soft)}
  .dxf-row .act{margin-left:auto}
  .dxf-note{font-size:12px; color:var(--ink-soft); font-style:italic}

  /* scenarios: inspectable route cards + detail drawer */
  .scenarios{display:grid; gap:10px; grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
  .scenario{
    border:1px solid var(--line); border-radius:9px; padding:12px 14px; cursor:pointer;
    background:var(--surface); transition:border-color .12s, box-shadow .12s; position:relative;
  }
  .scenario:hover{border-color:var(--brand)}
  .scenario.selected{border-color:var(--brand); box-shadow:0 0 0 1px var(--brand); background:#0B5D5106}
  .scenario .s-lbl{font-weight:600; padding-right:8px}
  .scenario .s-chips{display:flex; flex-wrap:wrap; gap:5px; margin-top:8px}
  .s-chip{
    font-family:var(--mono); font-size:11px; color:var(--brand);
    background:var(--brand-soft); padding:2px 8px; border-radius:6px; white-space:nowrap;
  }
  .s-chip.soft{color:var(--ink-soft); background:var(--paper); border:1px solid var(--line)}
  .s-chip.default{color:#fff; background:var(--ink-soft)}
  .scenario .s-note{font-size:12.5px; color:var(--ink-soft); margin-top:7px}
  .scenario .s-open{
    font-family:var(--mono); font-size:11px; font-weight:600; color:var(--brand);
    margin-top:9px; text-transform:uppercase; letter-spacing:0.05em;
  }
  .scenario.selected .s-open{color:var(--ink-soft)}
  .scenario-detail{
    margin-top:12px; border:1px solid var(--brand); border-radius:9px; background:#0B5D5106;
    padding:14px 16px; animation:rise .25s cubic-bezier(.2,.7,.3,1) both;
  }
  .scenario-detail .sd-head{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap}
  .scenario-detail h3{margin:0; font-size:16px; font-weight:600}
  .scenario-detail .sd-close{margin-left:auto; font-family:var(--mono); font-size:11px; color:var(--ink-soft); background:none; border:1px solid var(--line); border-radius:6px; padding:2px 9px; cursor:pointer}
  .scenario-detail .sd-close:hover{border-color:var(--brand); color:var(--brand)}
  .sd-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:8px; margin-top:10px}
  .sd-fact{background:var(--surface); border:1px solid var(--line); border-radius:7px; padding:7px 10px}
  .sd-fact .f-k{font-family:var(--mono); font-size:10px; letter-spacing:0.05em; text-transform:uppercase; color:var(--ink-soft)}
  .sd-fact .f-v{font-size:14px; font-weight:600; margin-top:1px}
  .sd-section{margin-top:11px}
  .sd-section .f-k{font-family:var(--mono); font-size:10px; letter-spacing:0.05em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:4px}
  .sd-section ul{margin:4px 0 0; padding-left:18px; font-size:13px}
  .sd-section li{margin:2px 0}
  .sd-empty{font-size:12.5px; color:var(--ink-soft); font-style:italic; margin-top:10px}
  .sd-drawings{display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:10px; margin-top:6px}
  .sd-actions{display:flex; gap:8px; margin-top:12px; flex-wrap:wrap}
  .sd-actions .act{padding:5px 12px; font-size:12px}
  details.sd-adv{margin-top:11px; border-top:1px dashed var(--line); padding-top:9px}
  details.sd-adv summary{font-family:var(--mono); font-size:11px; color:var(--ink-soft); cursor:pointer; list-style:none}
  details.sd-adv summary::before{content:"▸ "; color:var(--brand)}
  details.sd-adv[open] summary::before{content:"▾ "}

  /* structured corrections panel */
  .cor-form{display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:12px; margin-top:4px}
  .cor-field label{display:block; font-family:var(--mono); font-size:11px; letter-spacing:0.04em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:4px}
  .cor-field select, .cor-field input[type=number], .cor-field input[type=text]{
    width:100%; border:1px solid var(--line); border-radius:7px; background:var(--paper);
    font-family:var(--sans); font-size:14px; color:var(--ink); padding:7px 10px; outline:none;
  }
  .cor-field select:focus, .cor-field input:focus{border-color:var(--brand)}
  .cor-field .set{border-color:var(--brand); background:#0B5D5108}
  .zones{grid-column:1/-1; display:flex; flex-wrap:wrap; gap:8px 16px; margin-top:2px}
  .zones .zlbl{font-family:var(--mono); font-size:11px; letter-spacing:0.04em; text-transform:uppercase; color:var(--ink-soft); flex-basis:100%}
  .zones label.z{display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--ink); cursor:pointer}
  .zones input[type=checkbox]{accent-color:var(--brand); width:15px; height:15px}
  details.quick{margin-top:14px; border-top:1px dashed var(--line); padding-top:10px}
  details.quick summary{font-family:var(--mono); font-size:11.5px; color:var(--ink-soft); cursor:pointer; list-style:none}
  details.quick summary::before{content:"▸ "; color:var(--brand)}
  details.quick[open] summary::before{content:"▾ "}
  details.quick .cor-form{margin-top:10px}

  /* expectation (demoted quick reaction) + feedback */
  .expect{display:flex; gap:8px; flex-wrap:wrap; margin-top:8px}
  .expect .opt{
    font-family:var(--sans); font-weight:600; font-size:12.5px; color:var(--ink-soft);
    background:transparent; border:1px solid var(--line); border-radius:8px; padding:6px 12px; cursor:pointer;
  }
  .expect .opt:hover{border-color:var(--brand); color:var(--brand)}
  .expect .opt[aria-pressed="true"]{background:var(--brand); border-color:var(--brand); color:#fff}
  .fb-label{font-size:13px; font-weight:600; margin:12px 0 6px}
  .fb-text{
    width:100%; border:1px solid var(--line); border-radius:8px; background:var(--paper);
    font-family:var(--sans); font-size:14px; color:var(--ink); padding:9px 12px; resize:vertical;
    min-height:52px; outline:none;
  }
  .fb-text:focus{border-color:var(--brand)}

  /* warnings + report + advanced */
  .warns{list-style:none; padding:0; margin:0; display:grid; gap:8px}
  .warns li{font-size:13px; color:#5a4200; background:#9A640010; border-radius:7px; padding:8px 11px}
  .report-actions{display:flex; gap:10px; margin-top:14px; flex-wrap:wrap}
  .btn-ghost{font-family:var(--sans); font-weight:600; font-size:13px; color:var(--brand); background:transparent; border:1px solid var(--brand); border-radius:8px; padding:9px 16px; cursor:pointer}
  .btn-ghost:hover{background:var(--brand-soft)}
  .btn-ghost:disabled{opacity:.45; cursor:default}
  details.adv{margin-top:8px; border-top:1px solid var(--line); padding-top:14px}
  details.adv summary{font-family:var(--mono); font-size:12px; color:var(--ink-soft); cursor:pointer; list-style:none}
  details.adv summary::before{content:"▸ "; color:var(--brand)}
  details.adv[open] summary::before{content:"▾ "}
  .adv-label{font-family:var(--mono); font-size:11px; letter-spacing:0.05em; text-transform:uppercase; color:var(--ink-soft); margin:14px 0 0}
  pre.raw{background:#12201c; color:#cfe3dc; font-family:var(--mono); font-size:11.5px; line-height:1.5; padding:14px; border-radius:8px; overflow:auto; max-height:360px; margin-top:8px}

  .loading{text-align:center; padding:40px; color:var(--ink-soft); font-family:var(--mono); font-size:13px; grid-column:1/-1}
  .empty{color:var(--ink-soft); font-size:13px; font-style:italic}
  :focus-visible{outline:2px solid var(--brand); outline-offset:2px; border-radius:4px}
  @media (max-width:560px){ .headline{font-size:19px} .field{flex-direction:column; align-items:stretch} .run{align-self:flex-end} .scenarios{grid-template-columns:1fr} }

  /* ================= intake phase (packet-first first screen) ================= */
  .lang{display:flex; border:1px solid var(--line); border-radius:6px; overflow:hidden; font-size:12px}
  .lang button{padding:4px 10px; border:0; background:transparent; color:var(--ink-soft); font-family:var(--sans); cursor:pointer}
  .lang button.on{background:var(--ink); color:var(--paper)}
  .lang button[aria-disabled="true"]{opacity:.55; cursor:default}

  .shell{display:flex; align-items:stretch}
  nav.navrail{
    position:sticky; top:57px; align-self:flex-start; flex:0 0 78px;
    display:flex; flex-direction:column; gap:4px; padding:14px 8px;
    border-right:1px solid var(--line); min-height:calc(100vh - 57px);
  }
  nav.navrail button{
    display:flex; flex-direction:column; align-items:center; gap:3px; width:100%;
    font-family:var(--mono); font-size:10px; color:var(--ink-soft);
    background:transparent; border:1px solid transparent; border-radius:8px;
    padding:9px 4px; cursor:pointer;
  }
  nav.navrail button .ni{font-size:15px; line-height:1}
  nav.navrail button.active{background:var(--brand-soft); color:var(--brand); border-color:#0B5D5133}
  nav.navrail button[aria-disabled="true"]{opacity:.45; cursor:default}
  nav.navrail .soon{font-size:8px; letter-spacing:.05em; text-transform:uppercase; color:var(--evidence)}
  .shell > .wrap{flex:1; min-width:0}
  @media(max-width:960px){ nav.navrail{display:none} }

  .step-label{font-family:var(--mono); font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--ink-soft); margin:0 0 6px}
  .step-label b{color:var(--brand); font-weight:600}
  .step-note{font-size:13px; color:var(--ink-soft); margin:2px 0 12px; max-width:64ch}
  .intake-h{font-size:19px; font-weight:600; letter-spacing:-0.01em; margin:0 0 4px}
  .run.ghostrun{background:transparent; color:var(--brand); border:1px solid var(--brand)}

  #intake{margin-top:26px; display:grid; grid-template-columns:minmax(0,1fr) 336px; gap:18px; align-items:start}
  @media(max-width:960px){ #intake{grid-template-columns:1fr} }
  body[data-phase="results"] #intake{display:none}
  body[data-phase="results"] .ask{display:none}

  .ledger{background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden}
  .ledger .group{border-bottom:1px solid var(--line)}
  .ledger .group:last-of-type{border-bottom:0}
  .group-head{display:flex; align-items:center; gap:10px; padding:10px 16px; background:var(--paper); font-weight:600; font-size:13px}
  .group-head .count{margin-left:auto; font-family:var(--mono); font-size:11px; font-weight:400; color:var(--ink-soft)}
  .fact{display:grid; grid-template-columns:170px minmax(0,1fr) auto auto; gap:12px; align-items:center; padding:10px 16px; border-top:1px solid var(--line); font-size:14px}
  @media(max-width:700px){ .fact{grid-template-columns:1fr; gap:4px} }
  .fact .fk{color:var(--ink-soft); font-size:13px}
  .fact .fv{font-weight:500; min-width:0}
  .fact .fv .alt{color:var(--ink-soft); font-weight:400; font-family:var(--mono); font-size:12px; margin-left:8px}
  .fact .fv.missing{color:var(--ink-soft); font-weight:400; font-style:italic}
  .fact-acts{display:flex; gap:6px; align-items:center}
  .ptag{display:inline-flex; align-items:center; font-family:var(--mono); font-size:10px; letter-spacing:.04em; padding:2px 7px; border-radius:5px; border:1px solid; white-space:nowrap}
  .ptag.text{color:var(--pass); border-color:#1F7A5C44; background:#1F7A5C12}
  .ptag.derived{color:#1F4E79; border-color:#1F4E7933; background:#1F4E790F}
  .ptag.assumed{color:var(--evidence); border-color:#9A640044; background:#9A640012}
  .ptag.gap{color:var(--blocked); border-color:#A4322B44; background:#A4322B0F}
  .ptag.ok{color:#fff; border-color:var(--pass); background:var(--pass)}
  .pconfirm{border:1px solid var(--line); background:transparent; border-radius:6px; padding:3px 10px; font-size:12px; color:var(--ink-soft); cursor:pointer}
  .pconfirm:hover{border-color:var(--pass); color:var(--pass)}
  .pconfirm.done{border-color:var(--pass); background:#1F7A5C12; color:var(--pass)}
  .pfix{border:none; background:transparent; font-family:var(--mono); font-size:11.5px; font-weight:600; color:var(--blocked); text-decoration:underline; text-underline-offset:3px; cursor:pointer}
  .fact .fix-editor{grid-column:1/-1; display:flex; gap:10px; align-items:center; flex-wrap:wrap; padding:4px 0 2px}
  .fix-editor select, .fix-editor input[type="number"]{font:inherit; font-size:13px; padding:5px 8px; border:1px solid var(--line); border-radius:6px; background:var(--surface); color:var(--ink)}
  .fix-editor label{font-size:13px}
  .fix-editor .fnote{font-family:var(--mono); font-size:10.5px; color:var(--ink-soft)}
  .ledger-empty{padding:18px; font-size:13px; color:var(--ink-soft); font-style:italic}
  .ledger-note{padding:10px 16px; font-family:var(--mono); font-size:10.5px; color:var(--ink-soft); border-top:1px solid var(--line)}

  .kflags{margin-top:14px; background:var(--surface); border:1px solid var(--line); border-left:3px solid var(--blocked); border-radius:var(--r); box-shadow:var(--shadow); padding:14px 16px}
  .kflags h3{font-size:13.5px; font-weight:700; margin:0 0 2px}
  .kflags > p{font-size:12.5px; color:var(--ink-soft); margin:0 0 10px}
  .kflag-row{display:flex; flex-wrap:wrap; gap:8px}
  .kflag{display:flex; align-items:center; gap:8px; border:1px solid var(--line); border-radius:7px; padding:6px 10px; font-size:12.5px; background:var(--paper)}
  .kflag .tri{display:flex; border:1px solid var(--line); border-radius:5px; overflow:hidden; font-family:var(--mono); font-size:10.5px}
  .kflag .tri button{border:none; background:transparent; padding:3px 7px; color:var(--ink-soft); cursor:pointer}
  .kflag .tri button.on{background:var(--ink); color:var(--paper)}
  .kf-note{font-family:var(--mono); font-size:10.5px; color:var(--ink-soft); margin:10px 0 0}
  .kf-prov{font-family:var(--mono); font-size:9.5px; color:var(--ink-soft); flex-basis:100%}
  .kflag{flex-wrap:wrap}

  /* ---- Stage 71: evidence source routes + access scale gate ---- */
  .sroutes{margin-top:14px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:12px 16px}
  .sroutes summary{font-family:var(--mono); font-size:11.5px; color:var(--ink-soft); cursor:pointer; list-style:none}
  .sroutes summary::before{content:"▸ "; color:var(--brand)}
  .sroutes details[open] summary::before, .sroutes[open] summary::before{content:"▾ "}
  .sroute{display:grid; grid-template-columns:minmax(150px,230px) minmax(0,1fr); gap:4px 12px; padding:8px 0; border-top:1px dashed var(--line); font-size:12.5px}
  .sroute:first-of-type{border-top:0}
  .sroute .rk{font-weight:600}
  .sroute .rgives{color:var(--ink-soft)}
  .sroute .rstat{font-family:var(--mono); font-size:10px; color:var(--evidence)}
  .sroute .rstat.active{color:var(--pass)}
  .sroute .rnote{grid-column:1/-1; font-size:11.5px; color:var(--ink-soft); font-style:italic}

  .honesty-card{background:#0B5D510C; border:1px solid #0B5D5126; border-radius:var(--r); padding:14px 16px; margin-bottom:16px}
  .honesty-card h3{font-size:13.5px; font-weight:700; margin:0 0 8px}
  .honesty-card ul{margin:0; padding:0; list-style:none; display:grid; gap:7px}
  .honesty-card li{font-size:12.5px; display:flex; gap:8px}
  .honesty-card li::before{content:"✓"; color:var(--pass); font-weight:700}

  .rail-card{background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:16px 17px}
  .rail-card h3{font-size:15px; font-weight:700; margin:0 0 2px}
  .rail-card .rsub{font-size:12.5px; color:var(--ink-soft); margin:0 0 14px}
  .staff{position:relative; margin-left:8px; padding-left:20px}
  .staff::before{content:""; position:absolute; left:0; top:6px; bottom:6px; width:2px; background:repeating-linear-gradient(to bottom, var(--line) 0 6px, transparent 6px 12px)}
  .station{position:relative; padding-bottom:16px}
  .station:last-child{padding-bottom:2px}
  .station .rnode{position:absolute; left:-26px; top:2px; width:13px; height:13px; border-radius:50%; border:2px solid var(--line); background:var(--paper)}
  .station.ready .rnode{border-color:var(--pass); background:var(--pass)}
  .station.partial .rnode{border-color:var(--evidence); background:#9A640022}
  .station .rname{font-weight:700; font-size:13.5px; display:flex; align-items:center; gap:8px; flex-wrap:wrap}
  .rpill{font-family:var(--mono); font-size:9.5px; letter-spacing:.06em; padding:2px 7px; border-radius:99px}
  .rpill.ready{background:var(--pass); color:#fff}
  .rpill.prelim{background:#9A640018; color:var(--evidence); border:1px solid #9A640044}
  .rpill.locked{background:var(--line); color:var(--ink-soft)}
  .station .rwhy{font-size:12px; color:var(--ink-soft); margin-top:3px}
  .station .rwhy b{color:var(--blocked)}
  .station .runlock{font-family:var(--mono); font-size:11px; color:var(--ink-soft); margin-top:2px}
  .rail-cta{margin-top:16px; border-top:1px solid var(--line); padding-top:13px}
  .rail-cta .rbtn{width:100%; font-family:var(--sans); font-weight:600; font-size:14px; color:#fff; background:var(--brand); border:0; border-radius:8px; padding:11px; cursor:pointer; transition:filter .15s}
  .rail-cta .rbtn:hover{filter:brightness(1.08)}
  .rail-cta .rbtn:disabled{opacity:.5; cursor:default}
  .rghost{font:inherit; font-size:13px; background:transparent; border:1px solid var(--line); border-radius:8px; padding:9px; color:var(--ink-soft); cursor:pointer}
  .rail-cta .rghost{width:100%; margin-top:8px}
  .rghost:hover{border-color:var(--brand); color:var(--brand)}
  .rail-note{margin-top:10px; font-family:var(--mono); font-size:10.5px; color:var(--ink-soft)}
  .honest{margin-top:12px; font-size:11.5px; color:var(--ink-soft); line-height:1.55; border-left:2px solid var(--brand); padding-left:10px}

  .nextsteps{margin-top:22px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:16px 18px}
  .nextsteps .ns-title{font-family:var(--mono); font-size:11px; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-soft); margin:0 0 12px}
  .ns-track{display:grid; grid-template-columns:repeat(5,1fr); gap:12px}
  @media(max-width:860px){ .ns-track{grid-template-columns:1fr 1fr} }
  .ns-step .ns-n{width:22px; height:22px; border-radius:50%; background:var(--brand-soft); color:var(--brand); font-family:var(--mono); font-size:11px; font-weight:600; display:flex; align-items:center; justify-content:center; margin-bottom:6px}
  .ns-step .ns-k{font-size:12.5px; font-weight:600}
  .ns-step .ns-d{font-size:11.5px; color:var(--ink-soft); margin-top:2px}
  .ns-honest{margin-top:12px; border-top:1px dashed var(--line); padding-top:10px; font-size:12px; color:var(--ink-soft)}

  .return-bar{display:none; margin:18px 0 0; padding:10px 14px; border:1px solid var(--line); border-radius:var(--r); background:var(--surface); box-shadow:var(--shadow); align-items:center; gap:12px; flex-wrap:wrap}
  body[data-phase="results"] .return-bar{display:flex}
  .return-bar .rq{font-size:13px; color:var(--ink-soft); flex:1; min-width:200px}
  .return-bar .rq b{color:var(--ink); font-weight:500}
  .return-bar .rghost{width:auto; padding:7px 12px}

  /* ---- Stage 69: readable architect summary + limited-detail scenarios ---- */
  .rep-ul{margin:6px 0 0; padding-left:18px; font-size:13px; color:var(--ink-soft)}
  .rep-ul li{margin:2px 0}
  .sd-limited{
    display:inline-block; font-family:var(--mono); font-size:11px; color:var(--evidence);
    background:#9A640012; border:1px solid #9A640033; border-radius:6px; padding:3px 9px; margin:6px 0 0;
  }

  /* ---- Stage 70: result coherence — proxy warning, result context, remaining limits ---- */
  .proxy-warn{
    margin:12px 0; background:#9A640014; border:1px solid #9A640055; border-left:4px solid var(--evidence);
    border-radius:8px; padding:10px 13px; font-size:13px; color:#5a4200;
  }
  .proxy-warn b{color:var(--evidence)}
  .ctx-rows{display:grid; gap:2px}
  .ctx-rows .row{padding:7px 0; font-size:13px}
  .limit-list{margin:4px 0 0; padding-left:18px; font-size:12.5px; color:var(--ink-soft)}
  .limit-list li{margin:2px 0}
  /* PART 14: persistent primary action (sticky footer). */
  .persistent-action{position:fixed; left:0; right:0; bottom:0; z-index:60; background:var(--paper,#fff);
    border-top:1px solid var(--line,#e5e7eb); box-shadow:0 -4px 16px rgba(0,0,0,.08)}
  .persistent-action[hidden]{display:none}
  .persistent-action-inner{max-width:1280px; margin:0 auto; padding:10px 18px; display:flex; align-items:center;
    justify-content:space-between; gap:16px}
  .persistent-action-title{font-size:13px; font-weight:600}
  .persistent-action-missing{margin:2px 0 0; padding-left:18px; font-size:11px; color:var(--ink-soft,#6b7280)}
  /* The persistent action bar is now the single run control, so it reads as the
     primary green button (matching the former side-box "Run preliminary feasibility"). */
  .persistent-action-button{white-space:nowrap; min-width:230px; font-family:var(--sans);
    font-weight:600; font-size:14px; color:#fff; background:var(--brand); border:0;
    border-radius:8px; padding:11px 18px; transition:filter .15s}
  .persistent-action-button:hover{filter:brightness(1.06)}
  .persistent-action-button[disabled]{opacity:.55; cursor:not-allowed}
  main{padding-bottom:76px}
