:root{--bg:#090d16;--panel:#0f1522;--panel2:#131b2b;--line:#263147;--text:#edf2ff;--muted:#8b98ae;--accent:#6ee7d8;--violet:#9b87f5;--danger:#fb7185;--amber:#fbbf24;--blue:#60a5fa;--shadow:0 24px 60px #0008}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:Inter,Pretendard,"Noto Sans KR",system-ui,sans-serif}body{background:radial-gradient(circle at 48% 20%,#15223e 0,#090d16 42%)}button,input,select{font:inherit}button{color:inherit}header{height:72px;display:flex;align-items:center;justify-content:space-between;padding:0 24px;border-bottom:1px solid var(--line);background:#0a0f19e8;backdrop-filter:blur(18px)}.brand{min-width:0}.brand h1{max-width:min(780px,calc(100vw - 410px));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}h1{font-size:20px;margin:1px 0 0;letter-spacing:-.02em}.eyebrow{font-size:9px;letter-spacing:.14em;color:var(--accent);margin:0;font-weight:800}.status{font-size:12px;color:var(--muted);display:flex;gap:8px;align-items:center}.pulse{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 14px var(--accent)}main{height:calc(100% - 72px);display:grid;grid-template-columns:264px minmax(400px,1fr) 318px}.left-panel,.right-panel{background:#0d131fdd;backdrop-filter:blur(20px);overflow:auto;z-index:2}.left-panel{border-right:1px solid var(--line);padding:18px 16px}.right-panel{border-left:1px solid var(--line)}section{margin-bottom:22px}h2{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:#a9b5c8;margin:0 0 10px}.segmented{display:grid;grid-template-columns:repeat(3,1fr);background:#080d16;padding:3px;border:1px solid var(--line);border-radius:8px}.segmented button,.tabs button{border:0;background:transparent;font-size:11px;padding:8px 3px;color:var(--muted);cursor:pointer;border-radius:6px}.segmented button.active{background:#202b40;color:white}select,input{width:100%;border:1px solid var(--line);background:#0a101b;color:var(--text);border-radius:7px;padding:9px 10px;outline:none}select:focus,input:focus{border-color:#5686c8}.search{position:relative}.search input{padding-right:34px}.search kbd{position:absolute;right:9px;top:8px;color:#6f7c91;background:#1b2433;border:1px solid #334057;border-radius:4px;padding:1px 5px}.search-results{position:absolute;width:230px;max-height:280px;overflow:auto;background:#111a29;border:1px solid #32405a;border-radius:8px;box-shadow:var(--shadow);z-index:20;display:none}.search-results.show{display:block}.search-item{padding:9px;border-bottom:1px solid #263147;cursor:pointer}.search-item:hover{background:#1b2940}.search-item strong{font-size:11px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-item span{font-size:9px;color:var(--muted)}.section-title{display:flex;justify-content:space-between}.text-button{border:0;background:transparent;color:var(--accent);font-size:10px;cursor:pointer}.check-list{display:grid;gap:7px}.check-list label{display:flex;align-items:center;gap:8px;font-size:11px;color:#c5cede}.check-list input{width:auto;accent-color:var(--accent)}.check-list em{margin-left:auto;font-style:normal;font-size:9px;color:#64748b}.scenario{border:1px solid var(--line);background:#111827;border-radius:8px;padding:10px;margin:7px 0;cursor:pointer}.scenario:hover{border-color:#536480}.scenario strong{display:block;font-size:10px}.scenario span{color:var(--muted);font-size:9px}.canvas-wrap{position:relative;overflow:hidden;margin:0}.toolbar{position:absolute;top:14px;left:14px;right:14px;z-index:4;display:flex;gap:6px;align-items:center;pointer-events:none}.toolbar button{pointer-events:auto;border:1px solid #34425b;background:#101827dd;padding:7px 10px;border-radius:6px;font-size:10px;cursor:pointer;backdrop-filter:blur(8px)}.toolbar button:hover{border-color:#64748b}.toolbar .divider{width:1px;height:22px;background:var(--line)}#visibleCount{font-size:10px;color:var(--muted)}#cy{width:100%;height:100%}.legend{position:absolute;bottom:16px;left:16px;background:#0b111ddd;border:1px solid var(--line);border-radius:9px;padding:9px 11px;display:flex;gap:12px;flex-wrap:wrap;max-width:70%;backdrop-filter:blur(10px)}.legend span{font-size:9px;color:var(--muted);display:flex;align-items:center;gap:5px}.legend i{width:8px;height:8px;border-radius:50%}.empty{display:none;position:absolute;inset:0;align-items:center;justify-content:center;flex-direction:column;color:var(--muted)}.empty.show{display:flex}.empty strong{color:white}.empty span{font-size:11px;margin-top:5px}.tabs{height:45px;display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--line);position:sticky;top:0;background:#0d131f;z-index:2}.tabs button{border-radius:0}.tabs button.active{color:var(--accent);border-bottom:2px solid var(--accent)}.tab-content{display:none;padding:16px}.tab-content.active{display:block}.placeholder{text-align:center;color:var(--muted);font-size:11px;padding:65px 20px}.placeholder span{font-size:30px;color:#42516a}.detail-head{padding-bottom:14px;border-bottom:1px solid var(--line)}.type-chip{display:inline-block;padding:3px 6px;border-radius:4px;background:#29344a;color:#b9c5d8;font-size:8px;letter-spacing:.08em}.detail-head h3{font-size:17px;margin:10px 0 4px;word-break:break-word}.detail-head code{font-size:9px;color:var(--muted);word-break:break-all}.risk{margin-left:6px}.risk.high,.risk.critical{background:#762a3b;color:#fecdd3}.property-grid{display:grid;grid-template-columns:95px 1fr;gap:8px;margin:15px 0;font-size:10px}.property-grid dt{color:var(--muted)}.property-grid dd{margin:0;word-break:break-all;color:#d9e1ef}.connection-stat{display:grid;grid-template-columns:1fr 1fr;gap:7px}.stat{background:#111a29;border:1px solid var(--line);border-radius:7px;padding:9px}.stat strong{display:block;font-size:16px}.stat span{font-size:9px;color:var(--muted)}.right-panel label{font-size:10px;color:var(--muted);display:block;margin:12px 0}.right-panel label input{margin-top:6px}.inline{display:flex;gap:12px;align-items:center}.inline label{flex:1}.inline label:first-child{display:flex;align-items:center;gap:6px}.inline label:first-child input{width:auto;margin:0}.primary{width:100%;border:1px solid var(--primary-border);border-radius:7px;background:var(--primary-bg);padding:10px;color:var(--primary-text);font-weight:700;font-size:11px;cursor:pointer;box-shadow:0 6px 18px var(--primary-shadow);transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease,transform .12s ease}.primary:hover{background:var(--primary-bg-hover);border-color:var(--primary-border-hover);box-shadow:0 8px 22px var(--primary-shadow-hover)}.primary:active{transform:translateY(1px);box-shadow:0 3px 10px var(--primary-shadow)}.primary:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.path-card{margin-top:12px;border:1px solid var(--line);border-radius:8px;padding:10px;font-size:10px}.path-card strong{color:var(--accent)}.path-step{padding:7px 0;border-bottom:1px solid #202b3d;word-break:break-all}.evidence-card{font-size:10px}.evidence-card a{color:var(--accent);word-break:break-all}.evidence-card pre{white-space:pre-wrap;word-break:break-all;background:#090e18;padding:10px;border-radius:7px;border:1px solid var(--line);color:#bfc9d8}@media(max-width:1050px){main{grid-template-columns:220px 1fr}.right-panel{position:absolute;right:0;top:72px;bottom:0;width:310px;box-shadow:var(--shadow)}.canvas-wrap{margin-right:310px}}@media(max-width:780px){main{grid-template-columns:1fr}.left-panel{display:none}.right-panel{width:280px}.canvas-wrap{margin-right:280px}.brand h1{max-width:calc(100vw - 145px);font-size:16px}}

/* Theme layer: dark is the original visual language; light uses the same semantic hierarchy. */
:root{
  color-scheme:dark;
  --header-bg:#0a0f19e8;--panel-glass:#0d131fdd;--control-bg:#0a101b;
  --control-raised:#101827dd;--surface:#111827;--surface-2:#111a29;
  --surface-active:#202b40;--heading:#a9b5c8;--subtle-text:#c5cede;
  --detail-text:#d9e1ef;--code-bg:#090e18;--graph-label:#dbe7f7;
  --graph-edge:#516078;--graph-edge-label:#a7b4c8;--graph-label-bg:#0b111d;
  --graph-neutral:#94a3b8;--focus-ring:#5686c8;--selection:#fff;
  --canvas-glow:#15223e;--danger-surface:#762a3b;--danger-text:#fecdd3;
  --primary-bg:#176f69;--primary-bg-hover:#1d8179;--primary-text:#fff;
  --primary-border:#389b91;--primary-border-hover:#63c8bd;
  --primary-shadow:#020b0a66;--primary-shadow-hover:#020b0a80;
}
[data-theme="light"]{
  color-scheme:light;
  --bg:#f3f6fb;--panel:#fff;--panel2:#f7f9fc;--line:#d5deea;
  --text:#182233;--muted:#617086;--accent:#087f74;--violet:#6d5bd0;
  --danger:#d93654;--amber:#b77905;--blue:#2671c9;
  --shadow:0 20px 48px #32435d24;--header-bg:#ffffffeb;--panel-glass:#ffffffeb;
  --control-bg:#fff;--control-raised:#ffffffeb;--surface:#f8fafc;--surface-2:#f2f6fa;
  --surface-active:#e7eef8;--heading:#526177;--subtle-text:#39485d;--detail-text:#27364a;
  --code-bg:#f2f5f9;--graph-label:#213047;--graph-edge:#91a0b4;--graph-edge-label:#46566d;
  --graph-label-bg:#fff;--graph-neutral:#718198;--focus-ring:#2777c8;--selection:#172033;
  --canvas-glow:#dfeafa;--danger-surface:#fde7eb;--danger-text:#a31636;
  --primary-bg:#087f74;--primary-bg-hover:#076a62;--primary-text:#fff;
  --primary-border:#087f74;--primary-border-hover:#065b54;
  --primary-shadow:#087f7429;--primary-shadow-hover:#087f7440;
}
html,body,header,.left-panel,.right-panel,.tabs,button,input,select,.legend,.search-results,.scenario,.stat,.evidence-card pre{transition:background-color .2s ease,color .2s ease,border-color .2s ease,box-shadow .2s ease}
body{background:radial-gradient(circle at 48% 20%,var(--canvas-glow) 0,var(--bg) 42%)}
header{background:var(--header-bg)}
.left-panel,.right-panel{background:var(--panel-glass)}
h2{color:var(--heading)}
.segmented{background:var(--bg)}
.segmented button.active{background:var(--surface-active);color:var(--text)}
select,input{background:var(--control-bg)}
select:focus,input:focus{border-color:var(--focus-ring);box-shadow:0 0 0 2px color-mix(in srgb,var(--focus-ring) 18%,transparent)}
.search kbd{color:var(--muted);background:var(--surface-active);border-color:var(--line)}
.search-results{background:var(--panel);border-color:var(--line)}
.search-item{border-color:var(--line)}.search-item:hover{background:var(--surface-active)}
.check-list label{color:var(--subtle-text)}.check-list em{color:var(--muted)}
.scenario,.stat{background:var(--surface)}.scenario:hover{border-color:var(--muted)}
.toolbar button{border-color:var(--line);background:var(--control-raised);box-shadow:0 4px 18px #0000000b}.toolbar button:hover{border-color:var(--muted)}
.legend{background:var(--panel-glass)}.empty strong{color:var(--text)}
.tabs{background:var(--panel)}
.placeholder span{color:var(--muted)}
.type-chip{background:var(--surface-active);color:var(--subtle-text)}
.risk.high,.risk.critical{background:var(--danger-surface);color:var(--danger-text)}
.property-grid dd{color:var(--detail-text)}
.path-step{border-color:var(--line)}
.evidence-card pre{background:var(--code-bg);color:var(--detail-text)}
.header-actions{display:flex;align-items:center;gap:16px}
.theme-control{display:grid;grid-template-columns:32px 32px 45px;gap:2px;padding:3px;background:var(--control-bg);border:1px solid var(--line);border-radius:9px}
.theme-control button{height:28px;border:0;border-radius:6px;background:transparent;color:var(--muted);font-size:12px;cursor:pointer}
.theme-control button:hover{color:var(--text);background:var(--surface-2)}
.theme-control button.active{color:var(--accent);background:var(--surface-active);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 25%,transparent)}
.theme-control button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
@media(max-width:780px){.theme-control{grid-template-columns:30px 30px}.theme-control [data-theme-choice="system"]{display:none}.header-actions{gap:8px}.status{display:none}}
@media(prefers-reduced-motion:reduce){html,body,header,.left-panel,.right-panel,.tabs,button,input,select,.legend,.search-results,.scenario,.stat,.evidence-card pre{transition:none}}

.option-row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;cursor:pointer;color:var(--subtle-text)}
.option-row span{min-width:0}.option-row strong{display:block;font-size:11px;font-weight:650}.option-row small{display:block;margin-top:3px;color:var(--muted);font-size:9px;line-height:1.35}
.option-row input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.option-row>i{position:relative;flex:0 0 auto;width:34px;height:19px;border:1px solid var(--line);border-radius:99px;background:var(--surface-active);transition:background .18s ease,border-color .18s ease}
.option-row>i::after{content:"";position:absolute;left:3px;top:3px;width:11px;height:11px;border-radius:50%;background:var(--muted);transition:transform .18s ease,background .18s ease}
.option-row input:checked+i{background:color-mix(in srgb,var(--accent) 22%,var(--surface));border-color:color-mix(in srgb,var(--accent) 62%,var(--line))}
.option-row input:checked+i::after{transform:translateX(15px);background:var(--accent)}
.option-row input:focus-visible+i{outline:2px solid var(--focus-ring);outline-offset:2px}
.node-tooltip{position:fixed;left:0;top:0;z-index:30;width:min(310px,calc(100vw - 24px));padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel-glass);box-shadow:var(--shadow);backdrop-filter:blur(16px);pointer-events:none;opacity:0;visibility:hidden;transform:translate3d(0,4px,0) scale(.98);transform-origin:top left;transition:opacity .12s ease,transform .12s ease,visibility 0s linear .12s}
.node-tooltip.show{opacity:1;visibility:visible;transform:translate3d(0,0,0) scale(1);transition-delay:0s}
.node-tooltip-head{display:flex;align-items:center;gap:7px;margin-bottom:7px}.node-tooltip-dot{width:8px;height:8px;flex:0 0 auto;border-radius:50%;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 14%,transparent)}
.node-tooltip-type{font-size:8px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.node-tooltip h3{margin:0 0 8px;font-size:13px;line-height:1.35;word-break:break-word}
.node-tooltip dl{display:grid;grid-template-columns:72px minmax(0,1fr);gap:5px 8px;margin:0;font-size:9px;line-height:1.45}.node-tooltip dt{color:var(--muted)}.node-tooltip dd{margin:0;color:var(--detail-text);word-break:break-word;overflow:hidden;text-overflow:ellipsis}.node-tooltip-foot{display:flex;justify-content:space-between;gap:10px;margin-top:9px;padding-top:7px;border-top:1px solid var(--line);font-size:8px;color:var(--muted)}
.zoom-controls{pointer-events:auto;display:flex;align-items:center;gap:5px;padding:3px;border:1px solid var(--line);border-radius:8px;background:var(--control-raised);box-shadow:0 4px 18px #0000000b;backdrop-filter:blur(8px)}
.toolbar .zoom-controls button{width:27px;height:25px;padding:0;border:0;background:transparent;font-size:16px;line-height:1;box-shadow:none;backdrop-filter:none}.toolbar .zoom-controls button:hover{border:0;background:var(--surface-active);color:var(--accent)}
.toolbar .zoom-controls button:disabled{opacity:.32;cursor:not-allowed;background:transparent;color:var(--muted)}
.toolbar .zoom-controls .zoom-value{width:43px;font-size:9px;font-variant-numeric:tabular-nums;color:var(--muted)}
#zoomSlider{width:112px;height:18px;margin:0;padding:0;border:0;background:transparent;box-shadow:none;cursor:pointer;accent-color:var(--accent);-webkit-appearance:none}
#zoomSlider:focus{border:0;box-shadow:none}#zoomSlider:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;border-radius:4px}
#zoomSlider::-webkit-slider-runnable-track{height:3px;border-radius:99px;background:linear-gradient(90deg,var(--accent),var(--line))}
#zoomSlider::-webkit-slider-thumb{width:12px;height:12px;margin-top:-4.5px;border:2px solid var(--panel);border-radius:50%;background:var(--accent);box-shadow:0 1px 5px #0004;-webkit-appearance:none}
#zoomSlider::-moz-range-track{height:3px;border-radius:99px;background:var(--line)}#zoomSlider::-moz-range-progress{height:3px;border-radius:99px;background:var(--accent)}#zoomSlider::-moz-range-thumb{width:10px;height:10px;border:2px solid var(--panel);border-radius:50%;background:var(--accent)}
@media(max-width:1200px){#zoomSlider{width:80px}.toolbar .zoom-controls .zoom-value{display:none}}
@media(max-width:900px){.zoom-controls{position:absolute;top:42px;left:0}.toolbar>.divider:nth-of-type(2){display:none}}
@media(prefers-reduced-motion:reduce){.option-row>i,.option-row>i::after,.node-tooltip{transition:none}}
