:root{color-scheme:light;--bg: #ededed;--surface: #ffffff;--surface-sunken: #f5f5f5;--ink: #0a0a0a;--ink-muted: #5c5c5c;--ink-faint: #a3a3a3;--hairline: #e5e5e5;--inverse: #ffffff;--data-primary: #0a0a0a;--data-secondary: #d4d4d4;--pos: #1f6b4a;--neg: #a02b2b;--r-card: 24px;--r-inner: 16px;--r-pill: 999px;--shadow: 0 1px 2px rgba(0, 0, 0, .04);--space-1: 8px;--space-2: 16px;--space-3: 24px;--card-padding: 24px;--card-gap: 16px;--page-margin: 24px;--list-row-gap: 8px;--font-sans: "Plus Jakarta Sans", Inter, system-ui, sans-serif;--text-card-title-size: 20px;--text-card-title-weight: 600;--text-card-title-tracking: -.01em;--text-kpi-size: 26px;--text-kpi-weight: 700;--text-body-size: 14px;--text-body-weight: 500;--text-label-size: 12px;--text-label-weight: 500;--text-axis-size: 11px;--text-axis-weight: 500}.tabular-nums{font-variant-numeric:tabular-nums}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-body-size);font-weight:var(--text-body-weight);line-height:1.5}button,input,select{font-family:inherit}.shell{min-height:100vh;padding:var(--page-margin)}.frame{display:flex;align-items:stretch;width:100%;min-height:calc(100vh - (var(--page-margin) * 2));background:var(--surface);border-radius:var(--r-card);box-shadow:var(--shadow);overflow:hidden}.sidebar{width:240px;flex-shrink:0;background:var(--surface);padding:24px 12px;display:flex;flex-direction:column;gap:4px}.sidebar-title{font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--ink);margin:0 0 20px;padding:0 12px}.nav-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.nav-item{width:100%;height:48px;display:flex;align-items:center;gap:10px;padding-left:8px;padding-right:12px;border-radius:var(--r-pill);background:transparent;border:none;color:var(--ink-muted);font-size:14px;font-weight:500;cursor:pointer;text-align:left}.nav-item:hover{background:var(--surface-sunken)}.nav-item.active{background:var(--ink);color:var(--inverse);font-weight:600}.nav-icon{width:32px;height:32px;flex-shrink:0;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--ink);display:flex;align-items:center;justify-content:center}.nav-item.active .nav-icon{background:var(--inverse);color:var(--ink)}.nav-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--ink-muted);font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}.main{flex:1;min-width:0;background:var(--bg);padding:var(--card-padding);overflow-y:auto}h2{font-size:var(--text-card-title-size);font-weight:var(--text-card-title-weight);letter-spacing:var(--text-card-title-tracking);color:var(--ink);margin:0 0 var(--card-gap)}h3{font-size:var(--text-card-title-size);font-weight:var(--text-card-title-weight);letter-spacing:var(--text-card-title-tracking);color:var(--ink);margin:0}h4{font-size:var(--text-label-size);font-weight:600;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.04em;margin:16px 0 8px}.state{color:var(--ink-muted);font-size:var(--text-body-size);padding:16px 0}.state.error{color:var(--ink);background:var(--surface-sunken);border-left:3px solid var(--ink);border-radius:var(--r-inner);padding:12px 16px}.card{background:var(--surface);border-radius:var(--r-card);box-shadow:var(--shadow);padding:var(--card-padding);margin-bottom:var(--card-gap)}.card:last-child{margin-bottom:0}.card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--card-gap);margin-bottom:16px}.card-title{font-size:var(--text-card-title-size);font-weight:var(--text-card-title-weight);letter-spacing:var(--text-card-title-tracking);color:var(--ink);margin:0}.chart-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.legend-item{display:inline-flex;align-items:center;gap:6px;font-size:var(--text-label-size);font-weight:var(--text-label-weight);color:var(--ink-muted)}.legend-dot{width:8px;height:8px;border-radius:var(--r-pill);flex-shrink:0}.chart{font-variant-numeric:tabular-nums}label{display:block;color:var(--ink-muted);font-size:var(--text-label-size);font-weight:var(--text-label-weight);margin-bottom:6px}select,input[type=text],input[type=date],input[type=file]{height:48px;border-radius:var(--r-inner);background:var(--surface-sunken);border:1.5px solid transparent;color:var(--ink);font-size:14px;font-weight:500;padding:0 14px;max-width:100%}input::placeholder{color:var(--ink-faint)}select{border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--hairline);padding:0 14px}select:focus,input:focus{outline:none;background:var(--surface);border-color:var(--ink)}button:focus-visible,select:focus-visible,input:focus-visible{outline:1.5px solid var(--ink);outline-offset:2px}button.action,.btn-primary{height:40px;border-radius:var(--r-pill);background:var(--ink);border:none;color:var(--inverse);font-size:13px;font-weight:600;padding:0 20px;cursor:pointer}button.action:hover:enabled,.btn-primary:hover:enabled{opacity:.85}button.action:disabled,.btn-primary:disabled{background:var(--surface-sunken);color:var(--ink-faint);cursor:default}button.link{background:none;border:none;color:var(--ink-muted);font:inherit;font-size:13px;font-weight:500;padding:2px 4px;cursor:pointer;text-decoration:underline;text-underline-offset:2px}button.link:hover{color:var(--ink)}button.link:disabled{color:var(--ink-faint);cursor:default;text-decoration:none}button.step{width:36px;height:36px;border-radius:var(--r-pill);background:var(--surface-sunken);border:none;color:var(--ink);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}button.step:hover:enabled{background:var(--hairline)}button.step:disabled{color:var(--ink-faint);cursor:default}.form-row{display:flex;gap:var(--card-gap);align-items:flex-end;flex-wrap:wrap;margin-bottom:0}.view-head{display:flex;align-items:center;justify-content:space-between;gap:var(--card-gap);margin-bottom:var(--card-gap)}.inline-form{background:var(--surface-sunken);border-radius:var(--r-inner);padding:16px;margin-top:var(--card-gap)}.inline-form select,.inline-form input[type=text],.inline-form input[type=date]{background:var(--surface)}.inline-form .state.error{margin:12px 0 0}.badge-pill{display:inline-flex;align-items:center;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--ink-muted);font-size:var(--text-label-size);font-weight:var(--text-label-weight);padding:6px 14px;margin-left:8px}.amount-value{display:inline-flex;align-items:center;gap:4px;font-variant-numeric:tabular-nums}.num{font-variant-numeric:tabular-nums}.num.pos,.amount-value.pos{color:var(--pos)}.num.neg,.amount-value.neg{color:var(--neg)}table{width:100%;border-collapse:separate;border-spacing:0 var(--list-row-gap)}thead th{text-align:left;color:var(--ink-muted);font-size:var(--text-label-size);font-weight:var(--text-label-weight);padding:0 20px 8px;white-space:nowrap}th.amount,td.amount{text-align:right}tbody td{background:var(--surface-sunken);padding:0 20px;height:64px;vertical-align:middle;border-top:1px solid transparent;border-bottom:1px solid transparent}tbody td:first-child{border-left:1px solid transparent;border-top-left-radius:var(--r-inner);border-bottom-left-radius:var(--r-inner)}tbody td:last-child{border-right:1px solid transparent;border-top-right-radius:var(--r-inner);border-bottom-right-radius:var(--r-inner)}tbody tr:hover td{background:var(--surface);border-color:var(--hairline)}td.date{white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--ink-muted)}td.purpose{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-muted)}td.counterparty{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-weight:500}td.category{white-space:nowrap;color:var(--ink-muted)}td.category select{height:36px;font-size:13px}button.cell-edit{background:none;border:none;padding:0;font:inherit;color:var(--ink-muted);cursor:pointer;text-align:left;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button.cell-edit:hover{color:var(--ink);text-decoration:underline dotted;text-underline-offset:2px}button.cell-edit:disabled{color:var(--ink-faint);cursor:default}tr.rule-form-row td{background:var(--surface-sunken);height:auto;padding:16px 20px;border-radius:var(--r-inner)}.rule-form{display:flex;gap:var(--card-gap);align-items:flex-end;flex-wrap:wrap}.month-nav{display:flex;align-items:center;gap:var(--space-1);margin-bottom:var(--card-gap)}.month-nav .month{font-variant-numeric:tabular-nums;font-weight:600;min-width:64px;text-align:center}.summary .card-title{margin-bottom:16px}.summary dl{display:grid;grid-template-columns:max-content max-content;gap:6px 24px;margin:0}.summary dt{color:var(--ink-muted);font-size:var(--text-body-size)}.summary dd{margin:0;text-align:right;font-variant-numeric:tabular-nums;font-weight:600}.summary .errors{margin:16px 0 0;padding-left:18px;color:var(--ink-muted);font-size:13px}.hint{color:var(--ink-faint);font-size:var(--text-axis-size);font-weight:var(--text-axis-weight);margin-top:8px}.notice{border-radius:var(--r-inner);padding:12px 16px;margin-bottom:var(--card-gap);color:var(--ink);background:var(--surface-sunken);font-size:var(--text-body-size)}.dash-nav{margin-bottom:var(--card-gap)}.dash-period{font-size:16px;font-weight:600;min-width:150px;text-align:center;font-variant-numeric:tabular-nums}.dash-head{margin-bottom:var(--card-gap)}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--card-gap);margin:0}@media(max-width:900px){.stat-grid{grid-template-columns:repeat(2,1fr)}}.stat-card{position:relative;background:var(--surface);border-radius:var(--r-inner);box-shadow:var(--shadow);padding:20px;display:flex;flex-direction:column}.stat-icon{width:44px;height:44px;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--ink);display:flex;align-items:center;justify-content:center;margin-bottom:12px}.stat-card.featured .stat-icon{background:var(--ink);color:var(--inverse)}.stat-value{font-size:var(--text-kpi-size);font-weight:var(--text-kpi-weight);color:var(--ink);font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;gap:4px}.stat-label{font-size:var(--text-label-size);font-weight:var(--text-label-weight);color:var(--ink-muted);margin-top:4px}.stat-affordance{position:absolute;right:16px;bottom:16px;width:28px;height:28px;border-radius:var(--r-pill);background:var(--surface-sunken);color:var(--ink);display:flex;align-items:center;justify-content:center}.dash-sub{color:var(--ink-muted);font-size:var(--text-label-size);font-variant-numeric:tabular-nums;margin:12px 0 0}.warn-link{display:inline-flex;align-items:center;gap:8px;background:var(--surface-sunken);border:1px solid transparent;border-radius:var(--r-pill);color:var(--ink-muted);font:inherit;font-size:12px;font-weight:500;padding:10px 16px;margin-top:12px;cursor:pointer;text-align:left}.warn-link:hover{background:var(--surface);border:1px solid var(--hairline);color:var(--ink)}.dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--card-gap)}.dash-grid>.card{min-width:0}.dash-wide{grid-column:1 / -1}@media(max-width:800px){.dash-grid{grid-template-columns:1fr}}.cat-group{margin-bottom:16px}.cat-group:last-child{margin-bottom:0}.cat-group-label{color:var(--ink-muted);font-size:var(--text-label-size);font-weight:600;text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}.cat-row{display:grid;grid-template-columns:minmax(90px,max-content) 1fr max-content;align-items:center;gap:10px;padding:4px 0}.cat-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-body-size)}.cat-bar{display:block;height:8px;background:var(--surface-sunken);border-radius:var(--r-pill);overflow:hidden}.cat-bar-fill{display:block;height:100%;background:var(--ink);border-radius:var(--r-pill)}.cat-amount{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.cat-amount.pos{color:var(--pos)}.cat-amount.neg{color:var(--neg)}.goal-context{color:var(--ink-muted);font-size:var(--text-body-size);margin:0 0 var(--card-gap)}.goal{padding:var(--card-padding)}.goal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--card-gap);margin-bottom:16px}.goal-name{font-weight:600;font-size:16px;color:var(--ink)}.goal-flag{background:var(--ink);color:var(--inverse)}.goal-meta{color:var(--ink-muted);font-size:var(--text-label-size);margin-top:4px}.goal-actions{display:flex;align-items:center;gap:8px;white-space:nowrap;flex-shrink:0}.goal-confirm{color:var(--ink-muted);font-size:var(--text-label-size)}.goal-rate{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;padding:16px;margin-bottom:16px;background:var(--surface-sunken);border-radius:var(--r-inner)}.goal-rate-label{color:var(--ink-muted);font-size:var(--text-label-size);font-weight:600;text-transform:uppercase;letter-spacing:.05em;width:100%}.goal-rate-value{font-size:var(--text-kpi-size);font-weight:var(--text-kpi-weight);font-variant-numeric:tabular-nums;color:var(--ink)}.goal-rate-unit{font-size:13px;font-weight:500;color:var(--ink-muted)}.goal-rate-sub{color:var(--ink-muted);font-size:var(--text-label-size);width:100%}.goal-progress{display:grid;grid-template-columns:minmax(80px,220px) 1fr;align-items:center;gap:12px;padding:8px 0 16px}.goal-progress-text{color:var(--ink-muted);font-size:var(--text-label-size)}.goal-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:8px 0}.goal-row label{margin-bottom:0;white-space:nowrap}.goal-row .hint{margin-top:0}.goal-row-result{color:var(--ink-muted);font-size:var(--text-label-size)}.goal-row-error{margin:4px 0 0}.goal-allocations{display:flex;flex-direction:column;gap:6px;list-style:none;margin:12px 0 0;padding:12px 0 0;border-top:1px solid var(--hairline)}.goal-allocations li{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--surface-sunken);border-radius:var(--r-inner);padding:0 16px;height:40px;font-size:var(--text-label-size)}.goal-alloc-month{color:var(--ink-muted)}.year-table td.year-month{color:var(--ink-muted);white-space:nowrap;font-weight:500}.year-table tfoot td{background:var(--surface-sunken);padding:0 20px;height:48px;vertical-align:middle;font-weight:700}.year-table tfoot td:first-child{border-top-left-radius:var(--r-inner);border-bottom-left-radius:var(--r-inner)}.year-table tfoot td:last-child{border-top-right-radius:var(--r-inner);border-bottom-right-radius:var(--r-inner)}.year-table tr.year-total td{background:var(--surface);border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}.year-table tr.year-total td:first-child{border-left:1px solid var(--hairline)}.year-table tr.year-total td:last-child{border-right:1px solid var(--hairline)}.agent-notice p{margin:0 0 8px;font-size:var(--text-body-size)}.agent-notice-counts{color:var(--ink-muted);font-size:var(--text-label-size)}.agent-payload{margin:12px 0 0;padding:12px 16px;max-height:320px;overflow:auto;background:var(--surface-sunken);border-radius:var(--r-inner);font-size:11px;line-height:1.5;white-space:pre;color:var(--ink-muted)}.agent-block-head{display:flex;align-items:center;justify-content:space-between;gap:var(--card-gap);margin-bottom:12px}.agent-block-head h3,.agent-block-head h4{margin:0}.agent-goal-name{font-size:16px;font-weight:600;color:var(--ink);text-transform:none;letter-spacing:normal}.agent-report{padding-top:4px}.agent-report h4:first-child{margin-top:4px}.agent-headline{margin:0 0 12px;font-weight:600;font-size:15px;color:var(--ink)}.agent-list{list-style:none;margin:0 0 4px;padding:0;display:flex;flex-direction:column;gap:8px}.agent-list li{display:grid;grid-template-columns:1fr auto;gap:2px 12px;padding:12px 20px;background:var(--surface-sunken);border-radius:var(--r-inner)}.agent-item-title{font-weight:600;font-size:var(--text-body-size);color:var(--ink)}.agent-item-amount{font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right;font-weight:600}.agent-item-detail{grid-column:1 / -1;color:var(--ink-muted);font-size:13px}.agent-goal{border-top:1px solid var(--hairline);padding-top:20px;margin-top:20px}.agent-goal:first-of-type{border-top:none;padding-top:0;margin-top:0}.agent-goal-facts{margin:0 0 12px;color:var(--ink-muted);font-variant-numeric:tabular-nums;font-size:var(--text-body-size)}.agent-goal-verdict{margin:12px 0 0;font-size:var(--text-body-size)}.agent-meta{margin:16px 0 0;font-size:var(--text-axis-size);color:var(--ink-faint);font-variant-numeric:tabular-nums}
