:root{--bg: #f3f4f6;--surface: #ffffff;--fg: #1b2129;--muted: #5d6673;--line: #d6dbe2;--accent: #1f5f9e;--on-accent: #ffffff;--good: #23784a;--good-soft: #e2f2e8;--warn: #9a5b00;--warn-soft: #fbefd9;--bad: #b3261e;--bad-soft: #fbe5e3;--font-display: "Barlow Condensed", "Noto Sans TC", "Arial Narrow", sans-serif;--font-body: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #12161b;--surface: #1a2027;--fg: #e4e8ee;--muted: #9aa4b1;--line: #2e3742;--accent: #6fa8e0;--on-accent: #0d1620;--good: #6cc495;--good-soft: #17301f;--warn: #e3ad55;--warn-soft: #33270f;--bad: #f08a80;--bad-soft: #3a1c1a;color-scheme:dark}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:15px;line-height:1.6}h1,h2{margin:0;text-wrap:balance}h2{font-size:1.1rem}.title{font-family:var(--font-display);font-weight:700;font-size:1.5rem;letter-spacing:.02em;line-height:1.1}.topbar{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;align-items:center;gap:8px 20px;padding:10px max(16px,env(safe-area-inset-right,0px)) 10px max(16px,env(safe-area-inset-left,0px))}.topbar nav{display:flex;flex-wrap:wrap;gap:4px;flex:1}.tab{border:1px solid transparent;background:none;color:var(--muted);padding:6px 12px}.tab.on{color:var(--fg);border-color:var(--line);background:var(--bg);font-weight:700}.who{color:var(--muted);font-size:.88rem;display:flex;gap:8px;align-items:center}.wrap{max-width:1080px;margin:0 auto;display:grid;gap:20px;padding:20px max(16px,env(safe-area-inset-right,0px)) 48px max(16px,env(safe-area-inset-left,0px))}.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px;display:grid;gap:14px;min-width:0}.login{min-height:100vh;display:grid;place-items:center;padding:16px}.login .panel{width:min(380px,100%)}.hint{color:var(--muted);font-size:.88rem;margin:0}.field{display:grid;gap:4px;font-size:.85rem;color:var(--muted)}.field.grow{flex:1}.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;align-items:end}.inline{display:flex;flex-wrap:wrap;gap:10px;align-items:end}textarea,input[type=text],input[type=email],input[type=password],input[type=date]{font:inherit;color:var(--fg);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:8px 10px;width:100%}textarea{font-family:var(--font-mono);font-size:.9rem;min-height:160px;resize:vertical}input[type=file]{font-size:.85rem;color:var(--muted);max-width:100%}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}button{font:inherit;font-weight:500;border-radius:6px;padding:8px 16px;cursor:pointer;border:1px solid var(--line);background:var(--surface);color:var(--fg)}button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}button.danger-btn{background:var(--bad);border-color:var(--bad);color:var(--on-accent)}button.link{border:none;background:none;color:var(--accent);padding:0;text-decoration:underline}button:disabled{opacity:.45;cursor:not-allowed}.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.actions.end{justify-content:flex-start}.row-between{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px}.check{display:flex;gap:6px;align-items:center;font-size:.88rem;color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{border-radius:999px;padding:3px 12px;font-size:.85rem;border:1px solid var(--line);font-variant-numeric:tabular-nums}.pill{display:inline-block;border-radius:4px;padding:0 8px;font-size:.8rem;font-weight:500;white-space:nowrap}.tone-good{background:var(--good-soft);color:var(--good)}.tone-warn{background:var(--warn-soft);color:var(--warn)}.tone-bad{background:var(--bad-soft);color:var(--bad)}.tone-muted{background:var(--bg);color:var(--muted)}.msg{margin:0;font-size:.9rem}.msg.good{color:var(--good)}.msg.bad{color:var(--bad)}.scroll{overflow-x:auto;border:1px solid var(--line);border-radius:6px}table{border-collapse:collapse;width:100%;font-size:.9rem}th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top;white-space:nowrap}th{font-size:.78rem;letter-spacing:.04em;color:var(--muted);font-weight:500;background:var(--bg)}th.num,td.num{text-align:right}td.note{white-space:normal;min-width:200px;color:var(--muted)}tr:last-child td{border-bottom:none}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0}.kv dt{color:var(--muted);font-size:.88rem}.kv dd{margin:0}.danger{border-top:1px solid var(--line);padding-top:14px;display:grid;gap:10px}.opts{display:flex;flex-wrap:wrap;gap:10px}.opt{display:flex;gap:8px;align-items:flex-start;border:1px solid var(--line);border-radius:6px;padding:8px 12px;cursor:pointer;font-size:.88rem}.opt small{display:block;color:var(--muted)}.sheet{display:flex;flex-wrap:wrap;gap:12px;overflow-x:auto;padding:12px;background:var(--bg);border-radius:6px}.label{background:#fff;color:#111;border:1px dashed #9aa4b1;border-radius:2px;display:flex;flex-direction:column;justify-content:space-between;padding:2.5mm 3mm;flex:none;overflow:hidden;font-family:var(--font-body)}.label .l-top{display:flex;justify-content:space-between;align-items:baseline;gap:2mm}.label .brand{font-family:var(--font-display);font-weight:700;letter-spacing:.04em}.label .copy{font-size:.62em;border:1px solid #111111;padding:0 1.2mm;border-radius:1mm}.label .model{font-size:.72em}.label .bc{display:flex;justify-content:center}.label .bc svg{display:block}.label .sn{font-family:var(--font-mono);font-weight:600;text-align:center;letter-spacing:.06em}.label .meta{display:flex;justify-content:space-between;font-size:.6em;font-family:var(--font-mono)}#print-root{display:none}@media print{#root{display:none}#print-root{display:block}body{background:#fff}.print-sheet .label{border:none;border-radius:0;break-after:page;page-break-after:always}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}
