:root{color-scheme:light;--paper:#f3eee4;--paper-deep:#e9e2d6;--surface:#fffaf1;--surface-2:#ece5db;--ink:#191619;--muted:#655f5b;--soft:#89817a;--line:#dcd3c8;--verm:#d74430;--verm-dark:#a82f20;--night:#15141b;--indigo:#354767;--shadow:0 9px 28px rgba(35,26,26,.07);--nav:rgba(252,248,242,.96);--sans:-apple-system,BlinkMacSystemFont,'Helvetica Neue',Arial,sans-serif;--serif:Georgia,'Times New Roman',serif}
:root[data-theme="dark"]{color-scheme:dark;--paper:#17171a;--paper-deep:#202026;--surface:#28272c;--surface-2:#29272b;--ink:#f4ebde;--muted:#c6bbae;--soft:#a49b90;--line:#433f41;--verm:#ef6b56;--verm-dark:#ef6b56;--shadow:0 12px 26px rgba(0,0,0,.15);--nav:rgba(38,36,39,.97)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible{outline:3px solid var(--verm);outline-offset:3px}a{color:inherit;text-decoration:none}p{margin:0;line-height:1.55}h1,h2,h3{margin:0;font-weight:400}svg{display:block}.boot{height:100dvh;display:grid;place-content:center;text-align:center;gap:20px;letter-spacing:.3em;font-size:11px}.boot-disc{height:74px;width:74px;border-radius:50%;background:#d74430;display:block;margin:auto}
#app{min-height:100dvh}.screen{width:100%;max-width:820px;margin:0 auto;padding-bottom:calc(112px + env(safe-area-inset-bottom));min-height:100dvh;position:relative}.page{padding:25px 19px 50px}.tiny{font-size:10px;letter-spacing:.19em;text-transform:uppercase;font-weight:750}.eyebrow{font-size:11px;letter-spacing:.21em;text-transform:uppercase;color:var(--verm);font-weight:750}.serif{font-family:var(--serif)}.muted{color:var(--muted)}.minor{font-size:12px;color:var(--muted)}.small{font-size:13px}.display{font-family:var(--serif);font-size:39px;letter-spacing:-.045em;line-height:1.02}.section-heading{font-family:var(--serif);font-size:27px;letter-spacing:-.03em}.section-heading-sm{font-family:var(--serif);font-size:23px}.row{display:flex;align-items:center;gap:10px}.between{justify-content:space-between}.wrap{flex-wrap:wrap}.flex1{flex:1;min-width:0}.gap8{gap:8px}.gap14{gap:14px}.mt8{margin-top:8px}.mt14{margin-top:14px}.mt20{margin-top:20px}.mt24{margin-top:24px}.mb10{margin-bottom:10px}.mb18{margin-bottom:18px}.mb24{margin-bottom:24px}.strong{font-weight:750}.rule{height:1px;background:var(--line);margin:18px 0}.pill{border-radius:999px;padding:7px 11px;font-size:11px;letter-spacing:.02em;background:var(--surface-2);color:var(--muted)}.pill.red{background:#f7e1d9;color:#b43725}.dark .pill.red{background:#512920;color:#ffb199}.button{border:1px solid var(--line);border-radius:14px;padding:11px 13px;min-height:43px;background:var(--surface);color:var(--ink);font-weight:650;display:inline-flex;align-items:center;justify-content:center;gap:7px;text-align:center}.button.primary{border-color:var(--ink);background:var(--ink);color:var(--paper)}.button.solid-red{background:var(--verm);border-color:var(--verm);color:white}.button.ghost{background:transparent;border-color:transparent}.button.slim{min-height:35px;padding:8px 11px;font-size:12px}.button.wide{width:100%}.iconbtn{border:1px solid var(--line);border-radius:50%;background:var(--surface);color:var(--ink);width:43px;height:43px;display:grid;place-items:center}.icon{width:19px;height:19px;stroke:currentColor;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round}.icon.sm{width:15px;height:15px}.icon.lg{width:23px;height:23px}.sheet{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:26px;padding:18px}.card{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:22px;padding:17px}.softcard{background:var(--surface-2);border:1px solid var(--line);border-radius:22px;padding:18px}.entry-tag{display:inline-flex;align-items:center;gap:4px;font-size:10px;color:var(--verm-dark);font-weight:800;letter-spacing:.08em;border:1px solid currentColor;padding:4px 6px;border-radius:4px}.daydot{width:7px;height:7px;border-radius:50%;background:var(--verm);display:inline-block;flex-shrink:0}.app-top{height:71px;display:flex;align-items:center;justify-content:space-between;padding:13px 23px;position:absolute;left:0;right:0;z-index:4}.app-top .brand{font-size:10px;letter-spacing:.29em;font-weight:700}.app-top .actions{display:flex;gap:8px}.app-top .iconbtn{background:rgba(255,248,239,.75);border-color:rgba(51,41,37,.14);color:#272123;backdrop-filter:blur(7px)}
/* Cover illustration and hero */
.hero{height:min(755px,86dvh);min-height:600px;position:relative;overflow:hidden;background:linear-gradient(180deg,#f5efe6 0%,#f2e8d9 55%,#d4c9b8 100%);color:#1b1818}.hero .hero-art{position:absolute;width:100%;height:100%;left:0;top:0;object-fit:cover}.hero:after{content:"";height:120px;position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,var(--paper) 0%,transparent 100%)}.hero-copy{position:absolute;z-index:2;top:125px;left:28px;right:25px}.hero .count{font:normal clamp(115px,31vw,155px)/.86 Georgia,'Times New Roman',serif;letter-spacing:-.11em;margin:5px 0 8px -11px}.hero .count-suffix{font:italic 26px/1.13 var(--serif);margin:4px 0 14px}.hero .count-caption{font:17px/1.45 var(--serif);color:#4f4846}.hero .side-jp{position:absolute;right:-1px;top:42px;writing-mode:vertical-rl;font-family:var(--serif);letter-spacing:.3em;font-size:21px;line-height:1.55}.hero .home-city{font:normal clamp(75px,19vw,115px)/.94 var(--serif);letter-spacing:-.08em;margin:7px 0}.hero .hero-subtitle{font:italic 24px var(--serif)}.hero .hero-clock{font-size:17px;margin-top:13px;color:#3f3734}.home-content{position:relative;z-index:3;margin:-89px 19px 0}.home-highlight{background:var(--surface);border:1px solid var(--line);border-top:4px solid #ee6774;box-shadow:var(--shadow);border-radius:26px;padding:20px}.highlight-title{font:normal 27px/1.2 var(--serif);letter-spacing:-.02em;margin:13px 0 8px}.highlight-title .icon{vertical-align:middle;display:inline;stroke:#5991a7}.home-card-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}.checkline{padding:12px 3px;border-top:1px solid var(--line);display:flex;gap:11px;align-items:center}.checkline:first-of-type{border-top:0}.check-circle{appearance:none;border:1.5px solid var(--line);background:transparent;border-radius:50%;width:24px;height:24px;flex-shrink:0;display:grid;place-items:center}.check-circle.checked{background:var(--verm);border-color:var(--verm);color:#fff}.progressbar{height:6px;background:var(--surface-2);border-radius:20px;overflow:hidden}.progressbar>div{height:100%;background:var(--verm);border-radius:20px}.chapter-carousel{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none;padding:3px 0 13px;scroll-snap-type:x mandatory}.chapter-carousel::-webkit-scrollbar,.day-strip::-webkit-scrollbar{display:none}.chapter{flex:0 0 134px;text-align:left;scroll-snap-align:start;background:var(--surface);border:1px solid var(--line);border-radius:17px;padding:13px}.chapter .n{font:43px var(--serif);line-height:1;margin:9px 0 4px}.chapter .place{font-size:12px;font-weight:700}.chapter .date{font-size:10px;color:var(--muted)}.hotel-quick{background:#202134;color:#f6ebe4;border:1px solid #383449;border-radius:20px;padding:18px}.hotel-quick p{color:#c8c3ce}
/* Navigation */
.bottom-nav{position:fixed;z-index:10;bottom:calc(12px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:min(92vw,430px);display:grid;grid-template-columns:repeat(4,1fr);gap:3px;background:var(--nav);backdrop-filter:blur(18px);border:1px solid var(--line);padding:6px;border-radius:27px;box-shadow:0 12px 30px rgba(0,0,0,.13)}.nav-btn{border:0;background:transparent;color:var(--muted);border-radius:21px;min-height:51px;display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;font-size:10px;font-weight:700}.nav-btn.on{color:var(--paper);background:var(--ink)}
/* Journey */
.page-head{padding:24px 19px 10px}.subnav{display:flex;gap:5px;align-items:center;background:var(--surface-2);border:1px solid var(--line);border-radius:24px;padding:4px;width:max-content;margin:1px auto 19px}.subnav button{background:transparent;border:0;color:var(--muted);border-radius:19px;font-size:12px;font-weight:750;padding:10px 22px}.subnav button.on{background:var(--ink);color:var(--paper)}.day-strip{display:flex;gap:8px;overflow:auto;scrollbar-width:none;scroll-snap-type:x mandatory;padding:4px 19px 15px}.day-cell{scroll-snap-align:center;border:1px solid var(--line);background:var(--surface-2);border-radius:17px;min-width:62px;height:65px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:var(--ink)}.day-cell .n{font:normal 27px/.95 var(--serif)}.day-cell .w{font-size:9px;font-weight:700;letter-spacing:.08em}.day-cell.on{background:#ed6879;border-color:#ed6879;color:#17141a}.day-cell.current:not(.on) .w{color:var(--verm)}.day-hero{background:linear-gradient(145deg,#252645,#111729);border-radius:27px;color:#fff;padding:22px 20px 20px;position:relative;overflow:hidden;min-height:233px}.day-hero:before{content:attr(data-kanji);position:absolute;right:-10px;top:16px;font:80px var(--serif);color:rgba(255,255,255,.07);pointer-events:none}.day-hero .day-label{font-size:10px;letter-spacing:.2em;color:#ff7c85;font-weight:800}.day-hero h2{font:normal 29px/1.07 var(--serif);max-width:83%;margin:15px 0 13px;position:relative}.day-hero .route{font-size:12px;color:#c3c2d7;line-height:1.45}.day-hero .meter{margin:19px 0 15px;background:#444357;height:4px;border-radius:6px;overflow:hidden}.day-hero .meter>div{height:100%;background:#f77b77}.day-hero .stay{font-size:12px;color:#e9e5eb;margin-top:13px}.journey-note{font-size:12px;color:var(--muted);font-style:italic}.timeline{position:relative;padding:8px 0 10px}.timeline:before{content:"";position:absolute;left:55px;top:6px;bottom:20px;width:1px;background:var(--line)}.timeitem{display:grid;grid-template-columns:44px 1fr;gap:13px;position:relative;margin-bottom:11px;align-items:start}.timeitem:before{content:"";width:7px;height:7px;background:var(--surface-2);border:2px solid var(--line);position:absolute;top:23px;left:51px;border-radius:50%;z-index:1}.timeitem.done:before{background:var(--verm);border-color:var(--verm)}.time-label{font-size:11px;color:var(--verm);padding-top:19px;text-align:right;line-height:1.3;font-weight:750;word-break:normal}.activity{background:var(--surface);border:1px solid var(--line);border-radius:17px;padding:13px 14px 11px;box-shadow:var(--shadow)}.activity h3{font:normal 20px/1.22 var(--serif);letter-spacing:-.025em;margin:6px 0}.activity .desc{color:var(--muted);font-size:12px;line-height:1.45}.activity .top{display:flex;align-items:start;justify-content:space-between;gap:6px}.activity .check-circle{width:30px;height:30px}.activity .actions{margin-top:12px;display:flex;gap:7px;flex-wrap:wrap}.transit{padding:8px 7px 10px;color:var(--muted)}.transit .title{font-size:13px;font-weight:650}.transit .desc{font-size:11px;line-height:1.45;margin:4px 0}.transit .actions{margin-top:6px;display:flex;gap:5px}.timeitem.is-transit:before{width:5px;height:5px;left:52px;top:17px}.timeitem.is-transit .time-label{padding-top:10px;font-size:10px}.inline-time{font-size:11px;color:var(--verm);font-weight:750}.more-info{border-top:1px solid var(--line);padding-top:12px;margin-top:10px}.more-info textarea,.form-control{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 13px;color:var(--ink);font-size:16px}.form-control{min-height:44px}.more-info label,.field-label{display:block;margin-bottom:5px;font-size:11px;color:var(--muted);font-weight:700}.more-info .stack{display:grid;gap:10px}.maps-card{height:230px;border-radius:24px;background:linear-gradient(140deg,#2d314b,#15172c);padding:19px;overflow:hidden;position:relative;color:#fff}.maps-card svg{height:100%;width:100%}.route-list{display:grid;gap:9px}
/* Wallet */
.search{width:100%;height:51px;background:var(--surface-2);color:var(--ink);border:1px solid var(--line);padding:0 16px;border-radius:16px;font-size:16px}.essential{background:linear-gradient(135deg,#292844,#10192d);color:#f7f0e7;border-radius:27px;padding:23px 21px}.essential .sub{font-size:10px;letter-spacing:.11em;color:#adb3ca;text-transform:uppercase}.essential .heading{font:22px var(--serif);margin:6px 0}.essential .tinytext{font-size:13px;color:#cbd0e1}.essential .button{background:#424359;color:#fff;border-color:#52536b}.wallet-group{font-size:10px;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);margin:25px 3px 12px;font-weight:800}.pass{border:1px solid var(--line);border-radius:22px;background:var(--surface);overflow:hidden;box-shadow:var(--shadow);margin:10px 0 14px}.pass-head{padding:17px 18px 15px;border-bottom:1px dashed var(--line);position:relative}.pass-head:before,.pass-head:after{content:"";position:absolute;bottom:-8px;width:15px;height:15px;border-radius:50%;background:var(--paper);border:1px solid var(--line)}.pass-head:before{left:-9px}.pass-head:after{right:-9px}.pass h3{font:24px/1.15 var(--serif);margin:10px 0 8px}.pass .date{font-size:13px;color:var(--muted)}.pass .pass-bottom{padding:14px 18px}.pass .pass-bottom .buttons{display:flex;gap:7px;flex-wrap:wrap}.pass .ref{font-size:15px;letter-spacing:.02em;font-weight:750}.pass .label{font-size:10px;color:var(--soft);font-weight:750;text-transform:uppercase;letter-spacing:.13em}.pass .pass-note{font-size:12px;color:var(--muted);margin:8px 0 12px}.pass.next{border-color:#d88768}.pass.past{opacity:.75}
/* Passport */
.passport-cover{background:#2e302e;color:#f0e4cf;padding:30px 22px 26px;border-radius:22px;min-height:280px;position:relative;overflow:hidden;box-shadow:0 18px 35px #2b262020}.passport-cover:before{content:"";position:absolute;border:1px solid #847c67;inset:14px;border-radius:13px;pointer-events:none}.passport-cover .cover-jp{font:48px var(--serif);color:#d9c9ad}.passport-cover h2{font:normal 33px/1.12 var(--serif);margin:18px 0 3px}.cover-seal{border:3px double #e46c4f;color:#e46c4f;border-radius:50%;height:112px;width:112px;display:grid;place-items:center;font:40px var(--serif);transform:rotate(-9deg)}.passport-cities{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.city-card{background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:17px 12px;display:grid;justify-items:center;gap:10px;min-height:180px}.city-card .circle{border:4px double var(--verm);width:92px;height:92px;border-radius:50%;display:grid;place-content:center;text-align:center;line-height:1.1;color:var(--verm);transform:rotate(-8deg);font:40px var(--serif);opacity:.9}.city-card:not(.earned) .circle{border-style:dashed;color:var(--soft);border-color:var(--soft);opacity:.65}.city-card .name{font:20px var(--serif)}.city-card .progress{font-size:11px;color:var(--muted)}.achievement-list{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.achievement{border:1px solid var(--line);border-radius:15px;background:var(--surface);padding:13px 7px;text-align:center;display:grid;justify-items:center;gap:8px;color:var(--ink)}.achievement .medallion{border:2px dashed var(--line);border-radius:50%;width:69px;height:69px;display:grid;place-items:center;font:27px var(--serif);color:var(--soft)}.achievement.earned .medallion{border:3px double var(--verm);color:var(--verm);transform:rotate(-7deg)}.achievement .name{font-size:11px;font-weight:700;line-height:1.2;min-height:27px}.achievement .progress{font-size:10px;color:var(--muted)}.memory{border-radius:17px;padding:12px;border:1px solid var(--line);background:var(--surface);margin-bottom:10px}.memory img{width:100%;max-height:260px;object-fit:cover;border-radius:13px;margin:10px 0}.memory h3{font:22px var(--serif);margin:4px 0}
/* Modal */
.overlay{position:fixed;z-index:20;inset:0;background:rgba(17,15,19,.63);display:flex;align-items:end;justify-content:center;padding:0;backdrop-filter:blur(3px)}.modal{background:var(--paper);color:var(--ink);width:min(100%,660px);max-height:93dvh;overflow:auto;border-radius:27px 27px 0 0;padding:20px 20px calc(23px + env(safe-area-inset-bottom));box-shadow:0 -20px 70px #0002}.modal-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.modal h2{font:normal 30px var(--serif)}.modal .form-row{margin:15px 0}.modal textarea{min-height:98px;resize:vertical}.modal .split{display:grid;grid-template-columns:1fr 1fr;gap:10px}.modal .notice{font-size:12px;color:var(--muted);line-height:1.5;background:var(--surface-2);border-radius:12px;padding:12px}.modal .buttons{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}.modal .buttons button{flex:1}.preview-file{width:100%;height:60dvh;border:0;background:#fff;border-radius:13px;object-fit:contain}.file-chip{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);padding:8px 10px;background:var(--surface-2);border-radius:10px;font-size:12px;max-width:100%;overflow:hidden}.file-chip button{border:0;background:none;color:var(--verm);font-weight:750}.filepicker{position:relative;overflow:hidden}.filepicker input{position:absolute;inset:0;opacity:0;cursor:pointer}.danger{color:#c64633}.data-privacy{margin-top:20px;font-size:11px;color:var(--soft);line-height:1.5}.empty{border:1px dashed var(--line);padding:25px;border-radius:20px;text-align:center;color:var(--muted);background:var(--surface-2)}#toast{position:fixed;bottom:calc(102px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%) translateY(20px);padding:12px 16px;background:#232124;color:#fff;border-radius:15px;box-shadow:var(--shadow);z-index:50;max-width:90vw;opacity:0;pointer-events:none;font-size:13px;transition:opacity .2s,transform .2s}#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
@media(min-width:650px){.screen{border-left:1px solid var(--line);border-right:1px solid var(--line)}.page{padding-left:32px;padding-right:32px}.home-content{margin-left:30px;margin-right:30px}.hero-copy{left:43px}.hero .count{font-size:160px}.bottom-nav{bottom:20px}.day-strip{padding-left:32px;padding-right:32px}}
@media(max-width:375px){.hero{min-height:565px}.hero-copy{top:103px}.hero .count{font-size:120px}.hero .side-jp{font-size:17px}.timeitem{grid-template-columns:39px 1fr;gap:12px}.timeline:before{left:49px}.timeitem:before{left:45px}.timeitem.is-transit:before{left:46px}.time-label{font-size:10px}.activity h3{font-size:19px}.bottom-nav{width:94vw}.nav-btn{font-size:9px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
