:root{--ink: #1a1d1a;--paper: #faf7f0;--surface: #ffffff;--primary: #0e5741;--primary-dark: #0a4433;--primary-soft: #e8f0ec;--gold: #c9a227;--gold-soft: #faf3dc;--muted: #6a6f6a;--hairline: #e7e2d8;--danger: #b3261e;--danger-soft: #f6e7e5;--success: #2e7d32;--success-soft: #e6f0e7;--radius: 12px;--radius-pill: 999px;--text: var(--ink);--text-muted: var(--muted);--bg: var(--paper);--card: var(--surface);--border: var(--hairline);--green: var(--success);--red: var(--danger);--amber: var(--muted)}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--paper);color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4{line-height:1.25;letter-spacing:-.01em}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:inherit;font-weight:600;border:1px solid transparent;border-radius:var(--radius);padding:8px 16px;cursor:pointer;background:var(--primary);color:#fff;transition:background .15s,opacity .15s,border-color .15s}.btn:hover{background:var(--primary-dark)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.secondary{background:var(--primary-soft);color:var(--primary-dark)}.btn.secondary:hover{background:#dce8e1}.btn.ghost{background:transparent;color:var(--muted);border:1px solid var(--hairline)}.btn.ghost:hover{background:var(--surface);color:var(--ink)}.btn.danger{background:var(--danger-soft);color:var(--danger)}.btn.danger:hover{background:#f0d6d3}.btn.small{padding:4px 12px;font-size:13px}.btn.big{padding:16px 24px;font-size:18px}.btn.gold{background:var(--gold);color:var(--ink)}.btn.gold:hover{background:#b8931f}input,select,textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:8px 12px;width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--primary);outline-offset:-1px;border-color:var(--primary)}label.field{display:block;margin-bottom:16px;font-size:14px;font-weight:600}label.field>span{display:block;margin-bottom:4px}label.field small{font-weight:400;color:var(--muted)}label.check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}label.check input{width:auto}.card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:24px}.badge{display:inline-block;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:2px 8px;border-radius:var(--radius-pill);background:var(--paper);color:var(--muted);border:1px solid var(--hairline)}.badge.premium{background:var(--primary-soft);color:var(--primary-dark);border-color:transparent}.badge.basic{background:var(--paper);color:var(--muted)}.badge.green{background:var(--success-soft);color:var(--success);border-color:transparent}.badge.red{background:var(--danger-soft);color:var(--danger);border-color:transparent}.badge.amber{background:#f0ede4;color:var(--muted);border-color:transparent}.error-box{background:var(--danger-soft);color:var(--danger);border-radius:var(--radius);padding:8px 16px;margin:8px 0;font-size:14px}.success-box{background:var(--success-soft);color:var(--success);border-radius:var(--radius);padding:8px 16px;margin:8px 0;font-size:14px}.muted{color:var(--muted)}.empty{color:var(--muted);text-align:center;padding:32px 0}table.tbl{width:100%;border-collapse:collapse;font-size:14px}table.tbl th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:8px;border-bottom:1px solid var(--hairline)}table.tbl td{padding:8px;border-bottom:1px solid var(--hairline);vertical-align:middle}table.tbl tr:last-child td{border-bottom:none}.tx-earn{color:var(--success);font-weight:700}.tx-burn{color:var(--danger);font-weight:700}.tx-expire{color:var(--muted);font-weight:700}.thumb{width:48px;height:48px;object-fit:cover;border-radius:var(--radius);background:var(--primary-soft)}.switch{position:relative;display:inline-block;width:44px;height:24px;flex-shrink:0}.switch input{opacity:0;width:0;height:0}.switch .slider{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--hairline);border-radius:var(--radius-pill);transition:background .15s;cursor:pointer}.switch .slider:before{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;background:var(--surface);border-radius:50%;transition:transform .15s}.switch input:checked+.slider{background:var(--primary)}.switch input:checked+.slider:before{transform:translate(20px)}.stamp-row{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}.stamp-dot{width:32px;height:32px;border-radius:var(--radius-pill);border:1px solid var(--hairline);background:var(--surface);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:var(--muted)}.stamp-dot.filled{background:var(--gold);border-color:var(--gold);color:var(--ink)}.stamp-progress{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.stamp-progress .count{font-weight:700}.banner-gold{background:var(--gold-soft);border:1px solid var(--gold);color:var(--ink);border-radius:var(--radius);padding:12px 16px;margin:8px 0;font-size:15px}.banner-gold strong{display:block}.banner-green{background:var(--success-soft);border:1px solid var(--success);color:var(--success);border-radius:var(--radius);padding:12px 16px;margin:8px 0;font-size:15px}.stamp-block{border-top:1px solid var(--hairline);padding:16px 0 8px;margin-top:8px}.stamp-block .reward-line{font-size:14px;color:var(--muted)}.landing{min-height:100%;display:flex;flex-direction:column;align-items:center;padding:56px 24px}.wordmark{font-size:44px;font-weight:800;color:var(--primary);letter-spacing:-.03em}.wordmark .dot{color:var(--ink)}.landing .tagline{color:var(--muted);margin:8px 0 40px;text-align:center;max-width:480px}.landing-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;width:100%;max-width:860px}.landing-card{display:block;background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:32px 24px;text-align:center;color:var(--ink);transition:border-color .12s}.landing-card:hover{text-decoration:none;border-color:var(--primary)}.landing-card .icon{font-size:36px;margin-bottom:8px}.landing-card h2{font-size:18px;margin-bottom:8px}.landing-card p{font-size:14px;color:var(--muted)}.landing .register-link{margin-top:40px;font-size:15px}.auth-wrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px}.auth-card{width:100%;max-width:400px;background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:32px 24px}.auth-card h1{font-size:22px;margin:8px 0 24px}.auth-card .btn{width:100%;margin-top:8px}.auth-card .back{font-size:13px}.dash{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--hairline);display:flex;flex-direction:column;padding:24px 16px;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar .brand{font-size:24px;font-weight:800;color:var(--primary);padding:0 8px 4px}.sidebar .venue-name{padding:0 8px 16px;border-bottom:1px solid var(--hairline);margin-bottom:16px}.sidebar .venue-name strong{display:block;font-size:14px}.sidebar nav{display:flex;flex-direction:column;gap:2px;flex:1}.sidebar nav a{display:block;padding:8px 12px;border-radius:var(--radius);color:var(--ink);font-size:14px;font-weight:500}.sidebar nav a:hover{background:var(--paper);text-decoration:none}.sidebar nav a.active{background:var(--primary);color:#fff;font-weight:700}.sidebar .logout{margin-top:16px}.dash-main{flex:1;padding:32px;max-width:1080px}.dash-main>h1{font-size:24px;margin-bottom:24px}.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-head h1{font-size:24px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:24px}.stat-card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:16px}.stat-card .num{font-size:26px;font-weight:800;color:var(--primary-dark)}.stat-card .lbl{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.wizard-step{display:flex;align-items:center;gap:16px;padding:12px 0;border-bottom:1px solid var(--hairline)}.wizard-step:last-child{border-bottom:none}.wizard-step .circle{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;background:var(--primary-soft);color:var(--primary-dark)}.wizard-step.done .circle{background:var(--success-soft);color:var(--success)}.wizard-step .lbl{flex:1}.wizard-step.done .lbl{color:var(--muted);text-decoration:line-through}.deal-row{display:flex;gap:16px;align-items:flex-start;padding:16px 0;border-bottom:1px solid var(--hairline)}.deal-row:last-child{border-bottom:none}.deal-row img{width:64px;height:64px;object-fit:cover;border-radius:var(--radius)}.deal-row .body{flex:1}.deal-row .meta{font-size:12px;color:var(--muted);margin-top:4px}.steps-bar{display:flex;gap:8px;margin-bottom:16px}.steps-bar .step{flex:1;text-align:center;font-size:13px;font-weight:600;color:var(--muted);padding-bottom:8px;border-bottom:2px solid var(--hairline)}.steps-bar .step.active{color:var(--primary-dark);border-bottom-color:var(--primary)}.template-chips{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 16px}.template-chips button{font:inherit;font-size:13px;border:1px solid var(--hairline);background:var(--surface);border-radius:var(--radius-pill);padding:4px 12px;cursor:pointer;color:var(--ink)}.template-chips button:hover{border-color:var(--primary);color:var(--primary-dark)}.upload-box{border:1px dashed var(--hairline);border-radius:var(--radius);padding:24px;text-align:center;color:var(--muted);cursor:pointer;background:var(--surface)}.upload-box:hover{border-color:var(--primary)}.upload-box img{max-width:180px;max-height:130px;border-radius:var(--radius);display:block;margin:0 auto 8px}.chart-card svg{width:100%;height:auto;display:block}.rank-list{list-style:none;counter-reset:rank}.rank-list li{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--hairline);counter-increment:rank}.rank-list li:last-child{border-bottom:none}.rank-list li:before{content:counter(rank) ".";font-weight:700;color:var(--primary);margin-right:8px}.rank-list li span:first-of-type{flex:1}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}@media(max-width:700px){.form-grid{grid-template-columns:1fr}}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:start}@media(max-width:900px){.two-col{grid-template-columns:1fr}}.notif{padding:12px 0;border-bottom:1px solid var(--hairline)}.notif:last-child{border-bottom:none}.notif .when{font-size:12px;color:var(--muted)}.staff-app{max-width:480px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;padding:16px 16px calc(16px + env(safe-area-inset-bottom))}.staff-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.staff-head .brand{font-size:22px;font-weight:800;color:var(--primary)}.staff-head .who{font-size:13px;color:var(--muted);text-align:right}.staff-body{flex:1}.scan-btn{width:100%;padding:32px 24px;font-size:22px;font-weight:800;border:none;border-radius:var(--radius);background:var(--primary);color:#fff;cursor:pointer;margin:16px 0}.scan-btn:hover{background:var(--primary-dark)}.scan-btn:active{transform:scale(.98)}.video-wrap{position:relative;border-radius:var(--radius);overflow:hidden;background:#111;margin-bottom:16px}.video-wrap video{width:100%;display:block;max-height:60vh;object-fit:cover}.video-wrap .frame{position:absolute;top:12%;right:12%;bottom:12%;left:12%;border:2px solid rgba(14,87,65,.9);border-radius:var(--radius);pointer-events:none}.guest-card{background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:16px;margin-bottom:16px}.guest-card .guest-top{display:flex;align-items:center;gap:12px;margin-bottom:16px}.guest-card .avatar{width:48px;height:48px;border-radius:50%;object-fit:cover;background:var(--primary-soft);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--primary-dark);font-size:20px;flex-shrink:0}.guest-card h2{font-size:19px}.staff-deal{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--hairline)}.staff-deal .txt{flex:1;font-size:15px}.staff-footer{margin-top:24px;background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius);padding:12px 16px;display:flex;justify-content:space-around;text-align:center}.staff-footer .item .num{font-weight:800;font-size:18px;color:var(--primary-dark)}.staff-footer .item .lbl{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}.paste-row{display:flex;gap:8px;margin-top:8px}.admin-wrap{max-width:1000px;margin:0 auto;padding:24px}.admin-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--hairline);margin-bottom:24px;flex-wrap:wrap}.tabs button{font:inherit;font-weight:600;font-size:14px;background:none;border:none;padding:8px 16px;cursor:pointer;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.tabs button.active{color:var(--primary-dark);border-bottom-color:var(--primary)}.app-card{margin-bottom:16px}.app-card .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px 24px;margin:16px 0;font-size:14px}.app-card .grid dt{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.app-card .actions{display:flex;gap:8px;margin-top:8px}.register-wrap{max-width:620px;margin:0 auto;padding:40px 24px}.register-wrap h1{margin:8px 0}.register-wrap .sub{color:var(--muted);margin-bottom:24px}@media(max-width:820px){.dash{flex-direction:column}.sidebar{width:100%;height:auto;position:static;flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px}.sidebar nav{flex-direction:row;flex-wrap:wrap;width:100%}.sidebar .venue-name{border:none;padding:0 8px;margin:0}.dash-main{padding:16px}}
