:root{
  --ivory:#f6f0e4; --paper:#fffaf0; --ink:#3b2f22; --muted:#7a6a55;
  --gold:#b88a2e; --gold-l:#e8c874; --line:#d9c79b;
  --script:'Italianno',cursive; --serif:'Lora',Georgia,serif; --caps:'Bellefair',serif;
}
*{box-sizing:border-box}
body{margin:0}
html{scroll-behavior:smooth}
#rsvp{min-height:var(--scene-h,100lvh);display:block}
body{margin:0;background:var(--ivory);color:var(--ink);font:17px/1.6 var(--serif);-webkit-font-smoothing:antialiased}
[hidden]{display:none!important}
.script{font-family:var(--script);font-weight:400;line-height:1.05}
img.divider{display:block;margin:14px auto;height:30px;width:auto;max-width:80%}
button,input,select,textarea{font:inherit}
a{color:inherit}

/* gate */
#gate{position:fixed;inset:0;z-index:10;display:grid;place-items:center;background:radial-gradient(circle at 50% 35%,#fffaf0,#efe5cf);transition:opacity .7s,visibility .7s;padding:24px}
#gate.out{opacity:0;visibility:hidden}
.gate-inner{text-align:center;max-width:420px}
.gate-mark{width:92px;margin-bottom:6px}
.gate-kicker{font:italic 14px var(--serif);color:var(--muted);margin:0}
.gate-names{font-size:clamp(56px,16vw,84px);margin:8px 0 0;color:var(--gold)}
.gate-names span{font-size:.6em}
.gate-sub{font-family:var(--caps);letter-spacing:.25em;text-transform:uppercase;margin:0 0 26px;color:var(--muted)}
#open,.btn,#codeform button,#rsvpform button.submit{
  background:linear-gradient(135deg,#d9b25a,#b88a2e 55%,#d9b25a);color:#fff;border:0;border-radius:999px;
  padding:12px 28px;font-family:var(--caps);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;box-shadow:0 4px 14px #b88a2e55}
#open:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

/* hero */
.hero{text-align:center;padding:56px 20px 36px;max-width:640px;margin:0 auto}
.mark{width:72px;margin:0 auto}
.kicker{font:italic 15px var(--serif);color:var(--muted);margin:10px auto 0;max-width:420px}
.names{font-size:clamp(56px,16vw,104px);margin:6px 0 0;color:var(--gold)}
.names span{font-size:.55em;color:var(--muted)}
.dates{font-family:var(--caps);font-size:clamp(16px,4.6vw,22px);letter-spacing:.16em;margin:0}
.where{font-style:italic;color:var(--muted);margin:2px 0 22px}
.countdown{display:flex;justify-content:center;gap:10px}
.countdown div{min-width:62px;padding:8px 6px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}
.countdown b{display:block;font:400 28px var(--caps);font-variant-numeric:tabular-nums}
.countdown small{font:11px var(--caps);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}

.welcome{text-align:center;font-style:italic;color:var(--muted);margin:0 20px 10px}
.welcome b{font-style:normal;color:var(--ink)}

/* panels */
.panel{width:calc(100% - 28px);max-width:620px;margin:28px auto;padding:30px 22px;background:var(--paper);border:1px solid var(--line);border-radius:18px;text-align:center;position:relative}
@media(min-width:660px){.panel{padding:36px 40px}}
.panel h2{font-size:48px;margin:0;color:var(--gold)}
.lead{margin:0 0 12px}
.inline{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
input[type=text],input:not([type]),textarea,select{width:100%;padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink)}
.inline input{width:auto;flex:1 1 180px;max-width:260px;text-transform:uppercase;letter-spacing:.12em;text-align:center}
.err{color:#9b2c2c;margin:10px 0 0}
dl{margin:0;text-align:left}
dt{font:19px var(--caps);letter-spacing:.1em;text-transform:uppercase;color:var(--gold);margin-top:16px}
dd{margin:2px 0 0}
details{border-top:1px solid var(--line);text-align:left;padding:12px 0}
details:last-child{border-bottom:1px solid var(--line)}
summary{cursor:pointer;font-family:var(--caps);font-size:19px;letter-spacing:.06em}
details p{margin:8px 0 0;color:var(--muted)}
.contacts{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:14px}
.contacts .who{border:1px solid var(--line);border-radius:14px;padding:14px 18px;min-width:200px}
.contacts .who b{display:block;font:22px var(--caps);letter-spacing:.1em}
.contacts a{display:inline-block;margin:6px 4px 0;padding:6px 14px;border:1px solid var(--gold);border-radius:999px;text-decoration:none;font:14px var(--caps);letter-spacing:.12em;text-transform:uppercase}

/* scroll scenes */
html{scroll-snap-type:y mandatory}
.scene,.slide,#rsvp,.panel,footer{scroll-snap-align:start}
.scene,.slide{scroll-snap-stop:always}
#dots{position:fixed;right:max(8px,env(safe-area-inset-right));top:50%;transform:translateY(-50%);z-index:30;display:flex;flex-direction:column;gap:2px}
#dots a{display:block;width:26px;height:26px;position:relative}
#dots a::before{content:"";position:absolute;left:50%;top:50%;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:#d6b25c;box-shadow:0 0 0 1.5px #fffa,0 1px 4px #0005;transition:transform .3s,background .3s}
#dots a.on::before{transform:scale(1.7);background:#fff;box-shadow:0 0 0 1.5px #d6b25c,0 1px 4px #0005}
.hero.scene{min-height:var(--scene-h,100lvh);display:flex;flex-direction:column;justify-content:center;align-items:center;max-width:none;padding:40px 24px calc(110px + env(safe-area-inset-bottom,0px));position:relative}
.hero .welcome{margin:22px 0 0;max-width:420px}
.cue{position:absolute;bottom:calc(96px + env(safe-area-inset-bottom,0px));left:50%;width:30px;height:46px;margin-left:-15px;border:1.5px solid var(--gold);border-radius:15px;opacity:.8}
.cue span{position:absolute;left:50%;top:9px;width:4px;height:9px;margin-left:-2px;border-radius:2px;background:var(--gold);animation:cue 1.8s ease-in-out infinite}
@keyframes cue{0%{transform:translateY(0);opacity:1}70%{transform:translateY(14px);opacity:0}100%{opacity:0}}

.events{margin-top:0}
.day{--tx:#fbf1d4;--tx2:#fbf1d4d0;--ln:#fbf1d455;position:relative;color:var(--tx)}
.day.pithi{--tx:#3a1408;--tx2:#5a2a16;--ln:#5c140855;--frame:linear-gradient(90deg,#5c1408,#b8421f,#5c1408)}
.crown{flex:none;position:relative;z-index:2;background:var(--lattice);background-size:var(--tile) var(--tile);--tile:clamp(30px,4.6vw,60px);border-bottom:8px solid transparent;border-image:var(--frame,linear-gradient(90deg,#b98a2e,#f2d27a,#b98a2e)) 1;box-shadow:0 8px 18px #0004}
.arch-wrap{position:relative;width:min(100%,780px,86svh);margin:0 auto;aspect-ratio:950/432;container-type:inline-size}
.arch-wrap svg.arch{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.day.pithi .arch-mark{filter:none}
.arch-mark{position:absolute;left:50%;top:14cqw;height:27cqw;transform:translateX(-50%);filter:drop-shadow(0 2px 3px #0005)}
.arch-date{position:absolute;left:0;right:0;top:16.5cqw;text-align:center;color:var(--tx)}
.arch-date .wk{font:3.8cqw var(--caps);letter-spacing:.3em;text-transform:uppercase;margin:0;padding-left:.3em}
.arch-date .dt{display:flex;flex-direction:column;align-items:center;margin-top:.5cqw}
.arch-date .dd{font:400 11.5cqw/1 var(--caps);order:1}
.arch-date .mo{order:2;margin-top:1.4cqw;font:3.5cqw var(--caps);letter-spacing:.22em;text-transform:uppercase}
.slide{position:relative;min-height:var(--scene-h,100lvh);display:flex;flex-direction:column;overflow:hidden}
.face{flex:1;display:flex;align-items:center;justify-content:center;padding:28px 54px 28px 40px;position:relative;z-index:1}
.slide.b .face{padding-bottom:calc(clamp(120px,22svh,240px) + env(safe-area-inset-bottom,0px))}
.head,.details{width:100%;max-width:560px}
.head{text-align:center}
.invite{font:italic clamp(16px,4.4vw,19px)/1.6 var(--serif);color:var(--tx2);margin:0 auto 14px;max-width:440px}
.of{font:italic 18px var(--serif);color:var(--tx2);margin:6px 0 0}
.when-date span{display:block}
.when-date span+span{margin-top:6px}
.when-date{font:clamp(17px,4.8vw,22px) var(--caps);letter-spacing:.2em;text-transform:uppercase;margin:16px 0 0}
.title{font:400 clamp(54px,min(15vw,10svh),96px)/1 var(--script);margin:0}
.day:not(.pithi) .title{color:#f5dc96}
.day.pithi .title{color:#6b1a0c}
img.rule{display:block;height:26px;margin:18px auto 0}
.details{margin:0}
.kick{font:clamp(22px,6vw,28px) var(--script);margin:0 0 6px;text-align:center;color:var(--tx)}
.kick{font-family:var(--script);font-size:clamp(34px,9vw,44px);line-height:1.1}
.row{display:grid;grid-template-columns:70px 1fr;gap:4px 14px;padding:18px 0;border-top:1px solid var(--ln);text-align:left}
.row h3{margin:4px 0 0;font:14px var(--caps);letter-spacing:.24em;text-transform:uppercase;color:var(--tx2)}
.row b{display:block;font:400 clamp(20px,5.6vw,25px)/1.2 var(--caps);letter-spacing:.04em}
.row span{display:block;color:var(--tx2);font-size:15px;line-height:1.45}
details.more{border-top:1px solid var(--ln);padding:10px 0;margin:0;text-align:left}
details.more summary{cursor:pointer;font:14px var(--caps);letter-spacing:.24em;text-transform:uppercase;color:var(--tx2);list-style:none}
details.more summary::after{content:" +";}
details.more[open] summary::after{content:" \2212";}
details.more p{color:var(--tx2);font-size:15px;margin:8px 0 0}
.acts{justify-content:center;display:flex;flex-wrap:nowrap;gap:8px;padding-top:20px;border-top:1px solid var(--ln)}
.acts a,.acts button{background:#ffffff22;color:inherit;border:1px solid currentColor;border-radius:999px;padding:8px 14px;font:13px var(--caps);letter-spacing:.1em;white-space:nowrap;text-transform:uppercase;text-decoration:none;cursor:pointer}
.acts a:hover,.acts button:hover{background:#ffffff44}
.day.pithi .acts a,.day.pithi .acts button{background:#ffffff55}
.corner{position:absolute;bottom:0;height:clamp(150px,26vw,330px);aspect-ratio:350/482;background-repeat:no-repeat;background-size:auto 100%;pointer-events:none;
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 34%),linear-gradient(var(--dir),#000 45%,transparent 100%);-webkit-mask-composite:source-in;
  mask-image:linear-gradient(to bottom,transparent 0,#000 34%),linear-gradient(var(--dir),#000 45%,transparent 100%);mask-composite:intersect}
.corner.l{left:0;--dir:to right;background-position:left bottom}
.corner.r{right:0;--dir:to left;background-position:right bottom}
@media(max-height:700px){.row{padding:12px 0}.hero .welcome{margin-top:12px}}
.reveal{opacity:0;transform:translateY(22px);transition:opacity .9s cubic-bezier(.2,.7,.2,1),transform .9s cubic-bezier(.2,.7,.2,1)}
.reveal.d2{transition-delay:.18s}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.cue span{animation:none}html{scroll-snap-type:none}}

/* rsvp */
#rsvpform{text-align:left;margin-top:8px}
.person{border-top:1px solid var(--line);padding:14px 0}
.person h3{font:22px var(--caps);letter-spacing:.1em;margin:0 0 8px}
.choice{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0;flex-wrap:wrap}
.choice .lbl{font-size:15px}
.seg{display:inline-flex;border:1px solid var(--gold);border-radius:999px;overflow:hidden}
.seg input{position:absolute;opacity:0;pointer-events:none}
.seg label{padding:7px 18px;cursor:pointer;font:14px var(--caps);letter-spacing:.12em;text-transform:uppercase;color:var(--gold)}
.seg input:checked+label{background:var(--gold);color:#fff}
.seg input:focus-visible+label{outline:2px solid var(--ink);outline-offset:-3px}
#rsvpform label.msg{display:block;margin:14px 0 6px;color:var(--muted);font-size:15px}
#rsvpform .submit{display:block;margin:18px auto 0}
.done{margin-top:16px;font-style:italic;color:#4a6b34}
footer{text-align:center;padding:30px 20px 60px}
footer .script{font-size:34px;color:var(--gold);margin:0}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}#gate{transition:none}}

.title .sep,.kick .sep{font-size:.5em;vertical-align:.3em;opacity:.85;padding:0 .08em}
.kick .kd{display:block;margin-top:6px;font:17px var(--caps);letter-spacing:.24em;text-transform:uppercase;color:var(--tx2)}
.contacts .num{display:block;color:var(--muted);user-select:all}
