@font-face {
  font-family: "Disney Park";
  src: url("assets/fonts/DisneyPark.ttf") format("truetype");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

:root {
  --ink: #352642;
  --muted: #765f7f;
  --berry: #ad2f6a;
  --rose: #ee6ca6;
  --petal: #fff1f7;
  --lavender: #8872c6;
  --sky: #65b6d8;
  --mint: #67bba7;
  --gold: #d5a135;
  --paper: #fffafd;
  --line: rgba(80, 45, 91, 0.14);
  --shadow: 0 22px 62px rgba(74, 42, 86, 0.23);
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin: 0; min-width: 300px; font-family: "Trebuchet MS", Arial, sans-serif; color: var(--ink); background: var(--paper); }
button, input, textarea, a { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 3px solid #4b9ed1; outline-offset: 3px; }
.invitation { min-height: 100vh; overflow: hidden; }
.is-hidden { display: none !important; }

.scene {
  --scene-x: 0px;
  --scene-y: 0px;
  position: relative;
  min-height: 100svh;
  display: grid;
  place-items: center;
  padding: clamp(90px, 12vh, 126px) 18px 34px;
  isolation: isolate;
  overflow: hidden;
}
.scene__image, .scene__veil { position: absolute; inset: -18px; }
.scene__image { width: calc(100% + 36px); height: calc(100% + 36px); object-fit: cover; z-index: -3; transform: translate(var(--scene-x), var(--scene-y)) scale(1.035); transition: transform 200ms ease-out; }
.scene__veil { z-index: -2; background: linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,244,250,.4) 58%, rgba(255,255,255,.84)), radial-gradient(circle at 50% 42%, rgba(255,255,255,.18), transparent 42%); }
.sparkles { position: absolute; inset: 0; z-index: -1; pointer-events: none; }
.sparkles i { position: absolute; width: 8px; height: 8px; background: #fff6bf; transform: rotate(45deg); box-shadow: 0 0 18px #fff; animation: twinkle 2.4s ease-in-out infinite; }
.sparkles i:nth-child(1) { left: 10%; top: 28%; }
.sparkles i:nth-child(2) { left: 28%; top: 13%; animation-delay: .5s; }
.sparkles i:nth-child(3) { right: 31%; top: 21%; animation-delay: 1s; }
.sparkles i:nth-child(4) { right: 12%; top: 38%; animation-delay: .2s; }
.sparkles i:nth-child(5) { left: 37%; bottom: 20%; animation-delay: 1.4s; }
.sparkles i:nth-child(6) { right: 24%; bottom: 18%; animation-delay: .8s; }

.topbar { position: absolute; inset: 18px 18px auto; z-index: 20; display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.brand { display: inline-flex; align-items: center; gap: 10px; min-height: 44px; padding: 8px 14px; border: 1px solid rgba(255,255,255,.72); border-radius: 8px; background: rgba(255,250,254,.78); box-shadow: 0 12px 30px rgba(78,42,103,.18); backdrop-filter: blur(14px); font-weight: 900; }
.brand__crown { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; color: #62420f; background: #ffe59a; }
.icon-button { display: grid; place-items: center; width: 44px; height: 44px; padding: 0; border: 1px solid rgba(255,255,255,.74); border-radius: 8px; color: var(--ink); background: rgba(255,250,254,.8); box-shadow: 0 12px 30px rgba(78,42,103,.18); cursor: pointer; }
.sound-toggle[aria-pressed="true"] { color: #6b490e; background: #ffe69a; }

.intro-panel, .quest-panel, .ticket { width: min(600px, 100%); border: 1px solid rgba(255,255,255,.86); border-radius: 8px; background: rgba(255,250,254,.88); box-shadow: var(--shadow); backdrop-filter: blur(18px); }
.intro-panel { padding: clamp(26px, 5vw, 46px); text-align: center; animation: floatIn 700ms ease both; }
.envelope-intro { position: absolute; inset: 0; z-index: 14; display: grid; grid-template: minmax(0,1fr) / minmax(0,1fr); place-items: center; padding: 82px 18px 24px; overflow: hidden; background: radial-gradient(circle at 50% 38%, #fff9f8 0, #f8ddd9 48%, #e8bbb6 100%); transition: opacity 600ms ease, visibility 600ms ease; }
.envelope-intro::before, .envelope-intro::after { content: ""; position: absolute; width: min(30vw,360px); aspect-ratio: 1; border-radius: 50%; filter: blur(1px); opacity: .48; pointer-events: none; }
.envelope-intro::before { top: -15%; left: -8%; background: radial-gradient(circle at 40% 40%, #f6afc0, transparent 62%); }
.envelope-intro::after { right: -8%; bottom: -18%; background: radial-gradient(circle at 50% 50%, #edc59b, transparent 64%); }
.envelope-heading { position: relative; grid-area: 1 / 1; z-index: 5; width: min(620px,calc(100% - 100px)); margin: clamp(70px,8vh,90px) auto 0; align-self: start; justify-self: center; text-align: center; pointer-events: none; }
.envelope-heading .eyebrow { color: #8f536b; }
.envelope-heading h1 { max-width: none; color: #593348; font-size: clamp(2.35rem,5.5vw,4rem); line-height: 1.05; text-shadow: 0 2px 18px rgba(255,255,255,.9); }
.envelope-object { position: relative; grid-area: 1 / 1; width: min(1080px,92vw,calc((100svh - 190px) * 1.84)); aspect-ratio: 1389/757; margin-top: clamp(70px,10vh,112px); align-self: center; justify-self: center; perspective: 1200px; filter: drop-shadow(0 30px 38px rgba(111,57,63,.24)); animation: envelopeArrives 950ms cubic-bezier(.2,.8,.2,1) both; }
.envelope-visual { position: absolute; inset: 0; z-index: 2; overflow: hidden; border-radius: 5px; transition: transform 900ms cubic-bezier(.2,.75,.15,1), opacity 650ms ease, filter 650ms ease; }
.envelope-photo { position: absolute; left: -7%; top: -22.5%; display: block; width: 114%; max-width: none; height: 140%; object-fit: fill; }
.letter-peek { position: absolute; left: 50%; top: 52%; z-index: 1; display: flex; width: min(82%,820px); aspect-ratio: 4/3; flex-direction: column; align-items: center; justify-content: center; padding: 16.5% 17% 8%; border: 0; border-radius: 8px; color: #65364e; text-align: center; background: #fff8f3 url("assets/exec-d52f17aa-6f49-470b-9bcf-47f4756e02ce.webp") center/100% 100% no-repeat; box-shadow: 0 30px 70px rgba(84,43,49,.28); opacity: 0; pointer-events: none; transform: translate(-50%,-34%) scale(.84); transition: transform 850ms cubic-bezier(.18,.78,.2,1), opacity 420ms ease; }
.letter-peek__kicker { margin: 0 0 10px; color: #9a566b; font-family: Georgia,"Times New Roman",serif; font-size: clamp(.66rem,1.25vw,.88rem); font-weight: 700; text-transform: uppercase; }
.letter-peek h2 { max-width: 12ch; color: #9b4e65; font-size: clamp(2.65rem,6.2vw,5.4rem); line-height: .8; text-shadow: 0 1px 0 #fff; }
.letter-peek h2 span, .letter-peek h2 strong { display: block; }
.letter-peek h2 strong { margin-top: .16em; font-family: Georgia,"Times New Roman",serif; font-size: .88em; font-weight: 400; }
.letter-peek__copy { max-width: 46ch; margin: clamp(14px,2.5vw,24px) auto 4px; color: #72564b; font-family: Georgia,"Times New Roman",serif; font-size: clamp(.76rem,1.42vw,1.05rem); line-height: 1.38; }
.letter-peek__action { position: relative; z-index: 2; min-width: clamp(190px,32vw,320px); min-height: 48px; margin-top: clamp(12px,2.2vw,22px); border: 1px solid rgba(178,120,55,.72); box-shadow: inset 0 0 0 3px rgba(255,240,222,.6),0 12px 26px rgba(158,72,105,.22); background: linear-gradient(180deg,#f7b6ca,#d97096); font-family: "Trebuchet MS",Arial,sans-serif; font-size: clamp(.95rem,1.8vw,1.15rem); font-weight: 900; }
.envelope-seal { position: absolute; left: 50%; top: 49.3%; z-index: 4; width: clamp(76px,9vw,112px); aspect-ratio: 1; padding: 0; border: 0; border-radius: 48% 48% 52% 52%; background: transparent; transform: translate(-50%,-50%); cursor: pointer; }
.envelope-seal::after { content: "♡"; position: absolute; left: 50%; top: 50%; color: rgba(255,241,196,.94); font-family: Arial,sans-serif; font-size: clamp(92px,11vw,138px); font-weight: 400; line-height: 1; text-shadow: 0 0 8px rgba(255,255,255,.95),0 0 18px rgba(255,210,150,.78); transform: translate(-50%,-50%); pointer-events: none; animation: heartPulse 1.65s ease-in-out infinite; }
.envelope-seal:hover { transform: translate(-50%,-50%) scale(1.05); }
.envelope-intro.is-opening .envelope-heading { transform: none; }
.envelope-intro.is-opening .envelope-seal { opacity: 0; transform: translate(-50%,-50%) scale(.55); transition: opacity 260ms ease, transform 260ms ease; pointer-events: none; }
.envelope-intro.is-opening .envelope-visual { transform: translateY(42%) rotateX(5deg) scale(.9); opacity: .2; filter: blur(3px); }
.envelope-intro.is-opening .letter-peek { z-index: 3; opacity: 1; pointer-events: auto; transform: translate(-50%,-50%) scale(1); }
.envelope-intro.is-leaving { opacity: 0; visibility: hidden; }
.eyebrow { margin: 0 0 10px; color: var(--berry); font-size: .78rem; font-weight: 900; letter-spacing: 0; text-transform: uppercase; }
h1, h2, h3, p { overflow-wrap: anywhere; }
h1, h2, h3 { margin: 0; letter-spacing: 0; }
h1 { max-width: 11ch; margin-inline: auto; color: #462a58; font-family: "Disney Park", Georgia, "Times New Roman", serif; font-size: clamp(2.7rem, 8vw, 5.3rem); font-weight: 400; line-height: .96; }
h2 { font-family: "Disney Park", Georgia, "Times New Roman", serif; font-size: clamp(2rem, 5vw, 3.7rem); font-weight: 400; line-height: 1.02; }
h3 { font-family: "Disney Park", Georgia, "Times New Roman", serif; font-size: 1.45rem; font-weight: 400; line-height: 1.18; }
.intro-name { margin: 18px 0 0; color: var(--berry); font-size: clamp(1.15rem, 3vw, 1.45rem); font-weight: 800; }
.intro-panel__copy, .quest-panel p, .ticket__lead, .section-heading > p:last-child, .section-copy > p:last-child, .dress-copy > p { font-size: clamp(1rem, 2.2vw, 1.18rem); line-height: 1.55; }

.primary-action, .secondary-action, .text-action { display: inline-flex; align-items: center; justify-content: center; gap: 9px; min-height: 50px; padding: 13px 18px; border: 1px solid rgba(255,255,255,.7); border-radius: 8px; text-decoration: none; cursor: pointer; transition: transform 180ms ease, box-shadow 180ms ease, filter 180ms ease; }
.primary-action { margin-top: 10px; color: #fff; background: linear-gradient(115deg, #a92d67, #eb659e 60%, #c49124); box-shadow: 0 12px 28px rgba(151,44,99,.25); font-weight: 900; }
.secondary-action { color: #3b2850; background: rgba(255,255,255,.76); box-shadow: 0 12px 28px rgba(78,42,103,.13); font-weight: 800; }
.text-action { min-height: 42px; padding: 9px 12px; color: var(--berry); background: transparent; border-color: rgba(173,47,106,.26); font-weight: 900; }
.primary-action:hover, .secondary-action:hover, .text-action:hover, .treasure:hover { transform: translateY(-2px); filter: brightness(1.03); }

.quest-panel { position: absolute; left: 18px; bottom: 20px; z-index: 10; max-width: 455px; padding: 20px; animation: floatIn 500ms ease both; }
.quest-panel h2 { font-size: clamp(1.8rem, 4.5vw, 2.8rem); }
.quest-panel p { margin-bottom: 0; }
.quest-status { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 12px; margin-top: 16px; }
.progress { display: flex; gap: 8px; }
.progress span { width: 100%; height: 9px; border-radius: 99px; background: rgba(136,114,198,.2); }
.progress span.is-found { background: linear-gradient(90deg, var(--rose), var(--gold)); }
.quest-status strong { color: var(--berry); }
.treasure { position: absolute; z-index: 9; display: grid; place-items: center; width: clamp(68px,7vw,96px); aspect-ratio: 1; padding: 4px; border: 0; border-radius: 0; color: inherit; background: transparent; cursor: pointer; animation: pulse 1400ms ease-in-out infinite; }
.treasure img { width: 100%; height: 100%; object-fit: contain; pointer-events: none; user-select: none; filter: drop-shadow(0 5px 6px rgba(75,35,75,.26)) drop-shadow(0 0 7px rgba(255,243,178,.75)); transition: filter 180ms ease; }
.treasure:hover img, .treasure:focus-visible img { filter: drop-shadow(0 7px 9px rgba(75,35,75,.34)) drop-shadow(0 0 12px rgba(255,245,171,.95)) brightness(1.08); }
.treasure:focus-visible { outline: 3px solid rgba(255,255,255,.94); outline-offset: 3px; border-radius: 50%; }
.treasure--butterfly { left: 13%; top: 23%; }
.treasure--crown { left: 14%; top: 58%; }
.treasure--mirror { right: 38%; top: 28%; }
.treasure--key { right: 15%; top: 51%; }
.treasure--wand { left: 41%; bottom: 15%; }
.treasure--slipper { right: 27%; bottom: 14%; }
.treasure.is-found { pointer-events: none; }
.treasure[data-effect="butterfly"].is-found { animation: butterflyFly 1.5s cubic-bezier(.25,.6,.25,1) forwards; }
.treasure[data-effect="crown"].is-found { animation: crownRise 1.25s ease-in forwards; }
.treasure[data-effect="key"].is-found { animation: keyToCastle 1.3s cubic-bezier(.3,.7,.2,1) forwards; }
.treasure[data-effect="mirror"].is-found { animation: mirrorFlash 1.15s ease-out forwards; }
.treasure[data-effect="wand"].is-found { animation: wandCast 1.15s ease-out forwards; }
.treasure[data-effect="slipper"].is-found { animation: slipperDance 1.35s ease-in-out forwards; }

.ticket { z-index: 12; width: min(1120px,calc(100vw - 38px)); max-width: none; max-height: calc(100svh - 118px); padding: 13px; border-color: rgba(255,236,204,.94); background: rgba(255,249,246,.94); animation: ticketIn 700ms cubic-bezier(.2,.9,.2,1.1) both; overflow-y: auto; scrollbar-width: thin; }
.ticket__inner { position: relative; min-height: 100%; border: 2px solid rgba(210,157,73,.72); border-radius: 8px; padding: clamp(62px,7vw,92px) clamp(24px,6vw,76px) clamp(34px,5vw,60px); text-align: center; background: linear-gradient(145deg,rgba(255,255,255,.78),rgba(255,246,245,.72)); box-shadow: inset 0 0 0 5px rgba(255,255,255,.76),inset 0 0 0 7px rgba(236,158,185,.34); }
.ticket__inner::before, .ticket__inner::after { position: absolute; left: 50%; color: #c78b38; line-height: 1; transform: translateX(-50%); }
.ticket__inner::before { content: "❦  ♡  ❦"; top: 15px; font-size: clamp(1.1rem,2.5vw,1.55rem); }
.ticket__inner::after { content: "❦  ♥  ❦"; bottom: 12px; color: #d57b9f; font-size: clamp(1rem,2.2vw,1.4rem); }
.ticket__crest { position: absolute; left: 50%; top: 0; z-index: 2; display: grid; place-items: center; width: clamp(82px,9vw,112px); aspect-ratio: 1; border: 5px double #c88b36; border-radius: 50%; background: radial-gradient(circle,#fffdf9 40%,#ffe7e9); box-shadow: 0 9px 24px rgba(112,61,70,.17),0 0 0 7px rgba(255,251,245,.82); transform: translate(-50%,-44%); }
.ticket__crest img { width: 82%; height: 82%; object-fit: contain; filter: drop-shadow(0 4px 5px rgba(126,71,43,.2)); }
.ticket__eyebrow { margin-bottom: 15px; color: #bf3d78; font-family: Georgia,"Times New Roman",serif; font-size: clamp(.78rem,1.6vw,1.05rem); letter-spacing: .11em; }
.ticket__eyebrow span { color: #c58c35; }
.ticket h2 { color: #981c55; font-size: clamp(3.1rem,7vw,6.6rem); line-height: .88; text-shadow: 0 1px 0 #fff,0 3px 14px rgba(143,24,77,.13); }
.ticket__lead { max-width: 38ch; margin: clamp(18px,3vw,28px) auto clamp(24px,3vw,34px); color: #443149; font-family: Georgia,"Times New Roman",serif; font-size: clamp(1.08rem,2.5vw,1.65rem); line-height: 1.42; }
.details { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: clamp(14px,3vw,34px); max-width: 830px; margin: 0 auto clamp(24px,4vw,38px); }
.details div { position: relative; display: grid; align-content: center; min-height: 148px; padding: 20px 22px; border: 1px solid rgba(222,132,161,.5); border-radius: 8px; background: rgba(255,253,251,.7); box-shadow: 0 10px 20px rgba(123,64,84,.09),inset 0 0 0 4px rgba(255,233,238,.42); }
.details div::before, .details div::after { content: ""; position: absolute; width: 24px; height: 24px; border-color: rgba(213,137,63,.7); }
.details div::before { left: 8px; top: 8px; border-left: 1px solid; border-top: 1px solid; }
.details div::after { right: 8px; bottom: 8px; border-right: 1px solid; border-bottom: 1px solid; }
.details span, .details strong { display: block; }
.details div > span { color: #c03b77; font-family: Georgia,"Times New Roman",serif; font-size: clamp(.85rem,1.5vw,1.08rem); font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
.details div > i { margin: 4px 0; color: #c68b3c; font-family: Georgia,serif; font-size: 1.2rem; font-style: normal; }
.details strong { display: flex; align-items: center; justify-content: center; gap: 13px; color: #3c2944; font-family: Georgia,"Times New Roman",serif; font-size: clamp(1.12rem,2.3vw,1.55rem); font-weight: 500; line-height: 1.25; }
.details strong small { color: #cb8545; font-size: .62em; }
.ticket__actions { display: flex; justify-content: center; }
.ticket__unroll { min-width: min(430px,100%); min-height: 62px; margin: 0; border: 2px solid rgba(226,168,77,.9); border-radius: 999px; box-shadow: inset 0 0 0 3px rgba(255,226,208,.36),0 15px 34px rgba(174,47,103,.27); font-family: Georgia,"Times New Roman",serif; font-size: clamp(1.08rem,2.4vw,1.45rem); }

.scroll-stage { position: fixed; inset: 0; z-index: 70; display: grid; place-items: center; padding: 20px; overflow-y: auto; }
.scroll-stage__backdrop { position: fixed; inset: 0; width: 100%; height: 100%; padding: 0; border: 0; background: rgba(63,31,70,.48); backdrop-filter: blur(10px); opacity: 0; transition: opacity 420ms ease; cursor: default; }
.royal-scroll { position: relative; z-index: 1; width: min(700px,calc(100vw - 36px)); margin: auto; filter: drop-shadow(0 28px 42px rgba(53,23,54,.36)); opacity: 0; transform: translateY(34px) scale(.93); transition: opacity 400ms ease,transform 500ms cubic-bezier(.2,.8,.2,1); }
.scroll-roll { position: relative; z-index: 3; width: calc(100% + 52px); height: 34px; margin-left: -26px; border: 2px solid #9c621e; border-radius: 18px; background: linear-gradient(180deg,#fff0ad 0,#d79a35 46%,#8e541a 52%,#ecc45c 100%); box-shadow: inset 0 2px 3px rgba(255,255,255,.8),0 7px 12px rgba(74,38,45,.24); }
.scroll-roll::before, .scroll-roll::after { content: ""; position: absolute; top: 50%; width: 45px; height: 45px; border: 2px solid #92581b; border-radius: 50%; background: radial-gradient(circle,#fff1a7 0 20%,#c98b2f 24% 52%,#7f4817 56% 62%,#e7bb51 66%); transform: translateY(-50%); }
.scroll-roll::before { left: -19px; }
.scroll-roll::after { right: -19px; }
.scroll-roll--bottom { transform: translateY(-34px); transition: transform 950ms cubic-bezier(.2,.8,.2,1); }
.scroll-paper { position: relative; width: calc(100% - 18px); height: 0; margin: -2px auto 0; overflow: hidden; border-inline: 2px solid #c78c42; background: linear-gradient(90deg,#efcf9a 0,#fff5db 5%,#fffaf0 18% 82%,#fff1d3 95%,#d6a660 100%); opacity: .5; transform: scaleY(.04); transform-origin: top; transition: height 950ms cubic-bezier(.2,.78,.2,1),opacity 300ms ease,transform 950ms cubic-bezier(.2,.78,.2,1); }
.scroll-paper::before { content: ""; position: absolute; inset: 13px; border: 1px solid rgba(184,113,42,.54); box-shadow: inset 0 0 0 4px rgba(226,153,166,.16); pointer-events: none; }
.scroll-paper__inner { height: 100%; padding: 42px clamp(26px,6vw,68px) 36px; overflow-y: auto; text-align: center; scrollbar-width: thin; }
.scroll-close { position: absolute; top: 22px; right: 26px; z-index: 2; display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 1px solid rgba(157,92,37,.45); border-radius: 50%; color: #744322; background: rgba(255,250,234,.85); font-size: 1.55rem; line-height: 1; cursor: pointer; }
.scroll-crown { width: 88px; height: 66px; object-fit: contain; filter: drop-shadow(0 5px 5px rgba(111,55,40,.18)); }
.scroll-paper h2 { color: #962250; font-size: clamp(2.5rem,6vw,4.4rem); line-height: .9; }
.scroll-paper .eyebrow { margin: 0 0 8px; color: #a96b2f; font-family: Georgia,"Times New Roman",serif; letter-spacing: .1em; }
.scroll-program { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 10px; margin: 26px 0 18px; }
.scroll-program div { display: grid; grid-template-columns: auto 30px 1fr; align-items: center; gap: 8px; min-height: 58px; padding: 10px 12px; border-block: 1px solid rgba(184,113,42,.28); text-align: left; }
.scroll-program time { color: #b5366c; font-weight: 900; }
.scroll-program div > span { color: #bd8431; text-align: center; }
.scroll-program strong { font-family: Georgia,"Times New Roman",serif; font-size: 1rem; font-weight: 600; }
.scroll-note { margin: 0 auto 18px; color: #765a54; font-family: Georgia,"Times New Roman",serif; font-style: italic; line-height: 1.45; }
.scroll-actions { display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; }
.scroll-actions .primary-action { margin: 0; }
.scroll-stage.is-unrolling .scroll-stage__backdrop { opacity: 1; }
.scroll-stage.is-unrolling .royal-scroll { opacity: 1; transform: translateY(0) scale(1); }
.scroll-stage.is-unrolling .scroll-paper { height: min(660px,calc(100svh - 110px)); opacity: 1; transform: scaleY(1); }
.scroll-stage.is-unrolling .scroll-roll--bottom { transform: translateY(0); }
body.scroll-open { overflow: hidden; }

.toast { position: fixed; left: 50%; bottom: 22px; z-index: 80; width: min(440px, calc(100% - 32px)); padding: 13px 16px; border: 1px solid rgba(255,255,255,.82); border-radius: 8px; color: #3c234d; text-align: center; font-weight: 900; background: rgba(255,255,255,.92); box-shadow: 0 16px 42px rgba(70,42,88,.22); opacity: 0; transform: translate(-50%,20px); pointer-events: none; transition: opacity 220ms ease, transform 220ms ease; }
.toast.is-visible { opacity: 1; transform: translate(-50%,0); }
.confetti { position: absolute; inset: 0; z-index: 15; pointer-events: none; overflow: hidden; }
.confetti i { position: absolute; top: -20px; width: 9px; height: 14px; border-radius: 2px; animation: fall 1300ms linear forwards; }
.confetti i.magic-piece { top: auto; width: 7px; height: 7px; border-radius: 50%; animation: magicBurst 1050ms cubic-bezier(.16,.75,.32,1) forwards; }

.party-book { background: var(--paper); }
.royal-nav { position: sticky; top: 0; z-index: 40; display: flex; justify-content: center; gap: clamp(4px, 2vw, 24px); min-height: 54px; padding: 7px 12px; overflow-x: auto; background: rgba(255,250,253,.94); border-bottom: 1px solid var(--line); backdrop-filter: blur(14px); }
.royal-nav { scrollbar-width: none; overscroll-behavior-inline: contain; }
.royal-nav::-webkit-scrollbar { display: none; }
.royal-nav a { display: grid; place-items: center; min-height: 40px; padding: 8px 10px; color: var(--ink); text-decoration: none; font-size: .9rem; font-weight: 800; white-space: nowrap; }
.royal-nav a:hover { color: var(--berry); }
.content-band { padding: clamp(64px, 9vw, 112px) max(20px, calc((100vw - 1160px)/2)); scroll-margin-top: 52px; }
.reveal-section { opacity: 0; transform: translateY(28px); transition: opacity 650ms ease, transform 650ms ease; }
.reveal-section.is-visible { opacity: 1; transform: none; }
.section-heading { max-width: 650px; margin-bottom: clamp(28px, 5vw, 48px); }
.section-heading > p:last-child { color: var(--muted); }

.countdown-band { display: grid; grid-template-columns: minmax(260px,1fr) minmax(400px,1.25fr); align-items: center; gap: clamp(30px,6vw,90px); background: #fff7fb; }
.section-copy > p:last-child { color: var(--muted); }
.countdown-band .text-action { justify-self: start; }
.countdown { grid-row: span 2; display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 9px; }
.countdown div { min-width: 0; padding: clamp(16px,3vw,28px) 8px; border: 1px solid rgba(173,47,106,.16); border-radius: 8px; text-align: center; background: #fff; box-shadow: 0 12px 28px rgba(92,50,91,.08); }
.countdown strong, .countdown span { display: block; }
.countdown strong { color: var(--berry); font-family: Georgia,serif; font-size: clamp(2rem,5vw,4.4rem); line-height: 1; }
.countdown span { margin-top: 8px; color: var(--muted); font-size: .78rem; font-weight: 900; text-transform: uppercase; }
.countdown__message { grid-column: 1/-1; margin: 0; color: var(--berry); font-family: Georgia,serif; font-size: 2rem; }

.program-band { background: #f2f9fd; }
.program-layout { display: grid; grid-template-columns: 1.15fr .85fr; gap: clamp(26px,5vw,70px); align-items: stretch; }
.timeline { display: grid; gap: 8px; }
.timeline__item { display: grid; grid-template-columns: 64px 42px 1fr; align-items: center; min-height: 72px; padding: 10px 16px; border: 1px solid rgba(53,38,66,.12); border-radius: 8px; color: var(--ink); text-align: left; background: rgba(255,255,255,.7); cursor: pointer; transition: transform 160ms ease, background 160ms ease, border-color 160ms ease; }
.timeline__item:hover { transform: translateX(4px); }
.timeline__item.is-active { border-color: rgba(101,182,216,.7); background: #fff; box-shadow: 0 12px 26px rgba(64,119,143,.12); }
.timeline__item time { color: #477e96; font-weight: 900; }
.timeline__item > span { display: grid; place-items: center; width: 34px; aspect-ratio: 1; border-radius: 50%; color: #fff; background: var(--sky); }
.program-story { display: flex; min-height: 312px; flex-direction: column; justify-content: center; padding: clamp(26px,5vw,50px); border-left: 5px solid var(--gold); background: #fff; box-shadow: 0 18px 48px rgba(48,91,109,.11); }
.program-story__icon { display: grid; place-items: center; width: 68px; aspect-ratio: 1; margin-bottom: 22px; border-radius: 50%; color: #6f4a0d; background: #ffe497; font-size: 2rem; }
.program-story h3 { font-family: "Disney Park", Georgia,serif; font-size: clamp(2rem,4.5vw,3.2rem); font-weight: 400; }
.program-story p:last-child { color: var(--muted); font-size: 1.08rem; line-height: 1.6; }

.magic-band { background: #fff; }
.magic-grid { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 12px; }
.magic-grid article { min-height: 220px; padding: 24px 20px; border: 1px solid var(--line); border-radius: 8px; background: #fff; transition: transform 180ms ease, box-shadow 180ms ease; }
.magic-grid article:hover { transform: translateY(-5px); box-shadow: 0 18px 36px rgba(63,42,72,.11); }
.magic-grid article > span { display: grid; place-items: center; width: 48px; aspect-ratio: 1; margin-bottom: 30px; border-radius: 50%; font-size: 1.45rem; }
.magic-grid article:nth-child(1) > span { color: #7b4d0d; background: #ffe49a; }
.magic-grid article:nth-child(2) > span { color: #6e2c58; background: #ffd5e8; }
.magic-grid article:nth-child(3) > span { color: #315f77; background: #d6f0fb; }
.magic-grid article:nth-child(4) > span { color: #376f62; background: #d9f1eb; }
.magic-grid p { color: var(--muted); line-height: 1.5; }

.dress-band { display: grid; grid-template-columns: 1fr .9fr; align-items: center; gap: clamp(34px,7vw,100px); background: #f8f3ff; }
.dress-copy { max-width: 620px; }
.dress-copy > p { color: var(--muted); }
.dress-note { padding: 15px 0 15px 18px; border-left: 4px solid var(--lavender); }
.palette-picker { padding: clamp(26px,5vw,46px); border: 1px solid rgba(136,114,198,.2); border-radius: 8px; background: #fff; box-shadow: 0 18px 44px rgba(88,62,130,.1); }
.palette-picker > p { margin-top: 0; font-weight: 900; }
.swatches { display: flex; gap: 12px; flex-wrap: wrap; }
.swatch { width: 50px; aspect-ratio: 1; border: 4px solid #fff; border-radius: 50%; background: var(--swatch); box-shadow: 0 0 0 1px rgba(53,38,66,.17); cursor: pointer; transition: transform 180ms ease, box-shadow 180ms ease; }
.swatch.is-selected { transform: scale(1.12); box-shadow: 0 0 0 3px var(--ink); }
.color-result { display: flex; align-items: center; gap: 12px; min-height: 58px; margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--line); }
.color-result span { font-size: 2rem; }

.wishlist-band { background: #fff9ee; }
.wishlist-heading { display: flex; justify-content: space-between; align-items: end; gap: 24px; max-width: none; }
.wishlist-heading > div { max-width: 680px; }
.wishlist-counter { flex: 0 0 auto; padding: 10px 13px; border: 1px solid rgba(213,161,53,.32); border-radius: 8px; color: #76520c; background: #fff; font-size: .86rem; font-weight: 800; }
.wishlist-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }
.wish-card { display: grid; grid-template-columns: 58px 1fr auto; align-items: center; gap: 16px; min-height: 132px; padding: 18px; border: 1px solid rgba(126,91,27,.14); border-radius: 8px; background: #fff; transition: opacity 180ms ease, transform 180ms ease; }
.wish-card:hover { transform: translateY(-3px); }
.wish-card__icon { display: grid; place-items: center; width: 56px; aspect-ratio: 1; border-radius: 50%; color: #795713; background: #ffebb8; font-size: 1.55rem; }
.wish-card p { margin: 0 0 5px; color: #9b711e; font-size: .72rem; font-weight: 900; text-transform: uppercase; }
.wish-card h3 { margin-bottom: 7px; }
.wish-card div > span { color: var(--muted); font-size: .9rem; line-height: 1.4; }
.wish-card button { min-height: 40px; padding: 8px 13px; border: 1px solid rgba(173,47,106,.25); border-radius: 8px; color: var(--berry); background: #fff7fb; font-weight: 900; cursor: pointer; }
.wish-card.is-reserved { opacity: .62; background: #f4f1f2; }
.wish-card.is-reserved button { color: #676067; background: #e9e5e7; border-color: transparent; cursor: not-allowed; }

.parents-band { background: #f3fbf8; }
.parent-facts { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 12px; }
.parent-facts > div { padding: 22px; border-top: 3px solid var(--mint); background: #fff; }
.parent-facts > div > span { display: block; margin-bottom: 20px; color: #438a79; font-size: 1.7rem; }
.parent-facts strong { display: block; }
.parent-facts p { margin-bottom: 0; color: var(--muted); line-height: 1.5; }
.faq-list { max-width: 840px; margin-top: 42px; border-top: 1px solid rgba(67,138,121,.22); }
.faq-list details { border-bottom: 1px solid rgba(67,138,121,.22); }
.faq-list summary { padding: 19px 2px; font-weight: 900; cursor: pointer; }
.faq-list details p { margin: -2px 0 20px; color: var(--muted); line-height: 1.55; }

.rsvp-band { display: grid; grid-template-columns: .8fr 1.2fr; gap: clamp(34px,7vw,96px); align-items: start; padding: clamp(64px,9vw,112px) max(20px,calc((100vw - 1160px)/2)); background: #432f52; color: #fff; }
.rsvp-band .eyebrow { color: #ffc0dc; }
.rsvp-band > div > p:last-child { color: #e7dce9; line-height: 1.55; }
.rsvp-box { padding: clamp(22px,4vw,38px); border-radius: 8px; color: var(--ink); background: #fff; }
.rsvp-options { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 7px; margin-bottom: 20px; }
.rsvp-options button { min-height: 46px; padding: 8px; border: 1px solid var(--line); border-radius: 8px; color: var(--ink); background: #f7f3f8; cursor: pointer; font-size: .88rem; font-weight: 800; }
.rsvp-options button.is-selected { color: #fff; background: var(--berry); border-color: var(--berry); }
.form-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 14px; }
.form-grid__wide { grid-column: 1/-1; }
label { display: grid; gap: 7px; font-weight: 800; }
label span { font-size: .85rem; }
input, textarea { width: 100%; min-height: 46px; padding: 11px 12px; border: 1px solid rgba(53,38,66,.2); border-radius: 6px; color: var(--ink); background: #fff; }
textarea { resize: vertical; }
.rsvp-box .primary-action, .gift-dialog .primary-action { width: 100%; margin-top: 18px; }
.form-status { min-height: 20px; margin: 12px 0 0; color: #407d70; text-align: center; font-size: .88rem; font-weight: 800; }
.hp-field { position: absolute !important; left: -10000px !important; width: 1px !important; height: 1px !important; overflow: hidden !important; }

.gift-dialog { width: min(520px,calc(100% - 28px)); padding: clamp(24px,5vw,42px); border: 1px solid rgba(173,47,106,.22); border-radius: 8px; color: var(--ink); background: #fffafd; box-shadow: 0 30px 90px rgba(42,24,48,.42); }
.gift-dialog::backdrop { background: rgba(46,30,53,.58); backdrop-filter: blur(5px); }
.gift-dialog__close-form { position: absolute; top: 12px; right: 12px; }
.gift-dialog h2 { padding-right: 36px; font-size: clamp(2rem,6vw,3rem); }
.gift-dialog > form:last-child > p:not(.eyebrow,.form-status) { color: var(--muted); line-height: 1.5; }
.gift-dialog label { margin-top: 14px; }

.royal-footer { display: grid; place-items: center; min-height: 220px; padding: 40px 20px; text-align: center; background: #fff5fa; }
.royal-footer > span { color: var(--gold); font-size: 2.5rem; }
.royal-footer p { font-family: "Disney Park", Georgia,serif; font-size: clamp(1.8rem,3.7vw,2.6rem); }

@keyframes floatIn { from { opacity: 0; transform: translateY(28px) scale(.97); } to { opacity: 1; transform: translateY(0) scale(1); } }
@keyframes ticketIn { from { opacity: 0; transform: translateY(28px) rotate(-1deg) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes pulse { 0%,100% { box-shadow: 0 0 0 0 rgba(255,229,123,.75),0 12px 30px rgba(78,42,103,.18); } 50% { box-shadow: 0 0 0 14px rgba(255,229,123,0),0 12px 30px rgba(78,42,103,.18); } }
@keyframes twinkle { 0%,100% { opacity: .2; transform: rotate(45deg) scale(.55); } 50% { opacity: 1; transform: rotate(45deg) scale(1.2); } }
@keyframes fall { to { transform: translateY(110vh) rotate(680deg); opacity: 0; } }
@keyframes magicBurst { from { opacity: 1; transform: translate(-50%,-50%) scale(.25); } to { opacity: 0; transform: translate(calc(-50% + var(--burst-x)),calc(-50% + var(--burst-y))) rotate(var(--burst-rotate)) scale(.9); } }
@keyframes butterflyFly { 0% { transform: translate(0) rotate(0) scale(1); opacity: 1; } 18% { transform: translate(5vw,-5vh) rotate(12deg) scale(1.08); } 42% { transform: translate(16vw,3vh) rotate(-10deg) scale(.94); } 70% { transform: translate(37vw,-22vh) rotate(15deg) scale(.72); } 100% { transform: translate(64vw,-48vh) rotate(-8deg) scale(.35); opacity: 0; } }
@keyframes crownRise { 0% { transform: translateY(0) rotate(0) scale(1); opacity: 1; } 35% { transform: translateY(-5vh) rotate(-12deg) scale(1.2); } 100% { transform: translateY(-40vh) rotate(360deg) scale(.45); opacity: 0; } }
@keyframes keyToCastle { 0% { transform: translate(0) rotate(0) scale(1); opacity: 1; } 35% { transform: translate(-8vw,-5vh) rotate(180deg) scale(1.2); } 100% { transform: translate(-34vw,-16vh) rotate(720deg) scale(.2); opacity: 0; } }
@keyframes mirrorFlash { 0% { filter: brightness(1); transform: scale(1); opacity: 1; } 35% { filter: brightness(2.4) drop-shadow(0 0 18px #fff); transform: scale(1.35) rotate(8deg); opacity: 1; } 100% { filter: brightness(3); transform: scale(1.75) rotate(-8deg); opacity: 0; } }
@keyframes wandCast { 0% { transform: rotate(0) scale(1); opacity: 1; } 20% { transform: rotate(-28deg) scale(1.12); } 42% { transform: rotate(22deg) scale(1.2); } 70% { transform: rotate(-12deg) scale(.9); opacity: 1; } 100% { transform: rotate(35deg) scale(.3); opacity: 0; } }
@keyframes slipperDance { 0% { transform: translate(0,0) rotate(0); opacity: 1; } 18% { transform: translate(-1vw,-8vh) rotate(-12deg); } 36% { transform: translate(2vw,0) rotate(8deg); } 54% { transform: translate(4vw,-6vh) rotate(15deg); } 72% { transform: translate(7vw,0) rotate(-8deg); opacity: 1; } 100% { transform: translate(14vw,-3vh) rotate(26deg) scale(.35); opacity: 0; } }
@keyframes envelopeArrives { from { opacity: 0; transform: translateY(38px) rotate(-2deg) scale(.94); } to { opacity: 1; transform: none; } }
@keyframes heartPulse { 0%,100% { opacity: .58; transform: translate(-50%,-50%) scale(.94); } 50% { opacity: 1; transform: translate(-50%,-50%) scale(1.09); } }

@media (max-width: 900px) {
  .countdown-band, .program-layout, .dress-band, .rsvp-band { grid-template-columns: 1fr; }
  .countdown { grid-row: auto; }
  .magic-grid, .parent-facts { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .wishlist-grid { grid-template-columns: 1fr; }
  .rsvp-band { gap: 32px; }
}

@media (max-width: 620px) {
  .scene { place-items: end center; padding-inline: 12px; }
  .scene__image { object-position: 50% 50%; }
  .envelope-intro { padding-inline: 0; }
  .envelope-heading { width: calc(100% - 96px); margin-top: 96px; }
  .envelope-object { width: min(108vw,calc((100svh - 220px) * 1.84)); margin-top: 82px; filter: drop-shadow(0 22px 30px rgba(111,57,63,.24)); }
  .envelope-seal { top: 49.3%; width: clamp(68px,17vw,86px); }
  .envelope-seal::after { font-size: clamp(84px,22vw,108px); }
  .letter-peek { width: 96%; padding: 17% 13% 7%; }
  .letter-peek h2 { font-size: clamp(2.05rem,10vw,3.3rem); }
  .letter-peek__copy { font-size: clamp(.67rem,3vw,.86rem); }
  .letter-peek__action { min-width: 170px; min-height: 42px; margin-top: 10px; }
  .quest-panel { left: 12px; right: 12px; bottom: 12px; width: auto; }
  .treasure { width: clamp(62px,18vw,82px); padding: 3px; }
  .treasure--butterfly { left: 6%; top: 20%; }
  .treasure--crown { left: 8%; top: 43%; }
  .treasure--mirror { right: 8%; top: 20%; }
  .treasure--key { right: 6%; top: 42%; }
  .treasure--wand { left: 28%; bottom: 45%; }
  .treasure--slipper { right: 24%; bottom: 44%; }
  .ticket { width: calc(100vw - 24px); max-height: calc(100svh - 92px); padding: 8px; }
  .ticket__inner { padding: 56px 16px 34px; }
  .ticket__inner::before { top: 10px; }
  .ticket__inner::after { bottom: 8px; }
  .ticket__crest { width: 76px; }
  .ticket h2 { font-size: clamp(2.8rem,15vw,4.5rem); }
  .ticket__lead { margin-block: 14px 18px; font-size: 1rem; }
  .details { grid-template-columns: 1fr; gap: 10px; margin-bottom: 18px; }
  .details div { min-height: 104px; padding: 12px 16px; }
  .details strong { font-size: 1.08rem; }
  .ticket__unroll { min-height: 54px; font-size: 1.04rem; }
  .scroll-stage { padding: 12px; }
  .royal-scroll { width: calc(100vw - 32px); }
  .scroll-roll { width: calc(100% + 28px); height: 29px; margin-left: -14px; }
  .scroll-roll::before, .scroll-roll::after { width: 37px; height: 37px; }
  .scroll-roll::before { left: -15px; }
  .scroll-roll::after { right: -15px; }
  .scroll-roll--bottom { transform: translateY(-29px); }
  .scroll-paper { width: calc(100% - 10px); }
  .scroll-paper__inner { padding: 32px 20px 28px; }
  .scroll-close { top: 16px; right: 18px; }
  .scroll-crown { width: 70px; height: 54px; }
  .scroll-paper h2 { font-size: clamp(2.3rem,12vw,3.4rem); }
  .scroll-program { grid-template-columns: 1fr; gap: 3px; margin-block: 18px 14px; }
  .scroll-program div { min-height: 48px; padding-block: 7px; }
  .scroll-actions { display: grid; grid-template-columns: 1fr; }
  .scroll-actions > * { width: 100%; }
  .scroll-stage.is-unrolling .scroll-paper { height: calc(100svh - 82px); }
  .countdown { gap: 5px; }
  .countdown div { padding: 15px 3px; }
  .countdown strong { font-size: clamp(1.55rem,9vw,2.5rem); }
  .countdown span { font-size: .64rem; }
  .timeline__item { grid-template-columns: 54px 38px 1fr; padding-inline: 10px; }
  .program-story { min-height: 280px; }
  .magic-grid, .parent-facts { grid-template-columns: 1fr; }
  .magic-grid article { min-height: 180px; }
  .magic-grid article > span { margin-bottom: 20px; }
  .wishlist-heading { align-items: start; flex-direction: column; }
  .wish-card { grid-template-columns: 48px 1fr; }
  .wish-card__icon { width: 46px; }
  .wish-card button { grid-column: 1/-1; width: 100%; }
  .rsvp-options, .form-grid { grid-template-columns: 1fr; }
  .form-grid__wide { grid-column: auto; }
}

@media (max-width: 390px) {
  .brand { max-width: calc(100% - 58px); }
  .details { grid-template-columns: 1fr; }
  .ticket__actions > * { width: 100%; }
  .royal-nav { justify-content: flex-start; }
  .content-band { padding-inline: 16px; }
}

.ticket--reference {
  width: min(1120px,calc(100vw - 28px),calc((100svh - 88px) * 1.333));
  max-width: none;
  max-height: none;
  aspect-ratio: 4 / 3;
  padding: 0;
  overflow: visible;
  border: 0;
  border-radius: 0;
  background: url("assets/test.webp") center / 100% 100% no-repeat;
  box-shadow: none;
  backdrop-filter: none;
  filter: drop-shadow(0 26px 38px rgba(75,39,77,.3));
}
.ticket--reference .ticket__inner { position: absolute; inset: 0; min-height: 0; padding: 0; border: 0; background: none; box-shadow: none; }
.ticket--reference .ticket__inner::before, .ticket--reference .ticket__inner::after { content: none; }
.ticket--reference .ticket__eyebrow { position: absolute; top: 20.5%; left: 10%; right: 10%; margin: 0; font-size: clamp(.72rem,1.45vw,1.02rem); }
.ticket--reference h2 { position: absolute; top: 25%; left: 7%; right: 7%; color: #99164f; font-size: clamp(3rem,6.55vw,6.4rem); line-height: .82; }
.ticket--reference .ticket__lead { position: absolute; top: 40.5%; left: 18%; right: 18%; max-width: none; margin: 0; font-size: clamp(1rem,2.15vw,1.55rem); line-height: 1.38; }
.ticket--reference .details { position: absolute; top: 54%; left: 14.5%; right: 14.5%; height: 22%; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 6.5%; max-width: none; margin: 0; }
.ticket--reference .details div { position: relative; display: block; min-height: 0; padding: 0; border: 0; background: none; box-shadow: none; }
.ticket--reference .details div::before, .ticket--reference .details div::after { content: none; }
.ticket--reference .details div > span { position: absolute; top: 10%; left: 0; right: 0; font-size: clamp(.72rem,1.4vw,1rem); text-align: center; }
.ticket--reference .details div > i { display: none; }
.ticket--reference .details strong { position: absolute; top: 47%; left: 7%; right: 7%; display: flex; height: 36%; margin: 0; flex-direction: column; align-items: center; justify-content: center; gap: clamp(7px,1.1vw,13px); font-size: clamp(.98rem,2.2vw,1.52rem); text-align: center; }
.ticket--reference .details strong small { display: none; }
.ticket--reference .ticket__actions { position: absolute; left: 27%; right: 27%; bottom: 9.5%; }
.ticket--reference .ticket__unroll { width: 100%; min-width: 0; min-height: clamp(52px,7vw,76px); font-size: clamp(1rem,2.25vw,1.48rem); background: linear-gradient(100deg,#cf2873 0,#f06aa4 56%,#e5aa45 100%); }

.royal-scroll--realistic {
  width: min(620px,calc(100vw - 28px),calc((100svh - 24px) * .75));
  aspect-ratio: 3 / 4;
  margin: auto;
  overflow: hidden;
  background: url("assets/test2.webp") center / 100% 100% no-repeat;
  filter: drop-shadow(0 30px 42px rgba(48,25,43,.42));
  opacity: 0;
  clip-path: inset(0 0 87% 0);
  transform: translateY(-4vh) scale(.96);
  transform-origin: top center;
  transition: clip-path 1050ms cubic-bezier(.2,.78,.2,1),opacity 260ms ease,transform 1050ms cubic-bezier(.2,.78,.2,1);
}
.royal-scroll--realistic .scroll-paper { position: absolute; inset: 14.5% 15.5% 13.5%; width: auto; height: auto; margin: 0; overflow: visible; border: 0; background: none; opacity: 1; transform: none; transition: none; }
.royal-scroll--realistic .scroll-paper::before { content: none; }
.royal-scroll--realistic .scroll-paper__inner { display: flex; height: 100%; padding: 10% 5% 6%; overflow: visible; flex-direction: column; align-items: center; justify-content: center; text-align: center; opacity: 0; transform: translateY(-18px); transition: opacity 360ms ease 720ms,transform 440ms ease 680ms; }
.royal-scroll--realistic .scroll-close { top: 0; right: 0; border-color: rgba(151,92,39,.5); background: rgba(255,247,219,.9); }
.royal-scroll--realistic .eyebrow { margin: 0 0 clamp(10px,2vh,18px); color: #a5672b; letter-spacing: .13em; }
.royal-scroll--realistic h2 { max-width: 11ch; color: #9d2353; font-size: clamp(2.8rem,6.6vh,4.6rem); line-height: .88; text-shadow: 0 1px #fff,0 3px 10px rgba(123,61,56,.12); }
.royal-scroll--realistic .scroll-message { max-width: 32ch; margin: clamp(18px,3vh,28px) auto 12px; color: #543c3a; font-family: Georgia,"Times New Roman",serif; font-size: clamp(1rem,2.2vh,1.25rem); line-height: 1.5; }
.scroll-signature { margin: 0 0 clamp(18px,3vh,30px); color: #ad4770; font-family: Georgia,"Times New Roman",serif; font-size: clamp(.95rem,2vh,1.12rem); font-style: italic; }
.scroll-signature span { color: #c99638; }
.royal-scroll--realistic .scroll-actions { display: block; width: min(330px,90%); }
.royal-scroll--realistic .scroll-actions .primary-action { width: 100%; min-height: 54px; border-color: #d2a04b; border-radius: 999px; }
.scroll-stage.is-unrolling .royal-scroll--realistic { opacity: 1; clip-path: inset(0); transform: translateY(0) scale(1); }
.scroll-stage.is-unrolling .royal-scroll--realistic .scroll-paper { height: auto; opacity: 1; transform: none; }
.scroll-stage.is-unrolling .royal-scroll--realistic .scroll-paper__inner { opacity: 1; transform: translateY(0); }

@media (max-width: 620px) {
  .ticket--reference { width: calc(100vw - 12px); max-height: none; aspect-ratio: 3 / 4; padding: 0; background-size: 100% 100%; }
  .ticket--reference .ticket__eyebrow { top: 21.5%; font-size: .68rem; }
  .ticket--reference h2 { top: 25.5%; left: 6%; right: 6%; font-size: clamp(2.3rem,11.5vw,3.05rem); line-height: .88; }
  .ticket--reference .ticket__lead { top: 41.5%; left: 10%; right: 10%; font-size: clamp(.78rem,3.3vw,.94rem); }
  .ticket--reference .details { top: 54%; left: 12%; right: 12%; height: 19%; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 7%; }
  .ticket--reference .details div { min-height: 0; padding: 0; }
  .ticket--reference .details div > span { font-size: .62rem; }
  .ticket--reference .details strong { top: 45%; gap: 5px; margin: 0; font-size: clamp(.72rem,3.1vw,.9rem); }
  .ticket--reference .ticket__actions { left: 18%; right: 18%; bottom: 9%; }
  .ticket--reference .ticket__unroll { min-height: 48px; font-size: .9rem; }
  .royal-scroll--realistic { width: min(calc(100vw - 14px),calc((100svh - 12px) * .75)); }
  .royal-scroll--realistic .scroll-paper { inset: 14.5% 14% 13.5%; }
  .royal-scroll--realistic .scroll-paper__inner { padding-inline: 2%; }
  .royal-scroll--realistic h2 { font-size: clamp(2.45rem,10.5vw,3.35rem); }
  .royal-scroll--realistic .scroll-message { font-size: clamp(.88rem,3.7vw,1.02rem); line-height: 1.42; }
  .royal-scroll--realistic .scroll-close { top: -2px; right: -2px; width: 34px; height: 34px; }
  .royal-nav { justify-content: flex-start; gap: 2px; padding-inline: 8px; }
  .royal-nav a { padding-inline: 9px; font-size: .82rem; }
}

.party-book { position: relative; overflow: hidden; background: #fff9fc; }
.royal-nav { border-bottom-color: rgba(197,139,55,.32); background: rgba(255,249,252,.92); box-shadow: 0 8px 22px rgba(83,42,76,.08); }
.royal-nav a { position: relative; color: #5e365e; }
.royal-nav a::after { content: ""; position: absolute; left: 50%; right: 50%; bottom: 4px; height: 2px; background: linear-gradient(90deg,#c33775,#d9a43d); transition: left 180ms ease,right 180ms ease; }
.royal-nav a:hover::after, .royal-nav a:focus-visible::after { left: 10px; right: 10px; }

.storybook-hero { position: relative; min-height: calc(100svh - 54px); display: grid; align-items: center; padding: 90px max(24px,calc((100vw - 1160px)/2)) 120px; isolation: isolate; overflow: hidden; }
.storybook-hero__backdrop, .storybook-hero__veil { position: absolute; inset: 0; width: 100%; height: 100%; }
.storybook-hero__backdrop { z-index: -4; object-fit: cover; object-position: 50% 48%; transform: scale(1.03); }
.storybook-hero__veil { z-index: -3; background: linear-gradient(90deg,rgba(255,250,252,.96) 0,rgba(255,246,251,.83) 34%,rgba(255,255,255,.24) 63%,rgba(255,255,255,.06)),linear-gradient(180deg,rgba(255,255,255,.08),rgba(255,243,249,.25)); }
.storybook-hero__copy { position: relative; z-index: 4; width: min(650px,58%); }
.storybook-hero__copy .eyebrow { color: #ad2f6a; font-family: Georgia,"Times New Roman",serif; font-size: .92rem; letter-spacing: .12em; }
.storybook-hero h1 { max-width: 9ch; margin: 0; color: #8f1d55; font-size: 6.15rem; line-height: .82; text-align: left; text-shadow: 0 2px #fff,0 6px 26px rgba(130,38,84,.2); }
.storybook-hero__copy > p:not(.eyebrow) { max-width: 48ch; margin: 28px 0 24px; color: #493149; font-family: Georgia,"Times New Roman",serif; font-size: 1.25rem; line-height: 1.55; }
.storybook-hero__facts { display: flex; max-width: 580px; margin-bottom: 22px; border-block: 1px solid rgba(185,119,60,.36); }
.storybook-hero__facts > span { display: grid; flex: 1; gap: 5px; min-width: 0; padding: 14px 18px; }
.storybook-hero__facts > span + span { border-left: 1px solid rgba(185,119,60,.28); }
.storybook-hero__facts strong, .storybook-hero__facts small { display: block; }
.storybook-hero__facts strong { color: #7f2a54; font-family: Georgia,"Times New Roman",serif; font-size: 1.08rem; }
.storybook-hero__facts small { color: #765f7f; font-weight: 800; }
.storybook-hero__copy .primary-action { margin: 0; min-width: 230px; }
.hero-decor { position: absolute; z-index: 2; pointer-events: none; user-select: none; filter: drop-shadow(0 16px 24px rgba(79,39,73,.22)); }
.hero-decor--flowers { left: -5%; right: auto; bottom: -6%; width: min(76vw,1150px); z-index: 3; }
.hero-decor--carriage { right: 19%; bottom: 4%; width: min(29vw,430px); }
.hero-decor--balloons { right: 1.5%; top: 5%; width: min(19vw,280px); transform-origin: 50% 100%; }
.storybook-hero.is-visible .hero-decor--carriage { animation: carriageArrive 1.4s cubic-bezier(.2,.8,.2,1) both,carriageFloat 4.8s ease-in-out 1.4s infinite; }
.storybook-hero.is-visible .hero-decor--balloons { animation: balloonsSway 4.4s ease-in-out infinite; }
.storybook-hero.is-visible .hero-decor--flowers { animation: flowerAwake 1.1s ease both; }
.falling-petals { position: absolute; inset: 0; z-index: 1; overflow: hidden; pointer-events: none; }
.falling-petals i { position: absolute; top: -9%; width: 13px; height: 9px; border-radius: 85% 12% 80% 15%; background: #f3a9c3; opacity: .72; animation: petalFall 7s linear infinite; }
.falling-petals i:nth-child(1) { left: 8%; animation-delay: -1s; }
.falling-petals i:nth-child(2) { left: 20%; animation-delay: -5s; animation-duration: 8.5s; }
.falling-petals i:nth-child(3) { left: 37%; animation-delay: -3s; }
.falling-petals i:nth-child(4) { left: 51%; animation-delay: -6s; animation-duration: 9s; }
.falling-petals i:nth-child(5) { left: 66%; animation-delay: -2s; }
.falling-petals i:nth-child(6) { left: 77%; animation-delay: -4s; animation-duration: 8s; }
.falling-petals i:nth-child(7) { left: 88%; animation-delay: -7s; }
.falling-petals i:nth-child(8) { left: 95%; animation-delay: -2.5s; animation-duration: 9.5s; }

.party-book .content-band { position: relative; isolation: isolate; overflow: hidden; }
.party-book .content-band > *:not(.section-decor) { position: relative; z-index: 2; }
.party-book .section-heading h2, .party-book .section-copy h2, .party-book .dress-copy h2 { color: #71254f; text-shadow: 0 1px #fff; }
.party-book .section-heading::after, .party-book .section-copy::after { content: "✦  ♡  ✦"; display: block; width: max-content; margin-top: 18px; color: #c68e37; font-family: Georgia,"Times New Roman",serif; letter-spacing: .45em; }
.countdown-band { min-height: 620px; background: linear-gradient(115deg,#fff9fc,#f8f0ff 52%,#eef9ff); }
.program-band { background: linear-gradient(120deg,#edf8ff,#fff8fc 62%,#fff4e3); }
.magic-band { min-height: 650px; background: linear-gradient(120deg,#fffdf9,#fff2f8 50%,#f4f0ff); }
.dress-band { background: linear-gradient(120deg,#f7f1ff,#fff8fc 56%,#edf9fb); }
.wishlist-band { background: linear-gradient(120deg,#fff9e9,#fff7fb 56%,#f3efff); }
.parents-band { background: linear-gradient(120deg,#edf9f7,#fff8fb 62%,#f4f0ff); }
.section-decor { position: absolute !important; z-index: 1 !important; pointer-events: none; user-select: none; opacity: 0; filter: drop-shadow(0 13px 20px rgba(89,44,78,.16)); transition: opacity 700ms ease,transform 900ms cubic-bezier(.2,.8,.2,1); }
.reveal-section.is-visible .section-decor { opacity: .76; transform: translate(0) rotate(0) scale(1); }
.section-decor--flowers { right: -10%; top: -3%; width: min(53vw,700px); transform: translate(80px,-35px) rotate(5deg) scale(.9); }
.section-decor--carriage { right: -5%; bottom: -12%; width: min(31vw,420px); opacity: 0; transform: translateX(110px) scale(.86); }
.reveal-section.is-visible .section-decor--carriage { opacity: .3; animation: carriageDrift 6s ease-in-out 900ms infinite; }
.section-decor--cake { right: 2%; top: 8%; width: min(23vw,300px); transform: translateY(55px) scale(.82); }
.reveal-section.is-visible .section-decor--cake { opacity: .48; animation: cakeGlow 3.2s ease-in-out 900ms infinite; }
.section-decor--balloons { right: 3%; top: 4%; width: min(21vw,250px); transform: translateY(60px) rotate(5deg); transform-origin: 50% 100%; }
.reveal-section.is-visible .section-decor--balloons { opacity: .56; animation: balloonsSway 4.8s ease-in-out 800ms infinite; }
.section-decor--wishlist-flowers { left: -12%; bottom: -7%; width: min(49vw,650px); transform: translate(-70px,40px) rotate(-7deg); }
.reveal-section.is-visible .section-decor--wishlist-flowers { opacity: .48; }
.section-decor--rsvp-flowers { right: -13%; bottom: -14%; width: min(50vw,690px); opacity: 0; transform: translate(90px,50px) rotate(4deg); }
.rsvp-band.is-visible .section-decor--rsvp-flowers { opacity: .18; }

.countdown div { border-color: rgba(199,110,148,.28); background: rgba(255,255,255,.8); box-shadow: inset 0 0 0 4px rgba(255,232,240,.5),0 16px 34px rgba(92,50,91,.11); }
.countdown div:nth-child(2) { background: rgba(248,244,255,.88); }
.countdown div:nth-child(3) { background: rgba(239,250,255,.88); }
.countdown div:nth-child(4) { background: rgba(255,249,231,.9); }
.timeline__item { border-color: rgba(192,100,140,.2); background: rgba(255,255,255,.82); box-shadow: 0 10px 20px rgba(74,44,83,.07); }
.timeline__item.is-active { border-color: rgba(197,132,45,.56); background: linear-gradient(100deg,#fff1f7,#fffaf0); box-shadow: 0 14px 30px rgba(146,52,97,.14); }
.program-story { border-color: rgba(202,139,46,.35); background: rgba(255,255,255,.82); box-shadow: inset 0 0 0 5px rgba(255,235,240,.5),0 20px 44px rgba(64,48,83,.12); }
.magic-band .section-heading { max-width: 70%; }
.magic-grid { position: relative; z-index: 3; margin-top: 46px; }
.magic-grid article { min-height: 260px; padding-top: 28px; border-color: rgba(195,101,139,.2); background: rgba(255,255,255,.82); box-shadow: 0 14px 30px rgba(83,45,82,.08); backdrop-filter: blur(8px); }
.magic-grid article > span { width: 74px; margin-bottom: 18px; border: 0; background: transparent !important; }
.magic-grid article > span img { width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 7px 9px rgba(90,48,70,.2)); transition: transform 300ms ease; }
.magic-grid article:hover > span img { transform: translateY(-7px) rotate(5deg) scale(1.08); }
.palette-picker { border: 1px solid rgba(200,124,158,.24); background: rgba(255,255,255,.76); box-shadow: inset 0 0 0 5px rgba(255,236,243,.5),0 18px 40px rgba(76,44,85,.1); }
.wish-card { border-color: rgba(193,118,54,.24); background: rgba(255,255,255,.84); box-shadow: 0 12px 25px rgba(83,47,72,.08); }
.wish-card:hover { transform: translateY(-3px); box-shadow: 0 18px 35px rgba(83,47,72,.13); }
.wish-card__icon { border: 0; background: transparent; }
.wish-card__icon img { width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 5px 6px rgba(82,45,67,.18)); }
.rsvp-band { position: relative; overflow: hidden; background: linear-gradient(120deg,#4a294e,#72375f 52%,#463a68); }
.rsvp-band > *:not(.section-decor) { position: relative; z-index: 2; }
.rsvp-box { border: 1px solid rgba(255,221,160,.26); box-shadow: inset 0 0 0 5px rgba(255,255,255,.05),0 22px 50px rgba(25,14,35,.22); }
.royal-footer { position: relative; background: #fff4f9; }

@keyframes petalFall { 0% { transform: translate3d(0,-8vh,0) rotate(0); opacity: 0; } 12% { opacity: .72; } 55% { transform: translate3d(45px,52vh,0) rotate(240deg); } 100% { transform: translate3d(-28px,112vh,0) rotate(560deg); opacity: 0; } }
@keyframes carriageArrive { from { opacity: 0; transform: translateX(180px) scale(.84); } to { opacity: 1; transform: translateX(0) scale(1); } }
@keyframes carriageFloat { 0%,100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-7px) rotate(.8deg); } }
@keyframes carriageDrift { 0%,100% { transform: translate(0) rotate(0) scale(1); } 50% { transform: translate(-12px,-6px) rotate(-1deg) scale(1.01); } }
@keyframes balloonsSway { 0%,100% { transform: rotate(-2deg) translateY(0); } 50% { transform: rotate(3deg) translateY(-10px); } }
@keyframes flowerAwake { from { opacity: 0; transform: translateY(35px) scale(.94); } to { opacity: 1; transform: translateY(0) scale(1); } }
@keyframes cakeGlow { 0%,100% { filter: drop-shadow(0 13px 20px rgba(89,44,78,.16)) brightness(1); transform: translateY(0) scale(1); } 50% { filter: drop-shadow(0 13px 28px rgba(240,170,75,.32)) brightness(1.08); transform: translateY(-5px) scale(1.015); } }

@media (max-width: 900px) {
  .storybook-hero { min-height: 820px; align-items: start; padding-top: 82px; }
  .storybook-hero__copy { width: min(590px,76%); }
  .storybook-hero h1 { font-size: 5rem; }
  .hero-decor--carriage { right: 18%; width: 330px; }
  .hero-decor--balloons { width: 205px; }
  .magic-band .section-heading { max-width: 64%; }
  .section-decor--cake { width: 220px; }
}

@media (max-width: 620px) {
  .storybook-hero { min-height: 760px; padding: 62px 18px 170px; align-items: start; }
  .storybook-hero__backdrop { object-position: 55% 50%; }
  .storybook-hero__veil { background: linear-gradient(180deg,rgba(255,249,252,.96) 0,rgba(255,247,251,.82) 48%,rgba(255,255,255,.12)); }
  .storybook-hero__copy { width: 100%; text-align: center; }
  .storybook-hero h1 { max-width: 10ch; margin-inline: auto; font-size: 3.55rem; text-align: center; }
  .storybook-hero__copy > p:not(.eyebrow) { margin: 20px auto; font-size: 1rem; }
  .storybook-hero__facts { margin-inline: auto; }
  .storybook-hero__facts > span { padding: 10px 8px; }
  .storybook-hero__facts strong { font-size: .84rem; }
  .storybook-hero__facts small { font-size: .7rem; }
  .hero-decor--flowers { left: -34%; bottom: -1%; width: 145%; }
  .hero-decor--carriage { right: 16%; bottom: 3%; width: 230px; }
  .hero-decor--balloons { right: -6%; top: 45%; width: 130px; opacity: .82; }
  .party-book .content-band { padding-top: 76px; padding-bottom: 76px; }
  .section-decor--flowers { right: -30%; width: 98%; opacity: 0; }
  .reveal-section.is-visible .section-decor--flowers { opacity: .3; }
  .section-decor--carriage { right: -22%; width: 250px; }
  .section-decor--cake { right: -20%; top: 2%; width: 180px; }
  .reveal-section.is-visible .section-decor--cake { opacity: .22; }
  .section-decor--balloons { right: -13%; width: 145px; }
  .reveal-section.is-visible .section-decor--balloons { opacity: .26; }
  .magic-band .section-heading { max-width: 78%; }
  .magic-grid { margin-top: 30px; }
  .magic-grid article { min-height: 210px; }
  .section-decor--wishlist-flowers, .section-decor--rsvp-flowers { width: 110%; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; animation-duration: 1ms !important; animation-iteration-count: 1 !important; transition-duration: 1ms !important; }
  .reveal-section { opacity: 1; transform: none; }
}
