:root{--bg:#eaeef4;--bg-grad:radial-gradient(1200px 600px at 18% -10%, #f1f5fb 0%, #e7ecf3 55%, #e4e9f1 100%);--panel:#fff;--panel-2:#f6f8fb;--ink:#0e1726;--ink-soft:#46566b;--muted:#8593a6;--border:#e6eaf1;--border-strong:#d3dae5;--primary:#1f54da;--primary-deep:#1842b8;--primary-soft:#eef3ff;--primary-ink:#fff;--danger:#dc2626;--ok:#15803d;--ok-soft:#f0fdf4;--warn:#b45309;--shadow-sm:0 1px 2px #1018280f;--shadow:0 1px 2px #1018280d, 0 6px 16px -4px #10182814, 0 18px 40px -12px #1018281f;--shadow-panel:0 1px 0 #10182808;--radius:16px;--radius-sm:9px;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;font:14.5px/1.5 system-ui,Segoe UI,Roboto,-apple-system,sans-serif}body{background:var(--bg-grad);background-attachment:fixed}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}button{font:inherit}.layout{flex-direction:column;height:100dvh;min-height:0;display:flex}.layout.booting .topbar{animation:.5s both bootFade}.layout.booting .patient-bar{animation:.5s 60ms both bootFade}.layout.booting .stage-wrap{animation:.6s cubic-bezier(.22,1,.36,1) .12s both bootRise}.layout.booting .panel{animation:.6s cubic-bezier(.22,1,.36,1) .18s both bootRise}@keyframes bootFade{0%{opacity:0;transform:translateY(-6px)}}@keyframes bootRise{0%{opacity:0;transform:translateY(10px)}}@media (prefers-reduced-motion:reduce){.layout.booting .topbar,.layout.booting .patient-bar,.layout.booting .stage-wrap,.layout.booting .panel{animation:none}}.topbar{background:var(--panel);border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;gap:16px;padding:11px 22px;display:flex}.brand{align-items:center;gap:12px;min-width:0;display:flex}.brand .dot{background:linear-gradient(135deg,#3b82f6,#1d4ed8);border-radius:5px;flex:none;width:16px;height:16px;box-shadow:inset 0 0 0 2px #ffffff8c,0 2px 6px #1d4ed866}.brand-text{flex-direction:column;line-height:1.15;display:flex}.brand h1{letter-spacing:-.01em;margin:0;font-size:17px;font-weight:680}.subtitle{color:var(--muted);font-size:11.5px;font-weight:500}.badge{letter-spacing:.03em;text-transform:uppercase;color:var(--warn);white-space:nowrap;background:#fff7ed;border:1px solid #fed7aa;border-radius:999px;padding:4px 9px;font-size:10.5px;font-weight:700}.status{flex:none;align-items:center;gap:12px;display:flex}.status-zoom{color:var(--ink-soft);font-size:12.5px}.status-k{color:var(--muted);font-weight:600}.zoom{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:700}.coord-ok{white-space:nowrap;color:var(--ok);background:linear-gradient(#f3fdf6,#ecfdf2);border:1px solid #bbf2cd;border-radius:999px;align-items:center;gap:9px;padding:5px 13px 5px 11px;transition:background .25s,color .25s,border-color .25s;display:inline-flex;box-shadow:0 1px 2px #1018280d,inset 0 1px #ffffffb3}.coord-pulse{background:#22c55e;border-radius:50%;flex:none;width:9px;height:9px;animation:2.4s ease-out infinite coordPulse;box-shadow:0 0 #22c55e80}@keyframes coordPulse{0%{box-shadow:0 0 #22c55e80}70%{box-shadow:0 0 0 7px #22c55e00}to{box-shadow:0 0 #22c55e00}}.coord-text{flex-direction:column;line-height:1.15;display:flex}.coord-label{letter-spacing:-.005em;font-size:12px;font-weight:700}.coord-metric{color:#2f9e5f;font-size:10.5px;font-weight:600}.coord-metric b{font-variant-numeric:tabular-nums;color:var(--ok);font-weight:800}.coord-ok.flash{color:#0e7490;background:linear-gradient(#eefcff,#e6faff);border-color:#a5e8f3}.coord-ok.flash .coord-pulse{background:#06b6d4;animation:none}.coord-ok.flash-warn{color:var(--warn);background:linear-gradient(#fffbeb,#fff7e6);border-color:#fcd9a3}.coord-ok.flash-warn .coord-pulse{background:#f59e0b;animation:none}@media (prefers-reduced-motion:reduce){.coord-pulse{animation:none}}.patient-bar{background:var(--panel);border-bottom:1px solid var(--border);flex:none;align-items:center;gap:14px;padding:10px 22px;display:flex}.avatar{color:#fff;letter-spacing:.02em;background:linear-gradient(135deg,#64748b,#475569);border-radius:50%;flex:none;justify-content:center;align-items:center;width:38px;height:38px;font-size:13px;font-weight:700;display:flex}.pt-main{min-width:0}.pt-name{align-items:center;gap:9px;font-size:15px;font-weight:700;display:flex}.pt-flag{letter-spacing:.05em;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:2px 7px;font-size:9.5px;font-weight:700}.pt-flag[hidden]{display:none}.pt-sample{color:var(--primary-deep);background:var(--primary-soft);border-color:#cdddff}.pt-sub{color:var(--ink-soft);flex-wrap:wrap;gap:4px 18px;margin-top:2px;font-size:12.5px;display:flex}.pt-k{color:var(--muted);margin-right:4px;font-weight:600}.main{flex:auto;min-height:0;display:flex}.stage-wrap{flex-direction:column;flex:auto;gap:12px;min-width:0;padding:16px;display:flex}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.tb-group{align-items:center;gap:8px;display:flex}.toolbar .spacer{flex:auto}.btn{appearance:none;border:1px solid var(--border-strong);background:var(--panel);color:var(--ink);border-radius:var(--radius-sm);cursor:pointer;box-shadow:var(--shadow-sm);padding:8px 14px;font-weight:650;transition:background .15s,border-color .15s,box-shadow .15s,transform 50ms}.btn:hover{background:var(--panel-2);border-color:#b9c4d4}.btn:active{transform:translateY(1px)}.btn:focus-visible{outline-offset:2px;outline:2px solid #1d4ed866}.btn-primary{background:var(--primary);border-color:var(--primary);color:var(--primary-ink);box-shadow:0 2px 8px #1d4ed847}.btn-primary:hover{background:#1842b8;border-color:#1842b8}.btn-danger{color:var(--danger);background:#fff;border-color:#f3c9c9}.btn-danger:hover{background:#fef2f2;border-color:#eab0b0}.btn-ghost{color:var(--ink-soft);background:var(--panel-2)}.zoom-group{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--panel);box-shadow:var(--shadow-sm);gap:0;padding:2px}.zoom-group .btn-icon{box-shadow:none;background:0 0;border:none}.zoom-group .btn-icon:hover{background:var(--panel-2)}.zoom-mini{text-align:center;font-variant-numeric:tabular-nums;min-width:48px;color:var(--ink-soft);-webkit-user-select:none;user-select:none;font-size:13px;font-weight:700}.btn-icon{text-align:center;border-radius:7px;width:34px;padding:7px 0;font-size:18px;line-height:1}.btn-block{width:100%}.stage{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);min-height:0;box-shadow:var(--shadow);flex:auto;position:relative;overflow:hidden}.stage:after{content:"";border-radius:inherit;pointer-events:none;z-index:5;position:absolute;inset:0;box-shadow:inset 0 0 0 1px #fff9,inset 0 1px 30px #1018280a}#svg{touch-action:none;-webkit-user-select:none;user-select:none;cursor:crosshair;width:100%;height:100%;display:block}.region-guides{pointer-events:none}.marker{cursor:grab}.marker:active{cursor:grabbing}.marker-dot,.marker-core{transition:stroke-width .12s,r .12s,filter .12s}.marker:not(.marker-overlay):hover .marker-dot{stroke-width:4px}.marker.selected .marker-dot{stroke-width:4.6px;filter:drop-shadow(0 0 5px #1f54da8c)}.marker.selected .marker-core{r:6}.marker-label{fill:#0f172a;paint-order:stroke;stroke:#fff;stroke-width:3.4px;pointer-events:none;font-variant-numeric:tabular-nums;font-size:11px;font-weight:800}.marker-overlay{cursor:default}.marker-enter{animation:.26s cubic-bezier(.34,1.56,.64,1) markerPop}@keyframes markerPop{0%{opacity:0}40%{opacity:1}}@media (prefers-reduced-motion:reduce){.marker-enter{animation:none}}.legend{z-index:6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--border);box-shadow:var(--shadow-sm);color:var(--ink-soft);background:#ffffffeb;border-radius:10px;flex-wrap:wrap;gap:6px 14px;padding:8px 12px;font-size:12px;font-weight:600;display:flex;position:absolute;bottom:14px;left:14px}.legend-item{align-items:center;gap:7px;display:inline-flex}.legend-swatch{border:3px solid var(--c);background:#fff;border-radius:50%;width:11px;height:11px}.empty-state{z-index:6;pointer-events:none;justify-content:center;align-items:center;padding:20px;display:flex;position:absolute;inset:0}.empty-state[hidden]{display:none}.empty-card{text-align:center;border:1px dashed var(--border-strong);border-radius:var(--radius);pointer-events:none;background:#ffffff9e;max-width:320px;padding:22px 26px}.empty-icon{background:var(--primary-soft);width:44px;height:44px;color:var(--primary);border-radius:50%;justify-content:center;align-items:center;margin-bottom:10px;font-size:26px;font-weight:400;display:inline-flex}.empty-title{color:var(--ink);margin:0 0 4px;font-size:15px;font-weight:700}.empty-sub{color:var(--muted);margin:0;font-size:12.5px}.drop-hint{z-index:7;color:var(--primary);border:3px dashed var(--primary);border-radius:var(--radius);opacity:0;pointer-events:none;background:#1d4ed812;justify-content:center;align-items:center;font-weight:700;transition:opacity .15s;display:flex;position:absolute;inset:0}.drop-hint.show{opacity:1}.hint{color:var(--muted);text-align:center;margin:0;font-size:12px}.panel{border-left:1px solid var(--border);background:var(--panel);flex-direction:column;flex:0 0 332px;display:flex;overflow-y:auto}.panel-section{border-bottom:1px solid var(--border);padding:16px 18px}.panel-section h2{text-transform:uppercase;letter-spacing:.07em;color:var(--muted);align-items:center;gap:8px;margin:0 0 12px;font-size:11.5px;font-weight:700;display:flex}.count{background:var(--panel-2);color:var(--ink-soft);border-radius:999px;padding:1px 9px;font-size:12px;font-weight:700}.muted{color:var(--muted);margin:0}.criteria{background:linear-gradient(#fbfdff,#eef4ff);border-bottom:1px solid #dde7fb}.live-dot{letter-spacing:.08em;color:var(--ok);background:var(--ok-soft);border:1px solid #bbf7d0;border-radius:999px;margin-left:auto;padding:2px 8px 2px 16px;font-size:9.5px;font-weight:800;position:relative}.live-dot:before{content:"";background:var(--ok);border-radius:50%;width:5px;height:5px;animation:1.6s ease-in-out infinite livePulse;position:absolute;top:50%;left:7px;transform:translateY(-50%)}@keyframes livePulse{0%,to{opacity:1}50%{opacity:.25}}.criteria-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.crit-item{border:1px solid var(--border);background:var(--panel);box-shadow:var(--shadow-sm);border-radius:11px;gap:10px;padding:9px 11px;transition:border-color .25s,background .25s,box-shadow .25s;display:flex}.crit-item.pass{background:linear-gradient(#f4fdf7,#ecfdf2);border-color:#b6efc7;box-shadow:0 1px 2px #1018280a,inset 0 0 0 1px #22c55e0f}.crit-mark{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:12px;font-weight:800;display:flex}.crit-item.pass .crit-mark{background:var(--ok)}.crit-item.pending .crit-mark{color:var(--muted);border:1.5px solid var(--border-strong);background:#fff}.crit-body{flex-direction:column;min-width:0;display:flex}.crit-title{color:var(--ink);font-size:12.5px;font-weight:650;line-height:1.3}.crit-detail{color:var(--ink-soft);font-variant-numeric:tabular-nums;margin-top:2px;font-size:11.5px}.crit-item.pass .crit-detail{color:var(--ok)}.total-cat{margin-bottom:12px}.total-cat:last-child{margin-bottom:0}.total-cat-head{align-items:center;gap:8px;margin-bottom:4px;display:flex}.swatch{border-radius:3px;flex:none;width:11px;height:11px}.t-cat-name{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);font-size:11px;font-weight:700}.total-row{justify-content:space-between;align-items:baseline;gap:10px;padding:3px 0 3px 19px;display:flex}.t-name{color:var(--ink);font-weight:550}.t-val{font-variant-numeric:tabular-nums;color:var(--ink);white-space:nowrap;font-weight:700}.t-unit{color:var(--muted);font-size:12px;font-weight:600}.editor label{text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin-bottom:12px;font-size:11.5px;font-weight:700;display:block}.editor select,.editor input{width:100%;font:inherit;text-transform:none;letter-spacing:0;color:var(--ink);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:#fff;margin-top:6px;padding:9px 11px;font-weight:500;display:block}.editor select:focus,.editor input:focus{border-color:var(--primary);outline:2px solid #1d4ed852}.unit-tag{color:var(--ink-soft);text-transform:none;letter-spacing:0;font-weight:700}.editor-actions{margin-top:4px}.editor:not([hidden]){animation:.2s panelIn}@keyframes panelIn{0%{opacity:0;transform:translateY(-4px)}}@media (prefers-reduced-motion:reduce){.editor:not([hidden]){animation:none}}.list-section{flex:auto}.point-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.point-item{border:1px solid var(--border);cursor:pointer;border-radius:10px;align-items:center;gap:10px;padding:8px 9px;transition:border-color .12s,background .12s,box-shadow .12s;display:flex}.point-item:hover{background:var(--panel-2);border-color:var(--border-strong)}.point-item.active{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 1px var(--primary) inset}.pi-idx{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:700;display:flex;box-shadow:0 1px 2px #0f172a33}.pi-body{flex-direction:column;flex:auto;min-width:0;display:flex}.pi-product{white-space:nowrap;text-overflow:ellipsis;font-weight:650;overflow:hidden}.pi-meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.pi-del{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:5px 7px;font-size:13px;line-height:1}.pi-del:hover{color:var(--danger);background:#fef2f2}.visit-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.visit-empty{padding:4px 0;font-size:12.5px}.visit-item{border:1px solid var(--border);border-radius:10px;align-items:center;gap:9px;padding:8px 9px;transition:border-color .15s,background .15s,box-shadow .15s;display:flex}.visit-item.overlaid{border-color:color-mix(in srgb, var(--c,#7c3aed) 55%, var(--border));background:color-mix(in srgb, var(--c,#7c3aed) 7%, #fff)}.visit-swatch{border:3px solid var(--c,#7c3aed);background:#fff;border-radius:50%;flex:none;width:11px;height:11px}.visit-body{flex-direction:column;flex:auto;min-width:0;display:flex}.visit-label{white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:7px;font-size:13px;font-weight:650;display:flex;overflow:hidden}.visit-latest{letter-spacing:.05em;text-transform:uppercase;color:var(--primary);background:var(--primary-soft);border-radius:4px;padding:1px 6px;font-size:9px;font-weight:800}.visit-meta{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.visit-toggle{border:1px solid var(--border-strong);color:var(--ink-soft);cursor:pointer;background:#fff;border-radius:7px;flex:none;padding:4px 10px;font-size:11.5px;font-weight:650;transition:background .15s,color .15s,border-color .15s}.visit-toggle:hover{background:var(--panel-2)}.visit-toggle.on{background:var(--primary);border-color:var(--primary);color:#fff}.visit-del{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;padding:4px 5px;font-size:12px;line-height:1}.visit-del:hover{color:var(--danger);background:#fef2f2}.modal{z-index:50;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.modal[hidden]{display:none}.modal-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0f172a80;animation:.18s fadeIn;position:absolute;inset:0}.modal-card{background:var(--panel);border-radius:16px;flex-direction:column;width:min(880px,100%);max-height:90dvh;animation:.22s cubic-bezier(.22,1,.36,1) modalPop;display:flex;position:relative;overflow:hidden;box-shadow:0 24px 60px #0f172a52}@keyframes fadeIn{0%{opacity:0}}@keyframes modalPop{0%{opacity:0;transform:translateY(8px)scale(.985)}}@media (prefers-reduced-motion:reduce){.modal-backdrop,.modal-card{animation:none}}.modal-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-head h2{color:var(--ink);text-transform:none;letter-spacing:0;margin:0;font-size:16px;font-weight:700}.modal-close{background:var(--panel-2);color:var(--ink-soft);cursor:pointer;border:none;border-radius:8px;width:30px;height:30px;font-size:14px;line-height:1}.modal-close:hover{color:var(--ink);background:#e9eef5}.modal-body{padding:20px;overflow:auto}body.modal-open{overflow:hidden}.cmp-controls{flex-wrap:wrap;gap:14px;margin-bottom:14px;display:flex}.cmp-pick{text-transform:uppercase;letter-spacing:.03em;color:var(--muted);flex:240px;font-size:11.5px;font-weight:700}.cmp-pick select{width:100%;font:inherit;text-transform:none;letter-spacing:0;color:var(--ink);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:#fff;margin-top:5px;padding:8px 10px;font-weight:500;display:block}.cmp-stage{aspect-ratio:1;border:1px solid var(--border);touch-action:none;-webkit-user-select:none;user-select:none;background:#f4f8fc;border-radius:12px;width:100%;max-height:56dvh;margin:0 auto;position:relative;overflow:hidden}.cmp-before,.cmp-after{position:absolute;inset:0}.cmp-before{z-index:2}.cmp-stage .snap-svg{width:100%;height:100%;display:block}.cmp-divider{z-index:4;cursor:ew-resize;touch-action:none;background:#fff;width:3px;position:absolute;top:0;bottom:0;transform:translate(-50%);box-shadow:0 0 0 1px #0f172a26}.cmp-handle{width:34px;height:34px;color:var(--ink);background:#fff;border-radius:50%;justify-content:center;align-items:center;font-size:15px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0f172a47}.cmp-tag{letter-spacing:.06em;color:#fff;z-index:3;background:#0f172ab8;border-radius:999px;padding:3px 9px;font-size:10.5px;font-weight:800;position:absolute;top:10px}.cmp-tag-before{left:10px}.cmp-tag-after{right:10px}.cmp-hint{text-align:center;color:var(--muted);margin:12px 0 0;font-size:12px}.snap-label{fill:#0f172a;paint-order:stroke;stroke:#fff;stroke-width:6px;font-family:system-ui,sans-serif;font-size:22px;font-weight:800}.export-sheet{color:#0f172a;background:#fff}.ex-head{border-bottom:2px solid var(--ink);flex-wrap:wrap;justify-content:space-between;gap:20px;padding-bottom:14px;display:flex}.ex-title{margin:0;font-size:19px;font-weight:750}.ex-flag{letter-spacing:.04em;color:var(--warn);text-transform:uppercase;margin:3px 0 0;font-size:11px;font-weight:600}.ex-meta{grid-template-columns:1fr 1fr;gap:2px 20px;font-size:12.5px;display:grid}.ex-meta span{color:var(--muted);margin-right:6px;font-weight:600}.ex-grid{grid-template-columns:1.1fr 1fr;align-items:start;gap:22px;margin:18px 0;display:grid}.ex-map .snap-svg{border:1px solid var(--border);background:#f4f8fc;border-radius:10px;width:100%;height:auto}.ex-summary h4,.ex-pts-title{color:var(--ink);margin:0 0 8px;font-size:13px;font-weight:700}.sum-table,.pt-table{border-collapse:collapse;width:100%;font-size:12.5px}.sum-table td{border-bottom:1px solid var(--border);padding:4px 6px}.sum-table .sum-cat td{border-bottom:none;padding-top:9px;font-weight:700}.pt-table th,.pt-table td{text-align:left;border-bottom:1px solid var(--border);padding:6px 8px}.pt-table thead th{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:11px}.num{text-align:right;font-variant-numeric:tabular-nums}.pt-table td.num:first-child,.pt-table th.num:first-child{text-align:right;width:36px}.sum-table .swatch,.pt-table .swatch{vertical-align:middle;margin-right:7px;display:inline-block}.export-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}@media (width<=860px){.main{flex-direction:column}.panel{border-left:none;border-top:1px solid var(--border);flex:none;max-height:46vh}.pt-sub span:nth-child(n+3){display:none}.ex-grid{grid-template-columns:1fr}.cmp-controls{flex-direction:column;gap:10px}}@media (width<=560px){.topbar{flex-wrap:wrap;gap:8px 12px}.subtitle{display:none}.badge{order:3}.toolbar .btn{padding:8px 11px}.modal{padding:0}.modal-card{border-radius:0;width:100%;max-height:100dvh}.ex-meta{grid-template-columns:1fr}}@media (pointer:coarse){.btn,.visit-toggle,.pi-del,.visit-del{min-height:40px}.btn-icon{min-width:40px}}@media print{body{background:#fff}.layout>.topbar,.layout>.patient-bar,.layout>.main,.modal-backdrop,.modal-head,.no-print{display:none!important}.modal{padding:0;display:block;position:static}.modal-card{box-shadow:none;border-radius:0;width:100%;max-height:none}.modal-body{padding:0;overflow:visible}.export-sheet{padding:0}.ex-grid{page-break-inside:avoid}.pt-table{page-break-inside:auto}.pt-table tr{page-break-inside:avoid}}
