:root{
  --paper:#f0efe7;
  --paper-2:#e8e6da;
  --ink:#2f342b;
  --sage:#626f5b;
  --sage-deep:#4f5a48;
  --brown:#6b5c49;
  --tan:#a8977d;
  --tan-deep:#8a7860;
  --gold:#a68d5b;
  --gold-soft:#b7a273;
  --line:rgba(107,92,73,.22);
  --err:#a5563f;
  --serif:"Fraunces","Hoefler Text","Baskerville",Palatino,Georgia,serif;
  --script:"Pinyon Script","Snell Roundhand",cursive;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0}
html{scroll-behavior:smooth}
body{
  background-color:var(--paper);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
  background-size:220px 220px;
  background-blend-mode:multiply;
  color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;line-height:1.7;
}
a{color:inherit}
.wrap{max-width:600px;margin:0 auto;padding:0 34px}
.eyebrow{font-size:.68rem;letter-spacing:.34em;text-transform:uppercase;color:var(--tan-deep);font-weight:600}
.btn{font-family:var(--sans);font-size:.74rem;letter-spacing:.24em;text-transform:uppercase;font-weight:600;color:var(--paper);background:var(--sage);border:1px solid var(--sage);padding:14px 30px;cursor:pointer;border-radius:2px;transition:background .3s ease,transform .2s ease}
.btn:hover{background:var(--sage-deep)}
.btn:active{transform:translateY(1px)}
.btn:focus-visible,input:focus-visible,button:focus-visible{outline:2px solid var(--tan-deep);outline-offset:3px}

.orn{display:flex;align-items:center;justify-content:center;gap:13px;color:var(--gold)}
.orn::before,.orn::after{content:"";height:1px;width:42px;background:linear-gradient(90deg,transparent,currentColor)}
.orn::after{background:linear-gradient(90deg,currentColor,transparent)}
.orn i{width:5px;height:5px;background:currentColor;transform:rotate(45deg);flex:0 0 auto}

.sheet{position:relative}
#frame{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;color:var(--gold);overflow:visible}

.hero{padding:104px 0 64px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:22px}
.crest{filter:drop-shadow(0 1.5px 1px rgba(70,54,36,.5)) drop-shadow(0 -1px .6px rgba(255,255,255,.9));margin-bottom:2px}
.crest .art{width:clamp(160px,46vw,250px);aspect-ratio:447/559;background:var(--paper);-webkit-mask:url(logo.png) center/contain no-repeat;mask:url(logo.png) center/contain no-repeat}
.names{font-family:var(--serif);font-weight:500;font-size:clamp(2.8rem,12vw,4.8rem);line-height:1;letter-spacing:-.01em;text-wrap:balance}
.amp{font-family:var(--script);font-weight:400;color:var(--gold);font-size:1.2em;line-height:0;margin:0 .04em;vertical-align:-.07em}
.bigdate{font-family:var(--serif);font-size:clamp(1.5rem,5vw,2rem);letter-spacing:.14em;color:var(--brown)}
.meta{display:flex;flex-direction:column;align-items:center;gap:7px}
.meta div{font-size:.7rem;letter-spacing:.28em;text-transform:uppercase;color:var(--tan-deep)}

.section{padding:58px 0}
.section-head{text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px;margin-bottom:40px}
.section-head h2{font-family:var(--serif);font-weight:500;font-size:clamp(1.7rem,5.5vw,2.2rem)}

.events{display:flex;flex-direction:column}
.event{display:flex;flex-direction:column;align-items:center;gap:11px;text-align:center;padding:36px 0}
.event + .event{border-top:1px solid var(--line)}
.event .time{font-size:.72rem;letter-spacing:.26em;text-transform:uppercase;color:var(--tan-deep);font-weight:600}
.event h3{font-family:var(--serif);font-weight:500;font-size:clamp(1.5rem,5vw,2rem)}
.event .venue{font-size:.95rem;color:var(--brown)}
.maplink{margin-top:4px;font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;font-weight:600;color:var(--sage);text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:3px;transition:border-color .3s ease,color .3s ease}
.maplink:hover{color:var(--sage-deep);border-color:var(--sage)}
.qr{margin-top:14px;display:flex;flex-direction:column;align-items:center;gap:7px}
.qr img{width:112px;height:112px;padding:9px;border:1px solid var(--line);border-radius:8px;background:var(--paper);box-shadow:0 2px 6px rgba(47,52,43,.06)}
.qr-cap{font-size:.6rem;letter-spacing:.22em;text-transform:uppercase;color:var(--tan-deep)}

.band{background:var(--sage);color:var(--paper);text-align:center;padding:64px 26px;margin:20px 26px;border-radius:3px}
.band .orn{color:rgba(240,239,231,.72);margin-bottom:16px}
.band p{font-family:var(--serif);font-style:italic;font-size:clamp(1.35rem,4.4vw,1.75rem);line-height:1.45;text-wrap:balance;max-width:22ch;margin:0 auto}

