:root,:root[data-theme=light]{--bg:#ffffff;--bg-soft:#fafafa;--bg-inset:#f4f4f5;--panel:#ffffff;--line:rgba(0,0,0,0.08);--line-2:rgba(0,0,0,0.16);--txt:#171717;--txt-2:#4d4d4d;--txt-3:#8f8f8f;--acc:#0a72ef;--acc-2:#0068d6;--acc-soft:#ebf5ff;--ok:#12a150;--warn:#b45309;--danger:#d92d20;--shadow-sm:0 0 0 1px rgba(0,0,0,0.08);--shadow-md:0 0 0 1px rgba(0,0,0,0.08),0 2px 2px rgba(0,0,0,0.04);--shadow-lg:0 0 0 1px rgba(0,0,0,0.08),0 2px 2px rgba(0,0,0,0.04),0 10px 10px -10px rgba(0,0,0,0.1);color-scheme:light}:root[data-theme=dark]{--bg:#08090a;--bg-soft:#0f1011;--bg-inset:#141518;--panel:#101113;--line:rgba(255,255,255,0.09);--line-2:rgba(255,255,255,0.18);--txt:#f7f8f8;--txt-2:#b3bac4;--txt-3:#7a818c;--acc:#5b9bff;--acc-2:#8ab6ff;--acc-soft:rgba(91,155,255,0.14);--ok:#34d399;--warn:#fbbf24;--danger:#f87171;--shadow-sm:0 0 0 1px rgba(255,255,255,0.09);--shadow-md:0 0 0 1px rgba(255,255,255,0.09),0 2px 6px rgba(0,0,0,0.4);--shadow-lg:0 0 0 1px rgba(255,255,255,0.1),0 12px 34px -14px rgba(0,0,0,0.85);color-scheme:dark}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--txt);font-family:Geist,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;min-height:100vh}::selection{background:var(--acc-soft);color:var(--acc-2)}.shell{max-width:1160px;margin:0 auto;padding:0 20px}.muted{color:var(--txt-3)}.mono{font-family:Geist Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.nav{position:-webkit-sticky;position:sticky;top:0;z-index:900;-webkit-backdrop-filter:saturate(180%) blur(14px);backdrop-filter:saturate(180%) blur(14px);background:color-mix(in srgb,var(--bg) 84%,transparent);border-bottom:1px solid var(--line)}.nav-in{max-width:1160px;margin:0 auto;padding:11px 20px;gap:16px}.brand,.nav-in{display:flex;align-items:center}.brand{gap:10px;font-weight:600;letter-spacing:-.02em;font-size:15.5px;cursor:pointer;background:none;border:0;color:var(--txt);padding:0}.brand .mark{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:linear-gradient(150deg,var(--acc),var(--acc-2));color:#fff;box-shadow:var(--shadow-sm)}.brand .mark svg{width:17px;height:17px}.nav-spacer{flex:1 1}.theme-toggle{display:flex;gap:2px;padding:3px;border-radius:10px;background:var(--bg-inset);border:1px solid var(--line)}.theme-toggle button{display:flex;align-items:center;gap:6px;border:0;background:transparent;color:var(--txt-3);font:inherit;font-size:12.5px;font-weight:500;padding:5px 9px;border-radius:7px;cursor:pointer;transition:color .15s,background .15s}.theme-toggle button:hover{color:var(--txt)}.theme-toggle button.on{background:var(--panel);color:var(--txt);box-shadow:var(--shadow-sm)}@media (max-width:700px){.theme-toggle button span{display:none}}.hero{padding:72px 0 34px;text-align:center}.eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500;color:var(--acc-2);background:var(--acc-soft);border-radius:999px;padding:5px 13px;margin-bottom:22px}.hero h1{margin:0 auto;max-width:780px;font-size:clamp(33px,5.6vw,58px);line-height:1.03;font-weight:600;letter-spacing:-.045em}.hero h1 em{font-style:normal;color:var(--acc)}.hero p{margin:20px auto 0;max-width:580px;color:var(--txt-2);font-size:clamp(15px,1.5vw,17.5px);line-height:1.65}.search{position:relative;max-width:620px;margin:30px auto 0}.search input{width:100%;padding:16px 50px 16px 46px;font:inherit;font-size:15.5px;background:var(--panel);color:var(--txt);border:1px solid var(--line-2);border-radius:14px;box-shadow:var(--shadow-md);outline:none;transition:border-color .15s,box-shadow .15s}.search input::placeholder{color:var(--txt-3)}.search input:focus{border-color:var(--acc);box-shadow:var(--shadow-md),0 0 0 4px var(--acc-soft)}.search .ico{left:15px;display:grid;pointer-events:none}.search .clear,.search .ico{position:absolute;top:50%;transform:translateY(-50%);color:var(--txt-3)}.search .clear{right:9px;border:0;background:transparent;cursor:pointer;padding:8px;border-radius:8px}.search .clear:hover{color:var(--txt);background:var(--bg-inset)}.stats{display:flex;gap:30px;justify-content:center;margin-top:26px;flex-wrap:wrap}.stat-item{display:flex;flex-direction:column;gap:1px}.stat-item b{font-size:19px;letter-spacing:-.03em}.stat-item span{font-size:12px;color:var(--txt-3)}section{margin-top:28px}.sec-head{display:flex;align-items:center;gap:12px;margin:0 0 14px}.sec-head h2{margin:0;font-size:18.5px;letter-spacing:-.025em;font-weight:600}.sec-head .spacer{flex:1 1}.live-pill{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ok)}.live-dot{width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 3px color-mix(in srgb,var(--ok) 22%,transparent);animation:pulse 2s infinite}@keyframes pulse{50%{opacity:.35}}.count{font-size:12.5px;color:var(--txt-3)}.map-shell{border-radius:16px;overflow:hidden;box-shadow:var(--shadow-lg);background:var(--panel)}.mapwrap{position:relative}.map{height:520px;width:100%;background:var(--bg-inset)}@media (max-width:860px){.map{height:380px}}.bm-switch{position:absolute;top:12px;right:12px;z-index:500;display:flex;gap:3px;background:color-mix(in srgb,var(--panel) 88%,transparent);border:1px solid var(--line);border-radius:10px;padding:3px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:var(--shadow-sm)}.bm-switch button{background:transparent;border:0;color:var(--txt-3);font:inherit;font-size:12px;font-weight:500;padding:5px 10px;border-radius:7px;cursor:pointer}.bm-switch button:hover{color:var(--txt)}.bm-switch button.on{background:var(--acc);color:#fff}.train-marker{background:transparent;border:0}.tm{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:var(--c,#0a72ef);color:#fff;border:2.5px solid var(--panel);box-shadow:0 3px 10px rgba(0,0,0,.35);position:relative;cursor:pointer}.tm svg{width:17px;height:17px;transform:rotate(var(--r,0deg));transition:transform .5s ease}.tm:after{content:"";position:absolute;inset:-6px;border-radius:50%;border:2px solid var(--c,#0a72ef);opacity:.45;animation:ring 2.4s ease-out infinite}@keyframes ring{0%{transform:scale(.75);opacity:.55}to{transform:scale(1.55);opacity:0}}.tm.plain:after{display:none}.tm.sel{transform:scale(1.12)}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(256px,1fr));grid-gap:12px;gap:12px}.card{background:var(--panel);border-radius:14px;padding:16px;box-shadow:var(--shadow-md);text-align:left}.card.click{cursor:pointer;transition:transform .16s ease,box-shadow .16s ease}.card.click:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.card-top{display:flex;align-items:center;gap:10px;margin-bottom:10px}.ka-chip{font-family:Geist Mono,monospace;font-weight:600;font-size:13px;background:var(--acc-soft);color:var(--acc-2);padding:4px 9px;border-radius:8px;min-width:46px;text-align:center}.card h3{margin:0;font-size:15.5px;font-weight:600}.card .route{color:var(--txt-3);font-size:12.5px;margin:7px 0 0}.card .meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;padding:3px 9px;border-radius:999px;border:1px solid var(--line);color:var(--txt-2)}.badge.run{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 35%,transparent);background:color-mix(in srgb,var(--ok) 10%,transparent)}.badge.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 35%,transparent);background:color-mix(in srgb,var(--warn) 10%,transparent)}.rows{flex-direction:column;gap:8px}.row,.rows{display:flex}.row{align-items:center;gap:14px;width:100%;text-align:left;cursor:pointer;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;color:var(--txt);font:inherit;transition:transform .12s,border-color .12s,box-shadow .12s}.row:hover{transform:translateY(-1px);border-color:var(--line-2);box-shadow:var(--shadow-md)}.row-main{flex:1 1;display:flex;flex-direction:column;gap:2px;min-width:0}.row-main b{font-size:14.5px;font-weight:600;letter-spacing:-.015em}.row-main small{color:var(--txt-3);font-size:12.5px}.row-meta{text-align:right;display:flex;flex-direction:column;gap:2px;font-size:12.5px;color:var(--txt-2);font-family:Geist Mono,monospace}.row-meta small{font-size:11.5px;font-family:Geist,sans-serif}.back{background:transparent;border:1px solid var(--line);color:var(--txt-2);font:inherit;font-size:13px;padding:7px 13px;border-radius:9px;cursor:pointer;margin-bottom:16px}.back:hover{color:var(--txt);border-color:var(--line-2)}.detail-head{justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}.detail-head,.detail-head .l{display:flex;align-items:center}.detail-head .l{gap:14px}.detail-head h2{margin:0;font-size:22px;letter-spacing:-.03em}.detail-head .sub{margin:3px 0 0;color:var(--txt-3);font-size:13px}.grid2{display:grid;grid-template-columns:1fr 300px;grid-gap:14px;gap:14px}@media (max-width:900px){.grid2{grid-template-columns:1fr}}.side{display:flex;flex-direction:column;gap:12px}.side .card{padding:15px}.kv{display:flex;flex-direction:column;gap:3px;padding-bottom:11px;border-bottom:1px solid var(--line)}.kv:last-child{border-bottom:0;padding-bottom:0}.kv span{color:var(--txt-3);font-size:11.5px}.kv b{font-size:14px;font-weight:600}.note{color:var(--txt-3);font-size:11.5px;margin:0;line-height:1.5}.card h3{margin:0 0 12px;font-size:14.5px;letter-spacing:-.02em}.warn-card{border:1px solid color-mix(in srgb,var(--warn) 35%,transparent)!important;background:color-mix(in srgb,var(--warn) 7%,transparent)!important;box-shadow:none}.disusul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;font-size:13px;color:var(--txt-2)}.disusul li{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}.disusul .st{font-weight:600;color:var(--txt)}.disusul .tm3{font-family:Geist Mono,monospace;font-size:12px;color:var(--txt-3)}.tl{list-style:none;margin:0;padding:0}.tl li{display:flex;gap:13px;padding:9px 0;position:relative}.tl li:before{content:"";position:absolute;left:6px;top:0;bottom:0;width:1.5px;background:var(--line-2)}.tl li:first-child:before{top:50%}.tl li:last-child:before{bottom:50%}.tl .dot{width:13px;height:13px;border-radius:50%;background:var(--bg);border:2px solid var(--line-2);margin-top:3px;z-index:1;flex:0 0 auto}.tl li.next .dot{border-color:var(--acc);box-shadow:0 0 0 3px var(--acc-soft)}.tl li.dis .dot{border-color:var(--warn)}.tl .body{display:flex;flex-direction:column;gap:2px;min-width:0}.tl .nm{font-size:14px;font-weight:500;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tl .tm2{display:flex;gap:14px;color:var(--txt-3);font-size:12px;font-family:Geist Mono,monospace}.tag{font-size:10.5px;font-weight:600;padding:2px 7px;border-radius:999px}.tag.dis{background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--warn)}.tag.next{background:var(--acc-soft);color:var(--acc-2)}.leaflet-container{background:var(--bg-inset);font-family:Geist,system-ui,sans-serif}.leaflet-popup-content-wrapper{background:var(--panel);color:var(--txt);border-radius:11px;box-shadow:var(--shadow-lg)}.leaflet-popup-tip{background:var(--panel)}.leaflet-popup-content{margin:11px 13px;font-size:12.5px;line-height:1.5}.leaflet-container a.leaflet-popup-close-button{color:var(--txt-3)}.leaflet-bar a{background:var(--panel);color:var(--txt);border-bottom-color:var(--line)}.leaflet-bar a:hover{background:var(--bg-inset)}.leaflet-control-attribution{background:color-mix(in srgb,var(--panel) 85%,transparent)!important;color:var(--txt-3)!important;font-size:10.5px!important}.leaflet-control-attribution a{color:var(--txt-2)!important}.pop{display:flex;flex-direction:column;gap:4px;min-width:160px}.pop .pn{font-weight:600;font-size:13.5px}.pop .pr{color:var(--txt-3);font-size:11.5px}.pop button{margin-top:6px;border:0;background:var(--acc);color:#fff;font:inherit;font-size:12px;font-weight:500;padding:6px 10px;border-radius:8px;cursor:pointer}.foot{margin:48px 0 34px;padding-top:22px;border-top:1px solid var(--line);color:var(--txt-3);font-size:12.5px;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap}.foot a{color:var(--txt-2)}.empty{color:var(--txt-3);font-size:14px;padding:30px 0;text-align:center}.skeleton{height:84px;border-radius:12px;background:var(--bg-inset);animation:sk 1.4s ease-in-out infinite}@keyframes sk{50%{opacity:.55}}