
:root{color-scheme:light;--bg:#f5f6f0;--panel:#fff;--text:#182d26;--muted:#536860;--line:#e2e9e2;--soft:#edf3ec;--accent:#235942;--on-accent:#fff;--hero:#193e31;--hero-line:#416454;--hero-text:#fbfff8;--hero-muted:#c3d8cb;--up:#9be2b7;--negative-balance:#ffabab;--out:#974c40;--shadow:0 12px 32px #1a3b2610;--ring-track:#e2ebe1}
[data-theme=dark]{color-scheme:dark;--bg:#111a16;--panel:#1b2721;--text:#f1f8f1;--muted:#b0c3b7;--line:#33483e;--soft:#263830;--accent:#9edcb8;--on-accent:#142d20;--hero:#224436;--hero-line:#4a6e5b;--hero-text:#fbfff8;--hero-muted:#c3d8cb;--up:#b0edc7;--negative-balance:#ffabab;--out:#ffac9c;--shadow:0 12px 32px #0002;--ring-track:#344a3e}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:15px/1.45 "DM Sans","Segoe UI",system-ui,sans-serif}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
button[hidden],section[hidden],header[hidden],p[hidden]{display:none}
button svg,.icon{width:19px;height:19px;flex:none}
svg{vertical-align:middle}
[hidden]{display:none!important}
.top{border-bottom:1px solid var(--line);background:var(--bg)}
.top-inner,.wrap{width:min(100% - 48px,1064px);margin-inline:auto}
.top-inner{height:76px;display:flex;align-items:center;justify-content:space-between;gap:16px}
.brand,.top-actions,.month,.section-head,.heading,.form-actions{display:flex;align-items:center;gap:12px}
.brand-mark{display:block;flex:none;width:44px;height:44px;overflow:hidden;border-radius:12px;background:#fff;border:1px solid var(--line)}
.brand-mark img{display:block;width:100%;height:100%;object-fit:contain;transform:scale(1.17)}
.brand strong{display:block;font-size:16px;letter-spacing:-.025em}
.brand small{display:block;color:var(--muted);font-size:12px}
.primary,.secondary,.icon-btn,.nav-btn,.period-label,.tab,.category-button,.date-btn,.movement,.year-btn{border:0;background:none;border-radius:12px}
.primary,.secondary,.icon-btn,.nav-btn,.period-label,.year-btn{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:0 14px;font-weight:650}
.primary{background:var(--accent);color:var(--on-accent)}
.secondary,.icon-btn,.period-label,.year-btn{border:1px solid var(--line);background:var(--panel)}
.icon-btn{width:44px;padding:0}
.primary:hover,.secondary:hover,.icon-btn:hover,.period-label:hover,.year-btn:hover,.nav-btn:hover,.tab:hover,.date-btn:hover,.category-button:hover,.movement:hover{filter:brightness(.94)}
.wrap{padding-block:38px 44px}
.heading{justify-content:space-between;margin-bottom:21px;flex-wrap:wrap}
h1,h2,p{margin:0}
h1{font-size:clamp(28px,4vw,38px);letter-spacing:-.05em;line-height:1.1}
h2{font-size:19px;letter-spacing:-.035em;line-height:1.25}
.nav{display:flex;gap:5px;margin-bottom:21px;width:max-content;padding:4px;border-radius:15px;background:var(--soft)}
.nav-btn{color:var(--muted)}
.nav-btn[aria-current=page]{color:var(--text);background:var(--panel);box-shadow:0 2px 6px #0001}
.dashboard{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:18px;align-items:start}
.stack{display:grid;gap:18px;min-width:0}
.hero,.panel{border-radius:21px;padding:22px;min-width:0}
.hero{background:var(--hero);color:var(--hero-text);box-shadow:var(--shadow)}
.hero-label,.hero-stat span,.accum span{color:var(--hero-muted);display:block;font-size:13px}
.balance{display:block;font-size:clamp(33px,7vw,49px);font-weight:720;letter-spacing:-.065em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;margin:1px 0 15px}
.balance.is-negative{color:var(--negative-balance)}
.hero-stats{display:grid;grid-template-columns:1fr 1fr;border-block:1px solid var(--hero-line);padding:13px 0;gap:12px}
.hero-stat + .hero-stat{border-left:1px solid var(--hero-line);padding-left:14px}
.hero-stat strong,.accum strong{font-size:16px;font-weight:700;overflow-wrap:anywhere}
.hero-stat .income{color:var(--up)}
.accum{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-top:13px}
.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow)}
.section-head{justify-content:space-between;flex-wrap:wrap;margin-bottom:14px}
.segment{display:flex;background:var(--soft);padding:3px;border-radius:12px;gap:3px}
.tab{min-height:36px;padding:0 12px;color:var(--muted);font-size:13px;font-weight:700}
.tab[aria-pressed=true]{background:var(--panel);color:var(--text);box-shadow:0 1px 4px #0002}
.ring{margin:12px auto 18px;display:grid;place-items:center;position:relative;width:170px;aspect-ratio:1;border-radius:50%;background:var(--ring-track)}
.ring::before{content:"";position:absolute;inset:18px;border-radius:50%;background:var(--panel)}
.ring-label{position:relative;text-align:center;width:78%;padding:5px}
.ring-label span{display:block;color:var(--muted);font-size:12px}
.ring-label strong{font-size:22px;letter-spacing:-.05em;overflow-wrap:anywhere}
.legend-row,.movement,.month-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:11px;align-items:center;min-height:48px;border-top:1px solid var(--line)}
.legend-row{grid-template-columns:auto minmax(0,1fr) auto auto}
.legend-row .percent,.sub,.hint,.empty{color:var(--muted);font-size:13px}
.legend-row .amount{min-width:78px;text-align:right}
.legend-row strong,.movement strong{overflow-wrap:anywhere}
.badge{width:33px;height:33px;display:grid;place-items:center;border-radius:11px;background:var(--soft);color:var(--text);border-left:3px solid var(--category,var(--accent))}
.badge svg{width:16px;height:16px}
.amount{font-variant-numeric:tabular-nums;font-weight:700}
.amount.expense{color:var(--out)}
.amount.income{color:var(--accent)}
.movement{width:100%;text-align:left;border-radius:0;padding:7px 0;color:var(--text)}
.movement span span{display:block}
.link-btn{border:0;background:transparent;color:var(--accent);font-weight:700;padding:10px 0;min-height:44px;cursor:pointer}
.empty{padding:16px 0}
.history-panel{margin-bottom:18px}
.month-row{width:100%;color:inherit;background:transparent;border-inline:0;border-bottom:0;text-align:left;padding:8px 0;cursor:pointer}
.history-bar{height:5px;margin-top:6px;border-radius:4px;background:var(--soft);overflow:hidden}
.history-bar span{display:block;height:100%;background:var(--accent);border-radius:4px}
dialog{width:min(460px,calc(100% - 28px));max-height:calc(100% - 24px);overflow:auto;border:1px solid var(--line);border-radius:22px;padding:21px;background:var(--panel);color:var(--text);box-shadow:0 20px 70px #0004}
dialog::backdrop{background:#14271f88}
.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}
form label,fieldset legend{display:block;font-size:13px;font-weight:700;margin-bottom:6px}
fieldset{border:0;padding:0;margin:0 0 13px;min-width:0}
.form-type{margin-bottom:12px}
input,select{width:100%;min-height:44px;padding:8px 10px;border:1px solid var(--line);border-radius:11px;background:var(--panel);font-size:16px}
.money{position:relative;margin-bottom:12px}
.money input{font-size:26px;font-weight:700;padding-right:44px}
.money span{position:absolute;right:15px;top:9px;font-size:24px;color:var(--muted)}
.category-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.category-button,.date-btn{min-height:44px;background:var(--soft);padding:5px 2px;font-size:clamp(10px,3vw,13px);font-weight:650}
.category-button{display:flex;align-items:center;justify-content:center;gap:3px;flex-wrap:wrap}
.category-button{box-shadow:inset 0 -3px var(--category)}
.category-button svg{width:15px;height:15px}
.category-button[aria-pressed=true],.date-btn[aria-pressed=true]{background:var(--accent);color:var(--on-accent)}
.date-row{display:grid;grid-template-columns:1fr 1fr 1.55fr;gap:6px}
.date-row input{padding:4px 6px;min-width:0}
.form-actions{margin-top:14px;justify-content:flex-end}
.form-actions .primary{flex:1}
.danger{color:var(--out)}
.error{color:var(--out);font-size:13px;margin-top:8px}
.period-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.settings-list{display:grid;gap:9px}
.settings-list .secondary{justify-content:flex-start}
#toast{position:fixed;z-index:2;bottom:24px;left:50%;transform:translateX(-50%);max-width:calc(100% - 24px);padding:9px 16px;border-radius:12px;color:var(--on-accent);background:var(--accent);box-shadow:var(--shadow)}
.mobile-new{display:none}
@media(max-width:690px){
 .top-inner,.wrap{width:calc(100% - 28px)}
 .top-inner{height:62px}
 .top-actions .primary{display:none}
 .wrap{padding-top:18px;padding-bottom:calc(90px + env(safe-area-inset-bottom))}
 .heading{margin-bottom:12px;gap:10px}
 .heading h1{font-size:26px}
 .month{gap:4px}
 .month .icon-btn{width:40px}
 .period-label,.year-btn{padding-inline:9px;font-size:13px}
 .dashboard{grid-template-columns:1fr;gap:12px}
 .stack{display:contents}
 .hero{order:0}
 .breakdown{order:1}
 .recent{order:2}
 .hero,.panel{padding:16px;border-radius:18px}
 .balance{margin-bottom:9px}
 .hero-stats{padding-block:9px}
 .accum{margin-top:9px}
 .nav{position:fixed;z-index:1;inset:auto 0 0;width:100%;margin:0;padding:6px 10px calc(6px + env(safe-area-inset-bottom));border-top:1px solid var(--line);border-radius:0;justify-content:space-around;background:var(--panel);gap:2px}
 .nav-btn{padding:4px 7px;font-size:11px;flex:1;flex-direction:column;gap:2px}
 .nav-btn[aria-current=page]{background:var(--soft);box-shadow:none}
 .mobile-new{display:inline-flex;flex:1;padding-inline:8px}
 #toast{bottom:calc(70px + env(safe-area-inset-bottom))}
 dialog{padding:15px}
}
@media(prefers-reduced-motion:no-preference){button{transition:filter .14s ease}}

.access-panel{max-width:430px;margin:0 auto}.access-panel h1{margin-bottom:14px}.access-panel input{margin-bottom:12px}.access-panel .hint{margin-bottom:12px}.access-panel .form-actions{margin-top:0}#syncMessage{margin-bottom:12px}
