/* Westerly Hills Rewards · Sunset Hills brand */
:root{
  --navy:#10243a; --orange:#ff6a2b; --orange-text:#c2410c; --blue:#1f6fd1; --day:#f3f6f8; --cream:#fff7ec;
  --surface:#fff; --muted:#4d6074; --line:#d5dee6; --ok:#1d8a52; --bad:#c43b2e;
  --display:"Archivo","Arial Narrow",Arial,sans-serif; --body:"Hanken Grotesk",system-ui,-apple-system,sans-serif;
  color-scheme:light;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--day);color:var(--navy);font:17px/1.5 var(--body);min-height:100dvh;-webkit-tap-highlight-color:transparent}
button,input{font:inherit;color:inherit}
a{color:var(--blue)}
[hidden]{display:none!important}
.shell{max-width:480px;margin:0 auto;padding:12px 16px calc(32px + env(safe-area-inset-bottom))}
.top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0 14px}
.top img{height:34px;width:auto;display:block}
.lang{border:1.5px solid var(--line);background:var(--surface);border-radius:999px;padding:6px 12px;font-weight:700;font-size:14px;cursor:pointer}
h1,h2,h3{font-family:var(--display);font-weight:900;letter-spacing:-.02em;line-height:1.05;margin:0 0 .35em;text-wrap:balance}
h1{font-size:clamp(34px,10vw,46px)}
h1 em{font-style:normal;color:var(--orange)}
h2{font-size:24px}
h3{font-size:18px}
p{margin:0 0 .8em}
.muted{color:var(--muted)}
.small{font-size:14px}
.box{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:18px;margin:14px 0}
.steps{list-style:none;padding:0;margin:16px 0;display:grid;gap:10px}
.steps li{display:flex;gap:12px;align-items:flex-start}
.steps b.n{flex:none;width:30px;height:30px;border-radius:50%;background:var(--navy);color:#fff;display:grid;place-items:center;font:900 15px var(--display)}
label{display:block;font-weight:700;font-size:15px;margin:12px 0 6px}
input[type=text],input[type=tel],input[type=password]{width:100%;padding:14px;border:1.5px solid var(--line);border-radius:12px;background:#fff;font-size:18px}
input:focus-visible,button:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.check{display:flex;gap:10px;align-items:flex-start;margin:14px 0 4px;font-size:14px;color:var(--muted)}
.check input{width:22px;height:22px;flex:none;margin-top:1px;accent-color:var(--navy)}
.btn{display:block;width:100%;border:0;border-radius:14px;padding:16px;background:var(--orange);color:var(--navy);font:900 18px var(--display);letter-spacing:-.01em;cursor:pointer;margin-top:14px}
.btn:disabled{opacity:.55;cursor:default}
.btn.dark{background:var(--navy);color:#fff}
.btn.ghost{background:transparent;border:1.5px solid var(--line);color:var(--navy);font:700 16px var(--body)}
.link{background:none;border:0;padding:8px 0;color:var(--blue);text-decoration:underline;cursor:pointer;font-size:15px}
.msg{min-height:1.4em;font-size:15px;margin:8px 0 0}
.msg.err{color:var(--bad)}
.msg.ok{color:var(--ok)}
.preview{background:#fff1a8;color:#5a4500;border-radius:10px;padding:8px 12px;font-size:13px;margin:0 0 10px}

/* the punch card: a branded wallet card (navy night, sunset over the hills) */
.card{position:relative;overflow:hidden;border-radius:24px;padding:20px 18px 18px;color:#fff;
  background:radial-gradient(120% 90% at 85% 115%,#ff8a3d 0%,#ff6a2b 18%,rgba(255,106,43,0) 46%),linear-gradient(160deg,#173455 0%,#10243a 60%,#0b1a2b 100%);
  box-shadow:0 18px 40px -16px rgba(16,36,58,.65),inset 0 1px 0 rgba(255,255,255,.08)}
.card .sun{position:absolute;inset:auto -10% -38% -10%;height:62%;pointer-events:none;
  background:radial-gradient(70% 100% at 30% 100%,#1f6fd1 0 58%,transparent 59%),radial-gradient(80% 100% at 85% 100%,#1a5bb0 0 56%,transparent 57%);opacity:.55}
.card>*{position:relative}
.card .hd{display:flex;justify-content:space-between;align-items:center;gap:8px}
.card .hd img{height:30px;width:auto;display:block}
.card .tag{font:800 11px var(--body);letter-spacing:.14em;text-transform:uppercase;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);padding:5px 9px;border-radius:999px;white-space:nowrap}
.dots{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:18px 0 14px}
.dot{aspect-ratio:1;border-radius:50%;border:2px dashed rgba(255,255,255,.38);display:grid;place-items:center;font:900 14px var(--display);color:rgba(255,255,255,.6);background:rgba(255,255,255,.06)}
.dot.on{border:0;background:radial-gradient(circle at 35% 30%,#ffb067,#ff6a2b 60%,#e4531a);color:var(--navy);box-shadow:0 4px 12px -4px rgba(255,106,43,.8)}
.dot.on svg{width:56%;height:56%}
.dot.free{border:2.5px solid var(--orange);color:#ffb067;font-size:11px;background:rgba(255,106,43,.12)}
.dot.pop{animation:pop .7s cubic-bezier(.2,1.6,.4,1)}
@keyframes pop{0%{transform:scale(.2)}100%{transform:scale(1)}}
.left{font:900 21px var(--display);margin:0 0 14px;color:#fff}
.card .ft{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:10px;border-top:1px solid rgba(255,255,255,.16);padding-top:12px}
.card .ft small{display:block;font:700 10px var(--body);letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.6)}
.card .ft b{display:block;font:800 15px var(--display);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (prefers-reduced-motion:reduce){.dot.pop{animation:none}}
.reward{background:var(--orange);color:var(--navy);border-radius:18px;padding:16px 18px;margin:14px 0;display:flex;gap:14px;align-items:center}
.reward b{font:900 22px/1.1 var(--display);display:block}
.reward .big{font:900 40px var(--display);line-height:1}
.qrbox{text-align:center}
.qr{display:inline-block;background:#fff;padding:10px;border-radius:12px;border:1px solid var(--line)}
.qr svg,.qr img{display:block;width:200px;height:200px}
.code{font:900 26px var(--display);letter-spacing:.12em;margin:10px 0 0}
.hist{list-style:none;padding:0;margin:0}
.hist li{display:flex;justify-content:space-between;gap:10px;padding:9px 0;border-top:1px solid var(--line);font-size:15px}
.hist li:first-child{border-top:0}
.hist time{color:var(--muted);white-space:nowrap}
.fine{font-size:13px;color:var(--muted)}
.fine li{margin:4px 0}
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom));transform:translateX(-50%);background:var(--navy);color:#fff;padding:12px 18px;border-radius:12px;font-weight:700;box-shadow:0 8px 30px rgba(16,36,58,.3);z-index:20;max-width:calc(100% - 32px);text-align:center}
.toast.bad{background:var(--bad)}

/* staff */
.pin{font:900 30px var(--display);letter-spacing:.4em;text-align:center}
.scan{position:relative;background:#000;border-radius:18px;overflow:hidden;aspect-ratio:4/3}
.scan video{width:100%;height:100%;object-fit:cover;display:block}
.scan .frame{position:absolute;inset:18%;border:3px solid var(--orange);border-radius:16px;box-shadow:0 0 0 999px rgba(0,0,0,.35)}
.row{display:flex;gap:10px;align-items:center}
.row > *{flex:1}
.row .btn{margin-top:0}
.who{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.stat{font:900 44px/1 var(--display)}
.stepper{display:flex;align-items:center;justify-content:center;gap:18px;margin:12px 0}
.stepper button{width:54px;height:54px;border-radius:50%;border:2px solid var(--navy);background:#fff;font:900 26px var(--display);cursor:pointer}
.stepper output{font:900 40px var(--display);min-width:2ch;text-align:center}
.pill{display:inline-block;background:var(--day);border-radius:999px;padding:3px 10px;font-size:13px;font-weight:700}
.pill.hot{background:var(--orange);color:var(--navy)}
