:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0f1c;--surface:#10182a;--surface-2:#172238;--surface-3:#1e2b45;--border:#94a3b824;--border-strong:#94a3b847;--grid:#4fd1ff12;--line:#2a3754;--text:#e8eef8;--muted:#8796b0;--faint:#5b6a85;--route:#4fd1ff;--route-glow:#4fd1ff73;--exit:#2bd98c;--exit-ink:#04140d;--hazard:#ff5a5f;--hazard-soft:#ff5a5f24;--warn:#ffb547;--warn-soft:#ffb54724;--ok-soft:#2bd98c1f;--radius-sm:8px;--radius:14px;--radius-lg:20px;--ease:cubic-bezier(.2, .8, .2, 1);--dur-1:.15s;--dur-2:.25s;--dur-3:.45s;--font-ui:"Space Grotesk", "Hind Siliguri", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--font-bn:"Hind Siliguri", "Space Grotesk", system-ui, sans-serif}*,:before,:after{box-sizing:border-box}html{background-color:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{background-color:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(1200px 500px at 50% 0,#4fd1ff0d,#0000 80%);background-repeat:no-repeat;margin:0;padding:0;line-height:1.5;overflow-x:hidden}html[lang=bn] body{font-family:var(--font-bn)}:focus-visible{outline:2px solid var(--route);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app{flex-direction:column;gap:16px;max-width:1600px;min-height:100vh;margin:0 auto;padding:16px;display:flex;position:relative}@media (width>=960px){.app{gap:20px;padding:24px}}.workspace{flex:1;grid-template-columns:1fr;gap:16px;display:grid}@media (width>=960px){.workspace{grid-template-columns:1fr 380px;align-items:stretch;gap:20px}}.map-stage{border-radius:var(--radius-lg);border:1px solid var(--border);background-color:var(--bg);background-image:radial-gradient(ellipse at center, transparent 40%, #0a0f1cbf 100%), linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-size:100% 100%,32px 32px,32px 32px;flex-direction:column;min-height:420px;display:flex;position:relative;overflow:hidden;box-shadow:inset 0 0 40px #00000080}@media (width>=960px){.map-stage{min-height:70vh}}.map-svg{width:100%;height:100%;display:block;position:absolute;inset:0}.overlay{-webkit-backdrop-filter:blur(12px)saturate(140%);border:1px solid var(--border);border-radius:var(--radius);z-index:10;background:#10182ac2;max-width:calc(100% - 32px);padding:10px 12px;position:absolute;box-shadow:0 8px 32px #00000059}.overlay-tl{top:16px;left:16px}.overlay-bl{bottom:16px;left:16px}.sidebar{flex-direction:column;gap:16px;display:flex}@media (width>=960px){.sidebar{scrollbar-width:thin;scrollbar-color:var(--surface-3) transparent;height:70vh;min-height:100%;padding-right:4px;overflow-y:auto}.sidebar::-webkit-scrollbar{width:6px}.sidebar::-webkit-scrollbar-thumb{background-color:var(--surface-3);border-radius:9999px}}.footer{text-align:center;color:var(--muted);padding:16px 0 8px;font-size:13px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;position:relative;box-shadow:inset 0 1px #ffffff0a,0 4px 20px #00000040}.section-title{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);align-items:center;gap:6px;margin:0;font-size:12px;font-weight:600;display:flex}.chip{font-size:12px;font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:6px;align-items:center;gap:4px;padding:3px 8px;font-weight:500;display:inline-flex}.badge{background:var(--surface-2);border:1px solid var(--border);color:var(--muted);font-size:12px;font-weight:500;font-family:var(--font-mono);border-radius:9999px;align-items:center;gap:6px;padding:3px 10px;line-height:1;display:inline-flex}.badge--hazard{background:var(--hazard-soft);color:var(--hazard);border-color:#ff5a5f59}.badge--warn{background:var(--warn-soft);color:var(--warn);border-color:#ffb54759}.badge--exit{background:var(--ok-soft);color:var(--exit);border-color:#2bd98c59}.btn{border-radius:var(--radius-sm);font-family:var(--font-ui);cursor:pointer;transition:transform var(--dur-1) var(--ease), background-color var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease), color var(--dur-1) var(--ease), box-shadow var(--dur-1) var(--ease);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:8px 14px;font-size:13px;font-weight:500;line-height:1.2;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-primary{background:var(--exit);color:var(--exit-ink);border-color:var(--exit);font-weight:600;box-shadow:0 2px 10px #2bd98c40}.btn-primary:hover{filter:brightness(1.06);box-shadow:0 4px 16px #2bd98c61}.btn-ghost{color:var(--muted);border:1px solid var(--border);background:0 0}.btn-ghost:hover{background:var(--surface-2);color:var(--text);border-color:var(--border-strong)}.header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:4px 0;display:flex}.header__left{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.header__brand{align-items:center;gap:12px;display:flex}.header__logo{background:var(--exit);border-radius:var(--radius-sm);flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;display:flex;box-shadow:0 0 16px #2bd98c40}.header__title-group{flex-direction:column;line-height:1.2;display:flex}.header__title{color:var(--text);letter-spacing:-.01em;margin:0;font-size:20px;font-weight:700}.header__tagline{color:var(--muted);margin:0;font-size:13px}.header__meta{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.header__pill{background:var(--surface);border:1px solid var(--border);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;border-radius:9999px;align-items:center;max-width:260px;padding:4px 10px;font-size:12px;display:inline-flex;overflow:hidden}.header__live-pill{background:var(--ok-soft);color:var(--exit);border:1px solid #2bd98c40;border-radius:9999px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:500;display:inline-flex}.header__live-dot{background:var(--exit);width:7px;height:7px;box-shadow:0 0 8px var(--exit);border-radius:50%;flex-shrink:0;display:inline-block}.header__right{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.header__lang-toggle{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);gap:2px;padding:2px;display:inline-flex}.header__lang-btn{color:var(--muted);font-family:var(--font-ui);cursor:pointer;transition:background-color var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;border-radius:6px;padding:4px 10px;font-size:12px;font-weight:600}.header__lang-btn:hover{color:var(--text)}.header__lang-btn.active{background:var(--surface-3);color:var(--route)}.empty-state{justify-content:center;align-items:center;width:100%;min-height:calc(100vh - 140px);padding:32px 16px;display:flex;position:relative;overflow:hidden}.empty-state__bg-blueprint{pointer-events:none;opacity:.22;z-index:0;width:100%;height:100%;position:absolute;inset:0;-webkit-mask-image:radial-gradient(at 70%,#000 20%,#0000 75%);mask-image:radial-gradient(at 70%,#000 20%,#0000 75%)}@media (width<=960px){.empty-state__bg-blueprint{display:none}}.empty-state__route-anim{stroke-dasharray:240;animation:6s ease-in-out infinite alternate blueprintDraw}@keyframes blueprintDraw{0%{stroke-dashoffset:240px}to{stroke-dashoffset:0}}.empty-state__hero{z-index:1;grid-template-columns:1fr;align-items:center;gap:40px;width:100%;max-width:1120px;display:grid;position:relative}@media (width>=960px){.empty-state__hero{grid-template-columns:1.15fr .85fr;gap:56px}}.empty-state__left{flex-direction:column;gap:16px;display:flex}.empty-state__kicker{font-family:var(--font-mono);color:var(--route);letter-spacing:.1em;text-transform:uppercase;font-size:13px;font-weight:600}.empty-state__title{letter-spacing:-.025em;color:var(--text);margin:0;font-size:clamp(32px,5vw,56px);font-weight:700;line-height:1.1}.empty-state__title-gradient{background:linear-gradient(135deg, var(--route) 0%, var(--exit) 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text}.empty-state__subtitle{color:var(--muted);max-width:520px;margin:0;font-size:16px;line-height:1.6}.empty-state__steps{flex-direction:column;gap:14px;margin-top:12px;display:flex}.empty-state__step{align-items:baseline;gap:14px;display:flex}.empty-state__step-num{font-family:var(--font-mono);color:var(--route);background:#4fd1ff1a;border:1px solid #4fd1ff33;border-radius:6px;flex-shrink:0;padding:2px 7px;font-size:13px;font-weight:600}.empty-state__step-text{color:var(--text);margin:0;font-size:14px}.empty-state__right{flex-direction:column;gap:16px;display:flex}.empty-state__dropzone{border:2px dashed var(--border-strong);border-radius:var(--radius-lg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);text-align:center;cursor:pointer;transition:border-color var(--dur-2) var(--ease), background-color var(--dur-2) var(--ease), box-shadow var(--dur-2) var(--ease);background:#10182ab3;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:44px 28px;display:flex}.empty-state__dropzone:hover,.empty-state__dropzone.dragging{border-color:var(--route);box-shadow:0 0 24px var(--route-glow);background:#10182ae6}.empty-state__dropzone-icon{background:var(--surface-2);width:48px;height:48px;color:var(--route);border-radius:12px;justify-content:center;align-items:center;margin-bottom:4px;display:flex}.empty-state__dropzone-text{color:var(--text);margin:0;font-size:15px;font-weight:600}.empty-state__dropzone-format{color:var(--muted);font-size:12px;font-family:var(--font-mono);max-width:280px;margin:0}.empty-state__sample-btn{width:100%;padding:12px 18px;font-size:14px}.mode-switch{-webkit-user-select:none;user-select:none;flex-direction:column;gap:6px;display:flex}.mode-switch__segmented{background:var(--surface);border:1px solid var(--border);border-radius:10px;grid-template-columns:1fr 1fr;gap:4px;padding:3px;display:grid;position:relative;overflow:hidden}.mode-switch__pill{width:calc(50% - 4px);transition:transform var(--dur-2) var(--ease), background-color var(--dur-2) var(--ease), border-color var(--dur-2) var(--ease);pointer-events:none;z-index:0;border-radius:7px;position:absolute;top:3px;bottom:3px;left:3px}.mode-switch__pill--start{border:1px solid var(--route);background:#4fd1ff29;transform:translate(0)}.mode-switch__pill--hazard{background:var(--hazard-soft);border:1px solid var(--hazard);transform:translate(calc(100% + 2px))}.mode-switch__btn{z-index:1;color:var(--muted);font-family:var(--font-ui);cursor:pointer;transition:color var(--dur-1) var(--ease);white-space:nowrap;background:0 0;border:none;border-radius:7px;justify-content:center;align-items:center;gap:6px;padding:6px 12px;font-size:12px;font-weight:600;display:inline-flex;position:relative}.mode-switch__btn:hover,.mode-switch__btn.active{color:var(--text)}.mode-switch__btn--start.active{color:var(--route)}.mode-switch__btn--hazard.active{color:var(--hazard)}.mode-switch__kbd{font-family:var(--font-mono);color:var(--muted);background:#ffffff14;border:1px solid #ffffff1f;border-radius:4px;padding:1px 4px;font-size:10px}.mode-switch__hint{color:var(--muted);max-width:280px;margin:0;font-size:12px;line-height:1.4}.legend{-webkit-user-select:none;user-select:none;flex-direction:column;display:flex}.legend__header{cursor:pointer;width:100%;color:var(--text);font-family:var(--font-ui);letter-spacing:.08em;text-transform:uppercase;background:0 0;border:none;justify-content:space-between;align-items:center;gap:16px;padding:2px 4px;font-size:12px;font-weight:600;display:flex}.legend__chevron{color:var(--muted);transition:transform var(--dur-2) var(--ease)}.legend__chevron.open{transform:rotate(180deg)}.legend__grid{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:8px 14px;margin-top:10px;padding-top:8px;display:grid}.legend__item{align-items:center;gap:8px;display:flex}.legend__swatch{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.legend__label{color:var(--muted);font-size:12px;line-height:1.2}.route-card{transition:border-color var(--dur-2) var(--ease);flex-direction:column;gap:16px;display:flex}.route-card--ok{border-color:#2bd98c47}.route-card--no-route{border-color:#ff5a5f47}.route-card--start-blocked{border-color:#ffb54747}.route-card--idle{border-color:var(--border)}.route-card__status-banner{border-radius:var(--radius-sm);background:var(--surface-2);border-left:3px solid #0000;align-items:flex-start;gap:10px;padding:12px 14px;display:flex}.route-card__status-banner--ok{background:var(--ok-soft);border-left-color:var(--exit);color:var(--exit)}.route-card__status-banner--no-route{background:var(--hazard-soft);border-left-color:var(--hazard);color:var(--hazard)}.route-card__status-banner--start-blocked{background:var(--warn-soft);border-left-color:var(--warn);color:var(--warn)}.route-card__status-banner--idle{background:var(--surface-2);border-left-color:var(--muted);color:var(--muted)}.route-card__status-info{flex-direction:column;gap:2px;display:flex}.route-card__status-title{margin:0;font-size:14px;font-weight:600;line-height:1.2}.route-card__status-hint{color:var(--muted);margin:0;font-size:12px;line-height:1.4}.route-card__body-transition{animation:routeCrossFade var(--dur-2) var(--ease);flex-direction:column;gap:16px;display:flex}@keyframes routeCrossFade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.route-card__evac-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:16px;padding:8px 0;display:flex}.route-card__evac-left{flex-direction:column;gap:4px;display:flex}.route-card__exit-id{font-family:var(--font-mono);color:var(--exit);font-size:28px;font-weight:700;line-height:1}.route-card__exit-label{color:var(--muted);font-size:13px}.route-card__cost-group{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.route-card__cost-value{font-family:var(--font-mono);color:var(--route);text-shadow:0 0 24px var(--route-glow);font-size:48px;font-weight:700;line-height:1}.route-card__reroute-wrap{align-items:center;display:flex}.route-card__path-section{flex-direction:column;gap:8px;display:flex}.route-card__chips{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.route-chip{font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border);color:var(--text);cursor:default;transition:transform var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease), box-shadow var(--dur-1) var(--ease);animation:chipEnter var(--dur-2) var(--ease) backwards;border-radius:6px;padding:4px 10px;font-size:13px;font-weight:600}@keyframes chipEnter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.route-chip:hover,.route-chip:focus-visible{border-color:var(--route);transform:translateY(-1px);box-shadow:0 0 10px #4fd1ff40}.route-chip--start{border-color:var(--route);color:var(--route);background:#4fd1ff14}.route-chip--exit{background:var(--exit);border-color:var(--exit);color:var(--exit-ink);font-weight:700}.route-card__path-sep{color:var(--faint)}.route-card__details{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);overflow:hidden}.route-card__summary{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:10px 14px;font-size:13px;font-weight:600;display:flex}.route-card__summary:hover{background:#ffffff05}.route-card__step-count{color:var(--muted);font-size:12px;font-weight:400}.route-card__step-list{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.route-step{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px 14px;font-size:12px;display:flex}.route-step:last-child{border-bottom:none}.route-step__endpoints{font-family:var(--font-mono);color:var(--text);font-weight:600}.route-step__corridor{font-family:var(--font-mono);color:var(--muted);font-size:11px}.route-step__costs{align-items:center;gap:12px;display:flex}.route-step__cost{font-family:var(--font-mono);color:var(--muted)}.route-step__total{font-family:var(--font-mono);color:var(--route);text-align:right;min-width:24px;font-weight:600}.route-card__alts-section{flex-direction:column;gap:8px;display:flex}.route-card__alts-list{flex-direction:column;gap:6px;display:flex}.route-alt{background:var(--surface-2);border:1px solid var(--border);border-radius:6px;justify-content:space-between;align-items:center;padding:6px 10px;display:flex}.route-alt__left{align-items:center;gap:8px;display:flex}.chip--exit-outline{color:var(--exit);background:#2bd98c14;border-color:#2bd98c66}.route-alt__label{color:var(--muted);font-size:12px}.route-alt__cost{font-family:var(--font-mono);color:var(--route);font-size:13px;font-weight:600}.route-card__no-alts{color:var(--muted);margin:0;font-size:12px;font-style:italic}.hazard-panel{flex-direction:column;gap:16px;display:flex}.hazard-panel__select-wrap{flex-direction:column;gap:6px;display:flex}.hazard-panel__select{border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border);width:100%;color:var(--text);font-family:var(--font-mono);cursor:pointer;transition:border-color var(--dur-1) var(--ease);padding:9px 12px;font-size:13px}.hazard-panel__select:hover{border-color:var(--border-strong)}.hazard-panel__select option{background:var(--surface-2);color:var(--text);font-family:var(--font-mono)}.hazard-panel__header{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding-top:8px;display:flex}.hazard-panel__header-left{align-items:center;gap:8px;display:flex}.hazard-group{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);overflow:hidden}.hazard-group__summary{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:10px 14px;font-size:13px;font-weight:600;display:flex}.hazard-group__summary:hover{background:#ffffff05}.hazard-group__body{border-top:1px solid var(--border);flex-direction:column;display:flex}.hazard-group__body--scrollable{scrollbar-width:thin;scrollbar-color:var(--surface-3) transparent;max-height:280px;overflow-y:auto}.hazard-group__body--scrollable::-webkit-scrollbar{width:6px}.hazard-group__body--scrollable::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:9999px}.hazard-row{border-bottom:1px solid var(--border);transition:background-color var(--dur-2) var(--ease);justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;display:flex}.hazard-row:last-child{border-bottom:none}.hazard-row--active-hazard{background-color:var(--hazard-soft)}.hazard-row--active-warn{background-color:var(--warn-soft)}.hazard-row__left{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.hazard-row__start-icon{color:var(--route);flex-shrink:0}.hazard-row__id{font-family:var(--font-mono);color:var(--text);flex-shrink:0;font-size:13px;font-weight:600}.hazard-row__label{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.hazard-row__right{flex-shrink:0;align-items:center;gap:8px;display:flex}.hazard-row__state{text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:600}.hazard-row__state--open{color:var(--faint)}.hazard-row__state--blocked{color:var(--hazard)}.hazard-row__state--closed{color:var(--warn)}.toggle-switch{background:var(--surface-3);border:1px solid var(--border-strong);cursor:pointer;width:36px;height:20px;transition:background-color var(--dur-2) var(--ease), border-color var(--dur-2) var(--ease);border-radius:9999px;align-items:center;padding:2px;display:inline-flex;position:relative}.toggle-switch__knob{background:var(--text);width:14px;height:14px;transition:transform var(--dur-2) var(--ease), background-color var(--dur-2) var(--ease);border-radius:50%;transform:translate(0);box-shadow:0 1px 3px #0006}.toggle-switch--hazard{background:var(--hazard);border-color:var(--hazard)}.toggle-switch--hazard .toggle-switch__knob{background:#fff;transform:translate(16px)}.toggle-switch--warn{background:var(--warn);border-color:var(--warn)}.toggle-switch--warn .toggle-switch__knob{background:var(--exit-ink);transform:translate(16px)}.import-errors{border-radius:var(--radius);animation:slideDown var(--dur-2) var(--ease);background:#ff5a5f1f;border:1px solid #ff5a5f59;padding:16px 18px;position:relative;box-shadow:0 4px 20px #0000004d}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.import-errors__header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.import-errors__title-wrap{color:var(--hazard);align-items:center;gap:8px;display:flex}.import-errors__title{color:var(--text);margin:0;font-size:14px;font-weight:700}.import-errors__close{color:var(--muted);cursor:pointer;transition:color var(--dur-1) var(--ease), background-color var(--dur-1) var(--ease);background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:4px;display:flex}.import-errors__close:hover{color:var(--text);background:#ffffff14}.import-errors__list{flex-direction:column;gap:6px;margin:0;padding-left:20px;display:flex}.import-errors__item{color:var(--text);font-size:13px;line-height:1.4}.import-errors__more{color:var(--muted);margin-top:8px;padding-left:20px;font-size:12px;font-style:italic}.toast-container{z-index:1000;pointer-events:none;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.toast-pill{-webkit-backdrop-filter:blur(12px)saturate(140%);border:1px solid var(--border-strong);color:var(--text);animation:toastEnter var(--dur-2) var(--ease) forwards;white-space:nowrap;background:#10182ae0;border-radius:9999px;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:500;display:flex;box-shadow:0 12px 36px #00000073,0 0 1px #4fd1ff33}@keyframes toastEnter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.stage-bar{z-index:2;-webkit-backdrop-filter:blur(12px)saturate(140%);background:#10182a99;padding:12px 16px;position:relative}.stage-bar--top{border-bottom:1px solid var(--border)}.stage-bar--bottom{border-top:1px solid var(--border);padding:10px 16px}.stage-bar--top .mode-switch{flex-flow:wrap;align-items:center;gap:8px 16px}.stage-bar--top .mode-switch__segmented{min-width:290px}.stage-bar--top .mode-switch__hint{flex:220px;max-width:none}.map-area{flex:1;min-height:360px;position:relative}.stage-bar--bottom .legend{flex-flow:wrap;align-items:center;gap:8px 16px}.stage-bar--bottom .legend__header{width:auto}.stage-bar--bottom .legend__grid{border:0;flex-wrap:wrap;gap:6px 18px;margin:0;padding:0;display:flex}@media (width<=600px){.stage-bar--top .mode-switch__segmented{width:100%;min-width:0}}@media (width<=700px){.map-area{overscroll-behavior-x:contain;overflow-x:auto}.map-area .map{width:max(100%,600px);right:auto}}.map{position:absolute;inset:0}.map-svg{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;inset:0}.map-svg :focus{outline:none}.edge__line{stroke:var(--line);stroke-width:calc(4px * var(--k));stroke-linecap:round;transition:stroke var(--dur-2) var(--ease), opacity var(--dur-2) var(--ease)}.edge__hit{stroke:#0000;stroke-width:18px;cursor:pointer}.edge:hover .edge__line{stroke:#3b4b6e}.edge__hit:focus-visible{stroke:var(--route-glow)}.edge.is-unusable .edge__line{stroke:var(--faint);stroke-dasharray:2 8;opacity:.55}.edge.is-blocked .edge__line{stroke:var(--hazard);stroke-dasharray:10 8;opacity:.9;animation:pop-line var(--dur-2) var(--ease)}.edge-cost{cursor:pointer}.edge-cost rect{fill:var(--surface-2);stroke:var(--border-strong);stroke-width:1px;transition:fill var(--dur-2) var(--ease), stroke var(--dur-2) var(--ease)}.edge-cost text{fill:var(--muted);font:600 12px var(--font-mono);text-anchor:middle;pointer-events:none}.edge-cost.is-route rect{fill:#0e2a3a;stroke:var(--route)}.edge-cost.is-route text{fill:var(--route)}.edge-cost.is-blocked rect{fill:var(--hazard);stroke:var(--hazard)}.edge-cost.is-blocked text{fill:#fff}.route{pointer-events:none}.route path{fill:none;stroke-linecap:round;stroke-linejoin:round}.route__glow{stroke:var(--route);stroke-width:calc(14px * var(--k));opacity:.35;animation:fade-in var(--dur-3) var(--ease) both}.route__line{stroke:var(--route);stroke-width:calc(6px * var(--k));stroke-dasharray:1;stroke-dashoffset:1px;animation:draw var(--dur-3) var(--ease) forwards}.route__flow{stroke:#e6faff;stroke-width:calc(2px * var(--k));stroke-dasharray:4 14;opacity:0;animation:fade-in var(--dur-2) var(--ease) var(--dur-3) forwards, flow 1.6s linear infinite}.route__runner{fill:#fff;filter:drop-shadow(0 0 6px var(--route));offset-rotate:0deg;offset-distance:0%;opacity:0;animation:run 1.3s var(--ease) var(--dur-3) forwards}.route-ghost{fill:none;stroke:var(--hazard);stroke-width:calc(5px * var(--k));stroke-dasharray:8 8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;animation:1.4s linear forwards ghost}.node{cursor:pointer}.node__body{transform-box:fill-box;transform-origin:50%;animation:pop var(--dur-2) var(--ease)}.node__shape{fill:var(--surface-3);stroke:#94a3b8;stroke-width:2px;transition:fill var(--dur-2) var(--ease), stroke var(--dur-2) var(--ease), filter var(--dur-2) var(--ease)}.node--junction .node__shape{stroke:#64748b}.node__id{fill:var(--text);font:700 calc(13px * max(var(--k), .8)) var(--font-mono);text-anchor:middle;pointer-events:none}.node__label{fill:var(--muted);font:500 calc(12px * max(var(--k), .75)) var(--font-ui);text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:var(--bg);stroke-width:4px;stroke-linejoin:round}.node--exit .node__shape{fill:var(--exit);stroke:#7cf0bd;filter:drop-shadow(0 0 10px #2bd98c59)}.node--exit .node__id{fill:var(--exit-ink)}.node--exit .node__label{fill:var(--exit);font-weight:600}.node.is-route .node__shape{fill:#0e3a52;stroke:var(--route)}.node--exit.is-dest .node__shape{fill:var(--exit);stroke:#fff;stroke-width:3px;filter:drop-shadow(0 0 16px #2bd98cb3)}.node.is-start .node__shape{fill:var(--route);stroke:#fff}.node.is-start .node__id{fill:#021019}.node__halo{fill:none;stroke:var(--route);stroke-width:2px;opacity:.5;transform-box:fill-box;transform-origin:50%;animation:halo var(--dur-3) var(--ease);pointer-events:none}.node.is-blocked .node__shape{fill:url(#hazard-stripes);stroke:var(--hazard)}.node.is-blocked .node__id{fill:#fff;paint-order:stroke;stroke:#3a0d12;stroke-width:4px}.node.is-blocked.is-start .node__halo{stroke:var(--warn)}.node.is-closed .node__shape{fill:#475569;stroke:var(--warn);filter:none}.node.is-closed .node__id{fill:#cbd5e1;text-decoration:line-through}.node.is-closed .node__label{fill:var(--faint)}.node__badge circle{stroke:var(--bg);stroke-width:2px}.node__badge path{fill:none;stroke:#fff;stroke-width:2px;stroke-linecap:round}.node__badge--blocked circle{fill:var(--hazard)}.node__badge--closed circle{fill:var(--warn)}.node__badge--closed path{stroke:#1f1300;stroke-width:1.6px}.node:hover .node__shape,.node.is-hover .node__shape,.node:focus-visible .node__shape{stroke:#fff;stroke-width:3px}.node:focus-visible .node__shape{stroke:var(--route)}.pin{pointer-events:none;animation:pin-in var(--dur-3) var(--ease)}.pin rect{fill:var(--route)}.pin text{fill:#021019;font:700 10px var(--font-ui);letter-spacing:.08em;text-transform:uppercase;text-anchor:middle}.map-tip{border-radius:var(--radius-sm);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--border-strong);white-space:nowrap;pointer-events:none;z-index:5;animation:fade-in var(--dur-1) var(--ease);background:#10182aeb;padding:8px 12px;font-size:12px;position:absolute;transform:translate(-50%,calc(-100% - 6px));box-shadow:0 8px 24px #0006}.map-tip.is-below{transform:translate(-50%,6px)}.map-tip__title{color:var(--text);font-weight:600}.map-tip__title .mono{font-family:var(--font-mono);color:var(--route);margin-right:4px}.map-tip__meta{color:var(--muted);margin-top:2px}.map-tip__meta .mono{font-family:var(--font-mono);color:var(--text)}.map-tip__state.is-blocked{color:var(--hazard)}.map-tip__state.is-closed{color:var(--warn)}.map-tip__state.is-open{color:var(--exit)}@keyframes draw{to{stroke-dashoffset:0}}@keyframes flow{to{stroke-dashoffset:-36px}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes run{0%{offset-distance:0%;opacity:1}85%{offset-distance:100%;opacity:1}to{offset-distance:100%;opacity:0}}@keyframes ghost{0%{opacity:.95}45%{opacity:.7}to{opacity:0}}@keyframes pop{0%{transform:scale(.82)}60%{transform:scale(1.08)}to{transform:scale(1)}}@keyframes pop-line{0%{opacity:.2}}@keyframes halo{0%{opacity:0;transform:scale(.4)}}@keyframes pin-in{0%{opacity:0;transform:translateY(6px)}}@media (prefers-reduced-motion:reduce){.route__line{stroke-dashoffset:0}.route__flow{opacity:1}.route__runner{display:none}.map-svg *,.map-tip{transition:none!important;animation:none!important}}
