:root{--bg:#f5f6fa;--bg-alt:#eef0f7;--surface:#ffffff;--surface-muted:#fafbfd;--ink:#12141c;--ink-soft:#3f4553;--muted:#6b7280;--faint:#9aa1ae;--border:#e5e8f0;--border-strong:#d4d9e6;--green:#12915b;--green-bg:#e8f6ef;--red:#d63c3c;--red-bg:#fdecec;--amber:#c07807;--amber-bg:#fdf3e2;--blue:#2f5fd8;--blue-bg:#ecf1fd;--violet:#6d4bd1;--violet-bg:#f1ecfd;--slate:#64748b;--slate-bg:#f1f3f8;--radius:14px;--radius-sm:9px;--shadow-sm:0 1px 2px rgba(16,24,40,0.06);--shadow:0 4px 18px rgba(16,24,40,0.07);--shadow-lg:0 12px 34px rgba(16,24,40,0.1);--font-body:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-display:"Outfit",var(--font-body);--font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace}*,:after,:before{box-sizing:border-box}body,html{padding:0;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-display);font-weight:700;letter-spacing:-.02em;margin:0;color:var(--ink)}h1{font-size:26px}h2{font-size:19px}h3{font-size:15px}a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}.num{font-family:var(--font-mono);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:13px;white-space:nowrap}.app-shell{min-height:100vh;display:flex;flex-direction:column}.topbar{background:var(--surface);border-bottom:1px solid var(--border);position:-webkit-sticky;position:sticky;top:0;z-index:40}.topbar-inner{max-width:1440px;margin:0 auto;padding:0 22px;gap:26px;height:58px}.brand,.topbar-inner{display:flex;align-items:center}.brand{font-family:var(--font-display);font-weight:800;font-size:17px;letter-spacing:-.03em;gap:9px;color:var(--ink)}.brand:hover{text-decoration:none}.brand-mark{width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,var(--blue),var(--violet));color:#fff;display:grid;place-items:center;font-size:12px;font-weight:800;letter-spacing:0}.nav{display:flex;gap:3px;flex-wrap:wrap}.nav a{padding:7px 12px;border-radius:var(--radius-sm);color:var(--muted);font-weight:500;font-size:13.5px;white-space:nowrap}.nav a:hover{background:var(--bg-alt);color:var(--ink);text-decoration:none}.nav a.active{background:var(--ink);color:#fff}.topbar-end{margin-left:auto;display:flex;align-items:center;gap:12px}.page{max-width:1440px;width:100%;margin:0 auto;padding:26px 22px 70px;flex:1 1}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:20px}.page-head p{margin:5px 0 0;color:var(--muted);max-width:70ch}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-head{padding:15px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.card-head p{margin:3px 0 0;color:var(--muted);font-size:12.5px}.card-body{padding:18px}.card-body.tight{padding:0}.grid{display:grid;grid-gap:16px;gap:16px}.grid-kpi{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}.grid-2{grid-template-columns:repeat(auto-fit,minmax(380px,1fr))}.stack{flex-direction:column;gap:16px}.row,.stack{display:flex}.row{gap:10px;align-items:center;flex-wrap:wrap}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:15px 17px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden}.kpi:after{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--accent,var(--slate))}.kpi-label{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600}.kpi-value{font-family:var(--font-mono);font-size:21px;font-weight:700;letter-spacing:-.02em;margin-top:7px;color:var(--ink);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.kpi-sub{font-size:12px;color:var(--faint);margin-top:3px}.kpi.green{--accent:var(--green)}.kpi.red{--accent:var(--red)}.kpi.blue{--accent:var(--blue)}.kpi.amber{--accent:var(--amber)}.kpi.violet{--accent:var(--violet)}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:13px}table.data th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--border);background:var(--surface-muted);position:-webkit-sticky;position:sticky;top:0;z-index:1;white-space:nowrap}table.data th.sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}table.data th.sortable:hover{color:var(--ink)}table.data td{padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:middle}table.data tbody tr:hover{background:var(--surface-muted)}table.data tbody tr:last-child td{border-bottom:none}.right{text-align:right}.center{text-align:center}.deposit{color:var(--green);font-weight:600}.withdrawal{color:var(--red);font-weight:600}.dim{color:var(--faint)}.desc{max-width:380px;overflow-wrap:anywhere}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:100px;font-size:11.5px;font-weight:600;white-space:nowrap;background:var(--slate-bg);color:var(--slate)}.badge.person{background:var(--blue-bg);color:var(--blue)}.badge.self{background:var(--violet-bg);color:var(--violet)}.badge.bank{background:var(--slate-bg);color:var(--slate)}.badge.unknown{background:var(--amber-bg);color:var(--amber)}.badge.ok{background:var(--green-bg);color:var(--green)}.badge.danger{background:var(--red-bg);color:var(--red)}.badge.warn{background:var(--amber-bg);color:var(--amber)}.field{display:flex;flex-direction:column;gap:5px}.field label{font-size:12px;font-weight:600;color:var(--ink-soft)}.field .hint{font-size:11.5px;color:var(--faint)}input[type=date],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=text],select,textarea{width:100%;padding:8px 11px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);font-family:var(--font-body);font-size:13.5px;color:var(--ink)}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-bg)}input.num-input{font-family:var(--font-mono)}.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface);color:var(--ink);font-family:var(--font-body);font-size:13.5px;font-weight:600;cursor:pointer;white-space:nowrap}.btn:hover{background:var(--bg-alt);text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--ink);border-color:var(--ink);color:#fff}.btn.primary:hover{background:#000}.btn.accent{background:var(--blue);border-color:var(--blue);color:#fff}.btn.accent:hover{background:#2450bd}.btn.danger{color:var(--red);border-color:#f3c9c9}.btn.danger:hover{background:var(--red-bg)}.btn.sm{padding:5px 10px;font-size:12.5px}.progress{height:7px;background:var(--bg-alt);border-radius:100px;overflow:hidden;min-width:90px}.progress>span{display:block;height:100%;border-radius:100px;background:var(--green);transition:width .3s ease}.progress.warn>span{background:var(--amber)}.progress.none>span{background:var(--faint)}.progress.over>span{background:var(--blue)}.notice{border-radius:var(--radius-sm);padding:11px 14px;font-size:13px;border:1px solid transparent;display:flex;gap:9px;align-items:flex-start}.notice.info{background:var(--blue-bg);border-color:#d3e0fb;color:#1f47a8}.notice.warn{background:var(--amber-bg);border-color:#f3e0bd;color:#94590b}.notice.error{background:var(--red-bg);border-color:#f6cfcf;color:#a72a2a}.notice.ok{background:var(--green-bg);border-color:#c9e9d9;color:#0b6f45}.notice ul{margin:5px 0 0;padding-left:18px}.empty{padding:42px 20px;text-align:center;color:var(--muted)}.empty h3{color:var(--ink-soft);margin-bottom:5px}.tabs{display:inline-flex;gap:2px;background:var(--bg-alt);padding:3px;border-radius:10px;flex-wrap:wrap}.tabs button{border:none;background:transparent;padding:6px 13px;border-radius:8px;font-family:var(--font-body);font-size:13px;font-weight:600;color:var(--muted);cursor:pointer}.tabs button.active{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}.chart{width:100%;height:auto;display:block;overflow:visible}.chart .axis,.chart .grid-line{stroke:var(--border);stroke-width:1}.chart .grid-line{stroke-dasharray:3 4;opacity:.7}.chart text{font-family:var(--font-mono);font-size:10px;fill:var(--muted)}.chart .bar-label{font-size:9.5px}.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted)}.legend span{display:inline-flex;align-items:center;gap:6px}.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}.login-shell{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1100px 500px at 50% -10%,#e7ecfb 0,var(--bg) 60%)}.login-card{width:100%;max-width:370px;background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:30px;box-shadow:var(--shadow-lg)}.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:13px 18px;border-bottom:1px solid var(--border);background:var(--surface-muted)}.toolbar .grow{flex:1 1;min-width:200px}.muted{color:var(--muted)}.small{font-size:12px}.mono{font-family:var(--font-mono)}.nowrap{white-space:nowrap}.spacer{flex:1 1}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.dropzone{border:2px dashed var(--border-strong);border-radius:var(--radius);padding:40px 22px;text-align:center;background:var(--surface-muted);cursor:pointer;transition:border-color .15s,background .15s}.dropzone.drag,.dropzone:hover{border-color:var(--blue);background:var(--blue-bg)}@media print{@page{size:A4 landscape;margin:12mm}body{background:#fff;font-size:10.5px}.btn,.no-print,.tabs,.toolbar,.topbar{display:none!important}.page{padding:0;max-width:none}.card{border:1px solid #d8dbe4;box-shadow:none;page-break-inside:avoid;break-inside:avoid}.card+.card{margin-top:10px}table.data{font-size:9.5px}table.data th{background:#f1f2f6!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}table.data tr{page-break-inside:avoid;break-inside:avoid}.print-only{display:block!important}.badge,.deposit,.withdrawal{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.print-only{display:none}