:root{
  --ink:#492932;
  --plum-1000:#080307;
  --plum-950:#10060c;
  --plum-900:#180810;
  --plum-800:#2a0d19;
  --burgundy:#6c2038;
  --rose:#b26a7d;
  --blush:#daa0ad;
  --cream:#f3e0cb;
  --paper:#ecd6bf;
  --gold:#caa16d;
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,Baskerville,Georgia,serif;
  --sans:"Avenir Next",Avenir,"Helvetica Neue",Arial,sans-serif;
  --hand:"Bradley Hand","Segoe Print","Snell Roundhand",cursive;
  --ease:cubic-bezier(.18,.78,.16,1);
  --safe-top:max(18px,env(safe-area-inset-top));
  --safe-bottom:max(22px,env(safe-area-inset-bottom));
  --pointer-x:0;
  --pointer-y:0;
}
*{box-sizing:border-box}
html{background:var(--plum-1000);scroll-behavior:smooth}
body{margin:0;background:var(--plum-1000);color:var(--cream);font-family:var(--sans);overflow-x:hidden;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none}
body.is-locked{overflow:hidden}
button{font:inherit;color:inherit}
button:focus-visible{outline:1px solid rgba(243,224,203,.78);outline-offset:7px}
img{display:block;max-width:none;pointer-events:none;user-select:none;-webkit-user-drag:none}

