:root{color-scheme:light;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;background:#f4f5f6;color:#17191b;--bg: #f4f5f6;--text: #17191b;--panel: #ffffff;--panel-alt: #edf0f2;--surface: #f7f8f9;--control-bg: #ffffff;--button-bg: #e9ecef;--button-hover: #dfe3e6;--line: #aeb5bb;--line-strong: #6f7880;--muted: #596168;--faint: #747c83;--label: #3e454b;--accent: #2766ad;--accent-bg: #dbe8f6;--accent-text: #163f70;--primary: #2d659f;--primary-hover: #245585;--primary-line: #245585;--warning: #8a5b00;--danger: #a92f37;--success: #287344;--status-bg: #e7f0fa;--status-text: #244666;--status-line: #7894ad;--error-bg: #fae8e9;--error-text: #76262b;--error-line: #ad676b;--preview-bg: #090a0b;--overlay-bg: rgba(9, 10, 11, .9)}@media(prefers-color-scheme:dark){:root{color-scheme:dark;background:#0f1113;color:#eef0f2;--bg: #0f1113;--text: #eef0f2;--panel: #16191c;--panel-alt: #1b1f23;--surface: #121517;--control-bg: #101214;--button-bg: #202429;--button-hover: #272c31;--line: #3a4046;--line-strong: #6b747c;--muted: #a5abb1;--faint: #737a80;--label: #c1c6ca;--accent: #8bb4f8;--accent-bg: #1b2a3d;--accent-text: #eaf2ff;--primary: #315b92;--primary-hover: #3a68a4;--primary-line: #729bd8;--warning: #e7bd69;--danger: #ee8b8b;--success: #77b98e;--status-bg: #17202a;--status-text: #d4e1f0;--status-line: #45566a;--error-bg: #29191a;--error-text: #f2c4c4;--error-line: #704346}}*{box-sizing:border-box}html{min-width:320px;background:var(--bg)}body{margin:0;min-height:100vh;background:var(--bg);color:var(--text)}button,input,select{font:inherit;border-radius:0}button{color:inherit}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.app-shell{width:min(1200px,calc(100% - 32px));min-height:100vh;margin:0 auto;display:flex;flex-direction:column}.site-header{min-height:54px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand h1{margin:0;font-size:15px;font-weight:650}main{flex:1;padding:28px 0 48px}.configuration-summary{margin:0 0 18px;color:var(--muted);font-size:13px}.muted{color:var(--muted);line-height:1.45}.stepper{list-style:none;display:grid;grid-template-columns:repeat(4,1fr);margin:0 0 20px;padding:0;border:1px solid var(--line)}.stepper li{min-height:38px;border-right:1px solid var(--line);color:var(--faint);font-size:12px}.stepper li:last-child{border-right:0}.stepper button{width:100%;min-height:38px;display:flex;align-items:center;gap:8px;padding:0 12px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.stepper button:disabled{cursor:not-allowed}.stepper li span{color:inherit;font-variant-numeric:tabular-nums}.stepper li.active{color:var(--text);border-bottom:2px solid var(--accent);background:var(--panel-alt)}.stepper li.complete,.stepper li.available{color:var(--muted)}.stepper li.available button:hover{background:var(--button-hover);color:var(--text)}.panel{padding:18px;border:1px solid var(--line);border-radius:0;background:var(--panel);box-shadow:none}.panel h2,.panel h3{margin:0;font-size:16px;line-height:1.3;font-weight:650}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}.panel-heading-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.setup-layout{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.field{display:grid;gap:6px;color:var(--label);font-size:12px}.field input:not([type=range]),.field select{width:100%;min-height:38px;padding:0 9px;border:1px solid var(--line);border-radius:0;background:var(--control-bg);color:var(--text)}.field input[type=range]{accent-color:var(--accent)}.span-two{grid-column:span 2}.check{display:flex;align-items:center;gap:8px;color:var(--label);font-size:12px}.check input,.switch input{accent-color:var(--accent)}.field-error{margin:0;font-size:10px;line-height:1.4}.field-error{color:var(--danger)}.advanced-settings{border-top:1px solid var(--line)}.advanced-settings summary{padding:10px 0;color:var(--muted);font-size:11px;cursor:pointer}.advanced-settings[open] summary{margin-bottom:10px}.segmented{display:flex;border:1px solid var(--line)}.segmented button{min-height:32px;padding:0 10px;border:0;border-left:1px solid var(--line);border-radius:0;background:var(--control-bg);color:var(--muted);font-size:12px;cursor:pointer}.segmented button:first-child{border-left:0}.segmented button.selected{background:var(--accent-bg);color:var(--accent-text)}.segmented button:disabled{opacity:.4;cursor:not-allowed}.board-type{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--line);color:var(--label);font-size:12px}.pattern-errors{margin-top:12px;color:var(--danger);font-size:11px}.pattern-errors p{margin:4px 0 0}.pattern-actions{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.display-board-page{position:fixed;inset:0;overflow:hidden;display:grid;place-items:center;margin:0;padding:12px 12px 60px;background:#fff;color:#111}.display-board-controls{position:absolute;right:8px;bottom:8px;padding:8px;border:1px solid #777;background:#fffffff5;color:#111}.display-board-controls .button.secondary{background:#e8e8e8;color:#111;border-color:#777}.display-board-target{flex:0 0 auto;background:#fff}.display-board-target svg{width:100%;height:100%;display:block}.display-board-loading,.display-board-error{color:#555;font-size:12px}.button-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.button{min-height:38px;display:inline-flex;align-items:center;justify-content:center;padding:0 13px;border:1px solid var(--line);border-radius:0;background:var(--button-bg);color:var(--text);font-size:12px;font-weight:600;text-decoration:none;cursor:pointer}.button:hover:not(:disabled){border-color:var(--line-strong);background:var(--button-hover)}.button:disabled{opacity:.4;cursor:not-allowed}.button.disabled{opacity:.4;pointer-events:none;cursor:not-allowed}.button.primary{border-color:var(--primary-line);background:var(--primary);color:#fff}.button.primary:hover:not(:disabled){background:var(--primary-hover)}.button.secondary{background:var(--button-bg)}.camera-mode-action{justify-content:flex-start}.file-button input{display:none}.file-button.disabled{opacity:.4;cursor:not-allowed}.camera-preview,.result-preview{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:0;background:var(--preview-bg)}.camera-preview.compact{aspect-ratio:16 / 8;margin-bottom:14px}.camera-preview video,.camera-preview canvas,.result-preview video,.result-preview canvas{width:100%;height:100%;display:block;object-fit:contain}.empty-preview{height:100%;min-height:150px;display:grid;place-content:center;justify-items:center;color:#8d959c;font-size:13px}.ready-dot,.idle-dot{display:flex;align-items:center;gap:7px;color:var(--label);font-size:12px}.ready-dot:before,.idle-dot:before{content:"";width:7px;height:7px;background:var(--success)}.idle-dot:before{background:var(--faint)}.settings-summary,.progress-list{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;margin:16px 0 0;border:1px solid var(--line);background:var(--line)}.settings-summary div,.progress-list div{padding:9px;background:var(--surface)}.settings-summary dt,.progress-list dt{color:var(--muted);font-size:10px}.settings-summary dd,.progress-list dd{margin:3px 0 0;font-size:12px;font-weight:650}.status{margin:0 0 12px;padding:10px 12px;border:1px solid var(--status-line);border-left:3px solid var(--accent);border-radius:0;background:var(--status-bg);color:var(--status-text);font-size:12px}.status-error{border-color:var(--error-line);border-left-color:var(--danger);background:var(--error-bg);color:var(--error-text)}.capture-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:12px}.camera-preview.live{aspect-ratio:16 / 9}.camera-preview.live canvas{position:absolute;inset:0;pointer-events:none}.view-counter{position:absolute;top:10px;right:10px;display:flex;align-items:baseline;gap:4px;padding:6px 8px;border:1px solid #5b6268;background:var(--overlay-bg);color:#fff;font-size:17px;font-weight:650}.view-counter small{color:var(--muted);font-size:10px;font-weight:400}.switch{display:flex;align-items:center;gap:7px;color:var(--label);font-size:12px}.switch input{position:static;opacity:1;margin:0}.switch span{display:none}.capture-message{min-height:44px;display:flex;align-items:center;gap:9px;padding-top:8px;font-size:12px}.signal{width:7px;height:7px;flex:0 0 auto;background:var(--warning)}.signal.good{background:var(--success)}.empty-capture{min-height:320px;display:grid;place-content:center;justify-items:center;gap:12px;border:1px dashed var(--line);color:var(--muted);font-size:13px}.coverage-metrics{display:grid;gap:9px;margin:14px 0}.coverage-metric{display:grid;gap:4px}.coverage-metric>div{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:10px}.coverage-metric strong{color:var(--text);font-variant-numeric:tabular-nums}.coverage-metric progress{width:100%;height:6px;overflow:hidden;border:0;border-radius:0;background:var(--button-bg);color:var(--accent);appearance:none}.coverage-metric progress::-webkit-progress-bar{background:var(--button-bg)}.coverage-metric progress::-webkit-progress-value{background:var(--accent)}.coverage-metric progress::-moz-progress-bar{background:var(--accent)}.progress-list{grid-template-columns:1fr;margin-top:0}.progress-list div{display:flex;align-items:center;justify-content:space-between}.capture-hint{margin:14px 0 0;color:var(--muted);font-size:12px;line-height:1.45}.import-groups{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.import-groups button{width:100%;display:flex;justify-content:space-between;margin-top:7px;padding:10px;border:1px solid var(--line);border-radius:0;background:var(--surface);color:inherit;cursor:pointer}.import-groups span{color:var(--muted)}.import-groups button:disabled{opacity:.4;cursor:not-allowed}.review-layout{display:grid;gap:12px}.review-summary{display:grid;grid-template-columns:1fr minmax(240px,340px) auto;align-items:center;gap:24px}.review-summary .muted{margin:5px 0 0}.review-summary .coverage-metrics{margin:0}.observation-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.observation-card{overflow:hidden;border:1px solid var(--line);background:var(--panel)}.observation-card.excluded{opacity:.45}.observation-image{position:relative;aspect-ratio:4 / 3;background:var(--preview-bg)}.observation-image img,.image-placeholder{width:100%;height:100%;object-fit:contain}.observation-image span{position:absolute;top:6px;left:6px;padding:3px 5px;border:1px solid #5a6167;background:var(--overlay-bg);color:#fff;font-size:10px}.observation-details{display:grid;gap:5px;padding:9px}.observation-details strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.observation-details small{color:var(--muted);font-size:10px}.results-layout{display:grid;grid-template-columns:1fr 1fr;gap:12px}.result-title{display:flex;align-items:center;justify-content:space-between;gap:18px}.result-title .muted{margin:5px 0 0;font-size:12px}.score{min-width:92px;display:grid;justify-items:center;padding:9px;border:1px solid var(--line);background:var(--surface);color:var(--text)}.score strong{font-size:20px}.score span{font-size:9px;text-transform:uppercase}.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;margin-top:18px;border:1px solid var(--line);background:var(--line)}.metric-grid div{display:grid;gap:4px;padding:10px;background:var(--surface)}.metric-grid .wide{grid-column:span 4}.metric-grid span{color:var(--muted);font-size:10px}.metric-grid strong{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.export-row{display:flex;flex-wrap:wrap;align-items:end;gap:8px;margin-top:16px}.export-format{min-width:210px;flex:1 1 210px}.result-preview{aspect-ratio:16 / 9}.full-width{grid-column:1 / -1}.health-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;border:1px solid var(--line);background:var(--line)}.health-metrics div{display:grid;gap:4px;padding:10px;background:var(--surface)}.health-metrics span{color:var(--muted);font-size:10px}.health-metrics strong{font-size:12px;font-variant-numeric:tabular-nums}.diagnostic-maps{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:18px}.diagnostic-map h3,.stability-summary h3,.subsection-title{margin:0 0 8px;font-size:12px}.heatmap{display:grid;gap:2px;aspect-ratio:3 / 2;padding:2px;border:1px solid var(--line);background:var(--surface)}.heat-cell{min-width:0;background:var(--button-bg)}.heat-cell.observed{background:var(--accent)}.stability-summary{margin-top:18px}.stability-summary dl{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;margin:0;border:1px solid var(--line);background:var(--line)}.stability-summary dl div{padding:9px;background:var(--surface)}.stability-summary dt{color:var(--muted);font-size:10px}.stability-summary dd{margin:3px 0 0;font-size:12px;font-weight:650}.diagnostic-warnings{display:grid;gap:6px;margin-top:16px}.diagnostic-warnings .status{margin:0}.subsection-title{margin-top:20px}.residual-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.residual-image img{object-fit:contain}.residual-image svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.residual-image line{stroke:var(--danger);stroke-width:1.5;vector-effect:non-scaling-stroke}.residual-image circle{fill:var(--accent);stroke:var(--preview-bg);stroke-width:1;vector-effect:non-scaling-stroke}.validation-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.validation-grid figure{min-width:0;margin:0;border:1px solid var(--line);background:var(--preview-bg)}.validation-grid img,.validation-grid canvas,.validation-grid .image-placeholder{width:100%;display:block;object-fit:contain}.validation-grid figcaption{padding:7px 9px;border-top:1px solid var(--line);background:var(--surface);color:var(--muted);font-size:10px}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;opacity:0;pointer-events:none}footer{min-height:50px;display:flex;align-items:center;justify-content:space-between;gap:14px;border-top:1px solid var(--line);color:var(--muted);font-size:10px}footer button,footer a{padding:4px 7px;border:0;border-bottom:1px solid var(--faint);background:transparent;color:var(--muted);cursor:pointer}.footer-actions{display:flex;align-items:center;gap:8px}.footer-file{padding:4px 7px;border-bottom:1px solid var(--faint);cursor:pointer}.footer-file input{display:none}.footer-file.disabled,footer button:disabled{opacity:.4;cursor:not-allowed}.footer-meta{display:flex;align-items:center;gap:14px}.modal-backdrop{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:20px;background:#000000c7}.modal{width:min(440px,100%);padding:22px;border:1px solid var(--line);background:var(--panel)}.modal h2{margin:0;font-size:17px}.modal p{color:var(--muted);line-height:1.45}@media(max-width:900px){.setup-layout,.capture-layout,.results-layout{grid-template-columns:1fr}.review-summary{grid-template-columns:1fr minmax(220px,300px)}.review-summary .button-row{grid-column:1 / -1}.observation-grid{grid-template-columns:repeat(3,1fr)}.health-metrics{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.app-shell{width:min(100% - 20px,1200px)}.site-header{min-height:48px}main{padding-top:20px}.stepper li{font-size:11px}.stepper button{justify-content:center;padding:0 5px}.stepper li span{display:none}.panel{padding:13px}.form-grid{grid-template-columns:1fr}.span-two{grid-column:span 1}.panel-heading,.result-title{align-items:flex-start}.board-type{align-items:flex-start;flex-direction:column}.settings-summary,.review-summary{grid-template-columns:1fr}.observation-grid,.metric-grid{grid-template-columns:repeat(2,1fr)}.metric-grid .wide{grid-column:span 2}.diagnostic-maps,.validation-grid,.stability-summary dl,.residual-grid{grid-template-columns:1fr}footer{flex-wrap:wrap;justify-content:center;padding:12px 0}.footer-actions,.footer-meta{flex-wrap:wrap;justify-content:center}}
