@charset "UTF-8";
:root{--paper:#f8f5ef;--surface:#fffdf9;--ink:#302b27;--muted:#6e655d;--red:#9e3029;--line:#e4dbcf;--tint:#f3e4dc;--green:#456447;font-family:"PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:#e9e5df;font-size:16px;line-height:1.65}*{box-sizing:border-box}body{margin:0;-webkit-text-size-adjust:100%}button,select,textarea{font:inherit}button,a{touch-action:manipulation;-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit;border:0}button,a,summary{min-height:48px}a{color:var(--red);text-decoration:none}button:active,a:active,summary:active{filter:brightness(.94)}button:focus-visible,a:focus-visible,summary:focus-visible,textarea:focus-visible{outline:3px solid #93691a;outline-offset:3px}h1,h2,h3,p{margin:0}h1{font-size:30px;line-height:1.4;letter-spacing:-.5px}h2{font-size:22px;line-height:1.4;margin:26px 0 16px}h3{font-size:20px;line-height:1.4}svg{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round}[hidden]{display:none!important}
.app{max-width:480px;min-height:100dvh;margin:auto;background:var(--paper);padding:0 20px calc(112px + env(safe-area-inset-bottom));box-shadow:0 0 50px #4931200a}.topbar{display:flex;justify-content:space-between;align-items:center;min-height:72px}.brand{display:flex;align-items:center;font-size:18px;font-weight:600;gap:8px;color:var(--ink)}.brand>span{background:var(--red);color:white;font-family:serif;font-size:24px;width:30px;height:32px;display:grid;place-items:center;line-height:1;border-radius:3px}.text-button{background:transparent;color:var(--red);padding:8px 12px;font-size:16px}
.welcome{position:relative;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding:20px 20px 0;background:var(--red);border-radius:20px;color:#fff9ee}.welcome p{font-size:14px;color:#ffe8d6;margin-bottom:6px}.welcome h1{font-family:"Songti SC","SimSun",serif;font-weight:500;font-size:32px;line-height:1.25;margin-bottom:10px}.welcome div>span{font-size:14px;color:#ffe8d6}.welcome-seal{border:1px solid #e6b6a1;border-radius:50%;width:68px;height:68px;display:grid;place-items:center;color:#ffe5d1;font:46px serif;transform:rotate(10deg);margin-right:2px}.event-link{display:flex;align-items:center;justify-content:space-between;flex-basis:100%;gap:8px;background:transparent;color:#fff8ed;border-top:1px solid #ffffff38;margin-top:18px;padding:12px 0;font-size:14px;text-align:left}.event-link span{font-size:12px}
.segmented{display:flex;padding:4px;background:#ebe5dc;border-radius:14px;gap:4px}.segmented button{flex:1;background:transparent;border-radius:11px;font-size:17px;min-width:0}.segmented button.active{background:var(--surface);color:var(--red);font-weight:600;box-shadow:0 1px 3px #4030240c}.route-summary{margin:16px 0;font-size:16px}.field-label{font-size:14px;color:var(--muted)}#station-controls{display:flex;align-items:center;gap:12px;margin:16px 0}.station-buttons{display:flex;gap:8px;flex:1}.station-buttons button{flex:1;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:12px;font-size:16px}.station-buttons button.active{border-color:var(--red);color:var(--red);background:var(--tint);font-weight:600}.date-tabs{display:flex;gap:8px;margin:16px 0}.date-tabs button{flex:1;min-height:70px;background:var(--surface);border:1px solid var(--line);border-radius:12px;font-size:18px;padding:8px 4px}.date-tabs span{display:block;font-size:13px;color:var(--muted)}.date-tabs button.active{border-color:var(--red);background:var(--tint);color:var(--red);font-weight:600}.date-tabs button.active span{color:var(--red);font-weight:400}
summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:16px;padding:14px 0}summary::-webkit-details-marker{display:none}.chevron{font-size:20px;font-weight:400;flex-shrink:0}.notice{border-radius:12px;background:#eee8dc;color:#6a5236;padding:0 14px}.notice summary{font-size:14px;min-height:52px;padding:10px 0}.notice p{font-size:16px;padding:2px 0 12px}.notice>a{display:flex;align-items:center;padding-bottom:12px;font-size:14px}.notice[open] .chevron{transform:rotate(180deg)}.schedule-advice{font-size:16px;margin:18px 0;color:var(--green)}.schedule-advice.caution{color:var(--red)}
.train-card{border:1px solid var(--line);background:var(--surface);border-radius:16px;margin-bottom:12px;padding:17px 18px}.train-times{display:grid;grid-template-columns:1fr .75fr 1fr;gap:10px;align-items:center;text-align:center}.train-times>div:first-child{text-align:left}.train-times>div:last-child{text-align:right}.train-times time{display:block;font-size:29px;font-weight:600;line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:-.6px}.train-times .station{display:block;font-size:14px;margin-top:4px}.train-duration{font-size:12px;color:var(--muted)}.train-duration:after{content:'⟶';display:block;font-size:25px;line-height:1.1;color:#b2a394}.train-footer{border-top:1px dashed var(--line);margin-top:12px;padding-top:10px;display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:14px}.train-code{font-weight:600}.train-status{font-size:13px;color:var(--green)}.train-status.late{color:var(--red)}.train-more{background:transparent;width:100%;color:var(--red);font-size:16px;padding:10px;margin-bottom:12px}
.primary-button,.secondary-button{display:flex;align-items:center;justify-content:center;min-height:52px;border-radius:13px;padding:12px 16px;font-size:16px;font-weight:500}.primary-button{background:var(--red);color:white}.secondary-button{background:transparent;border:1px solid var(--line);color:var(--red)}.full{width:100%}.disclosure{border-top:1px solid var(--line);margin-top:24px}.disclosure[open]>summary>.chevron{transform:rotate(45deg)}.disclosure p{margin:8px 0 16px;font-size:16px;line-height:1.8}.disclosure a{display:flex;align-items:center;font-size:14px}.end-note{font-size:14px;color:var(--muted);text-align:center;line-height:1.8;margin:20px 0 14px}.page-heading{padding:14px 0 24px}.eyebrow{color:var(--red);font-size:14px}.page-heading h1{margin:8px 0 12px}.page-heading p{font-size:16px;color:var(--muted)}.city-filter{display:flex;gap:8px;margin-bottom:20px}.city-filter button{flex:1;min-height:48px;border:1px solid var(--line);background:transparent;border-radius:12px;font-size:16px}.city-filter .active{background:var(--red);border-color:var(--red);color:white}
.place{border:1px solid var(--line);border-radius:18px;background:var(--surface);padding:20px;margin-bottom:16px}.place-kicker{display:flex;justify-content:space-between;gap:12px;font-size:13px;color:var(--muted);margin-bottom:10px}.place-kicker>span:last-child{color:var(--green)}.place h2{font-size:22px;margin:0 0 10px}.place>p{font-size:16px;line-height:1.7;margin-bottom:18px}.place-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.place-actions a,.place-actions button{min-height:48px;font-size:16px;border-radius:11px;background:#f1e9df;padding:10px 8px;text-align:center;display:flex;align-items:center;justify-content:center;color:var(--red)}.place-actions a{background:var(--red);color:white}.place-detail{border-top:1px solid var(--line);padding-top:16px;margin-top:16px}.place-detail p,.place-notes{font-size:16px;line-height:1.85}.place-notes{margin:14px 0}.place-detail>a{display:flex;align-items:center;font-size:14px}
.food-item{border-bottom:1px solid var(--line);padding:18px 0;display:grid;grid-template-columns:1fr;gap:10px}.food-item h2{font-size:21px;margin:0}.food-item p{font-size:16px;color:var(--muted)}.food-actions{display:flex;justify-content:space-between;gap:12px}.food-actions a{display:flex;align-items:center;min-height:48px;padding:8px 12px;font-size:16px;background:#f0e8dc;border-radius:10px}.food-actions a:last-child{background:transparent;font-size:14px}.itinerary{background:#ececdf;padding:20px;border-radius:16px;margin-top:16px}.itinerary h2{font-size:20px;margin:0 0 12px}.itinerary p{font-size:16px}.itinerary small{display:block;margin-top:12px;font-size:14px;color:var(--muted)}.secondary-text{color:var(--muted);font-size:14px}
.venue-card{background:#efe7d9;border-radius:20px;text-align:center;padding:26px 20px}.big-seal{font:55px serif;color:var(--red);display:block;margin-bottom:8px}.venue-card h2{font-size:26px;margin:0 0 10px}.venue-time{font-size:18px;color:var(--red);font-weight:600;margin-bottom:6px}.venue-card hr{border:0;border-top:1px solid #d4c7b2;margin:24px 0}.venue-card .primary-button{margin-top:22px}.venue-card .secondary-button{margin-top:12px;border-color:#c7b49c}.venue-card p{line-height:1.85}.goodbye{text-align:center;font-family:"Songti SC",serif;font-size:22px;color:var(--red);margin:30px 0}
.bottom-nav{position:fixed;z-index:20;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:480px;background:#fffdf9f5;backdrop-filter:blur(12px);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr);padding:8px 10px calc(8px + env(safe-area-inset-bottom));gap:4px}.bottom-nav a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--muted);font-size:12px;min-height:58px;border-radius:12px}.bottom-nav svg{width:24px;height:24px}.bottom-nav a[aria-current=page]{color:var(--red);background:var(--tint);font-weight:600}.empty-state{padding:20px;border:1px solid var(--line);border-radius:14px;font-size:16px;margin-bottom:16px}.sources ul{padding-left:18px;font-size:16px}.sources a{overflow-wrap:anywhere}#toast{position:fixed;z-index:100;bottom:100px;left:50%;transform:translateX(-50%);background:#342a22;color:white;border-radius:12px;padding:12px 18px;font-size:16px;max-width:90vw;opacity:0;pointer-events:none}#toast.show{opacity:1}
dialog{position:fixed;inset:auto 0 0;margin:0 auto;width:100%;max-width:480px;max-height:85dvh;overflow:auto;border:0;border-radius:22px 22px 0 0;padding:24px 24px calc(28px + env(safe-area-inset-bottom));background:var(--paper)}dialog::backdrop{background:#231c1580}dialog h2{margin:0 40px 18px 0}dialog p{font-size:16px;margin-bottom:18px}.close-dialog{position:absolute;right:12px;top:12px;width:48px;background:transparent;font-size:28px}textarea{width:100%;padding:12px;border:1px solid var(--line);border-radius:10px;font-size:16px;background:var(--surface);margin-bottom:16px;resize:none}noscript{display:block;max-width:480px;margin:auto;padding:24px;background:#fff}.tab-panel{animation:fade .16s ease}@keyframes fade{from{opacity:.5}to{opacity:1}}
@media(max-width:360px){.app{padding-left:16px;padding-right:16px}.welcome{padding-left:16px;padding-right:16px}.welcome h1{font-size:30px}.welcome-seal{width:55px;height:55px;font-size:37px}.event-link{align-items:flex-start;flex-direction:column;gap:0}.event-link span{font-size:13px}.train-card{padding:16px 14px}.train-times time{font-size:27px}.train-times{gap:6px}.place{padding:18px}.place-kicker{font-size:12px}.bottom-nav{padding-left:4px;padding-right:4px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;scroll-behavior:auto!important}}
.place,.food-item{padding:0;overflow:hidden;background:var(--surface);border:1px solid var(--line);border-radius:18px;margin-bottom:18px;display:block}.card-photo{width:100%;height:auto;aspect-ratio:16/10;object-fit:cover;display:block;background:#e8dfd2}.place-body,.food-body{padding:18px}.place-body>p,.food-body>p{font-size:16px;line-height:1.7;margin:10px 0 18px}.place-kicker{flex-wrap:wrap;gap:4px 12px}.place-actions button{font-size:14px;padding:10px 6px}.source-links{display:flex;flex-wrap:wrap;gap:4px 18px;margin-top:10px}.source-links a{font-size:14px;display:flex;align-items:center}.food-item h2{font-size:22px}.direct-train-note{padding:18px;background:#eee7dc;border-radius:14px;margin-top:18px}.direct-train-note h3{font-size:17px;margin-bottom:8px}.direct-train-note p{font-size:16px}.page-heading .eyebrow,.itinerary,.goodbye{display:none}.page-heading{padding-top:10px}.place-notes p{font-size:16px;margin:0 0 12px}.photo-failed{object-fit:contain}
@media(max-width:360px){.place,.food-item{padding:0}.place-body,.food-body{padding:16px}.place-actions button{font-size:13px}.place-actions a{font-size:15px}}
@media print{.bottom-nav,.topbar,button{display:none!important}.tab-panel[hidden],.place-detail[hidden],.city-content[hidden]{display:block!important}.app{max-width:none;box-shadow:none}.place{break-inside:avoid}}
