:root{--font-ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", system-ui, sans-serif;--font-brand: "Fraunces", Georgia, "Times New Roman", serif;--font-mono: ui-monospace, "SFMono-Regular", "JetBrains Mono", monospace;--radius-xs: 10px;--radius-sm: 12px;--radius: 16px;--radius-lg: 20px;--radius-pill: 999px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--space-7: 48px;--ease: cubic-bezier(.3, .9, .3, 1);--dur: .15s}:root,:root[data-theme=light]{color-scheme:light;--bg: #f5f5f7;--bg-elev: #ffffff;--surface: #ffffff;--surface-2: #f0f0f2;--surface-hover: #e9e9eb;--border: rgba(0, 0, 0, .08);--border-strong: rgba(0, 0, 0, .14);--ink: #1d1d1f;--ink-soft: #6e6e73;--ink-muted: #9b9ba0;--accent: #0a8456;--accent-strong: #086b46;--accent-ink: #ffffff;--accent-soft: rgba(10, 132, 86, .09);--positive: #0a8456;--positive-soft: rgba(10, 132, 86, .09);--warn: #b26b00;--warn-soft: rgba(178, 107, 0, .1);--danger: #d0453e;--chart-expense: #cc4b2f;--chart-income: #00997d;--danger-soft: rgba(208, 69, 62, .08);--info: #2f6fd6;--info-soft: rgba(47, 111, 214, .07);--card-sh: 0 1px 2px rgba(0, 0, 0, .04), 0 8px 24px rgba(0, 0, 0, .05);--pane-sh: -24px 0 60px rgba(0, 0, 0, .08);--modal-sh: 0 32px 80px rgba(0, 0, 0, .28);--toast-sh: 0 12px 36px rgba(0, 0, 0, .18);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);--shadow: var(--card-sh);--shadow-lg: var(--modal-sh);--overlay: rgba(28, 28, 30, .32);--brand-symbol: #14532d;--brand-ink: #14241c}:root[data-theme=dark]{color-scheme:dark;--bg: #111112;--bg-elev: #1c1c1e;--surface: #1c1c1e;--surface-2: #2a2a2d;--surface-hover: #333336;--border: rgba(255, 255, 255, .1);--border-strong: rgba(255, 255, 255, .18);--ink: #f5f5f7;--ink-soft: #a1a1a6;--ink-muted: #6e6e73;--accent: #34c98e;--accent-strong: #2bb37d;--accent-ink: #06231a;--accent-soft: rgba(52, 201, 142, .12);--positive: #34c98e;--positive-soft: rgba(52, 201, 142, .12);--warn: #ffcf7a;--warn-soft: rgba(255, 207, 122, .12);--danger: #ff7b72;--chart-expense: #e0552e;--chart-income: #0e8f80;--danger-soft: rgba(255, 123, 114, .12);--info: #7fb0ff;--info-soft: rgba(127, 176, 255, .1);--card-sh: 0 1px 2px rgba(0, 0, 0, .3), 0 12px 32px rgba(0, 0, 0, .35);--pane-sh: -24px 0 60px rgba(0, 0, 0, .45);--modal-sh: 0 32px 80px rgba(0, 0, 0, .5);--toast-sh: 0 12px 36px rgba(0, 0, 0, .4);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow: var(--card-sh);--shadow-lg: var(--modal-sh);--overlay: rgba(0, 0, 0, .55);--brand-symbol: #f2ede2;--brand-ink: #f2ede2}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font-ui);background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5;letter-spacing:-.006em;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overscroll-behavior-y:none}button,input,select,textarea{font:inherit;letter-spacing:inherit;color:inherit}button{cursor:pointer;border:none;background:none}a{color:inherit;text-decoration:none}ul{list-style:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-xs)}.display{font-weight:600;letter-spacing:-.03em;line-height:1.05;font-variant-numeric:tabular-nums}.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.muted{color:var(--ink-muted)}.soft{color:var(--ink-soft)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-pill)}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}@media(prefers-reduced-motion:reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}.app-frame{display:flex;height:100dvh;overflow:hidden;background:var(--bg)}.app-main{flex:1;min-width:0;overflow-y:auto;background:var(--bg)}.app-content{max-width:820px;margin:0 auto;padding:52px 48px 64px}.app-shell{min-height:100%;max-width:640px;margin:0 auto;padding:0 var(--space-4) calc(84px + env(safe-area-inset-bottom,0px)) var(--space-4);padding-top:calc(env(safe-area-inset-top,0px) + var(--space-4))}@media(max-width:879px){.app-frame{display:block;height:auto;overflow:visible}.app-main{overflow:visible}.app-content{max-width:640px;padding:calc(env(safe-area-inset-top,0px) + var(--space-4)) var(--space-4) calc(96px + env(safe-area-inset-bottom,0px))}.sidebar{display:none}.desktop-only{display:none!important}}@media(min-width:880px){.tabbar,.fab,.mobile-only{display:none!important}}.sidebar{width:232px;flex-shrink:0;display:flex;flex-direction:column;padding:24px 14px 18px}.sidebar-brand{display:flex;align-items:center;gap:10px;padding:0 10px 24px}.brand-wordmark{font-family:var(--font-brand);font-weight:500;font-size:16px;letter-spacing:-.015em;color:var(--brand-ink)}.side-nav{display:flex;flex-direction:column;gap:2px}.side-item{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:var(--radius-xs);font-size:13.5px;font-weight:500;text-align:left;color:var(--ink-soft);transition:background var(--dur) ease}.side-item svg{color:var(--ink-muted);flex-shrink:0}.side-item:hover{background:var(--surface-2)}.side-item.active{background:var(--bg-elev);color:var(--ink);box-shadow:0 0 0 .5px var(--border)}.side-item.active svg{color:var(--accent)}.side-cta{margin-top:20px;height:38px;border-radius:var(--radius-xs);background:var(--accent);color:var(--accent-ink);display:inline-flex;align-items:center;justify-content:center;gap:7px;font-weight:600;font-size:13px;transition:filter var(--dur) ease}.side-cta:hover{filter:brightness(1.06)}.side-cta:active{filter:brightness(.94)}.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:2px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:0 0 var(--space-5)}.page-head h1{font-weight:600;font-size:28px;letter-spacing:-.025em}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.stack-sm{display:flex;flex-direction:column;gap:var(--space-2)}.row{display:flex;align-items:center;gap:var(--space-3)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}.grow{flex:1;min-width:0}.section-title{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);padding:0 var(--space-1)}.section-head{font-size:17px;font-weight:600;letter-spacing:-.015em}.link-accent{color:var(--accent);font-size:13px;font-weight:500;padding:0}.card{background:var(--bg-elev);border-radius:var(--radius);box-shadow:var(--card-sh),0 0 0 .5px var(--border)}.card-pad{padding:18px 20px}.card-btn{display:block;width:100%;text-align:left;transition:background var(--dur) ease}.card-btn:hover{background:var(--surface-2)}.list-card{background:var(--bg-elev);border-radius:var(--radius);box-shadow:var(--card-sh),0 0 0 .5px var(--border);padding:0 4px}.row-item{display:flex;align-items:center;gap:13px;width:100%;text-align:left;border-radius:var(--radius-sm);padding:13px 14px;color:var(--ink);transition:background var(--dur) ease}.row-item:hover{background:var(--surface-2)}.row-title{font-weight:500;font-size:14px}.row-sub{color:var(--ink-muted);font-size:12.5px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);height:40px;padding:0 var(--space-4);border-radius:var(--radius-xs);font-weight:600;font-size:13.5px;transition:filter var(--dur) ease,background var(--dur) ease;white-space:nowrap}.btn:disabled{opacity:.5;pointer-events:none}.btn-primary{background:var(--accent);color:var(--accent-ink)}.btn-primary:hover{filter:brightness(1.06)}.btn-primary:active{filter:brightness(.94)}.btn-ghost{background:var(--surface-2);color:var(--ink)}.btn-ghost:hover{background:var(--surface-hover)}.btn-danger{background:var(--danger-soft);color:var(--danger)}.btn-block{width:100%}.btn-sm{height:34px;padding:0 var(--space-3);font-size:13px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius-pill);background:var(--surface-2);color:var(--ink-soft);transition:background var(--dur) ease}.icon-btn:hover{background:var(--surface-hover);color:var(--ink)}.chip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 var(--space-3);border-radius:var(--radius-pill);font-size:12.5px;font-weight:500;background:var(--surface-2);color:var(--ink-soft);transition:background var(--dur) ease}.chip:hover{background:var(--surface-hover)}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:500}.badge-positive{background:var(--positive-soft);color:var(--positive)}.badge-danger{background:var(--danger-soft);color:var(--danger)}.badge-warn{background:var(--warn-soft);color:var(--warn)}.badge-muted{background:var(--surface-2);color:var(--ink-muted)}.badge-info{background:var(--info-soft);color:var(--info)}.badge-accent{background:var(--accent-soft);color:var(--accent)}.avatar{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:var(--radius-pill);font-weight:600;color:#fff;-webkit-user-select:none;user-select:none}.amount{font-variant-numeric:tabular-nums;font-weight:600}.amount-pos{color:var(--positive)}.amount-neg{color:var(--danger)}.field{display:flex;flex-direction:column;gap:var(--space-2)}.field>label{font-size:13px;font-weight:500;color:var(--ink-soft);padding-left:var(--space-1)}.input,.select,.textarea{width:100%;height:44px;padding:0 var(--space-3);background:var(--surface-2);border:.5px solid var(--border);border-radius:var(--radius-xs);color:var(--ink);font-size:14px;transition:border-color var(--dur) ease,background var(--dur) ease}.textarea{height:auto;min-height:84px;padding:var(--space-3);resize:vertical;line-height:1.5}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--accent);background:var(--bg-elev)}.input::placeholder,.textarea::placeholder{color:var(--ink-muted)}.input-amount{font-variant-numeric:tabular-nums;font-size:28px;font-weight:600;height:60px;text-align:center;letter-spacing:-.02em}.segmented{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px;background:var(--surface-2);border-radius:var(--radius-xs);padding:3px}.segmented>button{height:36px;border-radius:calc(var(--radius-xs) - 3px);font-weight:500;font-size:13px;color:var(--ink-soft);transition:background var(--dur) ease,color var(--dur) ease}.segmented>button[data-active=true]{background:var(--bg-elev);color:var(--ink);box-shadow:var(--shadow-sm),0 0 0 .5px var(--border)}.swatches{display:flex;flex-wrap:wrap;gap:var(--space-2)}.swatch{width:32px;height:32px;border-radius:var(--radius-pill);transition:transform var(--dur) ease;position:relative}.swatch[data-active=true]{transform:scale(1.12);box-shadow:0 0 0 2px var(--bg-elev),0 0 0 3.5px var(--ink)}.fab{position:fixed;right:max(var(--space-5),env(safe-area-inset-right));bottom:calc(84px + env(safe-area-inset-bottom,0px));z-index:40;width:56px;height:56px;border-radius:var(--radius-pill);background:var(--accent);color:var(--accent-ink);display:inline-flex;align-items:center;justify-content:center;box-shadow:var(--modal-sh);transition:filter var(--dur) ease,transform var(--dur) ease}.fab:hover{filter:brightness(1.06)}.fab:active{transform:scale(.94)}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;justify-content:center;gap:2px;padding:var(--space-2) var(--space-3) calc(var(--space-2) + env(safe-area-inset-bottom,0px));background:color-mix(in srgb,var(--bg-elev) 86%,transparent);-webkit-backdrop-filter:blur(18px) saturate(1.4);backdrop-filter:blur(18px) saturate(1.4);box-shadow:0 -.5px 0 var(--border)}.tab{flex:1;max-width:120px;display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 0;border-radius:var(--radius-sm);color:var(--ink-muted);font-size:11px;font-weight:500;transition:color var(--dur) ease}.tab.active{color:var(--accent)}.person-panel{position:fixed;top:0;right:0;bottom:0;z-index:45;width:min(400px,100vw);background:var(--bg-elev);border-left:.5px solid var(--border-strong);box-shadow:var(--pane-sh);overflow-y:auto;padding:24px 26px 32px;animation:pane-in .28s var(--ease)}@keyframes pane-in{0%{transform:translate(28px);opacity:0}}.panel-close{width:30px;height:30px;border-radius:var(--radius-pill);background:var(--surface-2);color:var(--ink-soft);display:flex;align-items:center;justify-content:center;transition:background var(--dur) ease}.panel-close:hover{background:var(--border)}.overlay{position:fixed;inset:0;z-index:50;background:var(--overlay);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;align-items:flex-end;justify-content:center;animation:overlay-in .2s ease}@media(min-width:560px){.overlay{align-items:center}}.sheet{width:100%;max-width:560px;max-height:92vh;overflow-y:auto;background:var(--bg-elev);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--modal-sh),0 0 0 .5px var(--border-strong);padding:22px 22px calc(var(--space-6) + env(safe-area-inset-bottom,0px));animation:sheet-in .24s var(--ease)}@media(min-width:560px){.sheet{width:440px;border-radius:var(--radius-lg);margin:var(--space-4);padding-bottom:24px;animation:modal-in .24s var(--ease)}.sheet-grabber{display:none}}.sheet-narrow{width:420px}.sheet-grabber{width:36px;height:4px;border-radius:var(--radius-pill);background:var(--border-strong);margin:0 auto var(--space-3)}.sheet-title{font-size:17px;font-weight:600;letter-spacing:-.015em}@keyframes overlay-in{0%{opacity:0}}@keyframes sheet-in{0%{transform:translateY(100%)}}@keyframes modal-in{0%{transform:translateY(10px);opacity:0}}.quick-opt{display:flex;align-items:center;gap:13px;width:100%;text-align:left;border-radius:var(--radius-sm);padding:11px 12px;color:var(--ink);transition:background var(--dur) ease}.quick-opt:hover{background:var(--surface-2)}.quick-opt-icon{width:36px;height:36px;border-radius:11px;background:var(--accent-soft);color:var(--accent);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-3);padding:var(--space-7) var(--space-4);color:var(--ink-muted)}.empty h3{color:var(--ink-soft);font-weight:600;font-size:15px}.progress{height:6px;border-radius:var(--radius-pill);background:var(--border);overflow:hidden}.progress>span{display:block;height:100%;border-radius:var(--radius-pill);background:var(--accent);transition:width .4s ease}.toast-wrap{position:fixed;left:0;right:0;bottom:24px;z-index:60;display:flex;flex-direction:column;align-items:center;gap:var(--space-2);pointer-events:none}@media(max-width:879px){.toast-wrap{bottom:calc(96px + env(safe-area-inset-bottom,0px))}}.toast{pointer-events:auto;display:inline-flex;align-items:center;gap:var(--space-2);padding:10px 18px;border-radius:var(--radius-pill);background:var(--bg-elev);box-shadow:var(--toast-sh),0 0 0 .5px var(--border-strong);font-weight:500;font-size:13px;animation:toast-in .22s ease}@keyframes toast-in{0%{transform:translateY(10px);opacity:0}}.timeline-item{display:flex;gap:var(--space-3);padding:var(--space-3) 0}.timeline-dot{width:32px;height:32px;border-radius:var(--radius-pill);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.list-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4)}.list-row+.list-row{box-shadow:0 -.5px 0 var(--border)}.skeleton{background:linear-gradient(100deg,var(--surface-2) 30%,var(--surface-hover) 50%,var(--surface-2) 70%);background-size:200% 100%;border-radius:var(--radius-sm);animation:shimmer 1.4s infinite}@keyframes shimmer{to{background-position:-200% 0}}.chip[data-active=true]{background:var(--accent-soft);color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.chip-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.month-nav{display:flex;align-items:center;gap:var(--space-2)}.month-nav .month-label{min-width:130px;text-align:center;font-weight:600;font-size:14.5px;text-transform:capitalize}.cat-bar{height:6px;border-radius:var(--radius-pill);background:var(--surface-2);overflow:hidden}.cat-bar>span{display:block;height:100%;border-radius:var(--radius-pill);transition:width .4s cubic-bezier(.22,1,.36,1)}.day-head{font-size:12px;font-weight:600;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.04em;padding:var(--space-4) 4px var(--space-2)}
