/* ==========================================================================
   PUBLIC RENDERER — config-driven engine stylesheet
   Every visual dimension here is controlled by a CSS custom property or a
   data-attribute-selected class, both set by views/public/invitation.php
   from TemplateEngine::resolveForInvitation(). This is what lets 15 Master
   Templates x unlimited Category Presets produce unlimited distinct designs
   without a separate stylesheet per combination.
   ========================================================================== */

:root{
  --pv-primary:#cda349;
  --pv-secondary:#faf9f6;
  --pv-accent:#cda349;
  --pv-ink:#22201c;
  --pv-font-display:'Cormorant Garamond', serif;
  --pv-font-body:'Inter', sans-serif;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  font-family:var(--pv-font-body);
  color:var(--pv-ink);
  background:var(--pv-secondary);
  overflow-x:hidden;
}

img,video{max-width:100%;display:block}

/* ---------- Loading screen ---------- */
.pv-loader{
  position:fixed; inset:0; z-index:999;
  display:flex; align-items:center; justify-content:center; flex-direction:column; gap:16px;
  background:var(--pv-secondary);
  transition:opacity .6s ease, visibility .6s ease;
}
.pv-loader.pv-hide{opacity:0; visibility:hidden; pointer-events:none}
.pv-loader-mark{
  width:64px; height:64px; border-radius:50%;
  border:2px solid var(--pv-accent);
  display:flex; align-items:center; justify-content:center;
  font-family:var(--pv-font-display); color:var(--pv-accent); font-size:1.4rem;
}
.pv-loader[data-loading="simple-fade"] .pv-loader-mark{ border-style:none; }
.pv-loader[data-loading="gold-monogram"] .pv-loader-mark,
.pv-loader[data-loading="dome-silhouette"] .pv-loader-mark{ animation:pv-pulse 1.6s ease-in-out infinite; }
.pv-loader[data-loading="geometric-spin"] .pv-loader-mark,
.pv-loader[data-loading="wave-ripple"] .pv-loader-mark,
.pv-loader[data-loading="petal-spin"] .pv-loader-mark{ animation:pv-spin 2.2s linear infinite; }
.pv-loader[data-loading="progress-bar"] .pv-loader-mark{ display:none; }
.pv-loader-bar{ width:160px; height:2px; background:rgba(0,0,0,.08); display:none; overflow:hidden; }
.pv-loader[data-loading="progress-bar"] .pv-loader-bar{ display:block; }
.pv-loader-bar span{ display:block; height:100%; width:30%; background:var(--pv-accent); animation:pv-progress 1.2s ease-in-out infinite; }
.pv-loader-label{ font-size:.7rem; letter-spacing:.2em; text-transform:uppercase; color:var(--pv-accent); }

@keyframes pv-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.12);opacity:.7}}
@keyframes pv-spin{to{transform:rotate(360deg)}}
@keyframes pv-progress{0%{transform:translateX(-100%)}100%{transform:translateX(400%)}}

/* ---------- Hero ---------- */
.pv-hero{
  min-height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; padding:60px 20px; position:relative;
}
.pv-hero h1{
  font-family:var(--pv-font-display); font-weight:600;
  font-size:clamp(2.2rem,6vw,4rem); color:var(--pv-primary); margin:0 0 10px; letter-spacing:.01em;
}
.pv-hero .pv-subtitle{ font-size:.85rem; letter-spacing:.22em; text-transform:uppercase; color:var(--pv-accent); }

/* ---------- Sections ---------- */
.pv-section{ max-width:880px; margin:0 auto; padding:70px 20px; opacity:0; }
.pv-section.pv-in{ opacity:1; }
.pv-section h2{
  font-family:var(--pv-font-display); text-align:center; color:var(--pv-primary);
  font-size:2rem; margin-bottom:28px;
}

/* ---------- Countdown ---------- */
.pv-countdown{ display:flex; gap:14px; justify-content:center; flex-wrap:wrap; }
.pv-countdown .pv-unit{
  min-width:76px; text-align:center; padding:14px 10px; border-radius:10px;
  background:color-mix(in srgb, var(--pv-accent) 8%, transparent);
  border:1px solid color-mix(in srgb, var(--pv-accent) 45%, transparent);
}
.pv-countdown[data-countdown="text-only"] .pv-unit{ background:none; border:none; }
.pv-countdown .pv-unit .num{ font-family:var(--pv-font-display); font-size:1.9rem; color:var(--pv-primary); display:block; }
.pv-countdown .pv-unit .lbl{ font-size:.65rem; letter-spacing:.12em; text-transform:uppercase; color:var(--pv-accent); }

