@font-face{font-family:Inter;src:url(../fonts/InterVariable.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}:root{--ink:#141414;--ink-soft:#262626;--canvas:#fff;--canvas-soft:#f3f3f3;--field:#f0f0f0;--hairline:#e0e0e0;--muted:#6b6b6b;--faint:#adadad;--info:#1d4ed8;--info-bg:#eff6ff;--danger:#b42318;--danger-bg:#fef3f2;--success:#067647;--success-bg:#ecfdf3;--warning:#b54708;--warning-bg:#fffaeb;--radius-card:24px;--radius-input:16px;--radius-pill:999px;--sp-1:4px;--sp-2:8px;--sp-3:16px;--sp-4:24px;--sp-5:32px;--sp-6:48px}*{box-sizing:border-box}body,html{background:var(--canvas);margin:0;padding:0;font-family:Inter,-apple-system,Helvetica Neue,Arial,sans-serif;font-size:16px;font-weight:450;line-height:1.5}a,body,html{color:var(--ink)}a{text-decoration:none}a:hover{text-decoration:underline}h1{margin:0 0 var(--sp-4);font-size:1.75rem;line-height:1.1}h1,h2,h3{font-weight:650}h2{margin:0 0 var(--sp-3);font-size:1.25rem;line-height:1.13}h3{margin:0 0 var(--sp-2);font-size:1rem;line-height:1.25}.skip-link{top:-100px;left:var(--sp-3);background:var(--ink);color:#fff;padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-pill);z-index:100;transition:top .2s;position:absolute}.pill-nav,.skip-link:focus{top:var(--sp-3)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.layout{min-height:100vh}.layout,.main{flex-direction:column;display:flex}.main{flex:1;min-width:0}.content{padding:var(--sp-5) var(--sp-4);flex:1;width:100%;max-width:1440px;margin:0 auto}.pill-nav{z-index:50;align-items:center;gap:var(--sp-1);background:var(--canvas-soft);border-radius:var(--radius-pill);padding:var(--sp-1) var(--sp-2);margin:var(--sp-3) auto 0;max-width:fit-content;width:calc(100% - var(--sp-5));box-shadow:none;display:flex;position:sticky}.pill-nav-brand{padding:var(--sp-1) var(--sp-3);color:var(--ink);white-space:nowrap;font-size:.9rem;font-weight:650}.pill-nav a{align-items:center;gap:var(--sp-1);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-pill);color:var(--muted);min-height:44px;font-size:.85rem;font-weight:450;transition:background .15s,color .15s;display:flex}.pill-nav a:hover{color:var(--ink);background:var(--field);text-decoration:none}.pill-nav a.router-link-active{color:var(--ink);background:var(--canvas);font-weight:600}.pill-nav-logout{align-items:center;gap:var(--sp-1);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-pill);color:var(--muted);cursor:pointer;background:0 0;border:none;min-height:44px;font-size:.85rem;font-weight:450;transition:background .15s,color .15s;display:flex}.pill-nav-logout:hover{color:var(--ink);background:var(--field)}.mobile-nav-toggle{align-items:center;gap:var(--sp-1);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-pill);color:var(--ink);cursor:pointer;background:0 0;border:none;min-height:44px;font-size:.85rem;font-weight:450;display:none}.mobile-nav-toggle:hover{background:var(--field)}.mobile-nav-panel{background:var(--canvas);z-index:60;width:100%;max-width:none;height:100dvh;max-height:100dvh;padding:var(--sp-4);gap:var(--sp-2);border-radius:0;flex-direction:column;margin:0;display:none;position:fixed;inset:0}.mobile-nav-panel[open]{display:flex}.mobile-nav-panel a{align-items:center;gap:var(--sp-2);padding:var(--sp-3);border-radius:var(--radius-pill);color:var(--ink);min-height:48px;font-size:1rem;font-weight:450;display:flex}.mobile-nav-panel a.router-link-active{background:var(--canvas-soft);font-weight:600}.test-banner{text-align:center;color:var(--muted);padding:var(--sp-1) var(--sp-3);margin-top:var(--sp-2);font-size:.75rem}.footer{background:var(--ink);color:#fff;border-radius:var(--radius-card) var(--radius-card) 0 0;padding:var(--sp-5) var(--sp-4);margin-top:var(--sp-6);text-align:center}.footer-brand{font-size:1rem;font-weight:650}.footer-note{color:#fff9;margin-top:var(--sp-1);font-size:.8rem}.card{background:var(--canvas);border:1px solid var(--hairline);border-radius:var(--radius-card);padding:var(--sp-4);margin-bottom:var(--sp-4)}.card-header{margin-bottom:var(--sp-3);justify-content:space-between;align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.grid-2{grid-template-columns:repeat(2,1fr)}.grid-2,.grid-3,.grid-4{gap:var(--sp-3);display:grid}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}.table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px}th{text-align:left;border-bottom:1px solid var(--hairline);color:var(--muted);text-transform:none;letter-spacing:0;white-space:nowrap;font-size:.75rem;font-weight:600}input,select,td,textarea,th{padding:var(--sp-2) var(--sp-3)}td{border-bottom:1px solid var(--canvas-soft);vertical-align:middle}tr:hover td{background:var(--canvas-soft)}.num{font-variant-numeric:tabular-nums;white-space:nowrap}.num,th.num{text-align:right}.form-group{margin-bottom:var(--sp-3)}label{margin-bottom:var(--sp-1);color:var(--ink-soft);font-size:.85rem;font-weight:600;display:block}input,select,textarea{border-radius:var(--radius-input);background:var(--field);width:100%;min-height:44px;color:var(--ink);border:1px solid #0000;font-family:inherit;font-size:.9rem}input[type=checkbox]{width:auto;min-height:auto}.btn,.btn-icon,.btn-sm,input[type=date]{min-height:44px}input:focus,select:focus,textarea:focus{outline:2px solid var(--ink);outline-offset:-1px;border-color:var(--ink);background:var(--canvas)}.form-row{gap:var(--sp-3);flex-wrap:wrap;display:flex}.form-row>*{flex:1;min-width:140px}.btn{justify-content:center;align-items:center;gap:var(--sp-1);padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;border:1px solid #0000;font-size:.9rem;font-weight:600;transition:background .15s,border-color .15s;display:inline-flex}.btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.btn-primary{background:var(--ink);color:#fff}.btn-primary:hover{background:var(--ink-soft)}.btn-primary:disabled{background:var(--faint);cursor:not-allowed}.btn-secondary{background:var(--canvas);color:var(--ink);border-color:var(--hairline)}.btn-secondary:hover{background:var(--canvas-soft)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{background:#912018}.btn-sm{padding:var(--sp-1) var(--sp-3);font-size:.8rem}.btn-icon{padding:var(--sp-2);min-width:44px}.badge{align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border-radius:var(--radius-pill);white-space:nowrap;font-size:.75rem;font-weight:600;display:inline-flex}.badge-info{background:var(--info-bg);color:var(--info)}.badge-danger{background:var(--danger-bg);color:var(--danger)}.badge-success{background:var(--success-bg);color:var(--success)}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge-neutral{background:var(--canvas-soft);color:var(--muted)}.alert{align-items:flex-start;gap:var(--sp-2);padding:var(--sp-3);border-radius:var(--radius-input);margin-bottom:var(--sp-3);font-size:.9rem;display:flex}.alert-error{background:var(--danger-bg);color:var(--danger)}.alert-success{background:var(--success-bg);color:var(--success)}.alert-info{background:var(--info-bg);color:var(--info)}.alert-warning{background:var(--warning-bg);color:var(--warning)}.segmented{background:var(--canvas-soft);gap:0;padding:2px;display:inline-flex}.segmented,.segmented button{border-radius:var(--radius-pill)}.segmented button{padding:var(--sp-1) var(--sp-3);color:var(--muted);cursor:pointer;background:0 0;border:none;min-height:44px;font-size:.8rem;font-weight:600;transition:background .15s,color .15s}.segmented button.active{background:var(--canvas);color:var(--ink)}.segmented button:focus-visible{outline:2px solid var(--ink);outline-offset:1px}.status-overdue{color:var(--danger);font-weight:600}.status-paid{color:var(--success)}.status-partial{color:var(--warning)}.login-page{background:var(--canvas-soft);min-height:100vh;padding:var(--sp-4);justify-content:center;align-items:center;display:flex}.login-card{background:var(--canvas);border:1px solid var(--hairline);border-radius:var(--radius-card);padding:var(--sp-6) var(--sp-5);width:100%;max-width:380px}.login-card h1{text-align:center;margin-bottom:var(--sp-1);font-size:1.5rem}.login-card p{text-align:center;color:var(--muted);margin-bottom:var(--sp-4);font-size:.9rem}dialog{border-radius:var(--radius-card);max-width:640px;width:calc(100% - var(--sp-5));background:var(--canvas);border:none;max-height:90vh;padding:0;overflow-y:auto}dialog::backdrop{background:#0006}.dialog-inner{padding:var(--sp-4)}.dialog-header{margin-bottom:var(--sp-3);justify-content:space-between;align-items:center;display:flex}.dialog-header h2{margin:0}.dialog-close{cursor:pointer;color:var(--muted);padding:var(--sp-1);border-radius:var(--radius-pill);background:0 0;border:none;justify-content:center;align-items:center;min-width:44px;min-height:44px;font-size:1.25rem;display:flex}.dialog-close:hover{color:var(--ink);background:var(--canvas-soft)}.breadcrumb,.breadcrumb a,.text-lead,.text-muted{color:var(--muted)}.text-sm{font-size:.8rem}.text-lead{font-size:1.25rem;font-weight:300}.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mb-1{margin-bottom:var(--sp-1)}.mb-2{margin-bottom:var(--sp-2)}.mb-3{margin-bottom:var(--sp-3)}.mb-4,.page-header{margin-bottom:var(--sp-4)}.flex,.flex-between{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.flex-between,.mobile-nav-shell,.page-header{justify-content:space-between}.flex-col{gap:var(--sp-2);flex-direction:column;display:flex}.page-header{align-items:center;gap:var(--sp-3);flex-wrap:wrap;display:flex}.page-header h1{margin:0}.breadcrumb{align-items:center;gap:var(--sp-1);margin-bottom:var(--sp-3);font-size:.85rem;display:flex}.breadcrumb a:hover{color:var(--ink)}.dropzone{border:2px dashed var(--hairline);border-radius:var(--radius-card);padding:var(--sp-6) var(--sp-4);text-align:center;cursor:pointer;transition:border-color .15s,background .15s}.dropzone.dragging,.dropzone:hover{border-color:var(--ink);background:var(--canvas-soft)}.dropzone.disabled{opacity:.6;pointer-events:none}.tabs{border-bottom:1px solid var(--hairline);margin-bottom:var(--sp-4);gap:0;display:flex}.tabs button{padding:var(--sp-2) var(--sp-3);color:var(--muted);cursor:pointer;align-items:center;gap:var(--sp-1);background:0 0;border:none;border-bottom:2px solid #0000;min-height:44px;font-size:.9rem;font-weight:500;display:flex}.tabs button.active{color:var(--ink);border-bottom-color:var(--ink);font-weight:600}.tabs button:focus-visible{outline:2px solid var(--ink);outline-offset:-2px}.amount{font-variant-numeric:tabular-nums;font-weight:650}.amount-lg{font-size:2rem;line-height:1.1}.amount-md{font-size:1.25rem;line-height:1.2}@media (width<=768px){.content{padding:var(--sp-3)}.pill-nav{display:none}.mobile-nav-shell,.mobile-nav-toggle{display:flex}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.form-row,.page-header{flex-direction:column}.form-row>*{min-width:auto}.page-header{align-items:flex-start}.amount-lg{font-size:1.5rem}.footer{padding:var(--sp-4) var(--sp-3)}input,select,textarea{font-size:16px}}@media (prefers-reduced-motion:reduce){*,:after,:before{transition-duration:.01ms!important;animation-duration:.01ms!important}}.icon{flex-shrink:0;width:20px;height:20px}.icon-sm{flex-shrink:0;width:16px;height:16px}button{font-family:inherit}[tabindex]:focus-visible,a:focus-visible,button:focus-visible{outline:2px solid var(--ink);outline-offset:3px}button:disabled{cursor:not-allowed;opacity:.6}svg{flex-shrink:0}.dialog-inner,.page-header>div,td{overflow-wrap:anywhere}body:has(dialog[open]){overflow:hidden}.mobile-nav-shell{z-index:50;background:var(--canvas-soft);border-radius:var(--radius-pill);align-items:center;width:calc(100% - 32px);margin:16px auto 0;padding:4px 8px;display:none;position:sticky;top:16px}.status-filter{border:1px solid var(--hairline);background:var(--canvas);cursor:pointer;min-height:44px;padding:8px 12px}.status-filter.active{background:var(--ink);color:var(--canvas);border-color:var(--ink)}.text-right{text-align:right}@media (width<=900px){.pill-nav{display:none}.mobile-nav-shell,.mobile-nav-toggle{display:flex}}label:has(input[type=checkbox]){cursor:pointer;min-height:44px}
