:root{--fg: #1a1d24;--bg: #fafbfc;--muted: #6b7280;--border: #e5e7eb;--primary: #1d4ed8;--high: #15803d;--med: #ca8a04;--low: #dc2626;--none: #6b7280;font-family:ui-sans-serif,system-ui,-apple-system,sans-serif;color:var(--fg);background:var(--bg)}*{box-sizing:border-box}body{margin:0}a{color:var(--primary);text-decoration:none}.topbar{display:flex;align-items:center;gap:16px;padding:10px 18px;border-bottom:1px solid var(--border);background:#fff}.topbar .pdf-link{color:var(--fg);font-size:13px;font-weight:500;max-width:540px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px dotted transparent}.topbar .pdf-link:hover{color:var(--primary);border-bottom-color:var(--primary)}.topbar .aid{color:var(--muted);font-size:13px;margin-left:auto}.topbar .csv-link{font-size:13px;padding:6px 12px;border:1px solid var(--border);border-radius:6px;background:#fff}.topbar .csv-link:hover{background:#f3f4f6}.hero{max-width:760px;margin:80px auto;padding:0 24px}.hero h1{font-size:40px;margin:0 0 12px}.hero .lede{color:var(--muted);font-size:18px}.hero .cta{display:inline-block;margin:24px 0;background:var(--primary);color:#fff;padding:12px 18px;border-radius:8px;font-weight:600}.hero .features{padding-left:18px;line-height:1.8;color:#374151}.upload{max-width:720px;margin:60px auto;padding:0 24px}.dropzone{border:2px dashed var(--border);border-radius:12px;padding:40px 24px;text-align:center;background:#fff;transition:border-color .2s}.dropzone[data-phase=analyzing],.dropzone[data-phase=uploading]{border-color:var(--primary)}.dropzone[data-phase=error]{border-color:var(--low)}.dropzone .picker{display:inline-block;margin-top:12px;color:var(--primary);cursor:pointer}.dropzone .picker input{display:none}.dropzone .err{color:var(--low)}.progress{text-align:left}.progress .status{color:var(--muted);margin:0 0 12px;font-size:14px}.progress .bar{height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden;margin-bottom:16px}.progress .bar .fill{height:100%;background:var(--primary);transition:width .25s ease}.progress .bar[data-phase=layer-scan] .fill{background:#8b5cf6}.progress .bar[data-phase=measure] .fill{background:var(--primary)}.progress .entries-live{list-style:none;margin:0;padding:0;max-height:360px;overflow-y:auto;border:1px solid var(--border);border-radius:6px}.progress .entries-live li{display:grid;grid-template-columns:22px 60px 1fr auto;align-items:center;gap:8px;padding:6px 8px;font-size:13px;border-bottom:1px solid var(--border)}.progress .entries-live li:last-child{border-bottom:0}.progress .entries-live .sw{width:18px;height:18px;border-radius:3px;border:1px solid #00000020}.progress .entries-live .cd{font-family:ui-monospace,monospace;font-weight:600}.progress .entries-live .m{font-variant-numeric:tabular-nums}.progress .entries-live .b{font-size:11px;padding:2px 6px;border-radius:4px;color:#fff}.analysis .layout{display:grid;grid-template-columns:380px 1fr;height:calc(100vh - 50px)}.analysis aside{border-right:1px solid var(--border);background:#fff;display:flex;flex-direction:column;min-height:0}.analysis aside>astro-island{display:contents}.analysis aside .legend{flex:1;min-height:0;overflow-y:auto}.analysis .viewer{position:relative;background:#f3f4f6}.plan-viewer{position:absolute;inset:0;display:flex;flex-direction:column}.viewer-toolbar{display:flex;align-items:center;gap:16px;padding:8px 12px;background:#fff;border-bottom:1px solid var(--border);font-size:13px;flex-wrap:wrap}.viewer-toolbar .toggle{display:flex;align-items:center;gap:6px;cursor:pointer}.viewer-toolbar .hint{color:var(--muted);font-family:ui-monospace,monospace;margin-left:auto;display:inline-flex;align-items:center;gap:4px}.viewer-toolbar .hint-clear{background:none;border:0;cursor:pointer;width:18px;height:18px;padding:0;font-size:16px;line-height:1;color:var(--muted);border-radius:50%}.viewer-toolbar .hint-clear:hover{background:#e5e7eb;color:var(--fg)}.zoom-controls{display:flex;align-items:center;gap:4px}.zoom-controls button{width:28px;height:28px;background:#fff;border:1px solid var(--border);border-radius:4px;cursor:pointer;font-size:16px;line-height:1}.zoom-controls button:disabled{opacity:.4;cursor:not-allowed}.zoom-controls button:hover:not(:disabled){background:#f3f4f6}.zoom-label{font-family:ui-monospace,monospace;font-size:12px;min-width:44px;text-align:center;color:var(--muted)}.canvas-scroll{flex:1;overflow:auto;display:flex;justify-content:safe center;align-items:safe flex-start;padding:16px;background:#e5e7eb}.canvas-scroll[data-panning=true]{cursor:grabbing;user-select:none}.canvas-stack{position:relative;flex-shrink:0;cursor:grab}.canvas-stack:has(.zone:hover){cursor:pointer}.canvas-scroll[data-panning=true] .canvas-stack{cursor:grabbing}.canvas-stack canvas{display:block;background:#fff;box-shadow:0 4px 12px #00000014}.plan-loader{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:#f3f4f6eb;backdrop-filter:blur(2px);color:var(--muted);font-size:14px}.plan-loader.err{color:var(--low);font-weight:600}.plan-loader .spinner{width:36px;height:36px;border:3px solid #d1d5db;border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.overlay{position:absolute;inset:0;pointer-events:none}.overlay svg{width:100%;height:100%;pointer-events:none;display:block}.overlay svg .zone{pointer-events:auto;cursor:pointer;transition:fill-opacity .15s}.overlay svg .zone:hover{fill-opacity:.85!important}.overlay-all svg .zone{fill-opacity:0;stroke-opacity:0;transition:fill-opacity .12s,stroke-opacity .12s}.overlay-all svg .zone:hover{fill-opacity:.45!important;stroke-opacity:1!important}.overlay-code svg .zone{fill-opacity:.6;stroke-width:2.5}.overlay-code svg .zone:hover{fill-opacity:.85!important}.overlay-code[data-poly-active=true]{opacity:0;pointer-events:none}.legend{list-style:none;margin:0;padding:8px}.legend .row{display:grid;grid-template-columns:22px 60px 1fr auto auto 12px;align-items:center;gap:8px;padding:8px 6px;border-radius:6px;cursor:pointer;font-size:13px}.legend .row:hover{background:#f3f4f6}.legend .row.selected{background:#dbeafe}.legend .chev{color:var(--muted);font-size:10px;text-align:center}.legend .swatch{width:22px;height:22px;border:1px solid #00000020;border-radius:3px}.legend .swatch-img{object-fit:cover;background:#f3f4f6;display:block}.legend .code{font-family:ui-monospace,monospace;font-weight:600}.legend .lib{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#374151}.legend .m2{color:#111;font-variant-numeric:tabular-nums}.legend .conf{font-size:11px;padding:2px 6px;border-radius:4px;color:#fff}.badge-high{background:var(--high)}.badge-med{background:var(--med)}.badge-low{background:var(--low)}.badge-none{background:var(--none)}.legend .breakdown{grid-column:2 / -1;font-size:10px;color:var(--muted);font-family:ui-monospace,monospace;margin-top:2px}.legend .sub-list-wrap{list-style:none;padding:0 6px 8px 30px}.legend .sub-list{list-style:none;margin:0;padding:4px 0 4px 6px;border-left:2px solid var(--border)}.legend .sub-row{display:grid;grid-template-columns:76px 36px 1fr auto;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;cursor:pointer;font-size:12px}.legend .sub-row:hover{background:#eef2ff}.legend .sub-row.active{background:#dbeafe;font-weight:600;outline:2px solid var(--primary);outline-offset:-1px}.legend .sub-row .mini-pill{font-size:10px;padding:1px 6px;border-radius:999px;color:#fff;text-align:center;font-weight:600;letter-spacing:.02em}.legend .sub-row .sub-id{font-family:ui-monospace,monospace;color:var(--muted)}.legend .sub-row .sub-area{font-variant-numeric:tabular-nums;color:#111}.legend .sub-row .sub-labels{font-size:11px}.legend .sub-empty{list-style:none;padding:4px 6px 8px 36px;font-size:12px}.legend .from-plan-marker{margin-left:4px;color:var(--med);font-size:10px;cursor:help}.legend .row.from-plan{background:#fffbeb}.legend .row.from-plan:hover{background:#fef3c7}.legend .conf-ambigu .conf,.badge-ambigu{background:var(--low)}.badge-orphan{background:var(--none)}.legend .orphan-row{margin-top:8px;border-top:1px dashed var(--border);padding-top:10px}.legend .orphan-swatch{background:repeating-linear-gradient(45deg,#d1d5db 0 3px,#f3f4f6 3px 6px)}.editor-pane{flex-shrink:0;max-height:60vh;overflow-y:auto;border-top:4px solid var(--border);background:#f9fafb;box-shadow:0 -4px 10px #0000000f;animation:editor-slide .18s ease-out;position:relative;z-index:1}.editor-pane.editor-high{border-top-color:var(--high)}.editor-pane.editor-med{border-top-color:var(--med)}.editor-pane.editor-ambigu{border-top-color:var(--low)}.editor-pane.editor-orphan{border-top-color:var(--none)}.editor-pane .modal-header{background:#fff;border-bottom:1px solid var(--border)}.editor-pane.editor-high .modal-header{background:#f0fdf4}.editor-pane.editor-med .modal-header{background:#fffbeb}.editor-pane.editor-ambigu .modal-header{background:#fef2f2}.editor-pane.editor-orphan .modal-header{background:#f3f4f6}@keyframes editor-slide{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--border)}.modal-header .status-pill{padding:3px 10px;border-radius:999px;font-size:12px;color:#fff;font-weight:600}.modal-header .space-id{color:var(--muted);font-family:ui-monospace,monospace;font-size:12px}.modal-header .close{margin-left:auto;background:none;border:0;font-size:28px;line-height:1;cursor:pointer;color:var(--muted)}.modal-header .close:hover{color:var(--fg)}.modal-body{padding:16px 18px}.modal-body .row-flex{display:flex;align-items:center;gap:14px;margin-bottom:16px}.modal-body .bigSwatch{width:48px;height:48px;border:1px solid #00000020;border-radius:6px}.modal-body h4{margin:16px 0 8px;font-size:13px;text-transform:uppercase;color:var(--muted);letter-spacing:.04em}.modal-body .labels-list{list-style:none;padding:0;margin:0 0 8px;display:flex;flex-wrap:wrap;gap:6px}.modal-body .labels-list li{display:inline-flex}.modal-body .reasoning{margin:0 0 12px;font-size:13px;line-height:1.5;color:#374151}.modal-body .reasoning code{background:#f3f4f6;padding:1px 5px;border-radius:3px;font-family:ui-monospace,monospace;font-size:12px}.modal-body .codes-summary{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}.modal-body .code-pill{background:#f3f4f6;border:1px solid var(--border);padding:3px 8px;border-radius:999px;font-size:12px}.modal-body .code-pill code{font-family:ui-monospace,monospace;font-weight:600}.modal-body .code-pill.primary{background:#dbeafe;border-color:#93c5fd;color:#1e40af}.modal-body .label-link{background:#f3f4f6;padding:3px 8px;border-radius:4px;font-size:12px;border:0;cursor:pointer;display:inline-flex;align-items:center;gap:4px}.modal-body .label-link:hover{background:#e0e7ff}.modal-body .label-link code{font-family:ui-monospace,monospace;font-weight:600}.modal-body .cta-row{display:flex;gap:10px;align-items:stretch;margin-top:14px;flex-wrap:wrap}.modal-body .primary-btn{flex:1;padding:10px 14px;background:var(--primary);color:#fff;border:0;border-radius:6px;cursor:pointer;font-size:14px;font-weight:600}.modal-body .primary-btn:hover:not(:disabled){background:#1e40af}.modal-body .primary-btn:disabled{opacity:.5;cursor:not-allowed}.modal-body .ghost-btn{padding:8px 14px;background:#fff;border:1px solid var(--border);border-radius:6px;font-size:13px;cursor:pointer}.modal-body .ghost-btn:hover:not(:disabled){background:#f9fafb}.modal-body .reassign-select{flex:1 1 200px;min-width:0;max-width:100%;padding:8px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff}.modal-body .link-reset{display:block;margin-top:14px;background:none;border:0;color:var(--muted);font-size:12px;cursor:pointer;padding:0;text-decoration:underline}.modal-body .link-reset:hover{color:var(--fg)}.modal-body .err{color:var(--low);margin-top:12px}.modal-body .hint{color:var(--muted);font-size:12px}.modal-body .row-flex .grow{flex:1}.modal-body .scale-tag{margin-left:8px;padding:1px 6px;border-radius:4px;background:#eef2ff;color:#4338ca;font-size:11px;font-family:ui-monospace,monospace;cursor:help}.overlay-active{pointer-events:none}.overlay-active .active-outline{stroke:#dc2626;stroke-width:4;stroke-dasharray:12 6;stroke-linejoin:round;filter:drop-shadow(0 0 3px rgba(220,38,38,.6));animation:active-outline-blink 1.2s ease-in-out infinite}@keyframes active-outline-blink{0%,to{stroke-opacity:1;stroke-dashoffset:0}50%{stroke-opacity:.45;stroke-dashoffset:18}}.overlay-flash{pointer-events:none}.flash-marker-ring{fill:none;stroke:#dc2626;animation:flash-ring 1.5s ease-out infinite}.flash-marker-dot{fill:#dc2626;stroke:#fff;stroke-width:2;filter:drop-shadow(0 0 4px rgba(220,38,38,.8));animation:flash-blink .8s ease-in-out infinite}@keyframes flash-ring{0%{r:10;stroke-width:8;opacity:1}60%{r:38;stroke-width:4;opacity:.55}to{r:60;stroke-width:1;opacity:0}}@keyframes flash-blink{0%,to{opacity:1}50%{opacity:.35}}
