:root{--bg:#f4f6f9;--surface:#ffffff;--border:#e2e7ef;--text:#1d2733;--muted:#63728a;--primary:#1f5fbf;--primary-dark:#174a96;--accent:#eef4ff;--paid-bg:#e5f6ec;--paid-text:#18794e;--unpaid-bg:#fdecec;--unpaid-text:#b42318;--shadow:0 1px 2px rgba(16,24,40,0.05),0 8px 24px rgba(16,24,40,0.06)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.45}.page{max-width:1500px;margin:0 auto;padding:24px 20px 64px}.topbar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:18px}.title-block h1{margin:0 0 4px;font-size:22px;letter-spacing:-.01em}.title-block p{margin:0;color:var(--muted);font-size:13px}.source-pill{display:inline-flex;align-items:center;gap:8px;background:#0f1c2e;color:#d7e3f4;border-radius:999px;padding:7px 14px;font-size:12px;font-family:Consolas,Courier New,monospace;white-space:nowrap}.source-pill .dot{width:8px;height:8px;border-radius:50%;background:#38d39f;box-shadow:0 0 0 3px rgba(56,211,159,.18)}.topbar-right{display:flex;align-items:center;gap:10px}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:100%;max-width:380px;padding:30px 28px;display:flex;flex-direction:column;gap:16px}.login-brand{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;background:#0f1c2e;color:#d7e3f4;border-radius:999px;padding:6px 12px;font-size:11.5px;font-family:Consolas,Courier New,monospace}.login-brand .dot{width:8px;height:8px;border-radius:50%;background:#38d39f}.login-card h1{margin:0;font-size:24px;letter-spacing:-.01em}.login-sub{margin:-10px 0 4px;color:var(--muted);font-size:13px}.login-error{padding:10px 12px;border:1px solid #f3c4c0;background:#fff4f3;color:#a32017;border-radius:8px;font-size:12.5px}.login-btn{width:100%;justify-content:center}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}.filters{padding:18px;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-gap:14px 16px;gap:14px 16px;align-items:end}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field.span-2{grid-column:span 2}.field label{font-size:12px;font-weight:600;color:#41506a;text-transform:uppercase;letter-spacing:.04em}.field input,.field select{width:100%;height:38px;padding:0 10px;border:1px solid #cfd8e6;border-radius:8px;background:#fff;color:var(--text);font-size:13.5px;outline:none;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(31,95,191,.12)}.field .hint{font-size:11px;color:var(--muted)}.actions{display:flex;gap:10px}.actions,.btn{align-items:center}.btn{height:38px;padding:0 20px;border-radius:8px;border:1px solid transparent;font-size:13.5px;font-weight:600;cursor:pointer;display:inline-flex;gap:8px;transition:background .15s,border-color .15s,transform .05s;white-space:nowrap}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dark)}.btn-primary:disabled{opacity:.65;cursor:not-allowed}.btn-ghost{background:#fff;border-color:#cfd8e6;color:#34425a}.btn-ghost:hover{background:#f5f8fc}.btn-ghost:disabled{opacity:.55;cursor:not-allowed}.summary{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0 12px}.chip{background:#fff;border:1px solid var(--border);border-radius:10px;padding:8px 14px;font-size:12.5px;color:var(--muted);display:flex;gap:8px;align-items:baseline}.chip strong{color:var(--text);font-size:15px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.table-card{overflow:visible}.table-toolbar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);background:#fbfcfe}.table-toolbar .meta{font-size:12.5px;color:var(--muted)}.table-toolbar .right{display:flex;gap:8px;align-items:center}.table-wrap{overflow:visible;max-height:none}table.report{border-collapse:separate;border-spacing:0;width:100%;min-width:1180px}table.report thead th{position:-webkit-sticky;position:sticky;top:0;z-index:3;background:#f1f5fa;color:#33425a;font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:700;text-align:left;padding:11px 12px;border-bottom:1px solid var(--border);box-shadow:0 2px 4px rgba(16,24,40,.06);white-space:nowrap}table.report tbody td{padding:10px 12px;border-bottom:1px solid #eef2f7;white-space:nowrap;font-size:13px}table.report tbody tr:nth-child(2n){background:#fafbfd}table.report tbody tr:hover{background:var(--accent)}td.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}td.center{text-align:center}.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:11.5px;font-weight:700;letter-spacing:.02em}.badge.paid{background:var(--paid-bg);color:var(--paid-text)}.badge.unpaid{background:var(--unpaid-bg);color:var(--unpaid-text)}.type-tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11.5px;font-weight:600;background:#eef4ff;color:#164a9c}.empty{padding:60px 20px;text-align:center;color:var(--muted)}.empty .big{font-size:34px;margin-bottom:8px}.error-banner{margin:14px 0;padding:12px 14px;border:1px solid #f3c4c0;background:#fff4f3;color:#a32017;border-radius:10px;font-size:13px}.pager{display:flex;gap:6px;align-items:center}.pager button{min-width:34px;height:32px;padding:0 10px;border:1px solid #cfd8e6;background:#fff;border-radius:7px;cursor:pointer;font-size:12.5px}.pager button:disabled{opacity:.45;cursor:not-allowed}.pager button.active{background:var(--primary);border-color:var(--primary);color:#fff}.footer-note{margin-top:14px;font-size:11.5px;color:var(--muted);line-height:1.6}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media (max-width:1200px){.filters{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (max-width:760px){.filters{grid-template-columns:repeat(2,minmax(0,1fr))}.field.span-2{grid-column:span 2}.page{padding:16px 12px 48px}.table-wrap{max-height:none}}