:root{--red:#b3202f;--red-deep:#7a1420;--green:#1d6b45;--green-deep:#0f3d28;--gold:#f2c94c;--cream:#fff8ec;--ink:#2b1d14;--muted:#7a6656;--line:#ead9c2;--card:#fffdf8;--bg:#0f3d28;--error:#a3171f;--ok:#1d6b45}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;background:radial-gradient(ellipse at top,#1d6b45 0%,#0f3d28 55%,#0a2a1c 100%) fixed;color:var(--ink);font:16px/1.5 ui-rounded,"SF Pro Rounded","Nunito",system-ui,-apple-system,"Segoe UI",sans-serif}
a{color:var(--red)}
.snow{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.flake{position:absolute;top:-2rem;color:#fff;opacity:.8;animation:fall linear infinite;user-select:none}
@keyframes fall{to{transform:translateY(110vh) rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.flake{display:none}}
.masthead,main,footer{position:relative;z-index:1}
.masthead{text-align:center;padding:2.2rem 16px 1rem;color:var(--cream)}
.crest{display:inline-block;font-size:3rem;text-decoration:none;animation:bob 3s ease-in-out infinite}
@keyframes bob{50%{transform:translateY(-6px) rotate(-6deg)}}
.masthead h1{margin:.2rem 0 0;font:700 clamp(1.9rem,6vw,3.2rem)/1.1 Georgia,"Times New Roman",serif;letter-spacing:.01em;text-shadow:0 3px 0 var(--red-deep),0 6px 18px rgba(0,0,0,.35)}
.masthead h1 a{color:var(--gold);text-decoration:none}
.tag{margin:.5rem auto 0;max-width:34rem;color:#e7f2ea;font-style:italic}
main{max-width:44rem;margin:0 auto;padding:0 16px 2rem}
.card{background:var(--card);border-radius:18px;padding:1.4rem;margin:1rem 0;box-shadow:0 10px 30px rgba(0,0,0,.25);border-top:6px solid var(--red);background-image:repeating-linear-gradient(-45deg,transparent 0 10px,rgba(179,32,47,.035) 10px 20px)}
.card h2{margin:0 0 .6rem;font:700 1.45rem/1.2 Georgia,serif;color:var(--red-deep)}
.center{text-align:center}
.big{font-size:1.3rem;font-weight:700;margin:0 0 .5rem;color:var(--green)}
.small{font-size:.875rem;color:var(--muted)}
footer p.small,main>p.small{color:#cfe3d6}main>p.small a{color:var(--gold)}
footer{text-align:center;color:#a9c7b5;font-size:.8rem;padding:0 16px 2rem}
.note{background:#fff3d1;border-left:4px solid var(--gold);padding:.6rem .8rem;border-radius:8px}
.facts{display:flex;flex-wrap:wrap;gap:.6rem;margin:.6rem 0;justify-content:inherit}
.center .facts{justify-content:center}
.facts div{background:var(--green);color:var(--cream);border-radius:999px;padding:.3rem .9rem}
.facts dt{display:inline;font-size:.8rem;opacity:.8;margin-right:.35rem}.facts dd{display:inline;margin:0;font-weight:700}
.form label{display:block;margin:0 0 1rem;font-weight:700}
.hint{display:block;font-weight:400;font-size:.85rem;color:var(--muted);font-style:italic}
input,textarea{display:block;width:100%;margin-top:.35rem;padding:.7rem .8rem;border:2px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);font:inherit}
input:focus,textarea:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(29,107,69,.2)}
fieldset.choice{border:0;padding:0;margin:0 0 1rem}fieldset.choice legend{font-weight:700;padding:0}
.choice{display:flex;flex-wrap:wrap;gap:.5rem}
.pill{display:inline-block!important;margin:.4rem .4rem 0 0!important}
.pill input{position:absolute;opacity:0;width:1px;height:1px}
.pill span{display:inline-block;padding:.5rem .9rem;border:2px solid var(--line);border-radius:999px;background:#fff;font-weight:600;cursor:pointer}
.pill input:checked+span{background:var(--red);border-color:var(--red);color:#fff}
.pill input:focus-visible+span{outline:3px solid var(--gold)}
.check{display:flex!important;align-items:center;gap:.5rem}.check input{width:auto;margin:0}
.trap{position:absolute!important;left:-9999px}
button,.ghost{font:inherit;cursor:pointer;border-radius:999px;border:0;text-decoration:none;display:inline-block}
.primary{background:var(--red);color:#fff;font-weight:800;padding:.8rem 1.6rem;font-size:1.05rem;box-shadow:0 4px 0 var(--red-deep)}
.primary:hover{filter:brightness(1.08)}.primary:active{transform:translateY(2px);box-shadow:0 2px 0 var(--red-deep)}
.primary:disabled{opacity:.5;cursor:not-allowed}
.huge{font-size:1.4rem;padding:1rem 2.4rem;letter-spacing:.05em}
.ghost{background:transparent;border:2px solid var(--green);color:var(--green);padding:.45rem 1rem;font-weight:700}
.danger{background:#fbe3e4;color:var(--error);padding:.35rem .7rem;font-weight:800}
.sm{font-size:.85rem;padding:.3rem .75rem}
.error{background:#fbe3e4;color:var(--error);padding:.6rem .8rem;border-radius:10px}.error p{margin:.2rem 0}
.ok{background:#e1f3e8;color:var(--ok);padding:.6rem .8rem;border-radius:10px}
.copyrow{display:flex;gap:.5rem;align-items:center;margin-top:.6rem}.copyrow input{margin:0;font-size:.85rem}
.narrow{max-width:24rem;margin-left:auto;margin-right:auto}
.kicker{font-size:1.1rem;font-weight:700;color:var(--green)}
.gift{font-size:6rem;background:none;padding:.5rem 1rem;line-height:1;animation:wiggle 1.4s ease-in-out infinite;color:inherit}
.gift span{display:block;font-size:.9rem;color:var(--muted);font-weight:700}
@keyframes wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-8deg)}40%{transform:rotate(8deg)}60%{transform:rotate(-4deg)}}
.gift.pop{animation:pop .5s ease-in forwards}
@keyframes pop{to{transform:scale(1.8);opacity:0}}
.match h2.giftee{font-size:clamp(2rem,8vw,3.2rem);color:var(--red);margin:.2rem 0 1rem;animation:land .6s cubic-bezier(.2,1.6,.4,1)}
@keyframes land{from{transform:scale(.3);opacity:0}}
.match h3{margin:1rem 0 .3rem;font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.wish{font-size:1.1rem;background:#fff;border:2px dashed var(--line);border-radius:12px;padding:.8rem;text-align:left;margin:0}
.wish.avoid{border-color:#f0b6ba}
.wheel-wrap{position:relative;width:min(100%,420px);margin:1rem auto}
#wheel{width:100%;height:auto;display:block;border-radius:50%;box-shadow:0 0 0 8px var(--gold),0 0 0 14px var(--red-deep),0 12px 30px rgba(0,0,0,.3)}
.pointer{position:absolute;top:-1.1rem;left:50%;transform:translateX(-50%);font-size:2.2rem;color:var(--red);z-index:2;text-shadow:0 2px 0 #fff}
.status{min-height:3em;font-weight:700;color:var(--green)}
.count{background:var(--green);color:#fff;border-radius:999px;padding:0 .6rem;font-size:1rem;vertical-align:middle}
.table{overflow-x:auto;margin:0 -.4rem}
table{width:100%;border-collapse:collapse;font-size:.92rem}
th,td{text-align:left;padding:.55rem .4rem;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
td.links{white-space:nowrap}
td form{margin:0}
.confetti{position:fixed;top:-1rem;z-index:5;pointer-events:none;font-size:1.4rem;animation:fall 2.6s ease-in forwards}
@media (max-width:520px){.card{padding:1.1rem}th:nth-child(3),td:nth-child(3){display:none}}
[hidden]{display:none!important}
.facts:empty{display:none}
.names{display:grid;grid-template-columns:1fr 1fr;gap:0 .8rem}
@media (max-width:420px){.names{grid-template-columns:1fr}}
td select{font:inherit;font-size:.85rem;padding:.25rem .4rem;border:2px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
