:root{--gold:#e7cd86;--ivory:#fff4d9;--ink:#574124;--serif:'Cormorant Garamond',Georgia,serif;--script:'Great Vibes','Cormorant Garamond',cursive}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;overscroll-behavior:none}body{background:#193e2e;color:var(--ivory);font-family:var(--serif);display:grid;place-items:center;-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer;font:inherit;color:inherit}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:2px solid #f7ce55;outline-offset:5px}button:disabled{cursor:default}button[hidden],[hidden]{display:none!important}.defs{position:absolute;width:0;height:0}.desktop-note{position:fixed;left:0;top:43%;width:calc((100vw - 480px)/2);text-align:center;color:#d4d3ac99;pointer-events:none}.desktop-note>svg{width:60px;height:45px;display:block;margin:0 auto 30px;opacity:.5}.desktop-note>span{font-size:19px;letter-spacing:4px}.desktop-note p{font-style:italic;font-size:22px}.desktop-note small{font-size:13px;opacity:.6}.desktop-right{left:auto;right:0;top:49%}.desktop-right>span{font-size:17px;letter-spacing:6px}#theater{position:relative;isolation:isolate;width:min(100vw,480px);height:100svh;height:100dvh;overflow:hidden;background:#143e32;box-shadow:0 0 100px #07170c88;container-type:size;perspective:1300px}#story{position:absolute;inset:0}.scene{position:absolute;inset:0;overflow:hidden;isolation:isolate;visibility:hidden;pointer-events:none}.scene.active,.scene.arriving,.scene.departing{visibility:visible}.scene.active{z-index:3;pointer-events:auto}.scene.arriving{z-index:2}.scene.departing{z-index:4;pointer-events:none}.landscape{position:absolute;inset:0;z-index:-3;background-size:cover;background-position:50% 50%;will-change:transform}.kingdom-landscape,.gate-landscape{background-image:url('assets/kingdom-v3.webp')}.hall-landscape{background-image:url('assets/hall-v2.webp')}.gate-landscape{filter:brightness(.55);transform:scale(1.15)}.gate-haze{position:absolute;inset:0;z-index:-2;background:linear-gradient(#123c24bb,#143e1c18 50%,#092918a0)}.gate-copy{position:absolute;top:7cqh;left:7%;width:86%;text-align:center;z-index:4;text-shadow:0 2px 15px #0b2316}.gate-copy>p{font-size:4.4cqw;margin:0 0 2.2cqh}.gate-copy h1{font:400 10.3cqw/1.02 var(--script);margin:0;color:#f3deb0}.flourish{width:38cqw;height:8cqw;color:var(--gold);flex-shrink:0}.gate-copy .flourish{margin-top:1.3cqh;width:32cqw}.gate-doors{position:absolute;top:27cqh;height:64cqh;left:0;width:100%;perspective:1200px;z-index:2}.door-half{position:absolute;top:0;width:50%;height:100%;overflow:hidden;backface-visibility:hidden;transform-style:preserve-3d}.door-half img{position:absolute;width:200%;height:100%;object-fit:fill;max-width:none}.door-left{left:0;transform-origin:0 50%}.door-right{right:0;transform-origin:100% 50%}.door-right img{right:0}.key-button{position:absolute;z-index:5;top:56cqh;left:calc(50% - 13cqw);width:26cqw;height:26cqw;border-radius:50%;border:1px solid #f8e5ac;background:radial-gradient(circle,#183d29 50%,#456638);box-shadow:0 0 0 4px #bc9a50,0 0 0 6px #836728,0 4px 20px #0008;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:1cqw;line-height:.95}.key-button svg{width:14cqw;height:6cqw;color:#eed396}.key-button span{font:5.5cqw/.98 var(--serif);color:#f8e7c2}.key-button:hover{filter:brightness(1.18)}.gate-bottom{position:absolute;bottom:4cqh;width:100%;text-align:center;font-size:3.5cqw;line-height:1.2;color:#ead5a5;z-index:5;margin:0}.soft-shadow{position:absolute;inset:0;z-index:-2;background:linear-gradient(#0a24142b,transparent 45%,#07241880)}.foliage{position:absolute;inset:-3%;z-index:5;background:url('assets/vines-layer.webp') center/100% 100% no-repeat;pointer-events:none;will-change:transform}.foliage-left{clip-path:inset(0 50% 0 0);transform-origin:0 100%}.foliage-right{clip-path:inset(0 0 0 50%);transform-origin:100% 100%}.glass-letter{position:absolute;top:17%;left:12%;width:76%;height:70%;z-index:6;background:linear-gradient(135deg,#172f1db0,#25432e6b);border:1px solid #e6c58080;border-radius:44% 44% 8% 8% / 14% 14% 5% 5%;box-shadow:inset 0 0 0 5px #cfb5720a,0 0 20px #a8c1761a;backdrop-filter:blur(1px)}.glass-letter:before,.glass-letter:after{content:'❦';position:absolute;color:#d6bd70c9;font-size:11cqw;left:calc(50% - 4cqw);line-height:1}.glass-letter:before{top:-2cqh}.glass-letter:after{bottom:-2cqh;transform:rotate(180deg)}.letter-content{height:100%;padding:5cqh 2cqw 4cqh;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center}.script{font-family:var(--script);font-weight:400}.letter-content>.script{font-size:7.7cqw;line-height:1.05;margin:0 0 3.5cqh;color:#f2d69a}.small-date{font:italic 4.3cqw var(--serif);margin:0 0 2cqh}.names{font:500 10.6cqw/.9 var(--serif);letter-spacing:-.5px;margin:0;text-align:center;color:#f1d98e}.names span{display:block;font:7.4cqw/.9 var(--script);margin:1.3cqh 0}.letter-content .flourish{margin:2.1cqh 0 1.3cqh}.invitation{font-size:4.7cqw;line-height:1.2;margin:0}.warm-light{position:absolute;inset:0;z-index:-2;background:radial-gradient(ellipse at 50% 0,#ffc64d50,transparent 65%)}.chandelier{position:absolute;width:65%;height:35cqh;top:-5cqh;left:17.5%;z-index:4;pointer-events:none;transform-origin:50% 0}.chandelier img{display:block;width:100%;height:100%;object-fit:contain;transform-origin:50% 0}.scene.active .chandelier img{animation:sway 6s ease-in-out infinite alternate}.paper{position:absolute;left:3%;width:94%;height:73%;top:18%;z-index:5;background:url('assets/royal-paper.webp') center/100% 100% no-repeat;filter:drop-shadow(0 12px 16px #00150c55);transform-origin:50% 15%;color:var(--ink)}.paper-content{position:absolute;top:23%;bottom:14%;left:14%;right:14%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.paper .script{font-size:7.2cqw;line-height:1;margin:0}.paper .flourish{color:#aa8237;width:29cqw;height:6cqw;margin:1.5cqh 0}.body-heading{font-size:5.5cqw;line-height:.95;font-weight:400;margin:1.2cqh 0}.wedding-date{font:12.2cqw/1.15 var(--script);color:#486b32;margin:2.1cqh 0 0}.weekday{font-size:2.7cqw;letter-spacing:4px;margin:1cqh 0 2cqh}.paper-link{font:italic 3.8cqw var(--serif);background:none;border:0;border-bottom:1px solid #9f894e88;padding:1cqh 0;color:#674d28}.date-paper{top:19%;height:71%}.date-paper .paper-content{top:27%;bottom:13%}.portrait-title{position:absolute;top:5.5cqh;left:15%;width:70%;font-size:8cqw;line-height:1.05;text-align:center;margin:0;z-index:6;color:#f1d69e;text-shadow:0 2px 14px #001e0e}.portrait-frame{position:absolute;top:18%;height:60%;left:10%;width:80%;z-index:5;filter:drop-shadow(0 10px 25px #00150c)}.frame-art{position:absolute;inset:0;width:100%;height:100%;z-index:2}.portrait-photo{position:absolute;left:11.7%;right:11.7%;top:22.5%;bottom:14.2%;z-index:3;border:2px solid #a88332;border-radius:4px;overflow:hidden;background:#bcb895}.portrait-photo>img{width:100%;height:100%;object-fit:cover;object-position:50% 64%;display:block}.portrait-caption{position:absolute;top:79%;width:100%;text-align:center;font-size:4.7cqw;line-height:1.2;z-index:6;margin:0;text-shadow:0 2px 10px #092713}.portrait-caption span{display:block;font-size:6.5cqw;color:#e7d097;margin-top:1cqh}.velvet{position:absolute;top:0;height:100%;width:52%;z-index:9;background:repeating-linear-gradient(90deg,#072b20,#2e6440 17%,#123723 35%,#3d6944 55%,#103322 78%);box-shadow:5px 0 30px #0008;border-bottom:9px solid #c7a653}.velvet:after{content:'';position:absolute;top:0;bottom:0;width:30px;right:2px;background:repeating-linear-gradient(0deg,#b7934c 0 2px,transparent 2px 35px);opacity:.65}.velvet-left{left:-48%;border-right:1px solid #c8a760;transform-origin:0 0}.velvet-right{right:-48%;border-left:1px solid #c8a760;transform-origin:100% 0}.venue-window{position:absolute;inset:0;z-index:-2;background:radial-gradient(ellipse at 50% 40%,#89ae7f1a,transparent 65%)}.venue-paper{top:12%;height:78%}.venue .chandelier{top:-12cqh;height:30cqh;width:55%;left:22.5%}.venue-paper .paper-content{top:24%;bottom:13%}.venue-paper .small-date{font-size:4cqw;margin:0 0 1cqh}.venue-paper .script{font-size:6.4cqw}.tiny-crown{width:13cqw;height:10cqw;color:#a98337;flex-shrink:0}.venue .tiny-crown{margin:1.7cqh 0 .8cqh}.venue h2{font:500 7cqw/1 var(--serif);margin:1cqh 0 1.7cqh;color:#4a622d}.address{font-size:4.5cqw;line-height:1.1;margin:0 0 2.5cqh}.map-button{font-size:3.7cqw;color:#f5e7c0;border:1px solid #547344;background:linear-gradient(#5a7d3c,#355624);padding:1.3cqh 4cqw;box-shadow:0 2px 5px #45602133}.venue-note{font-size:4.3cqw;line-height:1.1;margin:2.7cqh 0 0}.rose-border{position:absolute;left:-5%;right:-5%;height:31%;bottom:-11%;background:url('assets/vines-layer.webp') center bottom/100% auto;z-index:6;pointer-events:none;mask-image:linear-gradient(transparent,#000 45%)}.drop-curtain{position:absolute;inset:0;z-index:9;background:repeating-linear-gradient(90deg,#0c3327,#326847 12%,#123d2b 24%);border-bottom:18px double #b99c50;transform:translateY(-105%);box-shadow:0 20px 30px #0006}.dress-paper{top:8%;height:80%}.dress-paper .paper-content{top:24%;bottom:17%;left:13%;right:13%;justify-content:center}.dress-paper .small-date{font-size:2.6cqw;letter-spacing:1px;margin:0 0 1.6cqh}.dress-paper .script{font-size:8.5cqw;margin-bottom:1.6cqh}.dress-description{font-size:4.2cqw;line-height:1.1;margin:0 0 2.2cqh}.palette{display:flex;gap:2.8cqw;width:100%;justify-content:center;margin:1.1cqh 0 2.3cqh}.swatch{width:12cqw;text-align:center}.swatch i{display:block;width:10cqw;height:10cqw;border-radius:50%;background:var(--color);box-shadow:0 0 0 3px #f1e2bb,0 0 0 4px #b79f64,0 5px 6px #614e2230;margin:auto auto 1.2cqh}.swatch span{display:block;font:2.9cqw/1.05 var(--serif)}.dress-note{font:italic 3.7cqw/1.1 var(--serif);margin:0 0 1.5cqh}.dressing .paper-link{font-size:3.6cqw}.mood-mini{position:absolute;width:23%;height:15%;bottom:6%;padding:4px;background:#e0c58b;border:1px solid #be9a48;box-shadow:0 4px 15px #00190988;z-index:7}.mood-mini img{width:100%;height:100%;object-fit:cover}.mood-left{left:7%;transform:rotate(-13deg)}.mood-right{right:7%;transform:rotate(13deg)}.night-shade{position:absolute;inset:0;z-index:-2;background:linear-gradient(#112e6bc9,#05231aa8 75%,#052514e6);mix-blend-mode:multiply}.final-letter{position:absolute;top:21%;left:13%;width:74%;height:62%;z-index:6;text-align:center;padding:3cqh 1cqw;display:flex;flex-direction:column;align-items:center;justify-content:center;text-shadow:0 2px 12px #001e19;background:radial-gradient(ellipse,#092b207d,transparent 73%)}.final-letter .tiny-crown{color:#f5d984;width:17cqw;height:12cqw;margin-bottom:2cqh}.final-letter h2{font-size:9.5cqw;line-height:1.1;margin:0 0 3cqh;color:#f6dc9c}.final-letter>p:not(.script){font-size:4.4cqw;line-height:1.1;margin:0 0 2cqh}.final-letter .small-date{font-size:3.8cqw!important;letter-spacing:1px}.final-letter .flourish{margin:1cqh 0 1.5cqh}.final-letter .finale-names{font-size:7.5cqw;line-height:1.2;margin:0 0 2.6cqh}.restart{font:italic 3.8cqw var(--serif);border:0;border-bottom:1px solid #d5c18180;background:none;padding:1cqh 0}.sound-toggle{position:absolute;top:3cqh;right:3.5cqw;width:10cqw;height:10cqw;border:1px solid #f1d690;border-radius:50%;background:#26482ae8;color:#ecd292;z-index:60;display:grid;place-items:center;box-shadow:0 0 0 3px #a5a05e30}.sound-toggle svg{width:5cqw;height:5cqw}.music-slash{position:absolute;width:7cqw;height:1px;background:#f2d799;transform:rotate(-45deg)}.sound-toggle[aria-pressed=true] .music-slash{display:none}.previous{position:absolute;left:4cqw;top:3.5cqh;z-index:60;width:8cqw;height:8cqw;border:1px solid #f4d58c80;border-radius:50%;background:#153b2766;font-size:5cqw;color:#eed291}.previous:disabled{opacity:.3}.scroll-hint{position:absolute;bottom:3cqh;left:37%;width:26%;height:8.5cqh;text-align:center;z-index:40;border:0;background:none;color:#f3daa2;text-shadow:0 2px 6px #183b20;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0}.scroll-hint .flourish{position:absolute;top:-.5cqh;width:26cqw;height:6cqw;opacity:.7}.scroll-hint>span{font:3.8cqw/.95 var(--serif);position:relative;z-index:2;margin-top:1cqh}.scroll-hint>b{font:400 6cqw var(--serif);line-height:1.1;margin-top:.5cqh;animation:hintFloat 1.6s ease-in-out infinite}.scene-count{position:absolute;right:5cqw;bottom:3.5cqh;z-index:40;font-size:2.7cqw;letter-spacing:1px;opacity:.65}.play-status{position:absolute;bottom:4cqh;left:29%;width:42%;z-index:45;text-align:center;font:italic 3.5cqw var(--serif);text-shadow:0 2px 6px #183b20;pointer-events:none}.play-status i{display:block;width:100%;height:1px;background:#d8bf6b44;margin-top:1.5cqh;overflow:hidden}.play-status i:after{content:'';display:block;width:100%;height:100%;background:#f1d78e;transform-origin:left;animation:progress var(--duration,6s) linear both}.transition-glow{position:absolute;inset:0;background:radial-gradient(ellipse,#ffe9bba0,transparent 70%);z-index:30;pointer-events:none;opacity:0}.magic-dust{position:absolute;inset:0;pointer-events:none;z-index:8;overflow:hidden}.magic-dust i{position:absolute;left:var(--x);top:var(--y);height:3px;width:3px;background:#ffe6a0;border-radius:50%;box-shadow:0 0 6px 3px #eed48040;opacity:0}.scene.active .magic-dust i,.scene.arriving .magic-dust i{animation:dust var(--d) ease-in-out var(--delay) infinite}.lanterns,.fireworks{position:absolute;inset:0;pointer-events:none;z-index:4}.lanterns i{position:absolute;left:var(--x);bottom:-12%;width:4cqw;height:6cqw;background:radial-gradient(ellipse at 50% 75%,#ffefb7,#da9b3d);border-radius:3px 3px 40% 40%;box-shadow:0 0 22px #ffdc7866;opacity:0}.finale.active .lanterns i{animation:lantern 16s linear var(--delay) infinite}.firework{position:absolute;width:10px;height:10px;left:var(--x);top:var(--y);transform:scale(0);opacity:0}.firework i{position:absolute;left:0;top:0;width:2px;height:20px;background:#ffe8ae;border-radius:2px;transform:rotate(calc(var(--i)*30deg)) translateY(-20px);transform-origin:center 20px;box-shadow:0 -13px 2px #ffe7a4}.finale.active .firework{animation:firework 5s ease-out var(--delay) infinite}.toast{position:absolute;left:8%;right:8%;bottom:15cqh;z-index:90;text-align:center;padding:12px 16px;background:#153c2deb;border:1px solid #bda66a;font-size:17px;opacity:0;pointer-events:none;transition:opacity .2s}.toast.visible{opacity:1}dialog{background:#eadebc;color:#4a3b24;border:2px solid #b0904e;max-width:850px;width:92vw;max-height:90dvh;padding:25px 18px;overscroll-behavior:contain}dialog::backdrop{background:#052616e8;backdrop-filter:blur(6px)}dialog h2{font:32px var(--serif);text-align:center;margin:15px 0 25px}dialog>div{display:flex;gap:18px;align-items:flex-start}dialog img{width:calc(50% - 9px);height:auto}#moodClose{position:absolute;top:5px;right:12px;font-size:30px;background:none;border:0}
@keyframes sway{from{transform:rotate(-2deg)}to{transform:rotate(2deg)}}@keyframes dust{0%,100%{opacity:0;transform:translate(0,20px)}40%,60%{opacity:.85}80%{transform:translate(20px,-50px)}}@keyframes lantern{0%{opacity:0;transform:translate(0,0) rotate(-5deg) scale(.6)}10%{opacity:.85}85%{opacity:.7}100%{opacity:0;transform:translate(35px,-115cqh) rotate(8deg) scale(.4)}}@keyframes firework{0%,55%,100%{transform:scale(0);opacity:0}60%{opacity:.9}80%{transform:scale(3.5);opacity:0}}@keyframes hintFloat{50%{transform:translateY(4px)}}@keyframes progress{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@media(max-width:850px){.desktop-note{display:none}}@media(max-width:500px){#theater{width:100vw}dialog>div{flex-direction:column}dialog img{width:100%}}
@media(max-height:680px){.gate-copy{top:5cqh}.gate-copy h1{font-size:9cqw}.gate-copy>p{font-size:3.8cqw}.gate-doors{top:26cqh;height:65cqh}.gate-bottom{font-size:3.1cqw}.letter-content>.script{font-size:6.8cqw;margin-bottom:2cqh}.names{font-size:9.5cqw}.invitation{font-size:4cqw}.letter-content .flourish{margin:1.5cqh 0}.glass-letter{top:14%;height:74%}.paper .script{font-size:6.4cqw}.body-heading{font-size:4.6cqw}.wedding-date{font-size:10.7cqw}.date-paper{top:17%;height:74%}.portrait-title{font-size:7cqw}.portrait-caption{font-size:4cqw}.portrait-caption span{font-size:5.8cqw}.venue h2{font-size:6.2cqw;margin:1cqh 0}.venue .tiny-crown{width:10cqw;height:7cqw;margin:.5cqh}.venue-paper .script{font-size:5.7cqw}.address{font-size:3.8cqw;margin-bottom:1.8cqh}.venue-note{font-size:3.8cqw;margin-top:2cqh}.map-button{font-size:3.4cqw;padding:1cqh 3cqw}.dress-paper .script{font-size:6.7cqw}.dress-description{font-size:3.6cqw}.palette{margin:.5cqh 0 1.5cqh}.swatch i{width:8cqw;height:8cqw}.dress-note{font-size:3.3cqw}.dressing .paper-link{font-size:3.1cqw}.final-letter h2{font-size:8cqw}.final-letter .finale-names{font-size:6.4cqw}.final-letter>p:not(.script){font-size:3.8cqw}.scroll-hint>span{font-size:3.3cqw}.scroll-hint>b{font-size:4.7cqw}}
@media(min-aspect-ratio:4/3) and (max-height:600px){#theater{width:calc(100dvh*.58)}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.magic-dust,.lanterns,.fireworks{display:none}}

/* Keep the recognisable Far Far Away tower silhouette above the invitation. */
.kingdom-landscape{background-size:100% 100%;background-position:center top}
.kingdom .foliage,.finale .foliage{mask-image:linear-gradient(transparent 5%,#000 50%)}
.kingdom .soft-shadow{background:linear-gradient(transparent 35%,#082d1366 82%,#092918b0)}
.kingdom .glass-letter{top:47%;height:41%;left:12%;width:76%;background:linear-gradient(135deg,#153622df,#25432ed4);border-radius:36% 36% 6% 6% / 12% 12% 6% 6%}
.kingdom .letter-content{padding:2cqh 2cqw}
.kingdom .letter-content>.script{font-size:min(6.5cqw,3.7cqh);line-height:1.02;margin:0 0 1.2cqh}
.kingdom .small-date{font-size:3.8cqw;margin:0 0 1.3cqh}
.kingdom .names{font-size:min(9.8cqw,5.3cqh)}
.kingdom .names span{font-size:min(6cqw,3.3cqh);margin:.6cqh 0}
.kingdom .letter-content .flourish{height:4cqw;width:28cqw;margin:.9cqh 0 .7cqh}
.kingdom .invitation{font-size:min(4.3cqw,2.45cqh);line-height:1.12}
.gate-doors{top:0;height:100%;left:0;width:100%}
.gate-copy{top:7cqh;background:radial-gradient(ellipse,#132b20ba,transparent 70%);padding:1.5cqh 0}
.gate-copy>p{color:#fff0c8}
.gate-copy h1{text-shadow:0 2px 5px #162317,0 0 18px #162317}
.key-button{top:75cqh;width:24cqw;height:24cqw;left:38cqw}
.gate-bottom{bottom:2.8cqh;text-shadow:0 1px 4px #112b18,0 0 10px #112b18}
.final-letter{top:44%;height:48%;left:12%;width:76%;background:radial-gradient(ellipse,#092b20e8 25%,#092b20a0 60%,transparent 75%);padding:1.5cqh 1cqw}
.final-letter .tiny-crown{width:12cqw;height:8cqw;margin-bottom:1cqh}
.final-letter h2{font-size:min(8.5cqw,4.8cqh);margin-bottom:1.7cqh}
.final-letter>p:not(.script){font-size:min(4.2cqw,2.4cqh);margin-bottom:1.3cqh}
.final-letter .flourish{height:5cqw;width:30cqw;margin:.5cqh 0 1cqh}
.final-letter .finale-names{font-size:min(6.8cqw,3.7cqh);margin-bottom:1.2cqh}
@media(max-height:680px){.kingdom .glass-letter{top:45%;height:43%}.gate-doors{top:0;height:100%}.key-button{top:74cqh}}
/* A storybook opens the journey through distinct palace rooms. */
.library-landscape,.gallery-landscape{background-image:url('assets/gallery-v4.webp')}
.conservatory-landscape{background-image:url('assets/conservatory-v4.webp')}
.wardrobe-landscape{background-image:url('assets/wardrobe-v4.webp')}
.cellar-landscape{background-image:url('assets/cellar-v4.webp')}
.gate .library-landscape{filter:brightness(.52) blur(2px);transform:scale(1.05)}
.book-atmosphere{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 54%,transparent 5%,#071d16a3 100%);z-index:-1}
.book-intro{position:absolute;top:6%;left:7%;width:86%;text-align:center;color:#f6dfaf;text-shadow:0 2px 15px #061b11}
.book-intro>p{font:2.8cqw var(--serif);letter-spacing:1.7px;margin:0 0 2.2cqh}
.book-intro h1{font:400 9.3cqw/1.1 var(--script);margin:0}
.storybook{position:absolute;top:29%;left:16%;width:68%;height:52%;perspective:1400px;filter:drop-shadow(0 20px 20px #0009);transform-origin:50% 50%}
.book-pages{position:absolute;inset:3% 3% 2% 2%;border-radius:4px 10px 10px 4px;background:repeating-linear-gradient(90deg,#d9c494,#efe1bf 2px,#c9b586 3px);box-shadow:0 0 0 3px #604d2e,inset 12px 0 12px #6a492c80;overflow:hidden;display:flex;align-items:center;justify-content:end;flex-direction:column;padding:4cqh 1cqw;color:#675126;font:5.5cqw var(--script)}
.book-window{position:absolute;inset:7% 8% 16%;background:url('assets/kingdom-v3.webp') center top/cover;border-radius:45% 45% 3% 3% / 20% 20% 3% 3%;box-shadow:0 0 0 2px #b89648,inset 0 0 20px #4d331958}
.book-cover{position:absolute;inset:0;width:100%;height:100%;border:0;background:none;padding:0;transform-origin:3% 50%;transform-style:preserve-3d;backface-visibility:hidden;color:#efd694;text-shadow:0 1px 3px #071a0f}
.book-cover>img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none}
.book-title{position:absolute;top:27%;left:12%;width:76%;font:8.5cqw/.95 var(--script)}
.book-couple{position:absolute;top:47%;left:12%;width:76%;font:5.8cqw/1.05 var(--serif)}
.book-couple i{font:3.8cqw/.5 var(--script);display:inline-block;transform:translateY(-1px)}
.book-date{position:absolute;top:70%;left:12%;width:76%;font:3.3cqw var(--serif);letter-spacing:1px}
.book-seal{position:absolute;top:80%;left:37%;width:26%;aspect-ratio:1;border-radius:50%;border:2px solid #b89741;box-shadow:0 3px 5px #0008,inset 0 0 0 3px #dcc582,inset 0 0 0 5px #927038;background:radial-gradient(circle at 35% 30%,#f3d68c,#b38639);color:#573c16;text-shadow:0 1px #f3d990;display:flex;align-items:center;justify-content:center;font:4.6cqw var(--script)}
.book-seal>span{font-size:2.9cqw;margin:0 1px}
.book-cover:hover .book-seal{filter:brightness(1.12)}
.book-prompt{position:absolute;top:86%;left:6%;width:88%;text-align:center;font:italic 4.2cqw/1.2 var(--serif);color:#f1dfbc;margin:0}
.book-prompt>span{display:block;font:2.9cqw var(--serif);letter-spacing:.8px;margin-top:1.5cqh;opacity:.7}
.room-name{position:absolute;left:17%;right:17%;top:4cqh;text-align:center;z-index:21;font:italic 3.4cqw var(--serif);letter-spacing:.4px;color:#f5dda3;text-shadow:0 1px 6px #092213;background:radial-gradient(ellipse,#102b2090,transparent 72%);padding:1cqh}
.venue .chandelier{display:none}.venue .drop-curtain{background:linear-gradient(90deg,#eff4d9ed,#e8f0d9b8 25%,#fff8daee 49%,#e8f0d9b8 75%,#eff4d9ed);border-color:#d4b66b}
.portrait .velvet{background:repeating-linear-gradient(90deg,#182e48,#55788a 17%,#263b57 35%,#708b9b 55%,#233d58 78%)}
.cellar-shade{position:absolute;inset:0;background:linear-gradient(#15281718,#16241775 80%,#0b2019a6);z-index:-2}
.quiz-card{position:absolute;top:14%;left:7%;width:86%;height:75%;padding:3cqh 6cqw;z-index:6;color:#eadbb3;background:linear-gradient(120deg,#173c2af5,#193626ed);border:1px solid #c5a965;border-radius:38% 38% 10px 10px / 7% 7% 10px 10px;box-shadow:0 12px 35px #061e16a0,inset 0 0 0 5px #d4b86615;display:flex;flex-direction:column}
.quiz-heading{text-align:center;flex-shrink:0}.quiz-heading .eyebrow{font-size:2.5cqw;letter-spacing:2px;margin:0 0 1.3cqh;color:#cbb878}.quiz-heading h2{font-size:min(8.4cqw,4.7cqh);line-height:1.02;margin:0 0 1cqh;color:#f1d595}.quiz-heading>p:last-child{font-size:3.6cqw;margin:0 0 1.7cqh}
#guestQuiz{display:flex;flex-direction:column;flex:1;min-height:0}.quiz-progress{display:flex;justify-content:space-between;font-size:2.4cqw;color:#c6c5aa70;gap:2cqw;margin:1cqh 0 2.5cqh;padding-bottom:1.2cqh;border-bottom:1px solid #bfa15c35}.quiz-progress .current{color:#f2db9d}.quiz-progress .done{color:#adbc8e}.quiz-step{flex:1;min-height:0}.quiz-step:focus{outline:none}.field-label,.quiz-step legend{display:block;font:5.2cqw/1.05 var(--serif);margin:0 0 1.5cqh;color:#ffebbd}.quiz-step input[type=text],.quiz-step textarea{width:100%;background:#fbf0cf;color:#3f4d2f;border:1px solid #cbb16e;border-radius:4px;padding:1.6cqh 3cqw;font:16px/1.2 var(--serif);outline-offset:3px}.quiz-step input::placeholder,.quiz-step textarea::placeholder{color:#67715b9c}.quiz-step input[type=text]{min-height:44px}.quiz-step textarea{resize:none;height:12cqh;min-height:70px}.field-note{font:italic 3.5cqw/1.2 var(--serif);color:#d3d3b4;margin:1.5cqh 0}.quiz-illustration{text-align:center;font:18cqw var(--serif);color:#cbae67;opacity:.45;margin-top:2cqh}.quiz-step fieldset{border:0;padding:0;margin:0}.quiz-step legend{margin-bottom:0}.quiz-step fieldset .field-note{margin:1cqh 0 1.5cqh}.drink-options{display:grid;grid-template-columns:1fr 1fr;gap:1cqh 2cqw}.drink-choice{position:relative;cursor:pointer}.drink-choice input{position:absolute;width:100%;height:100%;opacity:0;margin:0;cursor:pointer}.drink-choice>span{display:flex;align-items:center;gap:1.4cqw;min-height:44px;height:6cqh;padding:1cqh 1.8cqw;border:1px solid #bda76b60;border-radius:5px;font:3.6cqw var(--serif);color:#eee5cb;background:#f5e8bf0b}.drink-choice i{color:#ccac62;font-size:4.5cqw;font-style:normal}.drink-choice b{margin-left:auto;font:3cqw var(--serif);opacity:0}.drink-choice input:checked+span{background:#e8d59c;color:#263b25;border-color:#efdca4}.drink-choice input:checked+span i{color:#6b643a}.drink-choice input:checked+span b{opacity:1}.drink-choice input:focus-visible+span{outline:2px solid #fff1b3;outline-offset:3px}.quiz-review{background:#f7e5b20a;border-left:1px solid #c9ab62;padding:1cqh 3cqw;margin-top:2cqh;font:3.6cqw/1.25 var(--serif)}.quiz-review strong{display:block;font-weight:500;font-size:4.3cqw;margin-bottom:.6cqh}.quiz-review span{color:#d9dabf}.quiz-error{font:3.2cqw/1.15 var(--serif);color:#ffd0ab;min-height:1.3em;margin:1cqh 0}.quiz-actions{display:flex;gap:3cqw;align-items:center;margin-top:auto}.quiz-primary{min-height:44px;padding:1.4cqh 3.5cqw;border:1px solid #ecd6a0;border-radius:4px;background:linear-gradient(#ead69f,#cbb16e);color:#334125;font:4.1cqw var(--serif);flex:1;box-shadow:0 2px 8px #0a201844}.quiz-primary:disabled{opacity:.5}.quiz-back{border:0;background:none;font:3.5cqw var(--serif);padding:1cqh 0}.quiz-success{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:1.5cqh}.success-seal{width:15cqw;height:15cqw;display:grid;place-items:center;border:1px solid #cdb06a;border-radius:50%;font-size:7cqw;color:#f2da9b}.quiz-success h3{font-size:7.2cqw;line-height:1.1;margin:1cqh 0}.quiz-success p{font-size:4cqw;line-height:1.2;margin:0}.quiz-success .paper-link{color:#e1cd95}.quiz-success .quiz-primary{flex:0;margin-top:1cqh;width:100%}
@media(max-height:680px){.book-intro{top:6%}.book-intro h1{font-size:8cqw}.storybook{top:28%;height:53%}.book-title{font-size:7.4cqw}.book-couple{font-size:5cqw}.book-seal{width:23%;left:38.5%}.book-prompt{font-size:3.7cqw}.quiz-card{top:12%;height:77%;padding-top:2cqh}.quiz-heading .eyebrow{margin-bottom:.6cqh}.quiz-heading>p:last-child{margin-bottom:.5cqh;font-size:3.2cqw}.quiz-progress{margin:.8cqh 0 1.6cqh;padding-bottom:.7cqh}.field-label,.quiz-step legend{font-size:4.5cqw;margin-bottom:1cqh}.drink-options{gap:.8cqh 1.8cqw}.drink-choice>span{min-height:38px;font-size:3.4cqw;padding:.8cqh 1.4cqw}.quiz-step textarea{height:11cqh}.quiz-primary{min-height:40px;padding:.8cqh 3cqw}.quiz-error{margin:.6cqh 0}.quiz-illustration{font-size:14cqw;margin-top:0}.field-note{font-size:3.2cqw}}
/* Small story cameos, tied to their room instead of the invitation text. */
.cameo{position:absolute;pointer-events:none;user-select:none;will-change:transform;isolation:isolate}
.cameo img{display:block;width:100%;height:auto;pointer-events:none}
.library-cat{left:-2%;top:40%;width:15%;z-index:4;transform-origin:50% 80%;filter:drop-shadow(1px 3px 2px #21100a66)}
.library-cat img{transform-origin:50% 80%}
.portrait.arriving .library-cat img,.portrait.active .library-cat img{animation:catGrip .85s ease-in-out 8 alternate}
.veranda-flight{position:absolute;left:33%;top:25%;width:34%;height:29%;overflow:hidden;clip-path:polygon(0 18%,20% 1%,80% 1%,100% 18%,100% 100%,0 100%);pointer-events:none}
.flying-dragon{width:66%;left:-70%;top:18%;opacity:0;filter:brightness(.85) saturate(.8);transform-origin:50% 50%}
.flying-dragon img{transform-origin:40% 50%}
.venue.arriving .flying-dragon img,.venue.active .flying-dragon img{animation:dragonWing .8s ease-in-out infinite alternate}
@keyframes catGrip{from{transform:rotate(-3deg) translateX(-1px)}to{transform:rotate(3deg) translateX(1px)}}
@keyframes dragonWing{from{transform:scaleY(.9) rotate(-2deg)}to{transform:scaleY(1.04) rotate(2deg)}}
/* Three recommended colours; no mood-board photographs. */
.dress-paper .paper-content{top:24%;bottom:17%}.dressing .palette{gap:5.5cqw;margin:3cqh 0}.dressing .swatch{width:15cqw}.dressing .swatch i{width:12cqw;height:12cqw}.dressing .swatch span{font-size:3.25cqw}.dressing .dress-note{font-size:4cqw}
/* +1 belongs to the introduction; actions stay reachable on short screens. */
.quiz-step{overflow-y:auto;overscroll-behavior:contain;padding:2px 1px 6px;scrollbar-width:thin;scrollbar-color:#d5bc7055 transparent}
.plus-one-note{font:italic 3.7cqw/1.2 var(--serif);color:#eadcb5;margin:1.8cqh 0}
.quiz-step .party-choice{display:grid;grid-template-columns:1fr 1fr;gap:2cqw}
.party-choice legend{font-size:3.9cqw;margin:0 0 1cqh}
.party-choice label{position:relative;cursor:pointer}.party-choice input{position:absolute;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.party-choice span{min-height:42px;display:flex;align-items:center;justify-content:center;border:1px solid #baa56c88;border-radius:4px;font-size:3.9cqw;background:#f5e8bf0b}.party-choice input:checked+span{background:#e8d59c;color:#263b25;border-color:#efdca4}.party-choice input:focus-visible+span{outline:2px solid #fff1b3;outline-offset:2px}
.companion-field{margin-top:1.5cqh}.companion-field .field-label{font-size:3.9cqw;margin-bottom:1cqh}.companion-field small{font-size:3cqw;font-style:italic;color:#c1caaa;margin-left:1cqw}
#reviewParty{display:block;font-style:italic;margin:.7cqh 0;color:#ecd7a1}
@media(max-height:720px){.quiz-card[data-step="0"] .quiz-heading h2{font-size:6.2cqw}.quiz-card[data-step="0"] .quiz-heading>p:last-child{font-size:3cqw}.quiz-card[data-step="0"] .quiz-progress{margin:.3cqh 0 1cqh}.quiz-card[data-step="0"] .field-label{font-size:4cqw;margin-bottom:.8cqh}.quiz-card[data-step="0"] input[type=text]{min-height:38px;padding:1cqh 2.5cqw}.plus-one-note{font-size:3.4cqw;margin:1.2cqh 0}.party-choice span{min-height:38px}.companion-field{margin-top:1cqh}.companion-field .field-label{font-size:3.6cqw}.dressing .swatch i{width:10cqw;height:10cqw}.dressing .dress-note{font-size:3.6cqw}}
@media(prefers-reduced-motion:reduce){.flying-dragon{display:none}.library-cat{transform:none!important}}

/* The climbing cameo leaves before the gallery camera starts moving. */
.portrait.departing .library-cat{visibility:hidden}
/* Same cover dimensions as the room art, so figures remain planted during zoom. */
.room-characters{position:absolute;left:50%;top:50%;width:max(100cqw,66.6667cqh);height:max(150cqw,100cqh);transform:translate(-50%,-50%);pointer-events:none;user-select:none}
.still-character{position:absolute;height:auto;filter:drop-shadow(0 2px 1px #30220e55);pointer-events:none}
.window-dragon{left:39%;bottom:31%;width:28%;z-index:1}

.window-donkey{left:33%;bottom:30.7%;width:8%;z-index:2;filter:brightness(.93) sepia(.07) drop-shadow(0 2px 1px #30220e55)}
.veranda-residents{position:absolute;left:29%;bottom:38%;width:26%;isolation:isolate}
.veranda-couple{position:relative;display:block;width:100%;height:auto;z-index:1;filter:brightness(.96) saturate(.94)}
.ground-shadow{position:absolute;bottom:-2.5%;height:7%;z-index:0;pointer-events:none;border-radius:50%;background:radial-gradient(ellipse,rgba(39,34,17,.36) 0%,rgba(39,34,17,.18) 38%,transparent 73%);filter:blur(.25cqw)}
.shrek-shadow{left:5%;width:49%}.fiona-shadow{left:65%;width:34%}
.ground-shadow::after{content:'';position:absolute;inset:15% 18% 43%;border-radius:50%;background:radial-gradient(ellipse,rgba(30,29,16,.35),transparent 75%)}
.art-credits{display:block;width:max-content;margin:1.6cqh auto 0;font:2.5cqw/1.4 var(--serif);color:inherit;text-underline-offset:3px}
