
:root{--ink:#172033;--muted:#667085;--line:#e5e7eb;--bg:#f6f8fb;--card:#fff;--brand:#111827;--ok:#ecfdf3;--err:#fff1f2;--warn:#fff7ed}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.65 system-ui,-apple-system,"Noto Sans TC","Segoe UI",sans-serif}
.topbar{background:var(--brand);color:white}.nav{max-width:1280px;margin:auto;padding:14px 20px;display:flex;align-items:center;gap:15px;flex-wrap:wrap}
.nav a{color:#d7dce5;text-decoration:none}.nav a:hover{color:#fff}.brand{font-size:18px;font-weight:800;color:#fff!important;margin-right:10px}.brand small{font-weight:500;color:#aeb6c3}.spacer{flex:1}.user{color:#9ca3af}
.container{max-width:1280px;margin:auto;padding:26px 20px 50px}h1{font-size:30px}h2{font-size:21px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;margin:14px 0;box-shadow:0 1px 2px rgba(16,24,40,.03)}.stat{font-size:32px;font-weight:800}.muted{color:var(--muted)}.small{font-size:13px}
input,select,textarea{width:100%;border:1px solid #d0d5dd;border-radius:9px;padding:10px 11px;background:#fff;margin:5px 0 12px;font:inherit}.inline{display:flex;gap:12px;align-items:end;flex-wrap:wrap}.inline>div{flex:1;min-width:180px}
button,.btn{border:0;border-radius:9px;padding:10px 14px;background:#111827;color:#fff;text-decoration:none;display:inline-block;cursor:pointer;font:inherit}.btn.secondary{background:#475467}.btn.danger{background:#b42318}.btn.light{background:#eef2f6;color:#172033}
.notice{padding:12px 14px;border-radius:10px;margin:12px 0;background:var(--ok)}.notice.err{background:var(--err)}.notice.warn{background:var(--warn)}
.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;background:#fff}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top;white-space:nowrap}td.wrap{white-space:normal;min-width:260px}
.badge{display:inline-block;padding:2px 8px;border-radius:999px;background:#eef2f6;font-size:12px}.badge.ok{background:#dcfae6}.badge.err{background:#fee4e2}.badge.warn{background:#ffead5}
pre.code{white-space:pre-wrap;background:#0b1220;color:#d1e5ff;padding:14px;border-radius:10px;overflow:auto}.preview{background:#fff;border:1px solid var(--line);border-radius:12px;padding:24px}.preview img{max-width:100%;height:auto}.preview table{border:1px solid var(--line)}
