/* Rose Glass theme — طرح شیشه‌ی رز */
@font-face{font-family:Vazirmatn;src:url('../fonts/vazirmatn-arabic-400.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:Vazirmatn;src:url('../fonts/vazirmatn-arabic-600.woff2') format('woff2');font-weight:600;font-display:swap}
@font-face{font-family:RoseScript;src:url('../fonts/DimaShekasteh1.ttf') format('truetype');font-display:swap}
@font-face{font-family:WeddingScript;src:url('../fonts/candlescript.otf') format('opentype');font-display:swap}

:root{
  --fa:Vazirmatn,Tahoma,Arial,sans-serif;
  --script:RoseScript,Vazirmatn,serif;
  --en-script:WeddingScript,Georgia,serif;
  --ink:#4b3f3a;--muted:#8a7871;--gold:#b07c56;--gold-l:#dcb592;
  --paper:#f6ecee;--paper-2:#f1e3e6;--blush:#ecd3d4;
  --olive:#56602f;--olive-d:#464f24;--olive-text:#f6ece4;
  --dock-h:86px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;color:var(--ink);font:400 14px/2.1 var(--fa);text-align:center;-webkit-font-smoothing:antialiased;
  background:radial-gradient(ellipse at 20% 10%,#f7ecee 0,transparent 55%) fixed,radial-gradient(ellipse at 85% 90%,#e3c9cd 0,transparent 50%) fixed,#e9d8db}
h1,h2,h3,p,figure,ol{margin:0}h2,h3{font-weight:400}
img,svg,video{max-width:100%}img{height:auto}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer}button:disabled{opacity:.55;cursor:default}
a{color:inherit}
button,a{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
[hidden]{display:none!important}

#invitation{position:relative;max-width:480px;margin:0 auto;overflow:hidden;padding-bottom:calc(var(--dock-h) + 40px);
  background:linear-gradient(180deg,var(--paper) 0,var(--paper-2) 100%);
  box-shadow:0 18px 60px #6d474b33}
#invitation>section{position:relative}

/* ---------- typography helpers ---------- */
.script-title{font:400 46px/1.55 var(--script);color:var(--ink);padding:4px 0 2px;overflow-wrap:anywhere}
.script-title.small{font-size:36px}
.script-title.light{color:#fbf1ea}
.caps-kicker{font-size:12px;color:var(--muted);word-spacing:.18em;line-height:2.1;max-width:340px;margin:0 auto}
.soft-copy,.invitation-copy{font-size:14px;line-height:2.35;max-width:360px;margin:0 auto;overflow-wrap:anywhere}
.soft-note{font-size:12px;color:var(--muted);line-height:2.2;max-width:330px;margin:18px auto 0}
.thin-rule{display:block;width:44px;height:1px;background:var(--gold-l);margin:14px auto}
.flourish-heading img{width:220px;display:block;margin:0 auto 4px;opacity:.9}

/* ---------- gate (entrance) ---------- */
.rose-gate{display:none}
.js .rose-gate{display:block;position:fixed;inset:0;z-index:300;cursor:pointer;perspective:1400px;outline:none;background:#d9b5b3}
.js body.gate-locked{overflow:hidden}
.gate-door{position:absolute;top:0;bottom:0;width:50.5%;overflow:hidden;transition:transform 1.9s cubic-bezier(.7,0,.2,1),opacity 1.9s ease;will-change:transform;box-shadow:0 0 30px #7a4b4b30}
.gate-door img{display:block;width:100%;height:100%;object-fit:cover;object-position:left center}
.gate-right{right:0;transform-origin:right center}
.gate-left{left:0;transform-origin:left center}
.gate-left img{transform:scaleX(-1)}
.gate-door:after{content:'';position:absolute;top:0;bottom:0;width:7px;background:linear-gradient(90deg,#7d5236,#f3d6b3 40%,#c49167 65%,#7a5034)}
.gate-right:after{left:0}.gate-left:after{right:0}
.gate-seal{position:absolute;left:50%;top:50%;width:118px;height:118px;margin:-59px 0 0 -59px;z-index:2;transition:transform 1s cubic-bezier(.6,0,.3,1),opacity .8s ease;filter:drop-shadow(0 6px 14px #6b3d3d55)}
.gate-seal img{width:100%;height:100%;display:block}
.seal-monogram{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font:400 30px/1 var(--en-script);color:#7e5238;letter-spacing:-.02em}
.seal-monogram i{font:italic 15px Georgia,serif;margin:0 1px;color:#a37452}
.gate-guest{position:absolute;left:50%;top:calc(50% - 150px);transform:translateX(-50%);width:min(300px,82vw);padding:10px 16px;border-radius:14px;background:#fbf1efcc;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-size:12px;line-height:1.9;z-index:2;box-shadow:0 6px 20px #7a4b4b25;transition:opacity .6s}
.gate-guest strong{display:block;font:400 28px/1.5 var(--script)}
.gate-hint{position:absolute;left:0;right:0;bottom:max(9%,env(safe-area-inset-bottom));font-size:12px;color:#6b4a45;z-index:2;animation:hintPulse 2.2s ease-in-out infinite;transition:opacity .5s}
.rose-gate.opening .gate-hint,.rose-gate.opening .gate-guest{opacity:0}
.rose-gate.opening .gate-seal{transform:scale(1.18) rotate(-12deg);opacity:0}
.rose-gate.opening .gate-right{transform:translateX(102%) rotateY(-18deg)}
.rose-gate.opening .gate-left{transform:translateX(-102%) rotateY(18deg)}
.rose-gate.opening{background:transparent;pointer-events:none;transition:background .4s}
.rose-gate.gone{display:none}
@keyframes hintPulse{50%{opacity:.45}}

/* ---------- hero arch ---------- */
.hero-arch{min-height:100vh;min-height:100svh;max-height:980px;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:30% 64px 26%;
  background:radial-gradient(ellipse at 50% 45%,#fbf3f2 0,#f6e5e5 55%,#efd7d8 100%)}
.hero-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;user-select:none}
.hero-inner{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:6px;max-width:300px}
.hero-opening{font-size:12px;line-height:2;color:var(--muted)}
.personal-welcome{font-size:11px;color:var(--muted);line-height:1.8;margin-top:4px}
.personal-welcome strong{display:block;font:400 22px/1.6 var(--script);color:var(--ink)}
.hero-date{font-size:13px;letter-spacing:.02em;margin-top:4px}
.hero-names{display:flex;flex-direction:column;align-items:center;font:400 62px/1.25 var(--script);color:#4a3b36;margin:6px 0 0}
.hero-names span{display:block;overflow-wrap:anywhere}
.hero-names b{font:400 76px/.9 var(--script);color:var(--gold);margin:-8px 0 2px}
.hero-names-en{font:400 25px/1.6 var(--en-script);color:var(--gold)}
.hero-names-en b{font:italic 15px Georgia,serif}
.hero-request{font-size:12px;color:var(--muted);margin-top:4px}
.hero-venue{display:flex;flex-direction:column;font-size:12px;line-height:1.9;margin-top:8px}
.hero-venue strong{font-weight:600;font-size:13px;letter-spacing:.02em}
.hero-venue span{color:var(--muted);font-size:11px}
.hero-kicker{font:11px/2 Georgia,serif;letter-spacing:.32em;color:var(--muted);margin-top:4px}
.scroll-cue{position:absolute;bottom:4.2%;left:50%;width:34px;height:34px;margin-left:-17px;z-index:2;display:grid;place-items:center;border-radius:50%;background:#fbf1efd9;box-shadow:0 2px 10px #7a4b4b22}
.scroll-cue span{width:9px;height:9px;border-right:1.5px solid var(--gold);border-bottom:1.5px solid var(--gold);transform:rotate(45deg) translate(-2px,-2px);animation:cue 1.8s ease-in-out infinite}
@keyframes cue{50%{transform:rotate(45deg) translate(2px,2px)}}
.entered .reveal-hero{animation:heroIn 1.6s .5s cubic-bezier(.2,.7,.2,1) both}
@keyframes heroIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}

/* ---------- countdown ---------- */
.countdown-section{padding:56px 28px 50px}
.hourglass{width:210px;display:block;margin:0 auto 6px}
.rose-countdown{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));direction:rtl;max-width:340px;margin:22px auto 6px}
.countdown-unit{padding:2px 4px;border-left:1px solid #cfb3a8}
.countdown-unit:last-child{border-left:0}
.countdown-unit strong{display:block;font:400 30px/1.4 var(--fa);font-variant-numeric:tabular-nums;color:#5a4a43}
.countdown-unit span{display:block;font-size:10px;color:var(--muted);word-spacing:.2em}

/* ---------- olive arch + scratch ---------- */
.olive-arch{padding:18px 0 10px}
.olive-shape{position:relative;width:88%;margin:0 auto;padding:50px 26px 70px;color:var(--olive-text);
  background:radial-gradient(ellipse at 50% 20%,#66713b 0,var(--olive) 55%,var(--olive-d) 100%);border-radius:50%/18%;box-shadow:inset 0 0 0 1px #ffffff14,0 16px 40px #3f472030}
.olive-garland{width:86%;display:block;margin:-6px auto 4px}
.olive-shape .script-title{font-size:38px;line-height:1.6;text-shadow:0 1px 10px #2e341855}
.olive-copy{font-size:13px;line-height:2.2;opacity:.92;max-width:280px;margin:6px auto 0}
.scratch-card{position:relative;width:82%;max-width:320px;aspect-ratio:600/800;margin:26px auto 0}
.scratch-window{position:absolute;left:14.67%;top:10.5%;width:70.67%;height:79%;-webkit-clip-path:url(#ovalClip);clip-path:url(#ovalClip);background:#f3dcda}
.scratch-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 30%}
.scratch-canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;transition:opacity 1s ease}
.scratch-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:13px;line-height:2;color:#9b6f68;pointer-events:none;transition:opacity .5s}
.scratch-card.scratching .scratch-label{opacity:0}
.scratch-card.revealed .scratch-canvas{opacity:0;pointer-events:none}
.scratch-frame{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.reveal-all{margin-top:14px;border:1px solid #e9dcc580;background:transparent;color:var(--olive-text);border-radius:999px;padding:5px 16px;font-size:11px}
.scratch-card.revealed~.reveal-all{visibility:hidden}
.sparkle{position:absolute;width:5px;height:5px;border-radius:50%;background:radial-gradient(circle,#fff6d8 0,#e8c37f 55%,transparent 70%);pointer-events:none;z-index:3;animation:spark 1s ease-out forwards}
@keyframes spark{to{transform:translate(var(--dx),var(--dy)) scale(.2);opacity:0}}

/* ---------- welcome ---------- */
.welcome-section{padding:64px 54px 56px}
.welcome-branch{position:absolute;top:30px;width:70px;opacity:.95;pointer-events:none}
.branch-r{right:-6px}
.branch-l{left:-6px;transform:scaleX(-1)}
.welcome-bird{position:absolute;top:150px;right:30px;width:56px;transform:scaleX(-1) rotate(-6deg)}
.family-pair{display:grid;grid-template-columns:minmax(0,1fr) 14px minmax(0,1fr);align-items:center;gap:10px;margin:8px auto 6px;max-width:320px}
.family-pair small{display:block;font-size:10px;color:var(--muted)}
.family-pair span{display:block;font:400 30px/1.6 var(--script)}
.family-pair i{font-style:normal;color:var(--gold);font-size:10px}
.family-pair>div:only-child{grid-column:1/-1}
.families-name{font:400 30px/1.7 var(--script)}
.welcome-names{font:400 40px/1.6 var(--script);margin:6px 0 14px;color:#4a3b36}

/* ---------- venue ---------- */
.venue-section{padding:40px 22px 46px}
.venue-frame{position:relative;margin:20px auto 0;max-width:360px;border:44px solid transparent;border-image:url('../img/rose/venue-frame.webp') 90 round;
  background:#fbf3f2 padding-box;padding:22px 8px 12px;box-shadow:0 10px 30px #8a5d5d1f}
.venue-frame .script-title{font-size:34px;line-height:1.5}
.venue-frame address{font-style:normal;font-size:12px;line-height:2.1;color:var(--muted)}
.venue-date{font-size:13px}.venue-time{font-size:12px;color:var(--muted)}
.venue-villa{display:block;width:88%;margin:14px auto 0}
.pill-row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:22px}
.pill-btn{display:inline-flex;align-items:center;min-height:40px;padding:6px 20px;border-radius:999px;border:0;background:var(--olive);color:#f7eee6;font-size:12px;text-decoration:none;box-shadow:0 6px 14px #3f472035,inset 0 0 0 1px #ffffff1c}
.pill-btn.solid{background:var(--olive-d)}

/* ---------- dress code ---------- */
.dress-section{padding:30px 26px 10px}
.dancers{width:72%;max-width:260px;display:block;margin:0 auto}
.dress-palette{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 10px;margin:18px auto 6px;max-width:360px}
.dress-swatch{flex:0 1 62px}
.dress-bow{width:54px;height:52px}
.dress-swatch figcaption{font-size:10px;color:var(--muted);line-height:1.8}
.string-lights{display:block;width:calc(100% + 52px);max-width:none;height:110px;margin:22px -26px 0}

/* ---------- program ribbon ---------- */
.program-section{padding:34px 18px 40px}
.ribbon-timeline{position:relative;margin-top:18px;padding:70px 0 90px}
.ribbon-bottle{position:absolute;top:-6px;left:50%;width:150px;margin-left:-96px;z-index:2}
.ribbon-coupe{position:absolute;bottom:0;left:50%;width:62px;margin-left:-31px;z-index:2}
.ribbon-path{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.ribbon-path path{fill:none;stroke-linecap:round}
.ribbon-back{stroke:#b07c56;stroke-width:13}
.ribbon-front{stroke:#f7dfd9;stroke-width:9}
.ribbon-items{list-style:none;padding:0;position:relative;z-index:1}
.ribbon-item{position:relative;width:50%;min-height:118px;padding:10px 14px;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ribbon-item.side-r{margin-left:auto;padding-right:6px;padding-left:34px}
.ribbon-item.side-l{margin-right:auto;padding-left:6px;padding-right:34px}
.ribbon-icon{width:44px;height:44px;color:var(--gold);display:grid;place-items:center}
.ribbon-icon svg{width:38px;height:38px;stroke-width:1.3}
.ribbon-copy h3{font:400 24px/1.5 var(--script);color:var(--ink)}
.ribbon-copy time{display:block;font-size:12px;color:var(--muted);line-height:1.6}
.ribbon-copy p{font-size:10.5px;line-height:1.9;color:var(--muted);margin-top:2px}
.ribbon-arrow{position:absolute;top:50%;width:26px;height:1px;background:var(--gold-l)}
.side-r .ribbon-arrow{left:8px}.side-l .ribbon-arrow{right:8px}
.ribbon-arrow:after{content:'';position:absolute;top:-3px;width:6px;height:6px;border-top:1px solid var(--gold-l);border-left:1px solid var(--gold-l)}
.side-r .ribbon-arrow:after{left:0;transform:rotate(-45deg)}
.side-l .ribbon-arrow:after{right:0;transform:rotate(135deg)}

/* ---------- gallery ---------- */
.gallery-section{padding:36px 26px 30px}
.gallery-grid{display:grid;gap:18px;margin-top:20px}
.gallery-card{display:block;border:10px solid #fbf3f2;outline:1px solid var(--gold-l);padding:0;background:#fbf3f2;width:100%;box-shadow:0 10px 26px #7a4b4b26}
.gallery-card img{display:block;width:100%;max-height:560px;object-fit:cover}

/* ---------- gift ---------- */
.gift-section{padding:30px 22px 40px}
.gift-card{position:relative;padding:34px 22px 30px;background:#f7efed url('../img/olive/paper.svg');box-shadow:0 14px 36px #7a4b4b26,inset 0 0 0 1px #ffffff90;border-radius:2px}
.gift-card:before{content:'';position:absolute;inset:8px;border:1px solid #dcc0b1;pointer-events:none}
.gift-box{width:120px;display:block;margin:10px auto 6px}
.card-number{margin:20px auto 0;max-width:300px;display:flex;flex-direction:column;align-items:center;gap:4px}
.card-number span{font:600 19px/1.6 var(--fa);letter-spacing:.12em;color:#5a4a43;font-variant-numeric:tabular-nums}
.card-number small{font-size:11px;color:var(--muted)}
.copy-btn{margin-top:8px;border:1px solid var(--gold-l);background:#fbf3f2;border-radius:999px;padding:5px 18px;font-size:11px;color:var(--ink)}

/* ---------- guest media (existing feature) ---------- */
.guest-media-section{padding:40px 24px 30px}
.guest-media-paper{max-width:420px;margin:auto}
.guest-media-section .section-heading{margin-bottom:18px}
.guest-media-section .section-heading h2{font:400 36px/1.6 var(--script)}
.guest-media-section .section-heading p{font-size:12px;color:var(--muted);line-height:2.1}
.media-kicker{display:block;font-size:11px;color:var(--gold)}
.media-picker{border:1px dashed var(--gold-l);padding:14px;border-radius:8px;background:#fbf3f2a0}
.media-picker small,.media-privacy-note,.media-closed,.shared-media-empty{font-size:11px;line-height:2.1;color:var(--muted)}
.media-picker input[type=file]{font-size:11px;padding:6px;min-width:0;max-width:100%}
.media-picker input::file-selector-button{background:var(--blush);border:0;border-radius:999px;padding:7px 12px;font:inherit;color:var(--ink);margin-left:8px}
.media-trap{position:absolute!important;width:1px;height:1px;clip:rect(0,0,0,0);overflow:hidden}
.media-queue{list-style:none;padding:0;overflow-wrap:anywhere;font-size:12px}
.guest-media-form progress{width:100%;accent-color:var(--olive)}
.shared-moments{border-top:1px solid #dcc0b1;margin-top:26px;padding-top:20px}
.shared-moments h3{font:400 26px/1.6 var(--script);margin-bottom:14px}
.shared-media-grid{display:grid;gap:18px}
.shared-media-grid img,.shared-media-grid video{display:block;width:100%;max-height:460px;object-fit:contain;background:#efe0e1}
.shared-media-grid figcaption{padding:10px;font-size:12px;overflow-wrap:anywhere}
.shared-video-download{display:block}
.media-file-card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:160px;padding:18px;background:#efe0e1;text-decoration:none;font-size:13px;overflow-wrap:anywhere}
.media-pagination{display:flex;justify-content:center;gap:14px;font-size:12px;margin-top:18px}
.back-to-invitation{display:inline-block;padding:12px 20px;margin:22px auto;font-size:13px}

/* ---------- forms (shared) ---------- */
.wedding-form{text-align:right;max-width:400px;margin:0 auto;width:100%}
.wedding-form h3{font:400 30px/1.6 var(--script);text-align:center;margin-bottom:14px}
.wedding-form>label{display:grid;gap:6px;font-size:12px;margin-bottom:14px}
.wedding-form input:not([type=radio]):not([type=file]),.wedding-form textarea{width:100%;min-height:44px;padding:9px 12px;border:1px solid #d9c0b6;background:#fdf8f7;border-radius:3px;color:var(--ink);font-size:16px;line-height:1.8}
.wedding-form textarea{resize:vertical}
.wedding-form ::placeholder{color:#b9a59e}
.wedding-form fieldset{border:0;padding:0;margin:14px 0;min-width:0}
.wedding-form legend{font-size:12px;margin-bottom:6px}
.wedding-form .choice{display:flex;align-items:center;gap:10px;min-height:40px;font-size:13px;cursor:pointer}
.choice input{width:18px;height:18px;flex:0 0 auto;accent-color:var(--olive)}
.wedding-form button[type=submit]{display:block;width:100%;min-height:46px;margin-top:6px;border:0;border-radius:3px;background:var(--olive);color:#f7eee6;font-size:14px;letter-spacing:.02em}
.form-result{font-size:12px;text-align:center;margin-top:10px;overflow-wrap:anywhere}

/* ---------- RSVP olive panel ---------- */
.rsvp-section{padding:46px 0 0}
.rsvp-heading{padding:0 26px 10px}
.rsvp-mono{font:400 64px/1.2 var(--script);color:transparent;-webkit-text-stroke:1px var(--gold);opacity:.9}
.arch-band{display:block;width:100%;margin-bottom:-2px;position:relative;z-index:1}
.olive-panel{background:var(--olive) linear-gradient(180deg,var(--olive) 0,var(--olive-d) 100%);color:var(--olive-text);padding:16px 28px 46px;display:grid;gap:40px}
.olive-panel .wedding-form h3{color:#fbf1ea}
.olive-panel .wedding-form input:not([type=radio]):not([type=file]),.olive-panel .wedding-form textarea{background:#f4ebe9;border-color:transparent}
.olive-panel .choice input{accent-color:#e8cdbf}
.olive-panel .wedding-form button[type=submit]{background:transparent;border:1px solid #e8dccb;color:#fbf1ea}
.guestbook-wall{border-top:1px solid #ffffff2a;padding-top:24px}
.guestbook-wall header p{font-size:11px;opacity:.75}
.guestbook-wall h3{font:400 28px/1.6 var(--script)}
.guest-notes{margin:14px auto 0}
.guest-notes blockquote{margin:0;padding:18px 10px;font-size:14px;line-height:2.1;overflow-wrap:anywhere}
.guest-notes cite{display:block;font-style:normal;font-size:12px;opacity:.75;margin-top:8px}
.guestbook-empty{font-size:12px;opacity:.8;padding:14px 0}
.single-item-carousel>*[hidden]{display:none!important}
.single-item-carousel{display:block;touch-action:pan-y;outline-offset:5px}
.carousel-controls{display:flex;justify-content:center;align-items:center;gap:16px;margin-top:16px}
.carousel-controls button{width:40px;height:40px;border:1px solid var(--gold-l);border-radius:50%;background:transparent;color:inherit;font:24px/1 Arial,sans-serif}
.carousel-count{font-size:12px;opacity:.8}
.carousel-load-error{font-size:12px;margin-top:8px}
.carousel-current{animation:gentleFade .35s ease-out}
@keyframes gentleFade{from{opacity:.4}to{opacity:1}}

/* ---------- closing & footer ---------- */
.closing-section{padding:46px 28px 10px}
.closing-copy{font-size:14px;line-height:2.4;max-width:340px;margin:0 auto 26px}
.closing-photo{border:10px solid #fbf3f2;outline:1px solid var(--gold-l);box-shadow:0 12px 30px #7a4b4b26}
.closing-photo img{display:block;width:100%;max-height:640px;object-fit:cover}
.site-footer{padding:34px 20px 10px}
.footer-couple{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:12px;font:400 36px/1.5 var(--en-script);color:var(--ink)}
.footer-couple b{font:italic 18px Georgia,serif;color:var(--gold)}
.footer-flourish{width:180px;display:block;margin:4px auto 10px}
.footer-logo-link{display:block;width:50px;margin:10px auto 0}
.footer-logo-link img{display:block;width:50px;height:50px;object-fit:contain;filter:grayscale(1) sepia(.4);opacity:.7}
.footer-instagram{font:11px/2 Georgia,serif;letter-spacing:.12em;text-decoration:none;color:var(--muted)}

/* ---------- floating dock ---------- */
.rose-dock{position:fixed;z-index:120;left:50%;bottom:max(12px,env(safe-area-inset-bottom));width:min(456px,calc(100% - 20px));transform:translate(-50%,0);
  display:flex;justify-content:space-around;align-items:flex-end;padding:9px 6px 7px;border-radius:24px;
  background:linear-gradient(180deg,#d8cbc5a6,#c9b9b2b8);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);
  border:1px solid #ffffff6b;box-shadow:0 10px 30px #5b3b3b33,inset 0 1px 0 #ffffff70;transition:transform .7s cubic-bezier(.2,.8,.2,1),opacity .5s}
.gate-locked .rose-dock{transform:translate(-50%,140%);opacity:0}
.dock-item{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:4px;border:0;background:none;padding:0;color:#fff}
.dock-icon{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:#ffffff33;box-shadow:inset 0 0 0 1px #ffffff40;transition:background .25s,transform .25s}
.dock-icon svg{width:19px;height:19px;fill:none;stroke:#fff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.dock-label{font-size:9.5px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;color:#fff;text-shadow:0 1px 4px #4d2f2f80}
.dock-item:active .dock-icon{transform:scale(.92)}
.dock-item.is-on .dock-icon,.dock-item[aria-expanded=true] .dock-icon{background:#ffffff5c}
.dock-main{flex:0 0 74px;align-self:center}
.dock-main .dock-icon{width:64px;height:64px;margin-top:-30px;background:radial-gradient(circle at 35% 30%,#a8a690,#7f7d67);box-shadow:0 8px 20px #4d3a3a40,inset 0 0 0 2px #ffffff55}
.dock-main .dock-icon svg{width:26px;height:26px}
#musicToggle.is-playing .dock-icon svg{animation:notePulse 1.6s ease-in-out infinite}
@keyframes notePulse{50%{transform:scale(1.12)}}

/* ---------- bottom sheets ---------- */
.sheet-backdrop{position:fixed;inset:0;z-index:150;background:#3d2a2a59;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);opacity:0;transition:opacity .35s}
.sheet-backdrop.show{opacity:1}
.rose-sheet{position:fixed;z-index:160;left:50%;bottom:0;width:min(480px,100%);max-height:88vh;max-height:88svh;overflow:auto;overscroll-behavior:contain;
  transform:translate(-50%,105%);transition:transform .45s cubic-bezier(.2,.8,.2,1);
  background:linear-gradient(180deg,#fbf3f2,#f4e6e8);border-radius:26px 26px 0 0;padding:16px 24px calc(28px + env(safe-area-inset-bottom));box-shadow:0 -12px 40px #4d2f2f33}
.rose-sheet:before{content:'';position:absolute;top:0;left:12%;right:12%;height:3px;border-radius:0 0 4px 4px;background:linear-gradient(90deg,transparent,var(--gold-l),transparent)}
.rose-sheet.open{transform:translate(-50%,0)}
.sheet-handle{width:42px;height:4px;border-radius:4px;background:#d6bfb6;margin:0 auto 14px}
.sheet-close{position:absolute;top:10px;left:14px;width:36px;height:36px;border-radius:50%;border:0;background:#efe0e0;font:22px/1 Arial;color:var(--ink)}
.rose-sheet .caps-kicker{margin-bottom:16px}
.sheet-slot .wedding-form h3{display:none}
.sheet-slot:not(:empty)+.sheet-fallback{display:none}
.sheet-jump{margin-top:18px}
.sheet-address{font-style:normal;font-size:13px;line-height:2.1}
.gift-card.in-sheet{box-shadow:none;background:none;padding:6px 0 0}
.gift-card.in-sheet:before{display:none}
.map-preview{position:relative;border-radius:14px;overflow:hidden;margin:6px auto 0;box-shadow:0 6px 18px #7a4b4b26}
.map-preview iframe{display:block;width:100%;height:210px;border:0;background:#efe0e1}
.map-click-layer{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;text-decoration:none;background:linear-gradient(transparent 68%,#fbf3f2e6)}
.map-click-layer span{font-size:11px;padding:6px 10px}
.contact-list{display:grid;gap:10px;margin-top:6px}
.contact-link{display:flex;justify-content:space-between;align-items:center;padding:12px 18px;border-radius:14px;background:#fdf8f7;border:1px solid #e6d0c8;text-decoration:none;font-size:13px}
.contact-link b{font-weight:600}
.contact-link span{color:var(--muted)}
.sheet-open{overflow:hidden}

.toast{position:fixed;left:50%;bottom:calc(var(--dock-h) + 30px);transform:translate(-50%,20px);z-index:200;padding:8px 18px;border-radius:999px;background:#4b3f3ae6;color:#fff;font-size:12px;opacity:0;pointer-events:none;transition:.3s}
.toast.show{opacity:1;transform:translate(-50%,0)}

.lightbox{max-width:94vw;max-height:92vh;padding:8px;border:0;background:var(--paper)}
.lightbox:not([open]){display:none}
.lightbox::backdrop{background:#2e1f1fe6}
.lightbox img{display:block;max-width:85vw;max-height:80vh;object-fit:contain}
.lightbox button{position:absolute;top:10px;right:10px;width:44px;height:44px;border:0;border-radius:50%;background:#fbf3f2ed;font:28px Arial;color:var(--ink)}
.dialog-fallback[open]{position:fixed;inset:50% auto auto 50%;transform:translate(-50%,-50%);z-index:220;box-shadow:0 0 0 100vmax #2e1f1fe6}

/* ---------- reveal on scroll (content stays visible without JS) ---------- */
.reveal{opacity:1}
.motion-ready .reveal{opacity:0;transform:translateY(16px);transition:opacity .9s ease,transform .9s cubic-bezier(.2,.7,.2,1)}
.motion-ready .reveal.visible{opacity:1;transform:none}

@media(max-width:380px){
  .hero-arch{padding-left:52px;padding-right:52px}
  .hero-names{font-size:52px}
  .script-title{font-size:40px}
  .olive-shape{width:92%;padding-inline:18px}
  .ribbon-copy h3{font-size:21px}
  .dock-label{font-size:8.5px}
  .dock-icon{width:36px;height:36px}
}
@media(min-width:520px){body{padding:24px 0}}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*:before,*:after{animation:none!important;transition:none!important}
  .motion-ready .reveal{opacity:1;transform:none}
}
