/* 山城夜行 / fog, concrete, neon signs, riverside light. */
:root{color-scheme:dark;--paper:#0c141b;--ink:#f2f0e7;--muted:#a8b9c0;--line:#2c3d47;--sage:#69e3d3;--deep:#bde87b;--terra:#ff8a70;--sand:#f8c88a;--white:#14212a;--sky:#173a43;--sh:0 15px 40px #0003;--serif:'Noto Serif TC','Songti TC','STSong',Georgia,serif;--mono:'SFMono-Regular',Consolas,'Liberation Mono',monospace}
html,body{background:#080d12;color:var(--ink)}body{background-image:radial-gradient(ellipse at 10% 20%,#173b3d45,transparent 50%),radial-gradient(ellipse at 90% 5%,#71353024,transparent 45%);padding:0}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid #c6ed83;outline-offset:4px}.app{max-width:1120px;background:linear-gradient(155deg,#14212955,transparent 40%),var(--paper);box-shadow:0 0 100px #0004;border-left:1px solid #23333c;border-right:1px solid #23333c;overflow:clip}.app:before{background-image:linear-gradient(#7ec6bc06 1px,transparent 1px),linear-gradient(90deg,#7ec6bc06 1px,transparent 1px);background-size:38px 38px;opacity:1}.top{padding:30px 32px 24px;border-bottom:1px solid #2c3d475c;margin-bottom:22px}.kicker{font-family:var(--mono);font-size:10px;color:var(--sage);letter-spacing:.2em}.top h1{font-family:var(--sans);font-size:30px;letter-spacing:.03em;font-weight:850;margin-top:10px}.top h1 em{font-style:normal;color:var(--terra)}.subline{font-family:var(--mono);font-size:11px;line-height:1.7;color:var(--muted)}.circle-logo{width:52px;height:59px;border-radius:4px;background:#e56c5220;color:#ff9f86;border:1px solid #f6866566;box-shadow:0 0 26px #f3773b15;writing-mode:vertical-rl;font-weight:800;font-size:17px;letter-spacing:.2em}.main{padding:0 32px 30px;animation:none}.hero{height:340px;border:1px solid #48606c;border-radius:4px;background:#182830;box-shadow:0 15px 48px #0004}.hero.has-photo .hero-photo{opacity:1;filter:saturate(.85) contrast(1.06);object-position:center 64%}.hero:before{background:linear-gradient(90deg,#09131bee 0%,#0a182797 45%,#07101910 80%),linear-gradient(0deg,#071019b0,transparent 70%)}.hero:after{content:'';position:absolute;inset:0;border-top:3px solid #66dfce;z-index:4;pointer-events:none}.hero-info{left:30px;right:25px;bottom:32px}.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:#b9ddd6;opacity:1}.hero-title{font-family:var(--sans);font-size:54px;font-weight:900;line-height:1.17;letter-spacing:.04em;margin:14px 0;text-shadow:0 2px 20px #000}.hero-title span{color:#eea07f}.hero-caption{max-width:400px;color:#dfebe9;font-size:13px;line-height:1.8}.hero-corner{top:22px;right:22px;border:1px solid #fcb68f99;border-radius:2px;color:#ffbd96;background:#15202aa0;font-family:var(--mono);font-size:10px;padding:9px 12px;letter-spacing:.09em}.hero-sign{position:absolute;right:40px;top:80px;writing-mode:vertical-rl;font-size:45px;letter-spacing:.13em;font-weight:850;border:2px solid #f58b6866;background:#34282180;padding:12px 8px;color:#ffd5b8;text-shadow:0 0 8px #ee6639,0 0 23px #ee6639;z-index:3;box-shadow:0 0 22px #f2854620;line-height:1.2}.hero-skyline{fill:#5e999a;opacity:.35}.hero-wave{fill:#28616c}.hero-credit{font-size:10px;color:#a6b7bd;text-align:right;line-height:1.6;margin:6px 0 16px}.hero-credit a{color:#bfd1d6;text-underline-offset:3px}.daystrip{display:flex;gap:10px;padding:0;margin:20px 0 22px;overflow:visible}.daybtn{flex:1;min-width:0;min-height:76px;border-radius:3px;padding:13px 6px;background:#14212a;color:#b5c3c8;border:1px solid #31414b;box-shadow:none}.daybtn .num{font-family:var(--mono);font-size:24px;letter-spacing:.03em}.daybtn .day{font-family:var(--mono);font-size:10px;color:#9fb3be;letter-spacing:.09em;margin-top:8px}.daybtn.active{background:#c7ec81;color:#15221b;border-color:#d6f8a0;box-shadow:0 0 20px #b7eb7815}.daybtn.active .day{color:#274430}.section-header{margin-top:25px;margin-bottom:14px}.overline{color:var(--sage);font-family:var(--mono);font-size:10px;letter-spacing:.16em;line-height:1.6}.section-title{font-family:var(--sans);font-size:21px;line-height:1.5;color:var(--ink);font-weight:800}.micro{color:var(--muted);font-size:11px;line-height:1.7}.grid2{gap:14px}.minicard{background:#14212a;border-color:#2b3f48;border-radius:4px;min-height:100px;box-shadow:none;padding:17px}.mini-label{font-size:11px;color:#a9bfc3;letter-spacing:.03em}.mini-strong{font-family:var(--mono);font-size:18px;color:#f5eddd;font-weight:750}.mini-sub{font-size:11px;color:#a5b7c0}.day-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start;margin-top:20px}.daypanel{margin-top:0;padding:22px;background:#101d25;border:1px solid #30434e;border-radius:4px;box-shadow:none}.daytitle{font-family:var(--sans);font-size:21px;line-height:1.5;margin-top:12px}.daynote{font-size:12px;color:#d1c3ad;background:#2c2b23;border-left-color:#f1ba78;border-radius:0;padding:12px;line-height:1.85;margin:16px 0 12px}.event{grid-template-columns:49px 18px 1fr;gap:8px;padding:18px 0}.event-time{color:#6ae4d2;font-family:var(--mono);font-size:12px;letter-spacing:-.02em}.event:not(:last-child):before{background:#365058;left:61px;top:36px;bottom:-18px}.event-dot{background:#101d25;border:2px solid #68d7c8;width:11px;height:11px;box-shadow:0 0 10px #64e4d526;margin-top:5px;margin-left:3px}.event-dot.meal{border-color:#ff936f}.event-dot.booking{border-color:#d4ed8e}.event-title{font-size:14px;font-weight:750;line-height:1.7}.event-desc{color:#aebfc4;font-size:12px;line-height:1.85;margin-top:7px}.cat{background:#204139;color:#a1efd8;border-radius:3px;font-size:10px;padding:3px 6px}.cat.meal{background:#45302c;color:#ffb09b}.cat.booking{background:#39452b;color:#e1f5aa}.cat.hotel{background:#233d50;color:#a7d5f0}.actions{gap:7px;margin-top:12px}.action{background:#172c34;color:#86e7d9;border:1px solid #36545d;font-size:11px;min-height:35px;padding:7px 9px;border-radius:3px}.action.primary{background:#183631;color:#a7ecda;border-color:#396258}.toolcall{background:linear-gradient(100deg,#213b38,#16252e);border:1px solid #3a595a!important;border-radius:4px;margin-top:22px;padding:18px;color:#f3eddc}.toolcall p{font-size:12px;color:#a9c0c2;line-height:1.7}.toolcall strong{font-size:14px}.toolcall .icon{color:#bde87b}.fullbtn{background:#c7ec81;color:#18261b;border:1px solid #d0f191;border-radius:4px;min-height:44px;font-size:13px}.subbtn{background:#17262f;color:#d5e8e7;border:1px solid #3a535e;border-radius:4px;min-height:40px;font-size:12px;padding:10px 12px}.fullbtn:hover,.subbtn:hover,.action:hover{filter:brightness(1.12)}.card{background:#13212b;border:1px solid #30434f;border-radius:5px;padding:21px;box-shadow:none;margin:15px 0}.card h3{font-size:17px;color:#edf1e8}.card p{font-size:13px;color:#b5c7cc;line-height:1.85}.card summary{font-size:15px;color:#dfebdf}.smallmuted{font-size:12px;color:#aebfc5;line-height:1.9}.pill{background:#244236;color:#c5e6a9;border:1px solid #3c5c43;font-size:11px;border-radius:3px;padding:6px 9px}.pill.pending{background:#473627;color:#f4c88b;border-color:#745b3c}.banner,.infohint{background:#302a20;color:#edcf9c;border:1px solid #665133;border-radius:4px;font-size:12px;line-height:1.9}.banner.success{background:#183830;border-color:#32624e;color:#c4e8ce}.divider{background:#30434f}.booking-top{background:linear-gradient(110deg,#283f44,#15333b);color:#e9f1e9;border:1px solid #3c6068;border-bottom:0;border-radius:4px 4px 0 0;padding:20px}.booking-bottom{background:#14212b;border:1px solid #3c6068;border-radius:0 0 4px 4px;padding:20px}.booking-top strong{font-family:var(--sans)}.detail-row{font-size:13px;line-height:1.8;padding:9px 0;color:#dfebeb}.detail-row .icon{color:#70e6d2}.stat{color:#c9ec85}.input,textarea,select,.search{background:#0b1720;color:#f3f0e9;border:1px solid #415664;border-radius:4px;font-size:16px;padding:12px}.input:focus,textarea:focus,select:focus{border-color:#85d8cd;box-shadow:0 0 0 3px #71cfc51a}.input::placeholder,textarea::placeholder,.search::placeholder{color:#7f98a5}label{font-size:12px;color:#b7cbd0;line-height:1.6}.check{border-color:#30444d;color:#cadbdc;font-size:13px}.check input{accent-color:#b9e47e}.check.done{color:#8a9da7}.check input:not([type=checkbox]){width:auto}.note-area{font-size:15px}.search{font-size:14px}.searchwrap .icon{color:#85bfb6;top:13px}.storygrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.storytile{background:#13232d;border:1px solid #304b56;border-radius:4px;grid-template-columns:125px 1fr;min-height:155px;color:#edf0e7}.thumb{background:linear-gradient(150deg,#254855,#213538 50%,#5d433a);min-height:155px}.thumb img{filter:saturate(.78)}.tilecopy{padding:18px 15px}.tilecopy .ey{color:#73d9ce;font-family:var(--mono);line-height:1.7}.tilecopy strong{font-size:15px;line-height:1.7}.tilecopy p{color:#b1c6ce;font-size:12px;line-height:1.8}.progress-label{color:#c6e68d;font-size:11px;margin-top:10px}.storyhero{background:linear-gradient(120deg,#214652,#172731);border:1px solid #405766;border-radius:4px;height:320px}.storyhero:after{background:linear-gradient(0deg,#132b38b0,transparent)}.back{color:#a1e4d6;font-size:13px}.storyinfo,.story-chapter,.story-sources{max-width:760px;margin-left:auto;margin-right:auto}.storyinfo h2{font-family:var(--sans);font-size:29px;color:#f3eddf}.storyinfo .lead{color:#b1c8ce;font-size:15px}.story-chapter h3{color:#d7e8bc;border-left-color:#ea997e;font-size:21px}.story-chapter p{font-size:16px;line-height:2.15;color:#d5dfe0;letter-spacing:.015em}.story-sources{background:#162b34;border-radius:4px;border:1px solid #39505b}.source-link,.photo-credit a,.sup-link{color:#8bdacd}.photo-credit{color:#a4b7c1;line-height:1.9;font-size:11px}.photo-credit a{color:#98e0d3}.empty{color:#afc0c8}.footnote{color:#91a6af;font-size:11px;line-height:1.9;margin:24px 0}.bottom{width:min(100%,1120px);background:#0c171ff5;border-top:1px solid #3d5b61;border-radius:0;bottom:0;padding:12px 20px calc(9px + env(safe-area-inset-bottom));box-shadow:0 -10px 40px #0004;backdrop-filter:blur(20px)}.tab{color:#92a8b4;font-size:11px;gap:7px;min-height:49px;position:relative}.tab.current{color:#cef092}.tab.current:before{content:'';position:absolute;top:-13px;width:32px;height:2px;background:#cdf38b;box-shadow:0 0 12px #c9f58188}.tab.current .icon{stroke-width:2}.delete{background:#492b2d;color:#ffb2a6}.receipt-preview{background:#0a151e;border:1px solid #3d5563;border-radius:4px}.split-field{border-color:#3a5361;border-radius:4px}.split-field legend{color:#bed0d5}.split-preview{background:#1c3a35;border:1px solid #3a5d51;border-radius:4px;color:#d7efcf!important}.notice-text{color:#ffb28e!important}.settle-box,.ledger-item{border-color:#304752}.settle-line b{color:#c6eb8a}.weather-today{background:#19343b;border:1px solid #31575e;border-radius:4px}.weather-card{margin-top:22px}.weather-chart text{fill:#b1c4ce}.weather-chart line{stroke:#354957}.weather-chart polyline:first-of-type{stroke:#ff9b77}.weather-chart polyline:nth-of-type(2){stroke:#6be6d5}.weather-chart circle[fill="#bc6746"]{fill:#ff9b77}.weather-chart circle[fill="#3b766c"]{fill:#6be6d5}.weather-legend span:first-child{color:#ffad91}.weather-legend span:last-child{color:#8ce6d8}.weather-table td,.weather-table th{border-color:#35515a;font-size:12px;padding:10px 8px}.weather-card .micro{color:#a6bbc4}.weather-card a{color:#8fe0d2}.weather-chart{max-height:270px}.weather-icon{filter:saturate(.8)}
/* The daily atlas */
.route-atlas{background:#101e28;border:1px solid #3c5660;border-top:3px solid #64decc;border-radius:4px;padding:20px;min-width:0}.atlas-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.atlas-heading h3{font-size:24px;margin:7px 0 0;letter-spacing:.02em}.route-stamp{background:#fb8d6e;color:#281b19;border:1px solid #ffb199;padding:9px 7px;font-size:12px;font-weight:800;white-space:nowrap}.route-subtitle{color:#a9c2c7;font-size:13px;line-height:1.8;margin:10px 0 18px}.route-stats{display:grid;grid-template-columns:1fr 1.8fr 1fr;border-top:1px solid #344e59;border-bottom:1px solid #344e59;margin-bottom:16px;padding:14px 0;gap:12px}.route-stats>div+div{border-left:1px solid #344e59;padding-left:14px}.route-stats span{font-size:10px;color:#a3bcc6;display:block;line-height:1.6}.route-stats strong{font:600 21px var(--mono);color:#d7edb6;display:block;margin-top:8px;white-space:nowrap}.route-stats small{font:11px var(--sans)}.map-toolbar{display:flex;gap:6px;flex-wrap:wrap;margin:13px 0 10px}.map-toolbar .subbtn{flex:1;padding:9px 6px;font-size:11px;white-space:nowrap;min-height:38px}.map-toolbar .subbtn[aria-pressed=true]{background:#315450;color:#d6f6e1;border-color:#6fa99b}.daily-map{height:355px;background:#101c24;border:1px solid #415a63;border-radius:3px;isolation:isolate}.daily-map.leaflet-container{font-family:var(--sans);font-size:12px}.map-fallback{width:100%;height:100%;display:block}.map-status{font-size:11px;color:#b1c7ce;line-height:1.8;margin:9px 0 3px}.map-attribution{font-size:10px;color:#9bb4bf;line-height:1.8;margin:4px 0}.map-attribution a{text-decoration:underline;text-underline-offset:3px}.map-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:10px;color:#b4c9ce;margin-top:13px}.map-legend span{display:flex;align-items:center;gap:5px}.map-legend i{width:7px;height:7px;border-radius:50%;background:#c7ec81;display:inline-block}.map-legend i.dash{width:16px;height:0;border-top:2px dashed #66dfd0;background:none}.map-legend i.amber{background:#f3bc7e}.map-explainer{font-size:11px;line-height:1.85;color:#9eb4be;margin:10px 0 16px}.route-alert{background:#342c23;border:1px solid #705538;padding:12px;display:flex;align-items:flex-start;gap:8px}.route-alert>.icon{color:#f6b984;margin-top:3px}.route-alert p{color:#f0c999;font-size:12px;line-height:1.85;margin:0}.route-list-header{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:6px;margin:25px 0 16px}.route-list-header h4{font-size:16px;margin:0}.route-list-header span{font-size:10px;color:#8fb6bb}.route-stops{padding:0;margin:0;list-style:none}.route-stop{margin:0;scroll-margin-top:20px}.stop-row{display:flex;align-items:flex-start;gap:10px;padding:10px 0}.stop-number{width:33px;height:33px;flex:0 0 33px;border-radius:3px;background:#243f40;border:1px solid #55817c;color:#bef3d9;font:600 12px var(--mono);padding:0;margin-top:2px}.stop-copy{min-width:0;flex:1}.stop-time{font:11px var(--mono);color:#6fe5d2;line-height:1.8}.stop-time span{font:9px var(--sans);border:1px solid #46594d;color:#cbdab0;padding:1px 4px;margin-left:4px;white-space:nowrap}.stop-copy h4{font-size:13px;line-height:1.7;color:#e8eee6;margin:4px 0 0;font-weight:700}.stop-copy p{font-size:11px;color:#a6bac2;line-height:1.75;margin:5px 0}.stop-search{display:grid;place-items:center;border:1px solid #39535f;color:#9ed9d3;flex:0 0 33px;width:33px;height:33px;border-radius:3px;margin-top:2px}.stop-row .pending-label{color:#f7bc85}.route-stop.pending .stop-number{background:#402f24;border-color:#b6804f;color:#ffc489;opacity:1;cursor:default}.route-stop.is-active>.stop-row{background:#24464388;outline:1px solid #72c6b0;outline-offset:5px}.route-leg{margin:5px 0 10px 16px;border-left:1px dashed #4a7477;padding:12px 0 12px 25px}.leg-top{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px;font-size:11px;color:#99b6c0;line-height:1.7}.leg-top strong{font:600 12px var(--mono);color:#d3eaa6;line-height:1.7}.leg-timing{font-size:11px;color:#c3d5d6;line-height:1.85;margin:7px 0}.leg-note{font-size:11px;color:#a2b6bf;line-height:1.8;margin:6px 0}.route-nav{font-size:11px;color:#87ddcb;display:inline-flex;align-items:center;gap:6px;margin-top:4px;text-decoration:none;border-bottom:1px solid #47726c;padding-bottom:3px}.route-leg.uncertain{border-left-color:#a4744e}.route-leg.uncertain strong{color:#f4bb82}.route-tail{font-size:12px;color:#becfd0;line-height:1.9;background:#1a3039;padding:13px}.route-sources{border-top:1px solid #34505b;margin-top:20px;padding-top:16px;color:#a4bcc5;font-size:11px;line-height:1.8}.route-sources summary{cursor:pointer;color:#b8d0d5;font-size:12px;min-height:30px}.route-sources p{font-size:11px;line-height:1.9}.route-sources a{display:block;color:#8ed7c9;margin:6px 0}.route-map-marker{display:grid;place-items:center!important;background:none;border:0}.route-map-marker span{min-width:32px;height:32px;display:grid;place-items:center;background:#c9ed8b;color:#15261d;font:700 12px var(--mono);border:2px solid #f4ffd9;border-radius:50%;box-shadow:0 0 0 4px #8fe8cf25,0 3px 10px #000a;padding:0 4px}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#142731;color:#d9e6e5;border:1px solid #527480;box-shadow:0 8px 30px #0006;border-radius:4px}.leaflet-popup-content{margin:16px}.map-popup strong{font-size:14px;color:#d3edab}.map-popup p{font-size:12px;line-height:1.8;margin:8px 0}.map-popup small{font-size:10px;color:#a3bdc7;display:block;line-height:1.7}.map-popup a{display:block;color:#92ebd5!important;margin-top:12px;font-weight:700}.leaflet-container a.leaflet-popup-close-button{color:#c6dfdf}.leaflet-control-zoom{border:1px solid #607f8a!important;box-shadow:0 4px 12px #0004!important}.leaflet-control-zoom a{background:#192e3a!important;color:#d3e6e7!important;border-color:#4d6875!important}.leaflet-control-scale-line{background:#132933e6;border-color:#aec7d0;color:#c9dce1;text-shadow:none;font-size:10px}.daily-map .leaflet-tile-pane{filter:brightness(.73) invert(1) hue-rotate(175deg) saturate(.5)}
@media(min-width:900px){.weather-card{display:grid;grid-template-columns:1fr 1fr;column-gap:26px}.weather-card>.row,.weather-card>.smallmuted,.weather-card>.micro,.weather-card>.notice-text{grid-column:1/-1}.weather-today{grid-column:1/-1}.weather-chart{grid-column:1;grid-row:auto / span 2}.weather-table-wrap{grid-column:2;grid-row:auto / span 2}.weather-legend{grid-column:1;grid-row:auto}.card:has(#expense-form-v2){max-width:760px;margin-left:auto;margin-right:auto}#expense-form-v2>.formgrid{gap:18px}.daily-map{height:370px}}
@media(max-width:760px){.app{border:0;max-width:600px}.top{padding:23px 19px 19px;margin-bottom:16px}.top h1{font-size:26px}.kicker{font-size:9px;letter-spacing:.14em}.circle-logo{width:42px;height:53px;font-size:15px}.main{padding:0 16px 22px}.hero{height:315px}.hero-title{font-size:36px}.hero-info{left:21px;bottom:24px;right:20px}.hero-sign{right:19px;top:77px;font-size:29px;padding:8px 4px}.hero-corner{top:17px;right:16px;font-size:9px}.hero-caption{font-size:12px;max-width:280px}.hero-credit{font-size:9px}.daystrip{gap:7px}.daybtn{min-height:70px}.daybtn .num{font-size:21px}.day-layout{grid-template-columns:1fr;gap:20px}.daypanel{padding:19px 16px}.route-atlas{padding:18px 15px}.daily-map{height:350px}.storygrid{grid-template-columns:1fr}.storytile{grid-template-columns:105px 1fr;min-height:145px}.thumb{min-height:145px}.storyhero{height:240px}.story-chapter p{font-size:16px}.bottom{max-width:600px;padding-left:8px;padding-right:8px}.section-title{font-size:19px}.daytitle{font-size:19px}.card{padding:17px}.formgrid{gap:10px}.grid2{gap:10px}.mini-strong{font-size:16px}.minicard{padding:14px}.route-stats{gap:8px}.route-stats>div+div{padding-left:10px}.route-stats strong{font-size:20px}.route-list-header h4{font-size:15px}}
@media(max-width:360px){.main{padding-left:12px;padding-right:12px}.hero-title{font-size:30px}.hero-sign{font-size:25px;right:13px}.hero-info{left:18px}.route-atlas{padding:16px 12px}.route-stats strong{font-size:18px}.event{grid-template-columns:43px 15px 1fr;gap:6px}.event:not(:last-child):before{left:53px}.daybtn .day{font-size:9px}.map-toolbar .subbtn{font-size:10px}.stop-copy h4{font-size:12px}.route-leg{padding-left:20px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.hero-title,.hero-sign{text-shadow:none}}

#daily-route{scroll-margin-top:20px}.section-header>.action{flex:none;font-size:11px}.route-atlas a:hover{text-decoration:underline}.route-map-marker:focus-visible{outline:3px solid #ffba94;outline-offset:4px}
