:root{--surface: rgba(18, 24, 34, .82);--surface-2: rgba(255, 255, 255, .04);--surface-hover:rgba(255, 255, 255, .07);--surface-active:rgba(90, 200, 216, .14);--border: rgba(255, 255, 255, .09);--border-strong:rgba(255, 255, 255, .16);--text: #e8edf4;--text-dim: #a3b0c2;--text-faint:#7c8a9e;--accent: #5ac8d8;--accent-ink: #06121a;--ok: #51cf66;--bad: #ff6b6b;--warn: #ffb155;--return:#ffc440;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--fs-xs: 11px;--fs-sm: 12px;--fs-base: 13px;--fs-md: 14px;--fs-lg: 16px;--radius: 10px;--radius-sm: 6px;--shadow: 0 8px 32px rgba(0, 0, 0, .45), 0 1px 0 rgba(255, 255, 255, .04) inset;--font-ui: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Menlo, monospace}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font-family:var(--font-ui);color:var(--text);-webkit-font-smoothing:antialiased}#app,#map{position:absolute;top:0;right:0;bottom:0;left:0}.surface{background:var(--surface);backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);color:var(--text)}#topbar{position:absolute;top:var(--sp-3);left:var(--sp-3);right:var(--sp-3);z-index:11;pointer-events:none}#topbar>*{pointer-events:auto}#topbar-left{display:flex;gap:var(--sp-2);align-items:center}#dropzone{display:flex;gap:var(--sp-2);align-items:center;padding:var(--sp-2) var(--sp-3);font-size:var(--fs-sm)}#dropzone .file-btn{display:inline-flex;align-items:center}#dropzone .hint{color:var(--text-faint);font-size:var(--fs-xs)}.chip-sep{width:1px;align-self:stretch;margin:0 var(--sp-1);background:var(--border)}#export-wrap{position:relative;display:inline-flex}#export-pop{position:absolute;top:calc(100% + var(--sp-2));left:0;z-index:12;min-width:168px;padding:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-3);font-size:var(--fs-xs)}#export-pop[hidden]{display:none}.export-group{display:flex;flex-direction:column;gap:4px;color:var(--text-dim)}.export-label{font-weight:600;color:var(--text-faint);letter-spacing:.06em;text-transform:uppercase;margin-bottom:2px}.export-group label{display:inline-flex;align-items:center;gap:6px;cursor:pointer}.export-group input{accent-color:var(--accent);cursor:pointer;margin:0}#export-go{width:100%}#layer-toggles{display:inline-flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-xs);color:var(--text-dim);white-space:nowrap}#layer-toggles label{display:inline-flex;align-items:center;gap:5px;cursor:pointer}#layer-toggles input{accent-color:var(--accent);cursor:pointer;margin:0}#stats-chip{display:inline-flex;align-items:center;gap:6px;padding:var(--sp-2) var(--sp-3);font-size:var(--fs-xs);font-family:var(--font-mono);color:var(--text-dim);white-space:nowrap}#stats-chip:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent)}.btn{font:inherit;font-size:var(--fs-sm);line-height:1;padding:7px var(--sp-3);border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text);cursor:pointer;transition:background .12s ease,border-color .12s ease,color .12s ease}.btn:hover{background:var(--surface-hover);border-color:var(--accent)}.btn:active{transform:translateY(.5px)}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.btn-primary:hover{background:#74d6e3;border-color:#74d6e3;color:var(--accent-ink)}.btn-danger{background:var(--bad);border-color:var(--bad);color:#fff;font-weight:600}.btn-danger:hover{background:#ff8585;border-color:#ff8585}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}#line-list{position:absolute;top:60px;left:var(--sp-3);z-index:10;width:248px;max-height:64vh;display:flex;flex-direction:column;padding:var(--sp-2);overflow:hidden}#line-search{font:inherit;font-size:var(--fs-sm);width:100%;padding:6px var(--sp-2);margin-bottom:var(--sp-2);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text)}#line-search::placeholder{color:var(--text-faint)}#line-search:focus{border-color:var(--accent);outline:none}#line-list-scroll{overflow:auto;flex:1;margin:0 calc(-1 * var(--sp-1));padding:0 var(--sp-1)}.line-group-label{font-size:var(--fs-xs);font-weight:600;color:var(--text-faint);letter-spacing:.06em;text-transform:uppercase;padding:var(--sp-2) var(--sp-2) var(--sp-1)}.line-item{display:flex;align-items:center;gap:var(--sp-2);width:100%;text-align:left;border:0;background:none;color:var(--text-dim);padding:5px var(--sp-2);border-radius:var(--radius-sm);font:inherit;font-size:var(--fs-sm);cursor:pointer;transition:background .1s ease,color .1s ease}.line-item:hover{background:var(--surface-hover);color:var(--text)}.line-item.is-active{background:var(--surface-active);color:var(--text);font-weight:600}.line-item .line-code{font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:600;color:var(--accent);min-width:30px}.line-item.is-active .line-code{color:var(--accent)}.line-item .line-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#line-empty{color:var(--text-faint);font-size:var(--fs-sm);padding:var(--sp-2)}#speed-legend{position:absolute;bottom:var(--sp-3);left:var(--sp-3);z-index:10;padding:var(--sp-3);font-size:var(--fs-xs);line-height:1.7}#speed-legend .legend-title{font-weight:600;color:var(--text);font-size:var(--fs-xs);letter-spacing:.04em;margin-bottom:var(--sp-2)}#speed-legend .legend-row{display:flex;align-items:center;gap:var(--sp-2);color:var(--text-dim)}#speed-legend .legend-swatch{width:16px;height:3px;border-radius:2px;flex:none}#speed-legend hr{border:0;border-top:1px solid var(--border);margin:var(--sp-2) 0}#speed-legend .legend-subtitle{font-weight:600;color:var(--text);font-size:var(--fs-xs);letter-spacing:.04em;margin-bottom:var(--sp-1)}#speed-legend .legend-note{font-weight:400;color:var(--text-faint)}#speed-legend .legend-dir-row{display:flex;align-items:center;gap:var(--sp-2);color:var(--text-dim);font-size:var(--fs-xs)}.dir-tag{display:inline-flex;align-items:center;justify-content:center;width:18px;height:15px;border-radius:4px;background:#0d1b2aeb;border:1px solid currentColor;font-family:var(--font-mono);font-size:10px;line-height:1}.dir-tag.out{color:var(--accent)}.dir-tag.ret{color:var(--return)}#panel{position:absolute;top:var(--sp-3);right:var(--sp-3);z-index:11;width:300px;max-height:calc(100vh - 2 * var(--sp-3));overflow:auto;padding:var(--sp-4);font-size:var(--fs-base);line-height:1.55}#panel h2{font-size:var(--fs-lg);font-weight:650;margin:0 0 var(--sp-1);letter-spacing:-.01em;display:flex;align-items:baseline;gap:var(--sp-2)}#panel h2 .h2-meta{font-size:var(--fs-xs);font-weight:400;color:var(--text-faint);font-family:var(--font-mono)}#panel p{margin:var(--sp-1) 0;color:var(--text-dim)}#panel p b,#panel td b{color:var(--text);font-weight:600}#panel .muted{color:var(--text-faint);font-size:var(--fs-xs)}#panel .warn{color:var(--warn);font-size:var(--fs-xs)}#panel .section-label{margin-top:var(--sp-4);font-weight:600;color:var(--text)}#panel .num{font-family:var(--font-mono);font-feature-settings:"tnum"}#panel table{width:100%;border-collapse:collapse;margin-top:var(--sp-2);font-size:var(--fs-sm)}#panel th{text-align:left;padding:var(--sp-1) var(--sp-2);color:var(--text-faint);font-weight:600;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border-strong)}#panel td{text-align:left;padding:var(--sp-1) var(--sp-2);border-bottom:1px solid var(--border);color:var(--text-dim)}#panel tbody tr:last-child td{border-bottom:0}#panel tbody tr:hover td{background:var(--surface-2)}#panel td.col-num{font-family:var(--font-mono);font-feature-settings:"tnum";color:var(--text)}#panel .row-terminus td{text-align:center;background:var(--surface-2);color:var(--text);font-weight:600}.btn-mini{font:inherit;font-size:var(--fs-xs);padding:2px var(--sp-2);border-radius:4px;border:1px solid var(--border-strong);background:var(--surface-2);color:var(--text-dim);cursor:pointer}.btn-mini:hover{background:var(--surface-hover);color:var(--text);border-color:var(--accent)}#panel .station-line-row{display:flex;align-items:baseline;gap:var(--sp-1)}#panel .line-link{font:inherit;padding:0;border:0;background:none;color:var(--text);cursor:pointer;text-align:left;border-bottom:1px dotted var(--border-strong)}#panel .line-link:hover{color:var(--accent);border-bottom-color:var(--accent)}
