:root{--font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius: 14px;--gap: 16px;--positive: #0f9f8f;--negative: #e4576b;--budget: #0f766e;--actual: #f0795b;--amber: #c98a00;--cat-0: #0f766e;--cat-1: #f0795b;--cat-2: #6366f1;--cat-3: #eab308;--cat-4: #0ea5e9;--cat-5: #94a3b8}:root,[data-mode=light]{--bg: #f4f6f8;--surface: #ffffff;--surface-2: #eef2f5;--text: #0f172a;--muted: #475569;--border: #d5dde5;--focus: #1d4ed8;--shadow: 0 1px 2px rgb(15 23 42 / 6%), 0 4px 16px rgb(15 23 42 / 6%);color-scheme:light}[data-mode=grey]{--bg: #3a3f45;--surface: #4a5058;--surface-2: #555c65;--text: #f1f3f5;--muted: #cfd4da;--border: #6b737d;--focus: #ffd43b;--shadow: 0 1px 2px rgb(0 0 0 / 25%);color-scheme:dark}[data-mode=dark]{--bg: #0b1016;--surface: #131b24;--surface-2: #1b2531;--text: #e8edf2;--muted: #9fb0c0;--border: #2a3644;--focus: #7cc4ff;--shadow: 0 1px 2px rgb(0 0 0 / 40%);color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:16px;line-height:1.5}a{color:inherit}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:6px}.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:12px;top:-60px;background:var(--surface);padding:10px 14px;border-radius:8px;z-index:10;box-shadow:var(--shadow)}.skip-link:focus{top:12px}.shell{display:grid;grid-template-columns:220px 1fr;min-height:100vh}.sidebar{background:var(--surface);border-right:1px solid var(--border);padding:20px 14px;display:flex;flex-direction:column;gap:20px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:1.15rem}.brand img{width:32px;height:32px}.nav ul{list-style:none;padding:0;margin:0;display:grid;gap:4px}.nav a{display:block;padding:9px 12px;border-radius:10px;text-decoration:none;color:var(--muted);font-weight:500}.nav a:hover{background:var(--surface-2);color:var(--text)}.nav a[aria-current=page]{background:color-mix(in srgb,var(--budget) 14%,transparent);color:var(--text);font-weight:650}.sidebar-foot{margin-top:auto;display:grid;gap:8px;font-size:.85rem;color:var(--muted)}main{padding:24px clamp(16px,3vw,36px) 48px;max-width:1400px;width:100%}main h1{margin:0 0 18px;font-size:1.6rem}main h1:focus{outline:none}.banner{background:color-mix(in srgb,var(--actual) 18%,var(--surface));border:1px solid color-mix(in srgb,var(--actual) 45%,transparent);padding:8px 14px;border-radius:10px;margin-bottom:16px}.error-banner{background:color-mix(in srgb,var(--negative) 15%,var(--surface));border:1px solid var(--negative);padding:8px 14px;border-radius:10px;margin-bottom:16px;display:flex;justify-content:space-between;gap:12px}@media (max-width: 820px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center;padding:10px 14px}.nav ul{display:flex;flex-wrap:wrap}.sidebar-foot{margin-top:0;margin-left:auto}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);min-width:0}.card h2{margin:0 0 12px;font-size:1.05rem}.grid{display:grid;gap:var(--gap)}.dash-top{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}.dash-mid{grid-template-columns:minmax(280px,1fr) minmax(320px,1.3fr);margin-top:var(--gap)}@media (max-width: 900px){.dash-mid{grid-template-columns:1fr}}.kpi .label{color:var(--muted);font-size:.9rem}.kpi .value{font-size:1.6rem;font-weight:700;font-variant-numeric:tabular-nums}.kpi .sub{color:var(--muted);font-size:.85rem}.positive{color:color-mix(in srgb,var(--positive) 80%,var(--text))}.negative{color:color-mix(in srgb,var(--negative) 85%,var(--text))}button,.button{font:inherit;border-radius:10px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);padding:8px 14px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:6px}button:hover{border-color:var(--muted)}button.primary,.button.primary{background:var(--budget);border-color:var(--budget);color:#fff;font-weight:600}button.danger{border-color:var(--negative);color:var(--negative);background:transparent}button:disabled{opacity:.55;cursor:not-allowed}input[type=text],input[type=url],input[type=password],input[type=number],input[type=search],input[type=date],textarea,select{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 12px;min-width:0}label{font-weight:550}.field{display:grid;gap:6px;margin-bottom:14px}.hint{color:var(--muted);font-size:.88rem;margin:0}.form-error{color:var(--negative);font-weight:550}fieldset{border:1px solid var(--border);border-radius:12px;padding:10px 14px 12px;margin:0 0 14px}legend{font-weight:600;padding:0 6px}.choices{display:flex;flex-wrap:wrap;gap:8px 16px}.choices label{font-weight:450;display:inline-flex;align-items:center;gap:6px}.toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:14px}.toolbar fieldset{margin:0}.auth{min-height:100vh;display:grid;place-items:center;padding:24px}.auth .card{width:min(460px,100%)}.auth h1{margin-top:0}.recovery-key{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1.05rem;letter-spacing:.04em;background:var(--surface-2);border-radius:10px;padding:12px;word-spacing:.3em;line-height:1.9;user-select:all}.stack{display:grid;gap:12px}.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.lights{list-style:none;margin:0;padding:0;display:grid;gap:10px}.light{display:grid;grid-template-columns:34px 1fr;gap:10px;align-items:center}.light-icon{width:30px;height:30px}.light strong{display:block}.light span{color:var(--muted);font-size:.88rem}.donut-wrap{display:grid;grid-template-columns:160px 1fr;gap:16px;align-items:center}@media (max-width: 480px){.donut-wrap{grid-template-columns:1fr}}.legend{list-style:none;margin:0;padding:0;display:grid;gap:6px}.legend li{display:grid;grid-template-columns:14px 1fr auto;gap:8px;align-items:center;font-variant-numeric:tabular-nums}.swatch{width:12px;height:12px;border-radius:3px}.calendar-card{margin-top:var(--gap)}.calendar-stage{position:relative;height:clamp(320px,52vw,560px);border-radius:12px;overflow:hidden;background:linear-gradient(180deg,var(--surface-2),var(--surface));touch-action:none}.calendar-stage canvas{display:block;cursor:grab}.calendar-stage:focus-visible{outline-offset:-3px}.month-label{position:absolute;font-size:.78rem;font-weight:650;color:var(--muted);pointer-events:none;transform:translate(-50%,-100%);white-space:nowrap}.calendar-layout{display:grid;grid-template-columns:1fr 260px;gap:var(--gap)}@media (max-width: 1000px){.calendar-layout{grid-template-columns:1fr}}.day-detail h3{margin:0 0 4px;font-size:1rem}.day-detail ul{list-style:none;padding:0;margin:8px 0 0;display:grid;gap:6px;font-size:.9rem}.day-detail li{display:flex;justify-content:space-between;gap:8px}.year-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px}.month-grid{border-collapse:separate;border-spacing:3px;width:100%}.month-grid caption{text-align:left;font-weight:650;padding-bottom:2px}.month-grid th{font-size:.7rem;color:var(--muted);font-weight:500}.month-grid td{height:24px;border-radius:5px;text-align:center;font-size:.72rem;font-variant-numeric:tabular-nums;background:var(--surface-2);cursor:pointer;position:relative}.month-grid td[aria-selected=true]{outline:2px solid var(--text);outline-offset:0}.month-grid td:focus-visible{outline:3px solid var(--focus)}.sliders{display:grid;gap:14px}.split{display:grid;gap:6px}.split-head{display:flex;gap:10px;align-items:center;justify-content:space-between}.split-head .name{font-weight:600}.split-head .amount{font-variant-numeric:tabular-nums;margin-left:auto}.split-track{position:relative;height:40px;border-radius:10px;background:var(--surface-2);overflow:hidden;cursor:pointer;touch-action:none}.split-track[data-locked=true]{cursor:not-allowed;background-image:repeating-linear-gradient(135deg,transparent 0 8px,color-mix(in srgb,var(--muted) 14%,transparent) 8px 10px)}.split-budget,.split-actual{position:absolute;left:0;height:50%}.split-budget{top:0;background:var(--budget)}.split-actual{bottom:0;background:var(--actual)}.split-divider{position:absolute;left:0;right:0;top:calc(50% - .5px);height:1px;background:var(--border)}.split-thumb{position:absolute;top:2px;width:6px;height:calc(50% - 4px);margin-left:-3px;border-radius:3px;background:var(--surface);border:2px solid var(--budget)}.split-track:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.split-foot{display:flex;justify-content:space-between;font-size:.85rem;color:var(--muted);font-variant-numeric:tabular-nums}.lock-button[aria-pressed=true]{background:color-mix(in srgb,var(--budget) 18%,var(--surface-2));border-color:var(--budget)}.key{display:inline-flex;gap:14px;font-size:.85rem;color:var(--muted);align-items:center}.key i{display:inline-block;width:18px;height:8px;border-radius:3px;margin-right:5px;vertical-align:middle}.table-wrap{overflow-x:auto}table.data{border-collapse:collapse;width:100%;font-size:.92rem}table.data th,table.data td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--border);vertical-align:middle}table.data td.num,table.data th.num{text-align:right;font-variant-numeric:tabular-nums}table.data tr[data-duplicate=true]{color:var(--muted)}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);padding:28px;text-align:center;display:grid;gap:10px;justify-items:center}.dropzone[data-over=true]{border-color:var(--budget);background:color-mix(in srgb,var(--budget) 8%,transparent)}.palette-swatches{display:inline-flex;gap:3px}.palette-swatches i{width:12px;height:12px;border-radius:50%;display:inline-block}@media (prefers-reduced-motion: no-preference){.split-budget,.split-actual,.split-thumb{transition:width 80ms linear,left 80ms linear}}.events-layout{grid-template-columns:minmax(300px,1.2fr) minmax(280px,1fr);align-items:start}@media (max-width: 900px){.events-layout{grid-template-columns:1fr}}.events-month td{height:44px;vertical-align:top;padding-top:4px;font-size:.85rem}.events-month th{font-size:.78rem}.events-month td.empty{background:transparent;cursor:default}.events-month td.has-events{background:color-mix(in srgb,var(--budget) 22%,var(--surface-2))}.event-dots{display:block;line-height:1;letter-spacing:2px}.agenda{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:6px}.agenda li{display:grid;grid-template-columns:auto 1fr auto auto;gap:10px;align-items:center}.agenda li:not(:has(.agenda-date)){grid-template-columns:1fr auto auto}.agenda-title .hint{display:block}.agenda-date{color:var(--muted);font-variant-numeric:tabular-nums;min-width:6.5em}.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:0 14px}.budget-line{display:grid;gap:4px}.sub-budgets{margin-left:18px}.sub-panel{display:grid;gap:12px;padding:10px 0 6px 14px;border-left:3px solid var(--border)}.link-button{background:none;border:none;padding:2px 0;color:var(--text);text-decoration:underline;font:inherit;font-size:.88rem;cursor:pointer;justify-self:start}.add-category input{flex:1;min-width:12em}.update-banner{position:fixed;bottom:16px;right:16px;z-index:50;max-width:min(420px,calc(100vw - 32px));box-shadow:0 6px 24px #0000002e}.period-bar{display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;justify-content:space-between;margin:var(--gap) 0;padding-block:10px}.period-bar fieldset{border:0;margin:0;padding:0}.month-stepper{display:flex;align-items:center;gap:8px}.month-stepper .period-label{font-weight:700;min-width:10ch;text-align:center}.big-picture,.outlook{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gap);margin-bottom:10px}.big-picture.two{grid-template-columns:repeat(2,minmax(0,1fr))}@media (max-width: 1100px){.big-picture,.big-picture.two,.outlook{grid-template-columns:1fr}}.big-donut h3,.outlook-month h3{margin:0 0 8px;font-size:1rem}.big-donut h3:focus{outline:none}.big-donut .donut-wrap,.outlook-month .donut-wrap{grid-template-columns:1fr;justify-items:center}.big-donut .legend,.outlook-month .legend{width:100%}.figures{display:grid;grid-template-columns:1fr auto;gap:4px 12px;margin:0 0 12px}.figures dt{color:var(--muted)}.figures dd{margin:0;text-align:right;font-variant-numeric:tabular-nums;font-weight:600}.split-scheduled{position:absolute;bottom:0;height:50%;background:repeating-linear-gradient(135deg,var(--actual) 0 3px,transparent 3px 7px);opacity:.75;pointer-events:none}.agenda .paid{display:block;font-size:.8rem}.nav .badge{display:inline-block;min-width:1.5em;margin-left:8px;padding:0 6px;border-radius:999px;background:var(--negative);color:#fff;font-size:.78rem;font-weight:700;line-height:1.5em;text-align:center}.notice-group h3{margin:14px 0 6px;font-size:1rem}.notices{list-style:none;margin:0;padding:0;display:grid;gap:8px}.notices li{display:grid;grid-template-columns:1.5em 1fr auto;gap:10px;align-items:center;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius)}.notices li[data-warn]{border-color:var(--negative)}.notice-mark{font-weight:800;text-align:center}.notices li[data-warn] .notice-mark{color:var(--negative)}.purchases{list-style:none;margin:0;padding:0;display:grid;gap:14px}.purchase{border-top:1px solid var(--border);padding-top:12px}.purchase:first-child{border-top:0;padding-top:0}.purchase h3{margin:0 0 4px}.purchase p{margin:4px 0}.goal-progress{width:100%;height:12px;accent-color:var(--budget)}.pace{font-size:.88rem;font-weight:600;padding:2px 10px;border-radius:999px;border:1px solid var(--border);background:var(--surface-2)}.pace-ahead,.pace-complete{border-color:var(--positive)}.pace-behind,.pace-overdue{border-color:var(--negative)}.purchases-line{padding:8px 0}.split-head .expand-button{padding:2px 8px 2px 4px;gap:3px;border-color:transparent;background:transparent;color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums}.split-head .expand-button:hover{border-color:var(--border);color:var(--text)}.chevron{transform:rotate(0)}.expand-button[aria-expanded=true] .chevron{transform:rotate(90deg)}.split-head .amount-button{padding:2px 6px;border-color:transparent;background:transparent;font-variant-numeric:tabular-nums;cursor:text}.split-head .amount-button:hover{border-color:var(--border);border-style:dashed}.amount-entry{display:inline-flex;align-items:center;gap:2px}.amount-entry input{width:auto;padding:2px 6px;text-align:right;font-variant-numeric:tabular-nums}.unit-switch{padding:4px 8px;gap:5px;font-size:.85rem;--unit: var(--budget)}.unit-switch[data-unit=percent]{--unit: var(--actual)}.unit-switch>span:first-child,.unit-switch>span:last-child{color:var(--muted)}.unit-switch[data-unit=dollars]>span:first-child,.unit-switch[data-unit=percent]>span:last-child{color:var(--text);font-weight:700}.unit-track{position:relative;width:28px;height:16px;border-radius:999px;background:var(--unit);border:1px solid color-mix(in srgb,var(--unit) 70%,var(--text))}.unit-knob{position:absolute;top:1px;left:1px;width:12px;height:12px;border-radius:50%;background:#fff}.unit-switch[data-unit=percent] .unit-knob{transform:translate(12px)}.lock-button:disabled{opacity:.75}.goal-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}.goal-head{gap:10px}.goal-head .goal-share{margin-left:auto;font-variant-numeric:tabular-nums}@media (prefers-reduced-motion: no-preference){.chevron,.unit-knob,.unit-track{transition:transform .2s ease,background-color .2s ease}.sub-panel{animation:sub-open .18s ease-out}}@keyframes sub-open{0%{opacity:0;transform:translateY(-4px)}}.groups-layout{display:grid;grid-template-columns:minmax(240px,1fr) minmax(0,2.4fr);gap:var(--gap);align-items:start}@media (max-width: 900px){.groups-layout{grid-template-columns:1fr}}.group-list,.offers,.balances,.recurring,.members,.split-members{list-style:none;margin:0;padding:0;display:grid;gap:8px}.group-list button{width:100%;display:grid;justify-items:start;text-align:left;gap:2px}.group-list button[aria-current=true]{border-color:var(--budget);background:color-mix(in srgb,var(--budget) 12%,var(--surface-2))}.new-group{margin-top:20px;border-top:1px solid var(--border);padding-top:8px}.group-detail h3{margin:20px 0 8px}.balances li,.recurring li,.members li{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}.balances .reminder{flex-basis:100%}.reminder textarea{width:100%;font:inherit;margin:6px 0}.offers li{border-left:3px solid var(--positive);padding-left:10px}.offers p{margin:0 0 6px}.charges{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.charges th,.charges td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border)}.charges .num{text-align:right}.expense-form{margin-top:20px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius)}.expense-form .form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0 12px}.split-members{margin-top:10px}.split-members li{display:flex;gap:10px;align-items:center}.split-members label{display:inline-flex;gap:6px;align-items:center;min-width:14em}.split-members label span:first-child{min-width:7em}.banner.owed{border-color:var(--positive);background:color-mix(in srgb,var(--positive) 10%,var(--surface))}
