:root{--bg:#f5f6f8;--bg-elev:#fff;--text:#1c1f26;--text-soft:#6b7280;--line:#e7e9ee;--accent:#3a5af0;--accent-soft:#eef1fe;--direct:#0e9f6e;--transfer:#b9770a;--shadow:0 1px 2px #1418280a, 0 8px 24px #1418280f;--radius:18px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#0e1014;--bg-elev:#181b22;--text:#eef0f4;--text-soft:#9aa1ac;--line:#262a33;--accent:#7b93ff;--accent-soft:#1c2336;--direct:#34d399;--transfer:#e9b949;--shadow:0 1px 2px #0000004d, 0 8px 24px #00000059}}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans TC,PingFang TC,Microsoft JhengHei,sans-serif;line-height:1.5}button{cursor:pointer;font-family:inherit}input{font-family:inherit}.app{max-width:560px;padding:calc(24px + env(safe-area-inset-top)) calc(16px + env(safe-area-inset-right)) calc(48px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left));min-height:100svh;margin:0 auto}.board-on-btn{border:1px solid var(--accent);background:var(--accent-soft);width:100%;color:var(--accent);border-radius:12px;margin-top:12px;padding:12px;font-size:16px;font-weight:600}.board-on-btn:disabled{opacity:.4;border-color:var(--line);color:var(--text-soft);background:0 0}.ride-pill{border:1px solid var(--accent);background:var(--accent-soft);width:100%;color:var(--accent);border-radius:999px;align-items:center;gap:8px;margin-bottom:14px;padding:12px 14px;font-weight:600;display:flex}.ride-pill-dot{background:var(--direct);border-radius:50%;width:10px;height:10px;animation:1.4s ease-in-out infinite ridepulse}@keyframes ridepulse{0%,to{opacity:1}50%{opacity:.3}}.ride-back{color:var(--text-soft);background:0 0;border:none;padding:4px 0 12px;font-size:15px}.confirm-sheet,.ride-view{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}.confirm-title{color:var(--text-soft);margin:0 0 12px;font-size:15px}.confirm-leg{border:1px solid var(--line);border-radius:14px;align-items:flex-start;gap:12px;margin-bottom:16px;padding:14px;display:flex}.confirm-leg-txt{font-size:16px;line-height:1.6}.confirm-note{color:var(--text-soft);margin:0 0 14px;font-size:13px}.ride-btn{border:none;border-radius:14px;width:100%;margin-top:10px;padding:15px;font-size:17px;font-weight:700}.ride-btn.primary{background:var(--accent);color:#fff}.ride-btn.ghost{border:1px solid var(--line);color:var(--text-soft);background:0 0;font-weight:500}.ride-btn.cancel{color:var(--text-soft);background:0 0;font-size:14px;font-weight:500}.mode-toggle{gap:10px;margin-bottom:8px;display:flex}.mode-opt{border:1.5px solid var(--line);background:var(--bg-elev);text-align:center;color:var(--text-soft);border-radius:12px;flex-direction:column;flex:1;gap:3px;padding:12px 8px;display:flex}.mode-opt b{color:var(--text);font-size:15px}.mode-opt small{font-size:12px}.mode-opt.on{border-color:var(--accent);background:var(--accent-soft)}.mode-opt.on b{color:var(--accent)}.ride-header{border-bottom:1px solid var(--line);align-items:center;gap:10px;margin-bottom:14px;padding-bottom:14px;display:flex}.ride-terminus{color:var(--text-soft);flex:1;font-size:15px}.ride-end{border:1px solid var(--line);color:var(--text-soft);background:0 0;border-radius:999px;padding:5px 14px;font-size:14px}.ride-hero-box{text-align:center;padding:18px 0 6px}.ride-hero{margin:0;font-size:24px;font-weight:700}.ride-hero .big{color:var(--accent);margin:0 4px;font-size:40px}.ride-hero-sub{color:var(--text-soft);margin:6px 0 0;font-size:16px}.ride-note{color:var(--text-soft);margin:10px 0 0;font-size:13px}.ride-banner{text-align:center;border-radius:12px;margin-bottom:6px;padding:12px 14px;font-size:16px;font-weight:600}.ride-banner.approach{background:color-mix(in srgb, var(--transfer) 18%, transparent);color:var(--transfer)}.ride-banner.warn{background:color-mix(in srgb, var(--text-soft) 14%, transparent);color:var(--text-soft)}.link-btn{color:var(--accent);font:inherit;background:0 0;border:none;padding:0 0 0 4px;text-decoration:underline}.stop-rail{margin:16px 0 8px;padding:0 0 0 4px;list-style:none}.rail-stop{align-items:center;gap:12px;padding:7px 0;display:flex;position:relative}.rail-stop:before{content:"";background:var(--line);width:2px;position:absolute;top:0;bottom:0;left:5px}.rail-stop:first-child:before{top:50%}.rail-stop:last-child:before{bottom:50%}.rail-dot{background:var(--bg-elev);border:2px solid var(--line);z-index:1;border-radius:50%;flex:none;width:12px;height:12px}.rail-name{color:var(--text);font-size:15px}.rail-stop.passed .rail-name{color:var(--text-soft);opacity:.6}.rail-stop.passed .rail-dot{background:var(--text-soft);border-color:var(--text-soft);opacity:.5}.rail-stop.current .rail-dot{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.rail-stop.current .rail-name{color:var(--accent);font-weight:700}.rail-stop.alight .rail-dot{border-color:var(--direct)}.rail-stop.alight .rail-name{font-weight:600}.ride-transfer,.ride-arrived{text-align:center;padding:10px 0}.ride-transfer .confirm-leg{text-align:left;margin-top:16px}.app-header{text-align:center;margin:12px 0 24px}.app-header h1{letter-spacing:1px;margin:0;font-size:30px;font-weight:700}.tagline{color:var(--text-soft);margin:4px 0 0;font-size:15px}.slogan{color:var(--text-soft);letter-spacing:0;font-size:16px;font-weight:500}.subtitle{color:var(--text-soft);letter-spacing:1px;margin:4px 0 0;font-size:15px}.tdx-credit{color:var(--text-soft);opacity:.35;margin-top:6px;font-size:9px}.font-control{color:var(--text-soft);justify-content:flex-end;align-items:center;gap:6px;margin-bottom:4px;font-size:12px;display:flex}.font-control button{border:1px solid var(--line);background:var(--bg-elev);color:var(--text);border-radius:6px;padding:2px 9px;font-size:12px}.font-label{cursor:pointer}.topnav{gap:8px;margin:8px 0 4px;display:flex}.topnav button{border:1px solid var(--line);background:var(--bg-elev);color:var(--text-soft);border-radius:10px;flex:1;padding:8px;font-size:14px;font-weight:600}.topnav button.on{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.head-right{align-items:flex-start;gap:10px;display:flex}.star{color:var(--text-soft);background:0 0;border:none;padding:0;font-size:22px;line-height:1}.star.on{color:#f5b301}.fav-route{color:var(--text-soft);margin:14px 4px 6px;font-size:14px}.fav-route b{color:var(--text)}.search-card{background:var(--bg-elev);border-radius:var(--radius);box-shadow:var(--shadow);padding:8px 14px 14px}.picker{align-items:center;gap:12px;padding:10px 4px;display:flex;position:relative}.picker-icon{color:var(--accent);text-align:center;width:16px;font-size:12px}.picker-body{flex:1;position:relative}.picker-label{color:var(--text-soft);font-size:12px;display:block}.picker-input{width:100%;color:var(--text);background:0 0;border:none;outline:none;padding:2px 0;font-size:17px}.picker-divider{background:var(--line);height:1px;margin-left:28px}.locate-btn{background:var(--accent-soft);color:var(--accent);border:none;border-radius:50%;width:38px;height:38px;font-size:18px}.picker-list{z-index:10;background:var(--bg-elev);border:1px solid var(--line);box-shadow:var(--shadow);-webkit-overflow-scrolling:touch;border-radius:12px;max-height:46vh;margin:6px 0 0;padding:6px;list-style:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto}.picker-list button{text-align:left;width:100%;color:var(--text);background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:10px 12px;font-size:16px;display:flex}.picker-list button:hover{background:var(--accent-soft)}.search-btn{background:var(--accent);color:#fff;border:none;border-radius:12px;width:100%;margin-top:12px;padding:14px;font-size:17px;font-weight:600;transition:opacity .2s}.search-btn:disabled{opacity:.4}.hint{text-align:center;color:var(--text-soft);margin:8px 0 2px;font-size:13px}.picker-empty{color:var(--text-soft);padding:10px 12px;font-size:14px}.results{margin-top:24px}.section-title{align-items:center;gap:8px;margin:24px 4px 10px;font-size:17px;font-weight:600;display:flex}.section-title span{color:var(--text-soft);background:var(--line);border-radius:999px;padding:1px 8px;font-size:13px}.empty{color:var(--text-soft);margin:0 4px;font-size:14px}.results-context{color:var(--text-soft);margin:4px 4px 8px;font-size:14px}.results-context b{color:var(--text)}.board-card{background:var(--bg-elev);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:12px;padding:14px 16px}.board-head{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.plan-tag{border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600}.plan-tag.direct{color:var(--direct);background:color-mix(in srgb, var(--direct) 14%, transparent)}.plan-tag.transfer{color:var(--transfer);background:color-mix(in srgb, var(--transfer) 16%, transparent)}.board-eta{color:var(--accent);flex-direction:column;align-items:flex-end;font-size:20px;font-weight:700;line-height:1.1;display:flex}.board-eta small{color:var(--text-soft);margin-top:2px;font-size:11px;font-weight:500}.board-from,.board-dest{color:var(--text-soft);font-size:14px}.board-from b,.board-dest b{color:var(--text);font-weight:600}.board-legs{border-top:1px solid var(--line);border-bottom:1px solid var(--line);flex-direction:column;gap:8px;margin:8px 0;padding:8px 0;display:flex}.ride{font-size:15px}.ride-head{align-items:center;gap:8px;display:flex}.ride-ico{font-size:16px}.route-pill{border:1.5px solid var(--text-soft);white-space:nowrap;letter-spacing:.3px;border-radius:6px;padding:1px 9px;font-size:13px;font-weight:700}.route-pill.bus{background:color-mix(in srgb, var(--text-soft) 12%, transparent);color:var(--text);border-color:var(--text-soft)}.stamp{letter-spacing:.5px;border-radius:4px;padding:1px 6px;font-size:11px;font-weight:700}.stamp.bus{background:var(--line);color:var(--text-soft)}.stamp.metro{background:color-mix(in srgb, var(--accent) 18%, transparent);color:var(--accent)}.ride-time{color:var(--text);margin-left:auto;font-size:14px;font-weight:700}.ride-sub{color:var(--text-soft);margin:2px 0 0 24px;font-size:14px}.ride-arrive{color:var(--accent);margin-left:8px}.opt-name{flex:1}.opt-type{letter-spacing:.5px;border-radius:4px;padding:1px 7px;font-size:11px;font-weight:700}.opt-type.bus{background:var(--line);color:var(--text-soft)}.opt-type.metro{background:color-mix(in srgb, var(--accent) 18%, transparent);color:var(--accent)}.transfer-wait{border-radius:8px;margin-left:24px;padding:4px 10px;font-size:13px}.transfer-wait.ok{color:var(--direct);background:color-mix(in srgb, var(--direct) 12%, transparent)}.transfer-wait.warn{color:var(--transfer);background:color-mix(in srgb, var(--transfer) 14%, transparent)}.transfer-wait.muted{color:var(--text-soft);background:var(--line)}.app-footer{text-align:center;color:var(--text-soft);flex-direction:column;gap:4px;margin-top:36px;font-size:12px;display:flex}.app-footer .badge{background:var(--transfer);color:#fff;border-radius:999px;align-self:center;padding:1px 10px;font-size:11px}.error{color:#d23;text-align:center;margin:12px 0}.lines-at{margin:16px 0 4px}.lines-title{color:var(--text-soft);margin:0 4px 8px;font-size:13px}.lines-title b{color:var(--text)}.lines-chips{flex-wrap:wrap;gap:6px;display:flex}.line-chip{border:1.5px solid var(--text-soft);border-radius:10px;flex-direction:column;align-items:flex-start;gap:2px;padding:5px 10px;font-size:13px;transition:opacity .2s;display:inline-flex}.chip-route{font-weight:700}.chip-dir{opacity:.85;white-space:nowrap;font-size:11px;font-weight:500}.line-chip.bus.on{background:color-mix(in srgb, var(--text-soft) 12%, transparent);color:var(--text)}.line-chip.metro.on{background:0 0}.line-chip.off{opacity:.32;border-color:var(--line);color:var(--text-soft);background:0 0}.search-btn.refresh{color:var(--accent);border:1.5px solid var(--accent);background:0 0}.search-btn.refresh:disabled{border-color:var(--line);color:var(--text-soft)}@keyframes flash{0%{background-color:var(--accent-soft)}to{background-color:#0000}}.flash{border-radius:4px;animation:.7s ease-out flash}.total{color:var(--text)}.walk-link{color:var(--accent);text-decoration:underline}.board-card.direct{border:1px solid color-mix(in srgb, var(--direct) 45%, transparent)}.board-card.transfer{border:1px solid color-mix(in srgb, var(--transfer) 45%, transparent)}.board-card.blocked{border:1px solid var(--line);opacity:.66}
