.month-picker__trigger{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);min-width:112px;min-height:var(--size-touch-min);padding:0 var(--space-1);background:transparent;border:0;border-radius:var(--radius-md);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}.month-picker__trigger:hover{background:var(--color-brand-50)}.month-picker__caret{font-size:var(--text-xs);line-height:1;color:var(--color-ink-3)}.month-picker__scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-overlay);background:var(--color-overlay)}.month-picker{display:flex;flex-direction:column;background:var(--color-surface)}.month-picker--sheet{position:fixed;inset:auto 0 0 0;z-index:var(--z-sheet);height:400px;max-height:88dvh;overflow-y:auto;padding:0 var(--layout-pad-compact);border-radius:var(--radius-xl) var(--radius-xl) 0 0;box-shadow:var(--shadow-e4);animation:month-picker-slide-up var(--dur-sheet) var(--ease-out)}.month-picker--popover{position:fixed;z-index:var(--z-dropdown);width:320px;padding:0 var(--space-5);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-e3);animation:month-picker-fade-in var(--dur-base) var(--ease-out)}@keyframes month-picker-slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes month-picker-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.month-picker__head{display:flex;flex:none;align-items:center;justify-content:space-between;gap:var(--space-2)}.month-picker--sheet .month-picker__head{height:48px}.month-picker--popover .month-picker__head{height:44px}.month-picker__title{font-size:var(--text-base);font-weight:var(--weight-semibold)}.month-picker__close{display:inline-flex;align-items:center;justify-content:center;min-width:var(--size-touch-min);min-height:var(--size-touch-min);padding:0;color:var(--color-ink-2);cursor:pointer;background:transparent;border:0;border-radius:var(--radius-md)}.month-picker--popover .month-picker__close{min-width:32px;min-height:32px}.month-picker__close:hover{color:var(--color-brand-600);background:var(--color-brand-50)}.month-picker__rail{display:flex;flex:none;align-items:center;justify-content:space-between;gap:var(--space-2)}.month-picker--sheet .month-picker__rail{height:56px}.month-picker--popover .month-picker__rail{height:44px}.month-picker__rail-btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--size-touch-min);min-height:var(--size-touch-min);padding:0;font-size:var(--text-lg);line-height:1;color:var(--color-ink);cursor:pointer;background:transparent;border:0;border-radius:var(--radius-md);transition:background-color var(--dur-fast) var(--ease-out)}.month-picker__rail-btn:hover{color:var(--color-brand-600);background:var(--color-brand-50)}.month-picker__rail-btn--disabled,.month-picker__rail-btn--disabled:hover{color:var(--color-ink-3);cursor:not-allowed;background:transparent}.month-picker__rail-btn--disabled{box-shadow:inset 0 0 0 1px var(--color-border-control)}.month-picker__year{flex:1;font-size:var(--text-lg);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums;text-align:center}.month-picker__grid{display:grid;flex:none;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-2)}.month-picker__cell{position:relative;isolation:isolate;display:inline-flex;align-items:center;justify-content:center;min-width:0;padding:0;font-size:var(--text-base);color:var(--color-ink);cursor:pointer;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}.month-picker--sheet .month-picker__cell{height:48px;min-height:48px}.month-picker__cell--heat1:before,.month-picker__cell--heat2:before,.month-picker__cell--heat3:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:var(--color-accent-600);pointer-events:none;z-index:0}.month-picker__cell-label,.month-picker__badge{position:relative;z-index:1}.month-picker__dot{z-index:1}.month-picker__cell--heat1:before{opacity:.1}.month-picker__cell--heat2:before{opacity:.24}.month-picker__cell--heat3:before{opacity:.4}.month-picker__cell--current:before{opacity:0}.month-picker--popover .month-picker__cell{height:40px;min-height:40px;font-size:var(--text-sm)}.month-picker__cell:hover{border-color:var(--color-brand-600);background:var(--color-brand-50)}.month-picker__cell--current,.month-picker__cell--current:hover{color:var(--color-surface);background:var(--color-brand-600);border-color:var(--color-brand-600)}.month-picker__cell--today{border-color:var(--color-brand-600)}.month-picker__cell--out{color:var(--color-ink-3);cursor:default;background:var(--color-sunken);border-color:transparent}.month-picker__cell-label{line-height:1}.month-picker__badge{position:absolute;top:2px;right:4px;font-size:.625rem;line-height:1;color:var(--color-brand-600)}.month-picker__cell--current .month-picker__badge{color:var(--color-surface)}.month-picker__dot{position:absolute;right:6px;bottom:6px;width:4px;height:4px;background:var(--color-ink-3);border-radius:var(--radius-full)}.month-picker__cell--current .month-picker__dot{background:var(--color-surface)}.month-picker__foot{flex:none;padding:var(--space-4) 0}.month-picker--popover .month-picker__foot{padding:var(--space-4) 0 var(--space-5)}.month-picker__today{width:100%;min-height:48px}.month-picker--popover .month-picker__today{min-height:40px}.month-picker__today[aria-disabled=true]{color:var(--color-ink-3);cursor:not-allowed}@media(prefers-reduced-motion:reduce){.month-picker--sheet,.month-picker--popover{animation:none}}.view-switch{display:inline-flex;gap:4px;margin-left:auto}.ledger__body--flipping{scroll-behavior:auto}.cal{padding:8px 0 16px}.cal__table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:2px}.cal__weekday{padding:4px 0;font-size:11px;font-weight:500;color:var(--color-ink-3);text-align:center}.cal__cell{position:relative;height:52px;padding:3px 2px;border-radius:var(--radius-sm);background:var(--color-surface);text-align:center;vertical-align:top}.cal__cell--outside{background:transparent}.cal__cell--outside .cal__day{color:var(--color-ink-3);opacity:.45}.cal__cell--has-data{background:var(--color-accent-50)}.cal__cell--today{outline:2px solid var(--color-brand-600);outline-offset:-2px}.cal__cell--saved{background:var(--color-brand-100);box-shadow:inset 0 0 0 2px var(--color-brand-600)}.cal__day{display:block;font-size:11px;line-height:14px;color:var(--color-ink-2)}.cal__amount{display:block;font-size:10px;line-height:14px;letter-spacing:-.02em;color:var(--color-accent-700);white-space:nowrap;overflow:hidden;text-overflow:clip}.cal__income{position:absolute;top:2px;right:3px;font-size:9px;line-height:1;color:var(--color-brand-700)}.cal__note{margin:8px 0 0;font-size:12px;color:var(--color-ink-3)}.cal__hit{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:block;width:100%;height:100%;padding:0;border:0;border-radius:inherit;background:transparent;cursor:pointer}.cal__hit:focus-visible{outline:2px solid var(--color-accent-600);outline-offset:2px}.cal__cell.cal__cell--expanded{border-color:var(--color-ink);box-shadow:0 0 0 2px var(--color-ink)}.cal-detail{display:flex;flex-direction:column;gap:6px;margin-top:10px;padding:8px 0 0 var(--space-2);border-left:2px solid var(--color-accent-600)}.cal-detail__head{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;padding:0 var(--space-1)}.cal-detail__title{margin:0;font-size:var(--text-sm);font-weight:600;color:var(--color-ink)}.cal-detail__sum{display:inline-flex;gap:var(--space-2);font-size:var(--text-xs);color:var(--color-ink-3)}.cal-detail__count{font-size:var(--text-xs);color:var(--color-ink-3)}.cal-detail__close{margin-left:auto}.cal-detail__note{margin:0;padding:0 var(--space-1);font-size:var(--text-xs);color:var(--color-ink-3)}.cal__error{padding:4px 0 10px}.cal--error{padding:16px 0}.cal__error-title{margin:0 0 4px;font-size:14px;font-weight:600;color:var(--color-ink)}.cal__error-desc{margin:0 0 8px;font-size:13px;color:var(--color-ink-2)}@media(prefers-reduced-motion:no-preference){.cal{animation:cal-fade-in .16s ease-out both}@keyframes cal-fade-in{0%{opacity:0}to{opacity:1}}}@media(prefers-reduced-motion:reduce){.cal,.cal *,.yr,.yr *{animation:none!important;transition:none!important}}.yr{padding:8px 0 16px}.yr__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}@media(min-width:768px){.yr__grid{grid-template-columns:repeat(4,minmax(0,1fr))}}.yr__cell-wrap{display:block;min-width:0}.yr__cell{position:relative;display:flex;flex-direction:column;justify-content:center;gap:2px;width:100%;height:62px;padding:6px 8px;border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-ink);font:inherit;text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}.yr__cell:hover{border-color:var(--color-accent-600)}.yr__cell:focus-visible{outline:2px solid var(--color-accent-600);outline-offset:2px}.yr__month{font-size:12px;font-weight:600;line-height:16px;color:var(--color-ink-2)}.yr__amount{font-size:13px;font-weight:600;line-height:18px;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.yr__cell--surplus1:before,.yr__cell--surplus2:before,.yr__cell--surplus3:before,.yr__cell--deficit1:before,.yr__cell--deficit2:before,.yr__cell--deficit3:before,.yr__cell--flat:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;z-index:0}.yr__cell--surplus1:before,.yr__cell--surplus2:before,.yr__cell--surplus3:before{background:var(--color-income-600)}.yr__cell--deficit1:before,.yr__cell--deficit2:before,.yr__cell--deficit3:before{background:var(--color-expense-600)}.yr__cell--flat:before{background:var(--color-ink-2);opacity:.1}.yr__cell--surplus1:before,.yr__cell--deficit1:before{opacity:.1}.yr__cell--surplus2:before,.yr__cell--deficit2:before{opacity:.22}.yr__cell--surplus3:before,.yr__cell--deficit3:before{opacity:.34}.yr__month,.yr__amount{position:relative;z-index:1}.yr__amount--surplus{color:var(--color-income-700)}.yr__amount--deficit{color:var(--color-expense-700)}.yr__amount--flat{color:var(--color-ink-2)}.yr__cell.yr__cell--current{border-color:var(--color-ink);box-shadow:0 0 0 2px var(--color-ink)}.yr__cell--current:focus-visible{outline-offset:4px}.yr__cell--current .yr__month{text-decoration:underline;text-decoration-color:var(--color-ink);text-decoration-thickness:2px;text-underline-offset:2px}.yr__note{margin:10px 0 0;font-size:12px;line-height:18px;color:var(--color-ink-3)}.yr--error{padding:16px 0}.yr__error{padding:4px 0 10px}.yr__error-title{margin:0 0 4px;font-size:14px;font-weight:600;color:var(--color-ink)}.yr__error-desc{margin:0 0 8px;font-size:13px;color:var(--color-ink-2)}.cat-view{display:flex;flex-direction:column;gap:12px;padding:4px 0 8px}.cat-view__error{display:flex;flex-direction:column;gap:6px;padding:12px;border-radius:var(--radius-md);border:1px solid var(--color-border-subtle);background:var(--color-surface)}.cat-view__error-title{margin:0;font-size:14px;font-weight:600;color:var(--color-ink)}.cat-view__error-desc{margin:0;font-size:13px;line-height:18px;color:var(--color-ink-3)}.cat-view__note{margin:0;font-size:12px;line-height:16px;color:var(--color-ink-3)}.cat-group{display:flex;flex-direction:column;gap:6px}.cat-group__head{display:flex;align-items:baseline;gap:8px;padding:0 2px}.cat-group__title{margin:0;font-size:13px;font-weight:600;color:var(--color-ink)}.cat-group__sum{font-size:13px;font-weight:600;color:var(--color-ink)}.cat-group__count{font-size:12px;color:var(--color-ink-3)}.cat-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px}.cat-row{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;grid-template-areas:"icon name amount share" "bar bar bar bar";align-items:center;gap:2px 8px;padding:8px 10px;border-radius:var(--radius-md);border:1px solid var(--color-border-subtle);background:var(--color-surface)}.cat-row>.ledger-icon{grid-area:icon}.cat-row__name{grid-area:name;min-width:0;font-size:14px;color:var(--color-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cat-row__count{margin-left:6px;font-size:12px;color:var(--color-ink-3)}.cat-row__amount{grid-area:amount;font-size:14px;font-weight:600;color:var(--color-ink);text-align:right}.cat-row__share{grid-area:share;min-width:40px;font-size:12px;color:var(--color-ink-3);text-align:right;font-variant-numeric:tabular-nums}.cat-row__bar{grid-area:bar;display:block;height:3px;border-radius:var(--radius-full);background:var(--color-sunken);overflow:hidden}.cat-row__bar-fill{display:block;height:100%;border-radius:var(--radius-full);background:var(--color-accent-600)}@media(prefers-reduced-motion:reduce){.cat-row__bar-fill{transition:none}}.cat-row__trigger{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;padding:0;border:0;border-radius:inherit;background:transparent;cursor:pointer}.cat-row__trigger:focus-visible{outline:2px solid var(--color-accent-600);outline-offset:2px}.cat-row.cat-row--expanded{border-color:var(--color-ink);box-shadow:0 0 0 2px var(--color-ink)}.cat-detail{margin:0 0 4px;padding:4px 0 0 var(--space-2);border-left:2px solid var(--color-accent-600)}.cat-detail__note{margin:0;padding:0 var(--space-1);font-size:var(--text-xs);color:var(--color-ink-3)}.ledger-controls{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;padding:4px 0}.sort-cycle{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;min-height:32px;min-width:44px;padding:0 10px;border-radius:var(--radius-full);border:1px solid var(--color-border-subtle);background:var(--color-surface);color:var(--color-ink-2);cursor:pointer;transition:background-color .12s ease}.sort-cycle:hover:not(:disabled){background:var(--color-sunken)}.sort-cycle:focus-visible{outline:2px solid var(--color-accent-700);outline-offset:2px}.sort-cycle--disabled,.sort-cycle:disabled{color:var(--color-ink-3);background:var(--color-surface);cursor:not-allowed}@media(prefers-reduced-motion:reduce){.sort-cycle{transition:none}}.sort-chip{display:inline-flex;align-items:center;justify-content:center;min-height:32px;min-width:44px;padding:0 10px;border-radius:var(--radius-full);border:1px solid var(--color-border-subtle);background:var(--color-surface);color:var(--color-ink-3);font-size:13px;line-height:1;text-decoration:none;transition:background-color .12s ease}.sort-chip__icon{display:block;flex:0 0 auto;width:16px;height:16px}.sort-chip:hover{background:var(--color-sunken)}.sort-chip--active{border-color:var(--color-accent-600);background:var(--color-accent-50);color:var(--color-accent-700);font-weight:600}.sort-chip:focus-visible{outline:2px solid var(--color-accent-700);outline-offset:2px}.tx-group--flat{padding-top:0}@media(prefers-reduced-motion:reduce){.sort-chip{transition:none}}.ledger__stage{position:relative;transform:scale(var(--pinch-damp, 1));transform-origin:center top}.ledger__stage-view{position:absolute;inset:0 0 auto;width:100%;opacity:0;visibility:hidden;pointer-events:none}.ledger__stage-view--active,.ledger__stage-view--source{position:relative;inset:auto;visibility:visible;pointer-events:auto}.ledger__stage-view--active{opacity:1}.ledger__stage-view--source{opacity:var(--pinch-src, 1)}.ledger__stage-view--target{opacity:var(--pinch-arr, 0);visibility:visible}.ledger__stage--pinching .ledger__stage-view{pointer-events:none}.keypad-wrap{flex:none;padding-bottom:env(safe-area-inset-bottom);background:var(--color-sunken)}.keypad{--key-h: var(--size-key-h);--keypad-hover: var(--color-canvas);--keypad-pressed: var(--color-key-pressed);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(4,var(--key-h));gap:0;background:var(--color-sunken);touch-action:manipulation;overscroll-behavior:contain}@media(max-width:767px)and (max-height:619px){.keypad{--key-h: 48px}}.keypad__key{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%;margin:0;padding:0;border:0;border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-ink);font-family:var(--font-sans);font-size:var(--text-xl);font-weight:var(--weight-regular);line-height:1;font-variant-numeric:tabular-nums;box-shadow:inset 0 1px 0 var(--color-border-subtle);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color var(--dur-fast) var(--ease-out)}.keypad__key--plus,.keypad__key--minus,.keypad__key--back{font-size:var(--text-lg);color:var(--color-ink-2)}.keypad__key--date{font-size:var(--text-sm);color:var(--color-ink-2);white-space:nowrap}.keypad-wrap[data-layout=desktop] .keypad__key{border-radius:var(--radius-md)}.keypad-wrap[data-layout=desktop] .keypad__key--digit{font-size:var(--text-lg)}@media(hover:hover){.keypad__key:hover{background:var(--keypad-hover)}}.keypad__key--active{background:var(--keypad-pressed);box-shadow:inset 0 1px 0 var(--color-border-subtle),inset 0 0 0 2px var(--color-brand-600)}.keypad__key:not(.keypad__key--blocked):not(.keypad__key--submitting):active{background:var(--keypad-pressed);box-shadow:inset 0 1px 0 var(--color-border-subtle),inset 0 0 0 2px var(--color-brand-600)}.keypad__key--done.keypad__key--ready,.keypad__key--done.keypad__key--evaluable{background:var(--color-brand-600);color:var(--color-surface);font-size:var(--text-xl);font-weight:var(--weight-bold);box-shadow:inset 0 -1px 0 var(--color-hairline-shadow)}.keypad__key--done.keypad__key--ready.keypad__key--active,.keypad__key--done.keypad__key--evaluable.keypad__key--active,.keypad__key--done.keypad__key--ready:active,.keypad__key--done.keypad__key--evaluable:active{background:var(--color-brand-700);box-shadow:inset 0 -1px 0 var(--color-hairline-shadow)}.keypad__key--done.keypad__key--blocked{background:var(--color-sunken);color:var(--color-ink-3);font-weight:var(--weight-regular);box-shadow:none;outline:1px dashed var(--color-border-control);outline-offset:-1px;cursor:not-allowed}.keypad__key--done.keypad__key--submitting{background:var(--color-brand-600);color:var(--color-surface);font-size:var(--text-xl);font-weight:var(--weight-bold);cursor:progress;opacity:.72}.keypad__ring{position:absolute;top:8px;right:8px;width:14px;height:14px;border:2px solid var(--color-spinner-track);border-top-color:var(--color-surface);border-radius:var(--radius-full);animation:keypad-ring-in var(--dur-fast) var(--ease-out) .12s both,keypad-ring-spin .7s linear infinite}@keyframes keypad-ring-in{0%{opacity:0}to{opacity:1}}@keyframes keypad-ring-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.keypad__ring{animation:none}}.amount-display{display:block;width:100%;min-width:0;min-height:var(--size-input-h-compact);padding:0 var(--space-2);border-radius:var(--radius-md);background:var(--color-sunken);color:var(--color-ink);font-family:var(--font-money);font-size:var(--text-2xl);font-variant-numeric:tabular-nums;line-height:var(--size-input-h-compact);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.amount-display--empty{color:var(--color-ink-3)}@media(min-width:768px){.amount-display{font-size:var(--text-xl);line-height:var(--size-input-h-ultra);min-height:var(--size-input-h-ultra)}}.tx-detail__scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-dialog);display:flex;align-items:flex-end;background:var(--color-overlay);animation:tx-detail-scrim-in var(--dur-base) var(--ease-out)}.tx-detail{position:relative;width:100%;max-height:88dvh;overflow:auto;padding:var(--space-4) var(--space-4) var(--space-6);background:var(--color-surface);border-radius:var(--radius-xl) var(--radius-xl) 0 0;box-shadow:var(--shadow-e4);outline:none;animation:tx-detail-in var(--dur-sheet) var(--ease-out)}.tx-detail--closing{animation:tx-detail-out var(--dur-sheet) var(--ease-in) forwards}.tx-detail__scrim--closing{animation:tx-detail-scrim-out var(--dur-base) var(--ease-in) forwards}.tx-detail__title{display:flex;align-items:center;gap:var(--space-2);padding-right:var(--space-10);font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--color-ink);line-height:var(--leading-title)}.tx-detail__close{position:absolute;top:var(--space-2);right:var(--space-2);display:inline-flex;align-items:center;justify-content:center;width:var(--size-touch-min);height:var(--size-touch-min);border:0;border-radius:var(--radius-md);background:transparent;color:var(--color-ink-2);font-size:var(--text-base);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}.tx-detail__close:hover{background:var(--color-sunken);color:var(--color-ink)}.tx-detail__amount{margin-top:var(--space-4);font-size:var(--text-2xl);font-weight:var(--weight-semibold);line-height:var(--leading-money)}.tx-detail__amount--expense{color:var(--color-expense-700)}.tx-detail__amount--income{color:var(--color-income-700)}.tx-detail__meta{margin-top:var(--space-1);font-size:var(--text-sm);color:var(--color-ink-3)}.tx-detail__fields{display:grid;gap:var(--space-1);margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--color-border-subtle)}.tx-detail__field{display:grid;grid-template-columns:minmax(0,6rem) minmax(0,1fr);align-items:baseline;gap:var(--space-3);padding:var(--space-2) 0;border-top:1px solid var(--color-border-subtle)}.tx-detail__field:first-child{border-top:0}.tx-detail__field dt{font-size:var(--text-sm);color:var(--color-ink-3)}.tx-detail__field dd{min-width:0;font-size:var(--text-base);color:var(--color-ink);overflow-wrap:anywhere}.tx-detail__raw{margin-left:var(--space-2);font-size:var(--text-xs);color:var(--color-ink-3)}.tx-detail__foot{display:flex;gap:var(--space-2);margin-top:var(--space-5)}.tx-detail__foot .btn{flex:1;min-height:var(--size-touch-min)}@keyframes tx-detail-in{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}@keyframes tx-detail-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(24px)}}@keyframes tx-detail-scrim-in{0%{opacity:0}to{opacity:1}}@keyframes tx-detail-scrim-out{0%{opacity:1}to{opacity:0}}@media(prefers-reduced-motion:reduce){.tx-detail,.tx-detail--closing,.tx-detail__scrim,.tx-detail__scrim--closing{animation:none}}:root{--color-brand-50: #fdeee8;--color-brand-100: #fad9cb;--color-brand-600: #c3462c;--color-brand-700: #9e3520;--color-brand-900: #6e2414;--color-accent-50: #e8f0ff;--color-accent-600: #0b5cf0;--color-accent-700: #0a46be;--color-ink: #211b16;--color-ink-2: #574e45;--color-ink-3: #6f6459;--color-surface: #ffffff;--color-canvas: #fbf7f1;--color-sunken: #f5efe6;--color-border-subtle: #ebe3d8;--color-border-control: #9c8b77;--color-income-50: #e8f6f0;--color-income-600: #0f7a5a;--color-income-700: #0b5e45;--color-expense-50: #faecf3;--color-expense-600: #96164a;--color-expense-700: #7c1348;--color-warn-50: #fff6e5;--color-warn-700: #a45a08;--color-overlay: rgb(46 34 26 / 40%);--color-key-pressed: #efe6d9;--color-hairline-shadow: rgb(74 54 40 / 16%);--color-spinner-track: rgb(255 255 255 / 45%);--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.25rem;--text-xl: 1.5rem;--text-2xl: 2rem;--text-3xl: 2.5rem;--leading-xs: 16px;--leading-sm: 20px;--leading-base: 24px;--leading-lg: 28px;--leading-xl: 32px;--leading-2xl: 40px;--leading-3xl: 44px;--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--leading-body: 1.5;--leading-title: 1.25;--leading-money: 1.1;--font-sans: system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;--font-money: var(--font-sans);--tnum-feature: "tnum";--space-0-5: 2px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-xl: 22px;--radius-full: 999px;--shadow-e1: 0 1px 2px rgb(74 54 40 / 5%), 0 2px 8px rgb(74 54 40 / 5%);--shadow-e2: 0 2px 6px rgb(74 54 40 / 6%), 0 8px 20px rgb(74 54 40 / 8%);--shadow-e3: 0 8px 24px rgb(74 54 40 / 10%), 0 20px 44px rgb(74 54 40 / 12%);--shadow-e4: 0 -10px 44px rgb(74 54 40 / 14%);--z-sticky: 10;--z-fab: 20;--z-dropdown: 30;--z-overlay: 40;--z-sheet: 50;--z-dialog: 60;--z-undo: 70;--z-toast: 80;--dur-fast: .12s;--dur-base: .18s;--dur-sheet: .24s;--dur-progress: 1.1s;--ease-out: cubic-bezier(.2, .8, .2, 1);--ease-in: cubic-bezier(.4, 0, 1, 1);--layout-sidebar-w: 216px;--layout-topnav-h: 56px;--layout-bottomnav-h: 56px;--layout-fab-size: 56px;--layout-fab-inset: var(--space-4);--layout-rail-w: 380px;--layout-drawer-w-medium: 420px;--layout-drawer-w-wide: 400px;--layout-pad-compact: var(--space-4);--layout-pad-desktop: var(--space-6);--layout-content-max: 1080px;--layout-login-card-w: 360px;--layout-table-min-w: 684px;--size-touch-min: 44px;--size-row-compact: 64px;--size-row-medium: 60px;--size-row-ultra: 48px;--size-key-h: 52px;--size-chip: 36px;--size-cat-cell-compact: 54px;--size-cat-cell-desktop: 64px;--size-cat-icon-compact: 36px;--size-cat-icon-desktop: 40px;--size-input-h-compact: 48px;--size-input-h-medium: 44px;--size-input-h-ultra: 40px}@media(prefers-reduced-motion:reduce){:root{--dur-fast: 0ms;--dur-base: 0ms;--dur-sheet: 0ms}}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--color-canvas);color:var(--color-ink);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}html{cursor:default}*,*:before,*:after{cursor:inherit}body{caret-color:transparent}a,button,summary,[role=button],[role=tab],[role=menuitem],[role=option],[role=switch],[role=checkbox],input[type=checkbox],input[type=radio]{cursor:pointer}button:disabled,[aria-disabled=true]{cursor:default}input:not([type=checkbox]):not([type=radio]):not([type=submit]):not([type=button]):not([type=reset]):not([type=file]):not([type=range]),textarea,[contenteditable=true],[contenteditable=""]{cursor:text;caret-color:auto}h1,h2,h3{margin:0;line-height:var(--leading-title);font-weight:var(--weight-semibold)}p{margin:0}a{color:var(--color-brand-600);text-decoration:none}a:hover{color:var(--color-brand-700)}button{font:inherit;color:inherit}.money{font-family:var(--font-money);font-variant-numeric:tabular-nums;font-feature-settings:var(--tnum-feature);line-height:var(--leading-money)}:focus-visible{outline:2px solid var(--color-brand-600);outline-offset:2px;border-radius:var(--radius-sm)}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.shell{min-height:100dvh;background:var(--color-canvas)}.shell__nav{display:flex;align-items:stretch;background:var(--color-surface)}.shell__nav-list{display:flex;margin:0;padding:0;list-style:none;flex:1}.shell__nav-item{flex:1}.shell__nav-link{display:flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--size-touch-min);height:100%;padding:0 var(--space-2);color:var(--color-ink-2);font-size:var(--text-base);transition:color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.shell__nav-link:hover{color:var(--color-brand-600)}.shell__nav-link[aria-current=page]{color:var(--color-brand-600);background:var(--color-brand-50);font-weight:var(--weight-semibold)}.shell__nav-item--desktop-only{display:none}.shell__main{padding:var(--layout-pad-compact)}@media(max-width:767px){.shell__main{padding-bottom:calc(var(--layout-bottomnav-h) + env(safe-area-inset-bottom) + var(--space-4))}.shell__nav{position:fixed;inset:auto 0 0 0;z-index:var(--z-sticky);height:calc(var(--layout-bottomnav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);border-top:1px solid var(--color-border-subtle);box-shadow:var(--shadow-e1)}}@media(min-width:768px)and (max-width:1023px){.shell__main{padding-top:calc(var(--layout-topnav-h) + var(--space-4))}.shell__nav{position:fixed;inset:0 0 auto 0;z-index:var(--z-sticky);height:var(--layout-topnav-h);border-bottom:1px solid var(--color-border-subtle);box-shadow:var(--shadow-e1)}.shell__nav-list{max-width:var(--layout-content-max);margin:0 auto;padding:0 var(--layout-pad-compact)}.shell__nav-item{flex:0 0 auto}.shell__nav-link{padding:0 var(--space-4)}}@media(min-width:1024px){.shell{display:grid;grid-template-columns:var(--layout-sidebar-w) minmax(0,1fr);align-items:start}.shell__nav{position:sticky;top:0;height:100dvh;flex-direction:column;border-right:1px solid var(--color-border-subtle);padding:var(--space-4) var(--space-3)}.shell__nav-list{flex-direction:column;gap:var(--space-1)}.shell__nav-item{flex:0 0 auto}.shell__nav-item--desktop-only{display:block}.shell__nav-link{justify-content:flex-start;height:auto;min-height:var(--size-touch-min);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md)}.shell__main{padding:var(--space-6) var(--layout-pad-desktop);max-width:var(--layout-content-max);width:100%}}@media(min-width:1280px){.shell:has(.panel){grid-template-columns:var(--layout-sidebar-w) minmax(0,1fr) var(--layout-rail-w)}}.devbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2);margin-bottom:var(--space-4);padding:var(--space-2) var(--space-3);border:1px dashed var(--color-border-subtle);border-radius:var(--radius-md);background:var(--color-surface);font-size:var(--text-sm);color:var(--color-ink-2)}.devbar--stacked{margin-top:var(--space-4);margin-bottom:var(--space-2)}.devbar__actions{display:flex;gap:var(--space-2)}.devbar__btn{min-height:var(--size-touch-min);padding:0 var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-ink-2);font-size:var(--text-sm);cursor:pointer}.devbar__btn[aria-pressed=true]{border-color:var(--color-brand-600);background:var(--color-brand-50);color:var(--color-brand-600);font-weight:var(--weight-semibold)}.devbar__btn:disabled{opacity:.6;cursor:default}.fab{position:fixed;right:var(--layout-fab-inset);bottom:calc(var(--layout-bottomnav-h) + env(safe-area-inset-bottom) + var(--layout-fab-inset));z-index:var(--z-fab);display:inline-flex;align-items:center;justify-content:center;width:var(--layout-fab-size);height:var(--layout-fab-size);border-radius:var(--radius-full);background:var(--color-brand-600);color:var(--color-surface);font-size:var(--text-base);font-weight:var(--weight-semibold);box-shadow:var(--shadow-e2);transition:background-color var(--dur-fast) var(--ease-out)}.fab:hover{background:var(--color-brand-700);color:var(--color-surface)}@media(min-width:768px){.fab{display:none}}.page{display:flex;flex-direction:column;gap:var(--space-6)}.page--centered{min-height:60dvh;justify-content:center;align-items:center;text-align:center}.page-head{display:flex;flex-direction:column;gap:var(--space-1)}.page-head__title{font-size:var(--text-xl);font-weight:var(--weight-semibold)}.page-head__sub{color:var(--color-ink-3);font-size:var(--text-sm)}.card{background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-e1);padding:var(--space-4)}.card--padded-desktop{padding:var(--space-4)}@media(min-width:1024px){.card--padded-desktop{padding:var(--space-5)}}.card__title{font-size:var(--text-lg);font-weight:var(--weight-semibold);margin-bottom:var(--space-2)}.placeholder-desc{color:var(--color-ink-2);font-size:var(--text-base)}.kv{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:var(--space-2) var(--space-4);margin:0;font-size:var(--text-sm)}.kv__k{color:var(--color-ink-3)}.kv__v{margin:0;font-family:var(--font-money);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.notice{display:flex;gap:var(--space-2);align-items:center;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-warn-50);color:var(--color-warn-700);font-size:var(--text-sm)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:var(--size-touch-min);padding:0 var(--space-4);border:1px solid transparent;border-radius:var(--radius-md);background:var(--color-sunken);color:var(--color-ink);font-size:var(--text-base);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}.btn:hover{background:var(--color-brand-50)}.btn--primary{background:var(--color-brand-600);color:var(--color-surface)}.btn--primary:hover{background:var(--color-brand-700);color:var(--color-surface)}.btn--quiet{background:transparent;border-color:var(--color-border-control);color:var(--color-ink-2)}.btn--blocked{background:var(--color-sunken);color:var(--color-ink-3);border:1px dashed var(--color-border-control);box-shadow:none;cursor:not-allowed}.btn--blocked:hover{background:var(--color-sunken);color:var(--color-ink-3)}.btn--danger{background:var(--color-expense-700);color:var(--color-surface)}.btn--danger:hover{background:var(--color-expense-600);color:var(--color-surface)}.btn[disabled]{cursor:not-allowed;background:var(--color-sunken);color:var(--color-ink-3);border:1px dashed var(--color-border-control);box-shadow:none}.status-page{display:flex;flex-direction:column;gap:var(--space-3);align-items:center;text-align:center;padding:var(--space-12) var(--space-4)}.status-page__code{font-size:var(--text-3xl);font-weight:var(--weight-bold);color:var(--color-brand-900);font-variant-numeric:tabular-nums}.login{min-height:100dvh;display:flex;align-items:flex-start;justify-content:center;padding:var(--space-10) var(--layout-pad-compact);background:var(--color-canvas)}.login__card{width:100%;display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-4);background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-e1)}@media(min-width:768px){.login{align-items:center}.login__card{max-width:var(--layout-login-card-w);padding:var(--space-5)}}.field{display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-sm);color:var(--color-ink-2)}.field__input{height:var(--size-input-h-compact);padding:0 var(--space-3);border:1px solid var(--color-border-control);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-ink);font-size:var(--text-base)}@media(min-width:1024px){.field__input{height:var(--size-input-h-ultra)}}.form-error{color:var(--color-expense-700);font-size:var(--text-sm)}.ledger{gap:var(--space-4)}.ledger__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2) var(--space-3)}@media(max-width:767px){.ledger__head{position:sticky;top:0;z-index:var(--z-sticky);margin:calc(var(--layout-pad-compact) * -1) calc(var(--layout-pad-compact) * -1) 0;padding:var(--space-2) var(--layout-pad-compact);background:var(--color-canvas);border-bottom:1px solid var(--color-border-subtle)}}.ledger__new{display:none}@media(min-width:768px){.ledger__new{display:inline-flex}}.month-switch{display:inline-flex;align-items:center;gap:var(--space-1)}.month-switch__btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--size-touch-min);min-height:var(--size-touch-min);border-radius:var(--radius-md);color:var(--color-ink-2);font-size:var(--text-xl);line-height:1;transition:background-color var(--dur-fast) var(--ease-out)}.month-switch__btn:hover{background:var(--color-brand-50);color:var(--color-brand-600)}.month-switch__btn--disabled,.month-switch__btn--disabled:hover{background:transparent;color:var(--color-ink-3);cursor:not-allowed}.month-switch__label{min-width:7.5em;font-size:var(--text-xl);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums;text-align:center}.filters{display:inline-flex;gap:var(--space-0-5);padding:var(--space-0-5);border-radius:var(--radius-full);background:var(--color-sunken)}.ledger__filters-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);flex:1 1 100%;min-width:0}@media(min-width:768px){.ledger__filters-row{flex:0 1 auto}}.filter-chip{display:inline-flex;align-items:center;min-height:var(--size-chip);padding:0 var(--space-3);border-radius:var(--radius-full);color:var(--color-ink-2);font-size:var(--text-sm);transition:background-color var(--dur-fast) var(--ease-out)}.filter-chip:hover{color:var(--color-brand-600)}.filter-chip--active{background:var(--color-surface);color:var(--color-brand-600);font-weight:var(--weight-semibold);box-shadow:var(--shadow-e1)}.summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}.summary__item{display:flex;flex-direction:column;gap:var(--space-0-5);padding:var(--space-3);border-radius:var(--radius-lg);background:var(--color-surface);border:1px solid var(--color-border-subtle)}.summary__item--net{display:none}.summary__net-inline,.summary__label{font-size:var(--text-xs);color:var(--color-ink-3)}.summary__value{font-size:var(--text-xl);font-weight:var(--weight-semibold)}.summary__value--expense{color:var(--color-expense-700)}.summary__value--income{color:var(--color-income-700)}.summary__hint{grid-column:1 / -1;font-size:var(--text-xs);color:var(--color-ink-3)}@media(min-width:768px){.summary{grid-template-columns:repeat(3,minmax(0,1fr))}.summary__item--net{display:flex}.summary__net-inline{display:none}}.ledger__list{position:relative;display:flex;flex-direction:column;gap:var(--space-2)}.ledger__list[aria-busy=true]{opacity:.5}.ledger__progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:var(--z-toast);background:var(--color-brand-600);animation:ledger-progress var(--dur-progress) var(--ease-out) infinite}@keyframes ledger-progress{0%{transform:translate(-100%)}to{transform:translate(100%)}}.empty-state{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);padding:var(--space-12) var(--space-4);text-align:center;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg)}.empty-state__title{font-size:var(--text-lg);font-weight:var(--weight-semibold)}.empty-state__desc{font-size:var(--text-sm);color:var(--color-ink-2)}.error-block{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);padding:var(--space-4);border:1px solid var(--color-expense-600);border-radius:var(--radius-lg);background:var(--color-expense-50)}.error-block__title{font-size:var(--text-lg)}.error-block__desc{font-size:var(--text-sm);color:var(--color-ink-2)}.error-block__code{color:var(--color-ink-3)}.tx{display:flex;flex-direction:column;gap:var(--space-1)}.tx__head{display:none}.tx__groups{display:flex;flex-direction:column;gap:var(--space-3);margin:0;padding:0;list-style:none}.tx-group{display:flex;flex-direction:column;gap:var(--space-1)}.tx-group__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);min-height:var(--size-chip);padding:0 var(--space-1);font-size:var(--text-xs);color:var(--color-ink-3)}.tx-group__sum{display:inline-flex;gap:var(--space-2)}.tx__rows{display:flex;flex-direction:column;margin:0;padding:0;list-style:none;background:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);overflow:hidden}:root{--tx-swipe-open: 144px}.tx-row{position:relative;min-height:var(--size-row-compact);border-top:1px solid var(--color-border-subtle);transition:background-color var(--dur-base) var(--ease-out);overflow:hidden}.tx-row__swipe{position:relative;display:block}.tx-row__content{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) max-content;align-items:center;gap:var(--space-2);min-height:var(--size-row-compact);padding:var(--space-1) var(--space-3);background:var(--color-surface);transition:transform var(--dur-base) var(--ease-out);touch-action:pan-y;user-select:none;-webkit-user-select:none}.tx-row__content--dragging{transition:none}.tx-row--highlight .tx-row__content{background:var(--color-brand-50)}.tx-row:first-child{border-top:0}.tx-row--highlight{background:var(--color-brand-50)}.tx-row--busy{opacity:.5}.tx-row__date{display:none;font-size:var(--text-xs);color:var(--color-ink-3)}.tx-row__main{display:flex;align-items:center;gap:var(--space-2);min-width:0;color:var(--color-ink);padding:0;border:0;background:transparent;font:inherit;text-align:left}.tx-row__main:hover{color:var(--color-ink)}.tx-row__text{display:flex;flex-direction:column;min-width:0}.tx-row__cat{font-size:var(--text-base);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tx-row__sub{font-size:var(--text-xs);color:var(--color-ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tx-row__note{display:none;min-width:0;font-size:var(--text-sm);color:var(--color-ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tx-row__note-by{margin-left:var(--space-2);font-size:var(--text-xs);color:var(--color-ink-3)}.tx-row__amount{font-size:var(--text-base);font-weight:var(--weight-medium);text-align:right;white-space:nowrap}.tx-row__amount--expense{color:var(--color-expense-700)}.tx-row__amount--income{color:var(--color-income-700)}.tx-row__actions{display:inline-flex;gap:var(--space-0-5)}.tx-row__action{display:inline-flex;align-items:center;justify-content:center;min-height:var(--size-chip);padding:0 var(--space-2);border:0;border-radius:var(--radius-md);background:transparent;color:var(--color-ink-2);font-size:var(--text-xs);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}.tx-row__action:hover{background:var(--color-brand-50);color:var(--color-brand-600)}.tx-row__action--danger:hover{background:var(--color-expense-50);color:var(--color-expense-700)}@media(max-width:1023px){.tx-row__actions{position:absolute;top:0;right:0;bottom:0;z-index:0;display:inline-flex;gap:0;width:var(--tx-swipe-open)}.tx-row__actions .tx-row__action{flex:1;min-height:var(--size-row-compact);border-radius:0;font-size:var(--text-sm)}.tx-row__action--danger{color:var(--color-expense-700)}}@media(min-width:1024px){.tx__head,.tx-row{display:grid;grid-template-columns:76px minmax(0,220px) minmax(0,1fr) 120px 88px;align-items:center;gap:var(--space-3);padding:0 var(--space-4)}.tx__head{padding-bottom:var(--space-1);border-bottom:1px solid var(--color-border-subtle);font-size:var(--text-xs);color:var(--color-ink-3)}.tx-row{min-height:var(--size-row-medium);overflow:visible}.tx-row__swipe,.tx-row__content{display:contents}.tx-row__actions{position:static;width:auto}.tx-row__actions .tx-row__action{min-height:var(--size-chip);font-size:var(--text-xs)}.tx-row__date,.tx-row__note{display:block}.tx-row__sub{display:none}.tx-row__actions{opacity:0;transition:opacity var(--dur-fast) var(--ease-out)}.tx-row:hover .tx-row__actions,.tx-row:focus-within .tx-row__actions{opacity:1}}@media(min-width:1280px){.tx-row{min-height:var(--size-row-ultra)}}.load-more{display:flex;flex-direction:column;align-items:center;gap:var(--space-1);padding:var(--space-2) 0}.undo-bar{position:fixed;left:var(--space-4);right:var(--space-4);bottom:calc(var(--layout-bottomnav-h) + env(safe-area-inset-bottom) + var(--space-3));z-index:var(--z-undo);display:flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-1) var(--space-1) var(--space-3);border-radius:var(--radius-lg);background:var(--color-ink);color:var(--color-surface);box-shadow:var(--shadow-e3);font-size:var(--text-sm);overflow:hidden}.undo-bar__text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.undo-bar__count{font-size:var(--text-sm);color:var(--color-surface);opacity:.75}.undo-bar__btn{flex:none;min-height:var(--size-touch-min);padding:0 var(--space-3);border:0;border-radius:var(--radius-md);background:var(--color-brand-600);color:var(--color-surface);font-weight:var(--weight-semibold);cursor:pointer}.undo-bar__btn:disabled{cursor:progress;opacity:.7}.undo-bar__progress{position:absolute;left:0;bottom:0;height:2px;width:100%;background:var(--color-brand-600);transform-origin:left center;animation-name:undo-countdown;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes undo-countdown{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(min-width:1024px){.undo-bar{left:auto;right:var(--space-6);bottom:var(--space-6);max-width:420px}}.panel__scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-overlay);background:var(--color-overlay)}.panel{position:fixed;inset:auto 0 0 0;z-index:var(--z-sheet);display:flex;flex-direction:column;height:100dvh;background:var(--color-surface);border-radius:var(--radius-xl) var(--radius-xl) 0 0;box-shadow:var(--shadow-e4);overflow:hidden;animation:panel-in-bottom var(--dur-sheet) var(--ease-out)}@keyframes panel-in-bottom{0%{transform:translateY(16px)}to{transform:translateY(0)}}@keyframes panel-in-right{0%{transform:translate(24px)}to{transform:translate(0)}}.panel__head{display:flex;flex:none;align-items:center;justify-content:space-between;gap:var(--space-2);min-height:var(--size-touch-min);padding:0 var(--space-2) 0 var(--space-3);box-shadow:inset 0 -1px 0 var(--color-border-subtle)}.segmented{display:inline-flex;padding:var(--space-0-5);border-radius:var(--radius-full);background:var(--color-sunken)}.segmented__btn{min-height:var(--size-chip);padding:0 var(--space-4);border:0;border-radius:var(--radius-full);background:transparent;color:var(--color-ink-2);font-size:var(--text-sm);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out)}.segmented__btn--active{background:var(--color-surface);color:var(--color-brand-600);font-weight:var(--weight-semibold);box-shadow:var(--shadow-e1)}.panel__close{display:inline-flex;align-items:center;justify-content:center;width:var(--size-touch-min);height:var(--size-touch-min);border:0;border-radius:var(--radius-md);background:transparent;color:var(--color-ink-2);font-size:var(--text-lg);cursor:pointer}.panel__close:hover{background:var(--color-sunken)}.panel__recent{display:flex;flex:none;align-items:center;gap:var(--space-2);height:40px;padding:2px var(--space-3);border-bottom:1px solid var(--color-border-subtle);overflow-x:auto;overflow-y:hidden;scrollbar-width:none}.panel__recent::-webkit-scrollbar{display:none}.recent-chip{display:inline-grid;flex:none;place-items:center;width:var(--size-chip);height:var(--size-chip);border:1px solid var(--color-border-subtle);border-radius:var(--radius-full);background:var(--color-surface);color:var(--color-ink-2);cursor:pointer}.recent-chip--active{border-color:var(--color-brand-600);background:var(--color-brand-100);color:var(--color-brand-600)}.panel__grid-wrap{position:relative;flex:1;min-height:0;padding:0 var(--space-3)}.cat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:var(--size-cat-cell-compact);row-gap:var(--space-1);column-gap:0;align-content:start;height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;scroll-snap-type:y proximity;scrollbar-width:none}.cat-grid::-webkit-scrollbar{display:none}.cat-grid__options{display:contents}.cat-cell{display:grid;align-content:start;justify-items:center;gap:2px;height:var(--size-cat-cell-compact);padding:var(--space-0-5) 0;border:0;border-radius:var(--radius-md);background:transparent;color:var(--color-ink-2);cursor:pointer;scroll-snap-align:start;scroll-margin-block:12px;overflow:hidden}.cat-cell:hover{background:var(--color-brand-50)}.cat-cell--selected{color:var(--color-brand-600);font-weight:var(--weight-semibold)}.cat-cell--manage{box-shadow:inset 0 0 0 1px var(--color-border-subtle);color:var(--color-ink-2)}.cat-cell--manage:hover{box-shadow:inset 0 0 0 1px var(--color-border-control)}.cat-cell--manage:focus-visible{outline:2px solid var(--color-brand-600);outline-offset:-2px}.cat-cell__label{max-width:100%;font-size:var(--text-xs);line-height:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel__amount{display:flex;flex:none;flex-direction:column;padding:0 var(--space-3);box-shadow:inset 0 1px 0 var(--color-border-subtle)}.panel__amount-row{display:flex;align-items:center;gap:var(--space-2);min-height:40px}.amount-cat{display:flex;align-items:center;gap:var(--space-2);min-width:0;max-width:40%;color:var(--color-ink)}.amount-cat__empty{padding:2px var(--space-2);border:1px dashed var(--color-border-control);border-radius:var(--radius-md);color:var(--color-ink-3);font-size:var(--text-sm);white-space:nowrap}.amount-cat__name{font-size:var(--text-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.amount-input-wrap{display:flex;flex:1;align-items:baseline;justify-content:flex-end;gap:var(--space-1);min-width:0}.amount-input__unit{color:var(--color-ink-3);font-size:var(--text-lg)}.amount-input{width:100%;min-width:0;height:var(--size-input-h-compact);padding:0 var(--space-2);border:0;border-radius:var(--radius-md);background:var(--color-sunken);color:var(--color-ink);font-size:var(--text-2xl);text-align:right}.amount-input::placeholder{color:var(--color-ink-3)}.panel__amount-sub{display:flex;align-items:center;gap:var(--space-2);min-height:32px}.panel .panel__amount-row .amount-display{min-height:40px;line-height:40px}.panel__blocked-hint{flex:none;min-width:4.5em;font-size:var(--text-xs);color:var(--color-ink-3)}.note-input{flex:1;min-width:0;height:32px;padding:0 var(--space-2);border:1px solid var(--color-border-control);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-ink);font-size:var(--text-sm)}.panel__date-sheet{position:absolute;inset:auto 0 0 0;z-index:var(--z-dialog);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);max-height:100%;padding:var(--space-3);border-radius:var(--radius-lg) var(--radius-lg) 0 0;background:var(--color-surface);box-shadow:var(--shadow-e3);overflow-y:auto}.panel__date-close{display:inline-flex;flex:none;align-items:center;justify-content:center;width:var(--size-touch-min);height:var(--size-touch-min);margin-left:auto;padding:0;border:0;border-radius:var(--radius-full);background:transparent;color:var(--color-ink-2);font-size:var(--text-lg);cursor:pointer}.panel__date-close:hover{background:var(--color-sunken)}.panel__date-close:focus-visible{outline:2px solid var(--color-brand-600);outline-offset:-2px}.panel__date{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--color-ink-2)}.panel__date-input{height:var(--size-input-h-medium);padding:0 var(--space-2);border:1px solid var(--color-border-control);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-ink);font-size:var(--text-sm)}.panel__date-hint{font-size:var(--text-xs);color:var(--color-ink-3)}.panel__saved{flex:none;white-space:nowrap;font-size:var(--text-xs);color:var(--color-income-700)}.panel__state{flex:none;padding:var(--space-3);color:var(--color-ink-2);font-size:var(--text-sm)}.panel__state--error{color:var(--color-expense-700)}.panel__error{flex:none;margin:0 var(--space-3) var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-expense-50);color:var(--color-expense-700);font-size:var(--text-sm)}.panel__conflict{display:flex;flex:none;flex-direction:column;gap:var(--space-2);margin:0 var(--space-3) var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-warn-50);color:var(--color-warn-700);font-size:var(--text-sm)}.panel__conflict-actions{display:flex;gap:var(--space-2)}.panel__confirm{position:absolute;inset:auto var(--space-3) var(--space-3);z-index:var(--z-dialog);display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--color-border-control);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-e3);font-size:var(--text-sm)}.panel__confirm-actions{display:flex;gap:var(--space-2);justify-content:flex-end}.ledger-icon{display:inline-grid;flex:none;place-items:center;border-radius:var(--radius-full);background:var(--color-sunken);color:var(--color-ink-2)}.ledger-icon svg{display:block}.ledger-icon--sm{width:24px;height:24px}.ledger-icon--sm svg{width:13px;height:13px}.ledger-icon--md{width:32px;height:32px}.ledger-icon--md svg{width:18px;height:18px}.ledger-icon--lg{width:var(--size-cat-icon-compact);height:var(--size-cat-icon-compact)}.ledger-icon--lg svg{width:20px;height:20px}.ledger-icon--selected{background:var(--color-brand-100);color:var(--color-brand-600)}@media(min-width:768px){.ledger-icon--lg{width:var(--size-cat-icon-desktop);height:var(--size-cat-icon-desktop)}.ledger-icon--lg svg{width:22px;height:22px}}@media(max-width:767px)and (max-height:619px){.panel__recent{display:none}.cat-grid{grid-auto-rows:56px}.cat-cell{height:56px}}@media(min-width:768px){.panel{inset:0 0 0 auto;width:var(--layout-drawer-w-medium);border-radius:var(--radius-xl) 0 0 var(--radius-xl);animation-name:panel-in-right}.panel__head{min-height:48px}.panel__grid-wrap{flex:0 1 340px}.panel__amount{margin-top:auto}.keypad-wrap{padding-bottom:8px}.cat-grid{grid-auto-rows:var(--size-cat-cell-desktop);row-gap:5px}.cat-cell{height:var(--size-cat-cell-desktop)}.panel__amount-row{min-height:48px}.panel__amount-sub{min-height:40px}.note-input{height:40px}.amount-input{height:var(--size-input-h-ultra);font-size:var(--text-xl)}}@media(min-width:1024px){.panel{width:var(--layout-drawer-w-wide)}}@media(min-width:1280px){.panel{width:var(--layout-rail-w)}.panel__scrim{display:none}.panel{animation:none}}:root{--manage-dialog-w: 400px;--manage-btn-sm-h: 36px}.manage-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2)}.manage-toolbar__hint{color:var(--color-ink-3);font-size:var(--text-sm)}.manage-tabs{display:inline-flex;padding:var(--space-0-5);border:1px solid var(--color-border-subtle);border-radius:var(--radius-full);background:var(--color-sunken)}.manage-tab{display:inline-flex;align-items:center;gap:var(--space-1);min-height:var(--size-touch-min);padding:0 var(--space-4);border:0;border-radius:var(--radius-full);background:transparent;color:var(--color-ink-2);font-size:var(--text-base);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}.manage-tab--active{background:var(--color-surface);color:var(--color-brand-700);font-weight:var(--weight-semibold);box-shadow:var(--shadow-e1)}.manage-tab__count{color:var(--color-ink-3);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.manage-tab--active .manage-tab__count{color:var(--color-brand-700)}.manage-notice{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--text-sm)}.manage-notice--info{background:var(--color-brand-50);color:var(--color-brand-900)}.manage-notice--success{background:var(--color-income-50);color:var(--color-income-700)}.manage-notice--warn{background:var(--color-warn-50);color:var(--color-warn-700)}.manage-notice--error{background:var(--color-expense-50);color:var(--color-expense-700)}.manage-notice__text{flex:1;min-width:0}.manage-notice__meta{font-family:var(--font-money);font-size:var(--text-xs);opacity:.85}.manage-notice__close{border:0;background:transparent;color:inherit;cursor:pointer;padding:var(--space-1);line-height:1}.manage-field-error{color:var(--color-expense-700);font-size:var(--text-sm)}.manage-empty{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);padding:var(--space-12) var(--space-4);text-align:center}.manage-empty__title{font-size:var(--text-lg);font-weight:var(--weight-semibold)}.manage-empty__desc{color:var(--color-ink-3);font-size:var(--text-sm)}.manage-form,.manage-form__grid{display:flex;flex-direction:column;gap:var(--space-3)}.manage-form__actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin-top:var(--space-2)}.manage-link-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin-top:var(--space-4);font-size:var(--text-sm)}.manage-link-row>a{display:inline-flex;align-items:center;min-height:var(--size-touch-min);font-weight:var(--weight-medium)}.manage-link-row__hint{color:var(--color-ink-3);font-size:var(--text-xs)}.manage-inline-notice{margin-top:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--color-warn-50);color:var(--color-warn-700);font-size:var(--text-sm)}.manage-btn-sm{min-height:var(--manage-btn-sm-h);padding:0 var(--space-3);font-size:var(--text-sm)}.manage-btn--danger{border-color:var(--color-expense-600);color:var(--color-expense-700)}.btn--primary.manage-btn--danger{border-color:transparent;background:var(--color-expense-600);color:var(--color-surface)}.btn--primary.manage-btn--danger:hover{background:var(--color-expense-700);color:var(--color-surface)}.btn[disabled].manage-btn--danger,.btn[disabled].btn--primary.manage-btn--danger{border:1px dashed var(--color-border-control);background:var(--color-sunken);color:var(--color-ink-3)}.manage-loading{margin-left:var(--space-2);color:var(--color-ink-3);font-size:var(--text-xs);font-weight:var(--weight-regular)}.manage-badge{display:inline-flex;align-items:center;height:20px;margin-left:var(--space-2);padding:0 var(--space-2);border-radius:var(--radius-full);background:var(--color-sunken);color:var(--color-ink-3);font-size:var(--text-xs);font-weight:var(--weight-medium);white-space:nowrap}.manage-badge--role{background:var(--color-brand-100);color:var(--color-brand-700)}.manage-badge--ok{background:var(--color-income-50);color:var(--color-income-700)}.manage-badge--off{background:var(--color-expense-50);color:var(--color-expense-700)}.manage-cat-icon{display:inline-grid;place-items:center;flex:none;border-radius:var(--radius-full);background:transparent;color:var(--color-ink-2)}.manage-cat-icon--expense{background:var(--color-expense-50);color:var(--color-expense-700)}.manage-cat-icon--income{background:var(--color-income-50);color:var(--color-income-700)}.manage-cat-icon--muted{background:var(--color-sunken);color:var(--color-ink-3)}.manage-cat-icon--sm{width:24px;height:24px}.manage-cat-icon--sm svg{width:13px;height:13px}.manage-cat-icon--md{width:32px;height:32px}.manage-cat-icon--md svg{width:18px;height:18px}.manage-cat-icon--lg{width:var(--size-cat-icon-compact);height:var(--size-cat-icon-compact)}.manage-cat-icon--lg svg{width:20px;height:20px}@media(min-width:768px){.manage-cat-icon--lg{width:var(--size-cat-icon-desktop);height:var(--size-cat-icon-desktop)}.manage-cat-icon--lg svg{width:22px;height:22px}}.manage-icon-picker{margin:0;padding:0;border:0}.manage-icon-picker__legend{padding:0;color:var(--color-ink-2);font-size:var(--text-sm)}.manage-icon-picker__grid{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}.manage-icon-choice{display:inline-flex;align-items:center;justify-content:center;width:var(--size-touch-min);height:var(--size-touch-min);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out)}.manage-icon-choice:hover{border-color:var(--color-brand-600)}.manage-icon-choice--active{border-color:var(--color-brand-600);box-shadow:inset 0 0 0 1px var(--color-brand-600);background:var(--color-brand-50)}.manage-list{margin:0;padding:0;list-style:none}.manage-row{position:relative;display:grid;grid-template-columns:max-content max-content minmax(0,1fr);align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-3) 0;border-top:1px solid var(--color-border-subtle)}.manage-row:first-child{border-top:0;padding-top:var(--space-1)}.manage-row--muted .manage-row__name{color:var(--color-ink-2)}.manage-row__main{display:flex;flex-direction:column;gap:var(--space-0-5);min-width:0}.manage-row__name{display:flex;align-items:center;font-size:var(--text-base);font-weight:var(--weight-medium)}.manage-row__meta{color:var(--color-ink-3);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.manage-row__input{width:100%;max-width:240px}.manage-row__actions{display:flex;flex-wrap:wrap;gap:var(--space-1);grid-column:1 / -1}@media(min-width:768px){.manage-row{grid-template-columns:max-content max-content minmax(0,1fr) max-content}.manage-row__actions{grid-column:auto;justify-content:flex-end}}.manage-drag{display:grid;place-items:center;width:32px;height:40px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--color-ink-3);font-size:var(--text-base);line-height:1;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.manage-drag:hover{background:var(--color-brand-50);color:var(--color-brand-600)}.manage-drag:active{cursor:grabbing}.manage-drag:focus-visible{outline:2px solid var(--color-brand-600);outline-offset:1px}.manage-row--dragging{z-index:1;background:var(--color-surface);box-shadow:var(--shadow-e2);border-radius:var(--radius-md)}.manage-row--dragging .manage-drag{color:var(--color-brand-600);cursor:grabbing}.manage-row--drop-before:before,.manage-list--drop-end:after{content:"";position:absolute;left:0;right:0;height:2px;border-radius:var(--radius-full);background:var(--color-brand-600)}.manage-row--drop-before:before{top:-1px}.manage-list--drop-end{position:relative}.manage-list--drop-end:after{bottom:-1px}.manage-users{display:flex;flex-direction:column;border-top:1px solid var(--color-border-subtle);margin-top:var(--space-2)}.manage-user{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-2);padding:var(--space-3) 0;border-bottom:1px solid var(--color-border-subtle)}.manage-user--editing{background:var(--color-brand-50)}.manage-user__cell{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-0-5);min-width:0;font-size:var(--text-sm);overflow-wrap:anywhere}.manage-user__cell:before{content:attr(data-label);color:var(--color-ink-3);font-size:var(--text-xs)}.manage-user__username{font-family:var(--font-money);font-variant-numeric:tabular-nums;font-size:var(--text-base);font-weight:var(--weight-medium)}.manage-user__mono{font-family:var(--font-money);font-variant-numeric:tabular-nums;color:var(--color-ink-2)}.manage-user__input{width:100%;max-width:200px}.manage-user__hint{color:var(--color-ink-3);font-size:var(--text-xs)}.manage-user__cell--actions{flex-direction:row;flex-wrap:wrap;gap:var(--space-1)}.manage-user__error{grid-column:1 / -1;color:var(--color-expense-700);font-size:var(--text-sm)}.manage-user--head{display:none}@media(min-width:1024px){.manage-user,.manage-user--head{display:grid;grid-template-columns:minmax(120px,1.1fr) minmax(120px,1fr) minmax(120px,.9fr) minmax(96px,.7fr) minmax(140px,.9fr) minmax(220px,max-content);align-items:center;gap:var(--space-3);padding:var(--space-2) 0}.manage-user--head{border-bottom:1px solid var(--color-border-subtle);color:var(--color-ink-3);font-size:var(--text-xs)}.manage-user__cell{flex-direction:row;align-items:center;flex-wrap:wrap;gap:var(--space-1)}.manage-user__cell:before{display:none}.manage-user__cell--actions{justify-content:flex-end}}.manage-secret{display:flex;align-items:center;justify-content:center;padding:var(--space-4);border:1px dashed var(--color-border-control);border-radius:var(--radius-md);background:var(--color-sunken);font-family:var(--font-money);font-size:var(--text-lg);letter-spacing:.08em;-webkit-user-select:all;user-select:all;overflow-wrap:anywhere}.manage-dialog__scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-dialog);display:flex;align-items:flex-end;justify-content:center;padding:var(--space-4);background:var(--color-overlay)}.manage-dialog{display:flex;flex-direction:column;gap:var(--space-3);width:100%;max-width:var(--manage-dialog-w);padding:var(--space-5);border-radius:var(--radius-xl) var(--radius-xl) 0 0;background:var(--color-surface);box-shadow:var(--shadow-e3)}.manage-dialog--danger{border-top:4px solid var(--color-expense-600)}.manage-dialog__title{font-size:var(--text-lg);font-weight:var(--weight-semibold)}.manage-dialog__desc{color:var(--color-ink-2);font-size:var(--text-sm)}.manage-dialog__body{display:flex;flex-direction:column;gap:var(--space-3)}.manage-dialog__footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-2)}@media(min-width:768px){.manage-dialog__scrim{align-items:center}.manage-dialog{border-radius:var(--radius-xl)}}.manage-status-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-2);margin-top:var(--space-3)}.manage-status-meta{color:var(--color-ink-3);font-size:var(--text-sm);overflow-wrap:anywhere}@keyframes motion-row-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.tx-row{animation:motion-row-in var(--dur-base) var(--ease-out)}@keyframes motion-route-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.shell__main--entering{animation:motion-route-in var(--dur-base) var(--ease-out)}@keyframes motion-skeleton-in{0%{opacity:0}to{opacity:1}}.ledger__body--loading{animation:motion-skeleton-in var(--dur-base) var(--ease-out)}@keyframes motion-notice-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.manage-notice{animation:motion-notice-in var(--dur-base) var(--ease-out)}@keyframes motion-undo-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.undo-bar{animation:motion-undo-in var(--dur-sheet) var(--ease-out)}.chart{--chart-axis-w: 44px;--chart-color: var(--color-accent-600);--chart-tick-w: 44px;position:relative;display:flex;flex-direction:column;gap:var(--space-1);width:100%;min-width:0;color:var(--color-ink-2);font-family:var(--font-sans)}.chart__figure{position:relative;width:100%}.chart__plot{position:relative;display:flex;width:100%;min-height:var(--space-10)}.chart__yaxis{position:relative;flex:0 0 var(--chart-tick-w);height:100%}.chart__tick{position:absolute;right:var(--space-2);transform:translateY(-50%);font-size:var(--text-xs);line-height:var(--leading-xs);color:var(--color-ink-3);white-space:nowrap}.chart__canvas{position:relative;flex:1 1 auto;min-width:0}.chart__svg{display:block;overflow:visible}.chart__grid-line{stroke:var(--color-border-subtle);stroke-width:1}.chart__baseline{stroke:var(--color-border-control);stroke-width:1}.chart__xaxis{display:grid;padding-left:var(--chart-tick-w)}.chart__label{font-size:var(--text-xs);line-height:var(--leading-xs);color:var(--color-ink-3);text-align:center;white-space:nowrap;overflow:hidden}.chart__label--active{color:var(--color-accent-700);font-weight:var(--weight-semibold)}.chart__hits{position:absolute;top:0;right:0;left:var(--chart-tick-w);display:grid}.chart__hit{position:relative;padding:0;border:0;border-radius:var(--radius-sm);background:transparent;cursor:pointer;color:transparent;font-size:0}.chart__hit:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:var(--color-accent-600);opacity:0;pointer-events:none}.chart__hit:hover:before{opacity:.06}.chart__hit[aria-pressed=true]:before{opacity:.1}.chart__hit:focus-visible{outline:2px solid var(--color-accent-700);outline-offset:-2px}.chart--empty{justify-content:center;min-height:var(--space-12)}.chart__empty,.chart__note{margin:0;padding:var(--space-4) 0;font-size:var(--text-sm);line-height:var(--leading-sm);color:var(--color-ink-3);text-align:center}.chart__line{fill:none;stroke:var(--chart-color);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;animation:chart-fade-in var(--dur-base) var(--ease-out) both}.chart__area{fill:var(--color-accent-50);stroke:none;animation:chart-fade-in var(--dur-base) var(--ease-out) both}.chart__guide{stroke:var(--color-border-control);stroke-width:1;stroke-dasharray:3 3}.chart__dot{position:absolute;width:var(--space-2);height:var(--space-2);transform:translate(-50%,-50%);border:2px solid var(--chart-color);border-radius:var(--radius-full);background:var(--color-surface);box-sizing:content-box;animation:chart-fade-in var(--dur-base) var(--ease-out) both}.chart__dot--active{background:var(--chart-color);box-shadow:0 0 0 3px var(--color-accent-50)}.chart__value{position:absolute;--value-tx: -50%;--value-ty: -180%;translate:var(--value-tx) var(--value-ty);padding:0 var(--space-1);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-ink);font-size:var(--text-xs);line-height:var(--leading-xs);white-space:nowrap}.chart__value--start{--value-tx: 0}.chart__value--end{--value-tx: -100%}.chart__value--below{--value-ty: 60%}.chart__bar{fill:var(--color-accent-50);stroke:none;animation:chart-bar-in var(--dur-base) var(--ease-out) both}.chart__bar--active{fill:var(--chart-color)}@keyframes chart-bar-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.chart--ring{align-items:center;gap:var(--space-2)}.ring{display:block;max-width:100%;height:auto;animation:chart-fade-in var(--dur-base) var(--ease-out) both}.ring__track{stroke:var(--color-sunken)}.ring__value{stroke:var(--chart-color)}.ring__value--over{stroke:var(--color-expense-600)}.ring__readout{fill:var(--color-ink);font-size:var(--text-xl);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums}.ring__caption{fill:var(--color-ink-3);font-size:var(--text-xs)}.chart__note--over{padding-top:0;color:var(--color-expense-700)}@keyframes chart-fade-in{0%{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){.chart,.chart *{animation:none!important;transition:none!important}}.dashboard{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-3);min-width:0}.dash-week{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-1) var(--space-4);padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-e1);font-size:var(--text-sm);line-height:var(--leading-sm);color:var(--color-ink-2)}.dash-week__title{padding:0 var(--space-2);border-radius:var(--radius-full);background:var(--color-accent-50);color:var(--color-accent-700);font-size:var(--text-xs);font-weight:var(--weight-semibold);line-height:var(--leading-xs)}.dash-week__item{display:inline-flex;align-items:baseline;gap:var(--space-1);color:var(--color-ink-3);font-size:var(--text-xs);white-space:nowrap}.dash-week__value{color:var(--color-ink);font-size:var(--text-sm);font-weight:var(--weight-semibold)}.dash-cards{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-3)}.dash-card{display:flex;flex-direction:column;gap:var(--space-2);min-width:0;padding:var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-e1);animation:dash-fade-in var(--dur-base) var(--ease-out) both}.dash-card__title{margin:0;font-size:var(--text-xs);font-weight:var(--weight-semibold);line-height:var(--leading-xs);color:var(--color-ink-3)}.dash-card--ring{align-items:center;text-align:center}.dash-card__note{margin:0;font-size:var(--text-sm);line-height:var(--leading-sm);color:var(--color-ink-2)}.dash-card__note-sub{font-size:var(--text-xs);color:var(--color-ink-3)}.dash-note{margin:0;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);background:var(--color-surface);font-size:var(--text-xs);line-height:var(--leading-xs);color:var(--color-ink-2)}.dash-streak__value{display:flex;align-items:baseline;gap:var(--space-1);margin:0;color:var(--color-brand-600)}.dash-streak__days{font-size:var(--text-2xl);font-weight:var(--weight-bold);line-height:var(--leading-2xl);letter-spacing:-.02em}.dash-streak__unit{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-brand-700)}.dash-card--bar{min-width:0}.home{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-3);min-width:0}.home__head{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--space-1) var(--space-3)}.home__title{margin:0;font-size:var(--text-xl);font-weight:var(--weight-bold);line-height:var(--leading-xl);color:var(--color-ink)}.home__date{margin:0;font-size:var(--text-sm);line-height:var(--leading-sm);color:var(--color-ink-3)}.home-trend{display:flex;flex-direction:column;gap:var(--space-2);min-width:0;padding:var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-e1)}.home-trend__title{margin:0;font-size:var(--text-xs);font-weight:var(--weight-semibold);line-height:var(--leading-xs);color:var(--color-ink-3)}.home-trend__hint{margin:0;font-size:var(--text-xs);line-height:var(--leading-xs);color:var(--color-ink-3)}.home-trend__toggles{display:flex;flex-wrap:wrap;gap:var(--space-2)}.home-trend__toggle{display:inline-flex;align-items:center;gap:var(--space-1);min-height:var(--size-touch-min);padding:0 var(--space-4);border:1px solid var(--color-border-control);border-radius:var(--radius-full);background:var(--color-surface);color:var(--color-ink);font:inherit;font-size:var(--text-sm);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.home-trend__toggle:hover{border-color:var(--color-accent-600)}.home-trend__toggle:focus-visible{outline:2px solid var(--color-accent-700);outline-offset:2px}.home-trend__toggle--on{border-color:var(--color-accent-600);background:var(--color-accent-50);box-shadow:inset 0 0 0 1px var(--color-accent-600)}.home-trend__caret{color:var(--color-accent-700)}.home-trend__toggle--on .home-trend__caret{display:inline-block;transform:rotate(180deg)}.trend{display:flex;flex-direction:column;gap:var(--space-2);min-width:0;padding:var(--space-3);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-e1);animation:dash-fade-in var(--dur-base) var(--ease-out) both}.trend__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2)}.trend__title{margin:0;font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:var(--leading-sm);color:var(--color-ink)}.trend__note{margin:0;font-size:var(--text-xs);line-height:var(--leading-xs);color:var(--color-ink-3)}@keyframes dash-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(min-width:768px){.dash-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(prefers-reduced-motion:reduce){.dashboard,.dashboard *{animation:none!important;transition:none!important}}
