:root{
  --green:#14532d;--green-2:#1c6b3b;--red:#b3122f;--red-2:#8f0e25;--cream:#fff8ec;--cream-2:#f6ead2;
  --gold:#d9a521;--gold-2:#f3cf6a;--ink:#2a2118;--muted:#6a5d4d;--err:#a30d23;--ok:#14663a;
  --display:'Mountains of Christmas','Berkshire Swash',Georgia,serif;--body:'Nunito',system-ui,-apple-system,'Segoe UI',sans-serif;
  --radius:18px;--shadow:0 10px 30px rgba(0,0,0,.28),0 2px 6px rgba(0,0,0,.18);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;font-family:var(--body);font-size:1rem;line-height:1.5;color:var(--ink);
  background:radial-gradient(1200px 600px at 50% -10%,#1f7a45 0%,transparent 60%),linear-gradient(180deg,var(--green) 0%,#0c3a20 100%);background-attachment:fixed}
#snow,#confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:50}
#snow{z-index:0}
.wrap{position:relative;z-index:1;max-width:640px;margin:0 auto;padding:0 16px 32px}
.hero{text-align:center;color:var(--cream);padding:32px 8px 20px}
.hero h1{font-family:var(--display);font-size:clamp(2.4rem,11vw,3.8rem);line-height:1.05;margin:0 0 8px;text-shadow:0 3px 0 rgba(0,0,0,.25);color:#fff}
.hero p{margin:0;font-size:1.1rem;color:var(--gold-2)}
.card{position:relative;background:var(--cream);border-radius:var(--radius);box-shadow:var(--shadow);padding:28px 18px 20px;margin-bottom:18px;overflow:hidden}
.card::before{content:"";position:absolute;top:0;left:0;right:0;height:10px;
  background:repeating-linear-gradient(-45deg,var(--red) 0 14px,#fff 14px 28px)}
h2{font-family:var(--display);color:var(--red);font-size:1.7rem;margin:0 0 8px;line-height:1.15}
h3{font-family:var(--display);color:var(--green);font-size:1.3rem;margin:18px 0 6px}
.field{margin:0 0 14px}
label,.lbl{display:block;font-weight:800;margin-bottom:4px;color:var(--green)}
.hint{font-size:.9rem;color:var(--muted);margin:2px 0 6px}
input[type=text],input[type=email],input[type=date],textarea,select{width:100%;font:inherit;color:var(--ink);background:#fff;
  border:2px solid #d8c9a8;border-radius:12px;padding:11px 12px;min-height:46px}
textarea{resize:vertical;min-height:80px}
input:focus,textarea:focus,select:focus,summary:focus-visible,button:focus-visible,a:focus-visible,.gift:focus-visible{outline:3px solid var(--gold);outline-offset:2px;border-color:var(--gold)}
.invalid{border-color:var(--err)!important;background:#fff1f2}
.prow{display:grid;grid-template-columns:1fr 44px;gap:8px;align-items:start;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #e0d2b2}
.prow .ins{display:grid;gap:8px}
@media(min-width:560px){.prow .ins{grid-template-columns:1fr 1.3fr}}
.btn{font:inherit;font-weight:800;border:0;border-radius:999px;padding:12px 22px;min-height:46px;cursor:pointer;transition:transform .12s,box-shadow .12s,filter .12s}
.btn:hover:not(:disabled){transform:translateY(-1px)}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-primary{width:100%;font-size:1.15rem;color:#fff;background:linear-gradient(180deg,#d01a3a,var(--red-2));box-shadow:0 4px 0 #5f0919,0 8px 16px rgba(0,0,0,.25)}
.btn-ghost{background:#fff;color:var(--green);border:2px solid var(--green)}
.btn-gold{background:var(--gold);color:#3a2a00}
.x{width:44px;height:46px;border:2px solid #d8c9a8;background:#fff;color:var(--red);font-size:1.4rem;line-height:1;border-radius:12px;cursor:pointer}
.x:hover:not(:disabled){background:#ffe9ec}.x:disabled{opacity:.35;cursor:not-allowed}
details{background:#fff;border:2px dashed var(--gold);border-radius:14px;padding:10px 14px;margin:12px 0 18px}
summary{cursor:pointer;font-weight:800;color:var(--green);padding:4px 0}
details[open] summary{margin-bottom:10px}
.two{display:grid;gap:12px}
@media(min-width:560px){.two{grid-template-columns:1fr 1fr}}
.pairpick{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pairpick .btn{grid-column:1/-1}
.pairs{list-style:none;padding:0;margin:10px 0 0}
.pairs li{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--cream-2);border-radius:10px;padding:6px 6px 6px 12px;margin-bottom:6px;overflow-wrap:anywhere}
.pairs .x{height:34px;width:34px;font-size:1.1rem}
.counter{text-align:right;font-size:.85rem;color:var(--muted)}
.msg{min-height:1.4em;margin:10px 0;font-weight:700}
.msg.err{color:var(--err)}.msg.ok{color:var(--ok)}
.msg.notice{background:#fff4d6;border:2px dashed var(--gold,#d4a017);border-radius:12px;padding:12px 14px;line-height:1.45}
.typo{grid-column:1/-1;margin-top:-2px;font-size:.92rem;background:#fff4d6;border:1px solid var(--gold);border-radius:10px;padding:6px 10px;color:var(--ink)}
.linkbtn{font:inherit;font-weight:800;background:none;border:0;padding:2px 2px;color:var(--green);text-decoration:underline;cursor:pointer}
.ts{margin:14px 0 6px;min-height:65px;display:flex;justify-content:center}
.hp{position:absolute!important;left:-9999px!important;top:auto;width:1px;height:1px;overflow:hidden}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.foot{text-align:center;color:var(--cream-2);font-size:.85rem;padding:6px 10px;opacity:.9}
.foot a{color:var(--gold-2)}
.results{list-style:none;padding:0;margin:14px 0}
.results li{display:flex;justify-content:space-between;gap:10px;padding:9px 12px;border-radius:10px;background:#fff;margin-bottom:6px;overflow-wrap:anywhere}
.sent{color:var(--ok);font-weight:800;white-space:nowrap}.failed{color:var(--err);font-weight:800;white-space:nowrap}
.sharebox{display:flex;gap:8px;flex-wrap:wrap}.sharebox input{flex:1 1 220px}
.secret{background:var(--cream-2);border-radius:12px;padding:10px 14px;font-weight:700;text-align:center;margin:14px 0}
.center{text-align:center}
/* unwrap */
.stage{min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--cream)}
.gift{position:relative;width:240px;height:260px;background:none;border:0;cursor:pointer;padding:0;border-radius:12px;font:inherit}
.gift-box{position:absolute;bottom:0;left:20px;width:200px;height:150px;background:linear-gradient(90deg,var(--red-2),var(--red) 40%,var(--red-2));border-radius:6px 6px 10px 10px;box-shadow:var(--shadow)}
.gift-box::before,.lid::before{content:"";position:absolute;top:0;bottom:0;left:50%;width:34px;margin-left:-17px;background:linear-gradient(90deg,#b88a10,var(--gold-2),#b88a10)}
.lid{position:absolute;bottom:140px;left:10px;width:220px;height:54px;background:linear-gradient(90deg,#7d0b20,#c4162f 40%,#7d0b20);border-radius:8px;box-shadow:0 4px 8px rgba(0,0,0,.3);transform-origin:20% 100%}
.bow{position:absolute;left:50%;top:-40px;width:0;height:0}
.bow i{position:absolute;top:0;width:48px;height:42px;border:9px solid var(--gold);border-radius:60% 60% 60% 60%;background:transparent}
.bow i:first-child{left:-52px;transform:rotate(-25deg)}.bow i:nth-child(2){left:4px;transform:rotate(25deg)}
.bow b{position:absolute;left:-11px;top:18px;width:22px;height:22px;background:var(--gold-2);border-radius:50%;box-shadow:0 2px 3px rgba(0,0,0,.3)}
.gift:not(.opened){animation:wiggle 2.4s ease-in-out infinite}
.lid.fly{animation:fly .9s ease-in forwards}
.tap{margin-top:18px;font-family:var(--display);font-size:1.8rem;color:var(--gold-2)}
.reveal{animation:pop .7s cubic-bezier(.2,1.4,.4,1) both}
.reveal .big{font-family:var(--display);font-size:clamp(2.6rem,13vw,4.4rem);line-height:1.05;color:var(--red);margin:8px 0 14px;overflow-wrap:anywhere}
.reveal .lead{font-size:1.2rem;margin:6px 0;color:var(--green);font-weight:800}
.facts{list-style:none;padding:0;margin:14px 0}
.facts li{margin:6px 0}
.note{background:#fff;border-left:5px solid var(--gold);border-radius:8px;padding:10px 14px;text-align:left;white-space:pre-wrap;overflow-wrap:anywhere}
.hidden{display:none!important}
.errcard{color:var(--ink);text-align:center}
.errcard .big{font-size:3rem}
@keyframes wiggle{0%,100%{transform:rotate(0)}6%{transform:rotate(-3deg)}12%{transform:rotate(3deg)}18%{transform:rotate(-2deg)}24%{transform:rotate(0)}}
@keyframes fly{0%{transform:translateY(0) rotate(0)}30%{transform:translateY(-30px) rotate(-6deg)}100%{transform:translateY(-320px) rotate(40deg) translateX(120px);opacity:0}}
@keyframes pop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .lid.fly{opacity:0}
  #snow,#confetti{display:none}
}
