:root{--ink:#243026;--ink-2:#5c7a61;--ink-3:#7da684;--paper:#f1f7ef;--surface:#fff;--surface-2:#f7fbf7;--line:#e3efe4;--line-2:#c7ddc9;--accent:#1f6b2e;--accent-ink:#17532a;--accent-soft:#eaf3ec;--alert:#b04a38;--alert-soft:#fcebe4;--ok:#2e6b38;--ok-soft:#edf7ee;--gold:#b8944a;--out:#a8512d;--r:12px;--r-lg:20px;--r-pill:999px;--shadow:0 2px 3px rgba(30,50,56,.05),0 14px 30px -16px rgba(30,50,56,.26);--font:"PingFang TC","Hiragino Sans TC","Noto Sans TC","Microsoft JhengHei",-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:linear-gradient(180deg,#e6f2e3 0,#eff6ed 45%,var(--paper) 100%);background-attachment:fixed;color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;line-height:1.6}button{color:inherit}button,input,select{font:inherit}.wrap{max-width:520px;margin:0 auto;padding:20px 16px 40px}.wide{max-width:1080px}.head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}.head h1{font-size:19px;margin:0;letter-spacing:.01em;color:var(--accent)}.punch .head{margin-bottom:10px}.punch .head h1{font-size:15px;font-weight:700;opacity:.75}.head .store{font-size:13px;color:var(--ink-2)}.card{background:var(--surface);border:1px solid var(--line-2);border-radius:16px;padding:18px;box-shadow:0 1px 2px rgba(36,48,38,.04);margin-bottom:12px}.card.wm{position:relative;overflow:hidden}.card.wm>.wm-text{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;transform:rotate(-32deg);font-size:clamp(58px,21vw,88px);font-weight:800;letter-spacing:.14em;text-indent:.14em;color:var(--accent);opacity:.07;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;line-height:1}.eyebrow{font-size:12px;letter-spacing:.04em;font-weight:600;margin:0 0 10px}.eyebrow,.hint{color:var(--ink-2)}.hint{font-size:12.5px;line-height:1.75;margin:12px 2px 0}.clock{font-family:var(--mono);font-size:44px;font-weight:600;letter-spacing:.02em;margin:2px 0 0}.clock,.today{text-align:center}.today{color:var(--ink-2);font-size:13px;margin:2px 0 4px}.store-big{text-align:center;font-size:26px;font-weight:800;color:var(--accent);letter-spacing:.08em;margin:0 0 6px;line-height:1.2}.punch .store-big{font-size:30px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:11px 16px;border-radius:var(--r-pill);border:1px solid var(--line-2);background:var(--surface);cursor:pointer;font-size:14px;transition:.15s}a.btn{color:var(--ink);text-decoration:none}.btn:hover{border-color:var(--ink-3)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.ghost{background:transparent;border-color:transparent;color:var(--ink-2)}.btn.big{width:100%;padding:20px;font-size:19px;font-weight:600;border-radius:var(--r-lg)}.btn.out{background:var(--surface-2)}.row{display:flex;gap:10px}.row>*{flex:1 1}.field{display:block;margin-bottom:12px}.field span{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:5px}.field input,.field select{width:100%;padding:11px 12px;border:1px solid var(--line-2);border-radius:var(--r);background:var(--surface)}.pin{font-family:var(--mono);font-size:26px;letter-spacing:.5em;text-align:center}.msg{border-radius:var(--r);padding:11px 14px;font-size:13.5px;margin-bottom:12px}.msg.ok{background:var(--ok-soft);color:#20573f}.msg.bad{background:var(--alert-soft);color:#8c3520}.msg.wait{background:var(--accent-soft);color:var(--accent-ink)}.code{font-family:var(--mono);font-size:clamp(56px,17vw,120px);font-weight:700;letter-spacing:.12em;text-align:center;margin:8px 0 0;color:var(--ink)}.bar{height:6px;background:var(--line);border-radius:var(--r-pill);overflow:hidden;margin-top:14px}.bar i{height:100%;background:var(--accent);transition:width 1s linear}.bar i,.qr{display:block}.qr{margin:0 auto;width:min(62vw,320px);height:auto;image-rendering:pixelated}table{width:100%;border-collapse:collapse;font-size:13px}td,th{padding:8px 9px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}th{font-weight:600;color:var(--ink-2);font-size:12px}td.num{font-family:var(--mono);text-align:right}.late{color:var(--alert);font-weight:600}.scroll{overflow-x:auto}body:has(main[data-board]) .foot{display:none}.foot{margin-top:26px;padding-top:14px;border-top:1px solid var(--line);text-align:center;font-size:11.5px;color:var(--ink-3);letter-spacing:.04em}.foot b{color:var(--accent);font-weight:800;letter-spacing:.08em}.punch .field span{font-size:16px;font-weight:700;color:var(--accent);margin-bottom:7px}.punch .field input,.punch .field select{padding:14px 12px;font-size:18px}.punch .pin{font-size:30px}.punch .msg{font-size:16px;padding:14px 16px;line-height:1.75}.punch .hint{font-size:14px}.punch .head h1{font-size:22px}.punch .head .store{font-size:15px;font-weight:600}.punch .btn.big{padding:26px;font-size:24px;font-weight:700}.punch .btn.out{background:var(--out);border-color:var(--out);color:#fff}.punch .btn.big.arm{box-shadow:inset 0 0 0 4px hsla(0,0%,100%,.85);flex-direction:column;gap:0}.punch .btn.big small{font-size:15px;font-weight:600;margin-top:3px;opacity:.92}.mine{display:inline-flex;align-items:center;padding:12px 20px;border-radius:var(--r-pill);border:1px solid var(--line-2);background:var(--surface);font-size:15px;font-weight:700;color:var(--ink-2);text-decoration:none}.mine,.mine-row{justify-content:center}.mine-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}.mine-row>*{flex:1 1 auto;min-width:0}button.mine{font-family:inherit;cursor:pointer}button.mine:disabled{opacity:.5}.whois{display:flex;align-items:center;gap:12px;margin-bottom:14px}.punch .whois{margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--line)}.whois .who{flex:1 1;min-width:0;font-size:26px;font-weight:700;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whois .btn{flex:none;font-size:15px;padding:9px 16px}.done{position:fixed;inset:0;z-index:50;background:var(--ok-soft);color:#1c4f39;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:24px calc(24px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(24px + env(safe-area-inset-left));text-align:center}.done .tick{width:104px;height:104px;border-radius:50%;background:var(--ok);color:#fff;font-size:60px;line-height:104px;font-weight:700;margin-bottom:6px}.done .kind{font-size:34px;font-weight:800;letter-spacing:.02em}.done .at{font-family:var(--mono);font-size:52px;font-weight:700;letter-spacing:.02em}.done .who{font-size:20px;font-weight:600;color:#2c6650}.done .note{font-size:15px;color:#2c6650;margin-top:2px}.done .warn{margin-top:14px;max-width:min(340px,90%);padding:14px 16px;border-radius:var(--r);background:#fff3dc;border:1px solid #e8c88a;color:#7a5200;font-size:17px;font-weight:700;line-height:1.75;text-align:center}.done .btn{margin-top:22px;width:min(320px,100%);padding:20px;font-size:21px;font-weight:700;border-radius:var(--r-lg);background:var(--ok);border-color:var(--ok);color:#fff}.done .claim{margin-top:14px;max-width:min(340px,90%);width:100%;padding:14px 16px;border-radius:var(--r);background:#fff;border:1px solid #cbe3d4;text-align:center}.done .claim-q{font-size:18px;font-weight:800;color:#1c4f39}.done .claim-row{display:flex;gap:8px;align-items:center;justify-content:center;margin-top:10px}.done .claim-in{flex:1 1;min-width:0;padding:10px 12px;font-size:26px;font-weight:700;font-family:var(--mono);text-align:center;border:1px solid #cbe3d4;border-radius:var(--r);background:#fff;color:#1c4f39}.done .claim-row .btn{margin-top:0;width:auto;flex:none;padding:14px 18px;font-size:18px}.done .claim-err{margin-top:8px;font-size:15px;font-weight:700;color:#b3261e}.done .claim-hint{margin-top:8px;font-size:14px;color:#5c7a61;line-height:1.6}.done .claim-ok{font-size:18px;font-weight:800;color:var(--ok)}.punch .field span small{display:block;font-size:14.5px;font-weight:400;color:var(--ink-2);margin-top:3px}.mine.done-line{color:var(--ok);background:var(--ok-soft);border-color:transparent;cursor:default}.done .late{margin-top:14px;display:inline-flex;align-items:center;padding:9px 22px;border-radius:999px;font-size:22px;font-weight:800;letter-spacing:.02em}.done .late.l0{background:#fff;border:1.5px solid #9ccba5;color:var(--ok)}.done .late.l1{background:#fff3dc;border:1.5px solid #e8c88a;color:#7a5200}.done .late.l2{background:var(--alert-soft);border:1.5px solid #e3a89a;color:var(--alert)}.done .mon{font-size:16px;font-weight:700;color:#2c6650;margin-top:6px}.done .mon b{font-size:18px}.done .mon b,td.lt{font-family:var(--mono)}td.lt{text-align:center;font-weight:700}td.lt0{color:#a0a89e}td.lt1{color:#9a6a00}td.lt2{color:var(--alert)}.lt-void{font-family:var(--font);font-size:11.5px;font-weight:700;color:#a0a89e}.sumrow{display:flex;gap:8px;margin:0 0 12px}.sumrow div{flex:1 1;min-width:0;border:1px solid var(--line-2);border-radius:12px;padding:8px 10px;background:var(--surface-2)}.sumrow span{display:block;font-size:11.5px;color:var(--ink-2);font-weight:600}.sumrow b{font-size:20px}.sumrow .lt2c{color:var(--alert)}.sumrow .ltvc{color:var(--ink-2)}