:root {
  --navy: #17304b; --gold: #b57a43; --cream: #f7eedf; --brown: #7c5434;
  --display: 'Cormorant Garamond', Georgia, serif;
  --text: 'DM Sans', system-ui, sans-serif;
}
* { box-sizing: border-box; }
html, body { margin:0; min-height:100%; }
html { background:var(--navy); }
body { display:grid; place-items:center; min-height:100vh; min-height:100dvh; background:radial-gradient(ellipse at 50% 20%,#57738e,#223e58 45%,#14273b 100%); font-family:var(--text); color:var(--brown); }
button { font:inherit; }
.sr-only { position:absolute!important; width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;padding:0;margin:-1px;border:0; }
.app-shell { position:relative;width:min(100%,480px);height:100vh;height:100dvh;overflow:hidden;isolation:isolate;background:var(--navy);box-shadow:0 16px 60px rgba(0,0,0,.28); }
.cover,.interior { position:absolute;inset:0;width:100%;height:100%; }
.cover { z-index:2;overflow:hidden;transition:opacity .55s ease,visibility 0s linear .55s; }
.cover-art,.opening-underlay { position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center top;display:block;pointer-events:none;user-select:none; }
.opening-underlay { z-index:1;opacity:0; }
.opening-stage { position:absolute;z-index:3;top:0;left:0;width:100px;height:70px;opacity:0;visibility:hidden;perspective:900px;transform-style:preserve-3d;pointer-events:none; }
.flap-rotor { position:absolute;z-index:2;top:0;left:0;width:100%;height:59.9%;transform-origin:50% 0%;transform-style:preserve-3d;backface-visibility:visible;transform:perspective(730px) rotateX(0deg);will-change:transform; }
.flap-image {position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none;user-select:none;backface-visibility:visible;}


.paper-card { position:absolute;z-index:3;top:5%;left:18%;width:64%;height:76%;padding:5px;background:linear-gradient(145deg,#fff9ec,#ecd6b8);border:1px solid #d9b78d;box-shadow:0 6px 18px rgba(15,27,40,.26);opacity:0;transform:translateY(25%) scale(.96);border-radius:3px;will-change:transform,opacity;}
.paper-border { position:relative; width:100%;height:100%;border:1px solid rgba(187,135,73,.55);background:radial-gradient(ellipse at 50% 20%,#fffcf4,#f7ead6 85%);display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;text-align:center;padding:15px 5px; overflow:hidden; }
.paper-border::before,.paper-border::after{content:"";position:absolute;pointer-events:none;background-repeat:no-repeat;background-size:contain;opacity:.92;}
.paper-border::before{top:-2px;left:-2px;width:48%;height:34%;background-image:url("../assets/floral-top-left.png");}
.paper-border::after{right:-2px;bottom:-2px;width:44%;height:32%;background-image:url("../assets/floral-bottom-right.png");background-position:right bottom;}
.paper-border > *{position:relative;z-index:1;}
.card-ornament {color:#bb9061;font-size:17px;}
.card-heading {font:600 clamp(15px,4.2vw,21px)/1 var(--display);font-variant:small-caps;margin:0;color:#845b3b;}
.card-initials {font:500 clamp(33px,9.5vw,53px)/1 var(--display);margin:0;color:#a67548;}
.card-initials span {font-size:.6em;}
.card-description {font:italic 500 clamp(13px,3.7vw,18px)/1.1 var(--display);margin:0;color:#866041;}
.seal-button { position:absolute;z-index:8;left:50%;top:50.85%;width:17.5%;aspect-ratio:1;border:0;border-radius:50%;padding:0;transform:translate(-50%,-50%);background:transparent;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent; }
.seal-button:focus-visible {outline:3px solid #fff3ce;outline-offset:5px;}
.seal-token {position:absolute;display:block;width:118.4%;height:121.9%;left:-9.2%;top:-10.95%;object-fit:fill;pointer-events:none;}
.seal-glow,.seal-sheen { position:absolute;display:block;border-radius:50%;pointer-events:none; }
.seal-glow { inset:16%; box-shadow:0 0 10px 3px rgba(255,220,145,.42),0 0 22px 9px rgba(255,200,90,.18); animation:waxPulse 2.9s ease-in-out infinite; }
.seal-sheen { display:none; }
.touch-icon { position:absolute;z-index:8;left:50%;top:82%;width:58px;height:58px;transform:translateX(-50%);display:grid;place-items:center;pointer-events:none;user-select:none; }
.touch-mask { position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at center,#f7eedf 0 52%, rgba(247,238,223,.96) 62%, rgba(247,238,223,0) 83%); box-shadow:0 8px 18px rgba(113,86,50,.08); }
.touch-icon img { position:relative;z-index:1;width:38px;height:38px;display:block;animation:handMove 2.6s ease-in-out infinite; }

.front-image {position:absolute;z-index:4;top:0;left:0;width:100%;height:100%;object-fit:contain;display:block;pointer-events:none;user-select:none;filter:drop-shadow(0 2px 4px rgba(8,17,29,.11));}
/* Open flap remains visibly raised, instead of fading away or closing behind the note. */
.app-shell.is-opening .opening-underlay,
.app-shell.is-opening .opening-stage,
.app-shell.is-paused .opening-underlay,
.app-shell.is-paused .opening-stage,
.app-shell.is-transitioning .opening-underlay,
.app-shell.is-transitioning .opening-stage {opacity:1;visibility:visible;}
.cover-art {transition:opacity .15s ease-out;}
.app-shell.is-opening .cover-art,.app-shell.is-paused .cover-art,.app-shell.is-transitioning .cover-art {opacity:0;}
.app-shell.is-opening .flap-rotor {animation:foldFlap .54s cubic-bezier(.25,.74,.34,1) .12s both;}
.app-shell.is-paused .flap-rotor,.app-shell.is-transitioning .flap-rotor {transform:perspective(730px) rotateX(-150deg);}
.app-shell.is-opening .paper-card {animation:slideCard .78s cubic-bezier(.19,.78,.24,1) .76s both;}
.app-shell.is-paused .paper-card,.app-shell.is-transitioning .paper-card {opacity:1;transform:translateY(-43%) scale(1);}
.app-shell.is-opening .seal-button {animation:sealRelease .23s ease-out both;}
.app-shell.is-paused .seal-button,.app-shell.is-transitioning .seal-button {opacity:0;pointer-events:none;}
.app-shell.is-opening .touch-icon,.app-shell.is-paused .touch-icon,.app-shell.is-transitioning .touch-icon {opacity:0;transform:translateX(-50%) translateY(8px);transition:opacity .18s ease,transform .18s ease;}
.app-shell.is-transitioning .cover {opacity:0;pointer-events:none;transition:opacity .60s ease,visibility 0s linear .6s;}
.app-shell.is-reading .cover {opacity:0;visibility:hidden;pointer-events:none;}
.app-shell.is-transitioning .interior,.app-shell.is-reading .interior {opacity:1;transform:translateY(0);pointer-events:auto;visibility:visible;}
@keyframes foldFlap {
  0% {transform:perspective(730px) rotateX(0deg);filter:brightness(1);}
  40% {transform:perspective(730px) rotateX(-77deg);filter:brightness(1.07);}
  77% {transform:perspective(730px) rotateX(-144deg);filter:brightness(.96);}
  100% {transform:perspective(730px) rotateX(-150deg);filter:brightness(.96);}
}
@keyframes slideCard {
  0% {opacity:0;transform:translateY(25%) scale(.96);}
  11% {opacity:1;}
  100% {opacity:1;transform:translateY(-43%) scale(1);}
}

.interior { z-index:1;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(50px);display:grid;place-items:center;padding:22px;background:radial-gradient(ellipse at 50% 30%,#fffaf0,#f5e5cd);transition:opacity .68s ease,transform .9s cubic-bezier(.15,.7,.22,1); }
.inside-frame {position:relative;overflow:hidden;width:100%;min-height:min(680px,calc(100dvh - 44px));border:1px solid #cfac7f;outline:1px solid rgba(185,130,75,.33);outline-offset:-10px;border-radius:12px;background:radial-gradient(ellipse at 50% 22%,#fffbf1,#f3e4cf 100%);padding:45px 23px 35px;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;box-shadow:0 16px 42px rgba(65,45,27,.12);}
.border-floral {position:absolute;font-size:100px;line-height:1;color:#a5ab87;opacity:.22;pointer-events:none;}
.corner-a {top:-30px;left:-30px;transform:rotate(-24deg)}
.corner-b {bottom:-34px;right:-30px;transform:rotate(155deg)}
.inside-top-rule {font-size:18px;color:#c29d63;margin-bottom:16px;}
.inside-caption {margin:0;text-transform:uppercase;font:500 12px var(--display);letter-spacing:.23em;color:#986c45;}
.monogram {margin:16px 0 0;font:500 30px/1 var(--display);color:#a67445;}
.monogram span {font-size:.7em;}
.inside-divider {font-size:22px;color:#bc9369;margin:10px 0;}
.interior h2 {margin:5px 0;color:#784e31;font:500 clamp(38px,8.3vw,52px)/.95 var(--display);}
.interior h2 span {display:block;}
.interior h2 em {display:block;font-size:28px;font-weight:400;line-height:1.4;}
.inside-quote {font:italic 22px/1.25 var(--display);max-width:300px;margin:27px 0 0;color:#845c3c;}
.inside-date {font:500 24px/1.1 var(--display);margin:30px 0 0;}
.return-button {margin:28px 0 0;padding:11px 19px;border:1px solid #ba9164;border-radius:30px;color:#845a38;background:rgba(255,250,240,.7);font:500 12px var(--text);cursor:pointer;}
.return-button:focus-visible {outline:3px solid #8b6b4a;outline-offset:3px;}
@keyframes waxPulse {0%,100%{transform:scale(.98);box-shadow:0 0 10px 4px rgba(255,218,136,.38),0 0 18px 9px rgba(255,200,90,.17)}50%{transform:scale(1.075);box-shadow:0 0 13px 7px rgba(255,220,140,.65),0 0 25px 13px rgba(255,205,92,.30)}}
@keyframes shineSpin {to{transform:rotate(360deg)}}
@keyframes handMove {0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@keyframes handDisappear {to{opacity:0;transform:translateY(8px)}}
@keyframes sealRelease {0%{opacity:1;scale:1}50%{opacity:1;scale:1.12}100%{opacity:0;scale:.82}}


@keyframes subtleZoom {to{transform:scale(1.018)}}
@media (min-width:520px) {body{padding:18px 0}.app-shell{height:min(920px,calc(100dvh - 36px));border-radius:22px}}
@media (prefers-reduced-motion:reduce) {
  .seal-glow,.seal-sheen,.touch-icon,.touch-icon img {animation:none!important;}
  .app-shell.is-opening .flap-rotor,.app-shell.is-opening .paper-card {animation:none!important;}
  .interior,.cover {transition:none!important;}
}
/* FASE 3 — contenido completo. Se conserva intacta la portada y su apertura. */
.interior {display:block;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;padding:0;scroll-behavior:auto;}
.app-shell.is-reading .interior {overflow-y:auto;}
.inside-frame.main-presentation {min-height:100%;min-height:100dvh;border-radius:0;outline-offset:-13px;box-shadow:none;padding:62px 27px 50px;gap:0;}
.main-presentation::before,.content-section::before {content:'';position:absolute;inset:12px;border:1px solid rgba(171,128,74,.19);pointer-events:none;}
.corner-flower {position:absolute;font:110px/1 var(--display);color:#899476;opacity:.38;pointer-events:none;}
.corner-flower-a {top:-24px;left:0;transform:rotate(110deg);}
.corner-flower-b {bottom:-28px;right:0;transform:rotate(-65deg);}
.main-presentation .inside-quote {margin-top:24px;}
.main-presentation .inside-date {margin-top:28px;}
.scroll-prompt {position:relative;margin-top:30px;display:flex;align-items:center;gap:5px;flex-direction:column;font:italic 19px/1 var(--display);color:#9c6e48;animation:promptBreathe 3s ease-in-out infinite;}
@keyframes promptBreathe {0%,100%{opacity:.65;transform:translateY(0)}50%{opacity:1;transform:translateY(4px)}}
.content-section {position:relative;min-height:520px;padding:64px 26px 66px;background:radial-gradient(ellipse at 50% 32%,#fffaf0,#f4e7d7 90%);text-align:center;color:var(--brown);overflow:hidden;}
.content-section h2 {font:500 clamp(43px,12vw,60px)/1 var(--display);margin:8px 0 18px;color:#79502f;}
.section-overline {font:500 10px/1.5 var(--text);text-transform:uppercase;letter-spacing:.24em;color:#a67d58;margin:0 0 12px;}
.reveal {opacity:0;transform:translateY(34px);transition:opacity .75s ease,transform .8s cubic-bezier(.22,.68,.28,1)}
.reveal.is-visible {opacity:1;transform:translateY(0)}
.photo-section {padding-top:78px;}
.photo-paper {max-width:360px;margin:22px auto 0;padding:12px 12px 16px;background:#fffdf6;box-shadow:0 12px 34px rgba(64,37,21,.19);transform:rotate(-2deg);}
.photo-stage {height:310px;background:#d8d1c1;overflow:hidden;display:grid;place-items:center;}
.photo-stage img {width:100%;height:100%;object-fit:cover;}
.photo-placeholder {height:100%;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:#837866;background:linear-gradient(135deg,#e6e2d7,#cbd0c5);font:italic 22px/1.2 var(--display);padding:24px;}
.photo-placeholder span {max-width:205px;}
.photo-caption {font:italic 25px var(--display);color:#805839;margin:16px auto 0;}
.photo-caption span,.farewell-names span {color:#c19a67;}
.floral-signature {display:block;font:54px var(--display);color:#ac8260;margin-top:36px;}
.countdown-section {background:radial-gradient(ellipse at 50% 24%,#fff7ea,#eee0ce);padding-top:84px;min-height:480px;}
.floral-crown {font:32px var(--display);letter-spacing:.16em;color:#a67e55;margin-bottom:20px;}
.countdown {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;max-width:385px;margin:32px auto 0;}
.countdown div {background:rgba(255,254,248,.73);border:1px solid rgba(191,149,91,.35);padding:14px 2px;border-radius:7px;box-shadow:0 5px 15px rgba(82,59,28,.05);}
.countdown strong {display:block;font:500 clamp(26px,7.5vw,40px)/1 var(--display);font-variant-numeric:tabular-nums;color:#19334d;}
.countdown span {display:block;font:500 10px/1.5 var(--text);color:#947256;margin-top:8px;}
.countdown-date {font:italic 25px var(--display);margin-top:28px;color:#946747;}
.event-section {padding-top:76px;}
.event-section>h2 {margin-bottom:36px;}
.location-card {position:relative;background:#fffaf0;border:1px solid #dbbc94;padding:32px 22px 35px;max-width:350px;margin:0 auto 26px;box-shadow:0 14px 33px rgba(85,51,25,.09);}
.location-card::after {content:'';position:absolute;inset:8px;border:1px solid rgba(205,164,102,.3);pointer-events:none;}
.location-icon {color:#ad7b49;margin:0 auto 6px;}
.location-card h3 {font:500 34px/1.1 var(--display);font-variant:small-caps;color:#8b5a37;margin:5px auto 18px;}
.location-time {font:500 18px/1.2 var(--display);color:#a37248;margin:0 0 15px;}
.location-name {font:500 21px/1.2 var(--display);color:#19334d;margin:0 0 7px;}
.location-address {font:13px/1.5 var(--text);color:#8e7865;min-height:20px;margin:0 0 22px;}
.map-button {border:1px solid #18314b;background:#18314b;color:#fff6e7;border-radius:30px;padding:11px 19px;display:inline-flex;align-items:center;gap:12px;justify-content:center;cursor:pointer;font:500 13px/1.2 var(--text);}
.map-button:disabled {opacity:.62;cursor:not-allowed;}
.rsvp-section {background:radial-gradient(ellipse at 50% 40%,#fff8e9,#f0e0c9);padding-top:84px;min-height:470px;}
.rsvp-section p:not(.section-overline):not(.config-note) {font:italic 24px/1.25 var(--display);max-width:310px;margin:16px auto 32px;}
.rsvp-button {display:inline-flex;align-items:center;justify-content:center;gap:13px;padding:15px 25px;border-radius:35px;background:#17304b;color:#fff4e2;border:1px solid #cba472;text-decoration:none;font:500 14px var(--text);box-shadow:0 7px 15px rgba(30,50,70,.16);}
.rsvp-button[aria-disabled="true"] {opacity:.58;cursor:not-allowed;}
.config-note {max-width:260px;margin:16px auto 0;color:#998575;font:11px/1.4 var(--text);}
.farewell-section {min-height:520px;display:flex;align-items:center;flex-direction:column;justify-content:center;gap:0;}
.farewell-section h2 {font:italic 500 67px var(--display);}
.farewell-section>p:not(.farewell-date):not(.farewell-names) {font:italic 28px/1.2 var(--display);max-width:300px;margin:8px auto 22px;}
.end-flower {font:76px var(--display);color:#a28b71;margin-bottom:4px;}
.farewell-names {font:500 26px/1.15 var(--display);margin:13px auto;}
.farewell-date {letter-spacing:.14em;font:500 17px var(--display);margin-top:12px;}
.farewell-section .return-button {margin-top:32px;}
@media(min-width:520px) {.inside-frame.main-presentation{min-height:100%;} .content-section{padding-left:35px;padding-right:35px;}}
@media(max-height:700px){.inside-frame.main-presentation{padding-top:28px;padding-bottom:24px}.main-presentation .inside-quote{margin-top:12px}.main-presentation .inside-date{margin-top:12px}.scroll-prompt{margin-top:12px;}}
@media(prefers-reduced-motion:reduce){.reveal,.scroll-prompt {animation:none;transition:none;opacity:1;transform:none}}

/* FASE 3 v2: scroll táctil funcional, pero sin barra visible. */
html, body {overflow:hidden;}
.interior {scrollbar-width:none!important;-ms-overflow-style:none!important;}
.interior::-webkit-scrollbar,html::-webkit-scrollbar,body::-webkit-scrollbar {display:none!important;width:0!important;height:0!important;}
.interior::-webkit-scrollbar-thumb {background:transparent!important;}
/* Indicadores nativos de scroll ocultos; se mantiene el gesto táctil vertical. */

/* Enlaces corregidos: solo los botones son interactivos. */
.location-address,
.location-address * {
  pointer-events: none !important;
  -webkit-touch-callout: none;
}
.location-address a,
.location-address a[x-apple-data-detectors],
.location-address a[href^="http"],
.location-address a[href^="maps:"] {
  pointer-events: none !important;
  text-decoration: none !important;
  color: inherit !important;
}
a.map-button {text-decoration:none; -webkit-tap-highlight-color:rgba(183,139,85,.18);}
a.map-button:focus-visible {outline:3px solid #ad7b49;outline-offset:4px;}
a.map-button:not([href]) {opacity:.62;cursor:not-allowed;pointer-events:none;}


/* FASE 3 — refinamiento floral Opción A */
.cover {background:radial-gradient(ellipse at 50% 20%,#faf3e6,#f2e5d0 78%,#ebdcc6 100%);}
.cover-art {filter: none;}
.main-presentation, .content-section {isolation:isolate;}
.botanical-corner, .section-botanical {position:absolute;display:block;pointer-events:none;user-select:none;z-index:0;filter:drop-shadow(0 10px 18px rgba(83,60,36,.10));transform-origin:center center;animation:floralFloat 8s ease-in-out infinite;}
.botanical-corner {opacity:.92;}
.intro-top-left {top:-12px;left:-14px;width:46%;max-width:240px;}
.intro-bottom-right {right:-18px;bottom:-22px;width:42%;max-width:220px;animation-duration:9.2s;animation-delay:-2.3s;}
.section-botanical {opacity:.84;}
.section-botanical.soft {opacity:.38;filter:none;}
.section-botanical.strong {opacity:.92;}
.section-top-left {top:-8px;left:-10px;width:37%;max-width:210px;}
.section-top-right {top:-10px;right:-10px;width:34%;max-width:195px;animation-duration:9.5s;animation-delay:-1.2s;}
.section-bottom-left {left:-8px;bottom:-10px;width:33%;max-width:185px;animation-duration:9.5s;animation-delay:-3s;}
.section-bottom-right {right:-8px;bottom:-10px;width:34%;max-width:190px;animation-duration:10s;animation-delay:-2s;}
.photo-section .section-bottom-right {width:44%;max-width:235px;right:-18px;bottom:34px;}
.event-section .section-top-left {width:32%;max-width:170px;top:35px;left:-18px;}
.farewell-section .section-top-left {width:32%;max-width:180px;top:30px;left:-12px;}
.farewell-section .section-bottom-right {width:44%;max-width:228px;bottom:18px;right:-14px;}
.main-presentation > *:not(.botanical-corner),
.content-section > *:not(.section-botanical) {position:relative;z-index:1;}
.location-card, .photo-paper, .countdown, .rsvp-button {position:relative;z-index:2;}
.photo-paper, .location-card {backdrop-filter: blur(0px);}
.inside-frame {background:radial-gradient(ellipse at 50% 22%,#fffbf4,#f5e7d3 100%);}
.content-section {background:radial-gradient(ellipse at 50% 32%,#fffaf3,#f4e8d9 92%);}
.countdown-section {background:radial-gradient(ellipse at 50% 24%,#fff8ee,#f0e2d1);}
.rsvp-section {background:radial-gradient(ellipse at 50% 38%,#fff9ef,#f1e3cf);}
.location-card, .photo-paper {border-radius:10px;}
.location-card::after {inset:10px;}
.location-name {max-width:270px;margin-left:auto;margin-right:auto;}
@keyframes floralFloat {0%,100%{transform:translate3d(0,0,0) rotate(0deg) scale(1)}50%{transform:translate3d(0,-6px,0) rotate(.5deg) scale(1.015)}}
@media (prefers-reduced-motion:reduce){.botanical-corner,.section-botanical{animation:none!important}}

.corner-flower{display:none!important;}


/* Ajustes correctivos solicitados por el usuario */
.opening-underlay{object-position:center top;}
.section-botanical{height:auto;max-width:none;filter:drop-shadow(0 8px 16px rgba(83,60,36,.08));}
.section-top-left{top:-6px;left:-6px;width:clamp(118px,32%,170px);}
.section-top-right{top:-6px;right:-6px;width:clamp(112px,30%,162px);}
.section-bottom-left{left:-6px;bottom:-6px;width:clamp(110px,29%,155px);}
.section-bottom-right{right:-6px;bottom:-6px;width:clamp(114px,31%,165px);}
.photo-section .section-bottom-right,.event-section .section-bottom-right,.farewell-section .section-bottom-right{width:clamp(120px,33%,172px);right:-4px;bottom:-4px;}
.event-section .section-top-left,.farewell-section .section-top-left{width:clamp(118px,31%,166px);top:-4px;left:-4px;opacity:.82;}
.section-botanical.soft{opacity:.58;}
.intro-top-left{top:-10px;left:-10px;width:clamp(150px,42%,230px);}
.intro-bottom-right{right:-10px;bottom:-12px;width:clamp(138px,38%,215px);}

/* REVISION REAL: Portada A, sello y mano calibrados sobre el lienzo 941 x 1672. */
.seal-button {transform:translate(-50%,-50%);}
.seal-glow {inset:10%;border:1px solid rgba(255,224,156,.28);background:transparent;box-shadow:0 0 8px 3px rgba(255,220,154,.48),0 0 19px 8px rgba(255,199,95,.23);animation:sealHaloCorrected 2.9s ease-in-out infinite;}
.seal-sheen {display:none;}
@keyframes sealHaloCorrected {0%,100% {opacity:.72;transform:scale(.98);} 50% {opacity:1;transform:scale(1.07);}}
.touch-icon {position:absolute;z-index:8;display:block;max-width:none;border:0;padding:0;margin:0;background:none;object-fit:contain;transform:translate(-50%,-50%);animation:singleHandFloat 2.6s ease-in-out infinite;pointer-events:none;}
@keyframes singleHandFloat {0%,100% {transform:translate(-50%,-50%) translateY(0);} 50% {transform:translate(-50%,-50%) translateY(-3px);}}
.app-shell.is-opening .touch-icon,.app-shell.is-paused .touch-icon,.app-shell.is-transitioning .touch-icon {opacity:0;transform:translate(-50%,-50%) translateY(7px);animation:none;transition:opacity .18s ease,transform .18s ease;}
.opening-stage{transform-style:preserve-3d;}
.envelope-back {display:block;position:absolute;z-index:0;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;}
.flap-rotor {height:56.324%;transform-origin:50% 0;z-index:2;}
.flap-image {width:100%;height:100%;object-fit:fill;}
.front-image {z-index:4;width:100%;height:100%;object-fit:fill;}
.paper-card {z-index:3;top:4%;left:18%;width:64%;height:76%;}
/* Uniform floral illustrations: never stretch their proportions or blow them up. */
.botanical-corner,.section-botanical{height:auto!important;width:var(--flower-width, 118px)!important;max-width:var(--flower-width,118px)!important;min-width:0!important;object-fit:contain!important;object-position:center!important;filter:drop-shadow(0 4px 9px rgba(88,65,40,.06));animation:botanicalBreathe 8s ease-in-out infinite!important;transform-origin:center;}
.intro-top-left{--flower-width:154px;top:-3px;left:-10px;}
.intro-bottom-right{--flower-width:152px;bottom:-8px;right:-7px;}
.section-top-left{--flower-width:118px;top:-4px;left:-5px;}
.section-top-right{--flower-width:118px;top:-4px;right:-5px;}
.section-bottom-left{--flower-width:120px;bottom:-5px;left:-5px;}
.section-bottom-right{--flower-width:120px;bottom:-5px;right:-5px;}
.photo-section .section-bottom-right{--flower-width:128px;bottom:3px;right:-5px;}
.event-section .section-top-left,.farewell-section .section-top-left{--flower-width:120px;top:8px;left:-5px;}
.farewell-section .section-bottom-right{--flower-width:134px;right:-5px;bottom:4px;}
@keyframes botanicalBreathe {0%,100%{transform:translate3d(0,0,0) rotate(0deg)}50%{transform:translate3d(0,-4px,0) rotate(.5deg)}}
@media (max-width:370px){.intro-top-left,.intro-bottom-right{--flower-width:134px}.section-botanical{--flower-width:106px}}
@media (prefers-reduced-motion:reduce){.botanical-corner,.section-botanical,.touch-icon,.seal-glow{animation:none!important}}

/* Flap folds up gently but stays below the title on compact iPhone screens. */
@keyframes foldFlap {0%{transform:perspective(730px) rotateX(0deg);filter:brightness(1)}48%{transform:perspective(730px) rotateX(-72deg);filter:brightness(1.04)}83%{transform:perspective(730px) rotateX(-113deg);filter:brightness(.97)}100%{transform:perspective(730px) rotateX(-118deg);filter:brightness(.97)}}
.app-shell.is-paused .flap-rotor,.app-shell.is-transitioning .flap-rotor{transform:perspective(730px) rotateX(-118deg);}
