:root{--bg-base: #06080f;--bg-elevated: #0c1019;--bg-overlay: #131826;--bg-sunken: #04060b;--grad-primary: linear-gradient(135deg, #6d5bff 0%, #8b7cff 50%, #b59cff 100%);--grad-income: linear-gradient(135deg, #00c9a7 0%, #34e0b8 50%, #7cf2d6 100%);--grad-expense: linear-gradient(135deg, #ff5470 0%, #ff7e8e 50%, #ffa8b0 100%);--accent-primary: #8b7cff;--accent-income: #34e0b8;--accent-expense: #ff7e8e;--accent-warning: #ffb454;--text-primary: rgba(237, 240, 252, .96);--text-secondary: rgba(177, 186, 214, .72);--text-tertiary: rgba(124, 134, 168, .5);--text-disabled: rgba(124, 134, 168, .28);--glass-bg: rgba(20, 26, 42, .55);--glass-bg-hover: rgba(28, 35, 56, .66);--glass-blur: 20px;--glass-saturate: 140%;--glass-border: rgba(255, 255, 255, .08);--glass-border-hi: rgba(255, 255, 255, .14);--glass-highlight: inset 0 1px 0 rgba(255, 255, 255, .1);--glass-shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px rgba(0, 0, 0, .36), 0 24px 60px rgba(4, 6, 11, .5);--glass-shadow-hover: 0 2px 4px rgba(0, 0, 0, .45), 0 16px 40px rgba(0, 0, 0, .42), 0 40px 90px rgba(4, 6, 11, .58);--orb-violet: #6d5bff;--orb-teal: #00c9a7;--orb-rose: #ff5470;--orb-1: var(--orb-violet);--orb-2: var(--orb-teal);--orb-3: var(--orb-rose);--acct-checking: #6fa8ff;--acct-savings: #34e0b8;--acct-credit: #ff7e8e;--acct-cash: #8fd16f;--acct-investment: #b59cff;--acct-loan: #ffb454;--font-display: "Space Grotesk", system-ui, sans-serif;--font-body: "Inter", system-ui, sans-serif;--num: "tnum" 1, "lnum" 1;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 24px;--s-6: 32px;--s-7: 48px;--s-8: 64px;--r-sm: 8px;--r-md: 12px;--r-lg: 18px;--r-xl: 26px;--r-pill: 999px;--sidebar-w: 260px;--sidebar-w-collapsed: 72px;--content-max: 1240px;--z-orbs: 0;--z-particles: 1;--z-content: 2;--z-sidebar: 30;--z-toast: 60;--z-modal: 70;--z-palette: 80}:root[data-theme=porcelain]{--bg-base: #eef1f8;--bg-elevated: #f7f9fd;--bg-overlay: #ffffff;--bg-sunken: #e4e8f2;--text-primary: rgba(18, 22, 38, .94);--text-secondary: rgba(48, 56, 84, .7);--text-tertiary: rgba(80, 90, 120, .5);--text-disabled: rgba(80, 90, 120, .3);--glass-bg: rgba(255, 255, 255, .62);--glass-bg-hover: rgba(255, 255, 255, .78);--glass-border: rgba(20, 26, 42, .08);--glass-border-hi: rgba(20, 26, 42, .16);--glass-highlight: inset 0 1px 0 rgba(255, 255, 255, .8);--glass-shadow: 0 1px 2px rgba(36, 44, 72, .08), 0 8px 24px rgba(36, 44, 72, .1), 0 24px 60px rgba(36, 44, 72, .12);--glass-shadow-hover: 0 2px 4px rgba(36, 44, 72, .12), 0 16px 40px rgba(36, 44, 72, .14), 0 40px 90px rgba(36, 44, 72, .16)}.glass{background:var(--glass-bg);backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));border:1px solid var(--glass-border);box-shadow:var(--glass-highlight),var(--glass-shadow);border-radius:var(--r-lg)}.amount{font-family:var(--font-display);font-feature-settings:var(--num)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font-body);background:var(--bg-base);color:var(--text-primary);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow:hidden}#root{position:relative;isolation:isolate}button{font:inherit;color:inherit;cursor:pointer;border:none;background:none}input,select,textarea{font:inherit;color:inherit}a{color:var(--accent-primary);text-decoration:none}.bg-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-orbs);pointer-events:none;overflow:hidden}.orb{position:absolute;border-radius:50%;filter:blur(100px);opacity:.32;will-change:transform}.orb--1{width:46vw;height:46vw;background:var(--orb-1);top:-12vw;left:-8vw}.orb--2{width:40vw;height:40vw;background:var(--orb-2);bottom:-14vw;right:-6vw}.orb--3{width:32vw;height:32vw;background:var(--orb-3);top:40%;left:55%;opacity:.2}.particles{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-particles);pointer-events:none}.scroll{overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent}.scroll::-webkit-scrollbar{width:10px;height:10px}.scroll::-webkit-scrollbar-track{background:transparent}.scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:var(--r-pill);border:2px solid transparent;background-clip:padding-box}.scroll::-webkit-scrollbar-thumb:hover{background:#ffffff38;background-clip:padding-box}:focus-visible{outline:2px solid var(--accent-primary);outline-offset:2px;border-radius:var(--r-sm)}.tone-income{color:var(--accent-income)}.tone-expense{color:var(--accent-expense)}[data-privacy=on] .amount{filter:blur(8px);transition:filter .16s ease;-webkit-user-select:none;user-select:none}[data-privacy=on] .amount:hover{filter:blur(0)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}[data-motion=off] .orb,[data-motion=off] .particles,[data-motion=off] .shimmer:after{animation:none!important}.shimmer{position:relative;overflow:hidden}.shimmer:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.25),transparent);transform:translate(-100%);animation:shimmer-sweep 2.4s ease-in-out infinite}@keyframes shimmer-sweep{to{transform:translate(100%)}}.row{display:flex;align-items:center}.col{display:flex;flex-direction:column}.spread{display:flex;align-items:center;justify-content:space-between}.gap-1{gap:var(--s-1)}.gap-2{gap:var(--s-2)}.gap-3{gap:var(--s-3)}.gap-4{gap:var(--s-4)}.gap-5{gap:var(--s-5)}.muted{color:var(--text-secondary)}.dim{color:var(--text-tertiary)}.app{position:relative;z-index:var(--z-content);display:grid;grid-template-columns:var(--sidebar-w) 1fr;height:100vh}.app-main{display:flex;flex-direction:column;min-width:0;height:100vh}.sidebar{z-index:var(--z-sidebar);display:flex;flex-direction:column;gap:var(--s-5);padding:var(--s-5) var(--s-4);background:var(--bg-elevated);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);border-right:1px solid rgba(255,255,255,.06)}.brand{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-2) var(--s-3)}.brand-mark{width:36px;height:36px;border-radius:var(--r-md);display:inline-flex;box-shadow:0 0 18px #34e0b852;flex-shrink:0}.brand-mark svg{border-radius:var(--r-md)}.brand-name{font-family:var(--font-display);font-weight:600;font-size:19px;letter-spacing:-.01em}.nav{display:flex;flex-direction:column;gap:var(--s-1)}.nav-item{position:relative;display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-3);border-radius:var(--r-md);color:var(--text-secondary);font-weight:500;font-size:14px;transition:background .12s ease,color .12s ease}.nav-item:hover{background:#ffffff0a;color:var(--text-primary)}.nav-item.is-active{background:#6d5bff24;color:var(--text-primary)}.nav-item.is-active:before{content:"";position:absolute;left:-4px;top:20%;bottom:20%;width:3px;border-radius:var(--r-pill);background:var(--accent-primary);box-shadow:0 0 12px #8b7cffb3}.sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:var(--s-2)}.privacy-note{font-size:11px;color:var(--text-tertiary);padding:var(--s-2) var(--s-3);line-height:1.4}.topbar{display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);padding:var(--s-4) var(--s-6);flex-shrink:0}.topbar-title{font-family:var(--font-display);font-weight:500;font-size:24px;letter-spacing:-.01em}.month-nav{display:flex;align-items:center;gap:var(--s-2)}.month-label{min-width:130px;text-align:center;font-weight:500;font-feature-settings:var(--num)}.topbar-actions{display:flex;align-items:center;gap:var(--s-2)}.content{flex:1;overflow-y:auto;padding:0 var(--s-6) var(--s-7)}.grid{display:grid;gap:var(--s-5);max-width:var(--content-max);margin:0 auto}.grid-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-12>*{min-width:0}.card{padding:var(--s-5)}.card-pad-sm{padding:var(--s-4)}.glass-hoverable{transition:background .16s ease,border-color .16s ease,box-shadow .16s ease,transform .16s ease}.glass-hoverable:hover{background:var(--glass-bg-hover);border-color:var(--glass-border-hi);box-shadow:var(--glass-highlight),var(--glass-shadow-hover)}.card-title{font-weight:600;font-size:15px;margin-bottom:var(--s-4);color:var(--text-primary)}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--s-4)}.hero-value{font-family:var(--font-display);font-weight:600;font-size:56px;letter-spacing:-.02em;line-height:1;font-feature-settings:var(--num)}.tile-label{font-size:12px;letter-spacing:.02em;color:var(--text-secondary);text-transform:uppercase}.tile-value{font-family:var(--font-display);font-weight:500;font-size:30px;letter-spacing:-.01em;font-feature-settings:var(--num);margin-top:var(--s-2)}.tile-delta{font-size:12px;margin-top:var(--s-2);display:inline-flex;align-items:center;gap:4px}.progress-track{width:100%;background:var(--bg-sunken);border-radius:var(--r-pill);overflow:hidden}.progress-fill{height:100%;border-radius:var(--r-pill)}.ring{position:relative;display:inline-flex;align-items:center;justify-content:center}.ring-label{position:absolute;font-size:12px;font-weight:600;font-feature-settings:var(--num)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);padding:var(--s-3) var(--s-4);border-radius:var(--r-md);font-weight:600;font-size:14px;transition:transform .1s ease,filter .16s ease,background .16s ease;border:1px solid transparent}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--grad-primary);color:#fff;box-shadow:0 6px 18px #6d5bff52}.btn-primary:hover{filter:brightness(1.08)}.btn-ghost{background:#ffffff0d;border-color:var(--glass-border);color:var(--text-primary)}.btn-ghost:hover{background:#ffffff17}.btn-danger{background:#ff547024;border-color:#ff547066;color:var(--accent-expense)}.btn-danger:hover{background:#ff547038}.btn-full{width:100%}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:var(--r-md);color:var(--text-secondary);background:#ffffff0a;border:1px solid var(--glass-border);transition:background .14s ease,color .14s ease}.icon-btn:hover{background:#ffffff17;color:var(--text-primary)}.icon-btn.is-active{background:#6d5bff2e;color:var(--accent-primary);border-color:#8b7cff66}.pill{padding:6px var(--s-3);border-radius:var(--r-pill);border:1px solid var(--glass-border);background:#ffffff0a;color:var(--text-secondary);font-size:13px;font-weight:500;transition:all .14s ease}.pill:hover{color:var(--text-primary);border-color:var(--glass-border-hi)}.pill.is-active{background:#6d5bff2e;color:var(--text-primary);border-color:#8b7cff73}.cat-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:var(--r-pill);border:1px solid;font-size:12px;font-weight:600;white-space:nowrap}.field{display:flex;flex-direction:column;gap:var(--s-2);margin-bottom:var(--s-4)}.field-label{font-size:13px;font-weight:500;color:var(--text-secondary)}.field-hint{font-size:11px;color:var(--text-tertiary)}input,select,textarea{padding:var(--s-3) var(--s-3);border-radius:var(--r-md);background:var(--bg-sunken);border:1px solid var(--glass-border);color:var(--text-primary);font-size:14px;transition:border-color .14s ease;width:100%}input:focus,select:focus,textarea:focus{border-color:var(--accent-primary);outline:none}input.num{font-feature-settings:var(--num);text-align:right}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:var(--s-5);background:#04060b99;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-panel{width:100%;max-width:460px;max-height:88vh;display:flex;flex-direction:column;padding:var(--s-5)}.modal-wide{max-width:920px}.modal-head{margin-bottom:var(--s-4)}.modal-title{font-family:var(--font-display);font-weight:500;font-size:20px}.modal-body{overflow-y:auto}.toast-stack{position:fixed;bottom:var(--s-5);left:50%;transform:translate(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;gap:var(--s-2);align-items:center}.toast{display:flex;align-items:center;gap:var(--s-4);padding:var(--s-3) var(--s-4);min-width:280px}.toast-action{color:var(--accent-primary);font-weight:600;font-size:13px}.palette-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-palette);display:flex;justify-content:center;padding-top:14vh;background:#04060b8c;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.palette{width:100%;max-width:560px;height:fit-content;max-height:64vh;display:flex;flex-direction:column;padding:var(--s-3)}.palette-input{background:transparent;border:none;font-size:18px;padding:var(--s-3)}.palette-input:focus{border:none;outline:none}.palette-list{overflow-y:auto;margin-top:var(--s-2)}.palette-item{display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3);border-radius:var(--r-md);color:var(--text-secondary);cursor:pointer}.palette-item.is-active{background:#6d5bff29;color:var(--text-primary)}.txn-list{display:flex;flex-direction:column}.txn-head,.txn-row{display:grid;grid-template-columns:1.5fr 1.1fr .9fr .7fr minmax(96px,.6fr);align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4)}.txn-head{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none}.txn-row{border-top:1px solid rgba(255,255,255,.05);transition:background .1s ease}.txn-row:hover{background:#ffffff08}.txn-row.is-selected{background:#6d5bff1a}.txn-amount{text-align:right;font-feature-settings:var(--num);font-weight:600}.txn-payee{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.day-header{padding:var(--s-4) var(--s-4) var(--s-2);font-size:12px;font-weight:600;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em}.acct-card{padding:var(--s-5);position:relative;overflow:hidden}.acct-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;opacity:.16;background:var(--acct-accent, var(--accent-primary));-webkit-mask-image:radial-gradient(circle at 80% -10%,black,transparent 60%);mask-image:radial-gradient(circle at 80% -10%,black,transparent 60%)}.acct-type{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary)}.acct-balance{font-family:var(--font-display);font-size:28px;font-weight:500;font-feature-settings:var(--num);margin:var(--s-2) 0}.budget-row{padding:var(--s-4) 0;border-top:1px solid rgba(255,255,255,.05)}.budget-meta{display:flex;justify-content:space-between;margin-bottom:var(--s-2);font-size:13px}.insight-card{display:flex;gap:var(--s-3);padding:var(--s-4);border-left:3px solid var(--accent-primary)}.insight-card.sev-warn{border-left-color:var(--accent-warning)}.insight-card.sev-good{border-left-color:var(--accent-income)}.goal-card{display:flex;align-items:center;gap:var(--s-4);padding:var(--s-4)}.dropzone{border:2px dashed var(--glass-border-hi);border-radius:var(--r-lg);padding:var(--s-8) var(--s-5);text-align:center;transition:border-color .16s ease,background .16s ease;cursor:pointer}.dropzone.is-over{border-color:var(--accent-primary);background:#6d5bff14}.review-row{display:grid;grid-template-columns:28px 1.2fr 1.4fr 1fr;gap:var(--s-3);align-items:center;padding:var(--s-2) var(--s-3);border-top:1px solid rgba(255,255,255,.05)}.review-row.is-dup{opacity:.5}.conf-badge{font-size:10px;padding:1px 6px;border-radius:var(--r-pill);background:#34e0b829;color:var(--accent-income)}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--s-3);padding:var(--s-8) var(--s-5)}.empty-orb{width:88px;height:88px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle,rgba(109,91,255,.22),transparent 70%)}.empty-emoji{font-size:40px}.empty-title{font-family:var(--font-display);font-size:20px;font-weight:500}.empty-body{max-width:360px;font-size:14px}.heatmap{display:grid;grid-template-columns:repeat(auto-fill,minmax(22px,1fr));gap:4px;max-width:100%}.heat-cell{aspect-ratio:1;max-height:36px;border-radius:5px;background:var(--bg-sunken);transition:transform .12s ease}.heat-cell:hover{transform:scale(1.15)}.demo-banner{display:inline-flex;align-items:center;gap:var(--s-2);padding:4px var(--s-3);border-radius:var(--r-pill);background:#ffb45424;border:1px solid rgba(255,180,84,.4);color:var(--accent-warning);font-size:12px;font-weight:600}.alert-banner{max-width:var(--content-max);margin:0 auto var(--s-4);padding:var(--s-3) var(--s-4);border-radius:var(--r-md);background:#ffb4541f;border:1px solid rgba(255,180,84,.35);color:var(--accent-warning);font-size:13px}.chart-tip{padding:var(--s-3);border-radius:var(--r-md)}.chart-tip-row{display:flex;align-items:center;gap:var(--s-2);font-size:13px}.chart-tip-dot{width:8px;height:8px;border-radius:50%}.chart-tip-val{font-family:var(--font-display);font-feature-settings:var(--num);font-weight:600}.col-1{grid-column:span 1}.col-2{grid-column:span 2}.col-3{grid-column:span 3}.col-4{grid-column:span 4}.col-5{grid-column:span 5}.col-6{grid-column:span 6}.col-7{grid-column:span 7}.col-8{grid-column:span 8}.col-9{grid-column:span 9}.col-10{grid-column:span 10}.col-11{grid-column:span 11}.col-12{grid-column:span 12}@media (max-width: 1024px){.app{grid-template-columns:var(--sidebar-w-collapsed) 1fr}.brand-name,.nav-item span,.privacy-note{display:none}.nav-item{justify-content:center}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6{grid-column:span 6}.col-7,.col-8,.col-9,.col-10,.col-11{grid-column:span 12}}@media (max-width: 760px){.grid-12{grid-template-columns:minmax(0,1fr);gap:var(--s-4)}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{grid-column:1 / -1}.hero-value{font-size:40px}.content{padding:0 var(--s-4) var(--s-6)}.app-main{overflow-x:hidden}.topbar{padding:var(--s-3) var(--s-4);flex-wrap:wrap;row-gap:var(--s-2)}.topbar-title{font-size:19px}.topbar-actions{margin-left:auto}.month-nav{order:3;width:100%;justify-content:center}.month-label{min-width:0;font-size:14px}.card .row{flex-wrap:wrap}.txn-head,.txn-row{grid-template-columns:1.4fr 1fr minmax(80px,auto)}.txn-cell-hide{display:none}}@media (max-width: 380px){.hero-value{font-size:clamp(26px,10.5vw,34px)}.card{padding:var(--s-4)}.tile-value{font-size:24px}}.notif-root,.notif-bell{position:relative}.notif-badge{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-pill);background:var(--grad-expense);color:#fff;font-size:10px;font-weight:700;line-height:16px;text-align:center;box-shadow:0 2px 6px #ff547073}.notif-panel{position:absolute;top:calc(100% + 10px);right:0;width:min(380px,calc(100vw - 32px));max-height:min(480px,70vh);display:flex;flex-direction:column;overflow:hidden;z-index:var(--z-palette)}.notif-head{padding:var(--s-4) var(--s-4) var(--s-3);border-bottom:1px solid var(--glass-border)}.notif-title{font-family:var(--font-display);font-weight:600;font-size:14px}.notif-list{overflow-y:auto;padding:var(--s-2)}.notif-empty{padding:var(--s-6) var(--s-4);text-align:center}.notif-item{display:flex;align-items:flex-start;gap:var(--s-3);padding:var(--s-3);border-radius:var(--r-md);cursor:pointer;transition:background .15s ease;position:relative}.notif-item:hover,.notif-item:focus-visible{background:var(--glass-bg-hover);outline:none}.notif-item.is-read{opacity:.55}.notif-emoji{font-size:18px;line-height:1.3}.notif-copy{flex:1;min-width:0}.notif-item-title{font-size:13px;font-weight:600;line-height:1.35}.notif-item-body{font-size:12px;line-height:1.4;margin-top:2px}.notif-dot{width:8px;height:8px;margin-top:5px;border-radius:50%;background:var(--accent-primary);flex:none;box-shadow:0 0 8px var(--accent-primary)}.notif-x{flex:none;width:22px;height:22px;display:grid;place-items:center;border:none;background:transparent;color:var(--text-tertiary);border-radius:var(--r-sm);cursor:pointer;opacity:0;transition:opacity .12s ease,color .12s ease}.notif-item:hover .notif-x,.notif-x:focus-visible{opacity:1}.notif-x:hover{color:var(--text-primary)}.recharts-cartesian-axis-tick-value{fill:var(--text-tertiary)!important}.recharts-cartesian-grid line{stroke:var(--glass-border)!important}[data-privacy=on] .notif-item-body{filter:blur(5px)}