.plates{display:flex;flex-wrap:wrap;justify-content:center;gap:22px 26px}
.plate{display:flex;flex-direction:column;align-items:center;gap:11px}
.plate .dot{width:82px;height:82px;border-radius:50%;background:var(--dot);box-shadow:inset 0 6px 11px rgba(0,0,0,.42),inset 0 -4px 8px rgba(255,255,255,.3),inset 0 0 0 1px rgba(0,0,0,.06),0 7px 14px rgba(47,52,43,.16)}
.plate .pn{font-family:var(--serif);font-size:1rem;color:var(--ink)}
.dc-note{text-align:center;font-size:.9rem;color:var(--brown);margin-top:32px;font-family:var(--serif);font-style:italic}

form{display:flex;flex-direction:column;gap:24px;max-width:400px;margin:0 auto}
.field{display:flex;flex-direction:column;gap:8px}
.field label{font-size:.68rem;letter-spacing:.22em;text-transform:uppercase;color:var(--tan-deep);font-weight:600}
.field input{font-family:var(--serif);font-size:1.1rem;background:transparent;color:var(--ink);border:0;border-bottom:1px solid var(--line);padding:9px 2px;outline:none;transition:border-color .3s ease}
.field input:focus{border-color:var(--sage)}
.attend{display:flex;gap:10px}
.attend .opt{flex:1;text-align:center;cursor:pointer;border:1px solid var(--line);border-radius:2px;padding:14px 8px;font-size:.82rem;color:var(--brown);transition:all .25s ease;background:transparent}
.attend .opt.sel{background:var(--sage);color:var(--paper);border-color:var(--sage)}
form .btn{align-self:center;margin-top:6px}

.thanks{text-align:center;display:none;flex-direction:column;align-items:center;gap:16px;max-width:30ch;margin:0 auto}
.thanks.show{display:flex}
.thanks .mark{font-family:var(--script);font-size:3rem;color:var(--gold);line-height:.5}
.thanks h3{font-family:var(--serif);font-weight:500;font-size:1.7rem}
.thanks p{color:var(--brown)}

.private{max-width:500px;margin:0 auto;border:1px solid var(--line);border-radius:4px;padding:36px 28px;background:linear-gradient(180deg,rgba(232,230,218,.55),rgba(232,230,218,.15))}
.lock{text-align:center;display:flex;flex-direction:column;align-items:center;gap:18px}
.lock.hide{display:none}
.lock h3{font-family:var(--serif);font-weight:500;font-size:1.5rem}
.lock p{font-size:.92rem;color:var(--brown);max-width:30ch}
.code-row{display:flex;flex-direction:column;gap:12px;width:100%;max-width:280px;align-items:center}
.code-input{font-family:var(--serif);font-size:1.1rem;text-align:center;letter-spacing:.06em;background:transparent;border:0;border-bottom:1px solid var(--line);padding:10px 6px;width:100%;color:var(--ink);outline:none;transition:border-color .3s ease}
.code-input:focus{border-color:var(--sage)}
.code-input::placeholder{color:var(--tan)}
.gate-err{font-size:.82rem;color:var(--err);min-height:1.1em;opacity:0;transition:opacity .3s}
.gate-err.show{opacity:1}
.shake{animation:shake .4s}
@keyframes shake{10%,90%{transform:translateX(-2px)}30%,70%{transform:translateX(4px)}50%{transform:translateX(-6px)}}

.unlocked{display:none}
.unlocked.show{display:block}
.gl-head{font-size:.68rem;letter-spacing:.22em;text-transform:uppercase;color:var(--tan-deep);font-weight:600;text-align:center;margin-bottom:18px}
.chips{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.chip{font-size:.86rem;color:var(--brown);background:var(--paper);border:1px solid var(--line);border-radius:999px;padding:7px 15px}
.gl-empty{text-align:center;color:var(--tan-deep);font-size:.9rem}

footer{text-align:center;padding:56px 0 60px;display:flex;flex-direction:column;align-items:center;gap:16px}
footer .fmark{font-family:var(--serif);font-size:1.15rem;letter-spacing:.05em;color:var(--sage)}
footer .fdate{font-size:.68rem;letter-spacing:.28em;text-transform:uppercase;color:var(--tan-deep)}

.reveal{opacity:0;transform:translateY(32px) scale(.985);transition:opacity 1.1s cubic-bezier(.16,.72,.24,1),transform 1.1s cubic-bezier(.16,.72,.24,1);will-change:opacity,transform}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}}

.switcher{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:70;display:none;background:rgba(47,52,43,.92);color:#e9e7db;border-radius:999px;padding:7px 8px 7px 16px;align-items:center;gap:10px;font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;box-shadow:0 8px 30px rgba(47,52,43,.28);backdrop-filter:blur(6px);max-width:calc(100vw - 40px)}
.switcher.show{display:flex}
.switcher .lbl{opacity:.6;white-space:nowrap}
.switcher .segs{display:flex;gap:4px}
.switcher button{border:0;cursor:pointer;background:transparent;color:#cfcdbf;padding:6px 11px;border-radius:999px;font:inherit;letter-spacing:.14em;transition:all .2s}
.switcher button.on{background:var(--tan);color:#2f342b;font-weight:700}