/* -------- loader -------- */
.loader{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:17px;background:radial-gradient(circle at 50% 42%,#32111e 0,#170810 42%,#090307 100%);transition:opacity .8s var(--ease),visibility .8s}
.loader.is-hidden{opacity:0;visibility:hidden}
.loader p{margin:0;font:500 9px/1.3 var(--sans);letter-spacing:.28em;text-transform:uppercase;color:rgba(243,224,203,.73)}
.loader__track{width:min(190px,52vw);height:1px;background:rgba(243,224,203,.14);overflow:hidden}
.loader__track span{display:block;width:0;height:100%;background:linear-gradient(90deg,transparent,var(--blush),var(--gold));transition:width .2s linear}
.loader__mark{position:relative;width:54px;height:54px;animation:loaderSpin 6s linear infinite}
.loader__mark i{position:absolute;left:20px;top:2px;width:14px;height:26px;border-radius:60% 60% 48% 48%;background:linear-gradient(180deg,#dfa9b5,#72283f);transform-origin:7px 25px;filter:drop-shadow(0 0 10px rgba(219,145,166,.23))}
.loader__mark i:nth-child(2){transform:rotate(90deg)}.loader__mark i:nth-child(3){transform:rotate(180deg)}.loader__mark i:nth-child(4){transform:rotate(270deg)}
@keyframes loaderSpin{to{transform:rotate(360deg)}}

/* -------- one continuous world -------- */
.world{position:fixed;inset:0;z-index:-20;overflow:hidden;background:#12070d;pointer-events:none;isolation:isolate}
.world__background{position:absolute;inset:-5%;background:url('../assets/world_mobile.jpg') center/cover no-repeat;transform:scale(1.07) translate3d(calc(var(--pointer-x)*-4px),calc(var(--pointer-y)*-4px),0);filter:saturate(1.08) contrast(1.04);transition:filter 1.5s ease,transform 2.2s var(--ease)}
.world::before{content:"";position:absolute;inset:0;z-index:4;background:linear-gradient(180deg,rgba(5,1,4,.15),rgba(12,3,8,.02) 42%,rgba(5,1,4,.52));box-shadow:inset 0 0 16vw rgba(0,0,0,.56)}
.world__grain{position:absolute;inset:0;z-index:8;background-image:url('../assets/grain.png');background-size:310px;mix-blend-mode:soft-light;opacity:.06}
.world__light{position:absolute;z-index:2;border-radius:50%;filter:blur(68px);transition:1.5s var(--ease)}
.world__light--warm{width:70vw;height:70vw;max-width:760px;max-height:760px;left:15%;top:22%;background:rgba(230,158,140,.13);animation:lightBreath 6s ease-in-out infinite alternate}
.world__light--rose{width:58vw;height:58vw;max-width:620px;max-height:620px;right:-14%;bottom:-9%;background:rgba(169,71,101,.10);animation:lightBreath 8s 1.2s ease-in-out infinite alternate-reverse}
@keyframes lightBreath{to{transform:scale(1.18);opacity:.64}}
.world__flower{position:absolute;z-index:3;will-change:transform,opacity;filter:drop-shadow(0 34px 40px rgba(0,0,0,.52)) saturate(.98) contrast(1.04);transition:transform 1.7s var(--ease),opacity 1.2s ease,filter 1.2s ease}
.world__flower--left{width:min(84vw,610px);left:-47vw;bottom:-15vh;opacity:.62;transform:rotate(13deg) scale(.94) translate3d(calc(var(--pointer-x)*6px),calc(var(--pointer-y)*8px),0)}
.world__flower--right{width:min(82vw,590px);right:-45vw;top:-11vh;opacity:.58;transform:rotate(-12deg) scale(.92) translate3d(calc(var(--pointer-x)*-6px),calc(var(--pointer-y)*-7px),0)}
.world__flower--front{width:min(68vw,510px);right:-40vw;bottom:-19vh;opacity:.32;filter:blur(2px) drop-shadow(0 42px 45px rgba(0,0,0,.62));transform:rotate(-18deg) scale(1.08)}
body[data-scene="opening"] .world__flower--left{transform:rotate(8deg) scale(1.02) translate(3vw,-2vh);opacity:.72}
body[data-scene="opening"] .world__flower--right{transform:rotate(-6deg) scale(1.04) translate(-3vw,3vh);opacity:.68}
body[data-scene="bloom"] .world__flower--left{transform:rotate(3deg) scale(1.08) translate(7vw,-5vh);opacity:.78}
body[data-scene="bloom"] .world__flower--right{transform:rotate(-2deg) scale(1.10) translate(-8vw,7vh);opacity:.76}
body[data-scene="bloom"] .world__flower--front{opacity:.52;transform:rotate(-10deg) scale(1.18) translate(-7vw,-7vh)}
body[data-scene="notes"] .world__flower--left{transform:rotate(17deg) scale(.95) translate(-2vw,7vh);opacity:.48}
body[data-scene="notes"] .world__flower--right{transform:rotate(-14deg) scale(.97) translate(4vw,-2vh);opacity:.48}
body[data-scene="prayer"] .world__background{filter:saturate(.92) contrast(1.02) brightness(1.06)}
body[data-scene="prayer"] .world__flower--left{transform:rotate(6deg) scale(1.08) translate(8vw,-7vh);opacity:.72}
body[data-scene="prayer"] .world__flower--right{transform:rotate(-5deg) scale(1.07) translate(-8vw,8vh);opacity:.72}
body[data-scene="intimate"] .world__flower--left{opacity:.42;transform:rotate(20deg) scale(.86) translate(-4vw,8vh)}
body[data-scene="intimate"] .world__flower--right{opacity:.60;transform:rotate(-8deg) scale(1.02) translate(-2vw,4vh)}
body[data-scene="closing"] .world__background{filter:saturate(.88) contrast(1.06) brightness(.86)}
body[data-scene="closing"] .world__flower--left{opacity:.54;transform:rotate(10deg) scale(1.02) translate(5vw,-1vh)}
body[data-scene="closing"] .world__flower--right{opacity:.50;transform:rotate(-9deg) scale(1.02) translate(-5vw,4vh)}

/* -------- controls -------- */
.sound-toggle{position:fixed;z-index:120;right:16px;top:var(--safe-top);display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid rgba(243,224,203,.13);border-radius:999px;background:rgba(14,5,10,.42);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);opacity:0;transform:translateY(-8px);transition:.5s var(--ease);cursor:pointer}
body.has-opened .sound-toggle{opacity:1;transform:none}
.sound-toggle>span:last-child{font-size:8px;letter-spacing:.22em;text-transform:uppercase;color:rgba(243,224,203,.77)}
.sound-toggle__bars{display:flex;align-items:flex-end;gap:2px;height:11px;width:12px}.sound-toggle__bars i{display:block;width:2px;border-radius:2px;background:var(--blush);animation:soundBars .8s ease-in-out infinite alternate}.sound-toggle__bars i:nth-child(1){height:5px}.sound-toggle__bars i:nth-child(2){height:10px;animation-delay:.18s}.sound-toggle__bars i:nth-child(3){height:7px;animation-delay:.34s}.sound-toggle[aria-pressed="true"] .sound-toggle__bars i{animation:none;height:2px;opacity:.5}
@keyframes soundBars{to{height:3px;opacity:.45}}
.chapter-rail{position:fixed;z-index:110;left:15px;top:50%;display:flex;flex-direction:column;gap:12px;transform:translateY(-50%);opacity:0;pointer-events:none;transition:.65s var(--ease)}
body.has-opened .chapter-rail{opacity:1;pointer-events:auto}
.chapter-rail__line{position:absolute;left:5px;top:6px;bottom:6px;width:1px;background:rgba(243,224,203,.10);overflow:hidden}.chapter-rail__line i{display:block;width:100%;height:0;background:linear-gradient(var(--blush),var(--gold));transition:height .8s var(--ease)}
.chapter-rail button{position:relative;display:flex;align-items:center;gap:8px;border:0;background:none;padding:0;cursor:pointer;color:rgba(243,224,203,.40)}
.chapter-rail button i{position:relative;z-index:2;width:11px;height:11px;border-radius:50%;border:1px solid currentColor;background:#170810;transition:.45s var(--ease)}
.chapter-rail button span{display:none;font:500 7px/1 var(--sans);letter-spacing:.18em;text-transform:uppercase}
.chapter-rail button.is-active{color:rgba(243,224,203,.90)}.chapter-rail button.is-active i{background:var(--blush);border-color:var(--blush);box-shadow:0 0 14px rgba(218,160,173,.35)}

/* -------- shared scene language -------- */
#experience{position:relative;z-index:1}
.scene{position:relative;min-height:100svh;overflow:hidden;isolation:isolate;display:grid;place-items:center;background:transparent}
.scene::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,rgba(8,2,6,.24),rgba(12,4,8,.03) 48%,rgba(6,2,5,.35));opacity:.95}
.scene::after{content:"";position:absolute;left:8vw;right:8vw;bottom:0;height:1px;background:linear-gradient(90deg,transparent,rgba(243,224,203,.10),transparent)}
.scene__frame{position:relative;z-index:5;width:min(100%,1440px);min-height:100svh;margin:auto;padding:calc(var(--safe-top) + 6vh) clamp(28px,7vw,120px) calc(var(--safe-bottom) + 7vh);display:grid;align-items:center}
.scene__frame--split{grid-template-columns:1fr;gap:4vh}.scene__frame--reverse{direction:ltr}
.chapter-kicker,.eyebrow{font:500 9px/1.2 var(--sans);letter-spacing:.30em;text-transform:uppercase;color:rgba(243,224,203,.67)}
.chapter-number{display:grid;place-items:center;width:33px;height:33px;margin-bottom:18px;border:1px solid rgba(243,224,203,.23);border-radius:50%;font:500 8px/1 var(--sans);letter-spacing:.16em;color:rgba(243,224,203,.65);background:rgba(18,6,12,.26);backdrop-filter:blur(12px)}
.scene-copy{position:relative;z-index:8;opacity:0;transform:translateY(30px);transition:1.05s .18s var(--ease)}
.scene.is-visible .scene-copy{opacity:1;transform:none}
.scene-copy h2,.notes-intro h2,.closing-intro h2{margin:12px 0 18px;font:400 clamp(35px,9.3vw,66px)/.99 var(--serif);letter-spacing:-.035em;color:#f3e2cf;text-shadow:0 12px 28px rgba(0,0,0,.38)}
.scene-copy h2 em,.notes-intro h2 em,.closing-intro h2 em{font-weight:400;color:#dea5b2}
.scene-copy>p:last-child{max-width:35em;margin:0;font:400 14px/1.7 var(--serif);color:rgba(243,224,203,.70)}
.petal-field{position:absolute;inset:0;z-index:30;overflow:hidden;pointer-events:none}.petal{position:absolute;top:-12vh;width:24px;height:31px;background:url('../assets/petal.png') center/contain no-repeat;opacity:0;filter:drop-shadow(0 5px 5px rgba(0,0,0,.25));animation:petalFall var(--dur,10s) linear var(--delay,0s) infinite;transform:scale(var(--scale,.6))}
@keyframes petalFall{0%{opacity:0;transform:translate3d(0,-12vh,0) rotate(0) scale(var(--scale,.6))}12%{opacity:var(--alpha,.55)}82%{opacity:var(--alpha,.55)}100%{opacity:0;transform:translate3d(var(--drift,60px),118vh,0) rotate(var(--turn,520deg)) scale(var(--scale,.6))}}

/* -------- arrival -------- */
.scene--arrival::before{background:radial-gradient(circle at 50% 54%,rgba(189,90,116,.10),transparent 32%),linear-gradient(180deg,rgba(5,1,4,.30),rgba(15,4,10,.02) 54%,rgba(5,1,4,.62))}
.scene__frame--arrival{grid-template-rows:auto 1fr auto;text-align:center}
.arrival-copy{align-self:start;margin-top:3vh;opacity:0;transform:translateY(18px);animation:arrivalIn 1.4s .5s var(--ease) forwards}
@keyframes arrivalIn{to{opacity:1;transform:none}}
.arrival-copy .chapter-kicker{display:block;margin-bottom:28px;color:rgba(243,224,203,.50)}
.arrival-copy .eyebrow{margin:0 0 10px}
.arrival-copy h1{margin:0;font:400 clamp(62px,16vw,104px)/.88 var(--serif);letter-spacing:.015em;color:#f5e2cd;text-shadow:0 16px 36px rgba(0,0,0,.48)}
.arrival-copy__line{margin:17px 0 0;font:italic 400 clamp(14px,3.7vw,18px)/1.5 var(--serif);color:rgba(243,224,203,.76)}
.arrival-object{position:relative;align-self:center;min-height:42vh;display:grid;place-items:center}
.gift{position:relative;z-index:8;width:min(66vw,310px);aspect-ratio:1.02;border:0;background:none;padding:0;cursor:pointer;perspective:1000px;filter:drop-shadow(0 38px 32px rgba(0,0,0,.60));transition:transform .8s var(--ease),filter .8s}
.gift:active{transform:scale(.975)}
.gift__shadow{position:absolute;left:11%;right:11%;bottom:-5%;height:20%;border-radius:50%;background:rgba(0,0,0,.75);filter:blur(20px);transform:scaleX(1.18)}
.gift__photo{position:absolute;inset:-24% -10% -26%;z-index:3;display:block;background:url('../assets/gift_real.png') center/contain no-repeat;transition:transform 1.45s var(--ease),opacity 1s var(--ease),filter 1.2s var(--ease);transform-origin:50% 50%}
.gift__photo--base{clip-path:polygon(0 39%,100% 39%,100% 100%,0 100%)}.gift__photo--lid{clip-path:polygon(0 0,100% 0,100% 54%,0 54%);transform-origin:50% 51%}
.gift__glow{position:absolute;inset:17% 8% 0;border-radius:50%;background:radial-gradient(circle,#f5c0c4 0,rgba(208,108,128,.22) 36%,transparent 68%);filter:blur(24px);opacity:.20;transition:opacity 1s,transform 1.5s}
.gift.is-open .gift__photo--lid{transform:translateY(-24%) rotateX(60deg) rotate(-4deg);opacity:.66;filter:drop-shadow(0 35px 28px rgba(0,0,0,.34))}.gift.is-open .gift__photo--base{transform:translateY(4%) scale(1.03)}.gift.is-open .gift__glow{opacity:1;transform:scale(1.7)}.gift.is-open{filter:drop-shadow(0 44px 42px rgba(0,0,0,.42));transform:scale(1.04)}
.whisper-button{position:absolute;left:50%;bottom:-1.5vh;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:10px;border:0;background:none;padding:8px 20px;cursor:pointer}.whisper-button span{font:500 8px/1 var(--sans);letter-spacing:.28em;text-transform:uppercase;color:rgba(243,224,203,.68)}.whisper-button i{width:1px;height:34px;background:linear-gradient(var(--blush),transparent);animation:scrollPulse 2s ease-in-out infinite}
@keyframes scrollPulse{0%,100%{transform:scaleY(.45);opacity:.25}50%{transform:scaleY(1);opacity:1}}
body.has-opened .arrival-copy{opacity:0;transform:translateY(-24px);transition:.7s ease}.gift.is-open~.whisper-button{opacity:0;transition:.4s}
.arrival-signature{align-self:end;margin:0;font:500 8px/1 var(--sans);letter-spacing:.24em;text-transform:uppercase;color:rgba(243,224,203,.42)}

/* -------- opening -------- */
.scene--opening::before{background:radial-gradient(circle at 62% 52%,rgba(236,184,173,.16),transparent 34%),linear-gradient(180deg,rgba(6,2,5,.22),rgba(18,6,11,.02) 57%,rgba(5,1,4,.44))}
.opening-stage{position:relative;z-index:8;min-height:54vh;display:grid;place-items:center;opacity:0;transform:translateY(35px);transition:1.2s .25s var(--ease)}.scene--opening.is-visible .opening-stage{opacity:1;transform:none}
.opening-stage__ribbon{position:absolute;width:min(86vw,530px);height:20%;left:50%;top:14%;transform:translateX(-50%) rotate(-8deg);background:url('../assets/satin_texture.jpg') center/cover;border-radius:50%;filter:blur(10px);opacity:.10}
.envelope{position:relative;z-index:8;width:min(86vw,420px);aspect-ratio:1.28;border:0;background:none;padding:0;perspective:1100px;transform:translateY(2vh) rotate(-2deg);cursor:pointer;filter:drop-shadow(0 31px 28px rgba(0,0,0,.58));transition:transform .8s var(--ease)}
.envelope:active{transform:translateY(2vh) rotate(-2deg) scale(.985)}
.envelope__back,.envelope__front,.envelope__flap{position:absolute;inset:0;display:block;background-image:url('../assets/paper_fiber_rc3.jpg');background-size:cover}
.envelope__back{border-radius:6px;background-position:25% 40%;box-shadow:inset 0 0 0 1px rgba(91,50,49,.18),inset 0 -30px 35px rgba(90,53,43,.08)}
.envelope__front{clip-path:polygon(0 30%,50% 74%,100% 30%,100% 100%,0 100%);background:linear-gradient(155deg,rgba(238,218,199,.92),rgba(206,174,153,.97)),url('../assets/paper_fiber_rc3.jpg');background-blend-mode:multiply;z-index:5}
.envelope__flap{clip-path:polygon(0 0,100% 0,50% 72%);transform-origin:50% 0;z-index:6;background-position:80% 20%;transition:transform 1.25s var(--ease),z-index 0s .48s;backface-visibility:hidden}
.envelope__letter{position:absolute;z-index:3;left:7%;right:7%;bottom:5%;height:84%;display:block;background:url('../assets/note_small.png') center/100% 100% no-repeat;transform:translateY(10%) scale(.92);transition:transform 1.35s .35s var(--ease);filter:drop-shadow(0 18px 14px rgba(0,0,0,.28))}
.envelope__letter::before{content:"";position:absolute;inset:8%;border:1px solid rgba(104,63,62,.13)}
.letter-copy{position:absolute;inset:18% 13% 13%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--ink)}
.letter-copy small{font:italic 400 clamp(17px,4.5vw,23px)/1.2 var(--serif)}.letter-copy strong{margin:13px 0;font:500 clamp(24px,6.2vw,33px)/1.1 var(--serif)}.letter-copy em{max-width:28em;font:italic 400 clamp(10px,2.7vw,13px)/1.55 var(--serif);color:#78515a}
.envelope__seal{position:absolute;z-index:8;width:25%;left:37.5%;top:36%;transition:transform .8s var(--ease),opacity .5s;filter:drop-shadow(0 7px 8px rgba(0,0,0,.34))}
.envelope.is-open .envelope__flap{transform:rotateX(178deg);z-index:1}.envelope.is-open .envelope__seal{transform:translateY(40px) scale(.65) rotate(18deg);opacity:0}.envelope.is-open .envelope__letter{z-index:9;transform:translateY(-72%) scale(1.08)}.envelope.is-open .envelope__front{z-index:4}.envelope.is-open{transform:translateY(10vh) rotate(1deg)}
.interaction-hint{position:absolute;z-index:12;bottom:2.5vh;left:50%;transform:translateX(-50%);margin:0;white-space:nowrap;font:500 8px/1 var(--sans);letter-spacing:.23em;text-transform:uppercase;color:rgba(243,224,203,.64);transition:.4s}
.envelope.is-open~.interaction-hint{opacity:0}.continue-cue{position:absolute;z-index:10;right:3%;bottom:3vh;display:flex;align-items:center;gap:9px;opacity:0;transform:translateY(10px);transition:.8s .8s var(--ease)}.continue-cue span{font:500 7px/1 var(--sans);letter-spacing:.22em;text-transform:uppercase;color:rgba(243,224,203,.58)}.continue-cue i{width:34px;height:1px;background:linear-gradient(90deg,var(--blush),transparent)}.envelope.is-open~.continue-cue{opacity:.75;transform:none}

/* -------- bloom -------- */
.scene--bloom::before{background:radial-gradient(circle at 38% 47%,rgba(236,174,175,.18),transparent 36%),linear-gradient(180deg,rgba(5,1,4,.26),rgba(17,5,10,.02) 58%,rgba(5,1,4,.42))}
.bloom-tableau{position:relative;min-height:55vh;opacity:0;transform:scale(.90) translateY(35px);transition:1.5s .16s var(--ease)}.scene--bloom.is-visible .bloom-tableau{opacity:1;transform:scale(1) translateY(0)}
.bloom-tableau__halo{position:absolute;left:8%;right:8%;top:16%;bottom:14%;border-radius:50%;background:radial-gradient(circle,rgba(244,205,194,.20),rgba(170,74,101,.08) 44%,transparent 70%);filter:blur(25px)}
.bloom-flower{position:absolute;filter:drop-shadow(0 31px 34px rgba(0,0,0,.52));transition:1.8s var(--ease)}.bloom-flower--a{width:min(70vw,390px);left:-3%;bottom:2%;transform:rotate(-16deg)}.bloom-flower--b{width:min(86vw,520px);right:-13%;top:0;transform:rotate(11deg)}.bloom-flower--c{width:min(49vw,280px);right:4%;bottom:0;transform:rotate(-18deg)}
.bloom-tableau__paper{position:absolute;z-index:-1;width:45%;height:33%;right:7%;bottom:11%;background:url('../assets/paper_fiber_rc3.jpg') center/cover;clip-path:polygon(2% 5%,98% 1%,96% 96%,4% 100%);transform:rotate(8deg);filter:drop-shadow(0 25px 25px rgba(0,0,0,.45));opacity:.42}

/* -------- physical notes -------- */
.scene--notes{min-height:110svh}.scene--notes::before{background:radial-gradient(circle at 50% 48%,rgba(218,143,156,.13),transparent 43%),linear-gradient(180deg,rgba(5,1,4,.24),rgba(16,4,9,.01) 58%,rgba(4,1,3,.50))}
.scene__frame--notes{grid-template-rows:auto 1fr auto;gap:3vh;min-height:110svh}
.notes-intro{align-self:start;opacity:0;transform:translateY(28px);transition:1s .12s var(--ease)}.scene--notes.is-visible .notes-intro{opacity:1;transform:none}.notes-intro h2{font-size:clamp(40px,10.5vw,70px);margin-bottom:0}
.notes-desk{position:relative;align-self:center;width:min(100%,900px);height:62vh;min-height:530px;margin:auto;isolation:isolate}
.desk-shadow{position:absolute;inset:12% 3% 10%;z-index:-1;border-radius:45%;background:rgba(0,0,0,.28);filter:blur(38px)}
.physical-note{position:absolute;z-index:6;display:grid;place-items:center;background-position:center;background-size:100% 100%;background-repeat:no-repeat;color:var(--ink);text-align:center;filter:drop-shadow(0 29px 26px rgba(0,0,0,.56));opacity:0;transform:translateY(50px) rotate(var(--rot));transition:1.05s var(--ease)}
.scene--notes.is-visible .physical-note{opacity:1;transform:translateY(0) rotate(var(--rot))}
.physical-note p{position:relative;z-index:3;margin:0;padding:18% 14%;font:400 clamp(18px,5vw,27px)/1.28 var(--serif);transform:rotate(calc(var(--rot)*-1));text-shadow:0 1px rgba(255,255,255,.32)}.physical-note strong{font-weight:500;color:#69273f}.physical-note em{font:400 1.15em/1.2 var(--hand);color:#762c45}
.physical-note--one{width:min(72vw,345px);height:min(50vw,240px);left:0;top:3%;--rot:-5deg;background-image:url('../assets/note_deckled_rc2.png');transition-delay:.12s}
.physical-note--two{width:min(75vw,360px);height:min(52vw,250px);right:-1%;top:34%;--rot:4deg;background-image:url('../assets/note_blush_rc2.png');transition-delay:.30s}
.physical-note--three{width:min(68vw,326px);height:min(47vw,225px);left:7%;bottom:0;--rot:-2deg;background-image:url('../assets/note_tag_rc2.png');transition-delay:.48s}.physical-note--three>img{position:absolute;z-index:4;width:32%;right:-11%;bottom:-20%;transform:rotate(-17deg);filter:drop-shadow(0 18px 18px rgba(0,0,0,.35))}
.paper-tape{position:absolute;z-index:4;width:37%;height:22%;background:url('../assets/tape_rc3.png') center/100% 100% no-repeat;opacity:.86;filter:drop-shadow(0 5px 5px rgba(0,0,0,.10))}.paper-tape--one{top:-4%;left:31%;transform:rotate(3deg)}.paper-tape--two{top:-7%;left:8%;transform:rotate(-9deg)}
.notes-desk__flower{position:absolute;z-index:2;filter:drop-shadow(0 28px 32px rgba(0,0,0,.56));opacity:0;transition:1.4s .25s var(--ease)}.scene--notes.is-visible .notes-desk__flower{opacity:.68}.notes-desk__flower--back{width:min(91vw,530px);right:-22%;bottom:-10%;transform:rotate(-10deg)}.notes-desk__flower--front{z-index:8;width:min(37vw,210px);left:-13%;top:37%;transform:rotate(13deg);filter:blur(.2px) drop-shadow(0 30px 32px rgba(0,0,0,.60))}
.notes-desk__twine{position:absolute;z-index:7;width:62%;height:2px;left:18%;top:53%;background:linear-gradient(90deg,transparent,#9d775e 10%,#c7a886 50%,#8e664f 90%,transparent);transform:rotate(-9deg);box-shadow:0 2px 4px rgba(0,0,0,.3);opacity:.46}
.notes-footnote{align-self:end;max-width:30em;margin:0 auto;text-align:center;font:italic 400 12px/1.55 var(--serif);color:rgba(243,224,203,.54)}

/* -------- prayer -------- */
.scene--prayer{min-height:110svh}.scene--prayer::before{background:radial-gradient(circle at 50% 46%,rgba(250,211,194,.20),transparent 38%),linear-gradient(180deg,rgba(4,1,3,.34),rgba(17,5,10,.01) 52%,rgba(4,1,3,.54))}
.scene__frame--prayer{place-items:center;min-height:110svh}
.prayer-light{position:absolute;width:min(90vw,760px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(249,215,200,.26),rgba(181,91,113,.10) 40%,transparent 70%);filter:blur(30px);animation:prayerBreath 5.5s ease-in-out infinite alternate}@keyframes prayerBreath{to{transform:scale(1.10);opacity:.68}}
.prayer-note{position:relative;z-index:8;width:min(79vw,420px);height:min(106vw,560px);display:grid;place-items:center;filter:drop-shadow(0 34px 30px rgba(0,0,0,.58));opacity:0;transform:translateY(34px) rotate(-2deg) scale(.96);transition:1.5s .28s var(--ease)}.scene--prayer.is-visible .prayer-note{opacity:1;transform:translateY(0) rotate(-1deg) scale(1)}.prayer-note>img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill}.prayer-note p{position:relative;z-index:2;margin:0;padding:15% 11% 18%;font:400 clamp(24px,6.5vw,38px)/1.34 var(--serif);text-align:center;color:#4d2830;letter-spacing:-.02em}.prayer-note>span{position:absolute;z-index:3;bottom:14%;font:400 24px/1 var(--serif);color:#9a5364}
.prayer-caption{position:absolute;z-index:9;left:10vw;right:10vw;bottom:calc(var(--safe-bottom) + 4vh);margin:0;text-align:center;font:italic 400 12px/1.6 var(--serif);color:rgba(243,224,203,.62);opacity:0;transition:1.2s 1s}.scene--prayer.is-visible .prayer-caption{opacity:1}

/* -------- intimate -------- */
.scene--intimate::before{background:radial-gradient(circle at 65% 48%,rgba(236,168,177,.14),transparent 38%),linear-gradient(180deg,rgba(5,1,4,.28),rgba(16,4,9,.01) 56%,rgba(4,1,3,.52))}
.intimate-stage{position:relative;min-height:62vh;display:grid;place-items:center;opacity:0;transform:translateY(35px);transition:1.2s .24s var(--ease)}.scene--intimate.is-visible .intimate-stage{opacity:1;transform:none}
.folded-note{position:relative;z-index:8;width:min(82vw,410px);height:min(98vw,500px);border:0;background:none;padding:0;cursor:pointer;perspective:1200px;transform:translateY(1vh)}
.folded-note__closed,.folded-note__open{position:absolute;inset:0;display:block;transform-style:preserve-3d;transition:1.25s var(--ease);filter:drop-shadow(0 31px 27px rgba(0,0,0,.56));backface-visibility:hidden}.folded-note__closed{display:grid;place-items:center;transform:rotateY(0) rotate(-3deg)}.folded-note__closed img{width:100%;height:76%;object-fit:fill}.folded-note__closed b{position:absolute;font:400 34px/1 var(--hand);color:#693045;transform:rotate(-4deg)}.folded-note__closed i{position:absolute;width:20%;height:22%;right:4%;bottom:5%;background:url('../assets/flower_orchid.png') center/contain no-repeat;transform:rotate(-18deg);filter:drop-shadow(0 12px 10px rgba(0,0,0,.2))}
.folded-note__open{transform:rotateY(-180deg) rotate(2deg);opacity:0;display:grid;place-items:center}.folded-note__open>img:first-child{position:absolute;inset:0;width:100%;height:100%;object-fit:fill}.folded-note__open>.intimate-copy{position:absolute;z-index:3;inset:13% 11% 12%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;color:#4d2830}.intimate-copy__main{font:400 clamp(21px,5.4vw,31px)/1.24 var(--serif);letter-spacing:-.02em}.intimate-copy__main strong{font-weight:500;color:#6f2440}.intimate-copy__rule{display:block;width:54px;height:1px;margin:19px 0;background:linear-gradient(90deg,transparent,#9a5664,transparent)}.folded-note__open .intimate-copy small{display:block;max-width:26em;font:italic 400 clamp(11px,2.7vw,13px)/1.45 var(--serif);color:#76515a}.intimate-copy__flower{position:absolute!important;z-index:4!important;width:28%!important;height:auto!important;right:-2%!important;bottom:-2%!important;inset:auto!important;transform:rotate(-18deg);opacity:.76;filter:drop-shadow(0 14px 14px rgba(0,0,0,.22))}
.folded-note.is-open .folded-note__closed{transform:rotateY(180deg) rotate(3deg);opacity:0}.folded-note.is-open .folded-note__open{transform:rotateY(0) rotate(-1deg);opacity:1}.interaction-hint--light{bottom:2.5vh}.folded-note.is-open~.interaction-hint{opacity:0;visibility:hidden;transition:opacity .3s,visibility 0s .3s}

/* -------- closing -------- */
.scene--closing{min-height:128svh}.scene--closing::before{background:radial-gradient(circle at 58% 34%,rgba(240,185,181,.14),transparent 38%),linear-gradient(180deg,rgba(5,1,4,.38),rgba(18,5,10,.02) 52%,rgba(3,1,3,.70))}
.scene__frame--closing{min-height:128svh;grid-template-rows:auto 1fr auto auto;gap:2vh;padding-top:calc(var(--safe-top) + 7vh);padding-bottom:calc(var(--safe-bottom) + 8vh)}
.closing-intro{align-self:start;opacity:0;transform:translateY(25px);transition:1s .12s var(--ease)}.scene--closing.is-visible .closing-intro{opacity:1;transform:none}.closing-intro h2{font-size:clamp(38px,9vw,64px)}
.closing-note{position:relative;z-index:8;align-self:center;width:min(84vw,430px);height:min(122vw,650px);margin:auto;filter:drop-shadow(0 34px 30px rgba(0,0,0,.58));opacity:0;transform:translateY(36px) rotate(1deg);transition:1.4s .25s var(--ease)}.scene--closing.is-visible .closing-note{opacity:1;transform:translateY(0) rotate(-1deg)}.closing-note>img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill}.closing-note__copy{position:absolute;z-index:2;inset:12% 11% 10%;display:flex;flex-direction:column;justify-content:center;color:#4b2830;text-align:center}.closing-note__copy p{margin:0 0 18px;font:400 clamp(15px,4vw,20px)/1.52 var(--serif)}.closing-note__copy p:first-child{font-size:clamp(20px,5.2vw,28px);line-height:1.35;color:#65283b}.closing-note__copy span{margin-top:3px;font:400 23px/1 var(--hand);color:#6d2a40}
.closing-whisper{text-align:center}.closing-whisper p{margin:0 0 5px;font:400 19px/1.2 var(--serif);font-style:italic;color:rgba(243,224,203,.77)}.closing-whisper span{font:500 8px/1.4 var(--sans);letter-spacing:.17em;text-transform:uppercase;color:rgba(243,224,203,.43)}
.close-gift{justify-self:center;display:flex;align-items:center;gap:11px;margin-top:2vh;border:1px solid rgba(243,224,203,.17);border-radius:999px;padding:10px 15px;background:rgba(14,5,10,.32);backdrop-filter:blur(14px);cursor:pointer}.close-gift>span:last-child{font:500 8px/1 var(--sans);letter-spacing:.21em;text-transform:uppercase;color:rgba(243,224,203,.66)}.close-gift__box{position:relative;width:16px;height:12px;border:1px solid rgba(218,160,173,.70)}.close-gift__box::after{content:"";position:absolute;left:-2px;right:-2px;top:-4px;height:3px;border:1px solid rgba(218,160,173,.70)}

/* -------- ending -------- */
.ending{position:fixed;inset:0;z-index:500;display:flex;flex-direction:column;align-items:center;justify-content:center;background:rgba(7,2,5,.96);opacity:0;visibility:hidden;transition:.9s var(--ease);cursor:pointer}.ending.is-visible{opacity:1;visibility:visible}.ending__glow{position:absolute;width:min(78vw,560px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(200,101,125,.16),transparent 70%);filter:blur(34px)}.ending__box{position:relative;width:120px;height:86px;margin-bottom:27px;background:linear-gradient(145deg,#401323,#210a14);box-shadow:0 28px 32px rgba(0,0,0,.55);transform:scale(.8);transition:1.1s .15s var(--ease)}.ending.is-visible .ending__box{transform:scale(1)}.ending__box i,.ending__box b{position:absolute;background:linear-gradient(90deg,#783047,#bd7788,#713048)}.ending__box i{left:46%;top:0;bottom:0;width:10%}.ending__box b{left:0;right:0;top:44%;height:12%}.ending p{position:relative;margin:0 0 8px;font:400 37px/1 var(--serif);color:#f2dfcb}.ending>span{position:relative;font:italic 400 14px/1 var(--serif);color:rgba(243,224,203,.56)}

/* -------- desktop: immersive, not a blown-up phone -------- */
@media (min-width:1024px){
  .world__background{background-image:url('../assets/world_desktop.jpg')}
  .chapter-rail{left:24px}.chapter-rail button span{display:block;opacity:0;transform:translateX(-5px);transition:.35s var(--ease)}.chapter-rail button:hover span,.chapter-rail button.is-active span{opacity:1;transform:none}
  .scene__frame{padding-left:clamp(80px,9vw,150px);padding-right:clamp(80px,9vw,150px)}
  .scene__frame--split{grid-template-columns:minmax(320px,.78fr) minmax(420px,1.22fr);gap:clamp(40px,7vw,120px)}
  .scene__frame--reverse{grid-template-columns:minmax(460px,1.15fr) minmax(330px,.85fr)}
  .scene__frame--reverse .bloom-tableau{grid-column:1}.scene__frame--reverse .scene-copy{grid-column:2;grid-row:1}
  .scene-copy h2,.notes-intro h2,.closing-intro h2{font-size:clamp(54px,5.5vw,84px)}
  .scene-copy>p:last-child{font-size:16px}.chapter-kicker,.eyebrow{font-size:10px}
  .scene__frame--arrival{grid-template-columns:.9fr 1.1fr;grid-template-rows:1fr auto;text-align:left}.arrival-copy{align-self:center;grid-column:1;margin:0}.arrival-copy .chapter-kicker{margin-bottom:44px}.arrival-copy h1{font-size:clamp(88px,9vw,142px)}.arrival-copy__line{font-size:19px}.arrival-object{grid-column:2;grid-row:1;min-height:74vh}.gift{width:min(35vw,480px)}.arrival-signature{grid-column:1/3;text-align:center}
  .opening-stage{min-height:75vh}.envelope{width:min(48vw,560px)}.interaction-hint{bottom:4vh}
  .bloom-tableau{min-height:75vh}.bloom-flower--a{width:min(34vw,480px);left:1%}.bloom-flower--b{width:min(42vw,620px);right:-2%}.bloom-flower--c{width:min(23vw,330px);right:8%}
  .scene--notes,.scene__frame--notes{min-height:116svh}.scene__frame--notes{grid-template-columns:.7fr 1.3fr;grid-template-rows:1fr auto;gap:4vw}.notes-intro{align-self:center;grid-column:1}.notes-desk{grid-column:2;grid-row:1;height:78vh;width:min(100%,820px)}.notes-footnote{grid-column:1/3;grid-row:2}.physical-note--one{width:min(28vw,380px);height:min(19vw,260px);left:2%;top:5%}.physical-note--two{width:min(29vw,390px);height:min(20vw,270px);right:2%;top:34%}.physical-note--three{width:min(27vw,360px);height:min(18vw,245px);left:10%;bottom:2%}.physical-note p{font-size:clamp(20px,2.1vw,29px)}
  .prayer-note{width:min(36vw,470px);height:min(48vw,620px)}.prayer-note p{font-size:clamp(28px,2.7vw,40px)}
  .folded-note{width:min(40vw,500px);height:min(48vw,600px)}.intimate-copy__main{font-size:clamp(25px,2.2vw,34px)}
  .scene--closing,.scene__frame--closing{min-height:120svh}.scene__frame--closing{grid-template-columns:.76fr 1.24fr;grid-template-rows:1fr auto;gap:3vw}.closing-intro{grid-column:1;grid-row:1;align-self:center}.closing-note{grid-column:2;grid-row:1;width:min(39vw,500px);height:min(57vw,750px)}.closing-whisper{grid-column:1;grid-row:2;align-self:end}.close-gift{grid-column:2;grid-row:2}
  .world__flower--left{left:-20vw;width:min(49vw,720px)}.world__flower--right{right:-19vw;width:min(48vw,710px)}.world__flower--front{right:-16vw;width:min(42vw,620px)}
}

@media (min-width:1180px){
  .sound-toggle{right:28px}.chapter-rail{left:30px}.scene::after{left:12vw;right:12vw}
  .notes-desk{height:80vh}.prayer-caption{font-size:14px}.arrival-copy .chapter-kicker{letter-spacing:.34em}
}

@media (max-height:700px) and (max-width:1023px){
  .scene__frame{padding-top:calc(var(--safe-top) + 3vh);padding-bottom:calc(var(--safe-bottom) + 4vh)}
  .arrival-copy{margin-top:1vh}.arrival-copy .chapter-kicker{margin-bottom:16px}.arrival-copy h1{font-size:54px}.arrival-object{min-height:43vh}.gift{width:min(55vw,250px)}
  .scene-copy h2,.notes-intro h2,.closing-intro h2{font-size:34px}.opening-stage{min-height:53vh}.envelope{width:min(72vw,340px)}
  .notes-desk{height:66vh;min-height:465px}.physical-note p{font-size:17px}.prayer-note{width:min(68vw,350px);height:min(90vw,460px)}.prayer-note p{font-size:22px}
  .folded-note{width:min(68vw,340px);height:min(82vw,410px)}.intimate-copy__main{font-size:19px}.scene--closing,.scene__frame--closing{min-height:145svh}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.petal-field{display:none}.world__background,.world__flower{transform:none!important}
}

/* RC3 QA pass: keep the intimate note dense and readable, with no text collision. */
.folded-note__open>.intimate-copy{
  inset:15% 10% 13%;
  justify-content:flex-start;
  padding-top:3%;
}
.intimate-copy__main{max-width:94%}
.intimate-copy__rule{margin:17px 0 14px}
.folded-note__open .intimate-copy small{max-width:88%}
.intimate-copy__flower{
  z-index:2!important;
  width:18%!important;
  right:6%!important;
  bottom:2%!important;
  opacity:.38;
}

@media (max-width:1023px){
  .scene--notes,.scene__frame--notes{min-height:100svh}
  .scene__frame--notes{gap:1.5vh;padding-bottom:calc(var(--safe-bottom) + 3vh)}
  .notes-desk{height:57vh;min-height:480px}
  .physical-note--three{z-index:11}
  .notes-footnote{font-size:10px;line-height:1.45;margin-bottom:1vh}
}

/* Final intimate composition: centered message with a pressed botanical filling the lower paper. */
.folded-note__open>.intimate-copy{
  justify-content:center;
  padding:0 0 12%;
}
.intimate-copy__flower{
  width:34%!important;
  right:2%!important;
  bottom:-2%!important;
  opacity:.28;
  filter:sepia(.22) saturate(.55) drop-shadow(0 14px 14px rgba(0,0,0,.18));
}

/* Desktop RC3 art-direction pass: fill the canvas like a designed scene, not an enlarged phone. */
@media (min-width:1024px){
  .world::before{
    background:linear-gradient(180deg,rgba(5,1,4,.08),rgba(12,3,8,0) 44%,rgba(5,1,4,.28));
    box-shadow:inset 0 0 10vw rgba(0,0,0,.34);
  }
  .world::after{
    content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
    background:
      radial-gradient(circle at 16% 22%,rgba(245,197,169,.20) 0 2px,transparent 4px),
      radial-gradient(circle at 82% 15%,rgba(245,197,169,.16) 0 3px,transparent 6px),
      radial-gradient(circle at 88% 64%,rgba(218,126,149,.14) 0 2px,transparent 5px),
      radial-gradient(circle at 32% 79%,rgba(245,197,169,.12) 0 2px,transparent 5px);
    filter:blur(.2px);
  }
  .world__background{filter:saturate(1.14) contrast(1.02) brightness(1.18)}
  .world__flower--left{left:-10vw;bottom:-21vh;width:min(54vw,790px);opacity:.56}
  .world__flower--right{right:-9vw;top:-16vh;width:min(52vw,760px);opacity:.50}
  .world__flower--front{right:-8vw;bottom:-24vh;width:min(44vw,650px);opacity:.31}
  body[data-scene="opening"] .world__flower--left{transform:rotate(5deg) scale(1.04) translate(2vw,-2vh);opacity:.48}
  body[data-scene="opening"] .world__flower--right{transform:rotate(-4deg) scale(1.06) translate(-2vw,4vh);opacity:.58}
  body[data-scene="notes"] .world__flower--left{opacity:.44;transform:rotate(12deg) scale(.98) translate(2vw,4vh)}
  body[data-scene="notes"] .world__flower--right{opacity:.44;transform:rotate(-10deg) scale(.98) translate(-1vw,2vh)}
  body[data-scene="intimate"] .world__flower--right{opacity:.56;transform:rotate(-6deg) scale(1.03) translate(-2vw,5vh)}
  body[data-scene="closing"] .world__flower--left{opacity:.50;transform:rotate(9deg) scale(1.05) translate(4vw,-2vh)}
  body[data-scene="closing"] .world__flower--right{opacity:.50;transform:rotate(-8deg) scale(1.05) translate(-4vw,5vh)}

  .scene__frame{width:min(100%,1560px);padding-left:clamp(92px,8vw,150px);padding-right:clamp(92px,8vw,150px)}
  .scene__frame--split{grid-template-columns:minmax(360px,.82fr) minmax(520px,1.18fr);gap:clamp(36px,5vw,90px)}
  .scene-copy h2,.notes-intro h2,.closing-intro h2{font-size:clamp(68px,6.3vw,98px)}
  .scene-copy>p:last-child{font-size:17px}
  .arrival-copy h1{font-size:clamp(118px,10vw,164px)}
  .arrival-copy__line{font-size:21px}
  .gift{width:min(41vw,570px)}
  .envelope{width:min(52vw,650px)}
  .opening-stage{min-height:79vh}
  .bloom-tableau{min-height:80vh}
  .bloom-flower--a{width:min(37vw,530px)}
  .bloom-flower--b{width:min(46vw,690px)}
  .bloom-flower--c{width:min(25vw,370px)}
  .notes-desk{width:min(100%,940px);height:82vh}
  .physical-note--one{width:min(31vw,430px);height:min(21vw,292px)}
  .physical-note--two{width:min(32vw,445px);height:min(22vw,305px)}
  .physical-note--three{width:min(29vw,405px);height:min(20vw,278px)}
  .physical-note p{font-size:clamp(23px,2.25vw,32px)}
  .prayer-note{width:min(39vw,520px);height:min(51vw,680px)}
  .folded-note{width:min(44vw,570px);height:min(52vw,660px)}
  .intimate-copy__main{font-size:clamp(29px,2.45vw,38px)}
  .closing-note{width:min(42vw,560px);height:min(61vw,760px)}
  .closing-note__copy p{font-size:clamp(18px,1.55vw,22px)}
  .closing-note__copy p:first-child{font-size:clamp(26px,2.25vw,34px)}
}

@media (max-width:1023px){
  .scene__frame--intimate{grid-template-rows:auto 1fr;gap:0}
  .intimate-stage{min-height:50vh;align-self:end}
  .folded-note{width:min(76vw,360px);height:min(88vw,430px)}
}


/* RC3 editorial refinement: desktop note legibility only. */
.physical-note--two{z-index:10}
.physical-note--two p{width:100%;max-width:100%;overflow:visible}
.physical-note--two p>span,.physical-note--two p>strong{display:block}

@media (min-width:1024px){
  .physical-note--two{right:0;top:31%;width:min(28vw,390px);height:min(19.5vw,270px)}
  .physical-note--two p{padding:18% 13%;font-size:clamp(20px,1.9vw,28px);line-height:1.24}
}

@media (min-width:1024px) and (max-width:1179px){
  .scene__frame--notes{grid-template-columns:minmax(250px,.68fr) minmax(470px,1.32fr);gap:2.5vw}
  .notes-desk{width:100%;height:72vh;min-height:500px}
  .physical-note--two{right:1%;top:33%;width:min(31vw,330px);height:min(21.5vw,230px)}
  .physical-note--two p{padding:17% 10%;font-size:clamp(18px,2.15vw,24px)}
}
