:root{--ink: #23242c;--ink-soft: #5c5d66;--paper: #fbfaf7;--card: #ffffff;--hairline: #e6e2d8;--rose: #d65d7a;--radius: 14px;--font-display: "Fraunces", Georgia, serif;--font-body: "Inter", -apple-system, system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--safe-b: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-body);background:var(--paper);color:var(--ink);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}#root{min-height:100dvh}.app{max-width:560px;margin:0 auto;padding:0 18px calc(84px + var(--safe-b))}a{color:inherit}.masthead{padding:26px 0 10px;display:flex;align-items:baseline;justify-content:space-between}.masthead h1{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:22px;letter-spacing:.01em}.masthead .dates{font-family:var(--font-mono);font-size:11px;color:var(--ink-soft);letter-spacing:.06em}.city-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:baseline}.hero{border-radius:var(--radius);padding:22px 20px 20px;margin:8px 0 18px;color:#fff;position:relative;overflow:hidden}.hero .eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;opacity:.85}.hero h2{font-family:var(--font-display);font-weight:400;font-style:italic;font-size:38px;line-height:1.05;margin:6px 0 4px}.hero .sub{font-size:14px;opacity:.92}.clocks{display:flex;gap:22px;margin-top:16px;padding-top:14px;border-top:1px solid rgba(255,255,255,.28)}.clock .t{font-family:var(--font-mono);font-size:21px;font-weight:500}.clock .z{font-size:11px;letter-spacing:.08em;text-transform:uppercase;opacity:.8}.card{background:var(--card);border:1px solid var(--hairline);border-radius:var(--radius);padding:15px 16px;margin-bottom:12px}.card .when{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);margin-bottom:3px}.card h4{font-family:var(--font-display);font-weight:550;font-size:18px;line-height:1.2}.card .meta{font-size:13px;color:var(--ink-soft);margin-top:5px}.card .heads{font-size:13px;margin-top:9px;padding:8px 11px;background:var(--paper);border-left:3px solid var(--accent, var(--rose));border-radius:0 8px 8px 0}.card .links{margin-top:10px;display:flex;gap:14px;flex-wrap:wrap}.card .links a{font-size:13px;font-weight:600;color:var(--accent, var(--rose));text-decoration:none}.pill{display:inline-block;font-family:var(--font-mono);font-size:11px;padding:2px 8px;border-radius:99px;border:1px solid var(--hairline);color:var(--ink-soft);margin-left:8px;vertical-align:middle}.pass{background:var(--card);border:1px solid var(--hairline);border-radius:var(--radius);margin-bottom:12px;overflow:hidden}.pass-top{padding:13px 16px 12px;display:flex;justify-content:space-between;align-items:center;color:#fff}.pass-top .fl{font-family:var(--font-mono);font-size:13px;font-weight:500}.pass-top .al{font-size:12px;opacity:.9}.pass-route{display:flex;align-items:center;justify-content:space-between;padding:16px 16px 6px}.pass-route .code{font-family:var(--font-display);font-size:34px;font-weight:550;line-height:1}.pass-route .cityname{font-size:12px;color:var(--ink-soft);margin-top:3px}.pass-route .arrow{color:var(--ink-soft);font-size:18px;flex:1;text-align:center}.pass-times{display:flex;justify-content:space-between;padding:6px 16px 14px}.pass-times .t{font-family:var(--font-mono);font-size:15px;font-weight:500}.pass-times .lbl{font-size:11px;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.07em}.pass-times .right{text-align:right}.pass-tear{border-top:2px dashed var(--hairline);position:relative;margin:0 -1px}.pass-tear:before,.pass-tear:after{content:"";position:absolute;top:-8px;width:16px;height:16px;background:var(--paper);border:1px solid var(--hairline);border-radius:50%}.pass-tear:before{left:-9px}.pass-tear:after{right:-9px}.pass-stub{display:flex;justify-content:space-between;align-items:center;padding:11px 16px;font-size:12.5px;color:var(--ink-soft)}.pass-stub .ref{font-family:var(--font-mono);font-weight:500;color:var(--ink)}.day{margin-bottom:22px;scroll-margin-top:12px}.day-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;padding-bottom:7px;border-bottom:1px solid var(--hairline)}.day-head .d{font-family:var(--font-display);font-size:19px;font-weight:550}.day-head .l{font-size:13px;color:var(--ink-soft);font-style:italic;font-family:var(--font-display)}.day-head.today-flag .d{color:var(--accent)}.note{font-size:13.5px;color:var(--ink-soft);padding:9px 13px;background:transparent;border:1px dashed var(--hairline);border-radius:10px;margin-bottom:12px}.count{text-align:center;padding:34px 10px 6px}.count .n{font-family:var(--font-display);font-style:italic;font-size:84px;font-weight:400;line-height:1;color:var(--rose)}.count .lbl{font-size:14px;color:var(--ink-soft);margin-top:6px}.tabbar{position:fixed;bottom:0;left:0;right:0;background:#fbfaf7eb;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--hairline);display:flex;justify-content:center;gap:4px;padding:8px 10px calc(8px + var(--safe-b));z-index:50}.tabbar button{font-family:var(--font-body);font-size:11.5px;font-weight:600;letter-spacing:.02em;background:none;border:none;color:var(--ink-soft);padding:8px 13px;border-radius:99px;cursor:pointer}.tabbar button.on{color:var(--paper);background:var(--ink)}.tabbar button:focus-visible{outline:2px solid var(--rose);outline-offset:2px}.section-title{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:24px;margin:14px 0}.kv{display:flex;justify-content:space-between;padding:10px 2px;border-bottom:1px solid var(--hairline);font-size:13.5px}.kv:last-child{border-bottom:none}.kv .k{color:var(--ink-soft)}.kv .v{font-family:var(--font-mono);font-size:13px}.gate{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px}.gate h1{font-family:var(--font-display);font-style:italic;font-weight:500;font-size:30px}.gate p{color:var(--ink-soft);font-size:14px}.gate input{font-family:var(--font-mono);font-size:26px;letter-spacing:.5em;text-align:center;width:190px;padding:12px 6px 12px 18px;border:1px solid var(--hairline);border-radius:12px;background:var(--card);color:var(--ink)}.gate input:focus{outline:2px solid var(--rose);border-color:transparent}.gate .err{color:var(--rose);font-size:13px;min-height:18px}@media (prefers-reduced-motion: no-preference){.card,.pass,.hero{animation:rise .35s ease both}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}}
