@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=IBM+Plex+Sans+Thai:wght@400;500;600;700&display=swap";:root{--paper:#e7e4dc;--card:#fafaf7;--ink:#14110d;--ink2:#4f4a40;--mut:#8c8678;--hair:#cfcabd;--accent:#ff4f00;--live:#16a34a;--warn:#b7791f;--danger:#dc2626;--dot:#14110d0f;--c0:#ff4f00;--c1:#2563eb;--c2:#16a34a;--c3:#8c8678;--c4:#c026d3;--c5:#0891b2;--c6:#ca8a04;--c7:#4f46e5;--mono:"IBM Plex Mono", "IBM Plex Sans Thai", ui-monospace, monospace;--sans:"IBM Plex Sans Thai", system-ui, sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--paper:#12100d;--card:#1b1915;--ink:#ece8de;--ink2:#bdb6a6;--mut:#857f71;--hair:#34302a;--warn:#e0a43a;--danger:#f87171;--dot:#ece8de0f;--live:#4ade80;--c1:#60a5fa;--c2:#4ade80;--c4:#e879f9;--c5:#22d3ee;--c6:#facc15;--c7:#818cf8;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);background-image:radial-gradient(var(--dot) 1px, transparent 1.4px);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;background-size:15px 15px;margin:0;font-size:15px;line-height:1.5}body:before{content:"";height:env(safe-area-inset-top,0px);z-index:11;background:var(--paper);position:fixed;inset:0 0 auto}.wrap{max-width:1340px;padding-left:max(16px, env(safe-area-inset-left));padding-right:max(16px, env(safe-area-inset-right));margin:0 auto}.app{padding-top:18px;padding-bottom:max(16px, env(safe-area-inset-bottom));flex-direction:column;gap:14px;display:flex}h1{margin:0;font-size:1.6rem}h2{margin:0 0 12px;font-size:1.1rem;font-weight:700}h3{border-top:1px dashed var(--hair);font-family:var(--mono);text-transform:uppercase;color:var(--mut);margin:20px 0 8px;padding-top:14px;font-size:11px;font-weight:500}.muted{color:var(--mut)}.small{font-size:.82rem}.accent{color:var(--accent)}.lab{font-family:var(--mono);text-transform:uppercase;color:var(--mut);margin:0;font-size:11px}.lab.en{letter-spacing:2px;font-size:10px}.rule{border-bottom:1px dashed var(--hair);justify-content:space-between;gap:12px;margin-top:8px;padding-bottom:8px;display:flex}.plate{top:env(safe-area-inset-top,0px);z-index:10;background:var(--paper);border-bottom:1.5px solid var(--ink);position:sticky}.plate-row{padding-top:max(14px, env(safe-area-inset-top));align-items:center;gap:14px;padding-bottom:14px;display:flex}.mark{background:var(--ink);width:48px;height:48px;color:var(--paper);font-family:var(--mono);flex-direction:column;flex:none;justify-content:center;align-items:center;display:flex;position:relative}.mark:after{content:"";background:var(--accent);width:9px;height:9px;position:absolute;top:-1.5px;right:-1.5px}.mark .m1{font-size:22px;font-weight:700;line-height:.9}.mark .m2{color:var(--accent);font-size:12px}.title{flex:1;min-width:0}.title h1{font-family:var(--mono);letter-spacing:.5px;flex-wrap:wrap;align-items:baseline;font-size:17px;font-weight:600;display:flex}.title h1 em{color:var(--accent);margin-left:.6ch;font-style:normal}.title .tag{border:1px solid var(--hair);letter-spacing:2px;text-transform:uppercase;color:var(--mut);margin-left:10px;padding:1px 6px;font-size:9px;font-weight:400}.title .sub{color:var(--ink2);margin:4px 0 0;font-size:12px}.grille{border:1.5px solid var(--ink);background-image:radial-gradient(var(--ink) 1px, transparent 1.5px);opacity:.45;background-position:3px 3px;background-size:7px 7px;flex:none;align-self:stretch;width:74px}.specs{border:1.5px solid var(--ink);font-family:var(--mono);flex:none;margin:0;display:flex}.spec{text-align:center;border-right:1px solid var(--hair);flex-direction:column-reverse;padding:7px 14px;display:flex}.spec:last-child{border-right:0}.spec dd{font-variant-numeric:tabular-nums;margin:0;font-size:17px;font-weight:600;line-height:1}.spec dt{text-transform:uppercase;color:var(--mut);margin-top:5px;font-size:10px}.topbar-actions{align-self:stretch;gap:6px;display:flex}.topbar-actions>button{width:52px;min-height:48px;font-family:var(--mono);letter-spacing:1.5px;text-transform:uppercase;color:var(--ink2);background:0 0;flex-direction:column;flex:none;justify-content:center;align-items:center;gap:2px;padding:0;font-size:8px;display:flex}.topbar-actions>button:hover:not(:disabled){background:var(--ink);color:var(--paper)}.topbar-actions>button svg{width:18px;height:18px}button.status{min-height:0;font-family:var(--mono);text-transform:uppercase;color:var(--ink2);font-variant-numeric:tabular-nums;vertical-align:1px;background:0 0;border:0;align-items:center;gap:5px;margin-left:8px;padding:0;font-size:11px;display:inline-flex}button.status:before{content:"";background:var(--live);border-radius:50%;width:6px;height:6px}button.status:hover:not(:disabled){color:var(--accent);background:0 0}button.status:disabled{opacity:1}button.status.local:before{background:var(--mut)}button.status.loading:before,button.status.saving:before,button.status.pending:before,button.status.offline:before{background:var(--warn)}button.status.error{color:var(--danger)}button.status.error:before{background:var(--danger)}.card{background:var(--card);border:1.5px solid var(--ink);padding:16px}.grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.wide{grid-column:1/-1}label{color:var(--ink2);flex-direction:column;gap:4px;font-size:.85rem;display:flex}input,select{font:inherit;font-family:var(--mono);color:var(--ink);background:var(--card);border:1.5px solid var(--mut);border-radius:0;min-width:0;min-height:40px;padding:8px 10px}input[type=checkbox]{min-height:0;accent-color:var(--accent)}input::placeholder{font-family:var(--sans);color:var(--mut)}input:hover,select:hover{border-color:var(--ink2)}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--ink)}button{font:inherit;cursor:pointer;border:1.5px solid var(--ink);background:var(--card);min-height:40px;color:var(--ink);border-radius:0;padding:6px 14px;transition:background .15s,color .15s,border-color .15s}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:disabled{opacity:.4;cursor:default}button.primary{background:var(--ink);border-color:var(--ink);color:var(--paper);padding:6px 18px;font-weight:600}button.primary:hover:not(:disabled){background:var(--accent);border-color:var(--accent)}button.ghost:hover:not(:disabled){background:var(--paper)}button.with-icon{font-family:var(--mono);align-items:center;gap:6px;font-size:.85rem;display:inline-flex}button.with-icon svg{width:16px;height:16px}button.icon{width:40px;height:40px;padding:0;font-size:1.3rem;line-height:1}button.icon.small{width:36px;height:36px;min-height:36px;color:var(--mut);background:0 0;border-color:#0000;font-size:.9rem}button.icon.small:hover{border-color:var(--ink);color:var(--ink)}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.row.between{justify-content:space-between}.row.between h2{margin:0}.cal-title{border-bottom:1.5px solid var(--ink);align-items:stretch;margin:-16px -16px 0;display:flex}.cal-title>button.icon{border:0;border-right:1.5px solid var(--ink);background:0 0;width:52px;height:auto;min-height:56px}.cal-title>button.icon:last-child{border-right:0;border-left:1.5px solid var(--ink)}.cal-title>button.icon:hover{background:var(--ink);color:var(--paper)}.cycle-label{text-align:center;flex-direction:column;flex:1;justify-content:center;min-width:0;padding:6px 12px;display:flex}.cycle-month{font-size:1.05rem;font-weight:700;line-height:1.3}.cycle-range{font-family:var(--mono);color:var(--mut);font-size:11px}.badge{border:1px solid var(--ink);color:var(--ink);align-items:center;gap:5px;margin-left:8px;padding:0 6px;font-size:10px;display:inline-flex}.badge:before{content:"";background:var(--live);border-radius:50%;width:6px;height:6px}button.link{min-height:0;color:var(--accent);font:inherit;text-underline-offset:2px;background:0 0;border:none;margin-left:8px;padding:0;text-decoration:underline}.entries{border-top:1.5px solid var(--ink);margin:14px -16px -16px;padding:0;list-style:none}.entries li{border-top:1px dashed var(--hair);grid-template-columns:64px minmax(0,1fr) auto auto;align-items:center;gap:10px;padding:10px 16px;display:grid}.entries li:first-child{border-top:none}.entries li.editing{background:var(--paper)}button.entry-date{text-align:left;min-height:0;color:inherit;background:0 0;border:none;padding:0}.entry-date{flex-direction:column;line-height:1.15;display:flex}.entry-date .dow{color:var(--mut);white-space:nowrap;font-size:11px}.entry-date .dd{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:1.35rem;font-weight:700}.entry-main{flex-wrap:wrap;align-items:center;gap:4px 6px;display:flex}.entry-main .small{flex-basis:100%}.entry-amount{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600}.entry-amount .small{font-weight:400}.entry-actions{display:flex}.tag{border:1px solid var(--hair);color:var(--ink);align-items:center;gap:5px;padding:1px 7px;font-size:.75rem;display:inline-flex}.tag:before{content:"";background:var(--tag,var(--ink));width:7px;height:7px}.empty{text-align:center;padding:24px 0 8px}footer{border-top:1.5px solid var(--ink);justify-content:space-between;gap:12px;margin-top:18px;padding:12px 0 24px;display:flex}@container (width<=560px){.entries li{grid-template-columns:58px minmax(0,1fr) auto 36px;gap:8px}.big{font-size:1.7rem}}.alert,.notice{border:1.5px solid var(--danger);color:var(--danger);background:var(--card);padding:10px 14px;font-size:.88rem}.notice{border-color:var(--warn);color:var(--ink)}.ios-help{z-index:20;padding:16px;padding-bottom:max(16px, env(safe-area-inset-bottom));background:#14110d80;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.ios-help .card{width:100%;max-width:420px;box-shadow:6px 6px 0 var(--ink)}.ios-help ol{padding-left:20px;line-height:1.9}.ios-help button{width:100%}.pin-input{letter-spacing:.2em;width:150px}.pin-screen{min-height:100dvh;padding:max(24px, env(safe-area-inset-top)) 16px max(24px, env(safe-area-inset-bottom));justify-content:center;align-items:center;display:flex}.pin-box{text-align:center;flex-direction:column;align-items:center;width:100%;max-width:300px;display:flex}.pin-box .mark{margin-bottom:16px}.pin-box h1{font-family:var(--mono);letter-spacing:.5px;font-size:17px;font-weight:600}.pin-box h1 em{color:var(--accent);font-style:normal}.pin-title{margin:10px 0 4px;font-size:1rem;font-weight:600}.pin-dots{justify-content:center;gap:12px;margin:20px 0 8px;display:flex}.pin-dots i{border:1.5px solid var(--ink);width:14px;height:14px}.pin-dots i.filled{background:var(--accent);border-color:var(--accent)}.pin-dots.shake{animation:.3s shake}@keyframes shake{25%{transform:translate(-6px)}75%{transform:translate(6px)}}.pin-message{min-height:1.5em;color:var(--danger);margin:0 0 12px;font-size:.88rem}.pin-pad{border:1.5px solid var(--ink);background:var(--hair);grid-template-columns:repeat(3,1fr);gap:1px;width:100%;display:grid}.pin-pad>*{background:var(--card)}.pin-pad button{height:64px;font-family:var(--mono);border:0;font-size:1.5rem}.pin-pad button:active{background:var(--ink);color:var(--paper)}.row.nowrap{flex-wrap:nowrap}.row.nowrap input{width:50%}@media (width<=1099px){.grille{display:none}}@media (width<=760px){.plate-row{flex-wrap:wrap;align-items:flex-start}.title{flex:1 1 0}.topbar-actions{order:1;align-self:flex-start}.topbar-actions>button{width:48px;height:48px}.topbar-actions>button span{display:none}.specs{order:2;width:100%}.spec{flex:1}}@media (width<=400px){.rule span:last-child:not(:first-child){display:none}}@media (prefers-reduced-motion:reduce){button,button.preset{transition:none}.pin-dots.shake{animation:none}}.pin-input::placeholder{letter-spacing:normal}.layout,.side,.main{flex-direction:column;gap:14px;display:flex}@media (width>=900px){.layout{grid-template-columns:380px minmax(0,1fr);align-items:start;gap:18px;display:grid}.side{position:sticky;top:96px}}.neg{color:var(--danger)!important}button.danger{color:var(--danger);border-color:var(--danger)}button.small-btn{min-height:32px;padding:2px 10px;font-size:.82rem}.entry-form{flex-direction:column;gap:12px;scroll-margin-top:150px;display:flex}.entry-form h2{margin:0;font-size:1.1rem}.entry-form.is-editing{border-color:var(--accent);box-shadow:4px 4px 0 var(--accent)}.seg{display:inline-flex}.seg button{min-height:34px;padding:4px 12px;font-size:.88rem}.seg button+button{border-left:0}.seg button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.seg button.income[aria-pressed=true]{background:var(--live);border-color:var(--live);color:#fff}.amount-field input{text-align:right;font-variant-numeric:tabular-nums;min-height:56px;font-size:1.8rem;font-weight:600}.income .amount-field input{color:var(--live)}.amount-field input[aria-invalid=true]{border-color:var(--danger)}.field-error{color:var(--danger);margin:-6px 0 0;font-size:.82rem}.cat-picker{flex-wrap:wrap;gap:6px;display:flex}button.cat{border-color:var(--hair);align-items:center;gap:7px;min-height:38px;padding:4px 11px;font-size:.9rem;display:inline-flex}button.cat:before{content:"";background:var(--tag);width:8px;height:8px}button.cat:hover{border-color:var(--ink2)}button.cat[aria-checked=true]{border-color:var(--ink);background:var(--ink);color:var(--paper)}.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.two input{width:100%}.cycle-card{flex-direction:column;gap:12px;display:flex}.totals{border-bottom:1px solid var(--hair);grid-template-columns:1fr 1fr 1.4fr;margin:-12px -16px 0;display:grid}.totals>div{border-right:1px solid var(--hair);min-width:0;padding:12px 16px}.totals>div:last-child{border-right:0}.t-income .mid{color:var(--live)}.t-balance{background:var(--ink);color:var(--paper)}.t-balance .lab{color:var(--accent)}.t-balance.neg .big{color:#f87171}.t-balance .small{color:var(--hair)}.spent-bar{background:var(--hair);height:6px}.spent-bar i{background:var(--ink);height:100%;display:block}.spent-bar i.warn{background:var(--warn)}.spent-bar i.over{background:var(--danger)}@media (width<=560px){.totals{grid-template-columns:1fr 1fr}.t-balance{order:-1;grid-column:1/-1}.totals>div:nth-child(2){border-right:0}}.breakdown ul{margin:0;padding:0;list-style:none}button.bd-row{text-align:left;background:0 0;border:0;grid-template-columns:minmax(0,1fr) auto 3.2em;align-items:baseline;gap:2px 10px;width:100%;min-height:0;padding:7px 4px;display:grid}button.bd-row:hover,button.bd-row[aria-pressed=true]{background:var(--paper)}.bd-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bd-amount{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600}.bd-pct{text-align:right;font-family:var(--mono)}.bd-bar{background:var(--dot);grid-column:1/-1;height:5px}.bd-bar i{background:var(--tag);height:100%;display:block}.card>.row.between h2{font-size:1.1rem}.days{border-top:1.5px solid var(--ink);margin:14px -16px -16px;padding:0;list-style:none}.day-line{color:var(--ink2);font-size:.82rem;font-family:var(--mono);justify-content:space-between;gap:10px;padding:8px 16px 4px;display:flex}.day-line b{color:var(--ink);font-size:1rem}.days>li+li{border-top:1px dashed var(--hair)}.txns{margin:0 0 6px;padding:0;list-style:none}.txns li{align-items:center;padding:0 8px 0 16px;display:flex}.txns li.editing{background:var(--paper)}button.txn{text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:8px;min-width:0;min-height:42px;padding:4px 0;display:flex}button.txn:hover .txn-note,button.txn:hover .tag{color:var(--accent)}.txn .tag{flex:none}.txn-note{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink2);flex:1;font-size:.88rem;overflow:hidden}.txn-amount{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}.txn-amount.income{color:var(--live)}.settings{flex-direction:column;gap:10px;display:flex}.settings h2{margin:0}.cutoff{max-width:320px}.cat-admin ul{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:4px 16px;margin:6px 0 8px;padding:0;list-style:none;display:grid}.cat-admin li{align-items:center;gap:4px;display:flex}.cat-admin li input{min-height:36px;font-family:var(--sans);flex:1;padding:4px 8px}.cat-admin li.is-hidden input{color:var(--mut);text-decoration:line-through}button.swatch{background:var(--tag);border:0;flex:none;width:22px;height:22px;min-height:22px;padding:0}.cat-admin form input{font-family:var(--sans);flex:1}.big{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:1.9rem;font-weight:600;line-height:1.2}.mid{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:600}@media (width<=400px){.big{font-size:1.6rem}}.row.between h2 button.link{font-size:.85rem;font-weight:400}button.small-btn{min-width:52px}.form-footer{justify-content:space-between;align-items:center;gap:8px;display:flex}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.badge-soft{font-family:var(--mono);border:1px solid var(--hair);color:var(--mut);padding:0 5px;font-size:10px}.plan-empty{justify-content:space-between;align-items:center;gap:12px;display:flex}.plan-empty h2{margin:0 0 2px;font-size:1.1rem}.plan-empty p{margin:0}.plan{flex-direction:column;gap:10px;display:flex}.plan h2{font-size:1.1rem}.plan-head{border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);margin:0 -16px;padding:10px 16px}.plan-head .lab{color:var(--accent)}.plan-head.neg .big{color:var(--danger)}.plan-head .small{color:var(--ink2)}.plan-lines{color:var(--ink2);grid-template-columns:1fr auto;gap:2px 12px;margin:0;font-size:.88rem;display:grid}.plan-lines dt{margin:0}.plan-lines dd{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;margin:0}.meter-text{justify-content:space-between;gap:10px;font-size:.9rem;display:flex}.meter-text span:last-child{font-family:var(--mono);white-space:nowrap;font-size:.82rem}.meter-bar{background:var(--dot);outline:1px solid var(--hair);height:6px;margin:3px 0 2px}.meter-bar i{background:var(--tag,var(--ink));height:100%;display:block}.meter-bar.saving i{background:var(--live)}.meter-bar.warn i{background:var(--warn)}.meter-bar.over i{background:var(--danger)}.budgets{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 18px;margin:0;padding:0;list-style:none;display:grid}.upcoming{margin:0;padding:0;list-style:none}.upcoming li{align-items:center;gap:8px;min-height:34px;font-size:.88rem;display:flex}.upcoming .mono{flex:none;width:4.5em}.budget-admin,.rec-admin{margin:0;padding:0;list-style:none}.budget-admin{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px 16px;display:grid}.budget-admin li{justify-content:space-between;align-items:center;gap:8px;display:flex}.budget-admin input{text-align:right;width:120px;min-height:36px;padding:4px 8px}.rec-admin li{border-top:1px dashed var(--hair);align-items:center;gap:8px;padding:4px 0;display:flex}.rec-admin li:first-child{border-top:0}.rec-admin li.is-hidden{opacity:.5}.rec-form{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.settings-anchor{scroll-margin-top:150px}.plan-empty button{white-space:nowrap;flex:none}
