@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=IBM+Plex+Sans:wght@400;500;600;700&family=Noto+Sans+TC:wght@400;500;700&display=swap";:root{--bg:#f4f1ea;--ink:#1c1917;--muted:#78716c;--card:#fffdf8;--line:#e7e0d5;--accent:#0f766e;--accent-ink:#ecfdf5;--danger:#b91c1c;--warn:#b45309;--ok:#15803d;--font:"IBM Plex Sans", "Noto Sans TC", system-ui, sans-serif;--display:"Fraunces", "Noto Serif TC", Georgia, serif}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{font-family:var(--font);color:var(--ink);background:radial-gradient(1200px 600px at 10% -10%, #dcefea 0%, transparent 55%), radial-gradient(900px 500px at 100% 0%, #f5e6d3 0%, transparent 50%), var(--bg)}a{color:var(--accent)}.app-shell{max-width:1100px;margin:0 auto;padding:1.25rem 1rem 3rem}.topbar{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.5rem;display:flex}.brand{font-family:var(--display);letter-spacing:-.02em;font-size:1.35rem;font-weight:600}.brand small{font-family:var(--font);color:var(--muted);margin-top:.15rem;font-size:.75rem;font-weight:400;display:block}.nav{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.btn,button.btn{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--ink);font:inherit;cursor:pointer;border-radius:10px;align-items:center;gap:.35rem;padding:.55rem .9rem;text-decoration:none;display:inline-flex}.btn:hover{border-color:#c4b8a5}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-danger{color:var(--danger);background:#fef2f2;border-color:#fecaca}.btn-redeem{letter-spacing:.04em;border-radius:14px;width:100%;min-height:4.5rem;padding:1.15rem 1.25rem;font-size:1.5rem;font-weight:800;box-shadow:0 8px 20px #0f766e47}.coupon-hero-with-dock{padding-bottom:9.5rem}.redeem-dock{z-index:40;padding:.75rem 1rem calc(.85rem + env(safe-area-inset-bottom));border-top:1px solid var(--line);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffdf8f5;flex-direction:column;gap:.55rem;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -8px 24px #1c191714}.redeem-dock-note{border:1px solid var(--line);width:100%;max-width:520px;font:inherit;background:#fff;border-radius:10px;margin:0 auto;padding:.65rem .8rem}.redeem-dock .btn-redeem{max-width:520px;margin:0 auto}.btn:disabled{opacity:.5;cursor:not-allowed}.panel{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:1.25rem;box-shadow:0 1px #1c19170a}.panel+.panel{margin-top:1rem}h1,h2{font-family:var(--display);letter-spacing:-.02em;margin:0 0 .75rem;font-weight:600}h1{font-size:1.75rem}h2{font-size:1.25rem}.muted{color:var(--muted)}.grid-2{grid-template-columns:1fr 1fr;gap:.85rem;display:grid}@media (width<=720px){.grid-2{grid-template-columns:1fr}}label{color:var(--muted);margin-bottom:.3rem;font-size:.85rem;display:block}input,select,textarea{border:1px solid var(--line);width:100%;font:inherit;background:#fff;border-radius:10px;padding:.6rem .75rem}textarea{resize:vertical;min-height:90px}.field{margin-bottom:.85rem}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.92rem}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:.55rem .4rem}th{color:var(--muted);font-size:.8rem;font-weight:600}.badge{border:1px solid var(--line);border-radius:999px;padding:.15rem .55rem;font-size:.75rem;font-weight:600;display:inline-block}.badge-active{color:var(--ok);background:#ecfdf5;border-color:#bbf7d0}.badge-redeemed{color:var(--danger);background:#fef2f2;border-color:#fecaca}.badge-void,.badge-expired,.badge-archived,.badge-not_yet_valid{color:var(--warn);background:#fff7ed;border-color:#fed7aa}.coupon-hero{text-align:center;padding:1.5rem 1rem 2rem}.coupon-hero .amount{font-family:var(--display);letter-spacing:-.03em;margin:.4rem 0;font-size:clamp(2.5rem,8vw,3.75rem);font-weight:700}.coupon-hero .status-big{margin:.75rem 0;font-size:1.25rem;font-weight:700}.coupon-qr{border:1px solid var(--line);background:#fff;border-radius:14px;max-width:280px;margin:1rem auto 1.25rem;padding:.85rem}.coupon-qr img{width:100%;height:auto;margin:0 auto;display:block}.coupon-qr-code{letter-spacing:.08em;margin-top:.55rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.15rem;font-weight:700}.coupon-qr-url{word-break:break-all;margin-top:.25rem;font-size:.72rem}.status-big.redeemed{color:var(--danger)}.status-big.active{color:var(--ok)}.stack{flex-direction:column;gap:.75rem;display:flex}.error{color:var(--danger);background:#fef2f2;border:1px solid #fecaca;border-radius:10px;margin:.5rem 0;padding:.65rem .8rem}.success{color:var(--ok);background:#ecfdf5;border:1px solid #bbf7d0;border-radius:10px;padding:.65rem .8rem}.print-toolbar{margin-bottom:1rem}@media print{body{background:#fff}.print-toolbar,.topbar,.no-print{display:none!important}.app-shell{max-width:none;padding:0}}.print-grid{grid-template-columns:repeat(3,1fr);gap:10mm;display:grid}.print-cell{text-align:center;break-inside:avoid;page-break-inside:avoid;border:1px dashed #bbb;border-radius:6px;padding:6mm 4mm}.print-cell img{width:32mm;height:32mm}.print-cell .code{letter-spacing:.06em;margin-top:2mm;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12pt;font-weight:700}.print-cell .meta{color:#444;margin-top:1mm;font-size:9pt}.login-box{max-width:420px;margin:2rem auto}.row-actions{flex-wrap:wrap;gap:.4rem;display:flex}.sku-picker{border:1px solid var(--line);background:#fff;border-radius:12px;margin:.75rem 0 1rem;padding:.85rem}.sku-chips{flex-wrap:wrap;gap:.35rem;margin-bottom:.6rem;display:flex}.chip{appearance:none;border:1px solid var(--accent);background:var(--accent-ink);color:var(--accent);cursor:pointer;border-radius:999px;padding:.2rem .65rem;font-size:.8rem}.sku-list{border:1px solid var(--line);background:#fffcf7;border-radius:10px;max-height:240px;overflow:auto}.sku-row{border-bottom:1px solid var(--line);cursor:pointer;grid-template-columns:auto 7.5rem 1fr auto;align-items:center;gap:.5rem;padding:.4rem .6rem;font-size:.9rem;display:grid}.sku-row:last-child{border-bottom:0}.sku-row input{width:auto}.sku-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:600}.sku-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.remember-row{cursor:pointer;align-items:center;gap:.5rem;margin:.75rem 0 1rem;font-size:.95rem;display:flex}.remember-row input{width:auto}.scan-panel .qr-reader{border:1px solid var(--line);background:#111;border-radius:12px;width:min(100%,420px);margin:.75rem auto 0;overflow:hidden}.scan-panel .qr-reader video{border-radius:12px}
