: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:58px;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)}
.bigdate{display:flex;flex-direction:column;align-items:center;text-transform:uppercase;line-height:1.1;margin:0}
.bigdate .bd-n{font:400 clamp(60px,18vw,80px)/1 var(--caps);letter-spacing:.02em;color:var(--ink)}
.bigdate .bd-w,.bigdate .bd-m{font:clamp(16px,4.4vw,20px) var(--caps);letter-spacing:.34em;padding-left:.34em}
.bigdate .bd-w{margin-bottom:2px}
.bigdate .bd-y{margin-top:5px;font:13px var(--caps);letter-spacing:.3em;padding-left:.3em;color:var(--muted)}
.where{font-style:italic;color:var(--muted);margin:6px 0 16px}
.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 */
/* snapping is switched on by the script only while a guest's days are on the page (see snapMode) */
html.snap{scroll-snap-type:y mandatory}
.scene,.slide,#rsvp{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:24px 24px calc(120px + env(safe-area-inset-bottom,0px));position:relative}
.hero .welcome{margin:14px 0 0;max-width:420px;font-size:16px;line-height:1.5}
.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{--crown-h:calc(min(100vw,780px,86svh)*.4474);--tx:#fbf1d4;--tx2:#fbf1d4d0;--ln:#fbf1d455;position:relative;color:var(--tx)}
.day.pithi{--tx:#10301f;--tx2:#285a40;--ln:#0b613f55}
.crown{flex:none;position:relative;z-index:2;background:var(--lattice);background-size:var(--tile) var(--tile);--tile:clamp(30px,4.6vw,60px);}
.arch-wrap{position:relative;width:min(100%,780px,86svh);margin:0 auto;aspect-ratio:950/425;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.c .face{padding-top:16px;padding-bottom:calc(clamp(70px,12svh,130px) + 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{display:flex;flex-direction:column;align-items:center;margin:14px 0 0;text-transform:uppercase;line-height:1.15}
.when-date .dd{font:400 clamp(64px,20vw,88px)/1 var(--caps);letter-spacing:.02em}
.when-date .wk,.when-date .mo{font:clamp(17px,4.8vw,21px) var(--caps);letter-spacing:.34em;padding-left:.34em}
.when-date .wk{margin-bottom:4px}
.when-date .yr{margin-top:6px;font:14px var(--caps);letter-spacing:.3em;padding-left:.3em;color:var(--tx2)}
.title{font:400 clamp(54px,min(15vw,10svh),96px)/1 var(--script);margin:0}
.day:not(.pithi) .title{color:#f5dc96}
.day.pithi .title{color:#0a5236}
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.snap{scroll-snap-type:none}}

/* rsvp */
#rsvpform{text-align:left;margin-top:8px}
.rwrap{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fffdf7}
.rtable{width:100%;border-collapse:collapse;table-layout:fixed}
.rtable th,.rtable td{border-top:1px solid var(--line);border-left:1px solid var(--line);padding:0}
.rtable tr>*:first-child{border-left:0}
.rtable thead th{border-top:0;padding:12px 2px;background:#fbf6e8;font-weight:400;text-align:center;vertical-align:middle}
.rtable .gn{width:31%;text-align:left;padding:10px 12px;font:400 17px/1.25 var(--serif);word-break:break-word}
.rtable thead .gn{font:400 14px var(--caps);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.rtable .ev b{display:block;font:400 12.5px var(--caps);letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}
.rtable .ev span{display:block;margin-top:2px;font-size:13px;color:var(--muted)}
.rtable td{text-align:center}
.chk{display:flex;align-items:center;justify-content:center;min-height:56px;cursor:pointer}
.chk input{position:absolute;opacity:0;pointer-events:none}
.box{position:relative;width:28px;height:28px;border:1.5px solid var(--gold);border-radius:7px;background:#fff;transition:background .15s}
.chk:hover .box{background:#fbf3df}
.chk input:checked+.box{background:linear-gradient(135deg,#c49a3a,#a77a1f);border-color:#a77a1f}
.chk input:checked+.box::after{content:"";position:absolute;left:9px;top:4px;width:7px;height:13px;border:solid #fff;border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.chk input:focus-visible+.box{outline:2px solid var(--ink);outline-offset:2px}
.rhint{margin:8px 2px 0;font-size:14px;color:var(--muted);text-align:center}
#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}

/* programme timeline */
.day{--acc:#e8c874}.day.pithi{--acc:#0b6140}
.kick-sub{font:15px var(--caps);letter-spacing:.3em;text-transform:uppercase;text-align:center;color:var(--tx2);margin:2px 0 18px}
.tl{list-style:none;margin:0;padding:0 0 0 30px;position:relative}
.tl::before{content:"";position:absolute;left:7px;top:8px;bottom:8px;width:2px;background:linear-gradient(180deg,transparent,var(--acc) 12%,var(--acc) 88%,transparent)}
.tl li{position:relative;padding:0 0 12px}
.tl li:last-child{padding-bottom:0}
.tl li::before{content:"";position:absolute;left:-27px;top:6px;width:10px;height:10px;background:var(--acc);transform:rotate(45deg);box-shadow:0 0 0 3px #0000001f}
.tl .t{display:block;font:14px var(--caps);letter-spacing:.2em;text-transform:uppercase;color:var(--tx2)}
.tl .n{display:block;font:400 clamp(20px,5.6vw,24px)/1.25 var(--caps);letter-spacing:.03em}
.tl .d{display:block;margin-top:2px;font-size:14px;line-height:1.45;color:var(--tx2)}

/* Pithi programme sits on the deeper orange, so use the darkest emerald for contrast */
.day.pithi .slide.c{--tx:#052a1a;--tx2:#0a3d27;--acc:#064a30}
.day.pithi .tl li::before{box-shadow:0 0 0 2px #fff1bf}
.day.pithi .tl::before{width:2.5px;left:6.75px}
.day.pithi .tl .t{font-weight:700}
.day.pithi .tl .d{color:#08331f}

/* banking details */
.bank{margin-top:14px;padding:4px 0 4px 14px;border-left:3px solid var(--line)}
.bank h4{margin:0 0 6px;font:18px var(--caps);letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.brow{display:grid;grid-template-columns:1fr auto;gap:0 12px;align-items:center;padding:9px 0;border-top:1px solid var(--line)}
.brow:first-of-type{border-top:0}
.bl{grid-column:1;font:12px var(--caps);letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.bv{grid-column:1;font-size:17px;color:var(--ink);word-break:break-word;user-select:all}
.bv.ph{font-style:italic;color:var(--muted);opacity:.7;user-select:none}
.brow .copy{grid-column:2;grid-row:1 / span 2;min-width:78px;padding:8px 14px;border:1.5px solid var(--gold);border-radius:10px;background:#fff;color:var(--gold);font:13px var(--caps);letter-spacing:.12em;text-transform:uppercase;cursor:pointer}
.brow .copy:hover:not(:disabled){background:#fbf3df}
.brow .copy.ok{background:var(--gold);color:#fff}
.brow .copy:disabled{opacity:.4;cursor:default}

/* travel & stay sections */
.tsec{text-align:left;margin-top:26px}
.tsec:first-of-type{margin-top:18px}
.tsec h3{display:flex;align-items:center;gap:14px;margin:0 0 6px;font:400 22px var(--caps);letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.tsec h3::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line),transparent)}
.trow{padding:8px 0}
.trow b{display:block;font:400 18px var(--caps);letter-spacing:.06em}
.trow p{margin:2px 0 0;color:var(--muted)}

.hotels{list-style:none;margin:10px 0 0;padding:0}
.hotels li{padding:11px 0;border-top:1px solid var(--line)}
.hotels li:first-child{border-top:0}
.hotels a{display:inline-block;color:var(--ink);text-decoration:underline;text-decoration-color:var(--gold);text-underline-offset:4px;text-decoration-thickness:1.5px;font:400 19px/1.3 var(--caps);letter-spacing:.03em}
.hotels a:hover{color:var(--gold)}
.hotels .ar{color:var(--gold);font-size:.8em}
.hotels .area{display:block;margin-top:2px;font-size:14px;color:var(--muted)}

.areas{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.areas a{display:inline-flex;align-items:center;min-height:44px;padding:8px 16px;border:1.5px solid var(--gold);border-radius:999px;background:#fff;color:var(--ink);text-decoration:none;font:16px var(--caps);letter-spacing:.06em}
.areas a:hover{background:#fbf3df}
.areas a span{color:var(--gold);font-size:.85em;margin-left:5px}


.credit{margin:10px 0 0;font:14px var(--serif);color:var(--muted)}
.credit .heart{width:15px;height:15px;vertical-align:-2px;color:#b8434a;margin:0 2px}

.hero .welcome.loading{animation:pulse 1.4s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:.35}50%{opacity:.9}}
@media(prefers-reduced-motion:reduce){.hero .welcome.loading{animation:none;opacity:.7}}

#open:disabled{box-shadow:none;cursor:default;filter:saturate(.6);opacity:.75}
#open.wait{animation:pulse 1.4s ease-in-out infinite}
.gate-for{margin:-10px 0 18px;font:italic 17px var(--serif);color:var(--muted)}
@media(prefers-reduced-motion:reduce){#open.wait{animation:none}}

.done.note{color:var(--muted);font-style:normal}
.rtable.ro td{padding:14px 0;text-align:center}
.ro-yes{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#c49a3a,#a77a1f);color:#fff;font:600 17px/1 var(--serif)}
.ro-no{color:var(--muted);font-size:22px;opacity:.6}
.rnote{margin:12px 2px 0;font-size:15px;color:var(--muted);text-align:left}
.rnote b{font-weight:600;color:var(--ink)}
.rhint a{color:var(--gold)}

/* hidden surprises (see eggs.js) */
#fx{position:fixed;inset:0;z-index:35;pointer-events:none;overflow:hidden}
.fxp{position:absolute;will-change:transform,opacity;line-height:1}
.fxp .bubble{position:absolute;left:96px;top:-4px;background:#fbf1d4;color:#5a4310;border:1.5px solid #d6a840;border-radius:999px;padding:3px 14px;font:italic 600 16px var(--serif);box-shadow:0 2px 8px #0003;white-space:nowrap}
.corner.l{transform-origin:left bottom}.corner.r{transform-origin:right bottom}
.eggs{margin:8px 0 0;font:13px var(--serif);color:var(--muted);opacity:.85}
.countdown .today{margin:0;font:400 clamp(24px,7vw,32px) var(--script);color:var(--gold)}


/* the peacocks in the artwork glow: the picture itself never moves or changes size */
.corner{overflow:hidden}
.corner.show{animation:glow 2.6s ease-in-out both}
@keyframes glow{
  0%{filter:none}
  30%{filter:brightness(1.18) saturate(1.25) drop-shadow(0 0 12px #f2d27aaa)}
  60%{filter:brightness(1.24) saturate(1.3) drop-shadow(0 0 16px #f2d27add)}
  100%{filter:none}
}
.corner.show::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 38%,rgba(255,240,180,.85) 50%,transparent 62%);background-size:260% 100%;background-repeat:no-repeat;mix-blend-mode:soft-light;
  animation:sweep 2.2s ease-in-out .2s both}
@keyframes sweep{0%{background-position:130% 0}100%{background-position:-30% 0}}

/* Khush delivers the invitation on the opening screen */
#gate{overflow:hidden}

.khush-stage{position:relative;width:100%;height:clamp(150px,27svh,240px);margin:2px 0 6px}
.khush-stage.ready{cursor:pointer}
.k-sprite{position:absolute;left:50%;bottom:0;height:100%;aspect-ratio:296/388;background-repeat:no-repeat;background-size:600% 100%;mix-blend-mode:multiply;transform:translateX(-50%);opacity:0;transition:opacity .6s ease}
.khush-stage.show .k-sprite{opacity:1}
@media(prefers-reduced-motion:reduce){.k-sprite{transition:none}}
@media(max-height:760px){.gate-mark{width:68px}.gate-names{font-size:clamp(48px,14vw,70px)}.gate-sub{margin-bottom:14px}}

.k-sprite.instant{transition:none}

#open:disabled{font-size:13px;letter-spacing:.09em;white-space:nowrap;padding-left:22px;padding-right:22px}
