:root{--brand-amber: #F59E0B;--brand-coral: #EF4444;--brand-stamp: #C0392B;--brand-gold-warm: #FBBF24;--brand-orange-deep: #EA580C;--brand-gradient: linear-gradient(135deg, var(--brand-amber) 0%, var(--brand-coral) 100%);--brand-gradient-warm: linear-gradient(135deg, var(--brand-gold-warm) 0%, var(--brand-orange-deep) 100%);--brand-gradient-glow: radial-gradient(circle at center, rgba(245, 158, 11, .18) 0%, transparent 70%);--font-display: "Noto Serif TC", "Source Han Serif TC", "PingFang TC", "Microsoft JhengHei", serif;--font-body: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;--font-mono: "JetBrains Mono", "Cascadia Code", Consolas, ui-monospace, monospace;--ease-standard: cubic-bezier(.4, 0, .2, 1);--ease-out-expo: cubic-bezier(.19, 1, .22, 1);--ease-out-back: cubic-bezier(.34, 1.56, .64, 1);--duration-fast: .18s;--duration-base: .28s;--duration-slow: .48s;--shadow-glass-sm: 0 4px 16px rgba(0, 0, 0, .1);--shadow-glass-md: 0 8px 32px rgba(0, 0, 0, .18);--shadow-glass-lg: 0 24px 64px rgba(0, 0, 0, .28);--shadow-brand-glow: 0 8px 24px rgba(245, 158, 11, .28);--radius-sm: 6px;--radius-md: 12px;--radius-lg: 20px;--radius-pill: 999px}:root{--noise-svg: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}:root{--line: var(--brand-amber);--line-dark: var(--brand-orange-deep);--bg: #FFFBF2;--card: #ffffff;--text: #1a1a1a;--muted: #6b7280;--border: #F0E4CF;--danger: #dc2626;--warn: var(--brand-amber);--radius: var(--radius-md);--shadow: var(--shadow-glass-sm)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;background:radial-gradient(circle at 0% 0%,rgba(245,158,11,.08) 0%,transparent 40%),radial-gradient(circle at 100% 100%,rgba(239,68,68,.06) 0%,transparent 45%),var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased}body{font-size:15px;line-height:1.5}h1,h2,.liff-display{font-family:var(--font-display);letter-spacing:.02em}.app{max-width:480px;margin:0 auto;padding:16px 16px 64px}.card{background:var(--card);border-radius:var(--radius);padding:20px;margin-bottom:14px;box-shadow:var(--shadow);border:1px solid rgba(245,158,11,.06);transition:transform var(--duration-fast) var(--ease-standard)}.card.card-hero{position:relative;background:linear-gradient(135deg,#fff,#fffbf2);border:1px solid rgba(245,158,11,.18);overflow:hidden}.card.card-hero:before{content:"";position:absolute;inset:-40%;background:var(--brand-gradient-glow);pointer-events:none;animation:heroBreathe 6s var(--ease-standard) infinite;z-index:0}.card.card-hero>*{position:relative;z-index:1}@keyframes heroBreathe{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}.card-title{font-size:14px;color:var(--muted);margin:0 0 6px}.avatar{width:64px;height:64px;border-radius:50%;background:var(--border);object-fit:cover}.member-header{display:flex;align-items:center;gap:14px}.member-name{font-size:18px;font-weight:600;margin:0}.member-code{font-size:12px;color:var(--muted);margin:2px 0 0}.points-display{text-align:center;padding:20px 0 8px;position:relative}.points-value{font-family:var(--font-display);font-size:56px;font-weight:700;background:var(--brand-gradient);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;line-height:1;font-variant-numeric:tabular-nums;display:inline-block;transition:transform var(--duration-base) var(--ease-out-expo)}.points-value.points-flip{animation:pointsFlip var(--duration-base) var(--ease-out-expo)}@keyframes pointsFlip{0%{transform:rotateX(0)}50%{transform:rotateX(90deg) scale(.92)}to{transform:rotateX(0)}}.points-label{font-size:14px;color:var(--muted);margin-top:6px}.input{width:100%;padding:14px 16px;font-size:16px;border:1px solid var(--border);border-radius:10px;background:#fff;outline:none}.input:focus{border-color:var(--brand-amber);box-shadow:0 0 0 3px #f59e0b29}.label{display:block;font-size:13px;color:var(--muted);margin:12px 0 6px}.btn{width:100%;padding:14px 16px;font-size:16px;font-weight:600;border:none;border-radius:var(--radius-md);cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard),opacity var(--duration-fast) var(--ease-standard);font-family:var(--font-body)}.btn-primary{background:var(--brand-gradient);color:#fff;box-shadow:var(--shadow-brand-glow);letter-spacing:.04em}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 12px 28px #f59e0b52}.btn-primary:active{transform:scale(.98);box-shadow:0 4px 12px #f59e0b33}.btn-primary:disabled{background:#f3d6a8;box-shadow:none;cursor:not-allowed;opacity:.7}.btn-ghost{background:transparent;color:var(--muted)}.btn-ghost:active{transform:scale(.98)}.amount-input{width:100%;padding:20px;font-size:32px;font-weight:700;text-align:center;border:2px solid var(--border);border-radius:12px;outline:none}.amount-input:focus{border-color:var(--brand-amber);box-shadow:0 0 0 3px #f59e0b29}.store-name{text-align:center;padding:12px;background:#f59e0b14;color:var(--brand-orange-deep);font-weight:600;border-radius:var(--radius-sm);margin-bottom:16px;border:1px solid rgba(245,158,11,.18);font-family:var(--font-display)}.history-item{display:flex;justify-content:space-between;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--border)}.history-item:last-child{border-bottom:none}.history-desc{font-size:14px;margin:0 0 4px}.history-date{font-size:12px;color:var(--muted)}.history-expiry{font-size:11px;color:var(--warn);margin:2px 0 0}.history-points{font-weight:700;font-size:16px;white-space:nowrap;margin-left:12px}.history-points.earn{color:var(--brand-amber)}.history-points.spend{color:var(--danger)}.badge{display:inline-block;font-size:11px;padding:2px 8px;border-radius:10px;margin-left:6px}.badge.pending{background:#fef3c7;color:#92400e}.badge.rejected{background:#fee2e2;color:#991b1b}.badge.approved{background:#dcfce7;color:#065f46}.alert{padding:12px 16px;border-radius:10px;margin-bottom:12px;font-size:14px}.alert-error{background:#fee2e2;color:var(--danger)}.alert-success{background:#dcfce7;color:#065f46}.alert-info{background:#dbeafe;color:#1e40af}.loading,.empty{text-align:center;padding:40px 20px;color:var(--muted)}.tabs{display:flex;gap:8px;margin-bottom:14px}.tab{flex:1;padding:10px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);text-align:center;font-size:14px;color:var(--muted);cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard),background .15s,color .15s,border-color .15s}.tab:active{transform:scale(.96)}.tab.active{background:var(--brand-gradient);color:#fff;border-color:transparent;box-shadow:var(--shadow-brand-glow)}.liff-confetti{position:fixed;inset:0;pointer-events:none;overflow:hidden;z-index:9000}.liff-confetti i{position:absolute;top:50%;left:50%;width:10px;height:10px;border-radius:2px;opacity:0;--tx: 0px;--ty: 0px;--rot: 0deg;background:var(--brand-amber);animation:confettiFly 1.6s var(--ease-out-expo) forwards}.liff-confetti i:nth-child(3n){background:var(--brand-coral)}.liff-confetti i:nth-child(3n+1){background:var(--brand-gold-warm)}.liff-confetti i:nth-child(5n){background:var(--brand-orange-deep);border-radius:50%}.liff-confetti i:nth-child(7n){background:#c0392b;transform:rotate(45deg)}@keyframes confettiFly{0%{transform:translate(0) rotate(0);opacity:1}to{transform:translate(var(--tx),var(--ty)) rotate(var(--rot));opacity:0}}
