:root{--ink:rgb(81,59,36);--sky:rgb(245,239,229);--floor:rgb(222,208,184);--glow:rgb(255,245,214);--accent:rgb(174,133,63);--serif:'Cormorant Garamond',Georgia,serif;--sans:Manrope,Arial,sans-serif;--ui-alpha:0;--night:0}*{box-sizing:border-box}html{scroll-behavior:auto}body{margin:0;background:var(--sky);color:var(--ink);font-family:var(--sans);overflow-x:hidden;-webkit-font-smoothing:antialiased}button,a,input{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button{font:inherit;color:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:6px}::selection{background:#b78a5580}.skip-link{position:fixed;left:15px;top:-90px;z-index:100;background:#f4eee3;padding:15px}.skip-link:focus{top:15px}.world{position:fixed;inset:0;z-index:-2;overflow:hidden;background:linear-gradient(157deg,var(--sky) 3%,var(--sky) 39%,var(--floor) 100%)}.light{position:absolute;pointer-events:none;mix-blend-mode:screen}.light-one{width:160%;height:100%;top:-38%;left:-60%;background:radial-gradient(ellipse,var(--glow),transparent 65%);opacity:.65;transform:rotate(-25deg)}.light-two{width:160%;height:120%;bottom:-65%;right:-60%;background:radial-gradient(ellipse,var(--glow),transparent 64%);opacity:.36}.silk{position:absolute;width:140%;height:70%;border-radius:50%;filter:blur(30px);transform:rotate(-36deg);background:linear-gradient(170deg,transparent 32%,var(--glow) 48%,transparent 53%);opacity:.35;pointer-events:none}.silk-one{top:8%;left:-70%}.silk-two{bottom:-26%;right:-60%;transform:rotate(-45deg);opacity:.22}.halo{position:absolute;top:0;left:-10%;width:120%;height:55%;background:radial-gradient(ellipse at 50% 40%,var(--glow),transparent 64%);opacity:calc(.16 + var(--night)*.1)}.grain{position:absolute;inset:0;opacity:.1;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23705030' filter='url(%23n)' opacity='.5' d='M0 0h180v180H0z'/%3E%3C/svg%3E");mix-blend-mode:multiply}#atmosphere{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.monogram{position:fixed;z-index:2;left:50%;top:0;width:min(86vw,640px);pointer-events:none;will-change:transform}.metal{position:relative;will-change:filter}.metal img{display:block;width:100%;height:auto;filter:drop-shadow(0 18px 20px #4a2c211c)}.metal-glint{position:absolute;inset:0;background:linear-gradient(110deg,transparent 35%,#fff9e7a6 47%,transparent 53%);mask:url('assets/tn.png') center/contain no-repeat;-webkit-mask:url('assets/tn.png') center/contain no-repeat;mix-blend-mode:soft-light;opacity:.4;transform:translateX(0)}.logo-aura{position:absolute;inset:20% 4%;background:radial-gradient(ellipse,var(--glow),transparent 65%);filter:blur(35px);z-index:-1;opacity:.18}.doors{position:absolute;inset:0 0 auto;height:100svh;z-index:-1;pointer-events:none;perspective:1200px}.door{position:absolute;top:0;bottom:0;width:50%;background:linear-gradient(110deg,#fff8ec15,#d5c7ac25);box-shadow:inset -1px 0 #9f88521a;transition:transform 1.7s cubic-bezier(.25,.6,.2,1),opacity 1.5s}.left-door{left:0;transform-origin:left}.right-door{right:0;transform-origin:right;background:linear-gradient(250deg,#fff8ec15,#d5c7ac25)}.is-open .left-door{transform:rotateY(-100deg);opacity:0}.is-open .right-door{transform:rotateY(100deg);opacity:0}header{position:fixed;z-index:20;top:0;left:0;right:0;padding:max(24px,env(safe-area-inset-top)) 25px 18px;display:flex;align-items:start;justify-content:space-between;pointer-events:none}.wordmark{font:11px/1.3 var(--serif);letter-spacing:2.4px;pointer-events:auto}.wordmark>span{font-style:italic;letter-spacing:1.4px}.wordmark small{display:block;font:7px var(--sans);letter-spacing:2px;margin-top:9px;opacity:.64}#motion{border:0;background:none;display:flex;gap:6px;align-items:center;font-size:8px;padding:0;pointer-events:auto;min-height:30px}.motion-icon{font-size:23px;line-height:20px}.opening{height:100svh;min-height:620px;position:relative;text-align:center}.opening-copy{position:absolute;top:61%;left:20px;right:20px;transform:translateY(-5%)}.eyebrow{font-size:8px;letter-spacing:2.6px;line-height:1.8;margin:0 0 16px;font-weight:500}h1,h2{font-family:var(--serif);font-weight:400}h1{font-size:clamp(49px,13vw,67px);line-height:.92;margin:0;letter-spacing:-2px}h1 em{font-size:.7em}h2 em{font-weight:400}.opening-line{font:italic 21px var(--serif);margin:14px 0 22px;opacity:.82}.open-button{margin:auto;border:1px solid #ac875d60;border-radius:50px;padding:8px 20px 8px 8px;background:#f8f1df52;box-shadow:0 5px 30px #94754508;display:flex;align-items:center;gap:14px;min-width:233px;text-align:left;transition:background .3s,transform .3s}.open-button:hover{background:#fffae6a0;transform:translateY(-2px)}.open-button>span:nth-child(2){font:20px var(--serif)}.open-button small{display:block;font:6px var(--sans);letter-spacing:2px;margin-top:4px;opacity:.7}.open-arrow{font-size:23px;margin-left:auto}.seal-image{display:block;width:44px;height:44px;flex-shrink:0;border-radius:50%;background:url('assets/seal.png') 50% 42%/170% auto;box-shadow:1px 3px 6px #77532d35}.opening-foot{position:absolute;bottom:28px;left:0;right:0;font-size:6px;letter-spacing:2.4px;opacity:.6}.chapter{height:115svh;min-height:700px;position:relative;text-align:center;display:flex;align-items:center;justify-content:center;padding:27vh 33px 0}.chapter-copy{width:100%;max-width:540px;will-change:opacity,transform}.chapter-ornament{display:block;font:27px var(--serif);color:var(--accent);margin:0 0 18px}h2{font-size:clamp(45px,12.2vw,65px);line-height:.99;letter-spacing:-1.9px;margin:0 0 24px}.chapter-line{font:12px/1.9 var(--sans);font-weight:400;margin:0;opacity:.82}.material-note{display:block;font-size:6px;line-height:1.7;letter-spacing:1.65px;margin-top:31px;opacity:.62}.finale h2{font-size:clamp(44px,11.7vw,62px)}.replay{margin:28px auto 0;border:0;border-bottom:1px solid currentColor;background:transparent;padding:10px 0;font:italic 18px var(--serif);display:flex;gap:25px;align-items:center}.replay>span{font:22px var(--serif)}.scene-nav{position:fixed;z-index:25;right:10px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;opacity:var(--ui-alpha);pointer-events:none}.scene-nav a{width:24px;height:28px;position:relative;display:grid;place-items:center;pointer-events:auto}.scene-nav a:after{content:'';width:3px;height:3px;background:var(--ink);border-radius:50%;opacity:.3;transition:transform .3s,opacity .3s}.scene-nav a[aria-current=true]:after{transform:scale(1.6);opacity:.9}.scene-nav a[aria-current=true]:before{content:'';position:absolute;inset:6px 4px;border:1px solid currentColor;border-radius:50%;opacity:.35}.scene-caption{position:fixed;z-index:4;left:25px;bottom:max(28px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:7px;opacity:var(--ui-alpha);pointer-events:none}.scene-caption>span:first-child{font:16px var(--serif);letter-spacing:2px}.scene-caption>span:last-child{font-size:6px;letter-spacing:1.8px}.scroll-progress{position:fixed;left:0;right:0;bottom:0;height:2px;z-index:35;opacity:.6}.scroll-progress>i{display:block;width:100%;height:100%;background:var(--accent);transform:scaleX(0);transform-origin:left}.music{position:fixed;z-index:30;bottom:max(20px,env(safe-area-inset-bottom));right:18px;display:flex;align-items:center;gap:9px;border:1px solid #9b886e40;border-radius:40px;padding:5px 8px;background:color-mix(in srgb,var(--sky) 80%,transparent);backdrop-filter:blur(15px);opacity:var(--ui-alpha);transition:opacity .3s}.music>button{border:0;background:none}#play{display:grid;place-items:center;border-radius:50%;width:29px;height:29px}#play svg{fill:var(--ink);width:13px}.track{display:flex;flex-direction:column;gap:4px;max-width:105px}.track span:first-child{font-size:7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.track span:last-child{font-size:5px;opacity:.6}.music-settings{position:absolute;bottom:55px;right:0;padding:21px;width:240px;background:var(--sky);color:var(--ink);border:1px solid #9b886e50;border-radius:16px;box-shadow:0 8px 25px #0002;font-size:11px}.music-settings[hidden]{display:none}.music-settings input[type=range]{width:100%;margin:18px 0;accent-color:var(--accent)}.file-label{display:flex;justify-content:space-between;padding:14px 0}.music-settings p{font-size:9px;opacity:.65}#song{width:100%;font-size:9px}#reset-audio{background:none;border:0;text-decoration:underline;font-size:10px;padding:10px 0}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.no-motion .door{transition:none}@media(min-width:750px){header{padding:30px 45px}.wordmark{font-size:15px}.wordmark small{font-size:8px}#motion{font-size:10px}.monogram{width:min(57vw,650px)}.opening-copy{top:65%}h1{font-size:78px}.opening-line{font-size:26px}.chapter{padding-top:28vh}.chapter h2{font-size:75px}.eyebrow{font-size:10px}.chapter-line{font-size:14px}.material-note{font-size:8px}.scene-caption{left:45px;bottom:35px}.scene-nav{right:25px}.music{right:40px;bottom:25px}.track span:first-child{font-size:10px}.track span:last-child{font-size:7px}#play{width:36px;height:36px}}@media(max-height:700px) and (max-width:749px){.opening{min-height:550px}.opening-copy{top:58%}.opening-line{margin:10px 0 15px}.opening-foot{bottom:16px}.chapter{min-height:640px}h2{font-size:46px}.chapter-line{font-size:11px}.material-note{margin-top:20px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.door{transition:none}}

/* Expanded mood study */
.scene-nav{display:none}.scene-caption{border:0;background:transparent;color:var(--ink);text-align:left;padding:0;pointer-events:auto;cursor:pointer}.browse-hint{font:5px var(--sans);letter-spacing:1.4px;opacity:.65;margin-top:1px}.save-mood{display:block;margin:22px auto 0;padding:10px 15px;border:1px solid color-mix(in srgb,var(--ink) 22%,transparent);border-radius:24px;background:transparent;font:9px var(--sans);letter-spacing:.2px}.save-mood[aria-pressed=true]{background:color-mix(in srgb,var(--ink) 10%,transparent)}.final-actions{display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:18px}.final-actions button{background:none;border:0;font:italic 17px var(--serif)}.final-actions .replay{margin:0;font-size:15px}.chapter:last-child{height:125svh}.chapter:last-child h2{font-size:clamp(38px,10.5vw,58px)}.chapter:last-child .chapter-line{display:none}#scene-dialog{background:#f2ede5;color:#4b3b31;width:min(90vw,460px);max-height:80svh;border:1px solid #a6977d;border-radius:20px;padding:22px}#scene-dialog::backdrop{background:#100c1677;backdrop-filter:blur(7px)}.dialog-heading{display:flex;justify-content:space-between;align-items:center;font:29px var(--serif);margin-bottom:20px}.dialog-heading button{border:0;background:none;font-size:30px;width:40px;height:40px}#scene-list{display:grid;gap:6px}#scene-list button{background:#fff5;border:1px solid #a6977d33;text-align:left;padding:14px;font:15px var(--serif);border-radius:8px}#scene-list span{font:10px var(--sans);margin-right:18px;opacity:.5}.chapter-copy{transition:visibility 0s}.music{max-width:205px}.material-note{margin-top:23px} 
#scene-name{font:6px var(--sans);letter-spacing:1.6px;max-width:140px}.scene-caption>.browse-hint{font:5px var(--sans)}
html{overflow-x:clip}.doors{overflow:hidden;contain:paint}

/* A single full-screen mood per swipe. Native snapping preserves touch momentum. */
html{scroll-snap-type:y mandatory;scroll-padding-top:0;overscroll-behavior-y:contain}html.is-navigating{scroll-snap-type:none}.opening,.chapter,.chapter:last-child{height:100svh;min-height:100svh;scroll-snap-align:start;scroll-snap-stop:always}.chapter{padding-top:27svh}.scene-caption{max-width:145px}@media(max-height:700px){.chapter h2{font-size:39px}.chapter-copy .eyebrow{margin-bottom:10px}.chapter-ornament{margin-bottom:10px}.chapter h2{margin-bottom:16px}.chapter-line{font-size:10px}.material-note{margin-top:16px}.save-mood{margin-top:14px}.final-actions{gap:6px;margin-top:10px}}

/* Controlled chapter navigation: input advances once, never free-scrolls first. */
html{height:100%;overflow:hidden;scroll-snap-type:none;overscroll-behavior:none}body{overflow:visible;min-height:100%;touch-action:pan-x pinch-zoom}.opening,.chapter,.chapter:last-child{scroll-snap-align:none;scroll-snap-stop:normal}.music-settings,#scene-dialog{touch-action:pan-y;overscroll-behavior:contain}header{justify-content:center}.wordmark{font-size:12px;text-transform:uppercase;letter-spacing:2px;text-align:center}#motion{position:absolute;right:22px;top:22px}.motion-label{display:none}.opening-copy{top:59%;transform:none}.opening-date{font-size:8px;letter-spacing:3px;margin-bottom:21px}h1{font-size:clamp(53px,14.2vw,76px);letter-spacing:-2.4px}.open-button{min-width:164px;justify-content:center;gap:12px;padding:13px 25px;margin-top:29px;border-color:#a9845970}.open-button>span:nth-child(2){font-size:23px}.enter-heart{font:29px var(--serif);line-height:1}.chapter-controls{position:fixed;z-index:24;right:12px;top:47%;display:flex;flex-direction:column;gap:8px;opacity:var(--ui-alpha)}.chapter-controls button{width:30px;height:34px;border:1px solid color-mix(in srgb,var(--ink) 18%,transparent);border-radius:20px;background:transparent;color:var(--ink);font:17px var(--serif)}.chapter-controls button:disabled{opacity:.25;cursor:default}@media(min-width:750px){.wordmark{font-size:16px}#motion{top:28px;right:40px}.opening-copy{top:61%}h1{font-size:84px}}@media(max-height:700px){.opening-copy{top:57%}.opening-date{margin-bottom:16px}.open-button{margin-top:21px}}

header{color:var(--header-ink,var(--ink))}

.open-button{display:flex;flex-direction:column;gap:10px;min-width:130px;padding:0;margin-top:24px;border:0;background:transparent;box-shadow:none;text-align:center}.open-button:hover{background:transparent;transform:translateY(-2px)}.open-button .seal-image{width:82px;height:82px;box-shadow:inset 0 1px 2px #fff5,0 6px 12px #77532d40;filter:drop-shadow(0 2px 2px #6a421c22)}.open-button>span:nth-child(2){font:22px var(--serif);letter-spacing:1px}@media(max-height:700px){.open-button{margin-top:18px;gap:7px}.open-button .seal-image{width:64px;height:64px}}

/* Quiet engraved date beneath the names. */
.opening-date{display:flex;align-items:center;justify-content:center;gap:14px;margin:21px 0 0;font:12px var(--serif);letter-spacing:3px;opacity:.72}.opening-date i{width:18px;height:1px;background:currentColor;opacity:.4}.opening-copy{top:59%}.open-button{margin-top:23px}@media(max-height:700px){.opening-copy{top:56%}.opening-date{margin-top:16px}.open-button{margin-top:17px}}

/* A seal opens into the floating family monogram. */
.monogram{opacity:0}#seal-stage{position:fixed;left:50%;top:50%;width:min(80vw,340px);z-index:3;pointer-events:none;transform:translate(-50%,-50%);will-change:transform,opacity}#seal-stage img{display:block;width:100%;height:auto;filter:drop-shadow(0 15px 15px #5b361b30) brightness(calc(1 + var(--seal-glow,0)*.32));position:relative}.seal-radiance{position:absolute;inset:-22%;border-radius:50%;background:radial-gradient(circle,#fff4cd 0%,#f3d79799 30%,#e9ba6122 54%,transparent 70%);opacity:var(--seal-glow,0);transform:scale(calc(.85 + var(--seal-glow,0)*.35));filter:blur(12px)}.opening-copy{inset:0;transform:none;pointer-events:none}.opening-copy .open-button{position:absolute;top:calc(50% + min(40vw,170px) + 26px);left:50%;transform:translateX(-50%);margin:0;min-width:100px;min-height:48px;pointer-events:auto;padding:8px 20px;border:0;background:none;box-shadow:none;font:italic 29px var(--serif);letter-spacing:2px}.opening-copy .open-button:hover{transform:translateX(-50%) translateY(-2px)}.open-button>span{font:inherit}.welcome-chapter{padding-top:16svh}.welcome-chapter h2{font-size:clamp(48px,13vw,66px);line-height:1.12;white-space:nowrap;letter-spacing:-1.9px;margin-bottom:16px}.welcome-chapter h2 em{font-size:.7em}.welcome-date{font:15px var(--serif);letter-spacing:3px;margin:0 0 26px}.welcome-date span{margin:0 8px;opacity:.45}.welcome-chapter .material-note{display:none}.welcome-chapter .eyebrow{font-size:7px;letter-spacing:2px;margin-bottom:22px}@media(min-width:750px){#seal-stage{width:340px}.welcome-chapter h2{font-size:75px}}@media(max-height:700px){#seal-stage{width:min(70vw,270px)}.opening-copy .open-button{top:calc(50% + min(35vw,135px) + 16px)}.welcome-chapter{padding-top:15svh}.welcome-chapter h2{font-size:46px}.welcome-date{margin-bottom:18px}}

/* Black velvet opening; the monogram lifts out as wax dissolves radially. */
:root{--entry-light:0;--sky:rgb(7,7,9);--floor:rgb(12,10,10);--ink:rgb(242,225,192);--glow:rgb(49,35,19)}.monogram{transform-style:preserve-3d}.metal img{filter:drop-shadow(0 12px 14px #0005)}#seal-stage img{filter:drop-shadow(0 16px 24px #0008) brightness(calc(1 + var(--seal-glow,0)*.5));will-change:mask-image,filter}.seal-radiance{inset:-35%;background:radial-gradient(ellipse,#fff6d8 0%,#f0cf87a0 22%,#b5813520 47%,transparent 67%);filter:blur(18px);transform:scale(calc(.65 + var(--seal-glow,0)*.5))}.light,.silk,.halo{opacity:calc(var(--entry-light,0)*.4)}.grain{opacity:calc(.025 + var(--entry-light,0)*.075)}.opening-foot{opacity:.45}.opening-copy .open-button{color:#f2dfb8;text-shadow:0 1px 15px #e7bb6b33}

/* One persistent TN; the vector wax surround is a separate, removable layer. */
.monogram{transform-origin:50% 0;opacity:1}.wordmark{position:fixed;top:clamp(54px,8svh,82px);left:50%;transform:translateX(-50%);white-space:nowrap;font-size:14px;letter-spacing:2.5px}#seal-stage{z-index:2}#seal-stage img{filter:drop-shadow(0 12px 20px #0007) brightness(calc(1 + var(--seal-glow,0)*.14));will-change:auto}.seal-radiance{opacity:calc(var(--seal-glow,0)*.35)}.metal img{filter:drop-shadow(0 2px 2px #3b220f66) drop-shadow(0 10px 12px #0002)}@media(min-width:750px){.wordmark{font-size:16px}}

/* Wax relief is lit from its surface normals and casts its own recess shadows. */
#seal-stage .wax-surface{display:block;position:relative;width:100%;height:auto;filter:drop-shadow(2px 16px 10px #0009) brightness(calc(1 + var(--seal-glow,0)*.14))}#seal-stage[data-material="relief"]>img{display:none}

/* Warm low-key opening light and a material-continuous monogram. */
:root{--logo-theme:0}.metal[data-material="wax"]>img{opacity:var(--logo-theme)}.wax-monogram{position:absolute;inset:0;width:100%;height:100%;opacity:calc(1 - var(--logo-theme));filter:drop-shadow(0 2px 1px #29170b99);pointer-events:none}.wordmark{top:auto;bottom:max(38px,env(safe-area-inset-bottom));font-size:14px;letter-spacing:2.5px}.opening-foot{display:none}.world:after{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 35% 40%,#c8a37219,transparent 48%),radial-gradient(ellipse at 50% 52%,transparent 24%,#07080c70 100%),linear-gradient(130deg,transparent 15%,#f1c47f07 43%,transparent 57%);opacity:calc(1 - var(--entry-light));z-index:-1}.world{isolation:isolate}.light-one{opacity:calc(.16 + var(--entry-light)*.24)}#seal-stage{transform-style:preserve-3d;transform-origin:50% 50%;will-change:transform}.wax-surface{backface-visibility:hidden}

/* Constellation invitation control */
:root{--seal-bottom:calc(50svh + min(40vw,170px))}
.wordmark{top:calc(var(--seal-bottom) + 28px);bottom:auto;font-size:15px;letter-spacing:2.4px;color:#e7cca0}
.opening-copy .open-button{top:calc(var(--seal-bottom) + 62px);padding:0 12px;gap:9px;min-width:100px;color:#edd5b0;isolation:isolate}
.open-button .entry-orbit{display:block;position:relative;width:82px;height:82px;border-radius:50%;background:radial-gradient(circle,#deb67116 0%,#deb67106 35%,transparent 68%);transition:background .5s,transform .6s}
.entry-orbit svg{display:block;width:100%;height:100%;overflow:visible}
.orbit-ring{stroke:#d7b780;stroke-width:.65;opacity:.58}
.orbit-halo{stroke:#d7b780;stroke-width:.4;stroke-dasharray:1 11;opacity:.28}
.star-lines{stroke:#dec394;stroke-width:.45;opacity:.32}
.orbit-stars{fill:#f8dfb0;filter:drop-shadow(0 0 2px #eec57c)}
.star-core{fill:#fff4d7;filter:drop-shadow(0 0 4px #fff0bd) drop-shadow(0 0 10px #e2b564);animation:star-breathe 3.8s ease-in-out infinite}
.core-rays{stroke:#fff0c5;stroke-width:.55;opacity:.7;filter:drop-shadow(0 0 3px #ffdda0)}
.orbit-traveller{position:absolute;inset:6px;border-radius:50%;animation:star-orbit 18s linear infinite;pointer-events:none}
.orbit-traveller:after{content:'';position:absolute;left:50%;top:-1px;width:2px;height:2px;border-radius:50%;background:#fff1c8;box-shadow:0 0 6px 1px #e7bf76b0}
.opening-copy .open-button .entry-label{font:italic 22px/1 var(--serif);letter-spacing:1.3px}
.opening-copy .open-button:hover{transform:translateX(-50%)}
.open-button:hover .entry-orbit,.open-button:focus-visible .entry-orbit{background:radial-gradient(circle,#deb6712c,transparent 70%);transform:scale(1.06)}
.open-button:active .entry-orbit{transform:scale(.95)}
@keyframes star-breathe{0%,100%{opacity:.7}50%{opacity:1}}
@keyframes star-orbit{to{transform:rotate(360deg)}}
.no-motion .star-core,.no-motion .orbit-traveller{animation:none}
@media(max-height:700px){:root{--seal-bottom:calc(50svh + min(35vw,135px))}.wordmark{top:calc(var(--seal-bottom) + 20px);font-size:13px}.opening-copy .open-button{top:calc(var(--seal-bottom) + 49px);gap:6px}.open-button .entry-orbit{width:68px;height:68px}.opening-copy .open-button .entry-label{font-size:20px}}
@media(prefers-reduced-motion:reduce){.star-core,.orbit-traveller{animation:none}.open-button .entry-orbit{transition:none}}

/* Smaller, edge-to-edge constellation with a broad breathing light. */
.wordmark{top:auto;bottom:max(38px,env(safe-area-inset-bottom));font-size:14px;letter-spacing:2.5px}
.opening-copy .open-button{top:calc(var(--seal-bottom) + 32px);min-width:88px;gap:8px}
.open-button .entry-orbit{width:64px;height:64px}
.entry-orbit:before{content:'';position:absolute;inset:5%;border-radius:50%;background:radial-gradient(circle,#fff4d09c 0%,#f9d78c4d 13%,#e7b36c26 32%,transparent 70%);animation:constellation-glow 4.8s ease-in-out infinite;pointer-events:none;z-index:-1}
.star-lines{stroke-width:.7;opacity:.56}.orbit-halo{opacity:.14}.orbit-ring{opacity:.48}
.star-core{transform-origin:44px 44px;animation:constellation-core 4.8s ease-in-out infinite}
.orbit-traveller{inset:5px}.core-rays{stroke-width:.65}
.opening-copy .open-button .entry-label{font-size:20px}
@keyframes constellation-glow{0%,100%{transform:scale(.8);opacity:.4}50%{transform:scale(1.65);opacity:1}}
@keyframes constellation-core{0%,100%{transform:scale(.85);opacity:.72}50%{transform:scale(1.7);opacity:1}}
.no-motion .entry-orbit:before{animation:none}
@media(max-height:700px){.wordmark{top:auto;bottom:max(27px,env(safe-area-inset-bottom));font-size:13px}.opening-copy .open-button{top:calc(var(--seal-bottom) + 24px);gap:6px}.open-button .entry-orbit{width:58px;height:58px}}
@media(prefers-reduced-motion:reduce){.entry-orbit:before,.star-core{animation:none}}

/* Plain opening title at the top. */
.wordmark{top:clamp(54px,8svh,82px);bottom:auto;font-size:14px;letter-spacing:2.5px}
@media(max-height:700px){.wordmark{top:44px;bottom:auto;font-size:13px}}

/* Invitation and arrival: readable, focused content for the first two scenes. */
.wax-monogram{filter:drop-shadow(0 2px 1px #29170bb3) drop-shadow(1px 3px 1px #30170766)}
.welcome-chapter{padding:15svh 26px 0}.welcome-chapter h2{font-size:clamp(50px,13.5vw,72px);line-height:1.08;margin:0 0 20px;letter-spacing:-1.8px}.welcome-chapter h2 em{font-size:.65em}
.invitation-kicker,.arrival-kicker{font:11px/1.6 var(--sans);letter-spacing:2px;text-transform:uppercase;margin:0 0 24px}
.welcome-date{font:clamp(29px,8.4vw,40px)/1.2 var(--serif);letter-spacing:2px;margin:0 0 18px;white-space:nowrap}.welcome-date span{font-size:.55em;vertical-align:middle;opacity:.7;margin:0 5px}
.invitation-rule{display:flex;align-items:center;justify-content:center;gap:16px;font:22px var(--serif);color:var(--accent);margin:0 0 20px}.invitation-rule:before,.invitation-rule:after{content:'';width:42px;height:1px;background:currentColor;opacity:.35}
.welcome-chapter .chapter-line{font:14px/1.9 var(--sans);opacity:.9}
.venue-chapter{padding:23svh 30px 0}.venue-chapter .arrival-kicker{margin-bottom:8px}.venue-chapter .arrival-time{font:clamp(66px,20vw,96px)/1 var(--serif);letter-spacing:-2px;margin:0 0 12px}.arrival-time small{font:24px var(--serif);letter-spacing:1px}
.arrival-line{font:13px/1.7 var(--sans);margin:0 0 27px;opacity:.9}
.venue-location{display:flex;align-items:center;justify-content:center;gap:15px;margin:0 0 24px;text-align:left}.venue-pin{width:29px;height:37px;color:var(--accent);flex-shrink:0}.venue-name{font:35px/1 var(--serif);margin:0 0 8px}.venue-address{font:12px/1.4 var(--sans);letter-spacing:.5px;margin:0;opacity:.85}
.map-link{display:flex;align-items:center;justify-content:space-between;gap:22px;width:max-content;max-width:100%;min-height:62px;margin:auto;padding:13px 20px;border:1px solid color-mix(in srgb,var(--ink) 35%,transparent);border-radius:40px;background:color-mix(in srgb,var(--sky) 28%,transparent);font:italic 20px/1.1 var(--serif);text-align:left;transition:background .3s,transform .3s}.map-link small{display:block;margin-top:7px;font:8px var(--sans);letter-spacing:1.5px;text-transform:uppercase;opacity:.75}.map-link svg{width:21px;height:21px}.map-link:hover{background:color-mix(in srgb,var(--sky) 50%,transparent);transform:translateY(-2px)}
@media(max-height:700px){.welcome-chapter{padding-top:18svh}.welcome-chapter h2{font-size:46px;margin-bottom:15px}.invitation-kicker{font-size:9px;letter-spacing:1.6px;margin-bottom:18px}.welcome-date{font-size:28px;margin-bottom:12px}.invitation-rule{margin-bottom:13px}.welcome-chapter .chapter-line{font-size:12px}.venue-chapter{padding-top:24svh}.venue-chapter .arrival-kicker{font-size:10px}.venue-chapter .arrival-time{font-size:62px;margin-bottom:9px}.arrival-line{font-size:11px;margin-bottom:19px}.venue-location{margin-bottom:18px}.venue-name{font-size:29px}.venue-address{font-size:11px}.map-link{min-height:54px;padding:10px 17px;font-size:18px}}

/* Lift the complete opening composition, keeping the TN seated in its wax. */
#seal-stage{top:44%}:root{--seal-bottom:calc(44svh + min(40vw,170px))}
@media(max-height:700px){:root{--seal-bottom:calc(44svh + min(35vw,135px))}}
#celebration-sky{position:fixed;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
.celebration-chapter .chapter-copy{position:relative;z-index:5}
.launch-firework{display:flex;flex-direction:column;align-items:center;gap:11px;margin:22px auto 0;background:none;border:0;color:inherit;cursor:pointer;padding:8px 22px;touch-action:manipulation}
.launch-firework svg{width:68px;height:68px;stroke:currentColor;stroke-width:.8;transition:transform .3s;filter:drop-shadow(0 0 8px #edc98855)}
.launch-firework svg path:last-child{fill:currentColor;stroke:none}.launch-firework:hover svg{transform:scale(1.08)}.launch-firework:active svg{transform:scale(.92)}
.launch-firework span{font:italic 24px var(--serif)}.launch-firework small{font:9px var(--sans);letter-spacing:.8px;opacity:.8}
.celebration-chapter .final-actions{margin-top:22px}
@media(max-height:700px){.celebration-chapter h2{font-size:42px}.launch-firework{margin-top:12px;gap:7px}.launch-firework svg{width:50px;height:50px}.celebration-chapter .final-actions{margin-top:12px}}
@media(prefers-reduced-motion:reduce){.launch-firework svg{transition:none}}

.celebration-chapter{padding:22svh 14px 0}.celebration-chapter h2{font-size:clamp(43px,12vw,60px);margin-bottom:17px}.celebration-chapter .chapter-line{font-size:11px}.celebration-chapter .eyebrow{font-size:7px;letter-spacing:1.4px}
.firework-controls{display:grid;grid-template-columns:repeat(30,1fr);gap:12px 0;max-width:365px;margin:27px auto 0}.firework-choice{grid-column:span 6;display:flex;flex-direction:column;align-items:center;gap:6px;border:0;padding:3px 0;background:none;color:#eed8b4;cursor:pointer;touch-action:manipulation}.firework-choice:nth-child(n+6){grid-column:span 5}.firework-choice svg{width:42px;height:42px;stroke:currentColor;stroke-width:.9;border:1px solid #d9b87c3d;border-radius:50%;padding:4px;background:#d8ab5d0c;transition:transform .25s,background .25s}.firework-choice span{font:7px var(--sans);letter-spacing:.1px}.firework-choice:hover svg{background:#d8ab5d30;transform:scale(1.1)}.firework-choice:active svg{transform:scale(.88);background:#d8ab5d60}.game-hint{font:italic 17px var(--serif);opacity:.7;margin-top:20px}
.play-fireworks{display:block;margin:18px auto 0;padding:12px 20px;background:none;border:1px solid currentColor;border-radius:30px;color:inherit;font:italic 20px var(--serif);cursor:pointer}.play-fireworks span{display:block;font:8px var(--sans);letter-spacing:1px;text-transform:uppercase;margin-top:7px}
@media(max-height:700px){.celebration-chapter{padding-top:26svh}.celebration-chapter h2{font-size:39px;margin-bottom:10px}.firework-controls{margin-top:18px;gap:9px 0}.firework-choice svg{width:37px;height:37px}.game-hint{margin-top:14px}}

/* Guest view: larger floating monogram and content lower on each page. */
.chapter,.welcome-chapter,.venue-chapter,.celebration-chapter{align-items:flex-end;padding-top:0;padding-bottom:max(7svh,env(safe-area-inset-bottom));}
.celebration-chapter{padding-bottom:max(5svh,env(safe-area-inset-bottom))}
@media(max-height:700px){.chapter,.welcome-chapter,.venue-chapter,.celebration-chapter{padding-top:0;padding-bottom:max(5svh,env(safe-area-inset-bottom))}.celebration-chapter{padding-bottom:max(3svh,env(safe-area-inset-bottom))}}

.chapter h2:focus{outline:none}

/* Rebalance copy above the bottom edge while keeping the lowered TN. */
.chapter,.welcome-chapter,.venue-chapter{align-items:center;padding-top:32svh;padding-bottom:0}
.chapter h2{font-size:clamp(36px,10.5vw,52px)}.welcome-chapter h2{font-size:clamp(44px,12vw,62px);margin-bottom:16px}.welcome-date{font-size:30px;margin-bottom:14px}.invitation-kicker{font-size:10px;margin-bottom:20px}.invitation-rule{margin-bottom:16px}.welcome-chapter .chapter-line{font-size:12px}.venue-chapter .arrival-time{font-size:clamp(60px,18vw,84px)}
.celebration-chapter{align-items:center;padding-top:42svh;padding-bottom:0}.celebration-chapter h2{font-size:36px;line-height:1.1;margin:0 0 10px}.celebration-chapter .chapter-line{font-size:10px}.celebration-chapter .eyebrow{display:none}
.firework-controls{grid-template-columns:repeat(12,1fr);gap:9px 0;max-width:350px;margin-top:20px}.firework-choice,.firework-choice:nth-child(n+6){grid-column:span 2}.firework-choice:nth-child(7){grid-column:2 / span 2}.firework-choice:nth-child(12){grid-column:3 / span 2}.firework-choice svg{width:38px;height:38px}.firework-choice span{font-size:7px}.firework-choice{gap:4px}
.launch-all{display:flex;align-items:center;justify-content:center;gap:12px;min-height:48px;margin:17px auto 0;padding:12px 28px;border:1px solid #dabb8170;border-radius:40px;color:#f4ddb2;background:radial-gradient(ellipse at 50% 0,#dcb66c28,#dcb66c08);box-shadow:inset 0 1px #ffedc51c;font:italic 23px var(--serif);cursor:pointer;touch-action:manipulation}.launch-all span{font:17px var(--serif)}.launch-all:active{background:#dcb66c35}.game-hint{font-size:13px;margin:11px 0 0}
@media(max-height:700px){.chapter,.welcome-chapter,.venue-chapter{padding-top:31svh;padding-bottom:0}.chapter h2{font-size:35px}.welcome-chapter h2{font-size:43px}.welcome-date{font-size:28px}.venue-chapter .arrival-time{font-size:58px}.celebration-chapter{padding-top:47svh;padding-bottom:0}.celebration-chapter h2{font-size:29px;margin-bottom:8px}.firework-controls{margin-top:14px;gap:6px 0}.firework-choice svg{width:33px;height:33px}.firework-choice span{font-size:6.5px}.launch-all{min-height:44px;margin-top:13px;padding:9px 24px;font-size:21px}.game-hint{font-size:12px;margin-top:8px}}

.begin-celebration{display:flex;align-items:center;justify-content:center;gap:12px;margin:22px auto 0;min-height:46px;padding:11px 20px;color:inherit;border:1px solid color-mix(in srgb,var(--ink) 35%,transparent);border-radius:40px;background:color-mix(in srgb,var(--accent) 8%,transparent);font:italic 20px var(--serif);cursor:pointer;touch-action:manipulation}.begin-celebration span{font:15px var(--serif)}.begin-celebration:disabled{opacity:.7;cursor:default}.welcome-chapter{padding-top:38svh}
@media(max-height:700px){.welcome-chapter{padding-top:43svh}.begin-celebration{font-size:17px;min-height:44px;margin-top:16px;padding:9px 17px}.welcome-chapter .chapter-line{font-size:11px}.welcome-chapter .invitation-rule{margin-bottom:10px}.welcome-chapter .welcome-date{margin-bottom:10px}.welcome-chapter .invitation-kicker{margin-bottom:15px}}

/* Each scene has one small invitation to its own moment. */
.chapter:not(.welcome-chapter):not(.venue-chapter):not(.celebration-chapter){padding-top:23svh}
.scene-moment-action{display:flex;align-items:center;justify-content:center;gap:12px;margin:23px auto 0;padding:11px 20px;min-height:46px;border:1px solid color-mix(in srgb,var(--ink) 30%,transparent);border-radius:40px;background:color-mix(in srgb,var(--accent) 7%,transparent);color:inherit;font:italic 20px var(--serif);cursor:pointer;touch-action:manipulation}.scene-moment-action span{font:14px var(--serif)}.scene-moment-action:hover,.begin-celebration:hover{background:color-mix(in srgb,var(--accent) 16%,transparent)}.moment-active .scene-moment-action,.moment-active .begin-celebration{opacity:.7;pointer-events:none}
#moment-sky{position:fixed;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
.venue-chapter .scene-moment-action{margin-top:16px;font-size:18px}.venue-chapter{padding-top:35svh}.venue-chapter .arrival-line{margin-bottom:20px}.venue-chapter .venue-location{margin-bottom:18px}
.celebration-chapter .chapter-line{display:block}.celebration-chapter .replay{display:block;margin:13px auto 0;padding:5px;border:0;background:none;color:inherit;font:italic 13px var(--serif);opacity:.7}.celebration-chapter{padding-top:38svh}
@media(max-height:700px){.chapter:not(.welcome-chapter):not(.venue-chapter):not(.celebration-chapter){padding-top:26svh}.scene-moment-action{font-size:17px;margin-top:16px;min-height:44px;padding:9px 17px}.venue-chapter{padding-top:36svh}.venue-chapter .arrival-time{font-size:53px}.venue-chapter .arrival-line{margin-bottom:14px}.venue-chapter .venue-location{margin-bottom:12px}.venue-chapter .scene-moment-action{margin-top:10px;font-size:16px}.celebration-chapter{padding-top:44svh}.celebration-chapter .replay{margin-top:8px;font-size:12px}}

/* A second, intimate finale: her name in the stars. */
.launch-nour{margin-top:9px;min-height:44px;font-size:20px;padding:9px 24px;background:linear-gradient(120deg,#eed5ac17,#e4bd7510);border-color:#f0d49b55}
.celebration-chapter{padding-top:32svh}
@media(max-height:700px){.celebration-chapter{padding-top:35svh}.celebration-chapter .chapter-line{margin-bottom:8px}.firework-controls{margin-top:10px}.launch-nour{font-size:18px;margin-top:7px;padding:8px 20px}.celebration-chapter .game-hint{margin-top:7px}}

/* A free-floating heart constellation, with no circle or caption. */
.begin-celebration{flex-direction:column;gap:0;min-height:0;margin:54px auto 0;padding:0 12px 4px;border:0;border-radius:0;background:none!important;box-shadow:none}
.begin-celebration .heart-orbit{display:block;position:relative;top:36px;isolation:isolate;width:56px;height:56px;background:none;animation:heart-float 4.8s ease-in-out infinite}
.heart-orbit:before{content:"";position:absolute;inset:0;z-index:-1;border-radius:50%;background:radial-gradient(circle,#fff4d0a0 0%,#f9d78c4d 13%,#e7b36c26 32%,transparent 70%);animation:constellation-glow 3.2s ease-in-out infinite;pointer-events:none}
.heart-orbit .star-core{animation:constellation-core 3.2s ease-in-out infinite}
.heart-orbit svg{animation:heart-pulse 3.2s ease-in-out infinite;transform-origin:center;filter:drop-shadow(0 0 5px #eac48055)}
.heart-outline{stroke:#f7dca0;stroke-width:.65;stroke-linejoin:round;filter:drop-shadow(0 0 2px #eebf79)}
.heart-links{stroke:#e9c584;stroke-width:.5;opacity:.4}.heart-rays{stroke:#fff2c8;stroke-width:.65;filter:drop-shadow(0 0 4px #ffd58b)}
@keyframes heart-float{0%,100%{transform:translateY(3px) rotate(-2deg)}50%{transform:translateY(-5px) rotate(2deg)}}
@keyframes heart-pulse{0%,100%{transform:scale(.96);opacity:.75;filter:drop-shadow(0 0 3px #eac48055)}50%{transform:scale(1.08);opacity:1;filter:drop-shadow(0 0 9px #f5cd8caa)}}
@media(max-height:700px){.begin-celebration{margin-top:38px}.begin-celebration .heart-orbit{top:24px;width:48px;height:48px}}
@media(prefers-reduced-motion:reduce){.begin-celebration .heart-orbit,.heart-orbit svg,.heart-orbit:before,.heart-orbit .star-core{animation:none}}

.heart-traveller{filter:drop-shadow(0 0 3px #f4cf8dcc);pointer-events:none}
@media(prefers-reduced-motion:reduce){.heart-traveller{display:none}}

/* Selected study 03: Deep heart. Fixed orbit anchors; breathing light only. */
#open-invitation .entry-orbit svg{animation:none;filter:none}
#open-invitation .entry-orbit:before{display:none}
#open-invitation .entry-ring{stroke:#d7b780;stroke-width:.9;opacity:.68}
#open-invitation .entry-halo{stroke:#d7b780;stroke-width:.4;stroke-dasharray:1 13;opacity:.22}
#open-invitation .entry-heart{stroke:#edcf93;stroke-width:1.15;opacity:.78}
#open-invitation .entry-links{stroke:#dec394;stroke-width:.85;opacity:.55}
#open-invitation .entry-star{fill:#f8dfb0;filter:drop-shadow(0 0 2px #eec57c)}
#open-invitation .entry-core{fill:#fff4d7;filter:drop-shadow(0 0 3px #fff0bd) drop-shadow(0 0 8px #e2b564)}
#open-invitation .entry-glow{animation:entry-light 4.8s ease-in-out infinite}
#open-invitation .entry-dot{fill:#fff1c8;filter:drop-shadow(0 0 3px #e7bf76)}
@keyframes entry-light{0%,100%{opacity:.4}50%{opacity:.72}}
@media(prefers-reduced-motion:reduce){#open-invitation .entry-glow{animation:none}#open-invitation .entry-dot{display:none}}

#open-invitation .entry-orbit{width:76px;height:76px}
@media(max-height:700px){#open-invitation .entry-orbit{width:68px;height:68px}}

/* Invitation heart adapted for the opening: softened lower facets and circular orbit. */
#open-invitation .entry-ring{stroke:#f7dca0;stroke-width:.8;opacity:1;filter:drop-shadow(0 0 2px #eebf79)}
#open-invitation .entry-halo{stroke-width:.35}
#open-invitation .heart-outline{stroke-width:.8;opacity:1}
#open-invitation .heart-links{stroke-width:.6;opacity:.5}
#open-invitation .entry-orbit:before{display:block;inset:0;animation:entry-light 4.8s ease-in-out infinite}
#open-invitation .star-core{transform-origin:44px 44px;animation:opening-soft-core 4.8s ease-in-out infinite}
@keyframes opening-soft-core{0%,100%{transform:scale(.98);opacity:.8}50%{transform:scale(1.04);opacity:1}}
@media(prefers-reduced-motion:reduce){#open-invitation .star-core,#open-invitation .entry-orbit:before{animation:none}}

/* Heart and orbit breathe as one, preserving every contact point. */
#open-invitation .entry-orbit{animation:heart-float 4.8s ease-in-out infinite;isolation:isolate}
#open-invitation .entry-orbit svg{animation:heart-pulse 3.2s ease-in-out infinite;transform-origin:center;filter:drop-shadow(0 0 5px #eac48055)}
#open-invitation .entry-orbit:before{animation:constellation-glow 3.2s ease-in-out infinite}
#open-invitation .star-core{animation:constellation-core 3.2s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){#open-invitation .entry-orbit,#open-invitation .entry-orbit svg,#open-invitation .entry-orbit:before,#open-invitation .star-core{animation:none}}

/* Exact invitation heart, now one continuous guide from the opening onward. */
#open-invitation.following-heart{position:fixed;z-index:30;left:50%;top:calc(var(--seal-bottom) + 32px);transform:translateX(-50%);margin:0;padding:0 12px;min-width:80px;min-height:0;border:0;background:none;box-shadow:none;display:flex;flex-direction:column;gap:8px;color:#edd5b0;text-align:center;isolation:isolate;transition:none}
#open-invitation.following-heart:hover{transform:translateX(-50%);background:none}
#open-invitation.following-heart .entry-orbit{width:56px;height:56px;background:none;transition:none;animation:heart-float 4.8s ease-in-out infinite}
#open-invitation.following-heart .heart-outline{stroke-width:.65;opacity:1}
#open-invitation.following-heart .heart-links{stroke-width:.5;opacity:.4}
#open-invitation.following-heart .entry-label{font:italic 20px/1 var(--serif);letter-spacing:1.3px;pointer-events:none}
#open-invitation.following-heart:disabled{cursor:default}
.scene-moment-action,#begin-celebration{visibility:hidden!important;pointer-events:none!important}
@media(max-height:700px){#open-invitation.following-heart .entry-orbit{width:48px;height:48px}}
@media(prefers-reduced-motion:reduce){#open-invitation.following-heart .entry-orbit{animation:none}}

/* Thirteen chapters, designed for a single phone screen each. */
.story-kicker{font:8px/1.6 var(--sans);letter-spacing:2px;margin:0 0 17px;opacity:.7}
.story-chapter h2{font-size:clamp(32px,9.5vw,46px);line-height:1.05;letter-spacing:-1px;margin-bottom:22px}
.story-chapter .chapter-line{font-size:11px;line-height:1.9}
.story-chapter .story-letter{line-height:2.1}
.story-link{display:inline-flex;align-items:center;justify-content:center;gap:16px;margin:22px auto 0;padding:10px 5px;border:0;border-bottom:1px solid currentColor;background:none;color:inherit;font:italic 20px var(--serif)}
.couple-signature{font:italic 24px var(--serif);margin:22px 0 0}
.verse-chapter h2.quran-verse{font-family:Amiri,serif;font-size:clamp(32px,9vw,42px);line-height:1.9;letter-spacing:0;margin-bottom:8px}
.verse-closing{font:20px/1.8 Amiri,serif;margin:0 0 8px}.verse-source{font:14px Amiri,serif;opacity:.65}
.countdown{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;max-width:330px;margin:26px auto 22px}
.countdown strong{display:block;font:38px/1 var(--serif);font-variant-numeric:tabular-nums}.countdown span{display:block;margin-top:8px;font:8px var(--sans);letter-spacing:1px;text-transform:uppercase}.countdown-date{opacity:.65}
.wishes-chapter{padding-top:30svh}.wishes-chapter h2{font-size:34px;margin-bottom:15px}.wishes-chapter .story-kicker{margin-bottom:10px}
.wish-form{max-width:300px;margin:auto;text-align:left}.wish-form label{display:block;font:9px/1.5 var(--sans);letter-spacing:.3px;margin-bottom:10px}.wish-form input,.wish-form textarea{display:block;width:100%;font:16px/1.4 var(--serif);color:var(--ink);border:1px solid color-mix(in srgb,var(--ink) 28%,transparent);background:color-mix(in srgb,var(--sky) 40%,transparent);border-radius:7px;padding:9px 11px;margin-top:4px;resize:none}.wish-form input::placeholder,.wish-form textarea::placeholder{color:inherit;opacity:.5}.wish-form textarea{height:70px}.wish-form .story-link{font-size:17px;margin:0;padding:6px 0}.wish-status{font:9px/1.4 var(--sans);min-height:13px;margin:8px 0 0}.wish-privacy{font:8px/1.5 var(--sans);opacity:.6;margin:5px 0}.wish-trap{display:none!important}
.wish-words{display:flex;gap:12px;align-items:center;justify-content:center;margin-top:25px;font:8px var(--sans);letter-spacing:1px}.wish-words i{font:17px var(--serif)}.blessing{font:23px/1.8 Amiri,serif;margin:17px 0}
@media(max-height:700px){.story-chapter h2{font-size:29px;margin-bottom:14px}.story-kicker{margin-bottom:10px}.verse-chapter h2.quran-verse{font-size:31px}.countdown strong{font-size:30px}.wishes-chapter{padding-top:31svh}.wishes-chapter h2{font-size:27px;margin-bottom:10px}.wish-form textarea{height:56px}.wish-form label{margin-bottom:6px}.wish-form input{padding:6px 10px}.wish-privacy{font-size:7px}}

/* Composite soft skies independently; keep the logo and petals crisp. */
#ambient-light{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;will-change:transform;transform:translateZ(0)}
.monogram,.following-heart,#atmosphere{backface-visibility:hidden}.chapter-copy{contain:layout style}.world{isolation:isolate}

/* Ceremonial invitation and an Arabic-led blessing. */
.welcome-chapter{padding-top:35svh}
.welcome-chapter .chapter-copy{max-width:620px}
.welcome-chapter .invitation-kicker{font:9px/1.6 var(--sans);letter-spacing:2.8px;text-transform:uppercase;margin:0 0 20px;color:#e9cf9c;opacity:.82}
.welcome-chapter h2{font-size:clamp(52px,15vw,82px);font-weight:400;letter-spacing:-2px;line-height:1.12;margin:0;color:#fff0d2;text-shadow:0 2px 10px #d3a95820}
.welcome-chapter h2 em{font-size:.62em;color:#dabc83;margin:0 .035em}
.ceremony-ornament{display:block;width:194px;height:34px;margin:17px auto;color:#d8b776;stroke:currentColor;stroke-width:.8;stroke-linecap:round;stroke-linejoin:round;opacity:.8}
.ceremonial-date{margin:0;color:#f6e5c4;font:34px/1.2 var(--serif);font-variant-numeric:lining-nums;letter-spacing:2px}
.ceremonial-date time{display:flex;align-items:center;justify-content:center;gap:19px}
.ceremonial-date span{margin:0;opacity:1}
.ceremonial-date i{display:block;width:1px;height:23px;background:linear-gradient(transparent,#cba56b,transparent)}
#sun-silk.blessing-chapter{padding-top:29svh}
.blessing-chapter .chapter-copy{max-width:540px}
.blessing-chapter .story-kicker{font-size:8px;letter-spacing:2.5px;color:#78552e;opacity:.85;margin:0 0 12px}
.blessing-chapter h2{font:26px/1.3 var(--serif);letter-spacing:-.3px;margin:0;color:#634326}
.blessing-chapter h2 em{font-style:italic}
.blessing-chapter .ceremony-ornament{width:200px;height:35px;margin:15px auto 12px;color:#956b36}
.blessing-chapter .blessing{font:400 clamp(31px,9.5vw,43px)/1.9 Amiri,serif;color:#634326;margin:0;letter-spacing:0;text-shadow:0 1px 1px #fff4c845}
.blessing-chapter .blessing span{display:block;white-space:nowrap}
.blessing-footer .ceremony-ornament{transform:rotate(180deg);width:145px;height:26px;margin:12px auto 0;opacity:.6}
@media(max-height:700px){.welcome-chapter{padding-top:35svh}.welcome-chapter h2{font-size:clamp(48px,14vw,65px)}.welcome-chapter .invitation-kicker{font-size:8px;letter-spacing:2px;margin-bottom:14px}.welcome-chapter .ceremony-ornament{margin:12px auto;width:173px;height:29px}.welcome-chapter .ceremonial-date{font-size:31px;margin:0}#sun-silk.blessing-chapter{padding-top:32svh}.blessing-chapter h2{font-size:22px}.blessing-chapter .blessing{font-size:clamp(29px,8.5vw,37px);line-height:1.8}.blessing-chapter .ceremony-ornament{height:28px;margin:11px auto}.blessing-footer .ceremony-ornament{height:22px;margin:8px auto 0}}

/* Invitation blocks: a full ceremonial hierarchy with room for each line. */
#midnight.welcome-chapter{align-items:flex-start;padding:43svh 24px 0}
#midnight .chapter-copy{max-width:560px}
#midnight .invitation-kicker{font:italic 21px/1.25 var(--serif);letter-spacing:.3px;text-transform:none;color:#e7c991;opacity:1;margin:0 0 15px}
#midnight .invitation-kicker em{display:block;font-size:29px;font-style:normal;letter-spacing:1px}
#midnight h2{position:relative;display:flex;flex-direction:column;align-items:center;gap:0;font:500 clamp(61px,18vw,82px)/.87 var(--serif);letter-spacing:-1px;margin:0;color:#fff1d6;text-shadow:0 2px 18px #dcb46c25}
#midnight h2 span{display:block}
#midnight h2 em{font:italic 29px/1 var(--serif);color:#dcb46c;margin:1px 0 -1px}
#midnight .ceremony-ornament{width:260px;max-width:90%;height:38px;stroke-width:.85;margin:13px auto 9px;opacity:.95}
#midnight .ceremonial-date{font:44px/1.1 var(--serif);letter-spacing:1px;margin:0;color:#ffe5ad}
#midnight .ceremonial-date span{font:inherit;opacity:1;margin:0}
#midnight .ceremonial-date time{gap:16px}
#midnight .ceremonial-date i{height:33px}
#sun-silk.blessing-chapter{align-items:flex-start;padding:45svh 24px 0}
#sun-silk.blessing-chapter h2{font:500 40px/1.05 var(--serif);letter-spacing:-.5px;color:#69451f;margin:0;text-shadow:0 1px #fff5d45c}
#sun-silk.blessing-chapter h2 span,#sun-silk.blessing-chapter h2 em{display:block}
#sun-silk.blessing-chapter h2 em{font-size:27px;font-weight:400;margin-top:5px}
#sun-silk .ceremony-ornament{width:264px;max-width:92%;height:39px;margin:13px auto 8px;stroke-width:.9;color:#9b6f32;opacity:.95}
#sun-silk .blessing{font:400 clamp(37px,11vw,49px)/1.65 Amiri,serif;color:#69451f;text-shadow:0 1px #fff5d470}
#sun-silk .blessing-footer .ceremony-ornament{width:208px;height:30px;margin:7px auto 0;opacity:.75}
#open-invitation.following-heart.blessing-gold .heart-outline{stroke:#9a6b25;filter:drop-shadow(0 0 2px #d1a75f)}
#open-invitation.following-heart.blessing-gold .heart-links{stroke:#9a6b25;opacity:.6}
#open-invitation.following-heart.blessing-gold .orbit-stars{fill:#9f742c;filter:drop-shadow(0 0 2px #d1a75f)}
#open-invitation.following-heart.blessing-gold .star-core{fill:#fff1c8;filter:drop-shadow(0 0 4px #c89c4e) drop-shadow(0 0 10px #b6853b70)}
#open-invitation.following-heart.blessing-gold .core-rays{stroke:#a8762d;filter:drop-shadow(0 0 3px #d4ac65)}
#open-invitation.following-heart.blessing-gold .heart-traveller{fill:#a8762d;filter:drop-shadow(0 0 3px #d4ac65)}
#open-invitation.following-heart.blessing-gold .entry-orbit:before{background:radial-gradient(circle,#fff0c880 0%,#d6ab5f45 18%,#b5863520 38%,transparent 70%)}
#open-invitation.following-heart.blessing-gold .entry-orbit svg{animation-name:gold-heart-pulse}
@keyframes gold-heart-pulse{0%,100%{transform:scale(.96);opacity:.85;filter:drop-shadow(0 0 3px #b58b4055)}50%{transform:scale(1.08);opacity:1;filter:drop-shadow(0 0 8px #c8a05b80)}}
@media(max-height:700px){
 #midnight.welcome-chapter{padding-top:47svh}
 #midnight .invitation-kicker{font-size:16px;margin-bottom:8px}#midnight .invitation-kicker em{font-size:22px}
 #midnight h2{font-size:51px;line-height:.85}#midnight h2 em{font-size:21px}
 #midnight .ceremony-ornament{height:26px;margin:7px auto 5px;width:225px}
 #midnight .ceremonial-date{font-size:33px}#midnight .ceremonial-date i{height:25px}
 #sun-silk.blessing-chapter{padding-top:47svh}
 #sun-silk.blessing-chapter h2{font-size:31px}#sun-silk.blessing-chapter h2 em{font-size:22px;margin-top:2px}
 #sun-silk .ceremony-ornament{height:27px;margin:7px auto;width:232px}
 #sun-silk .blessing{font-size:34px;line-height:1.5}
 #sun-silk .blessing-footer .ceremony-ornament{height:24px;margin:4px auto 0}
}

#midnight #begin-celebration{display:none}

/* Side-by-side names, retaining the larger date and ceremonial flourishes. */
#midnight.welcome-chapter{padding-top:49svh}
#midnight .invitation-kicker{margin-bottom:22px}
#midnight h2{flex-direction:row;justify-content:center;align-items:baseline;gap:9px;font-size:clamp(48px,15vw,79px);line-height:1.1;letter-spacing:-1.4px;white-space:nowrap}
#midnight h2 em{font-size:.6em;margin:0}
#midnight .ceremony-ornament{margin:22px auto 17px}
@media(max-height:700px){#midnight.welcome-chapter{padding-top:49svh}#midnight .invitation-kicker{margin-bottom:14px}#midnight h2{font-size:clamp(45px,14vw,62px);gap:7px}#midnight .ceremony-ornament{margin:14px auto 11px}}

/* Final proportion refinements: quieter names, clearer guiding heart. */
#midnight.welcome-chapter{padding-top:47svh}
#midnight h2{font-size:clamp(45px,14vw,74px);letter-spacing:1.1px}
#open-invitation.following-heart.blessing-gold .heart-outline{stroke:#87571e;stroke-width:1.15;filter:drop-shadow(0 0 2px #fff0c880)}
#open-invitation.following-heart.blessing-gold .heart-links{stroke:#956320;stroke-width:.7;opacity:.7}
#open-invitation.following-heart.blessing-gold .orbit-stars{fill:#87571e;filter:drop-shadow(0 0 2px #fff0c8)}
#open-invitation.following-heart.blessing-gold .star-core{fill:#fff8e5;filter:drop-shadow(0 0 4px #fff5d0) drop-shadow(0 0 9px #a7732b)}
@media(max-height:700px){#midnight.welcome-chapter{padding-top:47svh}#midnight h2{font-size:clamp(43px,13vw,58px);letter-spacing:.9px}}

/* The third chapter: a jade and gold engraved venue card. */
#jade.venue-chapter{align-items:flex-start;padding:43svh 26px 0}
#jade .chapter-copy{max-width:440px}
#jade .arrival-time{font:400 100px/.88 var(--serif);letter-spacing:-3px;margin:0;color:#f5e6b7;text-shadow:0 2px 20px #c3bb8020}
#jade .arrival-time time{display:flex;align-items:baseline;justify-content:center;gap:13px}
#jade .arrival-time small{font:400 26px/1 var(--serif);letter-spacing:3px}
#jade .ceremony-ornament{width:264px;max-width:90%;height:39px;margin:15px auto 12px;color:#c3bb80;stroke-width:.85;opacity:.9}
#jade .venue-location{display:block;text-align:center;margin:0}
#jade .venue-name{font:400 52px/1 var(--serif);letter-spacing:2px;margin:0 0 10px;color:#f3e8cc}
#jade .venue-address{font:10px/1.5 var(--sans);letter-spacing:2px;text-transform:uppercase;color:#d5d6bb;opacity:1;margin:0}
#jade .map-link{position:relative;width:258px;min-height:64px;gap:15px;margin:25px auto 0;padding:13px 16px;border:1px solid #c3bb806b;border-radius:3px;background:linear-gradient(125deg,#c3bb8012,#071b1920);box-shadow:inset 0 0 0 4px #c3bb8008;font:italic 23px/1.1 var(--serif);color:#f4e7c5;transition:background .25s,border-color .25s}
#jade .map-link:before,#jade .map-link:after{content:'';position:absolute;width:5px;height:5px;border:1px solid #c3bb80;background:#153228;transform:rotate(45deg);top:calc(50% - 3px)}
#jade .map-link:before{left:-4px}#jade .map-link:after{right:-4px}
#jade .map-link small{font:7px/1.4 var(--sans);letter-spacing:1.5px;color:#d6cfaa;opacity:1;margin-top:6px}
#jade .map-link svg{stroke:#d4c68d;stroke-width:1;flex-shrink:0}
#jade .map-link .map-pin{width:25px;height:33px}#jade .map-link .map-arrow{width:17px;height:17px;margin-left:auto}
#jade .map-link:hover{transform:none;border-color:#e0cc92;background:#c3bb8020}
@media(max-height:700px){#jade.venue-chapter{padding-top:46svh}#jade .arrival-time{font-size:72px}#jade .arrival-time small{font-size:21px}#jade .ceremony-ornament{height:27px;margin:9px auto}#jade .venue-name{font-size:39px;margin-bottom:7px}#jade .venue-address{font-size:9px;letter-spacing:1.5px}#jade .map-link{min-height:53px;margin-top:16px;padding:9px 14px;font-size:21px}}

/* A complete time invitation, with space for the venue and its map badge. */
#jade .arrival-intro{font:italic 27px/1.15 var(--serif);letter-spacing:.4px;color:#dfd3ae;margin:0 0 9px}
#jade .arrival-time{font-size:84px;line-height:.95;letter-spacing:-1px}
#jade .arrival-time time{gap:12px}
#jade .arrival-time time>span{font:inherit;letter-spacing:inherit}
#jade .arrival-time small{font-size:24px;letter-spacing:2px}
#jade .ceremony-ornament{margin:13px auto 14px}
#jade .venue-name{font-size:49px;letter-spacing:3px}
#jade .map-link{margin-top:22px}
@media(max-height:700px){
 #jade.venue-chapter{padding-top:43svh}
 #jade .arrival-intro{font-size:23px;margin-bottom:6px}
 #jade .arrival-time{font-size:65px}
 #jade .arrival-time small{font-size:20px}
 #jade .ceremony-ornament{margin:9px auto}
 #jade .venue-name{font-size:39px}
 #jade .map-link{margin-top:15px}
}
#jade .arrival-intro{transform:translateY(6px)}

/* Selected location badge: soft oval, with the star pin over the venue. */
#jade .venue-pin{display:block;width:23px;height:29px;stroke:#d8c795;stroke-width:1.1;fill:none;margin:0 auto 7px}
#jade .ceremony-ornament{margin:10px auto 9px;height:32px}
#jade .map-link{width:auto;min-height:44px;height:44px;display:inline-flex;gap:11px;padding:0 24px;margin-top:18px;border:1px solid #bba87380;border-radius:24px;background:#e4cc8510;box-shadow:none;font:italic 21px/1 var(--serif);color:#f0e1b8}
#jade .map-link:before,#jade .map-link:after{display:none}
#jade .map-link .map-symbol{width:20px;height:20px;stroke:#d3bf86;stroke-width:1;fill:none}
@media(max-height:700px){#jade .venue-pin{width:20px;height:25px;margin-bottom:5px}#jade .ceremony-ornament{height:24px;margin:7px auto}#jade .map-link{min-height:42px;height:42px;margin-top:13px}}
/* Give the venue pin presence and bring the time invitation together. */
#jade.venue-chapter{padding-top:41.5svh}
#jade .arrival-intro{transform:none;margin-bottom:-4px}
#jade .venue-pin{width:36px;height:45px;margin-bottom:7px}
@media(max-height:700px){#jade.venue-chapter{padding-top:41.5svh}#jade .arrival-intro{margin-bottom:-3px}#jade .venue-pin{width:30px;height:38px}}
/* Separate the time and venue into two composed groups. */
#jade.venue-chapter{padding-top:39.5svh}
#jade .ceremony-ornament{margin-bottom:25px}
@media(max-height:700px){#jade.venue-chapter{padding-top:40svh}#jade .ceremony-ornament{margin-bottom:16px}}

/* Chapter four: an engraved countdown beneath the sapphire sky. */
#sapphire.countdown-chapter{align-items:flex-start;padding:41svh 24px 0}
#sapphire .chapter-copy{width:100%;max-width:420px}
#sapphire .story-kicker{font-size:8px;letter-spacing:2.6px;color:#c9c5b7;opacity:1;margin:0 0 10px}
#sapphire.countdown-chapter h2{font:400 35px/1.02 var(--serif);letter-spacing:.2px;margin:0;color:#f2e9d6}
#sapphire.countdown-chapter h2 em{font-size:43px;font-weight:400}
#sapphire .ceremony-ornament{display:block;width:252px;max-width:90%;height:31px;margin:12px auto 9px;color:#b6a67c;stroke-width:.85}
#sapphire .countdown{max-width:342px;margin:9px auto 18px;gap:0}
#sapphire .countdown>div{position:relative;padding:0 6px}
#sapphire .countdown>div+div:before{content:'';position:absolute;left:0;top:9px;height:32px;width:1px;background:linear-gradient(transparent,#b6a67c80,transparent)}
#sapphire .countdown strong{font:300 46px/1 var(--serif);font-variant-numeric:tabular-nums;color:#f5e8cb;letter-spacing:1px}
#sapphire .countdown span{font-size:7px;letter-spacing:1.7px;margin-top:7px;color:#c7c9d2}
#sapphire .countdown-celebration>p{font:italic 22px/1.1 var(--serif);color:#ddd1b5;margin:0 0 11px}
#sapphire .countdown-sparks{display:flex;justify-content:center;gap:14px}
#sapphire .countdown-sparks button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;width:82px;min-height:65px;padding:7px 3px;border:1px solid #c1b08555;border-radius:22px 22px 6px 6px;background:linear-gradient(#cfbd8c10,#cfbd8c03);color:#dfc995;transition:background .2s,transform .2s}
#sapphire .countdown-sparks button:hover{background:#cfbd8c18}
#sapphire .countdown-sparks button:active{transform:scale(.96)}
#sapphire .countdown-sparks svg{width:29px;height:29px;stroke:currentColor;stroke-width:1.1}
#sapphire .countdown-sparks span{font:8px/1.2 var(--sans);letter-spacing:.3px;color:#e7dfcf}
@media(max-height:700px){#sapphire.countdown-chapter{padding-top:39svh}#sapphire.countdown-chapter h2{font-size:29px}#sapphire.countdown-chapter h2 em{font-size:35px}#sapphire .story-kicker{font-size:7px;margin-bottom:7px}#sapphire .ceremony-ornament{height:24px;margin:7px auto}#sapphire .countdown{margin:7px auto 13px}#sapphire .countdown strong{font-size:37px}#sapphire .countdown-celebration>p{font-size:19px;margin-bottom:8px}#sapphire .countdown-sparks button{min-height:57px;width:76px}#sapphire .countdown-sparks svg{width:24px;height:24px}}

/* Unboxed sparks: a clear invitation to play, below the countdown. */
#sapphire .countdown-celebration{margin-top:26px}
#sapphire .countdown-celebration>p{margin-bottom:7px}
#sapphire .countdown-celebration>.launch-instruction{font:7px/1.4 var(--sans);letter-spacing:1.6px;text-transform:uppercase;color:#c5bdab;margin:0 0 8px}
#sapphire .countdown-sparks{gap:17px}
#sapphire .countdown-sparks button{min-height:72px;padding:2px 3px 5px;border:0;border-radius:0;background:none;box-shadow:none;gap:7px;color:#e7ca8d}
#sapphire .countdown-sparks button:hover{background:none;color:#fff0c5}
#sapphire .countdown-sparks svg{width:40px;height:40px;stroke-width:1;filter:drop-shadow(0 0 5px #e1b85b65);animation:launch-spark-breathe 3.6s ease-in-out infinite}
#sapphire .countdown-sparks button:nth-child(2) svg{animation-delay:-1.2s}
#sapphire .countdown-sparks button:nth-child(3) svg{animation-delay:-2.4s}
#sapphire .launch-core{fill:#fff3c9;stroke:none;filter:drop-shadow(0 0 3px #ffd987)}
#sapphire .countdown-sparks span{font:italic 15px/1.1 var(--serif);letter-spacing:.2px;color:#e7dfcf}
@keyframes launch-spark-breathe{0%,100%{transform:translateY(1px) scale(.97);opacity:.75}50%{transform:translateY(-2px) scale(1.04);opacity:1}}
@media(max-height:700px){#sapphire .countdown-celebration{margin-top:17px}#sapphire .countdown-sparks button{min-height:62px}#sapphire .countdown-sparks svg{width:33px;height:33px}#sapphire .countdown-sparks span{font-size:14px}#sapphire .countdown-celebration>.launch-instruction{margin-bottom:5px}}
@media(prefers-reduced-motion:reduce){#sapphire .countdown-sparks svg{animation:none}}
/* Flat champagne lettering with quieter gold detail. */
#sapphire.countdown-chapter h2{color:#ead3a2}
#sapphire.countdown-chapter h2 em,#sapphire .countdown strong{color:#ead3a2;background:none;-webkit-text-fill-color:currentColor;text-shadow:none}
#sapphire .story-kicker{color:#cbb27e}
#sapphire .ceremony-ornament{color:#b6a67c}
#sapphire .countdown span{color:#d1bd94}
#sapphire .countdown>div+div:before{background:linear-gradient(transparent,#c99b5180,transparent)}
#sapphire .countdown-celebration>p{color:#e0c38c}
#sapphire .countdown-celebration>.launch-instruction{color:#c5af87}
#sapphire .countdown-sparks span{color:#dfc38a}

/* Rose blessing, relaxed correspondence, and a clear dusk sky for the finale. */
#sun-silk.blessing-chapter h2,#sun-silk .blessing{color:#603944;text-shadow:0 1px #ffe6d650}
#sun-silk .ceremony-ornament{color:#8d5a65}
#aurora.wishes-chapter{align-items:flex-start;padding:42svh 30px 0}
#aurora .story-kicker{font-size:7px;letter-spacing:2.2px;margin:0 0 11px;color:#b8d4bc}
#aurora h2{font:400 37px/1.03 var(--serif);letter-spacing:0;margin:0 0 12px;color:#f0ecda}
#aurora h2 em{font-size:43px}
#aurora .message-intro{font:italic 18px/1.3 var(--serif);color:#d0dac8;margin:0 0 19px}
#aurora .wish-form{max-width:320px}
#aurora .wish-form label{font:8px/1.4 var(--sans);letter-spacing:1px;color:#c2d4c3;margin-bottom:12px}
#aurora .wish-form input,#aurora .wish-form textarea{border:0;border-bottom:1px solid #afc8aa66;border-radius:0;background:#b6d5c408;font:400 20px/1.3 var(--serif);padding:10px 12px;color:#f3eedb;margin-top:5px;box-shadow:none}
#aurora .wish-form textarea{height:87px;border-radius:2px 2px 12px 2px;border:1px solid #afc8aa44}
#aurora .wish-form input:focus,#aurora .wish-form textarea:focus{outline:1px solid #d6d8ad99;outline-offset:3px}
#aurora .wish-form .story-link{font:italic 21px var(--serif);color:#e3d7ad;display:block;margin:13px auto 0;border-bottom:1px solid #b7c1a655;padding:5px 10px}
#aurora .wish-privacy{text-align:center;font-size:7px;color:#b8cebf;opacity:1}
#aurora .wish-status{text-align:center;margin-top:6px}
.world:after{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 100% 40% at 50% 80%,#a46e9f39,transparent 75%),linear-gradient(0deg,#442e4c44,transparent 60%);opacity:var(--finale-glow,0)}
#obsidian.celebration-chapter{align-items:flex-start;padding:66svh 14px 0}
#obsidian .chapter-copy{max-width:400px}
#obsidian h2.final-thanks{font:italic 24px/1.15 var(--serif);letter-spacing:.2px;color:#e9d5ce;margin:0 0 18px}
#obsidian .finale-playground{height:20svh;min-height:170px;max-height:215px;display:flex;flex-direction:column;justify-content:space-between}
#obsidian .launch-all{display:flex;gap:9px;min-height:40px;margin:0 auto 6px;padding:0 10px;background:none;border:0;border-radius:0;box-shadow:none;color:#e9c38e}
#obsidian .launch-all span{font:italic 21px/1.1 var(--serif)}
#obsidian .launch-all svg{width:34px;height:34px;stroke:currentColor;stroke-width:1;filter:drop-shadow(0 0 5px #e7bd8a70);animation:launch-spark-breathe 3.6s ease-in-out infinite}
#obsidian .firework-controls{width:100%;max-width:380px;margin:0 auto;gap:0;flex:1;align-content:space-between}
#obsidian .firework-choice{padding:0;gap:2px;min-height:42px;justify-content:center;color:#e9c796}
#obsidian .firework-choice svg{width:27px;height:27px;padding:0;border:0;border-radius:0;background:none;stroke-width:1;filter:drop-shadow(0 0 4px #e6b88060);animation:launch-spark-breathe 3.6s ease-in-out infinite}
#obsidian .firework-choice:nth-child(3n+2) svg{animation-delay:-1.2s}
#obsidian .firework-choice:nth-child(3n) svg{animation-delay:-2.4s}
#obsidian .firework-choice span{font:italic 10px/1.1 var(--serif);letter-spacing:0;color:#e0c7bd;white-space:nowrap}
#obsidian .firework-choice:hover svg{background:none;color:#fff0d5}
#obsidian .replay[hidden]{display:none}
@media(max-height:700px){#aurora.wishes-chapter{padding-top:37svh}#aurora h2{font-size:30px}#aurora h2 em{font-size:34px}#aurora .message-intro{font-size:16px;margin-bottom:10px}#aurora .wish-form textarea{height:62px}#aurora .wish-form label{margin-bottom:8px}#aurora .wish-form input{padding:6px 10px}#aurora .wish-form .story-link{margin-top:7px}#obsidian.celebration-chapter{padding-top:60svh}#obsidian h2.final-thanks{font-size:21px;margin-bottom:12px}#obsidian .finale-playground{min-height:165px}}
@media(prefers-reduced-motion:reduce){#obsidian .firework-choice svg,#obsidian .launch-all svg{animation:none}}
/* Keep the message clear of its navigation heart. */
#aurora.wishes-chapter{padding-top:39svh}
#aurora .wish-form textarea{height:70px}
@media(max-height:700px){#aurora.wishes-chapter{padding-top:34svh}#aurora .wish-form textarea{height:56px}}
/* Luminous champagne constellation on the rose blessing. */
#open-invitation.following-heart.blessing-gold .heart-outline{stroke:#fff0cd;stroke-width:1.35;filter:drop-shadow(0 1px 1px #80552c) drop-shadow(0 0 3px #fff8e2)}
#open-invitation.following-heart.blessing-gold .heart-links{stroke:#fff3db;stroke-width:.8;opacity:.9}
#open-invitation.following-heart.blessing-gold .orbit-stars,#open-invitation.following-heart.blessing-gold .heart-traveller{fill:#fff9eb;filter:drop-shadow(0 0 3px #fff0bd)}
#open-invitation.following-heart.blessing-gold .star-core{fill:#ffffff;filter:drop-shadow(0 0 5px #fffdf0) drop-shadow(0 0 12px #ffe4a6)}
#open-invitation.following-heart.blessing-gold .core-rays{stroke:#fff4da;filter:drop-shadow(0 0 4px #fff0bf)}
#open-invitation.following-heart.blessing-gold .entry-orbit:before{background:radial-gradient(circle,#fffff0b0 0%,#ffe9af50 18%,#e0ba6720 40%,transparent 70%)}
#open-invitation.following-heart.blessing-gold .entry-orbit svg{animation-name:champagne-heart-pulse}
@keyframes champagne-heart-pulse{0%,100%{transform:scale(.96);opacity:.9;filter:drop-shadow(0 0 3px #d6b66b60)}50%{transform:scale(1.08);opacity:1;filter:drop-shadow(0 0 8px #fff0c080)}}
/* Airier invitation names, twenty percent smaller. */
#midnight h2{font-size:clamp(36px,11.2vw,59.2px);letter-spacing:2.2px;gap:12px}
@media(max-height:700px){#midnight h2{font-size:clamp(34.4px,10.4vw,46.4px);letter-spacing:1.8px;gap:10px}}

/* One quiet note, no name field. */
#aurora.wishes-chapter{padding-top:48svh}
#aurora h2{margin-bottom:24px}
#aurora h2 em{font-size:46px}
#aurora .wish-form textarea{height:116px;padding:15px;font-size:21px}
#aurora .wish-form .story-link{margin-top:17px;min-width:100px;font-size:23px}
@media(max-height:700px){#aurora.wishes-chapter{padding-top:44svh}#aurora h2{margin-bottom:17px}#aurora h2 em{font-size:39px}#aurora .wish-form textarea{height:90px}#aurora .wish-form .story-link{margin-top:12px}}

/* Six-screen finale: more room for each spark. */
#obsidian.celebration-chapter{padding-top:57svh}
#obsidian h2.final-thanks{font:italic 18px/1.25 var(--serif);margin-bottom:17px;white-space:nowrap}
#obsidian .finale-playground{height:29svh;min-height:244px;max-height:290px}
#obsidian .launch-all{margin-bottom:12px}
#obsidian .firework-controls{grid-template-columns:repeat(8,1fr);gap:5px 0;max-width:350px}
#obsidian .firework-choice,#obsidian .firework-choice:nth-child(n+6){grid-column:auto / span 2;min-height:44px;gap:3px}
#obsidian .firework-choice:nth-child(13){grid-column:2 / span 2}
#obsidian .firework-choice svg{width:32px;height:32px}
#obsidian .firework-choice span{font-size:12px}
@media(max-height:700px){#obsidian.celebration-chapter{padding-top:49svh}#obsidian h2.final-thanks{font-size:17px;margin-bottom:12px}#obsidian .finale-playground{min-height:228px}#obsidian .firework-choice svg{width:28px;height:28px}}

/* A personal note on a generous, softly gilded card. */
#aurora.wishes-chapter{padding-top:43svh}
#aurora h2{font-size:34px;line-height:1.07;margin-bottom:24px}
#aurora h2 em{font-size:40px}
#aurora .wish-form{max-width:330px}
#aurora .wish-form textarea{height:145px;padding:20px 18px;border:1px solid #c6be8a88;border-radius:15px;background:linear-gradient(145deg,#d6dfb414,#e1c88905);box-shadow:inset 0 0 0 4px #041b1d55,inset 0 0 0 5px #c6be8a20,0 8px 26px #00000012;font:italic 21px/1.5 var(--serif);color:#f2eed8}
#aurora .wish-form textarea::placeholder{opacity:.7;color:#d4d7bd}
#aurora .wish-form .story-link{border:0;background:none;box-shadow:none;text-decoration:none;font:italic 26px/1 var(--serif);padding:12px 22px;margin-top:12px;color:#eee1b8}
#aurora .wish-form .story-link:before,#aurora .wish-form .story-link:after{display:none}
@media(max-height:700px){#aurora.wishes-chapter{padding-top:39svh}#aurora h2{font-size:29px;margin-bottom:17px}#aurora h2 em{font-size:34px}#aurora .wish-form textarea{height:116px;padding:16px;font-size:20px}#aurora .wish-form .story-link{font-size:23px;margin-top:8px}}

/* A sealed letter, and a little more sky between the finale elements. */
#aurora h2{font:italic 36px/1.15 var(--serif);letter-spacing:0;white-space:nowrap;margin-bottom:27px}
#aurora .wish-form .story-link{display:flex;align-items:center;justify-content:center;gap:12px}
#aurora .send-envelope{width:37px;height:29px;stroke:#e4ce94;stroke-width:1;overflow:visible}
#aurora .envelope-seal{fill:#af8558;stroke:#ead4a4;stroke-width:.7}
#aurora .envelope-heart{fill:#fff1c9;stroke:none}
#obsidian.celebration-chapter{padding-top:45svh}
#obsidian h2.final-thanks{font-size:20px;margin-bottom:42px}
#obsidian .finale-playground{height:auto;min-height:0;max-height:none;display:block}
#obsidian .launch-all{flex-direction:column;gap:7px;margin:0 auto 23px;padding:0;min-height:65px}
#obsidian .launch-all svg{width:39px;height:39px}
#obsidian .launch-all span{font-size:21px}
#obsidian .firework-controls{grid-template-columns:repeat(8,1fr);row-gap:12px;max-width:360px}
#obsidian .firework-choice:nth-child(n){grid-column:auto / span 2;min-height:47px;gap:5px}
#obsidian .firework-choice:nth-child(1),#obsidian .firework-choice:nth-child(8){grid-column:2 / span 2}
#obsidian .firework-choice:nth-child(4),#obsidian .firework-choice:nth-child(11){grid-column:1 / span 2}
#obsidian .firework-choice svg{width:34px;height:34px}
#obsidian .firework-choice span{font-size:12px}
.world:after{background:radial-gradient(ellipse 105% 30% at 50% 86%,#b37d9d32,transparent 75%),linear-gradient(0deg,#592a6140,transparent 65%)}
@media(max-height:700px){#aurora h2{font-size:30px;margin-bottom:20px}#obsidian.celebration-chapter{padding-top:42svh}#obsidian h2.final-thanks{font-size:18px;margin-bottom:25px}#obsidian .launch-all{min-height:55px;margin-bottom:16px;gap:5px}#obsidian .launch-all svg{width:31px;height:31px}#obsidian .firework-controls{row-gap:7px}#obsidian .firework-choice:nth-child(n){min-height:40px;gap:4px}#obsidian .firework-choice svg{width:29px;height:29px}}

/* Nine sparks, staggered two / three / four. */
#obsidian .final-symbols{display:block;margin-top:10px;font:22px/1 Georgia,serif;letter-spacing:12px;color:#e9d6af}
#obsidian h2.final-thanks{font-size:20px;margin-bottom:28px}
#obsidian .firework-controls{row-gap:20px}
#obsidian .firework-choice:nth-child(n){grid-column:auto / span 2;min-height:54px}
#obsidian .firework-choice:nth-child(1){grid-column:3 / span 2}
#obsidian .firework-choice:nth-child(3){grid-column:2 / span 2}
#obsidian .firework-choice:nth-child(6){grid-column:1 / span 2}
#obsidian .firework-choice:nth-child(-n+2) svg{width:40px;height:40px}
@media(max-height:700px){#obsidian h2.final-thanks{font-size:18px;margin-bottom:18px}#obsidian .firework-controls{row-gap:12px}#obsidian .firework-choice:nth-child(n){min-height:44px}#obsidian .firework-choice:nth-child(-n+2) svg{width:32px;height:32px}}

#obsidian .final-symbols{display:inline-block;vertical-align:baseline;margin:0 0 0 3px;font:16px/1 Georgia,serif;letter-spacing:2px;color:inherit}

/* Letter-writing proportions and a grounded finale console. */
#aurora.wishes-chapter{padding-top:42svh}
#aurora h2{font:28px/1.1 var(--serif);margin-bottom:12px}
#aurora h2 span{font-family:var(--sans);font-size:17px;font-weight:300;letter-spacing:1px}
#aurora h2 em{font:italic 35px/1 var(--serif);margin-left:5px}
#aurora .ceremony-ornament{width:230px;height:35px;margin:0 auto 16px;color:#d5c38f;stroke:currentColor}
#aurora .wish-form textarea{height:185px}
#obsidian h2.final-thanks{margin-bottom:14px}
#obsidian>.chapter-copy>.ceremony-ornament{width:235px;height:34px;margin:0 auto;stroke:#dac598;color:#dac598}
#obsidian .finale-playground{position:absolute;left:22px;right:22px;bottom:max(35px,env(safe-area-inset-bottom));margin:0}
#obsidian .firework-choice.finale-all{align-self:start;padding-top:0}
#obsidian .firework-choice.finale-all svg{width:43px;height:43px}
@media(max-height:700px){#aurora.wishes-chapter{padding-top:37svh}#aurora h2{margin-bottom:8px}#aurora h2 span{font-size:15px}#aurora h2 em{font-size:30px}#aurora .ceremony-ornament{height:28px;margin-bottom:10px}#aurora .wish-form textarea{height:140px}#obsidian .finale-playground{bottom:24px}#obsidian h2.final-thanks{margin-bottom:8px}#obsidian>.chapter-copy>.ceremony-ornament{height:27px}}

#obsidian .final-symbols{display:inline-flex;align-items:center;gap:5px;vertical-align:-2px;margin-left:5px;letter-spacing:0}
#obsidian .final-symbols svg{width:17px;height:16px;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
#obsidian .final-symbols svg+svg{width:20px}

#midnight h2{letter-spacing:4.8px}
@media(max-height:700px){#midnight h2{letter-spacing:4px}}
#obsidian .finale-playground{position:relative;left:auto;right:auto;bottom:auto;margin-top:clamp(40px,calc(55svh - 300px),165px)}
@media(max-height:700px){#obsidian .finale-playground{bottom:auto;margin-top:clamp(30px,calc(58svh - 300px),100px)}}

/* Wider inscription and the final star positions. */
#midnight h2{font-size:clamp(32.4px,10.08vw,53.3px);letter-spacing:9.6px;gap:10px}
#obsidian.celebration-chapter{padding-top:47svh}
#obsidian .finale-playground{margin-top:clamp(30px,calc(53svh - 290px),158px)}
#obsidian .firework-choice.finale-all span{white-space:nowrap;font-size:12px}
@media(max-height:700px){#midnight h2{font-size:clamp(31px,9.36vw,42px);letter-spacing:8px;gap:8px}#obsidian.celebration-chapter{padding-top:44svh}#obsidian .finale-playground{margin-top:clamp(20px,calc(56svh - 290px),96px)}}
#midnight h2{font-size:clamp(36px,11.2vw,59.2px)}
@media(max-height:700px){#midnight h2{font-size:clamp(34.4px,10.4vw,46.4px)}}

#aurora h2 span{font:32px/1.1 var(--serif);letter-spacing:0}
#aurora h2 em{font:italic 32px/1.1 var(--serif)}
#obsidian .finale-playground{margin-top:clamp(20px,calc(53svh - 322px),126px)}
@media(max-height:700px){#aurora h2 span{font-size:29px}#aurora h2 em{font-size:29px}#obsidian .finale-playground{margin-top:clamp(12px,calc(56svh - 314px),72px)}}

#obsidian .firework-choice[data-firework="2"] svg{stroke-width:1.4;opacity:1;filter:drop-shadow(0 0 3px #e7c78c55)}

/* One viewport model for real phones, with browser chrome expanded or collapsed.
   Only the background bleeds into unsafe regions; content keeps its safe spacing. */
html{background-color:var(--sky);min-height:100%;}
body{background-color:var(--floor);}
.world{z-index:0;pointer-events:none;background-color:var(--sky);}
main{position:relative;z-index:1;}
.opening,.chapter,.chapter:last-child{height:var(--page-height,100dvh);min-height:var(--page-height,100dvh);}
#midnight.welcome-chapter,#sun-silk.blessing-chapter{padding-top:calc(var(--page-height,100dvh) * .47);}
#jade.venue-chapter{padding-top:calc(var(--page-height,100dvh) * .395);}
#sapphire.countdown-chapter{padding-top:calc(var(--page-height,100dvh) * .41);}
#aurora.wishes-chapter{padding-top:calc(var(--page-height,100dvh) * .42);}
#obsidian.celebration-chapter{padding-top:calc(var(--page-height,100dvh) * .47);}
@media(max-height:700px){
 #jade.venue-chapter{padding-top:calc(var(--page-height,100dvh) * .40);}
 #sapphire.countdown-chapter{padding-top:calc(var(--page-height,100dvh) * .39);}
 #aurora.wishes-chapter{padding-top:calc(var(--page-height,100dvh) * .37);}
 #obsidian.celebration-chapter{padding-top:calc(var(--page-height,100dvh) * .44);}
}

/* Safari treats viewport-sized fixed canvases as overlays and can preserve their
   previous chrome color. Dedicated shallow edges are sampled as live surfaces.
   Their fades join the scene without changing content or navigation geometry. */
.browser-edge{position:fixed;left:0;right:0;height:12px;z-index:60;pointer-events:none;}
.browser-edge-top{top:0;background-color:var(--sky);}
.browser-edge-bottom{bottom:0;background-color:var(--floor);}
.browser-edge:after{content:"";position:absolute;left:0;right:0;height:44px;pointer-events:none;}
.browser-edge-top:after{top:100%;background:linear-gradient(to bottom,var(--sky),transparent);}
.browser-edge-bottom:after{bottom:100%;background:linear-gradient(to top,var(--floor),transparent);}

/* A constellation first; the fully rendered wax turns into the light afterwards. */
.seal-loading-reveal{position:fixed;inset:0;z-index:4;pointer-events:none;transform-origin:50% 44%;}
body.boot-loading{background:#191818!important;}
body.boot-loading .browser-edge{background-color:#191818;}
body.boot-loading .browser-edge:after{background:none;}
body.boot-loading header{opacity:0;}
body.boot-revealing header{animation:opening-atmosphere 1.8s ease both;}
body.boot-revealing .seal-loading-reveal{animation:loading-seal-turn 1.8s cubic-bezier(.2,.7,.2,1) both;}
body.boot-loading:not(.boot-assembled) #open-invitation .entry-orbit,
body.boot-loading:not(.boot-assembled) #open-invitation .entry-orbit svg{animation:none;transform:none;}
body.boot-loading:not(.boot-assembled) .heart-outline,
body.boot-loading:not(.boot-assembled) .heart-links{stroke-dasharray:100;stroke-dashoffset:100;animation:constellation-form 1.3s ease forwards;}
body.boot-loading:not(.boot-assembled) .heart-links{animation-delay:.2s;}
body.boot-loading:not(.boot-assembled) .orbit-stars circle{opacity:0;animation:constellation-star .5s ease forwards;animation-delay:calc(var(--star-order,0)*.065s);}
body.boot-loading:not(.boot-assembled) .heart-traveller{opacity:0;}
body.boot-loading:not(.boot-assembled) .star-core{opacity:.45;}
body.boot-loading:not(.boot-assembled) .entry-orbit:before{opacity:.25;animation:none;}
@keyframes constellation-form{to{stroke-dashoffset:0;}}
@keyframes constellation-star{to{opacity:1;}}
@keyframes opening-atmosphere{from{opacity:0;}to{opacity:1;}}
@keyframes loading-seal-turn{from{opacity:0;transform:perspective(1100px) rotateY(-24deg) rotateZ(-5deg) scale(.94);}35%{opacity:1;}to{opacity:1;transform:perspective(1100px) rotateY(0) rotateZ(0) scale(1);}}
@media(prefers-reduced-motion:reduce){
 body.boot-loading .heart-outline,body.boot-loading .heart-links{stroke-dashoffset:0!important;animation:none!important;}
 body.boot-loading .orbit-stars circle{opacity:1!important;animation:none!important;}
 body.boot-revealing .world,body.boot-revealing header,body.boot-revealing .seal-loading-reveal{animation:none;}
}
