/* Cinematic layer: hearts, glow, ribbons, and chapter motion for Prem & Mamtha.
   Everything here is decoration. Content stays readable without it, and no
   decorative layer ever intercepts a click or touch. */
:root{
  --champagne:#e9cf94;
  --champagne-light:#f7e6bd;
  --blush:#e8b4b8;
  --blush-deep:#c9737f;
  --rose:#8d2a44;
  --glow-gold:#ffe4a8;
  --heart-shape:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M12 21.35s-7.6-4.8-9.8-9.6C.6 8 2.8 4.2 6.6 4.2c2.1 0 3.8 1.2 4.6 2.9.8-1.7 2.5-2.9 4.6-2.9 3.8 0 6 3.8 4.4 7.5C18.2 16.5 12 21.35 12 21.35z'/%3E%3C/svg%3E");
}
html.lenis,html.lenis body{height:auto}
html.lenis{scroll-behavior:auto!important}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-stopped{overflow:clip}
.lenis.lenis-smooth iframe{pointer-events:none}

/* Performance: GPU acceleration for animated elements */
.opening-bokeh i,.devotional-halo *,.invitation-card,.heart-union,.hu-outline,.atmo-bokeh,.atmo-petal,.atmo-heart,.burst-heart,.burst-petal{will-change:transform,opacity;transform:translateZ(0)}

/* A shared heart glyph, painted through a mask so it can take any glow colour. */
.heart-glyph,.hu-heart,.hu-merged,.ambient-heart,.burst-heart,.atmo-heart{
  display:block;
  -webkit-mask:var(--heart-shape) center/contain no-repeat;
  mask:var(--heart-shape) center/contain no-repeat;
}

