:root{--pink: #ff7aa2;--pink-soft: #ffb7c5;--pink-bg: #fff0f4;--sky: #7ec8e3;--sky-soft: #bfe6f2;--cream: #fffaf3;--ink: #3a2f3a;--ink-soft: #6b5d6b;--gold: #f6c453;--green: #5fc28b;--card: rgba(255, 255, 255, .78);--radius: 22px;--shadow: 0 10px 30px rgba(255, 122, 162, .18);--shadow-soft: 0 6px 18px rgba(122, 150, 200, .16);--font: "Zen Maru Gothic", "Hiragino Maru Gothic ProN", system-ui, sans-serif;--font-display: "Mochiy Pop One", var(--font)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:var(--font);color:var(--ink);background:radial-gradient(1200px 600px at 10% -5%,var(--pink-bg),transparent 60%),radial-gradient(1000px 500px at 100% 0%,#eaf6fb,transparent 55%),linear-gradient(180deg,#fff7fb,#f3fbff);background-attachment:fixed;min-height:100vh;-webkit-font-smoothing:antialiased}.app{position:relative;overflow-x:hidden}.container{width:min(960px,92vw);margin:0 auto;padding:2rem 0 4rem;position:relative;z-index:1}.section{margin-top:2.6rem}.section-title{font-family:var(--font-display);font-size:clamp(1.4rem,3.5vw,2rem);margin:0 0 1.1rem;display:flex;align-items:center;gap:.5rem;color:var(--ink)}.section-emoji{filter:drop-shadow(0 2px 4px rgba(0,0,0,.1))}.hero{text-align:center;padding:2.4rem 1.5rem 1rem}.hero-badge{display:inline-block;background:var(--card);border:2px solid var(--pink-soft);color:var(--pink);padding:.35rem 1rem;border-radius:999px;font-weight:700;font-size:.85rem;box-shadow:var(--shadow-soft);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.hero-title{font-family:var(--font-display);font-size:clamp(2.4rem,8vw,4.2rem);margin:1rem 0 .3rem;line-height:1.05;background:linear-gradient(120deg,var(--pink) 0%,#ff9ec4 40%,var(--sky) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 6px 24px rgba(255,122,162,.25)}.hero-subtitle{font-size:clamp(1rem,2.6vw,1.3rem);color:var(--ink-soft);margin:.2rem 0 1rem;letter-spacing:.04em}.hero-dates{display:inline-flex;gap:.7rem;align-items:center;background:var(--card);border-radius:999px;padding:.5rem 1.2rem;font-weight:700;box-shadow:var(--shadow-soft);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.hero-dot{color:var(--pink-soft)}.hero-row{display:grid;grid-template-columns:auto minmax(0,520px) auto;justify-content:center;align-items:center;gap:1rem;width:min(1180px,96vw);margin-left:50%;transform:translate(-50%)}.hero-row .hero{min-width:0;padding-left:.5rem;padding-right:.5rem}.buddy{margin:0;background:transparent;border:none;box-shadow:none;transition:transform .25s ease}.buddy--side{width:clamp(180px,22vw,300px);margin:0}.hero-row .buddy--side img{transform:scale(1.28)}.hero-row .buddy:first-child img{transform-origin:right bottom}.hero-row .buddy:last-child img{transform-origin:left bottom}@media (max-width: 860px){.hero-row{grid-template-columns:1fr 1fr;width:auto;margin-left:0;transform:none}.hero-row .hero{grid-column:1 / -1;grid-row:1}.hero-row .buddy:first-child{grid-column:1;grid-row:2}.hero-row .buddy:last-child{grid-column:2;grid-row:2}.hero-row .buddy--side{width:100%;max-width:240px;margin:0 auto}.hero-row .buddy--side img{transform:none}}.buddy img{display:block;width:100%;height:auto}.buddy:first-child{animation:float 5s ease-in-out infinite}.buddy:last-child{animation:float 5s ease-in-out infinite;animation-delay:.6s}.buddy:hover{transform:translateY(-6px) scale(1.02)}.buddy--missing{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;min-height:220px;padding:1.2rem;text-align:center;color:var(--ink-soft);border:2px dashed var(--pink-soft);border-radius:var(--radius)}.buddy--missing span{font-size:2rem}.buddy--missing code{background:var(--pink-bg);border-radius:6px;padding:.05rem .35rem;font-size:.78rem}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.countdown{margin-top:1.4rem;text-align:center;background:linear-gradient(135deg,#ffb7c559,#7ec8e34d);border:2px solid rgba(255,255,255,.6);border-radius:var(--radius);padding:1.4rem 1rem;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.countdown-label{display:block;font-weight:700;color:var(--pink);margin-bottom:.8rem;letter-spacing:.05em}.countdown-units{display:flex;justify-content:center;gap:.7rem;flex-wrap:wrap}.countdown-unit{background:var(--cream);border-radius:16px;padding:.7rem 1rem;min-width:72px;box-shadow:var(--shadow-soft)}.countdown-value{display:block;font-family:var(--font-display);font-size:clamp(1.6rem,5vw,2.4rem);color:var(--ink);line-height:1}.countdown-unit-label{font-size:.75rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.08em}.countdown--go{padding:1.6rem}.countdown--go .countdown-label{margin:0;font-size:1.15rem}.flight-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.1rem}.flight-card{background:var(--card);border-radius:var(--radius);padding:1.2rem 1.3rem;box-shadow:var(--shadow-soft);border:1px solid rgba(255,255,255,.7);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:transform .18s ease,box-shadow .18s ease}.flight-card:hover{transform:translateY(-4px);box-shadow:var(--shadow)}.flight-card-top{display:flex;align-items:center;gap:.6rem;margin-bottom:1rem}.flight-airline{font-weight:900;color:var(--sky);letter-spacing:.05em}.flight-no{color:var(--ink-soft);font-size:.9rem}.status{margin-left:auto;border:none;border-radius:999px;padding:.32rem .75rem;font-weight:700;font-size:.78rem;font-family:var(--font);color:#fff;white-space:nowrap;display:inline-flex;align-items:center;gap:.25rem}.status--to-board{background:#9b8cc4}.status--boarding{background:var(--gold);color:var(--ink);animation:pulse 1.6s ease-in-out infinite}.status--in-flight{background:var(--sky)}.status--delayed{background:#e08a3c}.status--landed{background:var(--green)}.status--cancelled{background:#d96b6b}@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.flight-route{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.5rem}.flight-endpoint{display:flex;flex-direction:column}.flight-endpoint--right{text-align:right;align-items:flex-end}.flight-code{font-family:var(--font-display);font-size:1.6rem;color:var(--ink);line-height:1}.flight-city{font-size:.8rem;color:var(--ink-soft)}.flight-time{font-weight:700;margin-top:.35rem}.flight-date{font-size:.75rem;color:var(--ink-soft)}.flight-path{position:relative;height:2px;background:repeating-linear-gradient(90deg,var(--pink-soft) 0 6px,transparent 6px 12px);min-width:50px}.flight-plane{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--cream);padding:0 4px;font-size:1.1rem}.flight-card-bottom{margin-top:1rem;padding-top:.7rem;border-top:1px dashed var(--pink-soft);font-size:.85rem;color:var(--ink-soft);display:flex;align-items:center;gap:.6rem}.flight-facts{display:flex;flex-wrap:wrap;gap:.4rem .7rem}.flight-refresh{margin-left:auto;flex-shrink:0;border:2px solid var(--sky);background:transparent;color:#2a6e85;font-family:var(--font);font-weight:700;font-size:.78rem;padding:.3rem .8rem;border-radius:999px;cursor:pointer;transition:all .15s ease}.flight-refresh:hover:not(:disabled){background:var(--sky-soft)}.flight-refresh:disabled{opacity:.6;cursor:progress}.flight-checked{margin:.6rem 0 0;font-size:.76rem;color:var(--ink-soft)}.flight-error{margin:.6rem 0 0;font-size:.78rem;color:#c0564e;background:#fdecec;border-radius:10px;padding:.45rem .6rem;line-height:1.4}.progress{display:flex;align-items:center;gap:.8rem;margin-bottom:1rem}.progress-bar{flex:1;height:14px;background:#ffffffb3;border-radius:999px;overflow:hidden;box-shadow:inset 0 1px 3px #00000014}.progress-fill{height:100%;background:linear-gradient(90deg,var(--pink),var(--gold));border-radius:999px;transition:width .4s ease}.progress-label{font-size:.85rem;font-weight:700;color:var(--ink-soft);white-space:nowrap}.filter-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.1rem}.chip{border:2px solid var(--pink-soft);background:transparent;color:var(--pink);padding:.3rem .9rem;border-radius:999px;font-family:var(--font);font-weight:700;font-size:.82rem;cursor:pointer;transition:all .15s ease}.chip:hover{background:var(--pink-bg)}.chip--active{background:var(--pink);color:#fff;border-color:var(--pink)}.activity-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.1rem}.activity-card{position:relative;display:flex;gap:.8rem;background:var(--card);border-radius:var(--radius);padding:1.1rem 1.2rem;box-shadow:var(--shadow-soft);border:1px solid rgba(255,255,255,.7);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:transform .18s ease,box-shadow .18s ease,opacity .2s ease}.activity-card:hover{transform:translateY(-4px);box-shadow:var(--shadow)}.activity-card.is-done{opacity:.62}.activity-card.is-done .activity-title{text-decoration:line-through;text-decoration-color:var(--pink-soft)}.activity-check{position:relative;flex-shrink:0}.activity-check input{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer}.activity-check-box{display:grid;place-items:center;width:28px;height:28px;border-radius:9px;border:2px solid var(--pink-soft);color:transparent;font-weight:900;font-size:.9rem;transition:all .15s ease}.activity-check input:checked+.activity-check-box{background:var(--green);border-color:var(--green);color:#fff}.activity-check.is-locked input{cursor:not-allowed}.activity-check.is-locked .activity-check-box{border-color:#e4d3da;opacity:.75}.activity-body{flex:1;min-width:0}.activity-meta{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.3rem;font-size:.72rem}.activity-city{background:var(--sky-soft);color:#2a6e85;padding:.1rem .5rem;border-radius:999px;font-weight:700}.activity-date,.activity-time{color:var(--ink-soft);font-weight:600;align-self:center}.activity-title{margin:.1rem 0 .3rem;font-size:1.05rem;display:flex;align-items:center;gap:.4rem}.activity-note{margin:0;font-size:.85rem;color:var(--ink-soft);line-height:1.45}.activity-map{display:inline-flex;align-items:center;gap:.25rem;margin-top:.6rem;padding:.25rem .7rem;border-radius:999px;background:var(--sky-soft);color:#2a6e85;font-size:.78rem;font-weight:700;text-decoration:none;transition:all .15s ease}.activity-map:hover{background:var(--sky);color:#fff}.activity-delete{position:absolute;top:.6rem;right:.7rem;border:none;background:transparent;color:var(--pink-soft);font-size:.9rem;cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease}.activity-card:hover .activity-delete{opacity:1}.activity-delete:hover{color:#d96b6b}.add-toggle{margin-top:1.2rem;width:100%;border:2px dashed var(--pink-soft);background:transparent;color:var(--pink);padding:.9rem;border-radius:var(--radius);font-family:var(--font);font-weight:700;font-size:1rem;cursor:pointer;transition:all .15s ease}.add-toggle:hover{background:var(--pink-bg);border-style:solid}.add-form{margin-top:1.2rem;background:var(--card);border-radius:var(--radius);padding:1.2rem;box-shadow:var(--shadow-soft);border:1px solid rgba(255,255,255,.7);display:flex;flex-direction:column;gap:.7rem}.add-row{display:flex;gap:.6rem;flex-wrap:wrap}.add-input{flex:1;min-width:0;border:2px solid var(--pink-soft);border-radius:12px;padding:.6rem .8rem;font-family:var(--font);font-size:.95rem;background:var(--cream);color:var(--ink)}.add-input:focus{outline:none;border-color:var(--pink);box-shadow:0 0 0 3px #ff7aa22e}.add-emoji{flex:0 0 56px;text-align:center;font-size:1.2rem}.add-grow{flex:4}.add-note{resize:vertical}.add-actions{display:flex;justify-content:flex-end;gap:.6rem}.btn{border:none;border-radius:999px;padding:.55rem 1.3rem;font-family:var(--font);font-weight:700;font-size:.9rem;cursor:pointer;transition:transform .12s ease,box-shadow .15s ease,background .15s ease}.btn:active{transform:scale(.96)}.btn--primary{background:var(--pink);color:#fff;box-shadow:var(--shadow)}.btn--primary:hover{background:#ff5e8f}.btn--ghost{background:transparent;color:var(--ink-soft);border:2px solid var(--pink-soft)}.btn--ghost:hover{background:var(--pink-bg)}.footer{margin-top:3rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.8rem}.footer-note{font-size:.8rem;color:var(--ink-soft);margin:0}.empty{color:var(--ink-soft);font-style:italic;padding:1rem 0}.loading{text-align:center;padding:4rem 0;color:var(--ink-soft);font-size:1.1rem}.topbar{display:flex;justify-content:flex-end;margin-bottom:-.5rem}.lock-btn{border:2px solid var(--pink-soft);background:var(--card);color:var(--ink-soft);font-family:var(--font);font-weight:700;font-size:.82rem;padding:.4rem .9rem;border-radius:999px;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:var(--shadow-soft);transition:all .15s ease}.lock-btn:hover{background:var(--pink-bg)}.lock-btn--unlocked{border-color:var(--green);color:#2f7d56}.lock-form{background:var(--cream);border-radius:var(--radius);padding:1.6rem;width:min(380px,92vw);display:flex;flex-direction:column;gap:.7rem;box-shadow:0 20px 60px #0006}.lock-title{margin:0;font-family:var(--font-display);font-size:1.2rem;color:var(--ink)}.lock-sub{margin:0 0 .3rem;font-size:.85rem;color:var(--ink-soft);line-height:1.4}.stamps-sub{margin:-.4rem 0 1.2rem;color:var(--ink-soft);font-size:.9rem}.stamp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:1.1rem;justify-items:center}.stamp{position:relative;margin:0;width:138px;height:138px}.stamp-face{position:relative;width:100%;height:100%;border-radius:50%;border:3px dashed var(--ink-soft);background:transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.2rem;padding:.5rem;text-align:center;font-family:var(--font);color:var(--ink-soft);cursor:pointer;opacity:.55;filter:grayscale(1);transform:rotate(var(--tilt));transition:transform .15s ease}.stamp-face:disabled{cursor:default}.stamp.is-earned .stamp-face{border-style:double;border-width:5px;border-color:var(--stamp-ink);color:var(--stamp-ink);opacity:.92;filter:none;animation:stamp-in .35s ease}.stamp.is-earned .stamp-face:before{content:"";position:absolute;top:9px;right:9px;bottom:9px;left:9px;border-radius:50%;border:1.5px solid var(--stamp-ink);opacity:.65}.stamp-face:not(:disabled):hover{transform:rotate(var(--tilt)) scale(1.06)}.stamp-face:not(:disabled):active{transform:rotate(var(--tilt)) scale(.88)}.stamp-emoji{font-size:2rem;line-height:1}.stamp-img{width:58px;height:58px;object-fit:contain}.stamp-label{font-weight:900;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;line-height:1.1}.stamp-date{font-size:.62rem;opacity:.85}.stamp-delete{position:absolute;top:0;right:6px;width:26px;height:26px;border:none;border-radius:50%;background:#00000073;color:#fff;font-size:.78rem;cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease}.stamp:hover .stamp-delete{opacity:1}.stamp-delete:hover{background:#d96b6b}@keyframes stamp-in{0%{transform:rotate(var(--tilt)) scale(1.7);opacity:0}55%{transform:rotate(var(--tilt)) scale(.9)}to{transform:rotate(var(--tilt)) scale(1);opacity:.92}}.stamp-form-row{align-items:center}.stamp-swatches{display:flex;gap:.4rem}.swatch{width:28px;height:28px;border-radius:50%;border:2px solid #fff;box-shadow:var(--shadow-soft);cursor:pointer;padding:0}.swatch--active{outline:2px solid var(--ink);outline-offset:2px}.stamp-earned-toggle{display:inline-flex;align-items:center;gap:.35rem;font-size:.85rem;font-weight:700;color:var(--ink-soft)}.stamp-upload-preview{position:relative;flex:0 0 56px;width:56px;height:56px;border-radius:12px;border:2px solid var(--pink-soft);background:var(--pink-bg);display:grid;place-items:center}.stamp-upload-preview img{width:46px;height:46px;object-fit:contain}.stamp-upload-clear{position:absolute;top:-8px;right:-8px;width:22px;height:22px;border:none;border-radius:50%;background:#d96b6b;color:#fff;font-size:.7rem;cursor:pointer}.stamp-upload-hint{font-size:.78rem;color:var(--ink-soft);align-self:center}.gallery-controls{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center;margin-bottom:1.1rem}.gallery-video-form{display:flex;gap:.5rem;flex:1 1 320px}.gallery-video-form .add-input{flex:1}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:.8rem}.gallery-item{position:relative;margin:0;border-radius:16px;overflow:hidden;box-shadow:var(--shadow-soft);aspect-ratio:1 / 1;background:var(--pink-bg)}.gallery-open{display:block;width:100%;height:100%;padding:0;border:none;background:none;cursor:pointer}.gallery-open img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s ease}.gallery-item:hover .gallery-open img{transform:scale(1.06)}.gallery-video{position:relative}.gallery-play{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font-size:2.2rem;color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.5);background:#0000002e;pointer-events:none}.gallery-delete{position:absolute;top:.4rem;right:.4rem;width:26px;height:26px;border:none;border-radius:50%;background:#00000080;color:#fff;font-size:.8rem;cursor:pointer;opacity:0;transition:opacity .15s ease,background .15s ease}.gallery-item:hover .gallery-delete{opacity:1}.gallery-delete:hover{background:#d96b6b}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:1.5rem;background:#281c28d1;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fade-in .2s ease}.lightbox-close{position:absolute;top:1rem;right:1.2rem;width:44px;height:44px;border:none;border-radius:50%;background:#ffffffe6;color:var(--ink);font-size:1.1rem;cursor:pointer}.lightbox-body{max-width:min(1000px,92vw);max-height:86vh}.lightbox-body img{max-width:100%;max-height:86vh;border-radius:14px;box-shadow:0 20px 60px #00000080}.lightbox-video{width:min(1000px,92vw);aspect-ratio:16 / 9}.lightbox-video iframe{width:100%;height:100%;border:none;border-radius:14px;box-shadow:0 20px 60px #00000080}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.petals{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;overflow:hidden}.petal{position:absolute;top:-30px;width:14px;height:14px;background:var(--pink-soft);border-radius:100% 0;opacity:.7;animation-name:fall;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes fall{0%{transform:translateY(-30px) translate(0) rotate(0);opacity:0}10%{opacity:.7}to{transform:translateY(105vh) translate(60px) rotate(360deg);opacity:.7}}.location-nav-btn{border:2px solid var(--sky);background:var(--card);color:#2a6e85;font-family:var(--font);font-weight:700;font-size:.82rem;padding:.4rem .9rem;border-radius:999px;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:var(--shadow-soft);transition:all .15s ease}.location-nav-btn:hover{background:var(--sky-soft)}.location-map-wrap{position:relative;border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);border:2px solid rgba(255,255,255,.7);margin-bottom:1.4rem}.location-map{display:block;width:100%;height:clamp(280px,45vw,480px);border:none}.location-osm-link{display:block;text-align:right;padding:.5rem .9rem;background:var(--card);font-size:.78rem;font-weight:700;color:#2a6e85;text-decoration:none;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.location-osm-link:hover{background:var(--sky-soft)}.location-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.9rem;margin-bottom:1.2rem}.location-stat{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;background:var(--card);border-radius:16px;padding:1rem 1.1rem;box-shadow:var(--shadow-soft);border:1px solid rgba(255,255,255,.7);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.location-stat-icon{font-size:1.3rem;line-height:1}.location-stat-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-soft);font-weight:700}.location-stat-value{font-family:var(--font-display);font-size:1rem;color:var(--ink)}.location-refresh-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.location-last-fetch{font-size:.8rem;color:var(--ink-soft)}.location-error{background:#fdecec;border:1px solid #f5c2c2;border-radius:var(--radius);padding:1rem 1.2rem;color:#c0564e;line-height:1.5}.location-error p{margin:0 0 .4rem}.location-error p:last-child{margin-bottom:0}.location-setup{font-size:.85rem;color:var(--ink-soft)}.location-setup code{background:#ff7aa21f;border-radius:5px;padding:.05rem .35rem;font-size:.82rem}@media (max-width: 560px){.container{width:94vw;padding-top:1rem}.hero{padding:1.4rem .5rem .5rem}.countdown-unit{min-width:60px;padding:.6rem .7rem}.flight-grid,.activity-grid{grid-template-columns:1fr}.activity-delete{opacity:1}}@media (prefers-reduced-motion: reduce){.petal{display:none}*{animation-duration:.001ms!important;transition-duration:.001ms!important}}
