:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif;color:#eef2f4;background:#080b0e;--panel:#11171c;--line:#263039;--muted:#81919d;--accent:#e9f2f7}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:#080b0e}header{height:58px;padding:0 20px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:sticky;top:0;background:#080b0eef;backdrop-filter:blur(10px);z-index:5}.beta{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;margin-left:10px;color:var(--muted)}.pill{font-size:.75rem;border:1px solid var(--line);border-radius:999px;padding:6px 9px;color:var(--muted)}.dev-banner{padding:8px 20px;text-align:center;background:#2b2311;color:#e9cd8e;font-size:.78rem}main{max-width:1120px;margin:auto;padding:28px 18px 80px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:20px}.kicker,.section-title{color:#8ca0ae;font-size:.72rem;letter-spacing:.14em;font-weight:700}.section-title{display:flex;justify-content:space-between;margin-bottom:14px}h1{font-size:clamp(1.8rem,5vw,3.5rem);line-height:1;margin:10px 0 24px;letter-spacing:-.04em}h2{font-size:1.25rem;margin:6px 0}.search-row,.chat-row{display:flex;gap:10px}input,button{font:inherit}input{width:100%;background:#090d10;border:1px solid var(--line);color:#eef2f4;border-radius:12px;padding:14px}button{border:0;border-radius:12px;padding:12px 16px;font-weight:700;cursor:pointer}.primary,.search-row button,.chat-row button{background:var(--accent);color:#071015}.ghost{background:transparent;color:#aebbc4;border:1px solid var(--line)}.results{display:grid;gap:8px;margin-top:16px}.result{width:100%;text-align:left;background:#0a0f13;color:#edf2f4;border:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:12px}.result small,.muted{color:var(--muted)}.hidden{display:none!important}.station-head{display:flex;justify-content:space-between;align-items:start;gap:16px}.station-head h1{margin-bottom:10px}.separator{display:flex;align-items:center;gap:12px;color:#667782;font-size:.75rem;margin:28px 0 14px}.separator:before,.separator:after{content:"";height:1px;background:var(--line);flex:1}.departure-list{display:grid;gap:7px;margin-top:22px}.departure{width:100%;display:grid;grid-template-columns:90px 1fr minmax(130px,auto);align-items:center;gap:16px;text-align:left;background:#0a0f13;color:#edf2f4;border:1px solid var(--line);padding:13px 15px}.departure-time{font-size:1.25rem;font-weight:800}.departure-time small,.departure-main small,.departure-state small{display:block;color:var(--muted);font-size:.72rem;font-weight:500;margin-top:3px}.departure-main b{font-size:1rem}.departure-state{text-align:right}.source{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:4px 7px;font-size:.69rem;white-space:nowrap}.source.external{color:#e9cd8e;border-color:#66542a;background:#2b2311}.source.theoretical{color:#9aaab5}.empty-board{padding:30px 0}.train-title{display:flex;justify-content:space-between;align-items:start}.train-title h1{margin-bottom:18px}.external-estimate{border:1px solid #66542a;background:#211b0e;border-radius:12px;padding:10px 12px;color:#e9cd8e;max-width:720px;margin-bottom:18px}.external-estimate small{display:block;color:#b9a36e;margin-top:4px}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:12px 0}.metric{display:flex;flex-direction:column}.metric span{color:var(--muted);font-size:.67rem;letter-spacing:.1em}.metric strong{font-size:2.8rem;line-height:1.1;margin-top:8px}.metric small{color:var(--muted)}.speed-card strong{font-size:4rem}.contribution{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:12px 0}.contribution p{color:var(--muted);margin:5px 0 0}.columns{display:grid;grid-template-columns:1.5fr .8fr;gap:12px}.feed{height:430px;overflow:auto;display:flex;flex-direction:column;gap:10px;padding-right:5px}.event{background:#0b1014;border-radius:12px;padding:11px 13px}.event.system{border-left:3px solid #8197a6}.event .author{font-size:.75rem;color:#9caeba;margin-bottom:4px}.event .time{float:right;color:#60707b}.chat-row{margin-top:14px}.stops{margin:0;padding-left:22px}.stops li{padding:7px 0;color:#aab7c0}.stops strong{color:#edf2f4}.offline{color:#d6947d}.online{color:#86c7a1}@media(max-width:760px){.grid{grid-template-columns:1fr 1fr}.columns{grid-template-columns:1fr}.contribution{align-items:stretch;flex-direction:column}.feed{height:340px}.metric strong{font-size:2rem}.speed-card strong{font-size:3rem}.station-head{align-items:flex-start}.departure{grid-template-columns:64px 1fr;gap:8px}.departure-time{font-size:1.05rem}.departure-state{grid-column:2;text-align:left;display:flex;align-items:center;gap:8px}.departure-state small{display:inline;margin:0}}

/* 024 — station autocomplete, OpenStreetMap train map, persistent GPS rejection state */
.station-search-wrap{position:relative}.autocomplete-results{position:absolute;z-index:1200;top:100%;left:0;right:0;margin-top:6px;padding:6px;background:#080b0e;border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 40px #0009;max-height:340px;overflow:auto}.autocomplete-results .result{border-radius:9px}.journey-panel{margin:12px 0}.route-map{height:340px;min-height:240px;border:1px solid var(--line);border-radius:14px;background:#0a0f13;overflow:hidden;position:relative}.route-map .leaflet-container{font:inherit}.route-map .leaflet-control-attribution{font-size:10px}.route-map .leaflet-control-attribution a{color:#40596a}.map-meta{margin-top:10px;line-height:1.45}.map-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:12px;font-size:.72rem;color:var(--muted)}.map-legend span{display:flex;align-items:center;gap:6px}.legend-line{display:inline-block;width:24px;height:4px;border-radius:99px}.legend-line.passed{background:#64727c}.legend-line.future{background:#111}.legend-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.legend-dot.theoretical{border:2px solid #59636a;background:transparent}.legend-dot.physical{background:#fff;border:1px solid #080b0e}.legend-dot.train-delay{background:#0b6b3a;border:2px solid #111}.tracking-toast{position:fixed;left:max(14px,env(safe-area-inset-left));right:max(14px,env(safe-area-inset-right));bottom:max(14px,env(safe-area-inset-bottom));z-index:3000;max-width:720px;margin:auto;border:1px solid #8b573f;background:#321d15;color:#f3c1aa;border-radius:14px;padding:13px 16px;box-shadow:0 18px 50px #000b}.tracking-toast b{display:block;margin-bottom:3px}.tracking-toast div div{font-size:.82rem;color:#e1a98f}.departure-position{display:block;margin-top:5px;color:#8ea2af;font-size:.72rem}
@media(max-width:760px){.route-map{height:270px}.map-legend{gap:10px}.station-search-wrap{display:grid;grid-template-columns:1fr auto}.autocomplete-results{grid-column:1/-1}.tracking-toast{bottom:max(10px,env(safe-area-inset-bottom))}}
