:root{--bg:#f2ede4;--card:#fdfaf5;--ink:#0f0e0c;--ink-2:#3d3930;--muted:#8a847a;--line:#e0d9ce;--accent:#c53d2b;--accent-bg:#f9ede9;--blue:#1d4ed8;--green:#15803d;--dark:#0f0e0c;--dark-card:#1c1a17;--dark-line:#2e2b26;--disp:"Cormorant Garamond",Georgia,serif;--ui:"Jost",system-ui,sans-serif;--r:4px;--shadow:0 1px 3px rgba(15,14,12,.08),0 4px 16px rgba(15,14,12,.06);--shadow-raised:0 2px 8px rgba(15,14,12,.1),0 8px 32px rgba(15,14,12,.08)}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-size:16px}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;min-height:100vh}body,button{font-family:var(--ui)}button{cursor:pointer}input,select,textarea{font-family:var(--ui)}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(1turn)}}.anim-1{animation:fadeUp .5s cubic-bezier(.22,.68,0,1.2) both}.anim-2{animation:fadeUp .5s cubic-bezier(.22,.68,0,1.2) .1s both}.anim-3{animation:fadeUp .5s cubic-bezier(.22,.68,0,1.2) .2s both}.anim-4{animation:fadeUp .5s cubic-bezier(.22,.68,0,1.2) .3s both}.boot-screen{min-height:100vh;justify-content:center;background:var(--bg)}.boot-inner,.boot-screen{display:flex;align-items:center}.boot-inner{flex-direction:column;gap:20px}.boot-logo{font-family:var(--disp);font-size:48px;font-weight:700;letter-spacing:-.03em;color:var(--ink)}.boot-logo em{font-style:italic;color:var(--accent)}.boot-spinner{width:24px;height:24px;border:2px solid var(--line);border-top-color:var(--ink);border-radius:50%;animation:spin .8s linear infinite}.auth-layout{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.auth-left{background:var(--dark);color:#f2ede4;padding:60px 64px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.auth-left:before{content:"";position:absolute;top:-80px;right:-80px;width:360px;height:360px;border-radius:50%;border:1px solid hsla(39,35%,92%,.06)}.auth-left:after{content:"";position:absolute;bottom:-120px;left:-60px;width:440px;height:440px;border-radius:50%;border:1px solid hsla(39,35%,92%,.04)}.auth-logo-mark{font-family:var(--disp);font-size:22px;font-weight:600;letter-spacing:.04em;color:#f2ede4;position:relative;z-index:1;display:flex;align-items:center;gap:10px}.auth-logo-mark .hexmark{font-size:18px;color:var(--accent)}.auth-headline{position:relative;z-index:1}.auth-headline h1{font-family:var(--disp);font-size:clamp(52px,6vw,80px);font-weight:700;line-height:.92;letter-spacing:-.04em;color:#f2ede4;margin-bottom:28px}.auth-headline h1 em{font-style:italic;font-weight:400;color:var(--accent)}.auth-headline p{font-size:16px;line-height:1.65;color:hsla(39,35%,92%,.55);max-width:36ch}.auth-features{position:relative;z-index:1;display:flex;flex-direction:column;gap:12px}.auth-feat{display:flex;align-items:center;gap:12px;font-size:14px;color:hsla(39,35%,92%,.5);letter-spacing:.02em}.auth-feat .feat-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0}.auth-right{background:var(--card);display:flex;align-items:center;justify-content:center;padding:60px 48px}.auth-form-box{width:100%;max-width:400px}.auth-form-box h2{font-family:var(--disp);font-size:36px;font-weight:700;letter-spacing:-.02em;margin-bottom:6px}.auth-form-box .auth-sub{font-size:15px;color:var(--muted);margin-bottom:36px}.auth-tabs{display:flex;border-bottom:2px solid var(--line);margin-bottom:28px}.auth-tab{flex:1 1;padding:12px;background:none;font-size:15px;font-weight:500;color:var(--muted);border:none;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s}.auth-tab.active{color:var(--ink);border-bottom-color:var(--ink);font-weight:600}.form-stack{gap:18px}.field-group,.form-stack{display:flex;flex-direction:column}.field-group{gap:6px}.field-group label{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}.field-group input{padding:13px 14px;border:1.5px solid var(--line);border-radius:var(--r);background:var(--bg);font-size:15px;color:var(--ink);outline:none;transition:border-color .15s,box-shadow .15s;width:100%}.field-group input:focus{border-color:var(--ink);background:#fff;box-shadow:0 0 0 3px rgba(15,14,12,.06)}.form-error{font-size:14px;color:var(--accent);font-weight:500;padding:10px 12px;background:var(--accent-bg);border-radius:var(--r);border-left:3px solid var(--accent)}.btn-primary{padding:15px 20px;background:var(--ink);color:var(--bg);border:none;border-radius:var(--r);font-size:15px;font-weight:600;letter-spacing:.02em;width:100%;transition:background .15s,transform .1s;margin-top:4px}.btn-primary:hover{background:var(--ink-2)}.btn-primary:active{transform:scale(.99)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.auth-switch{margin-top:22px;text-align:center;font-size:14px;color:var(--muted)}.link-btn{background:none;border:none;color:var(--ink);font-weight:600;text-decoration:underline;font-size:14px;margin-left:4px;font-family:var(--ui)}.app-shell{min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}.app-topbar{background:var(--dark);color:#f2ede4;gap:24px;padding:0 40px;height:58px;position:-webkit-sticky;position:sticky;top:0;z-index:100}.app-topbar,.topbar-brand{display:flex;align-items:center}.topbar-brand{font-family:var(--disp);font-size:20px;font-weight:700;letter-spacing:.02em;gap:8px;margin-right:auto}.topbar-brand .hex{color:var(--accent);font-size:16px}.month-nav{gap:14px}.month-nav,.nav-btn{display:flex;align-items:center}.nav-btn{background:hsla(39,35%,92%,.08);border:1px solid hsla(39,35%,92%,.12);color:#f2ede4;width:32px;height:32px;border-radius:50%;font-size:16px;justify-content:center;transition:background .15s}.nav-btn:hover{background:hsla(39,35%,92%,.16)}.month-label{font-size:15px;font-weight:500;letter-spacing:.02em;min-width:150px;text-align:center;color:#f2ede4}.topbar-right{display:flex;align-items:center;gap:16px;margin-left:auto}.user-chip{font-size:13px;color:hsla(39,35%,92%,.45)}.signout-btn{background:hsla(39,35%,92%,.08);border:1px solid hsla(39,35%,92%,.12);color:hsla(39,35%,92%,.7);padding:7px 14px;border-radius:var(--r);font-size:13px;font-weight:500;transition:background .15s,color .15s}.signout-btn:hover{background:hsla(39,35%,92%,.16);color:#f2ede4}.error-strip{background:var(--accent-bg);border-bottom:1px solid rgba(197,61,43,.2);color:var(--accent);font-size:14px;font-weight:500;padding:10px 40px}.app-body{display:grid;grid-template-columns:320px 1fr;grid-gap:0;gap:0;flex:1 1;min-height:0}.summary-sidebar{border-right:1px solid var(--line);padding:32px 28px;display:flex;flex-direction:column;gap:28px;background:var(--card)}.total-hero{padding-bottom:24px;border-bottom:1px solid var(--line)}.total-eyebrow{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}.total-figure{font-family:var(--disp);font-size:52px;font-weight:700;letter-spacing:-.04em;line-height:1;color:var(--ink)}.total-figure .currency{font-size:28px;font-weight:400;vertical-align:super;margin-right:2px;color:var(--muted)}.total-sub{font-size:13px;color:var(--muted);margin-top:6px}.chart-section{display:flex;flex-direction:column;align-items:center;gap:0}.donut-wrap{position:relative}.cat-list{list-style:none;display:flex;flex-direction:column;gap:2px;width:100%}.cat-item{display:grid;grid-template-columns:20px 24px 1fr auto auto;align-items:center;grid-gap:8px;gap:8px;padding:9px 10px;border-radius:var(--r);transition:background .12s}.cat-item:hover{background:var(--bg)}.cat-swatch{width:8px;height:8px;border-radius:50%;flex-shrink:0}.cat-emoji{font-size:15px}.cat-name-text{font-size:14px;color:var(--ink-2);font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cat-pct{font-size:12px;color:var(--muted);font-weight:500;text-align:right}.cat-amount{font-size:14px;font-weight:600;color:var(--ink);text-align:right;font-family:var(--disp);font-size:16px;letter-spacing:-.01em}.cat-empty-note{font-size:14px;color:var(--muted);text-align:center;padding:16px}.expense-panel{display:flex;flex-direction:column;gap:0;overflow:hidden}.add-expense-card{background:var(--card);border-bottom:1px solid var(--line);padding:28px 36px}.section-title{font-family:var(--disp);font-size:26px;font-weight:700;letter-spacing:-.02em;margin-bottom:18px;color:var(--ink)}.section-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.tx-badge{font-size:12px;font-weight:600;background:var(--line);color:var(--muted);border-radius:20px;padding:3px 10px}.add-form{flex-direction:column}.add-form,.form-row{display:flex;gap:14px}.form-field{display:flex;flex-direction:column;gap:5px;flex:1 1}.form-field.w-auto{flex:none}.form-field.w-2{flex:2 1}.form-field>span{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2)}.form-field input,.form-field select{padding:10px 12px;border:1.5px solid var(--line);border-radius:var(--r);background:var(--bg);font-size:15px;color:var(--ink);outline:none;transition:border-color .15s,box-shadow .15s}.form-field input:focus,.form-field select:focus{border-color:var(--ink);background:#fff;box-shadow:0 0 0 3px rgba(15,14,12,.05)}.form-field select{cursor:pointer}.add-submit{align-self:flex-start;padding:11px 24px;background:var(--accent);color:#fff;border:none;border-radius:var(--r);font-size:14px;font-weight:600;letter-spacing:.02em;transition:background .15s,transform .1s}.add-submit:hover{background:#a83225}.add-submit:active{transform:scale(.98)}.add-submit:disabled{opacity:.5;cursor:not-allowed}.tx-section{flex:1 1;overflow-y:auto;padding:24px 36px}.loading-msg{color:var(--muted);font-size:15px;padding:20px 0}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;gap:12px}.empty-icon{font-size:48px;font-family:var(--disp);font-weight:700;color:var(--line)}.empty-state p{font-size:15px;color:var(--muted);text-align:center}.tx-list{list-style:none;display:flex;flex-direction:column}.tx-row{display:grid;grid-template-columns:44px 1fr auto 36px;align-items:center;grid-gap:14px;gap:14px;padding:14px 0;border-bottom:1px solid var(--line);transition:background .12s}.tx-row:last-child{border-bottom:none}.tx-icon-badge{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.tx-body{display:flex;flex-direction:column;gap:2px;min-width:0}.tx-desc{font-size:15px;font-weight:500;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tx-meta{font-size:13px;color:var(--muted)}.tx-amount-col{font-family:var(--disp);font-size:20px;font-weight:700;letter-spacing:-.02em;color:var(--ink);text-align:right;white-space:nowrap}.tx-delete{background:none;border:none;color:var(--line);font-size:16px;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background .12s,color .12s}.tx-delete:hover{background:var(--accent-bg);color:var(--accent)}@media (max-width:900px){.app-body{grid-template-columns:1fr}.summary-sidebar{border-right:none;border-bottom:1px solid var(--line);padding:24px 20px}.chart-section{align-items:flex-start;flex-direction:row;gap:24px}.add-expense-card,.tx-section{padding:20px}}@media (max-width:640px){.app-topbar{padding:0 20px}.user-chip{display:none}.form-row{flex-direction:column}.auth-layout{grid-template-columns:1fr}.auth-left{display:none}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;transition-duration:.01ms!important}}