:root{--bg:#f4f5f7;--fg:#1c2230;--muted:#6b7280;--brand:#1f4ed8;--brand-dark:#1837a0;--line:#d8dce5;--ok:#0a7c3a;--okbg:#e0f6e8;--err:#a40c1f;--errbg:#fde2e4;--card:#fff}*{box-sizing:border-box}body,html,#root{height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--fg);font:14px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.app{max-width:1200px;margin:0 auto;padding:24px}header{margin-bottom:20px}header h1{color:var(--brand);margin:0;font-size:22px}header small{color:var(--muted)}.card{background:var(--card);border:1px solid var(--line);border-radius:8px;margin-bottom:16px;padding:20px;box-shadow:0 1px 2px #00000008}.drop{border:2px dashed var(--line);text-align:center;cursor:pointer;background:#fafbfc;border-radius:8px;padding:28px;display:block}.drop:hover{border-color:var(--brand);background:#f6f8ff}.drop.drop-over{border-color:var(--brand);background:#e8eeff;transform:scale(1.005)}.drop *{pointer-events:none}.drop input[type=file]{pointer-events:auto;margin:12px auto 0;display:block}.flash{border:1px solid var(--line);background:#fff;border-radius:6px;margin-top:12px;padding:10px 14px}.flash.ok{background:var(--okbg);color:var(--ok);border-color:#b6e1c2}.flash.err{background:var(--errbg);color:var(--err);border-color:#f4a8b1}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.toolbar .spacer{flex:1}button{background:var(--brand);color:#fff;font:inherit;cursor:pointer;border:0;border-radius:6px;padding:8px 14px}button:hover{background:var(--brand-dark)}button:disabled{cursor:not-allowed;background:#a4abbb}button.secondary{color:var(--fg);background:#e5e7eb}button.secondary:hover{background:#d3d6dd}button.link{color:var(--err);background:0 0;padding:4px 8px}button.link:hover{color:var(--brand-dark);background:0 0}table{border-collapse:collapse;width:100%;font-size:13px}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:6px 8px}th{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;background:#f1f3f7;font-size:11px;font-weight:600}td input[type=text],td input:not([type]),td input[type=date]{border:1px solid var(--line);width:100%;font:inherit;background:#fff;border-radius:4px;padding:4px 6px}td input.miss{border-color:var(--err);background:#fff5f7}.muted{color:var(--muted)}.small{font-size:11px}.ellipsis{text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.status{font-size:12px;font-weight:600}.status-inserted{color:var(--ok)}.status-updated{color:#b58000}.status-skipped{color:var(--muted)}.status-error{color:var(--err)}.row-inserted td{background:#0a7c3a0a}.row-updated td{background:#b580000a}.row-error td{background:#a40c1f0d}.row-preview-update td{background:#1f4ed80a}.row-preview-insert td{background:#ffb41e1a}.card.confirm{background:#fffaf0;border-color:#f0c97a}.card.confirm h2{color:#8a5a00;margin-top:0}.row-confirmed td{background:#0a7c3a12}.row-unconfirmed td{background:#a40c1f0a}.confirm-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-weight:600;display:inline-flex}.confirm-toggle input{margin:0}.status-update{color:#1f4ed8;font-style:italic}.status-insert{color:var(--warn,#8a5a00);font-style:italic}.status-skip{color:var(--muted);font-style:italic}.actions{align-items:center;gap:12px;margin-top:16px;display:flex}footer{text-align:center;padding:16px 0 32px}
