:root{--sea:#03171c;--deep:#020d12;--ink:#edf1e8;--muted:#a8bebc;--gold:#c6b48a;--aqua:#98ded5;--serif:Georgia,'Times New Roman','Songti SC','Noto Serif CJK SC',serif;--sans:Arial,'PingFang SC','Microsoft YaHei',sans-serif}*{box-sizing:border-box}html{scroll-behavior:auto}body{margin:0;background:var(--deep);color:var(--ink);font-family:var(--sans);font-size:16px;-webkit-font-smoothing:antialiased}body,html{overflow-x:clip}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{font:inherit;color:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:disabled{cursor:default;opacity:.5}button:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:7px}button{border:0}img{display:block;width:100%;height:100%;object-fit:cover}h1,h2,p,figure{margin:0}h1,h2{font-family:var(--serif);font-weight:400;letter-spacing:-.045em;line-height:1.04}h2{font-size:clamp(42px,6.1vw,100px)}em{font-weight:400;color:var(--gold)}p{line-height:1.9}header{position:absolute;top:0;left:0;width:100%;z-index:20;padding:32px 4.7vw;display:flex;align-items:center;justify-content:space-between}.wordmark{font-family:var(--serif);font-size:28px;letter-spacing:.1em}.wordmark span{font-size:20px}.wordmark i{display:block;font-family:var(--sans);font-size:10px;font-style:normal;letter-spacing:.31em;margin-top:6px}.header-right{display:flex;align-items:center;gap:40px}.date,.music,.share{font-size:11px;letter-spacing:.17em}.music{display:flex;align-items:center;gap:12px;background:transparent;padding:12px 0}.share{display:flex;align-items:center;gap:8px;background:transparent;padding:12px 0}.share span:first-child{color:var(--gold);font-size:14px}.sound-bars{display:flex;gap:3px;align-items:center;height:17px}.sound-bars b{height:5px;width:1px;background:var(--gold)}.sound-bars b:nth-child(2){height:12px}.sound-bars b:nth-child(3){height:17px}.sound-bars b:nth-child(4){height:8px}.music[aria-pressed=true] b{animation:equalizer 1.2s ease-in-out infinite alternate}.music b:nth-child(2){animation-delay:.3s}.music b:nth-child(3){animation-delay:.6s}.eyebrow{font-size:11px;letter-spacing:.22em;color:var(--gold);line-height:1.7;margin-bottom:27px}.opening{height:100vh;height:100svh;min-height:690px;position:relative;display:grid;place-items:center;isolation:isolate;overflow:hidden}.opening-art{position:absolute;inset:0;z-index:-1;background:radial-gradient(ellipse at 50% 60%,#164c55 0%,#04181e 45%,#020d12 80%)}.opening-art img{opacity:.85;object-position:center 62%}.opening-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(2,13,18,.25),rgba(2,13,18,.12) 25%,rgba(2,13,18,.16) 65%,#020d12),linear-gradient(90deg,rgba(2,13,18,.24),transparent 45%)}.opening-copy{text-align:center;position:relative;margin-top:1vh}.opening h1{font-size:clamp(42px,5.8vw,88px);text-shadow:0 3px 30px #020d1277}.opening h1 em{color:#f1eee1}.opening .chinese{margin-top:23px;letter-spacing:.14em;color:#d0d9d4;font-size:14px}.enter-button{background:#061c2180;border:1px solid #c6b48a88;min-width:144px;padding:17px 25px;margin-top:38px;border-radius:0;display:inline-flex;justify-content:space-between;gap:40px;font-size:15px;transition:background .3s,border .3s}.enter-button:hover{background:#b5d4c722;border-color:var(--gold)}.enter-button span:last-child{color:var(--gold)}.opening-footer{position:absolute;bottom:36px;left:4.7vw;right:4.7vw;display:flex;justify-content:space-between;align-items:center;font-size:10px;letter-spacing:.18em;color:var(--muted)}.opening-footer>span:nth-child(2){font-family:var(--serif);font-size:23px;letter-spacing:.1em;color:var(--gold)}.opening-footer i{font-size:14px;margin:0 12px;color:#708b88}.journey{height:480vh;height:480svh;position:relative}.journey-stage{height:100vh;height:100svh;min-height:600px;position:sticky;top:0;overflow:hidden;background:#06252b}.atlantis-art{position:absolute;inset:0;transform:scale(1.03);object-position:50% 50%}.sea-shade{position:absolute;inset:0;background:linear-gradient(0deg,#020d12 0%,transparent 28%,#00131e33 70%,#020d1288),linear-gradient(90deg,#00101655,transparent 60%)}#webgl{position:absolute;inset:0;pointer-events:none}#webgl canvas{display:block}.reveal-title{position:absolute;left:9%;top:32%;max-width:750px}.reveal-title h2{font-size:clamp(42px,6.2vw,96px)}.reveal-title p:last-child{font-size:14px;margin-top:30px;color:#c1d1cd}.portal-ring{position:absolute;left:50%;top:50%;width:min(49vw,620px);aspect-ratio:1;border:1px solid #a7e3d080;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 50px #7adfcd14,inset 0 0 50px #7adfcd14;opacity:0}.portal-ring span{position:absolute;inset:14px;border:1px dashed #c6b48a55;border-radius:50%}.name-reveal{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;opacity:0;text-align:center}.name-reveal h2{font-size:clamp(60px,14vw,215px);letter-spacing:.07em;line-height:1}.name-reveal>p:not(.eyebrow){font-family:var(--serif);font-style:italic;font-size:30px;margin-top:18px}.name-reveal>span{font-size:13px;letter-spacing:.35em;margin-top:28px;color:var(--gold)}.portrait-reveal{position:absolute;inset:0;background:#091e20;clip-path:circle(0% at 50% 50%);overflow:hidden}.portrait-reveal>img{position:absolute;width:45%;height:89%;right:10%;top:5%;object-position:50% 45%}.portrait-caption{position:absolute;left:10%;top:23%;z-index:2}.portrait-caption h2{font-size:clamp(54px,7.4vw,118px);text-shadow:0 2px 20px #091e2080}.portrait-caption h2 span{font-family:var(--serif);font-size:.75em;letter-spacing:.09em;line-height:1.7}.portrait-caption>p:last-child{color:var(--muted);font-size:15px;letter-spacing:.2em;margin-top:12px}.photo-note{position:absolute;right:10%;bottom:2%;font-size:10px;letter-spacing:.17em;color:var(--gold)}.journey-footer{position:absolute;left:4.7%;right:4.7%;bottom:34px;display:flex;justify-content:space-between;font-size:10px;letter-spacing:.14em;color:#c1c9ba}.journey-footer i{font-style:normal;margin-left:15px}.world-intro{padding:155px 24px;text-align:center;background:var(--deep)}.world-intro>p:not(.eyebrow){color:var(--muted);margin-top:30px;letter-spacing:.06em}.hairline{display:block;height:60px;width:1px;background:var(--gold);opacity:.4;margin:45px auto 0}.small{font-size:13px!important;line-height:1.9}.dream{position:relative;height:115vh;height:115svh;min-height:740px;overflow:clip}.dream-media{position:absolute;inset:0;overflow:hidden}.dream-media>img{height:115%;position:absolute;top:-7%;object-position:center}.dream-shade{position:absolute;inset:0;background:linear-gradient(90deg,#03151cc9 0%,#03151c22 60%),linear-gradient(0deg,#020d12,transparent 35%,transparent 75%,#020d12)}.dream-copy{position:absolute;left:9%;top:40%;max-width:650px;pointer-events:none}.dream-copy h2{font-size:clamp(52px,6.4vw,100px)}.dream-copy>p:not(.eyebrow){font-size:14px;color:#d9dfd6;margin-top:25px}.scene-label{display:block;color:#d4d8c5;font-size:10px;letter-spacing:.24em;margin-top:55px;opacity:.7}.surprise{position:absolute;left:var(--x);top:var(--y);width:64px;height:64px;margin:-32px;border:1px solid #dec99488;border-radius:50%;background:#08252755;color:#ffe7ad;display:grid;place-items:center;font-size:29px;box-shadow:0 0 30px #efdf9422;z-index:3;transition:transform .5s,background .5s}.surprise:hover{transform:scale(1.14);background:#0b323b99}.surprise:after{content:'';position:absolute;inset:-9px;border:1px solid #dacb9055;border-radius:50%;animation:radiate 3s ease-out infinite}.surprise.found{background:#b8dcd133;color:#eaf8ee;border-color:#a9dcd4}.surprise.found:after{animation:none;opacity:0}.moment{position:relative;min-height:1050px;padding:160px 10%;display:flex;align-items:center;justify-content:space-between;gap:8%;background:#c9c2b4;color:#233435;overflow:hidden}.moment-text{position:relative;z-index:2;flex:1}.moment .eyebrow{color:#566466}.moment h2{font-size:clamp(42px,5vw,76px)}.moment h2 em{color:#5c6a62}.moment-text>p:not(.eyebrow){margin-top:40px;font-size:16px;letter-spacing:.1em}.moment-date{display:block;margin-top:75px;line-height:1.8;font-size:12px;letter-spacing:.08em}.moment-date i{font-family:var(--serif);font-size:19px}.moment-photo{width:43%;max-width:520px;flex-shrink:0;padding:13px 13px 25px;background:#eee8dc;transform:rotate(4deg);box-shadow:0 25px 70px #1b302322;z-index:1}.moment-photo img{aspect-ratio:1425/2048;object-fit:cover;height:auto}.moment-photo figcaption{font-size:9px;letter-spacing:.2em;text-align:center;margin-top:19px;color:#65716e}.moment-number{position:absolute;font-family:var(--serif);font-size:40vw;line-height:1;color:#a8aa9d;opacity:.3;left:-2%;bottom:-7%;pointer-events:none}.treasures{padding:140px max(24px,12vw);text-align:center;background:radial-gradient(ellipse at 50% 100%,#123534,#020d12 70%)}.treasures h2{font-size:clamp(40px,5.5vw,82px)}.treasures>p:not(.eyebrow){color:var(--muted);margin-top:30px}.treasure-list{max-width:760px;margin:60px auto 35px}.treasure-list button{display:flex;align-items:center;width:100%;background:none;border-top:1px solid #bacebd33;padding:26px 15px;gap:35px;text-align:left}.treasure-list button:last-child{border-bottom:1px solid #bacebd33}.treasure-list button>span:first-child{font-size:11px;color:var(--gold)}.treasure-list button>span:nth-child(2){font-family:var(--serif);font-size:32px}.treasure-list b{font-weight:400;font-size:12px;color:var(--muted);margin-left:auto}.collection-count{font-family:var(--serif);font-size:29px;color:var(--gold)!important}.collection-count .small{font-family:var(--sans);margin-left:18px;letter-spacing:.13em;font-size:10px!important}.outline-button{border:1px solid #bcae8277;padding:18px 27px;background:transparent;font-size:14px;letter-spacing:.05em;margin-top:32px}.outline-button:not(:disabled):hover{background:#aacbbe19}.wish{position:relative;height:110vh;height:110svh;min-height:760px;overflow:hidden}.wish-scene{position:absolute;inset:0}.wish-scene img{object-position:center}.wish-shade{position:absolute;inset:0;background:linear-gradient(180deg,#020d12 0%,#020d1244 30%,transparent 65%,#020d12)}.wish-copy{position:absolute;top:9%;width:100%;text-align:center}.wish-copy p:last-child{font-size:14px;color:#e0dfca;margin-top:22px}.candle-button{position:absolute;left:50%;top:55%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:10px;background:#051c2277;border:1px solid #dacc9288;border-radius:70px;padding:20px 28px;min-width:110px;box-shadow:0 0 50px #edd48b22}.candle-button span:first-child{font-size:38px;color:#fbe5a5}.candle-button span:last-child{font-size:12px;color:#f3e4ba}.wish.wished .candle-button{opacity:0;pointer-events:none}.finale{position:relative;min-height:1150px;overflow:hidden;text-align:center;padding:150px 20px 90px;background:#03171c}.finale-city,.finale-friends{position:absolute;inset:0;object-fit:cover}.finale-city{opacity:.5}.finale-friends{opacity:.34;object-position:center}.finale-shade{position:absolute;inset:0;background:linear-gradient(180deg,#03171c44,#03171caa 30%,#03171cee 85%)}.finale-copy{position:relative;z-index:2}.finale h2{font-size:clamp(48px,7vw,108px)}.finale h2 span{font-size:.8em;line-height:1.8;letter-spacing:.1em;color:#e0c995}.blessing{font-family:var(--serif);font-size:18px;line-height:2.5;letter-spacing:.12em;margin-top:30px;color:#d1ded6}.closing{margin-top:50px;font-size:16px;letter-spacing:.13em;color:var(--gold)}.text-button{font-size:12px;letter-spacing:.1em;background:none;border-bottom:1px solid #bfb48355;padding:14px 4px;margin-top:50px;color:var(--muted)}.text-button span{margin-left:15px}.finale footer{position:absolute;bottom:30px;left:4.7%;right:4.7%;display:flex;justify-content:space-between;font-size:9px;letter-spacing:.16em;color:#94aaa2}.city-lights{position:absolute;inset:0}.city-lights i{position:absolute;width:5px;height:5px;background:#e8d397;border-radius:50%;box-shadow:0 0 18px 5px #eccf9255;opacity:0}.chapter-nav{position:fixed;right:27px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:22px;z-index:15;mix-blend-mode:screen}.chapter-nav a{display:flex;align-items:center;justify-content:flex-end;width:30px;height:20px}.chapter-nav a:after{content:'';width:14px;height:1px;background:#abc2b488;transition:width .3s}.chapter-nav a.active:after{width:28px;background:var(--gold)}.chapter-nav span{position:absolute;right:38px;font-size:9px;opacity:0;transition:opacity .3s}.chapter-nav a:hover span,.chapter-nav a.active span{opacity:1}#magic{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:30}#cursor{position:fixed;width:7px;height:7px;background:#e3dbb1;border-radius:50%;box-shadow:0 0 18px 3px #94d7bd55;pointer-events:none;z-index:31;opacity:0}#toast{position:fixed;left:50%;bottom:36px;transform:translate(-50%,20px);background:#092128ed;border:1px solid #b9c29c66;padding:20px 30px;max-width:min(600px,90vw);width:max-content;text-align:center;font-size:14px;line-height:1.8;color:#e9e9cf;z-index:40;opacity:0;pointer-events:none;transition:opacity .4s,transform .4s}#toast.show{opacity:1;transform:translate(-50%,0)}#wish-blackout{position:fixed;inset:0;background:#010708;z-index:45;pointer-events:none;opacity:0}.preloader{position:fixed;inset:0;display:flex;gap:30px;align-items:center;justify-content:center;background:#03171c;z-index:100;font-size:10px;letter-spacing:.2em;pointer-events:none;transition:opacity .6s}.preloader.done{opacity:0}.loader-mark{font-size:26px;color:var(--gold);animation:equalizer 1.5s ease-in-out infinite alternate}.skip-link{position:fixed;left:20px;top:-80px;background:#f1ede1;color:#072126;padding:12px 18px;z-index:200}.skip-link:focus{top:20px}.noscript{position:fixed;bottom:10px;left:10px;z-index:100;background:#071f24;padding:15px}.lenis.lenis-smooth{scroll-behavior:auto!important}.lenis.lenis-stopped{overflow:hidden}[hidden]{display:none!important}@keyframes radiate{0%{transform:scale(.9);opacity:.7}100%{transform:scale(1.35);opacity:0}}@keyframes equalizer{to{transform:scaleY(.45)}}
@media(min-width:1600px){.opening-copy{margin-top:3vh}}@media(max-width:800px){header{padding:25px 24px}.header-right{gap:0}.date{display:none}.wordmark{font-size:24px}.wordmark span{font-size:17px}.music{font-size:10px}.share{margin-left:26px;font-size:10px}.opening{min-height:660px}.opening h1{font-size:clamp(37px,8vw,60px)}.opening-copy{padding:0 20px;margin-top:0}.opening-art img{object-position:center}.opening .eyebrow{font-size:9px;letter-spacing:.17em}.opening-footer{left:24px;right:24px;bottom:27px;font-size:8px}.opening-footer>span:first-child{max-width:110px;line-height:1.9}.opening-footer>span:last-child{max-width:90px;line-height:1.9;text-align:right}.opening-footer>span:nth-child(2){font-size:20px}.opening-footer i{margin:0 1px}.journey{height:390vh;height:390svh}.journey-stage{min-height:560px}.reveal-title{left:7%;top:35%;right:9%}.reveal-title h2{font-size:46px}.reveal-title p:last-child{font-size:12px}.portal-ring{width:78vw}.name-reveal h2{font-size:17vw}.name-reveal .eyebrow{font-size:9px}.name-reveal>p:not(.eyebrow){font-size:24px}.portrait-reveal>img{width:70%;height:66%;right:6%;top:11%;object-position:center}.portrait-caption{left:7%;top:48%}.portrait-caption h2{font-size:clamp(46px,11.5vw,74px)}.portrait-caption .eyebrow{margin-bottom:15px;font-size:10px}.portrait-caption>p:last-child{font-size:12px}.photo-note{bottom:6%;right:7%;font-size:8px}.journey-footer{left:7%;right:7%;font-size:8px;bottom:23px}.world-intro{padding:115px 25px}.world-intro h2{font-size:54px}.eyebrow{font-size:9px;letter-spacing:.17em}.world-intro>p:not(.eyebrow){font-size:14px}.dream{height:100vh;height:100svh;min-height:650px}.dream-media>img{object-position:62% 50%}.dream-copy{left:7%;top:57%;right:8%}.dream-copy h2{font-size:54px}.dream-copy>p:not(.eyebrow){font-size:12px}.dream-copy .eyebrow{margin-bottom:17px}.scene-label{margin-top:28px;font-size:8px}.dream-shade{background:linear-gradient(0deg,#020d12,rgba(2,13,18,.5) 38%,transparent 70%,#020d12)}.surprise{top:37%!important;left:75%!important;width:56px;height:56px}.moment{min-height:1000px;padding:100px 8% 110px;flex-direction:column;align-items:flex-start;gap:50px}.moment h2{font-size:43px}.moment-text>p:not(.eyebrow){font-size:14px;margin-top:23px}.moment-date{margin-top:25px}.moment-photo{width:78%;max-width:420px;margin-left:15%}.moment-number{font-size:75vw;bottom:22%;left:-8%}.treasures{padding:100px 7%}.treasures h2{font-size:42px}.treasures>p:not(.eyebrow){font-size:14px}.treasure-list{margin:40px auto 25px}.treasure-list button{padding:24px 5px}.treasure-list button>span:nth-child(2){font-size:27px}.collection-count .small{font-size:8px!important;margin-left:10px}.wish{height:100vh;height:100svh;min-height:690px}.wish-scene img{object-position:50% 50%}.wish-copy{top:12%;padding:0 20px}.wish-copy h2{font-size:56px}.wish-copy p:last-child{font-size:12px}.candle-button{top:60%}.finale{min-height:1080px;padding:110px 24px 90px}.finale h2{font-size:48px}.blessing{font-size:15px;letter-spacing:.06em;line-height:2.65}.closing{font-size:13px;letter-spacing:.05em}.finale footer{font-size:7px;left:7%;right:7%;gap:20px}.chapter-nav{right:10px;gap:14px}.chapter-nav a{width:16px}.chapter-nav a:after{width:8px}.chapter-nav a.active:after{width:14px}.chapter-nav span{display:none}#cursor{display:none}#toast{font-size:13px;padding:17px 22px}.preloader{gap:15px;font-size:8px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.journey{height:auto}.journey-stage{position:relative;height:auto;min-height:0;overflow:visible}.atlantis-art{height:100vh;height:100svh;transform:none}.reveal-title{position:relative;top:auto;left:auto;height:65svh;padding:30vh 8% 0}.reveal-title h2{font-size:clamp(38px,6vw,80px)}.name-reveal{position:relative;height:40svh;opacity:1;background:#03171cbb}.portrait-reveal{position:relative;clip-path:none;height:100svh}.portal-ring,.journey-footer,#webgl{display:none}.dream-media>img{height:100%;top:0}.moment-photo{transform:none}.preloader{display:none}#cursor{display:none}}
/* Keep the cat visible in the shared birthday scene on narrow screens. */
@media(max-width:800px){.dream-cat .dream-media>img{object-position:17% 50%}.opening-footer>span:last-child{max-width:104px;font-size:8px;letter-spacing:.05em}.wish-copy{top:7%}.wish-copy h2{font-size:48px}.wish-copy .eyebrow{margin-bottom:17px}}

/* Mobile: frame 石蕾 in the three wish-section photos (was cropping her out). */
@media(max-width:800px){
  .dream-fish .dream-media>img{object-position:20% 50%}
  .dream-cat .dream-media>img{object-position:47% 50%}
  .dream-dog .dream-media>img{object-position:32% 50%}
}


/* === FINAL MOBILE EXPERIENCE — designed for iPhone/WeChat, not desktop scaled down === */
@media(max-width:800px){
  html{-webkit-text-size-adjust:100%;background:#020d12}
  body{min-width:320px;overscroll-behavior-y:none}
  header{
    padding:calc(18px + env(safe-area-inset-top)) 18px 18px;
    align-items:flex-start;
    background:linear-gradient(180deg,rgba(2,13,18,.42),transparent);
  }
  .wordmark{font-size:19px;line-height:.9;letter-spacing:.12em}
  .wordmark span{font-size:14px}
  .wordmark i{font-size:7px;margin-top:5px;letter-spacing:.34em}
  .header-right{gap:14px}
  .music{padding:5px 0;font-size:0}
  .music #music-label{display:none}
  .sound-bars{height:14px}
  .share{margin-left:0;padding:5px 0;font-size:9px;letter-spacing:.12em}
  .share span:first-child{font-size:12px}

  .opening{
    height:100dvh;min-height:600px;
    padding:calc(74px + env(safe-area-inset-top)) 18px calc(34px + env(safe-area-inset-bottom));
  }
  .opening-art img{object-position:50% 58%;transform:scale(1.02)}
  .opening-shade{
    background:
      linear-gradient(180deg,rgba(2,13,18,.26) 0%,rgba(2,13,18,.08) 30%,rgba(2,13,18,.15) 62%,rgba(2,13,18,.92) 100%),
      radial-gradient(circle at 50% 45%,transparent 10%,rgba(2,13,18,.22) 78%);
  }
  .opening-copy{width:100%;max-width:390px;padding:0 10px;margin-top:-2vh}
  .opening .eyebrow{font-size:8px;letter-spacing:.19em;margin-bottom:18px}
  .opening h1{font-size:clamp(38px,11vw,52px);line-height:.98;letter-spacing:-.055em}
  .opening .chinese{font-size:12px;margin-top:18px;letter-spacing:.09em}
  .enter-button{
    min-width:152px;min-height:52px;margin-top:28px;padding:14px 19px;
    background:rgba(3,25,31,.42);backdrop-filter:blur(8px);
  }
  .opening-footer{
    bottom:calc(18px + env(safe-area-inset-bottom));left:18px;right:18px;
    font-size:6.5px;letter-spacing:.13em;
  }
  .opening-footer>span:first-child,.opening-footer>span:last-child{max-width:78px;line-height:1.55}
  .opening-footer>span:nth-child(2){font-size:17px}
  .opening-footer i{margin:0 3px}
  .opening:after{
    content:'SCROLL';position:absolute;left:50%;bottom:calc(62px + env(safe-area-inset-bottom));
    transform:translateX(-50%);font-size:7px;letter-spacing:.28em;color:rgba(230,237,229,.58);
  }

  .journey{height:305dvh}
  .journey-stage{height:100dvh;min-height:0}
  .atlantis-art{object-position:50% 48%;transform:scale(1.01)}
  .sea-shade{
    background:linear-gradient(0deg,#020d12 0%,rgba(2,13,18,.1) 28%,rgba(0,19,30,.08) 72%,rgba(2,13,18,.55)),
               linear-gradient(90deg,rgba(0,16,22,.33),transparent 70%);
  }
  .reveal-title{left:22px;right:26px;top:30%;max-width:340px}
  .reveal-title .eyebrow{margin-bottom:15px}
  .reveal-title h2{font-size:clamp(42px,12vw,58px);line-height:.96}
  .reveal-title p:last-child{font-size:11px;margin-top:20px;line-height:1.8}
  .portal-ring{width:74vw;max-width:330px}
  .name-reveal{padding:0 20px}
  .name-reveal h2{font-size:20vw;letter-spacing:.055em}
  .name-reveal>p:not(.eyebrow){font-size:21px;margin-top:12px}
  .name-reveal>span{font-size:10px;margin-top:18px}
  .portrait-reveal{
    background:#06171b;
    clip-path:circle(0% at 50% 55%);
  }
  .portrait-reveal:after{
    content:'';position:absolute;inset:0;z-index:1;pointer-events:none;
    background:linear-gradient(180deg,rgba(2,13,18,.08) 25%,rgba(2,13,18,.18) 52%,rgba(2,13,18,.9) 100%);
  }
  .portrait-reveal>img{
    width:100%;height:100%;right:0;top:0;object-position:50% 31%;transform:none;
  }
  .portrait-caption{
    left:22px;right:22px;top:auto;bottom:9.5%;z-index:2;
  }
  .portrait-caption .eyebrow{font-size:8px;margin-bottom:10px}
  .portrait-caption h2{font-size:clamp(42px,13vw,61px);line-height:.9;text-shadow:0 5px 30px rgba(0,0,0,.45)}
  .portrait-caption h2 span{font-size:.72em}
  .portrait-caption>p:last-child{font-size:10px;margin-top:10px;letter-spacing:.14em}
  .photo-note{right:22px;bottom:3.2%;z-index:3;font-size:6.5px}
  .journey-footer{left:18px;right:18px;bottom:calc(15px + env(safe-area-inset-bottom));font-size:6px;letter-spacing:.12em}
  .journey-footer>span:last-child{display:none}

  .world-intro{min-height:88dvh;padding:18vh 25px 13vh;display:flex;flex-direction:column;justify-content:center}
  .world-intro h2{font-size:clamp(44px,13vw,60px);line-height:.95}
  .world-intro>p:not(.eyebrow){font-size:12px;line-height:2;margin-top:22px}
  .hairline{height:44px;margin-top:30px}

  .dream{height:100dvh;min-height:620px}
  .dream-media>img{height:108%;top:-4%;transform:scale(1.01)}
  .dream-shade{
    background:linear-gradient(180deg,rgba(2,13,18,.22) 0%,transparent 38%,rgba(2,13,18,.45) 67%,#020d12 100%);
  }
  .dream-copy{
    left:22px;right:24px;top:auto;bottom:8.5%;max-width:340px;
    text-shadow:0 3px 24px rgba(0,0,0,.35);
  }
  .dream-copy h2{font-size:clamp(42px,12vw,58px);line-height:.94}
  .dream-copy>p:not(.eyebrow){font-size:11px;line-height:1.8;margin-top:14px}
  .scene-label{font-size:6.5px;margin-top:20px}
  .surprise{
    width:52px;height:52px;margin:-26px;font-size:22px;
    background:rgba(5,36,43,.5);backdrop-filter:blur(8px);
  }
  .dream-fish .dream-media>img{object-position:33% 50%}
  .dream-cat .dream-media>img{object-position:47% 50%}
  .dream-dog .dream-media>img{object-position:34% 50%}
  .dream-fish .surprise{left:78%!important;top:42%!important}
  .dream-cat .surprise{left:79%!important;top:41%!important}
  .dream-dog .surprise{left:76%!important;top:43%!important}

  .moment{
    min-height:100dvh;padding:13vh 22px 10vh;gap:34px;justify-content:center;
  }
  .moment-text{width:100%}
  .moment h2{font-size:clamp(40px,11vw,52px);line-height:.96}
  .moment-text>p:not(.eyebrow){font-size:12px;line-height:1.8;margin-top:18px}
  .moment-date{margin-top:18px;font-size:9px}
  .moment-date i{font-size:15px}
  .moment-photo{width:min(76vw,320px);margin:0 auto;padding:9px 9px 18px;transform:rotate(2.5deg)}
  .moment-photo figcaption{font-size:6.5px;margin-top:12px}
  .moment-number{font-size:82vw;bottom:13%;opacity:.18}

  .treasures{min-height:94dvh;padding:13vh 22px 11vh;display:flex;flex-direction:column;justify-content:center}
  .treasures h2{font-size:clamp(40px,11.5vw,54px);line-height:.96}
  .treasures>p:not(.eyebrow){font-size:11px;line-height:1.8;margin-top:18px}
  .treasure-list{margin:34px auto 22px;width:100%}
  .treasure-list button{min-height:62px;padding:15px 3px}
  .treasure-list button>span:nth-child(2){font-size:23px}
  .treasure-list button b{font-size:8px}
  .outline-button{min-height:50px;padding:13px 20px}

  .wish{height:100dvh;min-height:640px}
  .wish-scene img{object-position:50% 48%}
  .wish-copy{top:10%;left:18px;right:18px;padding:0}
  .wish-copy h2{font-size:clamp(50px,14vw,64px)}
  .wish-copy p:last-child{font-size:11px}
  .candle-button{top:auto;bottom:12%;min-width:150px;min-height:52px}

  .finale{
    min-height:100dvh;padding:12vh 22px calc(72px + env(safe-area-inset-bottom));
    display:flex;align-items:center;
  }
  .finale-copy{position:relative;z-index:3;width:100%;padding-bottom:7vh}
  .finale h2{font-size:clamp(44px,12vw,58px);line-height:.96}
  .blessing{font-size:12px;line-height:2.15;letter-spacing:.035em;margin-top:28px}
  .closing{font-size:10px;margin-top:25px}
  .finale footer{bottom:calc(17px + env(safe-area-inset-bottom));font-size:6px}
  .chapter-nav{display:none}
  #toast{bottom:calc(22px + env(safe-area-inset-bottom));width:calc(100% - 36px);max-width:360px;font-size:12px}
  #magic{position:fixed;inset:0}
  .preloader{padding:env(safe-area-inset-top) 18px env(safe-area-inset-bottom);font-size:7px}
}
@media(max-width:380px){
  .opening h1{font-size:38px}
  .dream-copy h2{font-size:42px}
  .portrait-caption h2{font-size:42px}
  .header-right{gap:8px}
}
