:root{--bg: #f4f6f9;--panel: #ffffff;--primary: #2563eb;--primary-dark: #1d4ed8;--danger: #dc2626;--border: #e2e8f0;--text: #1e293b;--muted: #64748b;--ok: #16a34a;--ok-bg: #f0fdf4;--ok-border: #bbf7d0;--err-bg: #fef2f2;--err-border: #fecaca}[data-theme=dark]{--bg: #0f172a;--panel: #1e293b;--primary: #3b82f6;--primary-dark: #2563eb;--danger: #ef4444;--border: #334155;--text: #f1f5f9;--muted: #94a3b8;--ok: #4ade80;--ok-bg: #052e16;--ok-border: #166534;--err-bg: #451a1a;--err-border: #7f1d1d}[data-theme=dark] button.ghost{background:#334155;color:var(--text)}[data-theme=dark] button.ghost:hover{background:#475569}[data-theme=dark] th{background:#1e293b}[data-theme=dark] tr:nth-child(2n) td{background:#1e293b}[data-theme=dark] tr:hover td{background:#334155}[data-theme=dark] .stat-item{background:#1e293b}[data-theme=dark] input,[data-theme=dark] select{background:#0f172a;color:var(--text);border-color:var(--border)}[data-theme=dark] .badge{background:#334155;color:var(--text)}[data-theme=dark] .badge.admin{background:#78350f;color:#fbbf24}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);font-size:14px}button{cursor:pointer;border:none;border-radius:6px;padding:8px 14px;font-size:14px;background:var(--primary);color:#fff;transition:background .15s}button:hover{background:var(--primary-dark)}button.ghost{background:#eef2f7;color:var(--text)}button.ghost:hover{background:#e2e8f0}button.danger{background:var(--danger)}button.danger:hover{background:#b91c1c}button:disabled{opacity:.5;cursor:not-allowed}.progress{height:8px;background:var(--border);border-radius:4px;overflow:hidden;margin:10px 0 4px}.progress>div{height:100%;background:var(--primary);border-radius:4px;transition:width .2s ease}.progress-text{font-size:12px;color:var(--muted);margin-bottom:8px}input,select{padding:8px 10px;border:1px solid var(--border);border-radius:6px;font-size:14px;outline:none}input:focus,select:focus{border-color:var(--primary)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-card{background:var(--panel);padding:36px 32px;border-radius:12px;box-shadow:0 10px 40px #00000014;width:340px}.login-card h1{font-size:20px;margin:0 0 6px}.login-card p.sub{color:var(--muted);margin:0 0 22px;font-size:13px}.login-card .field{margin-bottom:14px}.login-card .field label{display:block;margin-bottom:6px;font-size:13px;color:var(--muted)}.login-card .field input{width:100%}.login-card button{width:100%;margin-top:8px}.topbar{background:var(--panel);border-bottom:1px solid var(--border);padding:0 24px;height:56px;display:flex;align-items:center;justify-content:space-between}.topbar .brand{font-weight:600;font-size:16px}.topbar .user-area{display:flex;align-items:center;gap:12px;color:var(--muted)}.tabs{display:flex;gap:4px;padding:12px 24px 0}.tabs .tab{padding:9px 16px;border-radius:8px 8px 0 0;background:transparent;color:var(--muted);border:1px solid transparent;border-bottom:none}.tabs .tab.active{background:var(--panel);color:var(--primary);border-color:var(--border);font-weight:600}.content{padding:20px 24px}.card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:18px;margin-bottom:18px}.card h3{margin:0 0 14px;font-size:15px}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--border);white-space:nowrap}th{background:#f8fafc;color:var(--muted);font-weight:600}tr:nth-child(2n) td{background:#f8fafc}tr:hover td{background:#eef2ff}.table-scroll{overflow-x:auto}.empty{color:var(--muted);text-align:center;padding:24px}.msg{padding:10px 12px;border-radius:6px;margin-bottom:12px;font-size:13px}.msg.error{background:var(--err-bg);color:var(--danger);border:1px solid var(--err-border)}.msg.ok{background:var(--ok-bg);color:var(--ok);border:1px solid var(--ok-border)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}.stat-item{background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:14px}.stat-item .num{font-size:24px;font-weight:700;color:var(--primary)}.stat-item .label{color:var(--muted);font-size:12px;margin-top:4px}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;background:#eef2f7;color:var(--text)}.badge.admin{background:#fef3c7;color:#b45309}
