:root{--bg:#0a0d14;--panel:#12161f;--panel-2:#171c27;--border:#232a37;--border-strong:#2f3644;--text:#e6edf3;--text-muted:#8b98a9;--text-dim:#5b6675;--accent:#3ec7ff;--danger:#ff5d6c;--radius:14px;--radius-sm:8px;--sans:system-ui, "Apple SD Gothic Neo", "Malgun Gothic", "Segoe UI", Roboto, sans-serif;--mono:"SF Mono", ui-monospace, "Roboto Mono", Consolas, monospace;font:16px/1.5 var(--sans);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}*{box-sizing:border-box}body{background:radial-gradient(1200px 600px at 50% -10%, #3ec7ff0f, transparent 60%), var(--bg);min-height:100svh;margin:0}#root{width:100%;min-height:100svh}h1,h2{color:var(--text);margin:0;font-weight:700}button{cursor:pointer;font-family:inherit}button:disabled{cursor:default}.app{max-width:1100px;margin:0 auto;padding:28px 20px 80px}.app-header{text-align:center;margin-bottom:24px}.app-title{letter-spacing:-.4px;font-size:30px}.app-sub{color:var(--text-muted);margin:8px 0 0;font-size:14px}.app-sub b{color:var(--text);font-weight:600}.header-clock{font-variant-numeric:tabular-nums;letter-spacing:.6px;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:999px;align-items:center;gap:8px;margin-top:10px;padding:5px 14px;font-size:15px;display:inline-flex}.header-clock-dot{background:var(--accent);border-radius:999px;width:7px;height:7px;animation:2s ease-out infinite clock-pulse}@keyframes clock-pulse{0%{box-shadow:0 0 #3ec7ff80}70%{box-shadow:0 0 0 6px #3ec7ff00}to{box-shadow:0 0 #3ec7ff00}}@media (prefers-reduced-motion:reduce){.header-clock-dot{animation:none}}.search{max-width:560px;margin:0 auto 32px;position:relative}.search-input{width:100%;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);outline:none;padding:14px 16px;font-size:16px;transition:border-color .15s,box-shadow .15s}.search-input::placeholder{color:var(--text-dim)}.search-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px #3ec7ff26}.search-results,.direction-list{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);margin:8px 0 0;padding:6px;list-style:none;box-shadow:0 12px 30px #00000073}.search-hit{border-radius:var(--radius-sm);justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.search-hit+.search-hit{border-top:1px solid var(--border)}.search-hit-name{font-size:15px;font-weight:600}.search-hit-lines{gap:6px;display:flex}.line-pick{background:0 0;border:1.5px solid;border-radius:999px;padding:2px;line-height:0;transition:transform .1s}.line-pick:hover{transform:scale(1.12)}.search-empty{color:var(--text-muted);background:var(--panel);border:1px dashed var(--border);border-radius:var(--radius);text-align:center;margin:8px 0 0;padding:12px 14px;font-size:14px}.line-badge{color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:22px;height:22px;padding:0 6px;font-size:13px;font-weight:700;display:inline-flex}.direction-head{align-items:center;gap:8px;margin:12px 2px 8px;font-size:15px;display:flex}.direction-head .muted{color:var(--text-muted);margin-left:auto;font-size:13px}.back-btn{background:var(--panel-2);border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);width:28px;height:28px;font-size:16px;line-height:1}.direction-list{flex-direction:column;gap:6px;display:flex}.direction-opt{text-align:left;width:100%;color:var(--text);background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);grid-template-columns:1fr auto;grid-template-areas:"label cta""prev cta";gap:2px 12px;padding:10px 12px;transition:border-color .12s,background .12s;display:grid}.direction-opt:hover:not(:disabled){border-color:var(--accent);background:#1a2230}.direction-opt:disabled{opacity:.5}.direction-label{grid-area:label;font-weight:700}.direction-prev{color:var(--text-muted);grid-area:prev;font-size:13px}.direction-cta{color:var(--accent);white-space:nowrap;grid-area:cta;align-self:center;font-size:13px;font-weight:700}.direction-opt:disabled .direction-cta{color:var(--text-dim)}.dashboard{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.card{background:linear-gradient(180deg, var(--panel-2), var(--panel));border:1px solid var(--border);border-left:4px solid var(--line-color,var(--accent));border-radius:var(--radius);padding:16px 18px;position:relative;overflow:hidden}.card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.card-title{align-items:center;gap:8px;display:flex}.card-station{letter-spacing:-.3px;font-size:20px}.card-remove{color:var(--text-dim);background:0 0;border:none;border-radius:6px;padding:4px 6px;font-size:15px;transition:color .12s,background .12s}.card-remove:hover{color:var(--danger);background:#ff5d6c1f}.card-direction{color:var(--text-muted);align-items:center;gap:6px;margin:6px 0 18px;font-size:13px;display:flex}.dir-dot{background:var(--line-color,var(--accent));border-radius:999px;width:6px;height:6px}.track{padding:44px 6px 0;position:relative}.track-line{justify-content:space-between;padding:8px 0 4px;display:flex;position:relative}.track-rail{background:linear-gradient(90deg, var(--border) 0%, var(--line-color,var(--accent)) 100%);border-radius:3px;height:3px;position:absolute;top:15px;left:16.666%;right:16.666%}.track-node{z-index:1;flex-direction:column;flex:1;align-items:center;gap:8px;display:flex;position:relative}.node-dot{background:var(--panel);border:2.5px solid var(--text-dim);border-radius:999px;width:12px;height:12px}.node-dot.current{background:var(--line-color,var(--accent));border-color:#fff;width:16px;height:16px;box-shadow:0 0 0 3px #3ec7ff2e}.node-name{color:var(--text-muted);font-size:13px;font-family:var(--mono);letter-spacing:-.3px}.track-node.current .node-name{color:var(--text);font-weight:700}.train-layer{pointer-events:none;z-index:2;height:53px;position:absolute;top:0;left:0;right:0}.train{will-change:left;flex-direction:column;align-items:center;gap:1px;transition:left 1.1s linear;display:flex;position:absolute;bottom:8px;transform:translate(-50%)}.train-pill{white-space:nowrap;border:1px solid var(--border);background:#080b12d9;border-radius:8px;align-items:center;gap:4px;padding:1px 6px;font-size:11px;display:flex}.train-dest{color:var(--text);font-weight:700}.train-eta{font-size:10px;font-weight:700;font-family:var(--mono);color:var(--line-color,var(--accent))}.train-car{filter:drop-shadow(0 0 3px var(--line-color,var(--accent)));font-size:13px;line-height:1}.train.arrived .train-car{animation:1s steps(2,jump-none) infinite train-blink}.train.beyond{opacity:.5}.chip{color:#fff;border-radius:4px;padding:0 3px;font-size:9px;font-weight:800;line-height:1.5}.chip.express{background:#d64545}.chip.last{background:#555c68}@keyframes train-blink{50%{opacity:.3}}.card-status{color:var(--text-muted);text-align:right;margin:14px 0 0;font-size:12px}.card-status.ok{color:var(--text)}.card-status.warn{color:#e6b450}.card-stale{color:var(--danger);margin:10px 0 2px;font-size:13px}.global-banner{color:#e6b450;border-radius:var(--radius-sm);background:#e6b45014;border:1px solid #e6b45059;align-items:center;gap:10px;max-width:560px;margin:-16px auto 28px;padding:12px 16px;font-size:13px;line-height:1.45;display:flex}.global-banner.quota{color:var(--danger);background:#ff5d6c14;border-color:#ff5d6c59}.global-banner-icon{font-size:15px;line-height:1}.global-banner-text{color:var(--text)}.empty{text-align:center;border:1px dashed var(--border);border-radius:var(--radius);background:#171c2766;padding:56px 20px}.empty-title{margin:0;font-size:16px;font-weight:600}.empty-sub{color:var(--text-muted);margin:6px 0 0;font-size:14px}.crash{text-align:center;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);max-width:480px;margin:80px auto;padding:32px 24px}.crash-title{margin:0;font-size:18px;font-weight:700}.crash-sub{color:var(--text-muted);margin:8px 0 20px;font-size:14px}.crash-btn{color:var(--text);background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;padding:10px 20px;font-size:14px;font-weight:600}.crash-btn:hover{border-color:var(--accent)}.app-footer{text-align:center;color:var(--text-dim);margin-top:40px;font-size:12px}@media (width<=640px){.app{padding:20px 14px 60px}.dashboard{grid-template-columns:1fr}}
