:root{color-scheme:light;--bg: #f7f3ea;--bg-deep: #efe8da;--surface: #fffdf8;--surface-2: #f4eee2;--ink: #2c2a26;--ink-soft: #6f6a60;--ink-faint: #9a9387;--line: #e7dfd0;--green: #2f6b4f;--green-deep: #24523d;--green-soft: #e1ede5;--amber: #d99a3d;--amber-soft: #f8ead2;--red: #c2543c;--red-soft: #f7e3de;--blue: #537a9a;--rose: #b06a6a;--purple: #7a6a9a;--teal: #4d8a85;--shadow: 0 18px 50px rgba(44, 42, 38, .08);--radius: 20px;--radius-sm: 12px;--safe-bottom: env(safe-area-inset-bottom, 0px);font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,system-ui,-apple-system,sans-serif;line-height:1.5;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body{margin:0;min-height:100%}body{background:radial-gradient(1200px 600px at 15% -10%,#fdf9ef 0%,transparent 55%),radial-gradient(900px 500px at 100% 0%,#f0eadb 0%,transparent 50%),var(--bg-deep);color:var(--ink)}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}a{color:inherit;text-decoration:none}h1,h2,h3,p,dl,dd{margin:0}ul{margin:0;padding:0;list-style:none}:focus-visible{outline:3px solid rgba(47,107,79,.35);outline-offset:2px}.app-page{width:100%;max-width:560px;min-height:100vh;margin:0 auto;background:var(--bg);position:relative;padding-bottom:32px;box-shadow:var(--shadow)}.with-bottom-nav{padding-bottom:calc(92px + var(--safe-bottom))}.eyebrow{font-size:10px;letter-spacing:.18em;font-weight:700;color:var(--ink-faint);text-transform:uppercase}.brand{display:flex;align-items:center;gap:12px;min-width:0}.brand-mark{width:44px;height:44px;border-radius:14px;background:var(--green);color:#fff;display:grid;place-items:center;font-size:20px;font-weight:800;flex:0 0 auto;box-shadow:inset 0 -8px 16px #0000001f}.brand-mark.large{width:64px;height:64px;border-radius:20px;font-size:28px}.home-hero{background:linear-gradient(160deg,#fdf8ec,#f7edda 52%,#f2e6d0);padding:22px 20px 24px;border-bottom-left-radius:28px;border-bottom-right-radius:28px;border-bottom:1px solid rgba(231,223,208,.7)}.hero-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.brand h1{font-size:20px;letter-spacing:.02em}.hero-sub{display:flex;align-items:center;gap:8px;margin:14px 0 16px;color:var(--ink-soft);font-size:12px}.dot-sep{width:3px;height:3px;border-radius:50%;background:var(--ink-faint)}.avatar{width:40px;height:40px;border-radius:50%;background:var(--green);color:#fff;display:grid;place-items:center;font-weight:700;font-size:15px;border:2px solid rgba(255,255,255,.7);flex:0 0 auto}.summary-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:10px}.summary-card{background:#fffdf8d6;border:1px solid rgba(231,223,208,.85);border-radius:18px;padding:14px 14px 12px;display:flex;flex-direction:column;gap:4px;min-width:0}.summary-card-main{background:var(--green);color:#fff;border-color:transparent}.summary-card-main .summary-label,.summary-card-main .summary-hint{color:#ffffffb8}.summary-card.is-over{background:var(--red-soft);border-color:#c2543c40}.summary-label{font-size:11px;color:var(--ink-soft);letter-spacing:.04em}.summary-amount{font-size:clamp(18px,5.2vw,24px);font-weight:800;letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary-hint{font-size:10px;color:var(--ink-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.page-body{padding:20px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.section-head h2,.panel-head h2{font-size:15px;letter-spacing:.02em}.ledger-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.ledger-card{display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px;min-height:138px;transition:transform .15s ease,box-shadow .15s ease}.ledger-card:active{transform:scale(.985)}.ledger-card-top{display:flex;align-items:center;gap:8px}.ledger-dot{width:9px;height:9px;border-radius:50%;background:var(--green);flex:0 0 auto}.ledger-dot.color-amber{background:var(--amber)}.ledger-dot.color-blue{background:var(--blue)}.ledger-dot.color-rose{background:var(--rose)}.ledger-dot.color-purple{background:var(--purple)}.ledger-dot.color-teal{background:var(--teal)}.ledger-name{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ledger-arrow{margin-left:auto;color:var(--ink-faint)}.ledger-amount{font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;margin-top:2px}.ledger-remaining{font-size:11px;color:var(--ink-soft);line-height:1.35}.ledger-remaining.is-over{color:var(--red);font-weight:600}.budget-bar{margin-top:auto}.budget-bar-labels{display:flex;justify-content:space-between;font-size:10px;color:var(--ink-faint);margin-bottom:5px;font-variant-numeric:tabular-nums}.budget-track{height:7px;border-radius:999px;background:var(--surface-2);overflow:hidden}.budget-fill{display:block;height:100%;border-radius:inherit;background:var(--green);transition:width .35s ease}.budget-bar.tone-warning .budget-fill{background:var(--amber)}.budget-bar.tone-over .budget-fill{background:var(--red)}.budget-bar.tone-none .budget-fill{background:var(--ink-faint);opacity:.35}.install-card{display:flex;align-items:center;gap:12px;margin-top:18px;padding:13px 14px;border-radius:18px;background:linear-gradient(135deg,#fffaf0,#f6ecda);border:1px solid var(--line)}.install-icon{width:38px;height:38px;border-radius:12px;background:var(--green-soft);color:var(--green);display:grid;place-items:center;flex:0 0 auto}.install-copy{min-width:0;flex:1}.install-copy strong{font-size:13px}.install-copy p{font-size:11px;color:var(--ink-soft);margin-top:2px}.install-actions{display:flex;align-items:center;gap:4px}.home-tip{display:flex;gap:10px;align-items:flex-start;margin-top:22px;padding:12px 14px;border-radius:14px;background:#fffdf88c;color:var(--ink-soft);font-size:11px;border:1px dashed var(--line)}.home-tip svg{flex:0 0 auto;margin-top:1px;color:var(--green)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:12px;padding:11px 16px;font-size:13px;font-weight:700;line-height:1.2;transition:transform .12s ease,background .12s ease}.btn:active{transform:scale(.98)}.btn-primary{background:var(--green);color:#fff}.btn-primary:hover{background:var(--green-deep)}.btn-soft{background:var(--surface-2);color:var(--ink);border:1px solid var(--line)}.btn-ghost{background:transparent;color:var(--ink-soft)}.btn-danger{background:var(--red);color:#fff}.btn-danger-soft{background:var(--red-soft);color:var(--red);border:1px solid rgba(194,84,60,.2)}.btn-block{width:100%}.btn-sm{padding:8px 11px;font-size:12px;border-radius:10px}.icon-button{width:38px;height:38px;border-radius:12px;border:0;background:transparent;color:var(--ink-soft);display:inline-grid;place-items:center;flex:0 0 auto}.icon-button:hover{background:#2c2a260f}.text-button{border:0;background:transparent;color:var(--green);font-size:12px;font-weight:700;padding:6px 2px}.text-button.danger{color:var(--red)}.header-spacer{width:38px}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field.compact{margin-bottom:10px}.field-label{font-size:12px;color:var(--ink-soft);font-weight:600}.field input,.field select,.inline-create input,.select-wrap select{width:100%;border:1px solid var(--line);background:var(--surface);border-radius:12px;padding:11px 12px;font-size:14px;outline:none}.field input:focus,.field select:focus,.inline-create input:focus{border-color:#2f6b4f8c;box-shadow:0 0 0 3px #2f6b4f1a}.checkbox-field{display:flex;gap:9px;align-items:flex-start;font-size:12px;color:var(--ink-soft);margin:4px 0 14px}.checkbox-field input{margin-top:2px;accent-color:var(--green)}.form-error{background:var(--red-soft);color:var(--red);border-radius:10px;padding:9px 11px;font-size:12px;margin:8px 0}.form-hint{color:var(--ink-faint);font-size:11px;margin:6px 0}.muted{color:var(--ink-soft);font-size:12px;line-height:1.6}.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}.month-switcher{display:inline-flex;align-items:center;gap:2px;background:#fffdf8b3;border:1px solid var(--line);border-radius:999px;padding:2px}.month-label{font-size:12px;font-weight:700;min-width:88px;text-align:center;font-variant-numeric:tabular-nums}.month-switcher .icon-button{width:30px;height:30px;border-radius:50%}.ledger-header{background:linear-gradient(165deg,#fdf8ec,#f5ead8);padding:14px 20px 20px;border-bottom-left-radius:26px;border-bottom-right-radius:26px;border-bottom:1px solid var(--line)}.ledger-header-top{display:flex;align-items:center;gap:8px;margin-bottom:10px}.ledger-title{flex:1;min-width:0;text-align:center}.ledger-title h1{font-size:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ledger-title-sub{font-size:11px;color:var(--ink-soft)}.ledger-header .month-switcher{display:flex;margin:0 auto 12px;width:fit-content}.budget-panel{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px}.budget-panel.is-over{background:var(--red-soft);border-color:#c2543c38}.budget-panel-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:10px}.budget-panel-top .summary-label{display:block;margin-bottom:3px}.budget-panel-top strong{font-size:17px;font-variant-numeric:tabular-nums}.ledger-body{padding-top:14px}.filter-row{display:flex;gap:7px;overflow-x:auto;padding-bottom:8px;scrollbar-width:none}.filter-row::-webkit-scrollbar{display:none}.filter-chip{flex:0 0 auto;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);border-radius:999px;padding:7px 12px;font-size:12px;font-weight:600}.filter-chip.is-active{background:var(--green);border-color:var(--green);color:#fff}.date-group{margin-top:16px}.date-group-head{display:flex;justify-content:space-between;gap:12px;font-size:11px;color:var(--ink-soft);padding:0 4px 7px;font-variant-numeric:tabular-nums}.date-group-head em{font-style:normal;color:var(--ink-faint);margin-left:2px}.transaction-list{background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden}.transaction-row{display:flex;align-items:center;gap:4px;width:100%;border-bottom:1px solid var(--line)}.transaction-row:last-child{border-bottom:0}.transaction-row:hover{background:#2f6b4f0a}.transaction-hit{display:flex;align-items:center;gap:10px;flex:1;min-width:0;border:0;background:transparent;padding:12px 4px 12px 12px;text-align:left}.row-delete{margin-right:6px}.transaction-icon{width:36px;height:36px;border-radius:12px;background:var(--surface-2);color:var(--green);display:grid;place-items:center;flex:0 0 auto}.transaction-main{display:flex;flex-direction:column;min-width:0;flex:1}.transaction-title{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.transaction-meta{font-size:10px;color:var(--ink-faint);margin-top:1px}.transaction-amount{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}.row-delete{display:grid;place-items:center;width:30px;height:30px;color:var(--ink-faint);border-radius:8px;flex:0 0 auto}.row-delete:hover{background:var(--red-soft);color:var(--red)}.list-hint{text-align:center;color:var(--ink-faint);font-size:11px;padding:14px}.fab{position:fixed;right:max(18px,calc((100vw - 560px)/2 + 18px));bottom:calc(22px + var(--safe-bottom));width:56px;height:56px;border-radius:50%;border:0;background:var(--green);color:#fff;display:grid;place-items:center;box-shadow:0 12px 30px #2f6b4f52;z-index:20}.fab:active{transform:scale(.96)}.bottom-nav{position:fixed;left:50%;transform:translate(-50%);bottom:0;width:100%;max-width:560px;display:grid;grid-template-columns:repeat(3,1fr);background:#fffdf8f0;backdrop-filter:blur(14px);border-top:1px solid var(--line);padding:6px 8px calc(6px + var(--safe-bottom));z-index:30}.nav-item{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;border-radius:12px;color:var(--ink-faint);font-size:10px;font-weight:600}.nav-item.is-active{color:var(--green);background:var(--green-soft)}.page-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:22px 20px 10px}.page-header>div{min-width:0}.page-header h1{font-size:24px;letter-spacing:-.02em;margin-top:2px}.select-wrap select{border-radius:12px;padding:8px 10px;font-size:12px;background:var(--surface)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:16px;margin-bottom:14px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.panel-total{font-size:11px;color:var(--ink-faint);font-variant-numeric:tabular-nums}.trend-chart{display:flex;align-items:flex-end;gap:6px;height:170px;padding:12px 2px 0}.trend-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;height:100%;min-width:0}.trend-value{font-size:9px;color:var(--ink-faint);height:13px;white-space:nowrap;font-variant-numeric:tabular-nums}.trend-track{flex:1;width:100%;display:flex;align-items:flex-end;justify-content:center}.trend-bar{width:60%;max-width:26px;background:var(--green-soft);border-radius:8px 8px 4px 4px;border:1px solid rgba(47,107,79,.18);transition:height .35s ease}.trend-col.is-current .trend-bar{background:var(--green)}.trend-col.is-current .trend-label{color:var(--green);font-weight:700}.trend-label{font-size:9px;color:var(--ink-faint)}.category-report{display:flex;flex-direction:column;gap:12px}.category-report-row{display:flex;flex-direction:column;gap:5px}.category-report-head{display:flex;justify-content:space-between;gap:10px;font-size:12px}.category-report-head span:last-child{font-variant-numeric:tabular-nums;color:var(--ink-soft)}.category-report-head em{font-style:normal;color:var(--ink-faint);font-size:10px;margin-left:4px}.category-track{height:8px;background:var(--surface-2);border-radius:999px;overflow:hidden}.category-track span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--green),#5e9a79)}.category-report-total{display:flex;justify-content:space-between;border-top:1px dashed var(--line);padding-top:10px;font-size:12px}.category-report-total strong{font-variant-numeric:tabular-nums}.setting-list{display:flex;flex-direction:column}.setting-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line)}.setting-row:last-child{border-bottom:0}.setting-row.is-muted{opacity:.55}.setting-row-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.setting-row-main strong{font-size:13px;display:flex;align-items:center;gap:6px}.setting-row-main span{font-size:11px;color:var(--ink-soft);font-variant-numeric:tabular-nums}.row-actions{display:flex;gap:2px}.category-row-icon{width:34px;height:34px;border-radius:11px;background:var(--surface-2);color:var(--green);display:grid;place-items:center;flex:0 0 auto}.account-entry{display:flex;align-items:center;gap:12px;color:var(--ink)}.account-entry-icon{width:38px;height:38px;border-radius:12px;background:var(--green-soft);color:var(--green);display:grid;place-items:center}.account-entry div{flex:1;display:flex;flex-direction:column;gap:2px}.account-entry strong{font-size:13px}.account-entry span{font-size:11px;color:var(--ink-soft)}.profile-panel{display:flex;align-items:center;gap:14px}.profile-avatar{width:56px;height:56px;border-radius:18px;background:var(--green);color:#fff;display:grid;place-items:center;font-size:22px;font-weight:800;flex:0 0 auto}.profile-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.profile-copy strong{font-size:16px}.profile-copy span{font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-sub{color:var(--ink-faint)!important}.kv-list{display:flex;flex-direction:column;gap:8px}.kv-list div{display:flex;justify-content:space-between;gap:12px;font-size:12px}.kv-list dt{color:var(--ink-soft)}.kv-list dd{color:var(--ink);font-variant-numeric:tabular-nums;text-align:right}.app-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.app-tile{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 6px;border:1px solid var(--line);border-radius:14px;background:var(--surface);font-size:11px;text-align:center}.app-tile-mark{width:32px;height:32px;border-radius:10px;background:var(--green-soft);color:var(--green);display:grid;place-items:center;font-weight:800}.badge{font-style:normal;font-size:9px;background:var(--green-soft);color:var(--green);padding:1px 6px;border-radius:999px}.splash{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;background:var(--bg)}.login-page{min-height:100vh;max-width:560px;margin:0 auto;padding:40px 22px 30px;display:flex;flex-direction:column;justify-content:center;gap:24px;background:linear-gradient(170deg,#fdf8ec,#f4ead8 60%,#efe7d7)}.login-hero{text-align:center}.login-hero .brand-mark{margin:0 auto 16px}.login-hero h1{font-size:28px;letter-spacing:.02em;margin:6px 0 8px}.login-sub{color:var(--ink-soft);font-size:13px;line-height:1.65;max-width:300px;margin:0 auto}.login-card{background:var(--surface);border:1px solid var(--line);border-radius:22px;padding:18px;box-shadow:var(--shadow)}.login-points{display:flex;justify-content:space-between;gap:8px;margin-bottom:16px}.login-points span{display:inline-flex;align-items:center;gap:5px;font-size:10px;color:var(--ink-soft)}.login-points svg{color:var(--green)}.login-note{text-align:center;color:var(--ink-faint);font-size:10px;margin:10px 0}.login-card .btn-ghost{margin-top:4px}.login-foot{text-align:center;color:var(--ink-faint);font-size:10px;margin-top:6px}.global-error{padding:10px 14px;background:var(--red-soft);color:var(--red);font-size:12px}.modal-backdrop{position:fixed;inset:0;z-index:50;background:#1e1c186b;display:flex;align-items:center;justify-content:center;padding:20px;animation:fade-in .16s ease}.modal{width:100%;max-width:420px;background:var(--surface);border-radius:22px;padding:18px;box-shadow:0 30px 80px #00000040;max-height:90vh;overflow-y:auto;animation:pop-in .18s ease}.modal.sheet{max-width:480px;border-radius:24px 24px 18px 18px;align-self:flex-end;margin-bottom:0}.sheet-handle{width:38px;height:4px;border-radius:999px;background:var(--line);margin:0 auto 12px}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}.modal-head h3{font-size:16px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.confirm-modal h3{font-size:16px;margin-bottom:8px}.confirm-modal p{font-size:12px;color:var(--ink-soft);line-height:1.6}.amount-field{display:block;margin-bottom:14px}.amount-field>span{font-size:12px;color:var(--ink-soft);font-weight:600}.amount-input-wrap{display:flex;align-items:center;gap:8px;border-bottom:2px solid var(--ink);padding:6px 2px 4px;margin-top:6px}.amount-prefix{font-size:22px;font-weight:600;color:var(--ink-soft)}.amount-input-wrap input{border:0;outline:none;background:transparent;font-size:32px;font-weight:800;letter-spacing:-.02em;width:100%;font-variant-numeric:tabular-nums}.amount-preview{text-align:right;font-size:11px;color:var(--ink-faint);margin-top:8px}.category-grid{display:flex;flex-wrap:wrap;gap:7px}.category-chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);border-radius:999px;padding:7px 11px;font-size:11px}.category-chip.is-active{background:var(--green);border-color:var(--green);color:#fff}.category-chip.category-add{border-style:dashed;color:var(--green)}.inline-create{display:flex;gap:8px;margin-top:8px}.inline-create input{flex:1}.color-row{display:flex;gap:10px}.color-dot{width:30px;height:30px;border-radius:50%;border:2px solid transparent;background:var(--green)}.color-dot.color-amber{background:var(--amber)}.color-dot.color-blue{background:var(--blue)}.color-dot.color-rose{background:var(--rose)}.color-dot.color-purple{background:var(--purple)}.color-dot.color-teal{background:var(--teal)}.color-dot.is-active{border-color:var(--ink);box-shadow:0 0 0 3px var(--surface),0 0 0 5px var(--ink)}.icon-grid{display:flex;flex-wrap:wrap;gap:7px}.icon-choice{width:38px;height:38px;border-radius:11px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);display:grid;place-items:center}.icon-choice.is-active{background:var(--green-soft);border-color:var(--green);color:var(--green)}.state-view{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:30px 18px;text-align:center;color:var(--ink-soft)}.state-view h3{font-size:14px;color:var(--ink)}.state-view p{font-size:12px;line-height:1.6;max-width:280px}.state-icon{width:44px;height:44px;border-radius:14px;background:var(--surface-2);color:var(--ink-soft);display:grid;place-items:center}.state-view .btn{margin-top:8px}.spinner{width:22px;height:22px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--green);animation:spin .8s linear infinite}.offline-banner{display:flex;align-items:center;justify-content:center;gap:7px;background:#3b3630;color:#f6efe2;font-size:11px;padding:7px 12px}.not-found{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:24px;text-align:center}.not-found p{color:var(--ink-soft);font-size:13px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pop-in{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}@media(max-width:380px){.summary-grid{grid-template-columns:1fr 1fr}.summary-amount{font-size:18px}.ledger-grid{grid-template-columns:1fr}.ledger-card{min-height:120px}.page-body{padding:16px}}@media(min-width:561px){.app-page{min-height:calc(100vh - 32px);margin:16px auto;border-radius:28px;overflow:hidden}.bottom-nav{border-radius:0 0 28px 28px}.fab{bottom:96px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
