*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #f2f2f7;--surface: #ffffff;--border: rgba(0, 0, 0, .12);--text: #111111;--muted: rgba(0, 0, 0, .55);--accent: #fb1e3c;--success: #28a745}@media(prefers-color-scheme:dark){:root{--bg: #0b0b0f;--surface: #1c1c1e;--border: rgba(255, 255, 255, .16);--text: #ffffff;--muted: rgba(255, 255, 255, .55);--success: #30d158}}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100dvh}#root{max-width:480px;margin:0 auto;padding:16px}.centered{min-height:80dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center}.muted{color:var(--muted);font-size:14px}.centered-text{text-align:center}.card-page{display:flex;flex-direction:column;gap:24px}.card-header{text-align:center;display:flex;flex-direction:column;gap:6px}.card-art{width:100%;border-radius:16px;max-height:180px;object-fit:cover}.business-name{font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.card-header h1{font-size:24px}.stamp-progress{text-align:center;font-size:15px;color:var(--muted);margin-bottom:12px}.stamp-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}.stamp-slot{aspect-ratio:1;border-radius:50%;border:2px dashed var(--border);display:flex;align-items:center;justify-content:center;overflow:hidden}.stamp-slot.milestone{border-color:var(--accent)}.stamp-slot.filled{border-style:solid;border-color:var(--accent);background:#fb1e3c26}.stamp-slot.solid{border-style:solid}.stamp-slot.bare{border:none;background:transparent}.stamp-slot img{width:70%;height:70%;object-fit:contain}.stamp-slot .stamp-icon{display:block;width:88%;height:88%;color:var(--accent)}.stamp-slot .stamp-icon svg{display:block;width:100%;height:100%}.stamp-slot.ghost .stamp-icon{opacity:.3}.stamp-number{color:var(--muted);font-size:14px}.banner{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:12px;text-align:center}.banner.success{border-color:var(--success);color:var(--success);font-weight:600}.stamp-celebrate{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:var(--success);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;font-size:18px;font-weight:700;text-align:center;padding:24px;animation:celebrate-fade 1.7s ease forwards}.stamp-celebrate-check{width:110px;height:110px}.stamp-celebrate-check path{stroke-dasharray:60;stroke-dashoffset:60;animation:celebrate-draw .5s ease-out .25s forwards}.stamp-celebrate-check circle{transform-origin:center;animation:celebrate-pop .4s cubic-bezier(.2,1.4,.4,1) both}@keyframes celebrate-fade{0%{opacity:0}10%{opacity:1}85%{opacity:1}to{opacity:0}}@keyframes celebrate-draw{to{stroke-dashoffset:0}}@keyframes celebrate-pop{0%{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}.stamped-banner{background:var(--success);color:#fff;font-size:14px;font-weight:600;text-align:center;padding:12px 16px;border-radius:16px}.banner-text{font-size:14px;color:var(--muted)}.button{border:none;border-radius:12px;padding:14px 18px;font-size:16px;font-weight:600;cursor:pointer;background:var(--surface);color:var(--text)}.button.primary{background:var(--accent)}.button:disabled{opacity:.5;cursor:default}h2{font-size:17px;margin-bottom:10px}.milestone-list{list-style:none;display:flex;flex-direction:column;gap:8px}.milestone-list .milestone{padding:12px}.milestone{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.milestone.available{border-color:var(--success)}.milestone.redeemed{opacity:.5}.milestone-badge{flex:none;width:28px;height:28px;border-radius:50%;background:var(--accent);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}.milestone-reward{flex:1;font-size:15px}.milestone-status{font-size:12px;color:var(--muted)}.milestone.available .milestone-status{color:var(--success);font-weight:600}.customer-qr{display:flex;flex-direction:column;align-items:center;gap:10px}.qr-box{background:#fff;padding:12px;border-radius:16px}.qr-hint{font-size:13px;color:var(--muted);text-align:center;max-width:280px}.coupon-body{display:flex;flex-direction:column;gap:16px;align-items:center;text-align:center}.coupon-reward{background:var(--surface);border:1px dashed var(--accent);border-radius:16px;padding:20px 28px;display:flex;flex-direction:column;gap:6px;width:100%}.coupon-label{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.coupon-reward strong{font-size:20px}.wallet-buttons{display:flex;flex-direction:column;gap:10px}.button.wallet{border:1px solid var(--border);text-decoration:none;text-align:center;display:block}.redeem-btn{padding:8px 14px;font-size:13px}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:flex-end;justify-content:center;z-index:10}.sheet{background:var(--surface);border-radius:20px 20px 0 0;padding:24px 20px 32px;width:100%;max-width:480px;display:flex;flex-direction:column;gap:14px;text-align:center}.sheet-error{color:#ff453a;font-size:14px}.redeem-live{border-style:solid;border-color:var(--success);animation:glow 1.5s ease-in-out infinite alternate}.redeem-countdown{font-size:40px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--success)}.redeem-pulse{width:14px;height:14px;border-radius:50%;background:var(--success);margin:0 auto;animation:pulse 1s ease-in-out infinite}@keyframes pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.6);opacity:.5}}@keyframes glow{0%{box-shadow:0 0 4px #30d1584d}to{box-shadow:0 0 18px #30d158b3}}.signin-box{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:18px 16px;display:flex;flex-direction:column;align-items:center;gap:12px;width:100%}.pass .signin-box{background:transparent;border:none;padding:4px 0 8px}.pass .signin-hint,.pass .signin-privacy{color:var(--pass-muted)}.signin-hint{font-size:14px;color:var(--muted);text-align:center}.button.apple-signin{background:#000;color:#fff;border:1px solid rgba(255,255,255,.25);border-radius:999px;width:100%;height:44px;padding:0 16px;display:flex;align-items:center;justify-content:center;gap:8px;font-size:17px;font-weight:500}.button.apple-signin svg{width:20px;height:20px}.google-signin{width:calc(100% / 1.1);height:44px;display:flex;align-items:center;justify-content:center;transform:scale(1.1);transform-origin:center}.signin-privacy{font-size:12px;color:var(--muted);text-align:center;max-width:300px}.button.dev-login{width:100%;height:44px;border:1px dashed rgba(255,255,255,.35);border-radius:999px;font-size:14px;padding:0 16px}.pass{border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:16px;box-shadow:0 14px 36px #00000059}.pass-label{font-size:10px;letter-spacing:.09em;text-transform:uppercase;font-weight:600;color:var(--pass-muted)}.pass-a-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.pass-a-logo{font-size:16px;font-weight:600}.pass-a-headerfield{display:flex;flex-direction:column;align-items:flex-end}.pass-a-headervalue{font-size:22px;font-weight:700;line-height:1.1}.pass-a-fields{display:flex;justify-content:space-between;gap:16px}.pass-a-field{display:flex;flex-direction:column;gap:2px;min-width:0}.pass-a-field-right{align-items:flex-end;text-align:right}.pass-a-value{font-size:15px;font-weight:500}.pass-google{border-radius:20px}.pass-g-issuer{font-size:13px;font-weight:600;color:var(--pass-muted)}.pass-g-title{font-size:22px;font-weight:700}.pass-g-points{display:flex;flex-direction:column;gap:2px}.pass-g-balance{font-size:26px;font-weight:800;line-height:1.1}.pass .stamp-slot{border-color:var(--pass-muted);background:transparent}.pass .stamp-slot.milestone{border-color:var(--pass-fg)}.pass .stamp-slot.filled{background:#fff;border-color:#fff}.pass .stamp-slot.bare{background:transparent;border:none}.pass .stamp-slot .stamp-icon{color:var(--pass-fg)}.pass .stamp-number,.pass .qr-hint{color:var(--pass-muted)}.pass-qr{display:flex;justify-content:center}.dev-reset{position:fixed;top:10px;right:10px;z-index:50;background:#0000008c;color:#fff;border:1px solid rgba(255,255,255,.25);border-radius:8px;padding:6px 10px;font-size:12px;cursor:pointer}.home{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:24px;background:#fb1e3c}.home-logo{width:min(72vmin,420px);height:auto;display:block}
