:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#e9f2f4;background:#0c1821;font-synthesis:none}*{box-sizing:border-box}body{margin:0;min-width:320px;background:radial-gradient(circle at 90% -10%,#203b43 0,transparent 35%),#0c1821}button,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,select:focus-visible,label:focus-within,svg [tabindex]:focus-visible{outline:2px solid #adf4c6;outline-offset:3px}.app-shell{max-width:1600px;min-height:100vh;margin:auto;padding:0 34px}.topbar{height:82px;border-bottom:1px solid #27404a;display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;gap:12px;font-size:17px;font-weight:900;letter-spacing:.14em;white-space:nowrap}.brand-light{color:#9aebb9}.brand-mark{position:relative;width:33px;height:33px;border:2px solid #98e8b4;border-radius:10px;transform:rotate(-10deg)}.brand-mark span{position:absolute;left:7px;display:block;width:15px;height:2px;background:#98e8b4;transform:rotate(-25deg)}.brand-mark span:nth-child(1){top:10px}.brand-mark span:nth-child(2){top:15px}.brand-mark span:nth-child(3){top:20px}.topbar-right{display:flex;align-items:center;gap:24px}.topbar-tag,.small-label,.eyebrow,.section-number,.source-badge,.map-hint,footer{font-size:10px;font-weight:800;letter-spacing:.16em}.topbar-tag{color:#8ba7ae}.language-toggle{padding:4px;border:1px solid #35505a;border-radius:9px;display:flex;gap:2px}.language-toggle button{border:0;background:transparent;color:#a2b7bb;padding:7px 11px;border-radius:6px;font-size:11px;font-weight:800}.language-toggle button.active{background:#9cecb8;color:#10252b}.intro{display:flex;justify-content:space-between;align-items:end;padding:36px 4px 31px}.eyebrow{display:flex;align-items:center;gap:9px;color:#a2e9bc}.eyebrow-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#a2e9bc;box-shadow:0 0 12px #a2e9bc}.intro h1{font-size:clamp(30px,3.2vw,50px);line-height:1.1;letter-spacing:-.045em;margin:14px 0 9px;font-weight:760}.intro h1 em{font-style:normal;color:#a5edbd}.intro p{color:#9eb5ba;margin:0;font-size:13px;line-height:1.6}.intro-number{font-size:62px;line-height:1;color:#203a43;font-weight:800;letter-spacing:-.08em}.intro-number span{color:#a5edbd}.workspace{display:grid;grid-template-columns:minmax(255px,282px) minmax(0,1fr) minmax(245px,275px);gap:14px;align-items:stretch}.panel{background:#142630;border:1px solid #29424a;border-radius:14px;box-shadow:0 16px 40px #06121822}.controls-panel,.result-panel{padding:22px;min-height:642px}.panel-heading,.field-heading{display:flex;align-items:center;gap:10px}.panel-heading h2,.field-heading h2,.field-heading label{font-size:15px;font-weight:750;margin:0;letter-spacing:-.02em}.section-number{color:#a5edbd;font-size:10px}.panel-caption,.field-help{color:#8faab0;font-size:11px;line-height:1.55;margin:8px 0 16px}.file-actions{display:grid;gap:7px}.button{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:38px;border-radius:7px;font-size:11px;font-weight:800;border:1px solid transparent;transition:background .16s,transform .16s,border-color .16s}.button:hover{transform:translateY(-1px)}.button-primary{background:#9eeabb;color:#123024}.button-primary:hover{background:#bbf5d0}.button-quiet,.button-reset{background:#1b323d;border-color:#34515a;color:#d2e6e5}.button-quiet:hover,.button-reset:hover{background:#27434e}.button-reset{margin-top:12px}#file-input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}.upload-button{cursor:pointer}.notice{margin-top:11px;padding:10px;border-radius:7px;font-size:11px;line-height:1.5;background:#214138;color:#c5f0d0;border:1px solid #427a5b}.notice.error{background:#442c30;border-color:#835158;color:#ffd5d6}.divider{border-top:1px solid #2b444c;margin:21px 0}.field-help{margin-bottom:9px}.select-wrap{position:relative}.select-wrap select{appearance:none;background:#0e202a;border:1px solid #35525b;color:#e3f1ef;border-radius:7px;width:100%;height:39px;padding:0 29px 0 12px;font-size:11px}.select-wrap span{position:absolute;right:12px;top:7px;pointer-events:none;color:#b8d6d7;font-size:21px}.mode-switch{background:#0d202a;border:1px solid #2c4952;border-radius:8px;padding:3px;display:flex;gap:3px}.mode-switch button{background:transparent;border:0;border-radius:5px;color:#90aab0;font-size:10px;font-weight:750;padding:8px 5px;flex:1}.mode-switch button.active{background:#2b4d51;color:#e2f6ea}.hazard-tabs{display:flex;gap:12px;border-bottom:1px solid #304952;margin-top:17px}.hazard-tabs button{background:none;border:0;border-bottom:2px solid transparent;color:#87a4aa;font-size:10px;font-weight:800;padding:0 0 9px}.hazard-tabs button.active{color:#b5efc7;border-color:#9ceab7}.hazard-list{height:159px;overflow:auto;padding-right:3px;scrollbar-color:#3c5c65 transparent;scrollbar-width:thin}.hazard-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 0;border-bottom:1px solid #223a43}.hazard-row strong{display:block;font-size:11px;font-weight:750}.hazard-row small{color:#86a3a9;font-size:10px}.hazard-row button{min-width:65px;border:1px solid #3a5961;background:#203943;border-radius:6px;color:#d6e9e8;padding:6px;font-size:10px;font-weight:750}.hazard-row button.active{background:#543740;border-color:#85515e;color:#ffd4db}.map-panel{display:flex;flex-direction:column;min-height:642px;overflow:hidden}.map-toolbar{padding:23px 26px 20px;display:flex;align-items:center;justify-content:space-between;gap:10px}.small-label{color:#8eaab0}.map-toolbar h2{font-size:18px;line-height:1.2;margin:6px 0 0;letter-spacing:-.025em}.source-badge{border-radius:5px;padding:7px 9px;background:#204539;color:#b2ecc7;white-space:nowrap;font-size:9px;letter-spacing:.08em}.source-badge.imported{background:#244153;color:#b9e7f3}.map-stage{position:relative;display:flex;align-items:center;justify-content:center;min-height:475px;flex:1;background-color:#10232c;background-image:linear-gradient(#27404a3b 1px,transparent 1px),linear-gradient(90deg,#27404a3b 1px,transparent 1px);background-size:28px 28px;border-top:1px solid #25404a;border-bottom:1px solid #25404a}.map-stage:after{content:"";position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 75px #0b1b2580}.map-stage svg{width:100%;height:100%;min-height:450px;max-height:620px;overflow:visible}.map-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 24px}.legend{display:flex;gap:14px;flex-wrap:wrap}.legend>span{display:flex;align-items:center;gap:6px;color:#abc0c2;font-size:10px}.legend-dot{display:inline-block;width:9px;height:9px;border-radius:50%;border:2px solid #78abd9;background:#19364d}.legend-dot.junction{background:#d9c17e;border-color:#d9c17e}.legend-dot.exit{background:#a5eac1;border-color:#a5eac1}.legend-dot.unavailable{background:#744750;border-color:#bd6d76}.legend-line{display:inline-block;width:15px;height:3px;border-radius:3px;background:#a5eac1}.map-hint{color:#75949d;letter-spacing:0;text-align:right;line-height:1.4}.result-panel{display:flex;flex-direction:column}.route-success,.route-empty{margin-top:25px}.route-kicker{font-size:10px;color:#9ee4b9;font-weight:850;letter-spacing:.13em;text-transform:uppercase}.route-cost{display:flex;align-items:baseline;gap:7px;margin:8px 0 1px}.route-cost strong{font-size:60px;line-height:1;font-weight:750;letter-spacing:-.07em;color:#eaf8ee}.route-cost span{font-size:12px;color:#9bb4b6}.result-rule{border:0;border-top:1px solid #31505a;margin:19px 0}.result-pair{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0;font-size:11px}.result-pair span{color:#8ca7ae}.result-pair strong{font-size:12px}.path-label{color:#8ca7ae;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;margin:23px 0 10px}.path-list{display:flex;flex-wrap:wrap;align-items:center;gap:5px}.path-list span{border:1px solid #3b6856;background:#214436;color:#c0edca;border-radius:5px;padding:6px 7px;font-size:10px;font-weight:800}.path-list b{color:#8eacb2;font-size:13px}.route-empty{color:#a6bcc0;font-size:12px;line-height:1.6}.route-empty .empty-icon{display:flex;align-items:center;justify-content:center;width:50px;height:50px;border-radius:50%;background:#29424a;color:#cae6d4;font-size:24px;margin-bottom:15px}.route-empty h3{font-size:19px;line-height:1.25;margin:0 0 9px;color:#e9f3f2}.route-empty p{margin:0}.route-empty.danger .empty-icon{background:#51363d;color:#f4bdc4}.result-explainer{display:flex;gap:10px;border:1px solid #325249;background:#1b3a35;padding:11px;border-radius:8px;margin-top:auto;color:#b2cec3}.explainer-icon{flex:none;border:1px solid #77b595;color:#9fe0b4;width:16px;height:16px;border-radius:50%;font-family:Georgia,serif;font-size:11px;text-align:center;font-weight:bold}.result-explainer p{font-size:10px;line-height:1.6;margin:0}.safety-note{display:flex;gap:8px;color:#718d95;font-size:10px;line-height:1.45;margin-top:15px}.safety-note span:first-child{color:#b2dbbd;font-size:16px;line-height:12px}footer{display:flex;justify-content:space-between;color:#607f89;padding:22px 4px 28px;letter-spacing:.07em}.footer-separator{color:#a2e9bc;margin:0 7px}.map-edge{transition:opacity .18s}.map-edge .edge-line{stroke:#53717a;stroke-width:5;stroke-linecap:round}.map-edge .edge-hit{stroke:transparent;stroke-width:28;cursor:pointer}.map-edge.is-route .edge-line{stroke:#a2e9bc;stroke-width:8;filter:drop-shadow(0 0 7px #80d5a56b);stroke-dasharray:1400;stroke-dashoffset:1400;animation:draw-route .65s ease-out forwards}.map-edge.is-blocked .edge-line{stroke:#bd6d76;stroke-dasharray:12 9}.map-edge.is-disabled{opacity:.27}.map-edge .cost-bg{fill:#1d343d;stroke:#45616a;stroke-width:1}.map-edge.is-route .cost-bg{fill:#24533e;stroke:#8be7a7}.map-edge .cost-text{fill:#cee0df;font-size:17px;font-weight:800;text-anchor:middle;dominant-baseline:central;pointer-events:none}.map-edge.is-blocked .cost-text{fill:#f1b4b9}.map-node{cursor:pointer}.map-node .node-ring{fill:#132b38;stroke:#6fa5c7;stroke-width:4;transition:fill .18s,stroke .18s,transform .18s;transform-origin:center}.map-node:hover .node-ring{stroke:#e6f6e9;stroke-width:5}.map-node.room .node-ring{fill:#193c54;stroke:#79b0d4}.map-node.junction .node-ring{fill:#3c3a2c;stroke:#e0c778}.map-node.exit .node-ring{fill:#24523b;stroke:#a2e9bc}.map-node.is-route .node-ring{filter:drop-shadow(0 0 12px #9eeabb90)}.map-node.is-start .node-ring{stroke:#fff6c4;stroke-width:6}.map-node.is-target .node-ring{stroke:#c1ffcf;stroke-width:6}.map-node.is-blocked .node-ring,.map-node.is-closed .node-ring{fill:#4b3037;stroke:#c57c87;stroke-dasharray:8 5}.map-node .node-id{fill:#f7fcf7;font-size:19px;font-weight:850;text-anchor:middle;dominant-baseline:central;pointer-events:none}.map-node .node-label{fill:#afc5c6;font-size:15px;font-weight:650;text-anchor:middle;pointer-events:none}.map-node.is-blocked .node-id,.map-node.is-closed .node-id{fill:#ffcdd1}.map-node .node-status{fill:#f7b6c0;font-size:11px;font-weight:800;text-anchor:middle;pointer-events:none}.map-node .node-pulse{fill:none;stroke:#c5facd;stroke-width:3;opacity:0}.map-node.is-start .node-pulse,.map-node.is-target .node-pulse{animation:pulse 1s ease-out 1}.map-node .node-hit{fill:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes draw-route{to{stroke-dashoffset:0}}@keyframes pulse{0%{r:31;opacity:.8}100%{r:58;opacity:0}}@media(max-width:1180px){.workspace{grid-template-columns:250px minmax(0,1fr)}.result-panel{grid-column:1 / -1;min-height:0}.result-panel .result-explainer{margin-top:30px}.map-footer{flex-wrap:wrap}}@media(max-width:760px){.app-shell{padding:0 16px}.topbar{height:70px}.topbar-tag,.intro-number{display:none}.intro{padding:26px 0}.intro h1{font-size:34px}.workspace{display:flex;flex-direction:column}.controls-panel,.result-panel,.map-panel{min-height:0}.controls-panel{order:1}.map-panel{order:2}.result-panel{order:3}.map-stage{min-height:320px}.map-stage svg{min-height:320px}.map-footer{padding:15px}.map-hint{width:100%;text-align:left}.hazard-list{height:120px}.result-explainer{margin-top:25px}.route-success,.route-empty{margin-top:18px}footer{font-size:9px;gap:15px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* Keep operational controls readable on dense desktop and narrow screens. */
.panel-caption,.field-help,.route-empty,.result-pair,.button,.select-wrap select,.hazard-row strong,.hazard-row button{font-size:12px}
.hazard-tabs button,.mode-switch button,.legend>span,.map-hint,.result-explainer p,.safety-note{font-size:11px}
@media(max-width:760px){.map-stage{overflow-x:auto;justify-content:flex-start}.map-stage svg{min-width:620px}}
.map-node.is-blocked .node-ring,.map-node.is-closed .node-ring,.map-edge.is-blocked .edge-line{animation:hazard-appear .22s ease-out}
@keyframes hazard-appear{from{opacity:.35}to{opacity:1}}
