:root{--page-bg: #f4f6fb;--card-bg: #ffffff;--brand: #1d3cb1;--brand-dark: #142a80;--text: #1a1d29;--text-muted: #6b7080;--border: #e2e5ee}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}img{-webkit-user-drag:none;user-drag:none}html,body{margin:0;padding:0;min-height:100%;background:var(--page-bg);color:var(--text);overscroll-behavior:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}#app{display:flex;flex-direction:column;min-height:100dvh}.topbar{display:flex;align-items:center;justify-content:flex-end;padding:14px 20px max(14px,env(safe-area-inset-top));min-height:20px}.business-name{font-weight:700;font-size:1.05rem}.business-name:empty{display:none}.logout-btn{padding:6px 12px;border-radius:8px;border:1px solid var(--border);background:var(--card-bg);color:var(--text-muted);font-size:.8rem}.hidden{display:none!important}.view-root{flex:1;display:flex;flex-direction:column;align-items:center;padding:8px 20px 110px;gap:18px}.stamp-card-area{width:100%;display:flex;flex-direction:column;align-items:center;gap:14px}.stamp-banner-area:empty{display:none}.stamp-stack{position:relative;width:100%;max-width:360px}.stamp-stack .stamp-card-flip{position:absolute;top:0;left:0;cursor:pointer}.stamp-stack .stamp-card-flip.stack-active{cursor:default}.stamp-stack .stamp-card-flip.stack-animated{transition:transform .32s cubic-bezier(.4,.1,.2,1),opacity .32s ease}@keyframes card-enter{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.card-enter{animation:card-enter .22s ease-out}.stamp-cta-bar{position:fixed;left:0;right:0;bottom:0;display:flex;justify-content:center;padding:14px 20px max(14px,env(safe-area-inset-bottom));background:linear-gradient(to top,var(--page-bg) 55%,transparent);z-index:10}.stamp-cta-bar .btn{margin-top:0}.centered-message{margin:auto 0;text-align:center;color:var(--text-muted);max-width:320px}.centered-message h2{color:var(--text);margin:0 0 8px}.btn{display:block;width:100%;max-width:320px;padding:13px 16px;border-radius:12px;border:none;background:var(--brand);color:#fff;font-weight:600;font-size:.95rem;cursor:pointer;text-align:center;margin-top:14px}.btn:hover{background:var(--brand-dark)}.btn:disabled{opacity:.5;cursor:not-allowed}.stamp-card-flip{width:100%;max-width:360px;perspective:1400px}.stamp-card-inner{position:relative;width:100%;transition:transform .6s cubic-bezier(.4,.2,.2,1);transform-style:preserve-3d;will-change:transform}.stamp-card-flip.flipped .stamp-card-inner{transform:rotateY(180deg)}.stamp-card-face{position:relative;background:var(--card-bg);border-radius:22px;padding:26px 22px 22px;box-shadow:0 14px 36px #141e461f;text-align:center;backface-visibility:hidden;-webkit-backface-visibility:hidden}.stamp-card-back{position:absolute;top:0;right:0;bottom:0;left:0;transform:rotateY(180deg);display:flex;flex-direction:column;align-items:center;justify-content:center}.stamp-card-back .back-content{position:relative;display:flex;flex-direction:column;align-items:center;max-width:100%}.stamp-card-back .back-plate{padding:18px 20px 16px;border-radius:20px}.has-back-color h2{color:var(--back-text)}.has-back-color .business-info-line{color:var(--back-muted)}.has-back-color .business-info-link{color:var(--back-link);text-decoration:underline;text-underline-offset:3px}.has-back-color .card-logo{background:#fff;border-color:#fff}.has-back-color .back-plate .card-logo{background:var(--page-bg);border-color:var(--border)}.has-back-color .flip-btn{box-shadow:0 2.5px #00000047,0 5px 10px #0003}.flip-btn{position:absolute;top:12px;right:12px;height:32px;padding:0 11px 0 8px;border-radius:12px;border:none;background:#fff;color:#1d3cb1;display:flex;align-items:center;gap:6px;font-family:inherit;font-weight:800;font-size:.84rem;line-height:1;box-shadow:0 2.5px #d9dce8,0 5px 10px #141e4626}.flip-btn img{height:14px;width:auto;display:block}.card-logo{width:72px;height:72px;border-radius:18px;margin:0 auto 16px;overflow:hidden;display:flex;align-items:center;justify-content:center;background:var(--page-bg);border:1px solid var(--border);color:var(--brand)}.card-logo img{width:100%;height:100%;object-fit:cover}.card-logo svg{width:34px;height:34px}.stamp-card-face h2{margin:0 0 4px;font-size:1.05rem;letter-spacing:.02em;text-transform:uppercase}.stamp-card-face .card-description{margin:0 0 20px;font-size:.85rem;color:var(--text-muted)}.card-expiration{margin:10px 0 0;font-size:.72rem;color:var(--text-muted);opacity:.8}.layout-horizontal .card-footer .card-expiration{margin:4px 0 0}.has-bg-color .card-expiration{color:#ffffffbf}.stamp-card-front.font-poppins{font-family:Poppins,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.stamp-card-front.font-playfair h2{font-family:Playfair Display,Georgia,serif}.stamp-card-front.size-small h2{font-size:.9rem}.stamp-card-front.size-small .card-description{font-size:.75rem}.stamp-card-front.size-large h2{font-size:1.35rem}.stamp-card-front.size-large .card-description{font-size:.95rem}.stamp-card-face.layout-horizontal{text-align:left;padding:54px 22px 20px}.h-top-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}.h-top-row h2{margin:0}.layout-horizontal .card-logo{width:52px;height:52px;margin:0;flex-shrink:0}.layout-horizontal .card-footer{margin:14px 0 0}.layout-horizontal .card-footer .card-description{margin:0}.has-bg-color.layout-horizontal .card-footer{margin:14px -22px -20px;padding:12px 22px;border-radius:0 0 22px 22px;background:color-mix(in srgb,var(--stamp-accent, var(--brand)) 82%,black)}.has-bg-color h2,.has-bg-color .business-info-line{color:#fff}.has-bg-color .card-description{color:#ffffffd9}.has-bg-color .card-logo{background:#fff;border-color:#fff;color:var(--stamp-accent, var(--brand))}.has-bg-color .flip-btn{box-shadow:0 2.5px #00000047,0 5px 10px #0003}.has-bg-color .stamp-dot{background:#ffffff2e;border-color:#fff6;color:#ffffffbf}.has-bg-color .stamp-dot.filled{background:#fff;border-color:#fff;color:var(--stamp-accent, var(--brand))}.has-bg-color .stamp-dot.reward:not(.filled){background:#ffffff2e;border-color:#fff9;color:#fff}.business-info-line{margin:4px 0;font-size:.85rem;color:var(--text-muted)}.business-info-link{color:var(--brand);text-decoration:none;font-weight:600}.stamp-grid{display:grid;aspect-ratio:1;align-content:center;justify-content:center;gap:10px;margin-bottom:16px}.stamp-grid.grid-horizontal{aspect-ratio:2;margin-bottom:0}.stamp-dot{position:relative;aspect-ratio:1;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--page-bg);border:1.5px dashed var(--border);color:var(--text-muted)}.stamp-dot svg{width:46%;height:46%}.stamp-dot.filled{background:var(--brand);border:1.5px solid var(--brand);color:#fff}.stamp-dot.reward{background:var(--page-bg);border:1.5px dashed var(--brand);color:var(--brand)}.stamp-dot.reward.filled{background:linear-gradient(135deg,#ffd166,#f4a300);border:1.5px solid #f4a300;color:#4a3300}.stamp-dot.has-image.filled{background:transparent;border:none}.stamp-dot.has-image:not(.filled){background:var(--page-bg);border:1.5px dashed var(--brand)}.has-bg-color .stamp-dot.has-image:not(.filled){background:#ffffff2e;border-color:#fff9}.stamp-dot-image{position:absolute}.my-code-section{width:100%;max-width:360px;background:var(--card-bg);border-radius:22px;padding:22px;box-shadow:0 14px 36px #141e461f;text-align:center}.my-code-label{font-size:.78rem;color:var(--text-muted);margin:0 0 4px;text-transform:uppercase;letter-spacing:.08em}.my-code-value{font-size:2.1rem;font-weight:700;letter-spacing:.25em;color:var(--brand);margin:4px 0 14px}.my-code-hint{font-size:.75rem;color:var(--text-muted);margin:14px 0 0}.my-account{margin:16px 0 0;padding-top:14px;border-top:1px solid var(--border, #e2e5ee);font-size:.75rem;color:var(--text-muted);overflow-wrap:anywhere}.my-account-value{color:var(--text);font-weight:600}.switch-account-btn{margin-top:8px;padding:7px 14px;border:1px solid var(--border, #e2e5ee);border-radius:999px;background:transparent;color:var(--text-muted);font-family:inherit;font-size:.78rem;font-weight:600;cursor:pointer}.qr-canvas{margin:0 auto;border-radius:12px;overflow:hidden;border:1px solid var(--border);padding:8px;display:inline-block}.completed-banner{width:100%;max-width:360px;background:var(--card-bg);border:1.5px solid #f4a300;border-radius:22px;padding:18px 20px;box-shadow:0 14px 36px #141e461f;text-align:center}.completed-banner strong{display:block;color:#b97400;font-size:1.02rem;margin-bottom:6px}.completed-banner p{margin:0;font-size:.85rem;color:var(--text-muted)}.confetti-burst{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;z-index:50}.confetti-piece{position:absolute;top:-20px;width:8px;height:14px;opacity:.9;animation-name:confetti-fall;animation-timing-function:ease-in;animation-fill-mode:forwards}@keyframes confetti-fall{0%{transform:translateY(0) translate(0) rotate(0);opacity:1}to{transform:translateY(105vh) translate(var(--drift)) rotate(var(--rotate));opacity:0}}@keyframes dot-pop{0%{transform:scale(1)}40%{transform:scale(1.28)}to{transform:scale(1)}}.stamp-dot.dot-pop{animation:dot-pop .5s ease}.completed-banner .code{font-size:1.8rem;font-weight:700;letter-spacing:.2em;color:var(--text);margin:8px 0 2px}.tab-content{width:100%;display:flex;flex-direction:column;align-items:center;gap:18px}.bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:20;display:flex;background:var(--card-bg);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 4px 8px;border:none;background:none;color:var(--text-muted);font-family:inherit;font-size:.68rem;font-weight:600;cursor:pointer}.bottom-nav-btn.active{color:var(--brand)}.bottom-nav-icon svg{width:23px;height:23px;display:block}.stamp-me-btn{width:100%;margin-top:auto;padding:13px 16px;border:none;border-radius:14px;background:var(--brand);color:#fff;font-family:inherit;font-weight:700;font-size:.95rem;letter-spacing:.02em;cursor:pointer}.has-bg-color .stamp-me-btn{background:#ffffffeb;color:var(--stamp-accent, var(--brand))}.code-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:24px;background:#0a0e1e8c}.code-overlay .my-code-section.in-overlay{margin:0;max-width:320px;box-shadow:0 24px 60px #0a0e1e59}.code-overlay-close{margin-top:14px;padding:9px 18px;border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--text-muted);font-family:inherit;font-size:.82rem;font-weight:600;cursor:pointer}.tab-panel{width:100%;max-width:360px;display:flex;flex-direction:column;gap:12px}.tab-title{margin:4px 0 2px;font-size:1.1rem}.tab-empty{margin:0;color:var(--text-muted);font-size:.9rem;line-height:1.5}.reward-item{background:var(--card-bg);border:1px solid var(--border);border-radius:16px;padding:14px 16px}.reward-item.pending{border-color:var(--brand)}.reward-item-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.reward-status{flex-shrink:0;font-size:.7rem;font-weight:700;padding:2px 8px;border-radius:6px;background:var(--page-bg);color:var(--text-muted)}.reward-status.pending{background:var(--brand);color:#fff}.reward-code{margin-top:10px;font-size:1.6rem;font-weight:800;letter-spacing:.18em;color:var(--brand);text-indent:.18em}.reward-hint,.reward-date{margin:6px 0 0;font-size:.76rem;color:var(--text-muted)}.logout-wide-btn{margin-top:4px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--card-bg);color:var(--text-muted);font-family:inherit;font-size:.9rem;font-weight:600;cursor:pointer}@media (max-width: 767px){.view-root{padding-bottom:86px}.stamp-card-front{display:flex;flex-direction:column;min-height:min(60vh,520px)}.stamp-card-front .stamp-grid{margin-top:8px;margin-bottom:18px}.stamp-card-face{box-shadow:0 18px 44px #141e4629}}.card-reward{margin:14px 0;font-size:.92rem;line-height:1.35;text-align:center;color:var(--text)}.card-reward-label{color:var(--text-muted)}.card-reward strong{font-weight:700}.has-bg-color .card-reward,.has-bg-color .card-reward-label{color:#fff}.has-bg-color .card-reward-label{opacity:.8}