/* Countdown variants */
.pv-countdown[data-countdown="editorial"] .pv-unit{ background:none; border:none; min-width:auto; padding:0 10px; }
.pv-countdown[data-countdown="editorial"] .pv-unit .num{ font-size:3.2rem; }
.pv-countdown[data-countdown="glass"] .pv-unit,
.pv-countdown[data-countdown="glass-cards"] .pv-unit,
.pv-countdown[data-countdown="soft-cards"] .pv-unit{
  background:rgba(255,255,255,.35); backdrop-filter:blur(8px); border:1px solid rgba(255,255,255,.5);
}
.pv-countdown[data-countdown="flip-clock"] .pv-unit,
.pv-countdown[data-countdown="flip"] .pv-unit{
  background:#1a1a1a; border-color:#1a1a1a; border-radius:6px; box-shadow:inset 0 -1px 0 rgba(255,255,255,.15);
}
.pv-countdown[data-countdown="flip-clock"] .pv-unit .num,
.pv-countdown[data-countdown="flip"] .pv-unit .num{ color:#fff; }
.pv-countdown[data-countdown="flip-clock"] .pv-unit .lbl,
.pv-countdown[data-countdown="flip"] .pv-unit .lbl{ color:rgba(255,255,255,.6); }
.pv-countdown[data-countdown="circular"] .pv-unit,
.pv-countdown[data-countdown="orbit-rings"] .pv-unit{
  width:84px; height:84px; border-radius:50%; display:flex; flex-direction:column; align-items:center; justify-content:center;
  background:conic-gradient(var(--pv-accent) 0deg, color-mix(in srgb, var(--pv-accent) 15%, transparent) 0deg);
  border:none; padding:0;
}
.pv-countdown[data-countdown="bold-cards"] .pv-unit{ background:var(--pv-accent); border-color:var(--pv-accent); }
.pv-countdown[data-countdown="bold-cards"] .pv-unit .num{ color:#fff; }
.pv-countdown[data-countdown="bold-cards"] .pv-unit .lbl{ color:rgba(255,255,255,.8); }
.pv-countdown[data-countdown="neon-digits"] .pv-unit{
  background:#000; border-color:var(--pv-accent);
}
.pv-countdown[data-countdown="neon-digits"] .pv-unit .num{
  color:var(--pv-accent); text-shadow:0 0 8px color-mix(in srgb, var(--pv-accent) 70%, transparent);
}

/* ---------- Events / venues ---------- */
.pv-event{
  border-left:3px solid var(--pv-accent); background:#fff; border-radius:0 10px 10px 0;
  padding:16px 20px; margin-bottom:16px; box-shadow:0 1px 3px rgba(0,0,0,.04);
}
.pv-event h3{ margin:0 0 4px; font-family:var(--pv-font-display); font-size:1.3rem; }
.pv-venue{ font-size:.88rem; color:#555; margin-top:6px; }

/* ---------- Timeline variants ---------- */
.pv-timeline[data-timeline="horizontal"]{ display:flex; gap:14px; overflow-x:auto; padding-bottom:10px; -webkit-overflow-scrolling:touch; }
.pv-timeline[data-timeline="horizontal"] .pv-event{ flex:0 0 240px; }
.pv-timeline[data-timeline="card"]{ display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:14px; }
.pv-timeline[data-timeline="card"] .pv-event{ border-left:none; border:1px solid color-mix(in srgb, var(--pv-accent) 30%, transparent); border-radius:10px; }
.pv-timeline[data-timeline="minimal"] .pv-event{ border-left:none; background:none; box-shadow:none; padding:10px 0; border-bottom:1px solid #eee; border-radius:0; }
.pv-timeline[data-timeline="glass"] .pv-event{ background:rgba(255,255,255,.4); backdrop-filter:blur(10px); border-left:none; border:1px solid rgba(255,255,255,.5); }
.pv-timeline[data-timeline="editorial"] .pv-event{ border:none; background:none; box-shadow:none; padding:16px 0; border-bottom:1px solid #eee; border-radius:0; }
.pv-timeline[data-timeline="editorial"] .pv-event h3{ font-size:1.6rem; }
.pv-timeline[data-timeline="circular"] .pv-event{ border-left:none; padding-left:28px; position:relative; background:none; box-shadow:none; }
.pv-timeline[data-timeline="circular"] .pv-event::before{
  content:""; position:absolute; left:0; top:6px; width:12px; height:12px; border-radius:50%; background:var(--pv-accent);
}
.pv-timeline[data-timeline="circular"] .pv-event::after{
  content:""; position:absolute; left:5px; top:20px; bottom:-16px; width:2px; background:color-mix(in srgb, var(--pv-accent) 30%, transparent);
}
.pv-timeline[data-timeline="step"] .pv-event{ position:relative; padding-left:44px; border-left:none; background:none; box-shadow:none; }
.pv-timeline[data-timeline="step"] .pv-event::before{
  content:var(--pv-step); position:absolute; left:0; top:0; width:30px; height:30px; border-radius:50%;
  background:var(--pv-accent); color:#fff; display:flex; align-items:center; justify-content:center; font-size:.8rem;
}

/* ---------- Gallery ---------- */
.pv-gallery[data-gallery="masonry"]{ column-count:3; column-gap:12px; }
.pv-gallery[data-gallery="masonry"] img{ margin-bottom:12px; border-radius:8px; }
.pv-gallery[data-gallery="grid"]{ display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:12px; }
.pv-gallery[data-gallery="grid"] img{ border-radius:8px; aspect-ratio:1; object-fit:cover; }
.pv-gallery[data-gallery="carousel"],
.pv-gallery[data-gallery="stacked-polaroid"]{ display:none; } /* Swiper takes over via .swiper container instead */
.pv-swiper{ width:100%; padding:10px 0 30px; }
.pv-swiper img{ border-radius:8px; }
@media (max-width:720px){ .pv-gallery[data-gallery="masonry"]{ column-count:2; } }

/* ---------- RSVP ---------- */
.pv-rsvp[data-rsvp="card-modal"] .pv-rsvp-box,
.pv-rsvp[data-rsvp="drawer"] .pv-rsvp-box{
  background:#fff; border:1px solid color-mix(in srgb, var(--pv-accent) 40%, transparent);
  border-radius:14px; padding:30px; max-width:440px; margin:0 auto; text-align:center;
}
.pv-rsvp[data-rsvp="inline-form"] .pv-rsvp-box{ text-align:center; }
.pv-rsvp-note{ color:#888; font-size:.9rem; }

/* ---------- Forms (RSVP / Guest book) ---------- */
.pv-form{ display:flex; flex-direction:column; gap:10px; text-align:left; }
.pv-form-row{ display:flex; gap:10px; }
.pv-form-row input{ flex:1; }
.pv-form input, .pv-form select, .pv-form textarea{
  font-family:var(--pv-font-body); border:1px solid rgba(0,0,0,.12); border-radius:8px;
  padding:10px 12px; font-size:14px; width:100%; background:#fff;
}
.pv-form input:focus, .pv-form select:focus, .pv-form textarea:focus{ outline:2px solid var(--pv-accent); outline-offset:1px; }
.pv-btn{
  background:var(--pv-primary); color:var(--pv-button-text, #fff); border:none; border-radius:8px;
  padding:12px 18px; font-size:14px; cursor:pointer; font-weight:500;
}
.pv-btn:hover{ filter:brightness(1.06); }
.alert{ padding:10px 14px; border-radius:8px; margin-bottom:14px; font-size:14px; text-align:left; }
.alert-error{ background:rgba(200,60,60,.08); color:#b83c3c; border:1px solid rgba(200,60,60,.25); }
.alert-success{ background:rgba(60,150,100,.1); color:#2f8b5f; border:1px solid rgba(60,150,100,.3); }

.pv-guestbook-list{ max-width:600px; margin:24px auto 0; display:flex; flex-direction:column; gap:10px; }
.pv-guestbook-entry{ background:#fff; border-radius:10px; padding:12px 16px; text-align:left; box-shadow:0 1px 3px rgba(0,0,0,.05); }
.pv-guestbook-entry strong{ color:var(--pv-primary); font-family:var(--pv-font-display); }
.pv-guestbook-entry p{ margin:4px 0 0; font-size:.9rem; color:#444; }

/* Image with text overlay block */
.pv-image-overlay{ position:relative; border-radius:10px; overflow:hidden; }
.pv-image-overlay img{ width:100%; display:block; }
.pv-image-overlay-text{
  position:absolute; left:0; right:0; padding:16px; text-align:center;
  color:#fff; text-shadow:0 1px 4px rgba(0,0,0,.6); font-family:var(--pv-font-display); font-size:1.3rem;
  background:linear-gradient(180deg, transparent, rgba(0,0,0,.35));
}
.pv-image-overlay[data-position="top"] .pv-image-overlay-text{ top:0; background:linear-gradient(0deg, transparent, rgba(0,0,0,.35)); }
.pv-image-overlay[data-position="center"] .pv-image-overlay-text{ top:50%; transform:translateY(-50%); background:none; }
.pv-image-overlay[data-position="bottom"] .pv-image-overlay-text{ bottom:0; }

/* Video block */
.pv-video-wrap{ position:relative; width:100%; padding-top:56.25%; border-radius:10px; overflow:hidden; background:#000; }
.pv-video-wrap iframe, .pv-video-wrap video{ position:absolute; inset:0; width:100%; height:100%; border:0; }

/* Per-block background video */
.pv-block-bg-video{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:0; }
.pv-block-content-wrap{ position:relative; z-index:1; }

/* Video block unmute control */
.pv-video-unmute{
  position:absolute; bottom:10px; right:10px; z-index:2; width:34px; height:34px; border-radius:50%;
  background:rgba(0,0,0,.55); color:#fff; border:none; font-size:.9rem; cursor:pointer;
}

/* Audio clip block */
.pv-audio-block{ text-align:center; }
.pv-audio-label{ display:block; margin-bottom:8px; color:var(--pv-primary); font-family:var(--pv-font-display); }
.pv-audio-block audio{ width:100%; max-width:360px; }

/* Continuous celebration effects — procedural CSS particles */
.pv-celebration-layer{position:fixed;inset:0;pointer-events:none;z-index:40;overflow:hidden;contain:layout paint}
.pv-celebration-particle{position:absolute;top:-30px;display:block;opacity:.85;animation-name:pv-particle-fall;animation-timing-function:cubic-bezier(.25,.55,.45,1);animation-fill-mode:both;filter:drop-shadow(0 2px 5px rgba(0,0,0,.12));will-change:transform,opacity}
.pv-celebration-petal,.pv-celebration-rose{border-radius:80% 20% 80% 20%;background:linear-gradient(135deg,#fff1f4,#d88798);transform:rotate(25deg)}
.pv-celebration-confetti{border-radius:2px;background:linear-gradient(135deg,hsl(var(--hue) 78% 72%),hsl(calc(var(--hue) + 30) 75% 52%));}
.pv-celebration-heart{width:14px!important;height:14px!important;background:#d86c82;transform:rotate(45deg);border-radius:3px;top:-25px}
.pv-celebration-heart:before,.pv-celebration-heart:after{content:"";position:absolute;width:14px;height:14px;background:inherit;border-radius:50%}.pv-celebration-heart:before{left:-7px}.pv-celebration-heart:after{top:-7px}
.pv-celebration-sparkle,.pv-celebration-star{clip-path:polygon(50% 0,61% 38%,100% 50%,61% 62%,50% 100%,39% 62%,0 50%,39% 38%);background:linear-gradient(135deg,#fff,#e7bd54);box-shadow:0 0 18px rgba(231,189,84,.7)}
.pv-celebration-snow,.pv-celebration-bubble{border-radius:50%;background:rgba(255,255,255,.82);box-shadow:0 2px 8px rgba(255,255,255,.45)}
.pv-celebration-bubble{background:transparent;border:1px solid rgba(255,255,255,.72);box-shadow:inset 0 0 8px rgba(255,255,255,.25)}
.pv-celebration-leaf{border-radius:100% 0 100% 0;background:linear-gradient(135deg,#91a86a,#48633f);transform:rotate(35deg)}
.pv-celebration-balloon{width:22px!important;height:29px!important;border-radius:50% 50% 46% 46%;background:radial-gradient(circle at 35% 25%,#fff8,transparent 18%),linear-gradient(135deg,#c86b7d,#7d2639)}
.pv-celebration-balloon:after{content:"";position:absolute;top:27px;left:50%;width:1px;height:30px;background:rgba(80,50,50,.35)}
.pv-celebration-dust,.pv-celebration-champagne,.pv-celebration-bokeh{border-radius:50%;background:#e5c56e;box-shadow:0 0 10px rgba(229,197,110,.7)}
.pv-celebration-bokeh{background:rgba(255,226,143,.55);filter:blur(1px);box-shadow:0 0 22px rgba(255,211,111,.55)}
.pv-celebration-ribbon{border-radius:999px;background:linear-gradient(90deg,#cda349,#f4e0a1,#cda349);transform:rotate(15deg)}
.pv-celebration-lantern{width:16px!important;height:25px!important;border-radius:45% 45% 35% 35%;background:radial-gradient(circle,#fff8c8,#d5a948 55%,#7c5a24);box-shadow:0 0 24px rgba(245,207,112,.65)}
.pv-celebration-burst,.pv-celebration-firework{top:0;border-radius:50%;background:#f3d77b;box-shadow:0 0 8px #f3d77b;animation-name:pv-firework-burst}
@keyframes pv-particle-fall{0%{transform:translate3d(0,-30px,0) rotate(0deg) scale(.75);opacity:0}12%{opacity:.9}100%{transform:translate3d(var(--drift),110vh,0) rotate(var(--spin)) scale(1);opacity:0}}
@keyframes pv-firework-burst{0%{transform:translate(-50%,-50%) rotate(var(--angle)) translateX(0) scale(.6);opacity:0}15%{opacity:1}100%{transform:translate(-50%,-50%) rotate(var(--angle)) translateX(var(--distance)) scale(.15);opacity:0}}

/* Premium scratch card */
.pv-scratch-premium{box-shadow:0 18px 40px rgba(38,27,12,.18),inset 0 0 0 1px rgba(255,255,255,.25);border:1px solid rgba(205,163,73,.55);background:#b48a3c}
.pv-scratch-premium .pv-scratch-reveal{height:100%;display:flex;align-items:center;justify-content:center;box-sizing:border-box;background:linear-gradient(145deg,#fffdf7,#f4ead0);box-shadow:inset 0 0 28px rgba(205,163,73,.12)}
.pv-scratch-premium .pv-scratch-canvas{z-index:2}
.pv-scratch-shimmer{display:none!important}
@keyframes pv-scratch-shimmer{0%,35%{transform:translateX(-60%) rotate(7deg)}75%,100%{transform:translateX(60%) rotate(7deg)}}
.pv-scratch-spark{display:none!important}
@keyframes pv-scratch-spark{0%{opacity:0;transform:translate(-50%,-50%) scale(.2)}30%{opacity:1}100%{opacity:0;transform:translate(-50%,-120%) scale(1.8)}}
.pv-scratch-premium.pv-scratch-revealed .pv-scratch-reveal{box-shadow:0 0 35px rgba(205,163,73,.25)}

/* ---------- Decorative element vocabulary ---------- */
.pv-deco-gold-frame,.pv-deco-filigree-border{ border:1px solid color-mix(in srgb, var(--pv-accent) 55%, transparent); }
.pv-deco-corner-flourish{ position:relative; }
.pv-deco-corner-flourish::before,.pv-deco-corner-flourish::after{
  content:""; position:absolute; width:70px; height:70px; border:1px solid var(--pv-accent); opacity:.55;
}
.pv-deco-corner-flourish::before{ top:20px; left:20px; border-right:none; border-bottom:none; }
.pv-deco-corner-flourish::after{ bottom:20px; right:20px; border-left:none; border-top:none; }
.pv-deco-thin-rule .pv-section h2,.pv-deco-hairline-divider .pv-section h2{ border-bottom:1px solid #ddd; padding-bottom:10px; }
.pv-deco-confetti-overlay .pv-hero,.pv-deco-string-lights .pv-hero{
  background-image:radial-gradient(circle, color-mix(in srgb, var(--pv-accent) 30%, transparent) 1px, transparent 1px);
  background-size:22px 22px;
}

/* ---------- Tap-to-start opening gate ---------- */
.pv-opening{
  position:fixed; inset:0; z-index:1000;
  display:flex; align-items:center; justify-content:center; flex-direction:column; gap:22px;
  background:var(--pv-secondary); overflow:hidden; cursor:pointer;
  transition:opacity .8s ease, visibility .8s ease;
}
/* The physical/tap gate owns the viewport until the opening has fully completed. */
body.pv-gated > *:not(.pv-loader):not(.pv-opening){ opacity:0 !important; visibility:hidden !important; pointer-events:none !important; }
body:not(.pv-gated) > *:not(.pv-loader):not(.pv-opening){ opacity:1; visibility:visible; }
body.pv-ready .pv-section{visibility:visible;}
.pv-opening,.pv-opening *{-webkit-user-select:none;user-select:none;}
.pv-opening-label{cursor:pointer;touch-action:manipulation;}
.pv-opening{
  background:radial-gradient(circle at 50% 40%,rgba(255,255,255,.08),transparent 45%),#17120f;
}
.pv-opening-label:focus-visible{outline:2px solid currentColor;outline-offset:4px;}
.pv-opening.pv-opening-hidden{ opacity:0; visibility:hidden; pointer-events:none; }
.pv-opening-label{
  font-family:var(--pv-opening-button-font); font-size:1.1rem; letter-spacing:.15em; text-transform:uppercase;
  color:var(--pv-accent); border:1px solid var(--pv-accent); border-radius:100px; padding:14px 34px;
  animation:pv-tap-pulse 2s ease-in-out infinite;
}
@keyframes pv-tap-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.75}}
.pv-opening-mark{ font-family:var(--pv-font-display); font-size:2.2rem; color:var(--pv-primary); }
.pv-ripple-canvas{ position:absolute; inset:0; pointer-events:none; }
.pv-opening-video-bg{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:-1; }

/* Opening-experience visual treatments (transition-out state added via JS) */
.pv-opening[data-experience="curtain"]{ background:none; }
.pv-opening[data-experience="curtain"] .pv-curtain-panel{
  position:absolute; top:0; bottom:0; width:50%; background:var(--pv-primary);
  transition:transform 1.1s cubic-bezier(.76,0,.24,1);
}
.pv-opening[data-experience="curtain"] .pv-curtain-panel.left{ left:0; }
.pv-opening[data-experience="curtain"] .pv-curtain-panel.right{ right:0; }
.pv-opening.pv-opening-out[data-experience="curtain"] .pv-curtain-panel.left{ transform:translateX(-100%); }
.pv-opening.pv-opening-out[data-experience="curtain"] .pv-curtain-panel.right{ transform:translateX(100%); }

.pv-opening[data-experience="door"] .pv-door-panel{
  position:absolute; top:0; bottom:0; width:50%; background:var(--pv-primary);
  transform-origin:center; transition:transform 1.2s cubic-bezier(.76,0,.24,1);
}
.pv-opening[data-experience="door"] .pv-door-panel.left{ left:0; transform-origin:left; }
.pv-opening[data-experience="door"] .pv-door-panel.right{ right:0; transform-origin:right; }
.pv-opening.pv-opening-out[data-experience="door"] .pv-door-panel{ transform:scaleX(0.02) rotateY(60deg); }

.pv-opening[data-experience^="envelope"] .pv-envelope{
  width:200px; height:130px; position:relative; margin-top:20px;
}
.pv-opening[data-experience^="envelope"] .pv-envelope-flap{
  position:absolute; top:0; left:0; width:100%; height:65px;
  background:var(--pv-primary); clip-path:polygon(0 0,100% 0,50% 100%);
  transform-origin:top; transition:transform 1s cubic-bezier(.76,0,.24,1);
}
.pv-opening.pv-opening-out[data-experience^="envelope"] .pv-envelope-flap{ transform:rotateX(180deg); }
.pv-opening[data-experience^="envelope"] .pv-envelope-body{
  position:absolute; bottom:0; width:100%; height:90px; background:color-mix(in srgb, var(--pv-primary) 80%, black);
}

.pv-opening[data-experience="fold"] .pv-fold-card{
  width:220px; height:150px; background:var(--pv-primary); transform-origin:top; transition:transform 1s ease;
}
.pv-opening.pv-opening-out[data-experience="fold"] .pv-fold-card{ transform:scaleY(0.02); }

.pv-opening[data-experience="cinematic"]{ background:#000; }
.pv-opening[data-experience="cinematic"] .pv-opening-mark,
.pv-opening[data-experience="cinematic"] .pv-opening-label{ color:var(--pv-accent); border-color:var(--pv-accent); }
.pv-opening.pv-opening-out[data-experience="cinematic"]{ background:transparent; }

.pv-opening[data-experience="starfield"] .pv-star{
  position:absolute; width:2px; height:2px; background:var(--pv-accent); border-radius:50%; opacity:.8;
}

.pv-opening[data-experience="bloom"] .pv-petal{
  position:absolute; width:10px; height:10px; background:var(--pv-accent); border-radius:60% 0;
  opacity:.7; transition:transform 1.2s ease, opacity 1.2s ease;
}
.pv-opening.pv-opening-out[data-experience="bloom"] .pv-petal{ transform:translateY(120vh) rotate(180deg); opacity:0; }


.pv-opening-label{ background:var(--pv-opening-button-bg); color:var(--pv-opening-button-text); border-color:var(--pv-opening-button-bg); box-shadow:0 12px 34px rgba(0,0,0,.16), inset 0 1px 0 rgba(255,255,255,.28); }
.pv-opening-label:hover{ filter:brightness(1.05); transform:translateY(-1px) scale(1.03); }
.pv-opening[data-experience="veil"]{ background:var(--pv-secondary); }
.pv-opening[data-experience="veil"] .pv-veil-panel{ position:absolute; inset:0 auto 0 0; width:50%; background:linear-gradient(90deg,rgba(255,255,255,.96),rgba(255,255,255,.55)); backdrop-filter:blur(3px); box-shadow:0 0 35px rgba(0,0,0,.12); transition:transform 1.45s cubic-bezier(.77,0,.18,1); z-index:2; }
.pv-opening[data-experience="veil"] .pv-veil-panel.right{ left:auto; right:0; background:linear-gradient(270deg,rgba(255,255,255,.96),rgba(255,255,255,.55)); }
.pv-opening.pv-opening-out[data-experience="veil"] .pv-veil-panel.left{ transform:translateX(-105%) rotate(-2deg); }
.pv-opening.pv-opening-out[data-experience="veil"] .pv-veil-panel.right{ transform:translateX(105%) rotate(2deg); }
.pv-book{ width:250px; height:170px; position:relative; perspective:1200px; z-index:3; }
.pv-book-cover,.pv-book-page{ position:absolute; inset:0; border-radius:8px 14px 14px 8px; box-shadow:0 18px 45px rgba(0,0,0,.18); }
.pv-book-cover{ background:linear-gradient(135deg,var(--pv-primary),color-mix(in srgb,var(--pv-primary) 55%,#111)); transform-origin:left center; transition:transform 1.25s cubic-bezier(.76,0,.24,1); z-index:2; }
.pv-book-page{ background:var(--pv-secondary); border:1px solid rgba(0,0,0,.08); }
.pv-opening.pv-opening-out[data-experience="book"] .pv-book-cover{ transform:rotateY(-145deg); }
.pv-seal{ width:78px; height:78px; border-radius:50%; background:radial-gradient(circle at 35% 30%,#e7c26c,var(--pv-primary) 55%,#7b5520); color:#fff; display:grid; place-items:center; font-size:24px; z-index:4; box-shadow:0 12px 30px rgba(0,0,0,.25); transition:transform .65s ease,opacity .5s ease; }
.pv-seal-card{ position:absolute; width:270px; height:180px; background:var(--pv-secondary); border:1px solid rgba(0,0,0,.12); border-radius:6px; box-shadow:0 18px 50px rgba(0,0,0,.2); transform:scale(.92); transition:transform 1s ease; }
.pv-opening.pv-opening-out[data-experience="wax-seal"] .pv-seal{ transform:scale(2.2) rotate(22deg); opacity:0; }
.pv-opening.pv-opening-out[data-experience="wax-seal"] .pv-seal-card{ transform:scale(1.04); }

.pv-opening.pv-opening-out{ opacity:0; visibility:hidden; }

/* ---------- Scratch card ---------- */
.pv-scratch{ max-width:340px; margin:0 auto; text-align:center; }
.pv-scratch-wrap{ position:relative; border-radius:12px; overflow:hidden; }
.pv-scratch-reveal{
  padding:30px 16px; background:#fff; border:1px solid color-mix(in srgb, var(--pv-accent) 40%, transparent);
  border-radius:12px; font-family:var(--pv-font-display); font-size:1.4rem; color:var(--pv-primary);
}
.pv-scratch-canvas{ position:absolute; inset:0; touch-action:none; cursor:pointer; }
.pv-scratch-hint{ font-size:.75rem; color:#999; margin-top:8px; }

/* ---------- Music player ---------- */
.pv-music-toggle{
  position:fixed; bottom:18px; right:18px; z-index:80;
  width:46px; height:46px; border-radius:50%; background:var(--pv-primary); color:#fff;
  border:none; cursor:pointer; font-size:1.1rem; box-shadow:0 2px 8px rgba(0,0,0,.25);
}

/* ---------- Add to calendar ---------- */
.pv-calendar-btn{
  display:inline-block; margin-top:10px; padding:8px 16px; border-radius:8px;
  border:1px solid var(--pv-accent); color:var(--pv-primary); text-decoration:none; font-size:.8rem;
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce){
  *{ animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; }
}
.pv-footer{
  text-align:center; padding:34px 20px; border-top:1px solid rgba(0,0,0,.06);
  font-size:.8rem; color:#888; display:flex; flex-direction:column; gap:10px; align-items:center;
}
.pv-footer-contact{ display:flex; gap:16px; }
.pv-footer-contact a{
  color:var(--pv-primary); text-decoration:none; font-size:.8rem; display:inline-flex; align-items:center; gap:6px;
}

.pv-word{display:inline-block;will-change:transform,opacity}.pv-opening[data-experience="envelope-ribbon"] .pv-envelope-ribbon{position:absolute;left:50%;top:-4%;width:18px;height:108%;background:rgba(150,35,55,.72);transform:translateX(-50%);z-index:5}.pv-opening[data-experience="envelope-ribbon"] .pv-envelope-seal{display:flex;position:absolute;z-index:7;left:50%;top:50%;transform:translate(-50%,-50%);width:58px;height:58px;border-radius:50%;align-items:center;justify-content:center;background:#8d2737;color:#f7e7b0;box-shadow:0 8px 20px rgba(0,0,0,.25);font-size:24px;transition:transform 1s ease,opacity 1s ease}.pv-opening.pv-opening-out[data-experience="envelope-ribbon"] .pv-envelope-seal{transform:translate(-50%,-50%) scale(1.9) rotate(18deg);opacity:0}.pv-opening[data-experience="envelope-double"] .pv-envelope-flap{clip-path:polygon(0 0,50% 48%,100% 0,100% 100%,0 100%)}.pv-opening[data-experience="envelope-parchment"] .pv-envelope-body{background:linear-gradient(135deg,#f4e5c7,#d6b77b);border-radius:8px}.pv-opening[data-experience="lotus"] .pv-envelope{display:none}.pv-opening[data-experience="lotus"]:before,.pv-opening[data-experience="lotus"]:after{content:"";position:absolute;width:45vw;height:45vw;max-width:430px;max-height:430px;border-radius:60% 40% 65% 35%;background:linear-gradient(135deg,rgba(255,255,255,.95),rgba(230,190,210,.6));transition:transform 1.5s cubic-bezier(.77,0,.18,1);z-index:2}.pv-opening[data-experience="lotus"]:before{transform:rotate(28deg) translateY(10%)}.pv-opening[data-experience="lotus"]:after{transform:rotate(-28deg) translateY(10%)}.pv-opening.pv-opening-out[data-experience="lotus"]:before{transform:translate(-90vw,-30vh) rotate(-45deg)}.pv-opening.pv-opening-out[data-experience="lotus"]:after{transform:translate(90vw,-30vh) rotate(45deg)}

.pv-map-wrap{position:relative;width:100%;margin-top:10px;overflow:hidden;border-radius:8px}.pv-map-frame{display:block;width:100%;min-height:200px;background:#f3f3f3}.pv-map-open-overlay{position:absolute;right:10px;bottom:10px;z-index:5;display:inline-flex;align-items:center;gap:4px;padding:7px 11px;border-radius:7px;text-decoration:none;font:600 12px/1.2 inherit;background:rgba(255,255,255,.96);color:#222;box-shadow:0 1px 6px rgba(0,0,0,.22);cursor:pointer}.pv-map-open-overlay:hover{opacity:.9}


/* Luxury Opening Experience Manager - layered physical staging */
.pv-opening{overflow:hidden;isolation:isolate;perspective:1800px;touch-action:manipulation}
.pv-opening-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;opacity:.72}
.lux-opening-stage{position:absolute;inset:0;display:grid;place-items:center;z-index:3;pointer-events:none;transform-style:preserve-3d}
.lux-object{position:relative;transform-style:preserve-3d;filter:drop-shadow(0 30px 45px rgba(0,0,0,.35));}
.lux-envelope{width:min(78vw,560px);height:min(52vw,370px);background:linear-gradient(145deg,#f6f0e5,#d8cdbb 55%,#b9a78c);border-radius:5px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.6),inset 0 -18px 30px rgba(75,55,35,.15),0 35px 70px rgba(0,0,0,.35);transform:rotateX(7deg) rotateZ(-1deg);}
.lux-envelope .flap{content:"";position:absolute;inset:0;clip-path:polygon(0 0,50% 53%,100% 0,100% 100%,0 100%);background:linear-gradient(135deg,#eee4d5,#c9b89e);transform-origin:50% 0;backface-visibility:hidden;box-shadow:inset 0 -1px rgba(0,0,0,.12);transition:transform 1.05s cubic-bezier(.76,0,.24,1)}
.lux-envelope:after{content:"";position:absolute;left:50%;top:48%;width:70px;height:70px;border-radius:50%;transform:translate(-50%,-50%) translateZ(25px);background:radial-gradient(circle at 30% 25%,#d7a36c,#8b3c2c 45%,#4e1e18 78%);box-shadow:0 8px 15px rgba(0,0,0,.35),inset 2px 2px 6px rgba(255,255,255,.28);}
.lux-book{width:min(78vw,620px);height:min(53vw,390px);position:relative;transform:rotateX(9deg);}
.lux-book .cover{position:absolute;inset:0 50% 0 0;background:linear-gradient(120deg,#231812,#60462c 45%,#17100c);border-radius:12px 3px 3px 12px;box-shadow:inset 4px 0 0 rgba(255,255,255,.08),0 30px 55px rgba(0,0,0,.45);transform-origin:right center;}
.lux-book .cover.right{inset:0 0 0 50%;border-radius:3px 12px 12px 3px;transform-origin:left center}
.lux-book .pages{position:absolute;inset:7% 10%;background:repeating-linear-gradient(90deg,#efe3ca 0 2px,#d3c0a0 3px 4px),linear-gradient(#fff8e9,#d9c5a1);border-radius:5px;box-shadow:0 8px 20px rgba(0,0,0,.25),inset 0 0 35px rgba(102,73,40,.18)}
.lux-box{width:min(72vw,560px);height:min(58vw,430px);position:relative;transform:translateZ(0) rotateX(8deg)}
.lux-box .base{position:absolute;left:7%;right:7%;bottom:6%;height:66%;background:linear-gradient(145deg,#25160f,#6d4a2d 45%,#1b100b);border-radius:8px 8px 16px 16px;box-shadow:inset 0 0 0 2px rgba(220,181,111,.22),0 35px 60px rgba(0,0,0,.48)}
.lux-box .lid{position:absolute;left:5%;right:5%;top:7%;height:44%;background:linear-gradient(145deg,#725334,#1f120b 75%);border-radius:9px;transform-origin:50% 100%;box-shadow:inset 0 0 0 2px rgba(239,202,126,.32),0 20px 35px rgba(0,0,0,.42)}
.lux-box .inner{position:absolute;left:14%;right:14%;bottom:16%;height:44%;background:radial-gradient(circle,#f4dfae,#8e6335 70%,#3a2112);border-radius:6px;box-shadow:inset 0 8px 20px rgba(0,0,0,.35)}
.lux-scroll{width:min(64vw,500px);min-height:460px;position:relative;background:linear-gradient(90deg,#9b6d35,#f1d79d 12%,#ead09a 88%,#8d602e);box-shadow:0 30px 60px rgba(0,0,0,.42);border-radius:4px;transform-origin:top center;}
.lux-scroll:before,.lux-scroll:after{content:"";position:absolute;left:-5%;right:-5%;height:44px;border-radius:50%;background:linear-gradient(180deg,#b57b3b,#efd49a 45%,#825625);box-shadow:0 12px 18px rgba(0,0,0,.3)}
.lux-scroll:before{top:-18px}.lux-scroll:after{bottom:-18px}
.lux-doors{width:92vw;max-width:1000px;height:72vh;display:flex;perspective:1800px;}
.lux-doors .door{width:50%;height:100%;background:linear-gradient(135deg,#17100c,#68472b 32%,#21150e 62%,#765634);border:2px solid #c89d57;box-shadow:inset 0 0 0 7px rgba(194,147,74,.18),inset 0 0 50px rgba(0,0,0,.5),0 25px 50px rgba(0,0,0,.45);position:relative;}
.lux-doors .door:after{content:"";position:absolute;inset:7%;border:2px solid rgba(224,184,103,.55);box-shadow:inset 0 0 25px rgba(0,0,0,.45)}
.lux-doors .left{transform-origin:left center}.lux-doors .right{transform-origin:right center}
.pv-opening[data-experience="antique-book"] .lux-book,.pv-opening[data-experience="book"] .lux-book{display:block}
.pv-opening[data-experience="luxury-box"] .lux-box{display:block}
.pv-opening[data-experience="parchment-scroll"] .lux-scroll{display:block}
.pv-opening[data-experience="double-ornate-doors"] .lux-doors{display:flex}
.lux-opening-stage .lux-book,.lux-opening-stage .lux-box,.lux-opening-stage .lux-scroll,.lux-opening-stage .lux-doors{display:none}
.pv-opening.pv-opening-out .lux-envelope .flap{transform:rotateX(180deg)}
.pv-opening.pv-opening-out .lux-book .cover:first-child{transform:rotateY(-155deg)}
.pv-opening.pv-opening-out .lux-book .cover.right{transform:rotateY(155deg)}
.pv-opening.pv-opening-out .lux-box .lid{transform:translateY(-115%) rotateX(-65deg) rotateZ(-2deg)}
.pv-opening.pv-opening-out .lux-scroll{transform:scaleY(0);transform-origin:top center}
.pv-opening.pv-opening-out .lux-doors .left{transform:rotateY(-105deg)}
.pv-opening.pv-opening-out .lux-doors .right{transform:rotateY(105deg)}
.pv-opening-label{z-index:8;cursor:pointer;pointer-events:auto;border:1px solid rgba(255,255,255,.3);padding:15px 28px;border-radius:999px;font:600 14px/1 var(--pv-font-body);letter-spacing:.14em;text-transform:uppercase;transition:transform .25s ease,filter .25s ease;}
.pv-opening-label:focus-visible{outline:2px solid #fff;outline-offset:5px}
@media (max-width:600px){.lux-doors{height:58vh}.lux-envelope{width:86vw;height:58vw}.lux-book{width:88vw;height:58vw}.lux-box{width:82vw;height:65vw}.lux-scroll{min-height:58vh;width:70vw}}


/* Opening gate media: these are physical opening assets, never the invitation renderer. */
.pv-opening-screen-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;z-index:1;filter:saturate(.96) contrast(1.03);pointer-events:none;transition:opacity .35s ease}
.pv-opening-identity{position:absolute;left:50%;top:25%;transform:translate(-50%,-50%);z-index:7;max-width:90vw;text-align:center;color:#fff;font-family:var(--pv-font-display);font-size:clamp(34px,8vw,86px);line-height:1.05;letter-spacing:.08em;text-shadow:0 2px 16px rgba(0,0,0,.5),0 0 2px rgba(255,255,255,.35);pointer-events:none}
.pv-opening-identity:empty{display:none}.pv-has-opening-identity .pv-opening-label{margin-top:22vh}.pv-has-opening-identity .pv-opening-mark{margin-bottom:2vh}
.pv-opening-transition-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;z-index:9;background:#000;pointer-events:none;opacity:0;transition:opacity .18s ease}
.pv-opening.pv-opening-hidden .pv-opening-transition-video{opacity:0;transition:opacity .18s ease}

/* Responsive opening gate cleanup: the global loader mark must never appear below Tap to Begin. */
.pv-opening-mark{display:none !important;}
.pv-has-opening-identity .pv-opening-label{margin-top:0;position:absolute;top:calc(50% + clamp(62px, 10vh, 105px));left:50%;transform:translateX(-50%);white-space:nowrap;}
.pv-opening-label{min-height:46px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;}
.pv-block img{max-width:100%;height:auto;}
.pv-image-overlay img{width:100%;height:auto;max-width:100%;display:block;}
.pv-video-wrap.pv-native-video{padding-top:0;height:auto;aspect-ratio:auto;}
.pv-video-wrap.pv-native-video video{position:static;display:block;width:100%;height:auto;max-width:100%;object-fit:contain;}
.pv-countdown{width:min(100%,620px);margin-inline:auto;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(7px,2vw,14px);align-items:stretch;}
.pv-countdown .pv-unit{min-width:0;width:100%;box-sizing:border-box;padding:clamp(10px,2vw,14px) clamp(6px,1.8vw,10px);} 
.pv-countdown .pv-unit .num{font-size:clamp(1.35rem,5.4vw,1.9rem);line-height:1.05;white-space:nowrap;}
.pv-countdown .pv-unit .lbl{font-size:clamp(.5rem,1.8vw,.65rem);line-height:1.2;white-space:nowrap;}
@media (max-width:600px){.pv-opening-identity{top:38%;font-size:clamp(30px,9vw,54px);max-width:92vw;line-height:1.12;}.pv-has-opening-identity .pv-opening-label{top:calc(50% + clamp(55px,9vh,85px));max-width:88vw;padding:13px 22px;font-size:clamp(11px,3vw,14px);}.pv-countdown{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-width:360px;}.pv-countdown[data-countdown="editorial"]{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;}.pv-countdown[data-countdown="editorial"] .pv-unit{padding:0 2px;}.pv-countdown[data-countdown="editorial"] .pv-unit .num{font-size:clamp(1.45rem,7vw,2.4rem);}.pv-countdown[data-countdown="circular"] .pv-unit,.pv-countdown[data-countdown="orbit-rings"] .pv-unit{width:min(18vw,84px);height:min(18vw,84px);justify-self:center;}.pv-section{padding:clamp(42px,9vw,70px) 16px;}.pv-section h2{font-size:clamp(1.65rem,7vw,2rem);line-height:1.15;margin-bottom:22px;}}
@media (max-width:380px){.pv-countdown .pv-unit .num{font-size:1.2rem;}.pv-countdown .pv-unit .lbl{font-size:.46rem;letter-spacing:.06em;}.pv-has-opening-identity .pv-opening-label{top:calc(50% + 48px);padding-inline:17px;}}

/* Module 23 responsive opening gate */
.pv-opening{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:clamp(20px,5vw,48px);}
.pv-opening-identity{left:50%;right:auto;width:min(92vw,900px);margin:0 auto;top:50%;transform:translate(-50%,-62%);line-height:1.08;text-wrap:balance;}
.pv-has-opening-identity .pv-opening-label{top:calc(50% + clamp(54px,8vh,86px));left:50%;margin:0;transform:translateX(-50%);}
.pv-opening-transition-video{object-fit:cover;width:100vw;height:100dvh;max-width:none;max-height:none;}
.pv-rsvp-form .pv-rsvp-check{display:flex;align-items:center;gap:8px;font-size:.95rem;}
@media(max-width:600px){.pv-opening-identity{top:50%;width:min(90vw,600px);font-size:clamp(28px,8vw,52px);line-height:1.05;}.pv-has-opening-identity .pv-opening-label{top:calc(50% + clamp(58px,10vh,92px));}.pv-opening-transition-video{object-fit:cover;object-position:center center;}}

.pv-rsvp-thankyou{padding:22px;text-align:center;font-family:var(--pv-font-display);font-size:1.3rem;color:var(--pv-primary);}
.pv-rsvp-toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);opacity:0;z-index:10000;background:#1f1d1a;color:#fff;padding:12px 18px;border-radius:999px;box-shadow:0 12px 30px rgba(0,0,0,.22);font-size:.9rem;transition:opacity .2s ease,transform .2s ease;pointer-events:none;}
.pv-rsvp-toast.show{opacity:1;transform:translate(-50%,0);}


/* Dependency-free carousel fallback: public invitations must remain usable when
   privacy/ad-block extensions block third-party CDNs. */
.pv-swiper{overflow:hidden;width:100%;}
.pv-swiper .swiper-wrapper{display:flex;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
.pv-swiper .swiper-wrapper::-webkit-scrollbar{display:none;}
.pv-swiper .swiper-slide{flex:0 0 min(86vw,520px);scroll-snap-align:center;}
@media(min-width:720px){.pv-swiper .swiper-slide{flex-basis:44vw;}}

/* Opening video is always a true full-viewport layer. */
.pv-opening-transition-video{display:block!important;max-width:none!important;max-height:none!important;object-fit:cover!important;}
@media(max-width:600px){.pv-opening-transition-video{width:100vw!important;height:100dvh!important;object-fit:cover!important;object-position:center!important;}}
/* Animation reliability fallback: luxury opening objects animate even when GSAP is unavailable. */
.lux-book .cover{transition:transform 1.35s cubic-bezier(.76,0,.24,1);}
.lux-box .lid{transition:transform 1.5s cubic-bezier(.76,0,.24,1);}
.lux-box .inner{transition:transform .6s ease;}
.lux-scroll{transition:transform 1.5s cubic-bezier(.76,0,.24,1);}
.lux-doors .door{transition:transform 1.45s cubic-bezier(.76,0,.24,1);}
.pv-letter{display:inline-block;will-change:transform,opacity,filter;}

/* MODULE57: opening background artwork must remain visible beneath decorative opening effects. */
.pv-opening-has-background-image[data-experience="lotus"]:before,.pv-opening-has-background-image[data-experience="lotus"]:after{opacity:.16!important;filter:drop-shadow(0 10px 24px rgba(0,0,0,.10));}
.pv-opening-has-background-image .pv-opening-screen-image{z-index:3!important;opacity:1!important;}
.pv-opening-has-background-image .lux-opening-stage{z-index:2;}
/* MODULE57: rich inline formatting always wins over block defaults. */
.pv-rich-text-block sup,.pv-rich-text-block sub,.pv-block-paragraph sup,.pv-block-paragraph sub{display:inline;line-height:0;}


/* MODULE58 — deterministic opening/scratch layers */
.pv-opening{background-color:var(--pv-secondary);}
.pv-opening-has-background-image{background-repeat:no-repeat!important;background-size:cover!important;background-position:center!important;}
.pv-opening-has-background-image:before,.pv-opening-has-background-image:after{pointer-events:none;}
.pv-opening-screen-image{display:block!important;visibility:visible!important;}
.pv-scratch-wrap{isolation:isolate;}
.pv-scratch-premium .pv-scratch-canvas{z-index:20!important;display:block!important;pointer-events:auto!important;touch-action:none!important;}
.pv-scratch-premium .pv-scratch-reveal{position:relative;z-index:1;}
.pv-celebration-layer{pointer-events:none!important;}
.pv-celebration-particle{pointer-events:none!important;}

/* MODULE58 — dedicated Tap-to-Open background image layer. */
.pv-opening-background-image{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;object-fit:cover!important;object-position:center!important;display:block!important;z-index:0!important;pointer-events:none!important;opacity:1!important;}
.pv-opening-has-background-image{background-image:none!important;}
.pv-opening-has-background-image .pv-opening-canvas{z-index:1!important;}
.pv-opening-has-background-image .pv-opening-screen-image{z-index:3!important;}
.pv-opening-has-background-image .lux-opening-stage{z-index:4!important;}
.pv-opening-has-background-image .pv-opening-identity{z-index:7!important;}
.pv-opening-has-background-image .pv-opening-label{z-index:8!important;}

/* MODULE58 — keep opening artwork below content and never let decorative petals/lotus
   capture input or visually replace a selected Tap-to-Open background. */
.pv-opening-background-image{pointer-events:none!important;}
.pv-opening[data-experience="lotus"]:before,.pv-opening[data-experience="lotus"]:after{pointer-events:none!important;opacity:.12!important;}
.pv-opening .pv-opening-label{pointer-events:auto!important;}

/* MODULE59 — opening background is the actual artwork surface. Decorative opening
   objects remain visible but never obscure a user-selected background image. */
.pv-opening-has-background-image .pv-opening-background-image{z-index:0!important;opacity:1!important;display:block!important;visibility:visible!important;}
.pv-opening-has-background-image .pv-opening-screen-image{z-index:1!important;opacity:.18!important;}
.pv-opening-has-background-image .lux-opening-stage{z-index:2!important;opacity:.12!important;mix-blend-mode:multiply;}
.pv-opening-has-background-image .pv-opening-canvas,.pv-opening-has-background-image .pv-ripple-canvas{z-index:1!important;opacity:.16!important;}
.pv-opening-has-background-image .pv-opening-identity{z-index:7!important;}
.pv-opening-has-background-image .pv-opening-label{z-index:8!important;}
/* Never allow the decorative gate to eat pointer input. */
.pv-opening .lux-opening-stage,.pv-opening .pv-opening-canvas,.pv-opening .pv-ripple-canvas,.pv-opening .pv-opening-screen-image,.pv-opening .pv-opening-background-image{pointer-events:none!important;}

/* MODULE59 final public rendering rules */
.pv-opening-has-background-image[data-experience="lotus"]:before,.pv-opening-has-background-image[data-experience="lotus"]:after{display:none!important;content:none!important;}
.pv-opening-has-background-image .lux-opening-stage{opacity:0!important;visibility:hidden!important;}
.pv-rich-text-block sup,.pv-block-paragraph sup,.pv-block-heading sup{vertical-align:super!important;font-size:.7em!important;line-height:normal!important;position:static!important;}
.pv-rich-text-block sub,.pv-block-paragraph sub,.pv-block-heading sub{vertical-align:sub!important;font-size:.7em!important;line-height:normal!important;position:static!important;}


/* MODULE63 — deterministic Tap-to-Open image surface. When an opening image is configured,
   it is the actual visible artwork. No lotus/veil/canvas decoration is allowed to cover it. */
.pv-opening.pv-opening-has-background-image{isolation:isolate!important;background-image:none!important;overflow:hidden!important;}
.pv-opening.pv-opening-has-background-image .pv-opening-background-image{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;object-fit:cover!important;object-position:center!important;z-index:0!important;opacity:1!important;visibility:visible!important;display:block!important;}
.pv-opening.pv-opening-has-background-image .pv-opening-screen-image{display:none!important;visibility:hidden!important;opacity:0!important;}
.pv-opening.pv-opening-has-background-image .lux-opening-stage,
.pv-opening.pv-opening-has-background-image .pv-opening-canvas,
.pv-opening.pv-opening-has-background-image .pv-ripple-canvas,
.pv-opening.pv-opening-has-background-image .lux-webgl-canvas{display:none!important;visibility:hidden!important;opacity:0!important;}
.pv-opening.pv-opening-has-background-image:before,
.pv-opening.pv-opening-has-background-image:after{display:none!important;content:none!important;}
.pv-opening.pv-opening-has-background-image .pv-opening-identity{position:absolute!important;z-index:10!important;}
.pv-opening.pv-opening-has-background-image .pv-opening-label{position:absolute!important;z-index:11!important;pointer-events:auto!important;}

/* Rich-text inline formatting: never override an editor-produced inline value. */
.pv-block .pv-rich-text-block,.pv-block .pv-block-paragraph,.pv-block .pv-block-heading{min-width:0;}

/* MODULE64: block typography is a default only; inline rich-text remains authoritative. */
.pv-block .pv-block-title,.pv-block > h2,.pv-block > h3{color:var(--pv-block-title-color,var(--pv-default-title));font-family:var(--pv-block-title-font,var(--pv-font-display));font-size:var(--pv-block-title-size,2rem);font-weight:var(--pv-block-title-weight,600);text-align:center;}
.pv-block .pv-block-label,.pv-block .pv-countdown .lbl,.pv-block .pv-scratch-hint,.pv-block .pv-social-caption{color:var(--pv-block-label-color,var(--pv-default-label));font-family:var(--pv-block-label-font,var(--pv-font-body));font-size:var(--pv-block-label-size,.75rem);font-weight:var(--pv-block-label-weight,normal);}
.pv-rich-text-block span[style],.pv-block-paragraph span[style],.pv-block-heading span[style]{color:revert-layer;font-family:revert-layer;font-size:revert-layer;font-weight:revert-layer;font-style:revert-layer;}


/* MODULE68 — Continuous celebration: the full-screen container must never receive a
   celebration-shape class. Shape styling belongs to particles only. */
.pv-celebration-layer{position:fixed!important;inset:0!important;width:100vw!important;height:100vh!important;margin:0!important;padding:0!important;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;transform:none!important;filter:none!important;pointer-events:none!important;overflow:hidden!important;z-index:40!important;}
.pv-celebration-layer .pv-celebration-particle{position:absolute!important;display:block!important;pointer-events:none!important;margin:0!important;padding:0!important;box-sizing:border-box!important;}
.pv-celebration-layer .pv-celebration-petal,.pv-celebration-layer .pv-celebration-rose{width:9px!important;height:13px!important;}
.pv-celebration-layer .pv-celebration-confetti{width:6px!important;height:14px!important;}
.pv-celebration-layer .pv-celebration-heart{width:14px!important;height:14px!important;}
.pv-celebration-layer .pv-celebration-sparkle,.pv-celebration-layer .pv-celebration-star{width:10px!important;height:10px!important;}
.pv-celebration-layer .pv-celebration-snow{width:8px!important;height:8px!important;}
.pv-celebration-layer .pv-celebration-bubble{width:12px!important;height:12px!important;}
.pv-celebration-layer .pv-celebration-leaf{width:10px!important;height:15px!important;}
.pv-celebration-layer .pv-celebration-balloon{width:22px!important;height:29px!important;}
.pv-celebration-layer .pv-celebration-dust,.pv-celebration-layer .pv-celebration-champagne{width:7px!important;height:7px!important;}
.pv-celebration-layer .pv-celebration-bokeh{width:12px!important;height:12px!important;}
.pv-celebration-layer .pv-celebration-ribbon{width:10px!important;height:32px!important;}
.pv-celebration-layer .pv-celebration-lantern{width:16px!important;height:25px!important;}
.pv-celebration-layer .pv-celebration-burst,.pv-celebration-layer .pv-celebration-firework{width:6px!important;height:6px!important;}

/* MODULE68 — scratch remains interactive after partial scratching. */
.pv-scratch-wrap{position:relative!important;isolation:isolate!important;overflow:hidden!important;}
.pv-scratch-wrap .pv-scratch-canvas{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;z-index:20!important;pointer-events:auto!important;touch-action:none!important;cursor:crosshair!important;}
.pv-scratch-wrap .pv-scratch-reveal{position:relative!important;z-index:1!important;pointer-events:none!important;}
.pv-scratch-wrap .pv-scratch-shimmer{z-index:2!important;pointer-events:none!important;}

/* MODULE80: SVG scratch overlay. It replaces the unstable canvas interaction. */
.pv-scratch-wrap .pv-scratch-svg{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;display:block!important;z-index:20!important;pointer-events:auto!important;touch-action:none!important;user-select:none!important;-webkit-user-select:none!important;-webkit-touch-callout:none!important;}
.pv-scratch-wrap .pv-scratch-svg text{pointer-events:none!important;}
.pv-scratch-wrap .pv-scratch-canvas{display:none!important;pointer-events:none!important;}

/* MODULE86: manual timeline + live clock blocks */
.pv-custom-timeline{position:relative;display:flex;flex-direction:column;gap:18px;max-width:900px;margin:24px auto;padding:8px 0 8px 26px}
.pv-custom-timeline:before{content:"";position:absolute;left:12px;top:8px;bottom:8px;width:2px;background:var(--pv-accent,#cda349);opacity:.55}
.pv-custom-timeline-item{position:relative;display:flex;gap:16px;align-items:flex-start;min-width:0}
.pv-custom-timeline-dot{position:absolute;left:-26px;top:15px;width:26px;height:26px;display:grid;place-items:center;border-radius:50%;background:var(--pv-accent,#cda349);color:#fff;font-size:12px;font-weight:700;box-shadow:0 0 0 5px color-mix(in srgb,var(--pv-accent,#cda349) 14%,transparent)}
.pv-custom-timeline-card{flex:1;min-width:0;padding:18px 20px;border:1px solid color-mix(in srgb,var(--pv-accent,#cda349) 28%,transparent);border-radius:14px;background:color-mix(in srgb,var(--pv-secondary,#fff) 92%,transparent);box-shadow:0 8px 22px rgba(0,0,0,.045)}
.pv-custom-timeline-date{display:block;margin-bottom:6px;color:var(--pv-accent,#9b762d);font-size:.78rem;font-weight:700;letter-spacing:.06em}
.pv-custom-timeline-card h3{margin:0 0 7px;font-family:var(--pv-font-display);color:var(--pv-primary);font-size:1.25rem}.pv-custom-timeline-card p{margin:0;line-height:1.65;white-space:normal}
.pv-custom-timeline[data-layout="sline"]{padding-left:0;gap:0}.pv-custom-timeline[data-layout="sline"]:before{left:50%;transform:translateX(-50%)}
.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-item{width:50%;padding:0 28px 28px 0}.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-item:nth-child(even){align-self:flex-end;padding:0 0 28px 28px}.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-dot{left:auto;right:-13px;top:14px}.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-item:nth-child(even) .pv-custom-timeline-dot{right:auto;left:-13px}
.pv-live-clock{width:fit-content;max-width:100%;margin:16px auto;padding:20px 30px;border:1px solid color-mix(in srgb,var(--pv-accent,#cda349) 35%,transparent);border-radius:16px;background:color-mix(in srgb,var(--pv-secondary,#fff) 85%,transparent);box-shadow:0 10px 28px rgba(0,0,0,.06);text-align:center;font-family:var(--pv-font-display);font-variant-numeric:tabular-nums;color:var(--pv-primary);font-size:clamp(1.8rem,6vw,3.2rem);letter-spacing:.04em}
@media(max-width:600px){.pv-custom-timeline[data-layout="sline"]{padding-left:26px;gap:16px}.pv-custom-timeline[data-layout="sline"]:before{left:12px;transform:none}.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-item,.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-item:nth-child(even){width:100%;align-self:stretch;padding:0}.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-dot,.pv-custom-timeline[data-layout="sline"] .pv-custom-timeline-item:nth-child(even) .pv-custom-timeline-dot{left:-26px;right:auto}.pv-custom-timeline-card{padding:15px}}

/* MODULE87: HTML Code block — fluid and responsive without imposing styling on authored markup. */
.pv-html-code-block{max-width:100%;min-width:0;overflow-wrap:anywhere;}
.pv-html-code-block img,.pv-html-code-block video,.pv-html-code-block iframe{max-width:100%;}
.pv-html-code-block iframe{width:100%;}
.pv-html-code-block table{max-width:100%;}
@media(max-width:640px){.pv-html-code-block{overflow-x:auto;-webkit-overflow-scrolling:touch;}}
/* MODULE89 — independent typography for Timeline point fields. */
.pv-custom-timeline-card .pv-custom-timeline-date{color:var(--pv-timeline-date-color,var(--pv-accent));font-family:var(--pv-timeline-date-font,var(--pv-font-body));font-size:var(--pv-timeline-date-size,.75rem);font-weight:var(--pv-timeline-date-weight,600)}
.pv-custom-timeline-card h3{color:var(--pv-timeline-title-color,var(--pv-default-title));font-family:var(--pv-timeline-title-font,var(--pv-font-display));font-size:var(--pv-timeline-title-size,1.25rem);font-weight:var(--pv-timeline-title-weight,600)}
.pv-custom-timeline-card p{color:var(--pv-timeline-description-color,var(--pv-default-text));font-family:var(--pv-timeline-description-font,var(--pv-font-body));font-size:var(--pv-timeline-description-size,1rem);font-weight:var(--pv-timeline-description-weight,normal)}
