/* Art direction: private pocket ledger → calm, precise, iPhone-first.
   Palette: warm paper and ink, restrained teal for actions.
   Typography: locally bundled Satoshi for legible amounts and compact controls.
   Density: balanced; one clear action and generous touch targets. */
@font-face{font-family:Satoshi;src:url('./assets/satoshi-400.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:Satoshi;src:url('./assets/satoshi-500.woff2') format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:Satoshi;src:url('./assets/satoshi-700.woff2') format('woff2');font-weight:700;font-display:swap}
:root,[data-theme=light]{--color-bg:#f7f6f2;--color-surface:#fffefa;--color-surface-2:#f0eee8;--color-surface-offset:#e7e4dc;--color-text:#28251d;--color-text-muted:#66645e;--color-text-faint:#79766d;--color-primary:#01696f;--color-primary-hover:#0c4e54;--color-primary-highlight:#e0eeea;--color-on-primary:#fff;--color-error:#a13544;--color-warning:#854418;--color-border:oklch(0.25 0.01 80 / .13);--color-overlay:oklch(.15 .01 80 / .4);--font-body:Satoshi,-apple-system,BlinkMacSystemFont,sans-serif;--font-display:var(--font-body);--text-xs:clamp(.75rem,.72rem + .15vw,.8125rem);--text-sm:clamp(.875rem,.85rem + .15vw,.9375rem);--text-base:clamp(1rem,.97rem + .1vw,1.0625rem);--text-lg:clamp(1.125rem,1rem + .4vw,1.375rem);--text-xl:clamp(1.5rem,1.3rem + .7vw,2rem);--text-amount:clamp(2rem,1.7rem + 1vw,2.25rem);--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--radius-sm:.375rem;--radius-md:.625rem;--radius-lg:1rem;--radius-xl:1.5rem;--radius-full:9999px;--transition-interactive:180ms cubic-bezier(.16,1,.3,1);--shadow-md:0 8px 32px oklch(.2 .01 80 / .08);color-scheme:light}
[data-theme=dark]{--color-bg:#191b1a;--color-surface:#222624;--color-surface-2:#2b302d;--color-surface-offset:#363d38;--color-text:#f0efe9;--color-text-muted:#b4bcb4;--color-text-faint:#9ca89e;--color-primary:#91d5c7;--color-primary-hover:#b6eadd;--color-primary-highlight:#2b423b;--color-on-primary:#142d27;--color-error:#ff9caa;--color-warning:#efbe91;--color-border:oklch(.95 .01 80 / .13);--color-overlay:oklch(.05 .01 80 / .65);--shadow-md:0 8px 32px oklch(.05 .01 80 / .3);color-scheme:dark}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-font-smoothing:antialiased;scroll-padding-top:var(--space-16)}body{font:400 var(--text-base)/1.5 var(--font-body);background:var(--color-bg);color:var(--color-text);min-height:100dvh}body.modal-open{overflow:hidden}h1,h2,h3{line-height:1.2;text-wrap:balance}h1{font-size:var(--text-xl);font-weight:700;letter-spacing:-.04em}h2,h3{font-size:var(--text-lg);font-weight:700;letter-spacing:-.025em}p{max-width:65ch}svg{display:block;width:22px;height:22px;flex-shrink:0}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select{transition:background var(--transition-interactive),color var(--transition-interactive),border-color var(--transition-interactive),transform var(--transition-interactive)}button{cursor:pointer;border:0;background:none;min-height:44px}button:active{transform:scale(.97)}button:disabled{opacity:.6;cursor:wait}button:hover{background:var(--color-surface-2)}a{color:var(--color-primary)}:focus-visible{outline:3px solid var(--color-primary);outline-offset:3px;border-radius:var(--radius-sm)}[hidden]{display:none!important}.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}.skip{position:fixed;top:-100px;left:var(--space-4);z-index:100}.skip:focus{top:var(--space-4);background:var(--color-surface);padding:var(--space-3)}
.brand{display:flex;align-items:center;gap:var(--space-2);font-weight:700;letter-spacing:-.04em;font-size:var(--text-lg)}.brand svg{width:32px;height:32px;color:var(--color-primary)}.topbar{max-width:1100px;margin-inline:auto;display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);padding-top:max(var(--space-4),env(safe-area-inset-top));gap:var(--space-2)}.actions{display:flex;align-items:center;gap:var(--space-1)}.icon-btn{display:flex;align-items:center;justify-content:center;width:44px;border-radius:var(--radius-full)}.muted{color:var(--color-text-muted)}.small{font-size:var(--text-sm)}.eyebrow{font-size:var(--text-xs);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-text-muted)}.pill{display:inline-flex;align-items:center;gap:var(--space-2);background:var(--color-primary-highlight);color:var(--color-primary);border-radius:var(--radius-full);padding:var(--space-1) var(--space-3);font-size:var(--text-xs);font-weight:700}.pill svg{width:14px;height:14px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-radius:var(--radius-md);font-weight:700;font-size:var(--text-sm);text-decoration:none;min-height:48px}.btn.primary{background:var(--color-primary);color:var(--color-on-primary)}.btn.primary:hover{background:var(--color-primary-hover)}.btn.secondary{background:var(--color-surface-2)}.btn.danger{color:var(--color-error);background:var(--color-surface-2)}.full{width:100%}.text-btn{color:var(--color-primary);font-weight:700;padding:var(--space-2);font-size:var(--text-sm)}.error{color:var(--color-error);font-size:var(--text-sm);padding-block:var(--space-2)}.notice{background:var(--color-surface-2);border-radius:var(--radius-md);padding:var(--space-4);font-size:var(--text-sm);color:var(--color-text-muted)}.notice.warning{color:var(--color-warning)}.notice strong{color:var(--color-text)}
.gate{width:min(100%,480px);margin:var(--space-8) auto;padding:var(--space-4) var(--space-6)}.gate .brand{margin-bottom:var(--space-10)}.gate h1{margin-bottom:var(--space-4)}.gate>p{margin-bottom:var(--space-6)}.gate .pill{margin-bottom:var(--space-5)}.gate form{margin-top:var(--space-6)}.gate footer{margin-top:var(--space-8);font-size:var(--text-xs);color:var(--color-text-muted)}.field{display:grid;gap:var(--space-2);margin-bottom:var(--space-4)}label,legend{font-weight:500;font-size:var(--text-sm)}input,select{width:100%;min-height:50px;border:1px solid var(--color-border);background:var(--color-surface);padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--text-base);min-width:0}input[type=checkbox]{width:20px;min-height:20px;accent-color:var(--color-primary)}.check{display:flex;align-items:flex-start;gap:var(--space-3);font-size:var(--text-sm);font-weight:400;margin-block:var(--space-5)}.check input{margin-top:var(--space-1);flex-shrink:0}.hint{font-size:var(--text-xs);color:var(--color-text-muted)}fieldset{border:0;min-width:0}.row2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.row2>.field{min-width:0}.stack{display:grid;gap:var(--space-3)}.divider{height:1px;background:var(--color-border);margin-block:var(--space-5)}
.shell{max-width:1100px;margin-inline:auto;padding:var(--space-4) var(--space-5) calc(7rem + env(safe-area-inset-bottom))}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-6)}.page-head p{margin-top:var(--space-2)}.month-switch{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-5)}.month-switch strong{font-weight:700;text-transform:capitalize}.dashboard{display:grid;gap:var(--space-5)}.panel{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-5);border:1px solid var(--color-border)}.hero{background:var(--color-primary-highlight);border:0;padding:var(--space-6)}.hero .eyebrow{color:var(--color-primary)}.amount{font-size:var(--text-amount);line-height:1.2;font-weight:700;letter-spacing:-.05em;font-variant-numeric:tabular-nums;margin-top:var(--space-3);overflow-wrap:anywhere}.hero .caption{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:var(--space-2)}.hero details{margin-top:var(--space-5)}summary{cursor:pointer;min-height:44px;display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);font-weight:700}summary::before{content:'+';color:var(--color-primary);font-size:var(--text-lg)}details[open]>summary::before{content:'−'}dl{margin-top:var(--space-2)}.dl-row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-3);padding-block:var(--space-2);font-size:var(--text-sm)}dd{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;font-weight:700}.mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin-block:var(--space-5)}.mini{padding:var(--space-4);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md)}.mini p{font-size:var(--text-xs);color:var(--color-text-muted)}.mini strong{display:block;font-size:var(--text-lg);margin-top:var(--space-2);font-variant-numeric:tabular-nums}.section-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-4)}.ledger{list-style:none}.entry{display:flex;align-items:center;gap:var(--space-3);padding-block:var(--space-4);border-bottom:1px solid var(--color-border);width:100%;text-align:left}.entry:last-child{border-bottom:0}.entry-mark{width:32px;flex-shrink:0;color:var(--color-text-muted)}.entry-main{min-width:0;flex:1}.entry-title{display:block;font-weight:500;overflow-wrap:anywhere}.entry-meta{display:block;font-size:var(--text-xs);color:var(--color-text-muted);margin-top:var(--space-1)}.entry-sum{font-size:var(--text-sm);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}.positive{color:var(--color-primary)}.negative{color:var(--color-error)}.category{margin-top:var(--space-4)}.category-top{display:flex;justify-content:space-between;gap:var(--space-3);font-size:var(--text-sm);margin-bottom:var(--space-2)}.track{height:7px;border-radius:var(--radius-full);background:var(--color-surface-2);overflow:hidden}.fill{height:100%;background:var(--color-primary);border-radius:var(--radius-full);width:var(--fill,0%)}.empty{padding:var(--space-6) var(--space-2);text-align:left}.empty svg{color:var(--color-primary);margin-bottom:var(--space-4);width:28px;height:28px}.empty p{font-size:var(--text-sm);color:var(--color-text-muted);margin-block:var(--space-2) var(--space-4)}.subtle-line{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:var(--space-4)}
.tabs{position:fixed;bottom:0;left:0;right:0;z-index:10;display:flex;justify-content:center;background:var(--color-surface);border-top:1px solid var(--color-border);padding:var(--space-2) var(--space-3) max(var(--space-2),env(safe-area-inset-bottom))}.tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-1);width:min(20%,120px);font-size:var(--text-xs);color:var(--color-text-muted);padding:var(--space-2) var(--space-1);border-radius:var(--radius-md)}.tab[aria-current=page]{color:var(--color-primary);font-weight:700;background:var(--color-primary-highlight)}.add-fab{position:fixed;right:max(var(--space-5),calc((100vw - 1060px)/2));bottom:calc(6rem + env(safe-area-inset-bottom));box-shadow:var(--shadow-md);z-index:9;border-radius:var(--radius-full)}
.period{display:flex;gap:var(--space-2);margin-bottom:var(--space-5)}.period button{flex:1;padding:var(--space-2);border-radius:var(--radius-md);font-size:var(--text-sm);background:var(--color-surface-2)}.period button[aria-pressed=true]{background:var(--color-primary);color:var(--color-on-primary)}.chart-list{display:grid;gap:var(--space-5);margin-block:var(--space-5)}.chart-row{display:grid;grid-template-columns:65px 1fr;gap:var(--space-3);align-items:center;font-size:var(--text-xs)}.bar-pair{display:grid;gap:var(--space-1)}.bar{height:14px;min-width:2px;border-radius:var(--radius-sm);background:var(--color-primary);width:var(--fill,0%)}.bar.expense{background:var(--color-text-faint)}.chart-values{display:flex;gap:var(--space-3);font-variant-numeric:tabular-nums}.legend{display:flex;gap:var(--space-4);font-size:var(--text-xs);color:var(--color-text-muted)}.dot{display:inline-block;width:8px;height:8px;border-radius:var(--radius-full);background:var(--color-primary);margin-right:var(--space-1)}.dot.expense{background:var(--color-text-faint)}.settings-group{margin-bottom:var(--space-5)}.settings-group h2{margin-bottom:var(--space-3)}.settings-group p{font-size:var(--text-sm);margin-bottom:var(--space-3)}.status-line{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-xs);color:var(--color-text-muted);margin-bottom:var(--space-4)}.status-line svg{width:16px;height:16px}.filter{margin-bottom:var(--space-4)}
dialog{border:0;border-radius:var(--radius-xl) var(--radius-xl) 0 0;background:var(--color-surface);color:var(--color-text);width:min(100%,540px);max-height:92dvh;position:fixed;top:auto;bottom:0;left:0;right:0;margin-inline:auto;padding:var(--space-5) var(--space-5) max(var(--space-6),env(safe-area-inset-bottom));box-shadow:var(--shadow-md);overflow:auto}dialog::backdrop{background:var(--color-overlay)}.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-5)}.sheet-head h2{font-size:var(--text-lg)}.sheet-head .icon-btn{flex-shrink:0}.sheet-grab{width:36px;height:4px;background:var(--color-border);border-radius:var(--radius-full);margin:0 auto var(--space-3)}.form-actions{display:flex;gap:var(--space-3);margin-top:var(--space-5)}.form-actions .primary{flex:1}.app-message{margin-bottom:var(--space-4);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-primary-highlight);font-size:var(--text-sm)}.mask #app,.mask #sheet{visibility:hidden}.skeleton{height:1rem;border-radius:var(--radius-sm);background:var(--color-surface-offset);margin-block:var(--space-3);animation:breathe 1s ease-in-out infinite alternate}.skeleton.wide{height:4rem}.gate-links{display:flex;flex-direction:column;gap:var(--space-2);margin-top:var(--space-4)}.help-list{padding-left:var(--space-5);font-size:var(--text-sm)}.help-list li{margin-bottom:var(--space-3)}@keyframes breathe{to{opacity:.4}}@media(min-width:768px){.gate{margin-top:var(--space-12)}.shell{padding-top:var(--space-8)}.dashboard{grid-template-columns:1.2fr 1fr;align-items:start}.dashboard .left,.dashboard .right{min-width:0}.panel{padding:var(--space-6)}dialog{top:50%;bottom:auto;transform:translateY(-50%);border-radius:var(--radius-xl)}.wide-panel{max-width:760px;margin-inline:auto}.topbar{padding-inline:var(--space-6)}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
