:root{--bg:#f4f5f7;--surface:#fff;--border:#e2e5ea;--border-strong:#cfd4db;--text:#1b2230;--muted:#687385;--accent:#1f4fd1;--accent-hover:#1a43b3;--accent-soft:#eaf0fe;--ok:#157f3d;--ok-soft:#e7f6ec;--warn:#9a5b00;--warn-soft:#fff4e0;--warn-btn:#c77700;--error:#c0262d;--error-soft:#fdecec;--neutral-soft:#eef0f3;--radius:10px;--shadow:0 1px 2px #1018280d;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5}*{box-sizing:border-box}body{background:var(--bg);margin:0}h1,h2,h3{margin:0;line-height:1.25}.app-header{background:var(--surface);border-bottom:1px solid var(--border)}.app-header-inner{justify-content:space-between;align-items:center;gap:16px;max-width:1240px;margin:0 auto;padding:20px 24px;display:flex}.app-header h1{font-size:20px;font-weight:650}.app-header p{color:var(--muted);margin:4px 0 0}.layout{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:24px;max-width:1240px;margin:0 auto;padding:24px;display:grid}.main-col{flex-direction:column;gap:20px;min-width:0;display:flex}.side-col{position:sticky;top:24px}@media (width<=900px){.layout{grid-template-columns:1fr;padding:16px}.side-col{order:-1;position:static}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.card h2{font-size:16px;font-weight:650}.card h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:20px 0 8px;font-size:13px;font-weight:600}.muted{color:var(--muted)}.empty{margin:0}.btn{border:1px solid var(--accent);background:var(--accent);color:#fff;font:inherit;cursor:pointer;white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 16px;font-weight:550;text-decoration:none;transition:background .15s,border-color .15s;display:inline-flex}.btn:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn:focus-visible,.link-button:focus-visible,.month-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn-small{border-radius:6px;padding:4px 10px;font-size:13px}.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border-strong)}.btn-secondary:hover{background:var(--neutral-soft);border-color:var(--border-strong)}.btn-ghost{color:var(--muted);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--neutral-soft);color:var(--text);border-color:#0000}.btn-warning{background:var(--warn-btn);border-color:var(--warn-btn)}.btn-warning:hover{background:#a96500;border-color:#a96500}.btn:disabled{opacity:.55;cursor:not-allowed}.btn[aria-disabled=true]{opacity:.4;cursor:not-allowed;pointer-events:none}.link-button{color:var(--warn);font:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:550}.link-button:hover{text-decoration:underline}.alert{border:1px solid #0000;border-radius:8px;padding:12px 14px}.alert-error{background:var(--error-soft);color:var(--error);border-color:#f5c2c4;font-weight:500}.alert-warning{background:var(--warn-soft);color:var(--warn);border-color:#f6d9a6}.conflict-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:14px;display:flex}.dropzone{border:2px dashed var(--border-strong);border-radius:var(--radius);background:var(--surface);text-align:center;flex-direction:column;align-items:center;padding:36px 20px;transition:border-color .15s,background .15s;display:flex}.dropzone-active{border-color:var(--accent);background:var(--accent-soft)}.dropzone-icon{fill:none;width:40px;height:40px;stroke:var(--accent);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;margin-bottom:8px}.dropzone-title{margin:0;font-size:17px;font-weight:600}.dropzone-or{color:var(--muted);margin:2px 0 10px;font-size:13px}.dropzone-hint{color:var(--muted);margin:12px 0 0;font-size:13px}.table-wrap{overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14px}.table th{text-align:left;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border);white-space:nowrap;padding:8px 10px;font-size:12px;font-weight:600}.table td{border-bottom:1px solid var(--border);vertical-align:top;padding:10px}.table tbody tr:last-child td{border-bottom:none}.table-compact td{vertical-align:middle;padding:7px 10px}.num{text-align:right;font-variant-numeric:tabular-nums}.actions{text-align:right;white-space:nowrap}.actions .btn+.btn{margin-left:6px}.cell-file{text-overflow:ellipsis;white-space:nowrap;max-width:260px;font-weight:500;overflow:hidden}.cell-hint{color:var(--muted);white-space:nowrap;font-size:12px}.cell-warnings{min-width:180px}.result-row td:first-child{border-left:3px solid #0000}.result-error td:first-child{border-left-color:var(--error)}.result-exists td:first-child{border-left-color:var(--warn-btn)}.status-text{margin-bottom:2px;font-size:13px}.status-text-error{color:var(--error)}.status-text-exists{color:var(--warn)}.status-text-skipped{color:var(--muted)}.badge{white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;display:inline-block}.badge-ok{background:var(--ok-soft);color:var(--ok)}.badge-exists{background:var(--warn-soft);color:var(--warn)}.badge-skipped{background:var(--neutral-soft);color:var(--muted)}.badge-error{background:var(--error-soft);color:var(--error)}.badge-uploading{background:var(--accent-soft);color:var(--accent)}.conflict-actions{gap:6px;margin-top:6px;display:inline-flex}.conflict-bar .conflict-actions{margin-top:0}.warnings-row td{background:#fbfaf7;padding:4px 10px 12px 13px}.warning-list{margin:0;padding:0;font-size:13px;list-style:none}.warning-list li{border-bottom:1px dashed var(--border);flex-direction:column;padding:6px 0;display:flex}.warning-list li:last-child{border-bottom:none}.warning-heading{font-weight:600}.warning-excerpt{color:var(--muted);margin-top:2px;font-size:12px}.stats h2{margin-bottom:14px}.stat-total{background:var(--accent-soft);border-radius:8px;flex-direction:column;padding:14px 16px;display:flex}.stat-total-value{color:var(--accent);font-variant-numeric:tabular-nums;font-size:34px;font-weight:700;line-height:1.1}.stat-total-label{color:var(--muted);font-size:13px}.stat-line{justify-content:space-between;padding:12px 2px 0;font-size:14px;display:flex}.month-stats{margin:0;padding:0;list-style:none}.month-stats li{border-bottom:1px solid var(--border);grid-template-columns:1fr auto auto;align-items:baseline;gap:12px;padding:7px 2px;font-size:14px;display:grid}.month-stats li:last-child{border-bottom:none}.month-stats .muted{font-size:12px}.month-stats strong{text-align:right;font-variant-numeric:tabular-nums;min-width:48px}.month-key{font-variant-numeric:tabular-nums;font-weight:600}.months{flex-direction:column;gap:10px;display:flex}.month{border:1px solid var(--border);border-radius:8px}.month-header{justify-content:space-between;align-items:center;gap:10px;padding:8px 10px 8px 6px;display:flex}.month-toggle{min-width:0;font:inherit;color:inherit;cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:10px;padding:4px 6px;display:inline-flex}.month-toggle:hover{background:var(--neutral-soft)}.month-toggle .muted{font-size:13px}.chevron{color:var(--muted);transition:transform .15s;display:inline-block}.chevron-open{transform:rotate(90deg)}.month .table-wrap{border-top:1px solid var(--border);padding:4px 6px}@media (width<=560px){.month-header{flex-wrap:wrap}.cell-file{max-width:160px}}.center-screen,.login-screen{place-items:center;min-height:100vh;padding:16px;display:grid}.login-card{flex-direction:column;gap:16px;width:100%;max-width:380px;padding:28px;display:flex}.login-card h1{font-size:20px;font-weight:650}.login-card p{margin:4px 0 0}.field{flex-direction:column;gap:6px;font-size:13px;font-weight:600;display:flex}.field input{font:inherit;border:1px solid var(--border-strong);background:var(--surface);color:var(--text);border-radius:8px;padding:9px 12px;font-size:15px;font-weight:400}.field input:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}