/* ---------- The devotional opening ---------- */
.opening{background:radial-gradient(ellipse at 50% 30%,#7a2a3a 0%,#44131e 55%,#2c0c14 100%)}
.opening-glow{background:radial-gradient(ellipse at 50% 38%,#c98a5866,transparent 58%),radial-gradient(circle at 15% 85%,#c9737f2e,transparent 40%),radial-gradient(circle at 85% 20%,#e9cf9422,transparent 38%),linear-gradient(125deg,#38151c,#792e3b 52%,#3e141e)}
.opening-bokeh{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
.opening-bokeh i{position:absolute;display:block;border-radius:50%;background:radial-gradient(circle,#ffe4a8 0%,#ffe4a866 40%,transparent 72%);filter:blur(var(--blur,3px));opacity:0;animation:bokeh-drift var(--dur,16s) ease-in-out var(--delay,0s) infinite}
.cover-wrap{width:min(440px,calc((100svh - 300px) * .6667),100%);display:grid;justify-items:center}
.devotional-invocation{position:relative;display:grid;justify-items:center;gap:2px;margin:0 auto 12px;padding-top:4px;text-align:center;color:var(--champagne-light)}
.devotional-halo{position:relative;width:clamp(78px,15svh,112px);aspect-ratio:1;filter:drop-shadow(0 0 18px #ffe4a855)}
.devotional-halo svg{display:block;width:100%;height:100%;overflow:visible}
.devotional-halo .halo-glow{animation:halo-breathe 5.2s ease-in-out infinite;transform-origin:center;transform-box:fill-box}
.devotional-halo .halo-petals{animation:halo-spin 46s linear infinite;transform-origin:100px 100px}
.devotional-halo .ring-outer{animation:halo-spin 28s linear infinite reverse;transform-origin:100px 100px}
.devotional-halo .ring-inner{animation:halo-pulse 4s ease-in-out infinite;transform-origin:100px 100px}
.devotional-halo .halo-sri{filter:drop-shadow(0 0 6px #ffe4a8aa)} /* The sacred glyph itself stays still. */
.invocation-line{margin-top:6px;font:500 clamp(.92rem,2.2svh,1.1rem)/1.35 var(--serif);letter-spacing:.14em;color:#fff1cf;text-shadow:0 0 14px #ffe4a866}
html[lang=kn] .invocation-line{font-family:"Noto Serif Kannada",serif;letter-spacing:.04em}
html[lang=hi] .invocation-line{font-family:"Noto Serif Devanagari","Cormorant Garamond",serif;letter-spacing:0}
.opening .cover-invite{max-width:262px;font-size:clamp(.94rem,2.25svh,1.14rem);line-height:1.38}
.opening .cover-content{gap:10px}
.motion-ready .sequence-devotion{opacity:0;transform:translateY(-8px);animation:devotion-arrive 1s var(--ease) .05s both}

/* Unfolding card layers and the illuminated frame. */
.opening .invitation-card{overflow:visible;transform-origin:50% 0;box-shadow:0 25px 100px #16020aa0,0 0 0 1px #d4ac66,0 0 60px #e9cf9422}
.opening .cover-content{z-index:4}
.opening .opening-plane-heart{z-index:5;top:13%;right:8%;width:clamp(46px,11vw,64px)}
.motion-ready .invitation-card.scene-playing{animation:card-unfold 1.1s var(--ease) .15s both}
.card-floral-glow{position:absolute;inset:0;z-index:1;pointer-events:none;border-radius:2px;box-shadow:inset 0 0 0 1px #e9cf9400,inset 0 0 38px #ffe4a800;animation:frame-illuminate 1.6s var(--ease) .7s both,frame-glow 6s ease-in-out 2.3s infinite}
.card-floral-glow:before{content:"";position:absolute;inset:5.2%;border:1px solid #e9cf94;opacity:0;animation:inner-frame-arrive 1.2s var(--ease) 1s both,inner-frame-breathe 5s ease-in-out 2.2s infinite}
.card-light-sweep{position:absolute;inset:0;z-index:2;overflow:hidden;pointer-events:none}
.card-light-sweep:before{content:"";position:absolute;inset:-30% auto -30% -60%;width:38%;background:linear-gradient(100deg,transparent,#fff7dc7a 48%,#ffe4a8a8 52%,transparent);transform:rotate(18deg);opacity:0;animation:light-sweep 1.5s ease-in-out .9s both,light-sweep-loop 11s ease-in-out 5s infinite}
.card-corner-spark{position:absolute;z-index:3;color:var(--glow-gold);font-size:1rem;line-height:1;pointer-events:none;text-shadow:0 0 10px #ffe4a8;opacity:0;animation:spark-twinkle 3.6s ease-in-out infinite}
.card-corner-spark.one{top:5%;left:5.5%;animation-delay:1.4s}
.card-corner-spark.two{right:5.5%;bottom:5%;animation-delay:2.6s}

/* Two glowing hearts meet behind the names and become one. */
.opening .cover-content h1{position:relative;isolation:isolate;display:flex;flex-direction:column;align-items:center}
.heart-union{position:absolute;inset:-32% -18%;z-index:-1;pointer-events:none;display:block}
.hu-heart{position:absolute;top:50%;left:50%;width:18px;height:18px;margin:-9px 0 0 -9px;background:radial-gradient(circle at 40% 35%,#fff4d6,var(--blush-deep) 60%,var(--rose));filter:drop-shadow(0 0 7px #ffb8c2) drop-shadow(0 0 14px #e9cf94aa);opacity:0}
.hu-left{--from:-150px}
.hu-right{--from:150px}
.scene-playing .hu-left{animation:heart-travel 1.55s var(--ease) 1.25s both}
.scene-playing .hu-right{animation:heart-travel 1.55s var(--ease) 1.25s both}
.hu-outline{position:absolute;top:50%;left:50%;width:min(88%,300px);height:auto;transform:translate(-50%,-50%);overflow:visible;filter:drop-shadow(0 0 6px #e2b96a99) drop-shadow(0 0 16px #e8b4b866)}
.hu-outline .hu-stroke{stroke-dasharray:100;stroke-dashoffset:100;opacity:0}
.hu-outline .hu-fill{opacity:0;transform-origin:50% 55%;transform-box:fill-box}
.scene-playing .hu-outline .hu-stroke{animation:heart-draw 1.3s var(--ease) 2.55s both,heart-stroke-breathe 4.5s ease-in-out 3.9s infinite}
.scene-playing .hu-outline .hu-fill{animation:heart-fill-bloom 1.2s var(--ease) 3.1s both,heart-fill-breathe 4.5s ease-in-out 4.3s infinite}
.sequence-done .hu-left,.sequence-done .hu-right{animation:none!important;opacity:0}
.sequence-done .hu-outline .hu-stroke{animation:heart-stroke-breathe 4.5s ease-in-out infinite!important;stroke-dashoffset:0;opacity:1}
.sequence-done .hu-outline .hu-fill{animation:heart-fill-breathe 4.5s ease-in-out infinite!important;opacity:1}
.opening .cover-content h1 span:not(.heart-union),.opening .cover-content h1 em{position:relative;z-index:1;display:inline-block}

/* Faster, still staggered name reveals. Everything is tappable from the first frame. */
.invitation-card.scene-playing .sequence-crest{animation:cover-detail-pop .7s var(--ease) .35s both}
.invitation-card.scene-playing .sequence-guest{animation:cover-detail-pop .7s var(--ease) .75s both}
.invitation-card.scene-playing .sequence-title{animation:cover-title-pop .9s var(--ease) 1.15s both}
.invitation-card.scene-playing .sequence-invite{animation:cover-detail-pop .8s var(--ease) 1.75s both}
.invitation-card.scene-playing .sequence-date{animation:cover-detail-pop .7s var(--ease) 2.15s both}
.invitation-card.scene-playing .sequence-open{animation:cover-detail-pop .8s var(--ease) 2.35s both}
.sequence-done.invitation-card{animation:none!important;opacity:1;transform:none}
.sequence-done .sequence-crest,.sequence-done .sequence-guest,.sequence-done .sequence-title,.sequence-done .sequence-invite,.sequence-done .sequence-date,.sequence-done .sequence-open{animation:none!important;opacity:1;transform:none}
.sequence-done .card-floral-glow{animation:none!important;box-shadow:inset 0 0 0 1px #e9cf9480,inset 0 0 38px #ffe4a833}
.sequence-done .card-floral-glow:before{animation:none!important;opacity:.6}
.sequence-done .card-light-sweep:before,.opening .invitation-card.sequence-done .cover-content .open-button:before{animation:none!important;opacity:0;box-shadow:none}
.opening .cover-content .open-button{position:relative;overflow:visible}
.opening .cover-content .open-button:before{content:"";position:absolute;inset:-3px;border-radius:2px;box-shadow:0 0 0 0 #ffe4a800;animation:button-halo 3.4s ease-in-out 3s infinite;pointer-events:none}
.opening-options{display:grid;justify-items:center;gap:2px}
.skip-intro{color:#e9cf94b3;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;min-height:36px;padding:4px 10px}
.skip-intro:hover,.skip-intro:focus-visible{color:#fff1cf}
.opening.leaving{transition:opacity .85s ease,visibility .85s}
.opening.leaving .cover-wrap{transform:translateY(-30px) scale(1.06);opacity:0;transition:transform 1.1s var(--ease),opacity .7s ease}
.opening.leaving .devotional-invocation{transition:opacity .4s ease;opacity:0}

/* ---------- Ambient hearts, bokeh, petals ---------- */
.ambient-hearts{position:fixed;inset:0;z-index:15;overflow:hidden;pointer-events:none;display:none}
body.invitation-opened.motion-ready .ambient-hearts{display:block}
.ambient-heart{position:absolute;left:var(--x,50%);bottom:-8vh;width:var(--size,18px);height:var(--size,18px);background:var(--tint,radial-gradient(circle at 40% 35%,#fff1f3,#e8b4b8 55%,#c9737f));opacity:0;filter:blur(var(--blur,0px)) drop-shadow(0 0 6px #e8b4b866);animation:heart-rise var(--dur,22s) linear var(--delay,0s) infinite;will-change:transform,opacity}
.ambient-heart.gold{--tint:radial-gradient(circle at 40% 35%,#fff7dc,#e9cf94 55%,#c9a24d)}
body.page-hidden .ambient-heart,body.page-hidden .hero-atmosphere i,body.page-hidden .blessing-atmosphere i,body.page-hidden .opening-bokeh i{animation-play-state:paused}
body.photo-opened .ambient-hearts{display:none}

.hero-atmosphere,.blessing-atmosphere{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.hero-atmosphere i,.blessing-atmosphere i{position:absolute;display:block;opacity:0;animation-play-state:paused}
.hero-atmosphere.is-live i,.blessing-atmosphere.is-live i{animation-play-state:running}
.atmo-bokeh{left:var(--x);top:var(--y);width:var(--size,60px);height:var(--size,60px);border-radius:50%;background:radial-gradient(circle,#ffe4a8cc 0%,#f7e6bd55 45%,transparent 72%);filter:blur(var(--blur,6px));animation:bokeh-drift var(--dur,18s) ease-in-out var(--delay,0s) infinite}
.atmo-petal{left:var(--x);top:-6%;width:var(--size,14px);height:calc(var(--size,14px) * 1.5);border-radius:100% 0 100% 0;background:linear-gradient(145deg,#fbe1e3,#e8b4b8 55%,#d98f98);box-shadow:inset 0 0 4px #ffffff88;animation:petal-fall var(--dur,14s) linear var(--delay,0s) infinite}
.atmo-petal.gold{background:linear-gradient(145deg,#fff2cf,#e9cf94 55%,#c9a24d)}
.atmo-heart{left:var(--x);top:var(--y);width:var(--size,12px);height:var(--size,12px);background:radial-gradient(circle at 40% 35%,#fff1f3,#e8b4b8 55%,#c9737f);filter:drop-shadow(0 0 6px #e8b4b8aa);animation:heart-hover var(--dur,9s) ease-in-out var(--delay,0s) infinite}
.hero>*:not(.hero-atmosphere){position:relative;z-index:1}
.blessing>*:not(.blessing-atmosphere){position:relative;z-index:1}
.blessing .blessing-stage{z-index:3}

/* ---------- Blessing rituals ---------- */
.heart-joiner{position:relative!important;z-index:4!important;width:min(620px,calc(100% - 32px));margin:30px auto 0;padding:19px 22px 17px;border:1px solid #bd913d66;border-radius:999px;background:linear-gradient(135deg,#fffaf0d9,#f6ead7c7);box-shadow:0 16px 38px #6b583018,inset 0 1px #fffef7;overflow:hidden}
.heart-joiner:before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 55%,#f4d48b35,transparent 42%);opacity:.75}
.heart-joiner-eyebrow{position:relative;margin:0;color:var(--gold);font:600 .67rem/1.3 var(--body);letter-spacing:.18em;text-transform:uppercase}
.heart-joiner h3{position:relative;margin:5px 0 0;color:var(--wine);font:italic 1.28rem/1.2 var(--serif)}
.heart-joiner-stage{position:relative;width:min(470px,100%);height:112px;margin:10px auto 2px;border:1px solid #bd913d42;border-radius:999px;background:linear-gradient(90deg,#fff8ed99,#f4dfb655,#fff8ed99);touch-action:none;overflow:hidden}
.heart-joiner-stage:before{content:"";position:absolute;left:50%;top:50%;width:1px;height:48px;background:linear-gradient(180deg,transparent,#bd913d99,transparent);transform:translate(-50%,-50%);opacity:.6}
.heart-joiner-thread{position:absolute;left:50%;top:50%;color:#bd913d99;font:2.3rem/1 var(--serif);transform:translate(-50%,-53%);transition:opacity .45s ease,transform .65s var(--ease)}
.heart-token{position:absolute;top:50%;display:grid;justify-items:center;gap:2px;min-width:74px;padding:5px 9px;border:0;background:transparent;color:var(--wine);font:600 .7rem/1.15 var(--body);letter-spacing:.08em;text-transform:uppercase;cursor:grab;user-select:none;-webkit-user-select:none;transform:translate(calc(-50% + var(--drag-x,0px)),calc(-50% + var(--drag-y,0px)));transition:left .82s cubic-bezier(.2,.8,.25,1),transform .3s ease,filter .3s ease;color-scheme:light;will-change:left,transform}
.heart-token:focus-visible{outline:2px solid var(--gold);outline-offset:4px}
.heart-token.is-dragging{z-index:2;cursor:grabbing;transition:none;filter:drop-shadow(0 0 17px #e9cf94cc)}
.heart-token.is-snapping{transition:transform .28s var(--ease)}
.heart-joiner-stage.is-joining .heart-token{transition:left .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1),filter .45s ease}
.heart-joiner-stage.is-joining .heart-token-glyph{transform:scale(1.08);text-shadow:0 0 14px #e9cf94,0 3px 12px #b7445766}
.heart-token-glyph{display:block;color:#b74457;font-size:2.55rem;line-height:.82;text-shadow:0 3px 11px #b7445744;transition:transform .45s var(--ease),color .35s ease,text-shadow .35s ease}
.prem-heart{left:23%}.mamtha-heart{left:77%}
.heart-joiner-hint{position:relative;margin:0;color:var(--muted);font:italic .84rem/1.35 var(--serif)}
.heart-joiner-message{position:relative;min-height:1.35em;margin:6px 0 0;color:var(--wine);font:italic .98rem/1.35 var(--serif);opacity:0;transform:translateY(5px);transition:opacity .5s ease,transform .5s var(--ease)}
.heart-joiner.is-joined{box-shadow:0 16px 38px #6b583018,0 0 0 5px #f2d48d2b,0 0 34px #e9cf9466,inset 0 1px #fffef7}
.heart-joiner-stage.is-joined:before{height:76px;background:linear-gradient(180deg,transparent,#e9cf94,transparent);box-shadow:0 0 16px #e9cf94}
.heart-joiner-stage.is-joined .heart-joiner-thread{opacity:0;transform:translate(-50%,-53%) scale(1.5)}
.heart-joiner-stage.is-joined .prem-heart{left:calc(50% - 34px)}
.heart-joiner-stage.is-joined .mamtha-heart{left:calc(50% + 34px)}
.heart-joiner-stage.is-joined .heart-token-glyph{color:#8d2a44;transform:scale(1.13);text-shadow:0 0 18px #e9cf94,0 3px 12px #b7445766}
.heart-joiner.is-joined .heart-joiner-message{opacity:1;transform:none}
.heart-join-particle{position:absolute;left:50%;top:50%;width:5px;height:5px;border-radius:50%;background:#e9cf94;box-shadow:0 0 8px #ffe4a8;opacity:0;animation:heart-join-spark 1.15s ease-out var(--delay,0s) forwards;pointer-events:none}
.interactive-flowers{position:fixed!important;inset:0;z-index:16!important;pointer-events:none;overflow:hidden;contain:layout paint;opacity:1;transition:opacity .45s ease}
body:not(.invitation-opened) .interactive-flowers,body.photo-opened .interactive-flowers{opacity:0;visibility:hidden}
.interactive-flower{position:absolute;z-index:1;width:35px;height:35px;padding:0;border:0;background:transparent;color:#c88d43;font:1.55rem/1 var(--serif);text-shadow:0 0 9px #e9cf9480;pointer-events:auto;cursor:pointer;opacity:0;isolation:isolate;transform:translate(-50%,-50%);transition:opacity .28s ease,transform .42s var(--ease),color .28s ease;animation:interactive-flower-rise var(--flower-duration,11s) ease-in-out var(--flower-delay,0s) infinite;will-change:transform,opacity}
.interactive-flower:before{content:"";position:absolute;left:50%;top:50%;z-index:-1;width:22px;height:22px;border-radius:50%;background:radial-gradient(circle,#fff3c766 0%,#e9cf9440 38%,transparent 72%);opacity:.45;transform:translate(-50%,-50%) scale(.72);animation:flower-halo-pulse 4.8s ease-in-out var(--flower-delay,0s) infinite;will-change:transform,opacity;pointer-events:none}
.interactive-flower:hover,.interactive-flower:focus-visible{opacity:1;color:#a97236;text-shadow:0 0 13px #ffe4a8;outline:none;animation-play-state:paused}
.interactive-flower.is-blooming{opacity:1;color:#a97236;text-shadow:0 0 17px #ffe4a8;transform:translate(-50%,-50%) rotate(18deg) scale(1.55);animation:none}
.interactive-flower.is-blooming:before{opacity:1;animation:flower-halo-bloom .85s cubic-bezier(.2,.8,.25,1) forwards}
.flower-1{left:6%;top:21%;--flower-rotation:-18deg;--flower-delay:-1.2s;--flower-sway:8px;--flower-lift:-15vh;--flower-duration:12s}.flower-2{left:94%;top:31%;--flower-rotation:24deg;--flower-delay:-3.1s;--flower-sway:-9px;--flower-lift:-18vh;--flower-duration:13.5s}.flower-3{left:8%;top:54%;--flower-rotation:8deg;--flower-delay:-2.3s;--flower-sway:11px;--flower-lift:-13vh;--flower-duration:10.5s}.flower-4{left:92%;top:69%;--flower-rotation:-25deg;--flower-delay:-.6s;--flower-sway:-7px;--flower-lift:-17vh;--flower-duration:14s}.flower-5{left:13%;top:84%;--flower-rotation:34deg;--flower-delay:-4s;--flower-sway:10px;--flower-lift:-14vh;--flower-duration:11.5s}.flower-6{left:87%;top:87%;--flower-rotation:-12deg;--flower-delay:-2.8s;--flower-sway:-10px;--flower-lift:-12vh;--flower-duration:13s}.flower-7{left:28%;top:16%;--flower-rotation:12deg;--flower-delay:-1.9s;--flower-sway:7px;--flower-lift:-16vh;--flower-duration:12.5s}.flower-8{left:73%;top:76%;--flower-rotation:-28deg;--flower-delay:-3.7s;--flower-sway:-8px;--flower-lift:-15vh;--flower-duration:11s}.flower-9{left:50%;top:91%;--flower-rotation:6deg;--flower-delay:-.3s;--flower-sway:9px;--flower-lift:-11vh;--flower-duration:14.5s}
.flower-particle{position:absolute;z-index:2;width:5px;height:5px;border-radius:50%;background:radial-gradient(circle,#fffdf0 0 22%,#e9cf94 48%,#bc8738 100%);box-shadow:0 0 9px #ffe4a8;opacity:0;animation:flower-particle-rise .9s ease-out var(--delay,0s) forwards;pointer-events:none}
.flower-ripple{position:absolute;z-index:3;width:30px;height:13px;border:1px solid #e9cf94;border-radius:50%;opacity:0;transform:translate(-50%,-50%) scale(.25,.12);box-shadow:0 0 0 1px #fff1c226;animation:flower-water-ripple 1.45s cubic-bezier(.12,.7,.2,1) var(--delay,0s) forwards;pointer-events:none}
.flower-ripple:after{content:"";position:absolute;inset:3px 6px;border:1px solid #fff1c2;border-radius:50%;opacity:.8;animation:flower-water-ripple-inner 1.45s cubic-bezier(.12,.7,.2,1) var(--delay,0s) forwards}
.toast.is-heart-message{bottom:clamp(22px,6vh,58px);padding:15px 25px;border-radius:999px;background:linear-gradient(135deg,#671e2c,#8d2a44);border-color:#f1d18b;box-shadow:0 14px 42px #3b101d55,0 0 26px #e9cf9466;animation:heart-toast-in .5s cubic-bezier(.2,.8,.25,1) both}
.blessing-note-card.is-incoming{animation:blessing-card-arrive .8s var(--ease) both}
.blessing-note-card.is-new-arrival{z-index:2;animation:blessing-card-arrive .8s var(--ease) both,blessing-card-glow 2.4s ease-in-out .18s both}
.blessing-arrival-petal{position:absolute;left:var(--x);top:42%;width:8px;height:13px;border-radius:100% 0 100% 0;background:linear-gradient(145deg,#fbe1e3,#e8b4b8 55%,#d98f98);opacity:0;pointer-events:none;animation:arrival-petal-float 1.9s cubic-bezier(.2,.6,.3,1) var(--delay,0s) forwards}
.blessing-arrival-petal.gold{background:linear-gradient(145deg,#fff2cf,#e9cf94 55%,#c9a24d)}
@keyframes heart-join-spark{0%{opacity:0;transform:translate(0,0) scale(.4)}15%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.4)}}
@keyframes flower-particle-rise{0%{opacity:0;transform:translate(0,0) scale(.3)}18%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.1)}}
@keyframes flower-halo-pulse{0%,100%{opacity:.25;transform:translate(-50%,-50%) scale(.72)}50%{opacity:.78;transform:translate(-50%,-50%) scale(1.18)}}
@keyframes flower-halo-bloom{0%{opacity:.45;transform:translate(-50%,-50%) scale(.7)}35%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(2.8)}}
@keyframes interactive-flower-rise{0%{opacity:0;transform:translate(-50%,-50%) translate3d(0,12vh,0) rotate(calc(var(--flower-rotation,0deg) - 8deg)) scale(.82)}9%{opacity:.72}28%{opacity:.76}58%{opacity:.62;transform:translate(-50%,-50%) translate3d(var(--flower-sway,8px),var(--flower-lift,-14vh),0) rotate(calc(var(--flower-rotation,0deg) + 7deg)) scale(1)}84%{opacity:.32}100%{opacity:0;transform:translate(-50%,-50%) translate3d(calc(var(--flower-sway,8px) * 1.35),calc(var(--flower-lift,-14vh) * 1.65),0) rotate(calc(var(--flower-rotation,0deg) + 18deg)) scale(.86)}}
@keyframes flower-water-ripple{0%{opacity:0;transform:translate(-50%,-50%) scale(.25,.12)}10%{opacity:.88}38%{opacity:.52}100%{opacity:0;transform:translate(-50%,-50%) scale(4.8,2.1)}}
@keyframes flower-water-ripple-inner{0%{opacity:.8;transform:scale(.35,.18)}28%{opacity:.46}100%{opacity:0;transform:scale(2.8,1.9)}}
@keyframes blessing-card-arrive{0%{opacity:0;transform:translateX(-42px) scale(.94)}68%{opacity:1;transform:translateX(7px) scale(1.015)}100%{opacity:1;transform:none}}
@keyframes blessing-card-glow{0%,100%{box-shadow:0 18px 32px #6b58301c,0 0 0 5px #c3c8d018}22%{box-shadow:0 20px 46px #6b583048,0 0 0 7px #f2d48d55,0 0 38px #e9cf94aa}65%{box-shadow:0 20px 42px #6b583030,0 0 0 5px #f2d48d2b,0 0 22px #e9cf9466}}
@keyframes arrival-petal-float{0%{opacity:0;transform:translate(0,0) rotate(0) scale(.5)}18%{opacity:.95}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--rot)) scale(1)}}
@keyframes heart-toast-in{0%{opacity:0;transform:translate(-50%,14px) scale(.92)}100%{opacity:1;transform:translate(-50%,0) scale(1)}}
@media(max-width:600px){.heart-joiner{width:min(460px,calc(100% - 24px));padding-inline:14px}.heart-joiner-stage{height:102px}.heart-token{min-width:66px}.heart-token-glyph{font-size:2.3rem}.interactive-flower{font-size:1.35rem}.flower-5{left:16%;top:82%}.flower-6{left:84%;top:85%}.flower-7{left:20%;top:16%}.flower-8{left:80%;top:71%}.flower-9{left:50%;top:92%}}
@media(prefers-reduced-motion:reduce){.heart-joiner,.heart-joiner-stage,.heart-token,.heart-token-glyph,.heart-joiner-thread,.heart-joiner-message,.interactive-flower,.blessing-note-card{transition:none}.heart-join-particle,.flower-particle,.flower-ripple,.blessing-arrival-petal{animation:none;display:none}.blessing-note-card.is-incoming,.blessing-note-card.is-new-arrival{animation:none}.interactive-flower,.interactive-flower:before{animation:none}.interactive-flower:before{opacity:.35}.interactive-flower.is-blooming{transform:translate(-50%,-50%) scale(1.2)}}

/* Pulsing heart glows around the hero. */
.portrait-heart-glow{position:absolute;left:50%;top:46%;z-index:-1;width:112%;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;background:radial-gradient(circle at 50% 46%,#f6d3d7 0%,#e8b4b899 24%,#e9cf9455 50%,transparent 72%);-webkit-mask:var(--heart-shape) center/contain no-repeat;mask:var(--heart-shape) center/contain no-repeat;filter:blur(24px);opacity:0;animation:heart-glow-pulse 5.5s ease-in-out infinite}
body.invitation-opened .portrait-heart-glow{opacity:.5}
.couple-names{position:relative;isolation:isolate}
.names-heart-glow{position:absolute;left:50%;top:52%;z-index:-1;width:min(58%,240px);aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;background:radial-gradient(circle at 50% 45%,#fbe9d3 0%,#f1d9a8aa 40%,#e9cf9433 65%,transparent 80%);filter:blur(28px);opacity:0;animation:heart-glow-pulse 6s ease-in-out 1s infinite}
body.invitation-opened .names-heart-glow{opacity:.5}
.couple-names span:not(.names-heart-glow),.couple-names em{position:relative;z-index:1}

/* ---------- Story ribbon and chapter connectors ---------- */
.story{position:relative}
.story-pair-wrap{position:relative;width:min(900px,100%);margin:auto}
.story-ribbon{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;overflow:visible;filter:drop-shadow(0 0 6px #e9cf9488);opacity:0;transition:opacity .6s ease}
.story-ribbon.is-ready{opacity:1}
.story-ribbon .ribbon-heart{opacity:0;transform-box:fill-box;transform-origin:center}
body:not(.cinematic) .story-ribbon{display:none}
.story-pair{position:relative;z-index:1}
.chapter-link{position:relative;z-index:3;display:grid;justify-items:center;width:100%;height:0;pointer-events:none}
.chapter-link i{position:absolute;top:-52px;width:1px;height:104px;background:linear-gradient(180deg,transparent,#e9cf94 40%,#e9cf94 60%,transparent);box-shadow:0 0 8px #ffe4a8;transform:scaleY(0);transform-origin:top}
.chapter-link .heart-glyph{position:absolute;top:-8px;width:16px;height:16px;background:radial-gradient(circle at 40% 35%,#fff1f3,#e8b4b8 55%,#c9737f);filter:drop-shadow(0 0 8px #e8b4b8);transform:scale(0)}

/* ---------- Animated card borders and button highlights ---------- */
.shimmer-border{position:relative}
.shimmer-border:after{content:"";position:absolute;inset:-1px;z-index:4;padding:1.5px;border-radius:inherit;pointer-events:none;background:linear-gradient(115deg,transparent 30%,#fff2cf 46%,#ffe4a8 50%,#fff2cf 54%,transparent 70%) 0 0/260% 100%;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;opacity:.9;animation:border-sheen 7s ease-in-out infinite}
.mini-couple-portrait.shimmer-border:after,.radha-krishna-blessing.shimmer-border:after{animation-delay:-3s}
.story-photo.shimmer-border:after{animation-delay:-1.5s}
.button.primary{position:relative}
.button.primary:before{content:"";position:absolute;inset:-2px;z-index:0;border-radius:inherit;box-shadow:0 0 0 0 #e9cf9400;pointer-events:none;animation:button-halo 4s ease-in-out infinite}
.button.primary>*{position:relative;z-index:1}
.bless-button:not(:disabled):hover{box-shadow:0 12px 30px #44131e30,0 0 24px #e9cf9466}
.photo-card.is-current .photo-open{box-shadow:0 20px 42px #65402726,0 0 0 1px #e9cf9455,0 0 26px #e9cf9440;transition:box-shadow .6s ease}

/* SFX control in the top bar. */
.sfx-button{display:flex;align-items:center;gap:6px;min-height:44px;font-size:.875rem;padding:7px 0;color:var(--muted)}
.sfx-button[aria-pressed=true]{color:var(--ink)}
.sfx-icon{color:var(--gold);font-size:1rem;line-height:1;transition:transform .3s var(--ease)}
.sfx-button[aria-pressed=true] .sfx-icon{animation:spark-twinkle-soft 3s ease-in-out infinite}
.sfx-button[aria-pressed=false] .sfx-icon{opacity:.45}

/* ---------- Bursts on intentional interactions ---------- */
.burst-layer{position:fixed;inset:0;z-index:95;overflow:hidden;pointer-events:none}
.burst-heart,.burst-spark{position:absolute;left:var(--x);top:var(--y);width:var(--size,12px);height:var(--size,12px);margin:calc(var(--size,12px) / -2) 0 0 calc(var(--size,12px) / -2);opacity:0;animation:burst-fly var(--dur,.9s) cubic-bezier(.2,.7,.3,1) forwards}
.burst-heart{background:radial-gradient(circle at 40% 35%,#fff1f3,#e8b4b8 55%,#c9737f);filter:drop-shadow(0 0 6px #e8b4b8aa)}
.burst-heart.gold{background:radial-gradient(circle at 40% 35%,#fff7dc,#e9cf94 55%,#c9a24d)}
.burst-spark{background:radial-gradient(circle,#fff 0%,#ffe4a8 40%,transparent 70%);border-radius:50%}
.burst-petal{position:absolute;left:var(--x);top:var(--y);width:var(--size,10px);height:calc(var(--size,10px) * 1.5);border-radius:100% 0 100% 0;background:linear-gradient(145deg,#fbe1e3,#e8b4b8 55%,#d98f98);opacity:0;animation:burst-petal var(--dur,1.6s) cubic-bezier(.2,.6,.3,1) forwards}
.burst-petal.gold{background:linear-gradient(145deg,#fff2cf,#e9cf94 55%,#c9a24d)}

/* When GSAP owns the chapter reveals, the older fade-up hands over. */
body.cinematic .reveal{opacity:1;transform:none;transition:none}
body.cinematic .vintage-photo.reveal{transform:rotate(-3deg)}
.cine-word{display:inline-block;will-change:transform,opacity}
.cine-clip{clip-path:inset(0 0 0 0)}
body.cinematic .hero-portrait .portrait-arch img{animation:none}

/* ---------- Keyframes ---------- */
@keyframes devotion-arrive{to{opacity:1;transform:none}}
@keyframes halo-breathe{0%,100%{transform:scale(.94);opacity:.75}50%{transform:scale(1.06);opacity:1}}
@keyframes halo-spin{to{transform:rotate(360deg)}}
@keyframes halo-pulse{0%,100%{transform:scale(1);stroke-opacity:.5}50%{transform:scale(1.04);stroke-opacity:1}}
@keyframes card-unfold{0%{opacity:0;transform:perspective(1200px) rotateX(-14deg) translateY(26px) scale(.96)}60%{opacity:1}100%{opacity:1;transform:perspective(1200px) rotateX(0) translateY(0) scale(1)}}
@keyframes frame-illuminate{to{box-shadow:inset 0 0 0 1px #e9cf9480,inset 0 0 38px #ffe4a833}}
@keyframes frame-glow{0%,100%{box-shadow:inset 0 0 0 1px #e9cf9480,inset 0 0 38px #ffe4a833}50%{box-shadow:inset 0 0 0 1px #ffe4a8b3,inset 0 0 48px #ffe4a855}}
@keyframes inner-frame-arrive{to{opacity:.6}}
@keyframes inner-frame-breathe{0%,100%{opacity:.45}50%{opacity:.85}}
@keyframes light-sweep{0%{left:-60%;opacity:0}20%{opacity:1}100%{left:140%;opacity:0}}
@keyframes light-sweep-loop{0%,72%{left:-60%;opacity:0}76%{opacity:.8}92%,100%{left:140%;opacity:0}}
@keyframes spark-twinkle{0%,100%{opacity:0;transform:scale(.6) rotate(0)}50%{opacity:1;transform:scale(1.1) rotate(45deg)}}
@keyframes spark-twinkle-soft{0%,100%{transform:scale(.9);opacity:.7}50%{transform:scale(1.1);opacity:1}}
@keyframes heart-travel{0%{opacity:0;transform:translateX(var(--from)) scale(.5)}20%{opacity:1}85%{opacity:1;transform:translateX(0) scale(1.2)}100%{opacity:0;transform:translateX(0) scale(1.8)}}
@keyframes heart-draw{0%{stroke-dashoffset:100;opacity:0}10%{opacity:1}100%{stroke-dashoffset:0;opacity:1}}
@keyframes heart-stroke-breathe{0%,100%{stroke-opacity:.75}50%{stroke-opacity:1}}
@keyframes heart-fill-bloom{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}
@keyframes heart-fill-breathe{0%,100%{opacity:.7;transform:scale(.985)}50%{opacity:1;transform:scale(1.02)}}
@keyframes heart-glow-pulse{0%,100%{opacity:.5;transform:translate(-50%,-52%) scale(.97)}50%{opacity:.72;transform:translate(-50%,-52%) scale(1.05)}}
@keyframes button-halo{0%,100%{box-shadow:0 0 0 0 #e9cf9400}50%{box-shadow:0 0 0 4px #e9cf9422,0 0 22px #e9cf9455}}
@keyframes bokeh-drift{0%{opacity:0;transform:translate3d(0,0,0) scale(.8)}20%,75%{opacity:var(--peak,.5)}100%{opacity:0;transform:translate3d(var(--dx,20px),var(--dy,-70px),0) scale(1.15)}}
@keyframes heart-rise{0%{opacity:0;transform:translate3d(0,0,0) rotate(-8deg) scale(.8)}8%{opacity:var(--peak,.5)}50%{transform:translate3d(var(--sway,24px),-58vh,0) rotate(8deg) scale(1)}92%{opacity:var(--peak,.5)}100%{opacity:0;transform:translate3d(0,-118vh,0) rotate(-6deg) scale(.9)}}
@keyframes petal-fall{0%{opacity:0;transform:translate3d(0,0,0) rotate(0)}10%,85%{opacity:.85}100%{opacity:0;transform:translate3d(var(--sway,40px),112%,0) rotate(var(--spin,320deg))}}
@keyframes heart-hover{0%,100%{opacity:.25;transform:translate3d(0,0,0) scale(.9)}50%{opacity:.8;transform:translate3d(var(--dx,8px),-14px,0) scale(1.05)}}
@keyframes border-sheen{0%,55%{background-position:120% 0}85%,100%{background-position:-120% 0}}
@keyframes burst-fly{0%{opacity:0;transform:translate3d(0,0,0) scale(.4) rotate(0)}15%{opacity:1}100%{opacity:0;transform:translate3d(var(--dx),var(--dy),0) scale(var(--end,1.1)) rotate(var(--rot,20deg))}}
@keyframes burst-petal{0%{opacity:0;transform:translate3d(0,0,0) rotate(0)}12%{opacity:1}100%{opacity:0;transform:translate3d(var(--dx),var(--dy),0) rotate(var(--rot,220deg))}}

/* ---------- Phones ---------- */
@media(max-width:600px){
  .cover-wrap{width:min(410px,calc((100svh - 262px) * .6667),100%)}
  .devotional-halo{width:clamp(66px,12svh,88px)}
  .invocation-line{font-size:.88rem;letter-spacing:.1em}
  .devotional-invocation{margin-bottom:8px}
  .opening .cover-invite{max-width:236px;font-size:.92rem}
  .hu-left{--from:-100px}
  .hu-right{--from:100px}
  .portrait-heart-glow{width:110%;filter:blur(18px)}
  .story-ribbon{inset:-3% -5%;width:110%;height:106%}
  .sfx-button{font-size:.8125rem;gap:4px}
  .sfx-button #sfxLabel{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
  .sfx-button .sfx-icon{font-size:1.25rem}
  .chapter-link i{top:-40px;height:80px}
  .shimmer-border:after{animation-duration:9s}
}
@media(max-height:660px) and (min-width:601px){
  .devotional-halo{width:64px}
  .devotional-invocation{margin-bottom:6px}
  .cover-wrap{width:290px}
}

/* ---------- Reduced motion: still, warm, complete ---------- */
@media(prefers-reduced-motion:reduce){
  .ambient-hearts,.opening-bokeh,.hero-atmosphere,.blessing-atmosphere,.burst-layer,.chapter-link{display:none!important}
  .motion-ready .sequence-devotion,.hu-heart,.card-light-sweep,.card-corner-spark{animation:none!important;opacity:1;transform:none}
  .hu-heart{opacity:0}
  .hu-outline .hu-stroke,.hu-outline .hu-fill{animation:none!important;opacity:1;stroke-dashoffset:0}
  .card-floral-glow{animation:none!important;box-shadow:inset 0 0 0 1px #e9cf9480,inset 0 0 38px #ffe4a833}
  .card-floral-glow:before{animation:none!important;opacity:.6}
  .portrait-heart-glow,.names-heart-glow{animation:none!important}
  body.invitation-opened .portrait-heart-glow{opacity:.5}
  body.invitation-opened .names-heart-glow{opacity:.45}
  .shimmer-border:after,.button.primary:before,.devotional-halo *,.sfx-icon{animation:none!important}
  .story-ribbon .ribbon-line,.story-ribbon .ribbon-glow{stroke-dashoffset:0}
  .story-ribbon .ribbon-heart{opacity:1}
  .motion-ready .invitation-card.scene-playing{animation:none!important}
  .invitation-card.scene-playing .sequence-invite,.invitation-card.scene-playing .sequence-open{animation:none!important;opacity:1;transform:none}
}

/* Scale the cover typography with the card so the wording stays in its clear center. */
.opening .invitation-card{container-type:inline-size}
.opening .devotional-invocation{width:100%}
.opening .invocation-line{max-width:100%;font-size:clamp(.82rem,1.9svh,1rem);letter-spacing:.08em;line-height:1.3;text-align:center;text-wrap:balance}
html[lang=kn] .opening .invocation-line{letter-spacing:.02em}
.opening .cover-content{inset:10% 19% 15%;height:auto;gap:.55rem}
.opening .cover-content{gap:clamp(5px,2cqi,9px)}
.opening .cover-crest{width:clamp(62px,21cqi,92px);height:auto}
.opening .cover-content h1{font-size:clamp(1.8rem,2.7vw,2.7rem);font-size:clamp(1.8rem,9.5cqi,2.7rem);line-height:.9;letter-spacing:-.04em}
.opening .cover-content h1 em{margin:.32em 0;font-size:.32em}
.opening .cover-content h1 em:before,.opening .cover-content h1 em:after{width:clamp(12px,5cqi,23px)}
.opening .cover-invite{width:100%;max-width:none;font-size:clamp(.72rem,.8vw,.86rem);font-size:clamp(.72rem,2.9cqi,.86rem);line-height:1.32;text-align:center;text-wrap:balance}
.opening .cover-content .open-button{min-height:44px;padding:9px 14px;font-size:.88rem}
.opening-options p{max-width:38ch;margin-inline:auto;text-wrap:balance}
@media(min-width:601px) and (min-height:720px){
  .cover-wrap{width:min(440px,calc((100svh - 450px) * .6667),100%)}
}

/* Keep the cover action visible and the full opening stack inside phone screens. */
@media(max-width:600px){
  .cover-wrap{width:min(410px,calc((100svh - 320px) * .6667),calc(100vw - 28px))}
  .opening .devotional-halo{width:clamp(58px,10svh,78px)}
  .opening .invocation-line{font-size:clamp(.75rem,3.4vw,.9rem);letter-spacing:.045em}
  .opening .cover-content{inset:8% 14% auto;height:72%;justify-content:flex-start;padding-top:clamp(14px,4cqi,20px);gap:clamp(4px,1.6cqi,7px)}
  .opening .cover-crest{width:clamp(68px,22cqi,86px);margin:0}
  .opening .cover-content h1{font-size:clamp(1.8rem,9cqi,2.2rem);line-height:.88;margin:0}
  .opening .cover-content h1 em{margin:.18em 0}
  .opening .cover-content .sequence-title{margin-block:3px}
  .opening .cover-invite{font-size:clamp(.68rem,2.8cqi,.78rem);line-height:1.2}
  .opening .cover-content .sequence-invite,.opening .cover-content .sequence-open{animation:none!important;opacity:1;transform:none}
  .opening .cover-content .open-button{min-height:42px;max-width:220px;padding:8px 12px;font-size:.82rem}
  .opening .heart-union{inset:-28% -16%}
  .opening .hu-outline{top:50%;width:clamp(140px,35cqi,180px)}
  .opening .cover-content .eyebrow,.opening .cover-invite,.opening .cover-date{margin-block:0}
  .opening .cover-content .sequence-date{margin-bottom:clamp(8px,3cqi,14px)}
  .opening-options{gap:0;padding-top:clamp(8px,1.5svh,12px)}
  .opening-options p{max-width:34ch;margin:0 auto;font-size:clamp(.68rem,3.2vw,.78rem);line-height:1.35}
  .opening-options .silent-button{min-height:38px;padding:5px 10px}
  .opening-options .skip-intro{min-height:32px}
}

@media(min-width:601px) and (max-height:820px){
  .opening{padding-block:10px}
  .opening .devotional-halo{width:clamp(60px,10svh,82px)}
  .opening .devotional-invocation{margin-bottom:7px}
  .opening .invocation-line{margin-top:3px}
  .opening .opening-options{padding-top:8px}
}

/* ---------- Scroll-grown cinematic tree ---------- */
body{isolation:isolate}
.living-tree-scene{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;visibility:hidden;opacity:0;contain:paint;transform-origin:50% 50%;background:radial-gradient(ellipse at 78% 32%,#8a65231a,transparent 48%),#090806;transition:opacity 1.1s ease,visibility 1.1s ease;will-change:opacity,transform}
body.invitation-opened .living-tree-scene{visibility:visible;opacity:1}
.living-tree-art{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover;object-position:center center;opacity:0;transform:scale(1.02);transition:opacity 1.2s ease}
.living-tree-scene.is-art-ready .living-tree-art{opacity:.76}
.living-tree-scene:before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,#090806a8 0%,#0908065c 43%,#09080612 100%),linear-gradient(0deg,#090806aa 0%,transparent 40%,#09080638 100%)}
.living-tree-leaves{position:absolute;inset:0;z-index:2;width:100%;height:100%;overflow:visible;pointer-events:none}
.tree-leaf-cluster{opacity:0;transform-box:fill-box;transform-origin:center}
.living-tree-scene.is-static .tree-leaf-cluster{opacity:.86;transform:none}
html[data-theme=light] .living-tree-scene.is-art-ready .living-tree-art{opacity:.16;filter:saturate(.62) sepia(.18)}
html[data-theme=light] .living-tree-scene:before{background:linear-gradient(90deg,#f7f1e5c9 0%,#f7f1e57d 48%,#f7f1e52e 100%),linear-gradient(0deg,#f7f1e5b8 0%,transparent 52%,#f7f1e552 100%)}
@media(max-width:600px){.living-tree-scene.is-art-ready .living-tree-art{opacity:.56}.living-tree-scene:before{background:linear-gradient(90deg,#0908068c,#09080648 60%,#09080624),linear-gradient(0deg,#090806aa,transparent 42%,#09080652)}}
@media(max-width:600px) and (prefers-reduced-motion:reduce){.living-tree-scene.is-art-ready .living-tree-art{opacity:.42}}
@media(prefers-reduced-motion:reduce){.living-tree-scene,.living-tree-art{transition:none;will-change:auto}}

/* The invitation's story is carried by a single scroll-driven 3D world.
   WebGL sits below the existing, accessible HTML and never intercepts input. */
.cinematic-world-canvas{position:absolute;inset:0;z-index:3;display:block;width:100%;height:100%;opacity:0;pointer-events:none;transition:opacity 1.2s ease;contain:strict}
.living-tree-scene.is-world-ready .cinematic-world-canvas{opacity:.88}
.living-tree-scene.is-world-ready .living-tree-art{opacity:.12}
.living-tree-scene.is-world-ready .living-tree-leaves{opacity:0;visibility:hidden}
.living-tree-scene.is-world-fallback .cinematic-world-canvas{display:none}
.tree-secret-trigger{cursor:pointer;outline-offset:5px}
.tree-secret-trigger:focus-visible{outline:1px solid var(--gold)}
@media(max-width:600px){.living-tree-scene.is-world-ready .cinematic-world-canvas{opacity:.76}}
@media(prefers-reduced-motion:reduce){.cinematic-world-canvas{transition:none}}

/* Let the final living-tree chapter breathe through the last two backdrops. */
html[data-theme=dark] .blessing-wall{background:radial-gradient(circle at 50% 0%,#2b2210d9 0%,#141108bb 48%,#080705b5 100%)}
html[data-theme=dark] footer{background:linear-gradient(145deg,#17140dcc,#0c0a07a6 72%,#0807058c)}
html[data-theme=light] .blessing-wall{background:linear-gradient(180deg,#fffaf0df 0%,#f4f6f8c9 100%)}
html[data-theme=light] footer{background:linear-gradient(135deg,#f4f6f8e6,#f7eddad9,#fffaf0d4)}
