/* Finish layers: live SVG light, circulating pearl borders and soft text halos. */
.animated-art { position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;z-index:2; }
.has-animated-art>.jharokha { visibility:hidden; }
.finish-countdown,.finish-plaque { background-image:none!important; }
.finish-countdown>.animated-art,.finish-plaque>.animated-art { z-index:0; }
.finish-countdown>strong,.finish-countdown>span,.finish-plaque>div { z-index:1; }
.finish-gallery::after { content:none; }
.finish-gallery>.animated-art { inset:-4.3% -2% auto;width:104%;height:110%; }
.running-pearls { animation:pearl-circuit 3s linear infinite; }
.mirror-glint { animation:mirror-sparkle 2.4s ease-in-out infinite; }
.lotus-sway { transform-box:fill-box;transform-origin:50% 100%;animation:lotus-sway 5s ease-in-out infinite; }
.frame-sweep { animation:frame-sweep var(--sweep-cycle,8.2s) ease-in-out infinite;animation-delay:var(--sweep-delay,0s);transform:translateX(var(--sweep-from)) skewX(-15deg); }
.animated-art * { animation-play-state:paused; }
.finish-in-view>.animated-art * { animation-play-state:running; }
.gallery-slide:not(.active) .frame-sweep { animation-play-state:paused;opacity:0; }
@keyframes pearl-circuit { to{stroke-dashoffset:-12} }
@keyframes mirror-sparkle { 0%,100%{opacity:.55}50%{opacity:1} }
@keyframes lotus-sway { 0%,100%{rotate:-5deg}50%{rotate:5deg} }
@keyframes frame-sweep { 0%{transform:translateX(var(--sweep-from)) skewX(-15deg)}40%,100%{transform:translateX(var(--sweep-to)) skewX(-15deg)} }
.invitation-halo { position:relative;isolation:isolate; }
.invitation-halo::before { content:'';position:absolute;inset:-24px;z-index:-1;pointer-events:none;background:radial-gradient(closest-side,rgba(255,247,232,.95) 65%,rgba(255,247,232,0)); }
.invitation .invitation-copy .invitation-halo>.script { font:400 36px/40px var(--script);margin:0;color:#8d5a17; }
.invitation-halo,.countdown>.eyebrow,.person>p,.person>h3 { text-shadow:0 0 10px #fff9ecf2,0 0 2px #fff9ece6; }
.countdown-items strong,.gallery-banner .gallery-caption,.event-scroll h3 { background:linear-gradient(135deg,#dea645,#f3d489,#b16f23);background-clip:text;-webkit-background-clip:text;color:transparent; }
.countdown-items strong.count-flip { animation:timer-digit-in .55s cubic-bezier(.22,1,.36,1); }
@keyframes timer-digit-in { from{opacity:0;rotate:x -90deg;translate:0 30%}to{opacity:1;rotate:x 0deg;translate:0 0} }
.countdown-items>div:last-child::after { content:'';position:absolute;inset:17.333% 15% 22.667%;pointer-events:none;border-radius:35% 35% 0 0;animation:timer-glow 1s ease-out infinite; }
@keyframes timer-glow { 0%,100%{box-shadow:inset 0 0 0 0 #ffcd6e00}50%{box-shadow:inset 0 0 26px 4px #ffcd6e99} }
.royal-atmosphere { position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden; }
.royal-atmosphere i { position:absolute;border-radius:50%;background:radial-gradient(circle,#fff6d0,#d4a23a 60%,transparent 70%);animation:royal-mote 3.2s ease-in-out infinite; }
@keyframes royal-mote { 0%,100%{opacity:0;scale:.6}50%{opacity:1;scale:1.3} }
.hero .scroll-cue { position:fixed;inset:auto auto max(20px,env(safe-area-inset-bottom)) 50%;z-index:35;transform:translateX(-50%);display:flex;flex-direction:row;gap:6px;align-items:center;width:max-content;padding:8px 12px 8px 16px;border:1px solid #fff5df66;border-radius:999px;background:#392b1b99;backdrop-filter:blur(8px);color:#fff9eb;font:700 12px/16px Arial,sans-serif;letter-spacing:2px;box-shadow:0 4px 20px #0002;opacity:0;visibility:hidden;transition:opacity .35s,visibility .35s;animation:none; }
.hero .scroll-cue.cue-visible { opacity:1;visibility:visible; }
.hero .scroll-cue span { padding:0;background:none;font:inherit; }
.hero .scroll-cue svg { display:block;width:16px;height:16px;animation:cue-nod 1.5s ease-in-out infinite; }
@keyframes cue-nod { 50%{translate:0 3px} }
/* Scratch content is revealed only after enough of the soft coating is erased. */
.invitation .scratch-card { position:relative;width:100%;max-width:816px;padding:24px;border:2px solid #dea645;border-radius:24px;background:#fff9eb; }
.scratch-card h3 { font:400 24px/32px var(--serif);margin:0;color:#44403c; }
.scratch-card .scratch-instruction { margin:8px 0 0;font:14px/20px Arial,sans-serif;color:#78716c; }
.scratch-card .scratch-area { position:relative;width:100%;max-width:384px;height:auto;aspect-ratio:4/3;margin:32px auto 0;overflow:hidden;border-radius:16px; }
.scratch-area #scratch-canvas { position:absolute;inset:0;width:100%;height:100%;border-radius:16px;transition:opacity .6s; }
.scratch-card .revealed-date { inset:0;padding:24px;gap:0;border-radius:16px;background:#fffefaf2;border:1px solid #ffffff33;opacity:0;transform:scale(.85);transition:opacity .6s,transform .6s cubic-bezier(.2,1.45,.5,1);color:#292524;box-shadow:0 10px 15px #0002; }
.scratch-card .revealed-date>.script { font:600 24px/32px Georgia,serif;color:#292524; }
.scratch-card .revealed-date>strong { font:400 30px/36px 'Cormorant Garamond',serif;color:#1c1917;margin-top:8px; }
.scratch-card .revealed-date>span:not(.script) { font:14px/20px Arial,sans-serif;margin-top:4px;color:#57534e; }
.scratch-card .revealed-date>.small-star { display:none; }
.scratch-card.scratch-complete .revealed-date { opacity:1;transform:scale(1); }
.scratch-card #reveal-date { position:absolute;right:4px;bottom:4px;z-index:3;border:0;border-radius:4px;padding:4px 8px;background:#ffffffb3;color:#44403c;font:10px/14px Arial,sans-serif;text-decoration:underline; }
.scratch-help { position:absolute;bottom:12px;left:0;right:0;display:flex;justify-content:center;pointer-events:none;animation:scratch-help 1.6s ease-in-out infinite; }
.scratch-help span { border-radius:999px;background:#0006;padding:4px 12px;color:white;font:12px/16px Arial,sans-serif; }
@keyframes scratch-help { 0%,100%{opacity:.4}50%{opacity:1} }
.scratch-card.scratch-started .scratch-help,.scratch-card.scratch-complete #reveal-date { display:none; }
/* The closing message and the full landscape have separate layout and motion. */
.desert-footer { display:block;min-height:0;padding:0;background:none!important;overflow:hidden; }
.desert-footer::before,.desert-footer::after { content:none; }
.desert-footer .closing-scene { min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:64px 24px; }
.desert-footer .closing-rosette { flex:none;width:128px;height:128px;margin:0 0 24px;opacity:0;transform:scale(.4) rotate(-90deg);transition:opacity 1.8s,transform 1.8s cubic-bezier(.16,1,.3,1); }
.closing-scene.finish-in-view .closing-rosette { opacity:1;transform:none; }
.desert-footer .closing-rosette .rosette { display:block;width:100%;height:100%;margin:0;animation:rosette-turn 60s linear infinite; }
.desert-footer .footer-copy { position:relative;padding:0;width:100%; }
.desert-footer .footer-copy>.script { font:400 36px/40px var(--script);margin:0; }
.desert-footer .footer-copy h2 { font:400 36px/40px var(--serif);margin:12px 0 0;overflow-wrap:anywhere; }
.desert-footer .footer-copy h2 i { font:inherit;color:inherit; }
.desert-footer .footer-copy>.ornamental-line { display:none; }
.desert-footer .footer-date { display:block;font:400 16px/24px var(--serif);margin-top:16px;color:#8a5a12;animation:closing-date 5s ease-in-out infinite; }
@keyframes closing-date { 0%,100%{opacity:.8;letter-spacing:.1em}50%{opacity:1;letter-spacing:.18em} }
.desert-footer .footer-copy .footer-hashtag { font:400 30px/36px var(--script);margin:12px 0 0;color:#9e141e; }
.desert-footer .closing-landscape { display:block;position:relative;width:100%;height:auto;margin-top:-16px;opacity:0;translate:0 60px;transition:opacity 1.4s,translate 1.4s cubic-bezier(.22,1,.36,1); }
.desert-footer .closing-landscape.finish-in-view { opacity:1;translate:0 0; }
.desert-footer .footer-bottom { position:relative;margin:0; }
@media(min-width:640px){.scratch-card h3{font-size:30px;line-height:36px}}
@media(min-width:768px){.invitation-halo::before{inset:-40px -64px}.desert-footer .closing-scene{min-height:100vh;padding:96px 24px}.desert-footer .closing-rosette{width:176px;height:176px;margin-bottom:32px}.desert-footer .footer-copy h2{font-size:72px;line-height:1}.desert-footer .closing-landscape{margin-top:-48px}}
@media(min-width:1024px){.invitation .invitation-copy .invitation-halo>.script{font-size:60px;line-height:60px}.desert-footer .footer-copy>.script{font-size:60px;line-height:60px}.desert-footer .footer-copy h2{font-size:96px}}
.finishes-paused .animated-art *,.finishes-paused .royal-atmosphere i { animation-play-state:paused; }
@media(prefers-reduced-motion:reduce){.animated-art *,.countdown-items strong.count-flip,.countdown-items>div:last-child::after,.royal-atmosphere i,.hero .scroll-cue svg,.scratch-help,.desert-footer .closing-rosette .rosette,.desert-footer .footer-date{animation:none!important}.frame-sweep{opacity:0}.desert-footer .closing-rosette,.desert-footer .closing-landscape,.scratch-card .revealed-date{transition:none}.desert-footer .closing-rosette,.desert-footer .closing-landscape{opacity:1;transform:none;translate:none}}
.royal-atmosphere { opacity:var(--ambient-alpha,0); }
.hero .scroll-cue { background:rgba(24,14,10,.62);letter-spacing:2.88px;box-shadow:0 4px 14px #00000059; }
.scratch-confetti i { top:60%;left:50%;border-radius:0;animation-name:scratch-celebration;animation-timing-function:cubic-bezier(.1,.5,.5,1); }
@keyframes scratch-celebration { 0%{opacity:1;transform:translate(0,0) rotate(0)}30%{opacity:1;transform:translate(calc(var(--drift)*.6),-26vh) rotate(calc(var(--spin)*.35))}100%{opacity:0;transform:translate(var(--drift),65vh) rotate(var(--spin))} }
.person.in-view .portrait-photo { animation:portrait-breathe 14s ease-in-out infinite; }
@keyframes portrait-breathe { 50%{scale:1.08} }
@media(prefers-reduced-motion:reduce){.person.in-view .portrait-photo{animation:none}}
.finish-countdown { box-shadow:none;perspective:400px; }
.finish-countdown>.animated-art { filter:drop-shadow(0 8px 10px #3c140059); }
.family-name .motion-letter,.family-group-title { background-size:250% 100%; }
.in-view .family-name .motion-letter,.family-group-title.in-view { animation-duration:4.5s;animation-timing-function:ease-in-out; }
@media(max-width:767px){.hero .palace-scene{width:150%}}
.hero-rays { animation:royal-rays 240s linear infinite,royal-ray-breathe 9s ease-in-out infinite; }
@keyframes royal-ray-breathe { 0%,100%{opacity:.5}50%{opacity:.85} }
.closing-rosette .rosette { filter:drop-shadow(0 10px 20px #5a287859); }
@media(prefers-reduced-motion:reduce){.hero-rays{animation:none;opacity:.5}}
.scratch-card .scratch-area { container-type:inline-size; }
.scratch-card .revealed-date { padding:clamp(12px,6.25cqw,24px); }
.scratch-card .revealed-date>.script { font-size:clamp(18px,6.25cqw,24px);line-height:1.3; }
.scratch-card .revealed-date>strong { font-size:clamp(22px,7.8cqw,30px);line-height:1.2; }
.scratch-card .revealed-date>span:not(.script) { font-size:clamp(10px,3.65cqw,14px);line-height:1.4; }
.finish-plaque .frame-sweep { animation-name:plaque-light-pass; }
.finish-gallery .frame-sweep { animation-name:gallery-light-pass; }
@keyframes plaque-light-pass { 0%{transform:translateX(var(--sweep-from)) skewX(-15deg)}45.95%,100%{transform:translateX(var(--sweep-to)) skewX(-15deg)} }
@keyframes gallery-light-pass { 0%{transform:translateX(var(--sweep-from)) skewX(-15deg)}44.44%,100%{transform:translateX(var(--sweep-to)) skewX(-15deg)} }
@media(prefers-reduced-motion:reduce){.hero-copy,.hero-copy h2>span{transition:none!important;opacity:1!important;transform:none!important;letter-spacing:0!important}}
.countdown-items strong,.event-scroll h3 { text-shadow:none;filter:drop-shadow(0 2px 3px #280000b3); }
.gallery-banner .gallery-caption { text-shadow:none; }
