:root{color-scheme:dark;--bg: #0a0f0d;--panel: #101816;--line: #21312c;--text: #e6f0ec;--muted: #7d918a;--accent: #28d08a;--warn: #f5b942;--danger: #e5484d;--font-board: ui-monospace, "SF Mono", SFMono-Regular, "Roboto Mono", Menlo, Consolas, "Liberation Mono", monospace}*{box-sizing:border-box}body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:radial-gradient(1200px 600px at 70% -10%,rgba(40,208,138,.08),transparent 60%),var(--bg);color:var(--text);min-height:100vh}.app{max-width:920px;margin:0 auto;padding:max(32px,env(safe-area-inset-top)) max(20px,env(safe-area-inset-right)) max(24px,env(safe-area-inset-bottom)) max(20px,env(safe-area-inset-left))}header h1{margin:0 0 4px;font-size:28px;letter-spacing:.5px}header .sub{margin:0 0 24px;color:var(--muted);font-size:14px}header h1 .arrow{color:var(--accent);font-weight:400}.swap{display:inline-flex;align-items:center;gap:8px;margin-bottom:24px;padding:8px 16px;font-size:14px;font-weight:600;color:var(--accent);background:#28d08a1a;border:1px solid rgba(40,208,138,.35);border-radius:999px;cursor:pointer;transition:all .15s ease}.swap:hover{background:#28d08a33;transform:translateY(-1px)}.swap:active{transform:translateY(0)}.stations{display:flex;align-items:flex-end;gap:12px;margin-bottom:24px}.station-field{display:flex;flex-direction:column;gap:6px}.station-field .s-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.station-field select{font-size:15px;font-weight:600;color:var(--text);background:#ffffff0a;border:1px solid var(--line);border-radius:10px;padding:9px 12px;cursor:pointer}.station-field select:focus{outline:none;border-color:#28d08a80}.stations .swap{margin-bottom:0}.board{background:var(--panel);border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:0 20px 60px #00000073}.board-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:16px 20px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#14201c,#0f1715)}.last{padding:10px 20px;font-size:13px;color:var(--warn);border-bottom:1px solid var(--line);background:#f5b9420f}.last .mono{font-size:14px}.board-tools{display:flex;gap:10px;flex-wrap:wrap;padding:12px 20px;border-bottom:1px solid var(--line)}.tool{position:relative;flex:1;min-width:170px}.tool-btn{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;font-size:13px;font-weight:700;color:var(--text);background:#ffffff0a;border:1px solid var(--line);border-radius:10px;cursor:pointer;text-align:left;white-space:nowrap;overflow:hidden}.tool-btn .chev{color:var(--muted);font-size:11px;transition:transform .15s ease}.tool-btn.open{border-color:#28d08a80}.tool-btn.open .chev{transform:rotate(180deg)}.picker{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:20;display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;padding:12px;background:#0e1613;border:1px solid var(--line);border-radius:12px;box-shadow:0 18px 50px #0000008c;max-height:240px;overflow-y:auto}.picker .chip-btn{padding:10px 6px;text-align:center}.chip-btn{padding:6px 14px;font-size:12px;font-weight:700;color:var(--muted);background:#ffffff08;border:1px solid var(--line);border-radius:999px;cursor:pointer;transition:all .15s ease}.chip-btn:hover{color:var(--text);border-color:#28d08a66}.chip-btn.active{color:#06251a;background:var(--accent);border-color:var(--accent)}.arrive-input{grid-column:1 / -1;display:flex;gap:8px;align-items:center}.arrive-input input[type=time]{flex:1;min-width:0;color-scheme:dark;font-size:15px;font-weight:600;padding:9px 10px;background:#ffffff0a;border:1px solid var(--line);border-radius:10px;color:var(--text)}.arrive-input input[type=time]:focus{outline:none;border-color:#28d08a80}.alarm{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:50%;color:var(--muted);background:#ffffff0a;border:1px solid var(--line);cursor:pointer;transition:all .15s ease}.alarm:hover{color:var(--text);border-color:#28d08a66}.alarm.on{color:#06251a;background:var(--accent);border-color:var(--accent)}.chev-exp{color:var(--muted);font-size:12px;transition:transform .15s ease,color .15s ease;flex:none}.chev-exp.open{transform:rotate(90deg);color:var(--accent)}.stops{display:flex;flex-direction:column;gap:10px;padding:12px 20px 14px 32px;border-bottom:1px solid #1a2924;background:#ffffff04;animation:stops-in .2s ease-out}@keyframes stops-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.stops-title{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.stop{display:grid;grid-template-columns:18px 1fr auto auto;gap:8px;align-items:center;position:relative}.stop:not(:last-child):after{content:"";position:absolute;left:7px;top:18px;height:calc(100% + 2px);width:2px;background:var(--line);z-index:0}.stop-line{width:16px;height:16px;border-radius:50%;background:#101816;border:2px solid var(--line);z-index:1}.stop.current .stop-line{border-color:var(--accent);background:var(--accent)}.stop-name{font-weight:600}.stop-kind{color:var(--muted);font-size:12px}.stop-time{color:var(--text);font-size:13px;text-align:right}.stops-note{color:var(--muted);font-size:12px;font-style:italic}.row.due .countdown{font-weight:800;animation:pulse 1.2s ease-in-out infinite}.row.flash{animation:dueflash 1.3s ease-out}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes dueflash{0%,to{box-shadow:inset 0 0 #28d08a00}30%{box-shadow:inset 0 0 0 1px #28d08ab3}}.toast{position:fixed;left:50%;bottom:max(18px,env(safe-area-inset-bottom));transform:translate(-50%);z-index:50;max-width:min(480px,calc(100vw - 32px));background:#13201b;border:1px solid var(--line);border-left:3px solid var(--accent);color:var(--text);font-size:13px;font-weight:600;padding:12px 18px;border-radius:12px;box-shadow:0 18px 50px #0000008c;animation:toast-in .25s ease-out}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.refbtn{margin-left:8px;padding:6px 10px;font-size:13px;line-height:1;color:var(--muted);background:none;border:1px solid var(--line);border-radius:8px;cursor:pointer;vertical-align:middle}.refbtn:hover{color:var(--text);border-color:#28d08a66}.spin{display:inline-block;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.ptr{position:fixed;top:0;left:0;right:0;z-index:40;display:flex;justify-content:center;padding-top:max(10px,env(safe-area-inset-top) + 6px);pointer-events:none;transition:opacity .2s ease}.ptr span{background:#0e1613eb;border:1px solid var(--line);color:var(--muted);font-size:12px;padding:6px 14px;border-radius:999px}.badge.fastest{display:inline-block;margin-left:8px;padding:2px 8px;font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;vertical-align:middle;color:#06251a;background:var(--accent);border-radius:999px}.calls .arrive{color:var(--accent)}.route{display:flex;align-items:baseline;gap:10px;font-weight:700}.route .station{font-size:17px}.route .arrow{color:var(--accent)}.updated{color:var(--muted);font-size:12px}.updated.stale{color:var(--warn);font-weight:700}.board-title{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.cols,.row{display:grid;grid-template-columns:40px 120px 1fr auto;align-items:center;gap:14px;padding:0 20px}.cols{padding-top:10px;padding-bottom:10px;border-bottom:1px solid var(--line);color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em}.row{min-height:62px;border-bottom:1px solid #1a2924}.row:hover{background:#ffffff05}.row{cursor:pointer;transition:background .15s ease}.train.open>.row{background:#28d08a0b;box-shadow:inset 0 1px #28d08a40}.train:last-child>.row{border-bottom:none}.cell.num{color:var(--muted)}.mono{font-family:var(--font-board);font-variant-numeric:tabular-nums;font-weight:600}.cell.time{display:flex;flex-direction:column;gap:2px}.cell.time .time-main{font-size:20px}.est{color:var(--warn);font-size:13px}.dest{font-weight:600}.calls{display:block;color:var(--muted);font-size:12px;margin-top:2px}.cell.meta{display:flex;align-items:center;justify-content:flex-end;gap:12px;min-width:0}.cell.meta .plat{color:var(--text);font-size:13px}.cell.meta .countdown{min-width:72px;text-align:right}.col.meta{text-align:right}.chip{display:inline-block;font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;text-align:center;white-space:nowrap}.chip.on-time{color:#bff5dd;background:#28d08a26}.chip.late{color:#ffd7d8;background:#e5484d26}.chip.delayed{color:#ffe6b8;background:#f5b94226}.chip.cancelled{color:#fff;background:#e5484d8c}.chip.unknown{color:var(--muted);background:#7d918a26}.empty{padding:40px;text-align:center;color:var(--muted)}.rowcount{padding:8px 22px;font-size:12px;color:var(--muted);border-bottom:1px solid var(--line)}.message{padding:48px 20px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:16px}.message.error{color:var(--danger)}.message button{margin-left:12px;background:none;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:6px 14px;cursor:pointer}footer{margin-top:16px;text-align:center;color:var(--muted);font-size:12px}@media (max-width: 680px){.app{padding:max(20px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}header h1{font-size:22px}header .sub{font-size:12px;margin-bottom:16px}header .stations{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;margin-bottom:18px}.station-field select{width:100%;font-size:14px;padding:10px 8px}.stations .swap{margin-top:16px;padding:10px 12px}.cols{display:none}.row{grid-template-columns:82px 1fr;gap:8px;padding:12px;align-items:start}.cell.num{display:none}.cell.time .time-main{font-size:18px}.cell.meta{grid-column:1 / -1;justify-content:flex-start;gap:10px;margin-top:4px;padding-top:8px;border-top:1px dashed rgba(255,255,255,.08)}.cell.meta .countdown{margin-left:auto}.board-head{flex-direction:column;gap:4px}.board-tools{padding:12px}.picker{position:static;grid-template-columns:repeat(auto-fill,minmax(82px,1fr));max-height:200px;border:none;border-top:1px solid var(--line);border-radius:0;box-shadow:none;padding:10px 0 0;margin-top:8px}.picker .chip-btn{padding:12px 6px}.last{font-size:12px;padding:8px 12px}.badge.fastest{margin-left:6px;font-size:9px}.stops{padding:10px 12px 12px 20px;gap:9px}.stop{grid-template-columns:18px 1fr auto auto}.stop-kind{font-size:11px}}@media (max-width: 420px){.row{grid-template-columns:74px 1fr}.cell.to .dest{font-size:14px}.calls{font-size:11px}}.countdown.u-ok,.hero-count.u-ok{color:var(--accent)}.countdown.u-soon,.hero-count.u-soon{color:var(--warn)}.countdown.u-now,.hero-count.u-now{color:var(--danger)}.hero-count.u-now{animation:pulse 1.2s ease-in-out infinite}.hero{display:flex;align-items:stretch;gap:20px;margin-bottom:20px;padding:22px 26px;background:linear-gradient(135deg,#15211d,#0f1715);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:16px;box-shadow:0 20px 60px #00000073}.hero.cancelled{border-left-color:var(--danger)}.hero.u-soon{border-left-color:var(--warn)}.hero.u-now{border-left-color:var(--danger)}.hero-main{flex-grow:1;display:flex;flex-direction:column;gap:4px;min-width:0}.hero-eyebrow{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.hero-dest{font-size:22px;font-weight:700}.hero-times{display:flex;align-items:baseline;gap:12px;margin-top:4px}.hero-time{font-size:46px;font-weight:800;line-height:1;letter-spacing:1px}.hero-est{font-size:15px;color:var(--warn)}.hero-arrive{font-size:13px;color:var(--muted);margin-top:4px}.hero-arrive .mono{color:var(--text)}.hero-side{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;gap:12px;flex:none}.hero-count{font-size:36px;font-weight:800;line-height:1}.hero-meta{display:flex;align-items:center;gap:10px}.hero-plat{font-size:13px;color:var(--text)}.hero .alarm{width:40px;height:40px}@media (max-width: 680px){.hero{flex-direction:column;gap:14px;padding:18px}.hero-side{flex-direction:row;align-items:center;justify-content:space-between;width:100%}.hero-time{font-size:40px}.hero-count{font-size:30px}}.notify-btn{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;font-size:13px;font-weight:700;color:var(--muted);background:#ffffff0a;border:1px solid var(--line);border-radius:999px;cursor:pointer;transition:all .15s ease}.notify-btn:hover{color:var(--text);border-color:#28d08a66}.notify-btn.on{color:#06251a;background:var(--accent);border-color:var(--accent)}.notify-status{margin-top:8px;font-size:12px;line-height:1.4;color:var(--warn);max-width:520px;word-break:break-word}.notify-row{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:20px;text-align:center}.notify-row .notify-status{color:var(--muted);max-width:90%}.app-version{font-size:11px;color:var(--muted);opacity:.6;letter-spacing:.02em}
