:root{color-scheme:light;--bg:#f6f1ea;--card:#ffffff;--ink:#2b2118;--ink-2:#5c4d3e;--muted:#7d6e5f;--line:#e7dccd;--line-2:#f0e8dc;--brand:#5b3a1e;--brand-ink:#f6ead9;--accent:#b5812f;--ok:#1d7347;--ok-bg:#e5f3ec;--warn:#8f5505;--warn-bg:#fdf0db;--bad:#b3261e;--bad-bg:#fbe8e6;--info:#2a5d8f;--info-bg:#e7f0f9;--input-bg:#fffdfa;--tab-bg:#ece3d6;--tab-on:#ffffff;--track:#eee5d8;--gray-bg:#eee7dd;--on-brand:#ffffff;--on-ok:#ffffff;--on-bad:#ffffff;--topbar-bg:var(--brand);--topbar-ink:var(--brand-ink);--radius:14px;--font:-apple-system,BlinkMacSystemFont,"PingFang TC","Microsoft JhengHei","Noto Sans TC","Helvetica Neue",Arial,sans-serif;--mono:"SF Mono",SFMono-Regular,Menlo,Consolas,monospace}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}#register{scroll-margin-top:12px}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.6}a{color:var(--brand)}button,input,select,textarea{font:inherit;color:inherit}h1,h2,h3{line-height:1.35;margin:0}.brandbar{display:flex;align-items:center;gap:14px;background:var(--brand);color:var(--brand-ink);padding:10px 20px}.brand-logo{display:block;height:38px;width:auto}.brand-label{border-left:1px solid color-mix(in srgb,var(--brand-ink) 45%,transparent);padding-left:14px;letter-spacing:.22em;font-size:13px;font-weight:600}.container{width:100%;max-width:560px;margin:0 auto;padding:20px 16px 48px}.container.wide{max-width:1120px}.stack>*+*{margin-top:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px}.muted{color:var(--muted)}.small{font-size:13px}.center{text-align:center}.poster{display:block;width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--line);background:var(--card)}.modes{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px}.mode{display:grid;justify-items:center;align-content:center;grid-gap:4px;gap:4px;min-height:76px;padding:10px 8px;border-radius:16px;border:2px solid var(--line);background:var(--card);color:var(--ink-2);font-weight:700;font-size:16px;line-height:1.25;text-align:center;cursor:pointer}.mode[aria-pressed=true]{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}.mode svg{width:26px;height:26px}.pf .field+.field{margin-top:18px}.link-banner{display:flex;align-items:center;justify-content:space-between;gap:12px}.link-banner .btn{flex:none}.cats{display:grid;grid-gap:8px;gap:8px}.cat{border:1.5px solid var(--line);border-radius:12px;padding:4px 12px 10px;background:var(--card)}.cat.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 7%,var(--card))}.cat-head{display:flex;align-items:center;gap:12px;min-height:48px;font-size:17px;font-weight:700;color:var(--ink);cursor:pointer}.cat-head input{width:24px;height:24px;accent-color:var(--brand);flex:none}.cat-fields{display:grid;grid-template-columns:1fr 1.7fr;grid-gap:10px;gap:10px}.cat-fields .field+.field{margin-top:0}.unit{font-size:13px!important;font-weight:600;color:var(--muted)!important}.sumline{display:flex;justify-content:space-between;align-items:baseline;font-size:15px;color:var(--ink-2);margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}.sumline b{font-size:19px;color:var(--ink);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.ok-text{font-size:13px;color:var(--ok)}.warn-text{font-size:13px;color:var(--warn);line-height:1.55}.pf .field label.newcust{display:flex;align-items:center;gap:12px;min-height:56px;padding:6px 14px;border:1.5px solid var(--line);border-radius:12px;background:var(--card);font-size:17px;font-weight:700;color:var(--ink);cursor:pointer}.pf .field label.newcust.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 7%,var(--card))}.pf .newcust input{width:24px;height:24px;accent-color:var(--brand);flex:none}.pf .newcust .h{margin-left:auto;font-size:12px;font-weight:500;color:var(--muted);text-align:right}.adders{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}.pf .adders>.field{flex:1 1 100%;margin-top:0}.adder{display:inline-flex;align-items:center;gap:6px;min-height:46px;padding:8px 16px;border:1.5px dashed var(--brand);border-radius:999px;background:transparent;color:var(--brand);font-size:15px;font-weight:700;cursor:pointer}.adder:hover{background:color-mix(in srgb,var(--brand) 8%,var(--card))}.adder-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.adder-x{border:0;background:none;padding:4px 0;color:var(--muted);font:inherit;font-size:14px;text-decoration:underline;cursor:pointer}.plist{display:grid;grid-gap:10px;gap:10px}.pcard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 14px}.pcard.void{opacity:.6}.pcard .top{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.pcard .pcode{font-family:var(--mono);font-weight:700;letter-spacing:.04em;font-size:16px}.pcard .pamt{margin-left:auto;font-weight:800;font-size:18px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.pcard .pitems{margin-top:6px;font-size:14px;color:var(--ink-2);line-height:1.6}.pcard .pmeta{margin-top:4px;font-size:12.5px;color:var(--muted)}.pcard .pbtns{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}.container.overview{max-width:880px}.ov-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.ov-head h1{font-size:26px}.ov-count{background:var(--ok-bg);color:var(--ok);font-size:13px;font-weight:700;padding:3px 12px;border-radius:999px}.ov-sub{margin:0}.ov-list{display:grid;grid-gap:12px;gap:12px}.ev-row{display:grid;grid-template-columns:92px minmax(0,1fr);grid-template-areas:"thumb info" "side side";grid-gap:12px 14px;gap:12px 14px;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);color:inherit;text-decoration:none;transition:border-color .15s,box-shadow .15s}.ev-row:hover{border-color:var(--brand);box-shadow:0 6px 18px rgba(91,58,30,.1)}.ev-row:focus-visible{outline:3px solid color-mix(in srgb,var(--brand) 45%,transparent);outline-offset:2px}.ev-thumb{grid-area:thumb;position:relative;width:92px;height:92px;border-radius:12px;overflow:hidden;background:var(--gray-bg)}.ev-thumb img{display:block;width:100%;height:100%;object-fit:cover}.ev-date{position:absolute;left:5px;top:5px;color:var(--on-brand);font-size:11px;font-weight:700;line-height:1;padding:4px 6px;border-radius:7px}.ev-date,.ev-thumb.ph{background:var(--brand)}.ev-thumb.ph{color:var(--brand-ink);display:grid;place-items:center;text-align:center}.ph-date{display:grid;line-height:1.15;font-size:12px;letter-spacing:.08em}.ph-date b{font-size:36px;line-height:1;letter-spacing:0;color:#fff}.ev-info{grid-area:info;min-width:0;align-self:center}.ev-title{font-size:17px;line-height:1.4;margin:0 0 6px}.ev-meta{margin:0;display:grid;grid-gap:3px;gap:3px;font-size:14px}.ev-meta>div{display:grid;grid-template-columns:2.6em minmax(0,1fr);grid-gap:8px;gap:8px}.ev-meta dt{color:var(--muted)}.ev-meta dd{margin:0;color:var(--ink-2)}.ev-side{grid-area:side;display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:12px;border-top:1px dashed var(--line)}.ev-status{display:grid;grid-gap:2px;gap:2px;font-size:13px;min-width:0}.ev-left{font-weight:700;color:var(--ok)}.ev-left.low{color:var(--warn)}.ev-deadline{color:var(--muted)}.ev-cta{flex:none}.ev-row.is-full .ev-title{color:var(--ink-2)}.ev-row.is-full .ev-thumb{opacity:.75}@media (min-width:720px){.ev-row{grid-template-columns:132px minmax(0,1fr) auto;grid-template-areas:"thumb info side";align-items:center;gap:18px;padding:16px 18px}.ev-thumb{width:132px;height:132px}.ev-date{font-size:12px;padding:5px 8px}.ph-date b{font-size:46px}.ev-title{font-size:19px;margin-bottom:8px}.ev-meta{font-size:15px}.ev-side{flex-direction:column;align-items:flex-end;justify-content:center;gap:12px;min-width:150px;padding-top:0;border-top:0}.ev-status{text-align:right}}.hero h1{font-size:26px;font-weight:700;letter-spacing:.01em}.meta{list-style:none;padding:0;margin:14px 0 0;display:grid;grid-gap:6px;gap:6px}.meta li{display:flex;gap:12px;font-size:15px}.meta .k{color:var(--muted);flex:none;width:2.6em}.desc{margin:14px 0 0;color:var(--ink-2)}.contact,.desc{white-space:pre-line}.contact{color:var(--muted);font-size:13px;margin-top:20px}.field{display:grid;grid-gap:6px;gap:6px}.field+.field{margin-top:16px}.field label{font-size:14px;font-weight:600;color:var(--ink-2)}.input{width:100%;min-height:48px;padding:10px 14px;border:1.5px solid var(--line);border-radius:10px;background:var(--input-bg);font-size:17px;outline:none;transition:border-color .15s,box-shadow .15s}.input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(91,58,30,.14)}.input[aria-invalid=true]{border-color:var(--bad)}.hint{font-size:13px;color:var(--muted)}.field-error{font-size:13px;color:var(--bad)}.suggest{font-size:13px;color:var(--warn)}.suggest button{all:unset;cursor:pointer;text-decoration:underline;font-weight:600}.check{display:flex;gap:10px;align-items:flex-start;margin-top:18px;font-size:13px;color:var(--ink-2);line-height:1.6}.check input{width:20px;height:20px;margin-top:2px;flex:none;accent-color:var(--brand)}.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:10px 20px;border-radius:999px;border:1.5px solid transparent;font-weight:600;font-size:16px;cursor:pointer;text-decoration:none;transition:transform .05s,background .15s,opacity .15s}.btn:active{transform:translateY(1px)}.btn[disabled]{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);color:var(--on-brand)}.btn-primary:hover:not([disabled]){filter:brightness(1.12)}.btn-secondary{background:var(--card);border-color:var(--brand);color:var(--brand)}.btn-ghost{background:transparent;border-color:var(--line);color:var(--ink-2)}.btn-danger{background:var(--bad);color:var(--on-bad)}.btn-ok{background:var(--ok);color:var(--on-ok)}.btn-block{display:flex;width:100%}.btn-lg{min-height:56px;font-size:18px}.btn-sm{min-height:34px;padding:4px 14px;font-size:14px}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.notice{border-radius:12px;padding:12px 14px;font-size:14px;line-height:1.6}.notice.ok{background:var(--ok-bg);color:var(--ok)}.notice.warn{background:var(--warn-bg);color:var(--warn)}.notice.bad{background:var(--bad-bg);color:var(--bad)}.notice.info{background:var(--info-bg);color:var(--info)}.ticket{text-align:center}.ticket .tick{width:52px;height:52px;border-radius:50%;background:var(--ok-bg);color:var(--ok);display:grid;place-items:center;margin:0 auto 10px}.ticket h2{font-size:22px}.ticket .who{color:var(--ink-2);margin-top:2px}.qr-wrap{position:relative;width:min(280px,100%);margin:18px auto 6px;padding:12px;background:#fff;border:1px solid var(--line);border-radius:16px}.qr-wrap img,.qr-wrap svg{display:block;width:100%;height:auto}.qr-wrap.used img,.qr-wrap.used svg{opacity:.18}.qr-used{position:absolute;inset:0;display:grid;place-items:center;font-size:24px;font-weight:800;color:var(--bad);transform:rotate(-12deg);letter-spacing:.1em}.code-label{font-size:12px;color:var(--muted);margin-top:14px}.code{font-size:34px;font-weight:700;letter-spacing:.14em;color:var(--ink)}.code,.mono{font-family:var(--mono)}.mono{letter-spacing:.08em}.ticket-info{text-align:left;margin-top:18px;border-top:1px dashed var(--line);padding-top:14px}.badge{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:700;white-space:nowrap}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.bad{background:var(--bad-bg);color:var(--bad)}.badge.gray{background:var(--gray-bg);color:var(--ink-2)}.badge.info{background:var(--info-bg);color:var(--info)}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:5;background:var(--topbar-bg);color:var(--topbar-ink);padding:10px 16px;display:flex;align-items:center;gap:12px}.topbar .title{font-weight:700;letter-spacing:.04em}.topbar .sub{font-size:12px;opacity:.85}.topbar .grow{flex:1 1}.topbar .btn-ghost{border-color:color-mix(in srgb,var(--topbar-ink) 40%,transparent);color:var(--topbar-ink)}.tabs{display:flex;background:var(--tab-bg);border-radius:12px;padding:4px;gap:4px}.tabs button{flex:1 1;border:0;background:transparent;padding:10px 0;border-radius:9px;font-weight:600;color:var(--ink-2);cursor:pointer}.tabs button[aria-selected=true]{background:var(--tab-on);color:var(--brand);box-shadow:0 1px 3px rgba(0,0,0,.1)}.bar{height:8px;background:var(--track);overflow:hidden;margin-top:8px}.bar,.bar>div{border-radius:999px}.bar>div{height:100%;background:var(--ok);transition:width .3s}.scanner{position:relative;width:100%;aspect-ratio:4/3;background:#1a1410;border-radius:var(--radius);overflow:hidden}.scanner video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.scanner .frame{position:absolute;inset:19% 27%;border:3px solid rgba(255,255,255,.85);border-radius:18px;box-shadow:0 0 0 999px rgba(0,0,0,.35);pointer-events:none}.scanner .placeholder{position:absolute;inset:0;display:grid;place-items:center;align-content:center;grid-gap:12px;gap:12px;color:#d9ccbb;text-align:center;padding:24px}.result{border-radius:var(--radius);padding:20px;text-align:center;border:2px solid transparent}.result.ok{background:var(--ok-bg);border-color:var(--ok)}.result.bad{background:var(--bad-bg);border-color:var(--bad)}.result.warn{background:var(--warn-bg);border-color:var(--warn)}.result.neutral{background:var(--card);border-color:var(--line)}.result .big{font-size:28px;font-weight:800}.result.ok .big{color:var(--ok)}.result.bad .big{color:var(--bad)}.result.warn .big{color:var(--warn)}.result .name{font-size:24px;font-weight:700;margin-top:8px}.result .line{color:var(--ink-2);margin-top:2px}.result .code{font-size:26px;margin-top:6px}.result .actions{grid-gap:10px}.duo,.result .actions{display:grid;gap:10px;margin-top:18px}.duo{grid-template-columns:1fr 1fr;grid-gap:10px}.result .duo+.actions{margin-top:10px}.duo-btn{display:grid;justify-items:center;align-content:center;grid-gap:2px;gap:2px;min-height:92px;padding:10px 8px;border-radius:16px;border:2px solid transparent;font:inherit;font-size:19px;font-weight:800;line-height:1.25;text-align:center;text-decoration:none;cursor:pointer;transition:transform .05s,filter .15s,opacity .15s}.duo-btn svg{width:28px;height:28px;margin-bottom:2px}.duo-btn .spinner{width:24px;height:24px;margin-bottom:2px}.duo-btn .h{font-size:12px;font-weight:500;opacity:.92}.duo-btn:active:not([disabled]){transform:translateY(1px)}.duo-btn:hover:not([disabled]){filter:brightness(1.1)}.duo-btn:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.duo-btn[disabled]{opacity:.55;cursor:not-allowed}.duo-btn.scan{background:var(--ok);color:var(--on-ok)}.duo-btn.buy{background:var(--brand);color:var(--on-brand)}.list{display:grid;grid-gap:8px;gap:8px}.li{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;text-align:left;width:100%;cursor:pointer}.li .grow{flex:1 1;min-width:0}.li .t{font-weight:600}.li .s{font-size:13px;color:var(--muted)}.toggle{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--ink-2)}.toggle input{width:20px;height:20px;accent-color:var(--brand)}.login{max-width:380px;margin:0 auto}.slot-field{border:0;margin:0 0 18px;padding:0;min-width:0}.slot-field legend{padding:0;margin-bottom:8px;font-size:14px;font-weight:600;color:var(--ink-2)}.slot-list{display:grid;grid-gap:10px;gap:10px}.slot-opt{display:flex;align-items:center;gap:12px;min-height:52px;padding:10px 14px;border:1.5px solid var(--line);border-radius:12px;background:var(--input-bg);cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}.slot-opt input{width:20px;height:20px;flex:none;accent-color:var(--brand)}.slot-opt .slot-name{flex:1 1;font-size:16px;font-weight:600;color:var(--ink)}.slot-opt .slot-left{flex:none;font-size:13px;color:var(--muted)}.slot-opt .slot-left.low{color:var(--warn);font-weight:600}.slot-opt .slot-left.full{font-weight:600}.slot-opt.on{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 7%,var(--input-bg));box-shadow:0 0 0 3px rgba(91,58,30,.12)}.slot-opt.off{cursor:not-allowed;opacity:.55;background:var(--gray-bg)}.slot-picked{display:inline-block;margin:8px auto 0;padding:4px 14px;border-radius:999px;background:var(--gray-bg);color:var(--ink);font-size:14px;font-weight:600}