@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Noto+Sans+KR:wght@400;500;600;700&family=Noto+Serif+KR:wght@500;600;700&display=swap');
:root{--bg:#061019;--panel:#091722;--panel2:#0c1d2a;--line:#223848;--text:#e9f0f4;--muted:#8ca0ad;--cyan:#45d8ed;--blue:#4696ff;--amber:#e8b85e;--red:#ff6d64;--green:#5de0a3}*{box-sizing:border-box}html{background:var(--bg);scroll-behavior:smooth}body{margin:0;background:radial-gradient(circle at 70% 5%,#102c3e 0,transparent 35%),var(--bg);color:var(--text);font-family:'Noto Sans KR',sans-serif;word-break:keep-all}a{color:inherit;text-decoration:none}.tess-header{height:76px;padding:0 clamp(18px,4vw,64px);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);background:#061019e8;backdrop-filter:blur(16px);position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:12px}.brand img{width:36px}.brand b,.brand small{display:block}.brand b{font:600 13px 'IBM Plex Mono';letter-spacing:.16em}.brand small{color:var(--muted);font-size:10px;margin-top:4px}.tess-header nav{display:flex;gap:25px;color:var(--muted);font:500 11px 'IBM Plex Mono'}.tess-header nav a:hover{color:var(--cyan)}main{max-width:1700px;margin:auto}.lab-heading{padding:70px clamp(20px,5vw,82px) 52px;display:grid;grid-template-columns:1fr 1fr;gap:8vw;align-items:end}.eyebrow{font:600 10px 'IBM Plex Mono';letter-spacing:.16em;color:var(--cyan)}.lab-heading h1{font:600 clamp(40px,6vw,84px)/1.14 'Noto Serif KR';letter-spacing:-.055em;margin:20px 0 0}.abstract{max-width:680px;color:#b3c1ca;font-size:17px;line-height:2;margin:0;border-left:1px solid var(--cyan);padding-left:28px}.workspace{margin:0 clamp(12px,2.5vw,42px);display:grid;grid-template-columns:230px minmax(480px,1fr) 255px;border:1px solid var(--line);background:#07131c;min-height:700px}.control-panel,.analysis-panel{padding:24px 20px;background:#081620}.control-panel{border-right:1px solid var(--line)}.analysis-panel{border-left:1px solid var(--line)}.panel-title{padding-bottom:24px;border-bottom:1px solid var(--line)}.panel-title span,.map-meta span,.quality span,.run-status span{display:block;color:#667f8e;font:500 9px 'IBM Plex Mono';letter-spacing:.12em}.panel-title b{display:block;font:500 38px 'IBM Plex Mono';margin:10px 0 4px}.panel-title small{color:var(--muted)}.control-group{padding:27px 0;border-bottom:1px solid var(--line)}.control-group h2,.analysis-panel h2{font-size:11px;letter-spacing:.08em;color:#97abb7;margin:0 0 18px}.control-group label{display:grid;grid-template-columns:18px 12px 1fr auto;align-items:center;gap:8px;margin:15px 0;color:#c3cfd6;font-size:12px;cursor:pointer}.control-group label input{accent-color:var(--cyan)}.control-group label span{width:8px;height:8px;background:var(--blue)}.control-group label:nth-of-type(2) span{background:var(--red)}.control-group label:nth-of-type(3) span{background:var(--cyan)}.control-group label:nth-of-type(4) span{background:var(--green)}.control-group label b{font:500 10px 'IBM Plex Mono';color:#708795}.altitude output{font:500 28px 'IBM Plex Mono';color:var(--cyan)}.altitude input{width:100%;margin:22px 0 7px;accent-color:var(--cyan)}.altitude>div{display:flex;justify-content:space-between;color:#607886;font:9px 'IBM Plex Mono'}.quality{margin-top:28px;padding:18px;background:#0b2230;border:1px solid #23485b}.quality b{display:block;font:500 36px 'IBM Plex Mono';color:var(--amber);margin:8px 0}.quality p{font-size:11px;line-height:1.7;color:var(--muted);margin:0}.map-panel{min-width:0;position:relative;overflow:hidden}.map-meta{display:grid;grid-template-columns:1fr 1.5fr .7fr;border-bottom:1px solid var(--line)}.map-meta>div{padding:15px 18px;border-right:1px solid var(--line)}.map-meta>div:last-child{border:0}.map-meta b{display:block;margin-top:5px;font:500 10px 'IBM Plex Mono';color:#b7cad4}#city-map{display:block;width:100%;height:auto;min-height:590px;background:linear-gradient(#081824,#061019)}#city-map .base{fill:#06121b}.grid{opacity:.7}#terrain-layer path{fill:none;stroke:#18394b;stroke-width:2;stroke-dasharray:4 8}.building .roof{fill:#294b60;stroke:#5c8094}.building .side{fill:#163548;stroke:#4d7185}.building .front{fill:#102b3c;stroke:#4d7185}.building text{fill:#91abba;font:500 11px 'IBM Plex Mono'}.building.hidden,#restricted-layer.hidden,#route-layer.hidden,#emergency-layer.hidden{display:none}#restricted-layer ellipse{fill:#ff6d6412;stroke:var(--red);stroke-width:2;stroke-dasharray:8 7}#restricted-layer path{stroke:#ff6d6470;stroke-width:1.5;stroke-dasharray:5 8}#restricted-layer text{fill:#ff8a82;text-anchor:middle;font:500 11px 'IBM Plex Mono'}#route-layer .route-shadow{fill:none;stroke:#061019;stroke-width:13}#route-layer .route{fill:none;stroke:var(--cyan);stroke-width:4;stroke-dasharray:10 7;filter:url(#glow)}#route-layer .drone{fill:#fff;stroke:var(--cyan);stroke-width:4;filter:url(#glow)}#route-layer text{fill:var(--cyan);font:500 11px 'IBM Plex Mono'}#emergency-layer circle{fill:#5de0a31c;stroke:var(--green);stroke-width:2;stroke-dasharray:5 5}#emergency-layer text{fill:var(--green);font:500 11px 'IBM Plex Mono'}.ports circle{fill:#07131c;stroke-width:4}.ports .start{stroke:var(--blue)}.ports .goal{stroke:var(--amber)}.ports text{fill:#c2d0d8;font:500 10px 'IBM Plex Mono'}.scale path{stroke:#738b98}.scale text{fill:#738b98;font:10px 'IBM Plex Mono'}.legend{position:absolute;left:18px;bottom:15px;display:flex;flex-wrap:wrap;gap:15px;padding:10px 12px;background:#061019d9;border:1px solid var(--line);font-size:10px;color:#8fa4af}.legend span:before{content:'';display:inline-block;width:18px;height:2px;vertical-align:middle;margin-right:7px;background:var(--cyan)}.legend .l-zone:before{background:var(--red)}.legend .l-emergency:before{background:var(--green)}.legend .l-building:before{background:#5c8094}.run-status{padding-bottom:25px;border-bottom:1px solid var(--line)}.run-status b{display:block;color:var(--green);font:600 31px 'IBM Plex Mono';margin:8px 0}.run-status small{color:var(--muted)}.analysis-panel dl{margin:0}.analysis-panel dl div{display:flex;justify-content:space-between;align-items:end;padding:18px 0;border-bottom:1px solid var(--line)}.analysis-panel dt{color:var(--muted);font-size:11px}.analysis-panel dd{margin:0;font:500 20px 'IBM Plex Mono'}.analysis-panel dd small{font-size:10px}.analysis-panel section{padding:24px 0;border-bottom:1px solid var(--line)}.analysis-panel p,.analysis-panel li{color:#9aadb8;font-size:11px;line-height:1.75}.analysis-panel ul{padding-left:17px;margin:0}.analysis-panel li{margin:7px 0}.method{padding:100px clamp(20px,5vw,82px);display:grid;grid-template-columns:.8fr 1.2fr;gap:7vw}.method h2{font:600 clamp(30px,4vw,54px)/1.45 'Noto Serif KR';letter-spacing:-.04em}.method h2 em{font-style:normal;color:var(--cyan)}.method ol{margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;list-style:none;border-top:1px solid var(--line);border-left:1px solid var(--line)}.method li{padding:26px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.method li b{font:500 10px 'IBM Plex Mono';color:var(--cyan)}.method h3{font:600 20px 'Noto Serif KR';margin:28px 0 10px}.method li p{color:var(--muted);font-size:13px;line-height:1.8}.boundary{margin:0 clamp(20px,5vw,82px) 90px;padding:42px;display:grid;grid-template-columns:1fr 1fr;gap:6vw;background:#0a1924;border-left:3px solid var(--amber)}.boundary span{font:500 9px 'IBM Plex Mono';letter-spacing:.13em;color:var(--amber)}.boundary h2{font:600 27px/1.55 'Noto Serif KR';margin:12px 0 0}.boundary p{color:#9fafb9;font-size:13px;line-height:1.9;margin:0}footer{padding:30px clamp(20px,5vw,82px);border-top:1px solid var(--line);display:flex;gap:25px;align-items:center;color:var(--muted);font:11px 'IBM Plex Mono'}footer b{color:white;letter-spacing:.12em}footer a{margin-left:auto;color:var(--cyan)}
@media(max-width:1100px){.workspace{grid-template-columns:200px minmax(450px,1fr)}.analysis-panel{grid-column:1/-1;border-left:0;border-top:1px solid var(--line);display:grid;grid-template-columns:170px 1fr 1fr 1fr;gap:25px}.analysis-panel dl{display:grid;grid-template-columns:1fr 1fr}.analysis-panel section{padding:0;border:0}.run-status{border:0}.analysis-panel dl div{padding:8px 12px;border:0}.analysis-panel dl{border-left:1px solid var(--line)}}
@media(max-width:760px){.tess-header{height:64px}.tess-header nav a:not(:first-child){display:none}.lab-heading{grid-template-columns:1fr;padding-top:45px}.abstract{font-size:15px}.workspace{display:block;margin:0 8px}.control-panel{border-right:0;border-bottom:1px solid var(--line)}.panel-title,.quality{display:none}.control-group{padding:18px 0}.control-group:first-of-type{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}.control-group h2{grid-column:1/-1}.control-group label{margin:9px 0}.map-meta{grid-template-columns:1fr 1fr}.map-meta>div:nth-child(2){display:none}#city-map{min-height:420px}.legend{position:static;border-width:1px 0 0}.analysis-panel{display:block;border-left:0}.analysis-panel dl{border:0}.method{grid-template-columns:1fr;padding-top:70px}.method ol{grid-template-columns:1fr}.boundary{grid-template-columns:1fr;padding:27px;margin-bottom:55px}footer{align-items:flex-start;flex-direction:column}footer a{margin-left:0}}
.nav-toggle{display:none;background:none;border:1px solid var(--line);color:var(--text);padding:9px 12px;font:600 10px 'IBM Plex Mono'}.simulation-controls select{width:100%;background:#07131c;border:1px solid var(--line);color:var(--text);padding:10px;font-size:12px;margin-bottom:16px}.simulation-controls input{width:100%;accent-color:var(--cyan);margin:8px 0 14px}.field-label{display:flex!important;grid-template-columns:1fr auto!important;margin:0!important;color:var(--muted)!important}.field-label output{color:var(--cyan);font:500 10px 'IBM Plex Mono'}.playback{display:flex;align-items:center;gap:12px;padding:18px 0}.playback button,.snapshot{background:#123145;border:1px solid #31566b;color:var(--cyan);padding:10px 12px;cursor:pointer;font:600 10px 'IBM Plex Mono'}.playback button:hover,.snapshot:hover{background:#18445d}.playback span b,.playback span small{display:block}.playback span b{font:600 12px 'IBM Plex Mono'}.playback span small{font-size:10px;color:var(--muted);margin-top:3px}.building,.ports circle,#route-layer .route,#emergency-layer circle{cursor:pointer}.building:hover polygon,.building.selected polygon{stroke:var(--cyan);stroke-width:3}.map-panel .selected{filter:url(#glow)}.snapshot{width:100%;margin-top:20px}.save-feedback{min-height:18px!important;color:var(--green)!important}.run-status.warn b{color:var(--amber)}.run-status.risk b{color:var(--red)}.method li{cursor:pointer;transition:.2s}.method li:hover,.method li:focus{background:#0c2130;outline:1px solid var(--cyan);outline-offset:-1px}.method li span{display:block;margin-top:18px;color:var(--cyan);font:500 10px 'IBM Plex Mono'}.connected-research{margin:0 clamp(20px,5vw,82px) 90px;display:grid;grid-template-columns:.8fr 1.2fr;gap:7vw;padding-top:70px;border-top:1px solid var(--line)}.connected-research h2{font:600 clamp(28px,3.6vw,48px)/1.35 'Noto Serif KR';margin:18px 0}.connected-research>div>p:last-child{color:var(--muted);line-height:1.8}.connected-research nav{display:grid;grid-template-columns:1fr 1fr;border-left:1px solid var(--line);border-top:1px solid var(--line)}.connected-research nav a{padding:24px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.connected-research nav a:hover{background:#0c2130}.connected-research nav b,.connected-research nav span,.connected-research nav em{display:block}.connected-research nav b{color:var(--cyan);font:500 10px 'IBM Plex Mono'}.connected-research nav span{font:600 16px 'Noto Serif KR';margin:24px 0}.connected-research nav em{font-style:normal;color:var(--muted);font-size:11px}@media(max-width:760px){.nav-toggle{display:block}.tess-header nav{display:none;position:absolute;top:64px;left:0;right:0;background:#061019f7;padding:18px;flex-direction:column;border-bottom:1px solid var(--line)}.tess-header nav.open{display:flex}.tess-header nav a{display:block!important}.connected-research{grid-template-columns:1fr;padding:40px 0 0;margin-bottom:55px}.connected-research nav{grid-template-columns:1fr}}
