:root{color-scheme:light;--bg:#f4f6f8;--bg-elevated:#ffffff;--bg-sidebar:#eef1f4;--text:#1a1d21;--text-muted:#5c6570;--border:#d8dee6;--accent:#0a7a6c;--accent-hover:#08665b;--danger:#c0392b;--danger-bg:#fdecea;--ok:#0a7a6c;--ok-bg:#e6f6f3;--shadow:0 8px 30px rgba(26,29,33,0.08);--radius:12px;--font:"Avenir Next","Segoe UI","Helvetica Neue",sans-serif;--nav-h:64px}[data-theme=dark]{color-scheme:dark;--bg:#0f1419;--bg-elevated:#171e26;--bg-sidebar:#121820;--text:#e8eef4;--text-muted:#93a0ae;--border:#2a3542;--accent:#2dd4bf;--accent-hover:#5eead4;--danger:#f07178;--danger-bg:#3a1f24;--ok:#2dd4bf;--ok-bg:#14332e;--shadow:0 12px 40px rgba(0,0,0,0.35)}*{box-sizing:border-box}body,html{height:100%;margin:0;background:var(--bg);color:var(--text);font-family:var(--font)}a{color:var(--accent);text-decoration:none}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--border);background:var(--bg-elevated);color:var(--text);border-radius:10px;padding:8px 14px;font:inherit;cursor:pointer}.btn.primary{background:var(--accent);border-color:transparent;color:#fff}[data-theme=dark] .btn.primary{color:#0f1419}.btn.danger{background:var(--danger-bg);border-color:transparent;color:var(--danger)}.btn:disabled{opacity:.5;cursor:not-allowed}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.field label{font-size:.85rem;color:var(--text-muted)}.field input,.field select,.field textarea{font:inherit;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:var(--bg-elevated);color:var(--text)}.field-hint{margin:-4px 0 12px;font-size:.82rem;color:var(--text-muted)}.password-field{position:relative;display:flex;align-items:center}.password-field input{width:100%;padding-right:44px}.password-field-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:36px;height:36px;border:0;border-radius:8px;background:transparent;color:var(--text-muted);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.password-field-toggle:hover{color:var(--text);background:color-mix(in srgb,var(--text) 8%,transparent)}.page-title{margin:0 0 8px;font-size:1.45rem}.page-sub{margin:0 0 16px;color:var(--text-muted)}.auth-page{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(900px 480px at 15% -10%,rgba(10,122,108,.18),transparent),var(--bg)}.auth-card{width:min(420px,100%);background:var(--bg-elevated);border:1px solid var(--border);border-radius:16px;padding:28px;box-shadow:var(--shadow)}.auth-hint{margin-top:16px;font-size:.9rem;color:var(--text-muted);line-height:1.45}.app-shell{min-height:100%;display:grid;grid-template-columns:240px 1fr}.sidebar{background:var(--bg-sidebar);border-right:1px solid var(--border);padding:20px 14px;display:flex;flex-direction:column;gap:16px}.brand-name{font-weight:700}.brand-scenario{font-size:.85rem;color:var(--text-muted);margin-top:4px}.nav{display:flex;flex-direction:column;gap:4px}.nav a,.nav button{font:inherit;text-align:left;border:0;background:transparent;color:var(--text);padding:10px 12px;border-radius:10px;cursor:pointer}.nav a.active,.nav a:hover,.nav button:hover{background:var(--bg-elevated)}.main{min-width:0}.main-scroll{padding:24px 24px 40px}.list{display:flex;flex-direction:column;gap:10px}.list-item{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:14px;justify-content:space-between;gap:12px}.list-item,.row{display:flex;align-items:center;flex-wrap:wrap}.row{gap:8px}.toast-stack{position:fixed;right:16px;bottom:16px;z-index:50;display:flex;flex-direction:column;gap:8px}.toast{background:var(--bg-elevated);border:1px solid var(--border);border-radius:10px;padding:10px 14px;box-shadow:var(--shadow);max-width:360px}.toast.error{background:var(--danger-bg);color:var(--danger)}.toast.ok{background:var(--ok-bg);color:var(--ok)}.month-table-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius)}table.planning{width:100%;border-collapse:collapse;background:var(--bg-elevated);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}table.planning td,table.planning th{padding:10px 12px;border-bottom:1px solid var(--border);text-align:right;white-space:nowrap}table.planning td:first-child,table.planning th:first-child{text-align:left}table.planning tr.negative td{color:var(--danger)}table.planning tr.clickable{cursor:pointer}table.planning tr.clickable:hover{background:var(--bg-sidebar)}.month-cards{display:none;flex-direction:column;gap:10px}.month-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:14px;text-align:left;font:inherit;color:inherit;width:100%;cursor:pointer}.month-card.negative{border-color:var(--danger)}.month-card h3{margin:0 0 8px;font-size:1rem}.month-card dl{display:grid;grid-template-columns:1fr auto;grid-gap:4px 12px;gap:4px 12px;margin:0}.month-card dt{color:var(--text-muted)}.month-card dd{margin:0;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.hamburger,.topbar{display:none}.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:flex-start;justify-content:center;z-index:40;padding:16px;overflow-y:auto}.modal{border-radius:16px;width:min(640px,100%);max-height:none;overflow:visible;margin-bottom:40px;border:1px solid var(--border);box-shadow:var(--shadow)}.drawer,.modal{background:var(--bg-elevated);padding:20px}.drawer{width:min(320px,90vw);height:100%;align-self:stretch;margin-right:auto;margin-bottom:0;border-radius:0;box-shadow:none;border:none;border-right:1px solid var(--border)}.muted{color:var(--text-muted)}.money-neg{color:var(--danger)}.temp-password{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.1rem;background:var(--ok-bg);padding:12px;border-radius:10px;word-break:break-all}@media (max-width:860px){.app-shell{display:block}.sidebar{display:none}.topbar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--bg-sidebar);position:-webkit-sticky;position:sticky;top:0;z-index:20}.hamburger{display:inline-flex}.main-scroll{padding:16px 16px calc(24px + env(safe-area-inset-bottom))}.month-table-wrap{display:none}.month-cards{display:flex}.list-item{flex-direction:column;align-items:stretch}}.panel{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.planning-page{position:relative;min-height:50vh}.planning-page-chrome{margin-bottom:12px}.planning-default-rate{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}.planning-default-rate input,.planning-default-rate select{width:auto;min-width:4.5rem;max-width:8rem;font:inherit;padding:8px 10px;border-radius:10px;border:1px solid var(--border);background:var(--bg-elevated);color:var(--text)}.planning-contrib{font-weight:650}.planning-freecash-editable{cursor:text;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;text-underline-offset:3px}.planning-freecash-editing input{width:6.5rem}.metric-icon{position:relative;align-items:center;justify-content:center;border:0;background:transparent;padding:2px;cursor:help;color:inherit}.metric-icon,table.planning th .metric-icon{display:inline-flex}.metric-tip{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);z-index:30;white-space:nowrap;background:var(--bg-elevated);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;box-shadow:var(--shadow);font-size:.8rem;font-weight:600}.undo-redo-bar{display:flex;gap:6px}.undo-redo-bar .btn{flex:1 1;font-size:.8rem;padding:6px 8px}.topbar .undo-redo-bar .btn{padding:6px 8px;font-size:.72rem}.undo-toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);z-index:10000;max-width:min(420px,calc(100vw - 32px));padding:12px 18px;border-radius:10px;background:var(--bg-elevated);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow);font-size:.92rem;cursor:pointer}.fab-wrap{position:absolute;right:8px;bottom:8px;z-index:21}.fab{width:56px;height:56px;border-radius:50%;border:none;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;padding:0;box-shadow:var(--shadow);cursor:pointer}.fab:hover{background:var(--accent-hover)}.fab-plus-inline{width:40px;height:40px;border-radius:50%;border:none;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer}.menu-pop{position:absolute;right:0;bottom:68px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);padding:8px;z-index:25;min-width:220px}.menu-pop button{display:block;width:100%;text-align:left;border:none;background:transparent;color:inherit;font:inherit;padding:10px 12px;border-radius:8px;cursor:pointer}.menu-pop button:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.modal.wide{width:min(880px,100%)}.modal-header{display:flex;align-items:center;gap:12px;margin-bottom:14px;min-height:40px}.modal-header h2{margin:0;font-size:1.25rem;flex:1 1;min-width:0}.modal-header:has(.modal-back) h2{text-align:right}.modal-back{padding:4px 10px;font-size:.85rem;flex-shrink:0;white-space:nowrap}.modal-header-right-spacer{width:40px;height:40px;flex-shrink:0}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;flex-wrap:wrap}.btn-close-month{display:block;width:100%;margin-top:16px;padding:12px 16px;border:none;border-radius:10px;background:var(--danger);color:#fff;font-weight:600;cursor:pointer}.btn-close-month.secondary{background:transparent;color:var(--text);border:1px solid var(--border)}.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}.tabs button{border:1px solid var(--border);background:transparent;color:inherit;font:inherit;padding:7px 12px;border-radius:999px;cursor:pointer}.tabs button.active{background:color-mix(in srgb,var(--accent) 18%,transparent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.list-item.clickable{cursor:pointer;width:100%;text-align:left;background:transparent;font:inherit;color:inherit}.list-item.clickable:hover{background:color-mix(in srgb,var(--accent) 10%,transparent)}.chart-box{height:380px;overflow:visible;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:12px 12px 20px 8px}.chart-box.uplot-dark .u-legend,.chart-box.uplot-dark .u-legend *,[data-theme=dark] .chart-box .u-legend,[data-theme=dark] .chart-box .u-legend *{color:#e8eef4!important}.scope-toggle{display:flex;gap:8px}.scope-toggle button{flex:1 1;border:1px solid var(--border);background:transparent;color:inherit;padding:10px 12px;border-radius:10px;font:inherit;cursor:pointer}.scope-toggle button.active{background:color-mix(in srgb,var(--accent) 22%,transparent);border-color:color-mix(in srgb,var(--accent) 55%,var(--border));font-weight:600}.field-error{margin:6px 0 0;color:var(--danger);font-size:.9rem}.category-group{border:1px solid var(--border);border-radius:10px;overflow:hidden}.category-group+.category-group{margin-top:8px}.category-group-header{display:flex;justify-content:space-between;align-items:center;gap:12px;width:100%;padding:10px 12px;border:none;background:color-mix(in srgb,var(--bg-elevated) 80%,transparent);color:inherit;font:inherit;font-weight:600;text-align:left;cursor:pointer}.category-group-body{display:flex;flex-direction:column;border-top:1px solid var(--border)}.category-group-body .list-item{border:none;border-radius:0;border-bottom:1px solid var(--border)}.category-group-body .list-item:last-child{border-bottom:none}.loan-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));grid-gap:10px;gap:10px;margin-bottom:16px}.loan-stat{padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:color-mix(in srgb,var(--bg-sidebar) 80%,var(--bg-elevated));display:flex;flex-direction:column;gap:6px;min-height:76px}.loan-stat .muted{color:var(--text-muted);font-size:.78rem;line-height:1.3}.loan-stat strong{font-size:1.05rem;letter-spacing:-.02em;word-break:break-word}.loan-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.loan-overpayments{margin:8px 0 16px}.loan-overpayments ul{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.loan-overpayments li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);font-size:.9rem}.loan-schedule-wrap{overflow:auto;max-height:60vh}.loan-schedule-table{width:100%;border-collapse:collapse;font-size:.9rem}.loan-schedule-table td,.loan-schedule-table th{border-bottom:1px solid var(--border);padding:8px 6px;text-align:right;white-space:nowrap}.loan-schedule-table td:first-child,.loan-schedule-table th:first-child{text-align:left}.month-year-picker{display:flex;flex-wrap:wrap;align-items:center;gap:8px}@media (min-width:861px){.modal{border-radius:16px;align-self:center}}@media (max-width:860px){.fab-wrap{position:fixed;right:16px}.fab-wrap,.undo-toast{bottom:calc(16px + env(safe-area-inset-bottom))}}