:root{--green:#143f37;--green2:#267261;--paper:#f4f5f0;--ink:#19342d;--muted:#84938e;--line:#e4e9e5}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:Arial,"PingFang SC","Microsoft YaHei",sans-serif}.app{min-height:100vh;display:flex}.app>aside{position:fixed;inset:0 auto 0 0;width:224px;background:var(--green);color:#fff;padding:28px 18px;display:flex;flex-direction:column}.brand{display:flex;gap:11px;align-items:center;font:600 20px Georgia,"Songti SC",serif;padding:0 9px 30px}.brand>span{width:34px;height:34px;border:1px solid #76958d;border-radius:50%;display:grid;place-items:center;font-size:14px}.app nav{display:grid;gap:7px}.app aside button{border:0;background:none;color:#b8ccc6;padding:12px 13px;border-radius:8px;text-align:left;cursor:pointer;font-size:12px}.app aside button i{font-style:normal;font-size:17px;margin-right:12px}.app aside button:hover,.app aside button.active{background:#255249;color:#fff}.side-bottom{margin-top:auto;display:grid}.profile{border-top:1px solid #386159;margin-top:13px;padding-top:18px;display:flex;align-items:center;gap:10px}.profile>span{width:34px;height:34px;border-radius:50%;background:#e3caa9;color:#654930;display:grid;place-items:center;font-size:11px}.profile div{display:grid;gap:3px}.profile b{font-size:11px}.profile small{font-size:8px;color:#93afa7}.app>main{margin-left:224px;width:calc(100% - 224px);padding:40px 50px 24px;max-width:1440px}.app header{display:flex;justify-content:space-between;align-items:center;margin-bottom:27px}.app header small{color:#9a866d;text-transform:uppercase;letter-spacing:1.5px;font-size:8px;font-weight:700}.app header h1{font:500 31px Georgia,"Songti SC",serif;margin:7px 0}.app header p{font-size:11px;color:var(--muted);margin:0}.primary{border:0;background:var(--green);color:#fff;border-radius:8px;padding:11px 17px;font-size:11px;cursor:pointer}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:18px}.metrics article,.panel,.hero{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:0 4px 15px #1c352c08}.metrics article{display:grid;gap:8px;padding:20px 23px}.metrics span,.metrics small{font-size:9px;color:var(--muted)}.metrics b{font:500 22px Georgia,serif}.hero{display:grid;grid-template-columns:1.6fr 1fr;min-height:210px;margin-bottom:18px;overflow:hidden}.hero>div:first-child{padding:28px 32px;position:relative}.hero span{font-size:9px;color:var(--muted)}.hero h2{font:500 35px Georgia,serif;margin:8px 0}.chart{position:absolute;left:32px;right:32px;bottom:22px;height:70px;background:linear-gradient(170deg,transparent 49%,#317766 50%,#317766 51%,transparent 52%),linear-gradient(to top,#edf5f1,transparent);border-bottom:1px solid #dbe7e2}.summary{border-left:1px solid var(--line);padding:24px 30px;display:grid}.summary p{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);font-size:10px;color:var(--muted);margin:0}.summary p:last-child{border:0}.summary b{font:500 15px Georgia,serif;color:var(--ink)}.grid{display:grid;grid-template-columns:1.4fr 1fr;gap:18px}.panel{padding:23px 27px}.panel h2{font:500 18px Georgia,"Songti SC",serif;margin:0 0 18px}.panel-title{display:flex;justify-content:space-between;align-items:center}.panel-title button{border:0;background:none;color:#57726a;font-size:9px;cursor:pointer}.panel-title em{font-style:normal;font-size:8px;color:#267260;background:#edf6f2;border-radius:20px;padding:5px 8px}.entry{display:grid;grid-template-columns:33px 1fr 85px 95px;gap:10px;align-items:center;border-top:1px solid #edf0ed;padding:11px 0}.entry>i{width:31px;height:31px;border-radius:8px;display:grid;place-items:center;font-style:normal}.entry>i.income{background:#e8f3ef;color:#24715f}.entry>i.expense{background:#f6eee8;color:#a55d40}.entry>span{display:grid;gap:4px}.entry b{font-size:10px}.entry small,.entry time{font-size:8px;color:var(--muted)}.entry strong{text-align:right;font:500 11px Georgia,serif}.entry strong.income{color:#25735f}.entry strong.expense{color:#94553d}.budget{padding:12px 0;border-top:1px solid #edf0ed}.budget p{display:flex;justify-content:space-between;font-size:9px}.budget small{font-size:8px;color:var(--muted)}.budget>div{height:5px;background:#edf0ed;border-radius:4px;margin-top:8px}.budget>div i{display:block;height:100%;background:var(--green2);border-radius:4px}.reserve{text-align:center}.ring{margin:20px auto;width:145px;height:145px;border-radius:50%;background:conic-gradient(var(--green2) 0 60%,#e8ede9 60%);display:grid;place-content:center;position:relative}.ring:before{content:"";position:absolute;inset:20px;border-radius:50%;background:#fff}.ring b,.ring span{z-index:1}.ring b{font:500 22px Georgia,serif}.ring span{font-size:8px;color:var(--muted)}.reserve>p{font-size:9px;color:var(--muted)}.reserve label{display:grid;grid-template-columns:1fr auto;gap:9px;margin:20px 0;font-size:9px}.reserve input{grid-column:1/3;accent-color:var(--green)}.asset-layout{display:grid;grid-template-columns:240px 1fr 1fr;gap:35px;align-items:center}.donut{width:180px;height:180px;border-radius:50%;background:conic-gradient(#143f37 0 36%,#297d6a 36% 66%,#d69055 66% 86%,#e2c16d 86%);display:grid;place-content:center;position:relative}.donut:before{content:"";position:absolute;inset:33px;background:#fff;border-radius:50%}.donut b,.donut small{z-index:1;text-align:center}.donut b{font:500 14px Georgia,serif}.donut small{font-size:8px;color:var(--muted)}.asset-list{display:grid;gap:18px}.asset-list>div{display:grid;grid-template-columns:8px 1fr auto;gap:10px;align-items:start}.asset-list i{width:7px;height:7px;border-radius:2px}.asset-list span{display:grid;gap:5px}.asset-list b,.asset-list strong{font-size:10px}.asset-list small{font-size:9px;color:var(--muted)}.advice{background:#f1f1e9!important;color:var(--ink)!important;border-radius:10px;padding:20px!important;display:block!important;position:static!important;width:auto!important}.advice b{font-size:10px}.advice p{font-size:9px;line-height:1.6;color:var(--muted)}.members>div{display:grid;grid-template-columns:40px 1fr 120px 30px;gap:12px;align-items:center;border-top:1px solid var(--line);padding:16px 4px}.members i{width:38px;height:38px;border-radius:50%;background:#e8efea;display:grid;place-items:center;font-style:normal}.members span{display:grid;gap:4px}.members b,.members strong{font-size:10px}.members small{font-size:8px;color:var(--muted)}.members button{border:0;background:none}.settings{max-width:680px}.settings>label{display:grid;gap:7px;font-size:10px;font-weight:700;margin:17px 0}.settings input,.settings select{border:1px solid var(--line);background:#fafbf9;padding:11px;border-radius:7px}.settings .check{display:flex;justify-content:space-between;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:17px 0}.settings .check span{display:grid;gap:4px}.settings .check small{font-size:8px;color:var(--muted)}footer{text-align:center;padding:24px 0 0;color:#9ba6a2;font-size:8px}dialog{border:0;border-radius:14px;padding:0;box-shadow:0 25px 70px #102c2550;width:min(400px,calc(100vw - 30px))}dialog::backdrop{background:#102d277c;backdrop-filter:blur(3px)}dialog form{padding:30px;position:relative}dialog h2{font:500 24px Georgia,"Songti SC",serif;margin:7px 0 20px}dialog form>small{font-size:8px;letter-spacing:1.5px;color:#9a866d}.close{position:absolute;right:17px;top:13px;border:0;background:none;font-size:24px}.switch{display:grid;grid-template-columns:1fr 1fr;background:#edf1ed;border-radius:7px;padding:3px}.switch button{border:0;background:none;padding:8px;border-radius:5px}.switch button.active{background:#fff;color:var(--green);box-shadow:0 1px 4px #203a3218}.switch+label,dialog label+label{display:grid;gap:7px;font-size:9px;font-weight:700;margin-top:15px}dialog input{border:1px solid var(--line);border-radius:7px;padding:11px}#saveEntry{width:100%;margin-top:22px}#toast{position:fixed;right:25px;bottom:24px;background:var(--green);color:#fff;border-radius:8px;padding:12px 17px;font-size:10px;opacity:0;transform:translateY(8px);transition:.2s;pointer-events:none}#toast.show{opacity:1;transform:none}@media(max-width:850px){.app>aside{width:68px}.brand b,.app aside button{font-size:0}.app aside button i{font-size:18px}.side-bottom,.brand>span{display:none}.app>main{margin-left:68px;width:calc(100% - 68px);padding:28px 22px}.grid,.hero,.asset-layout{grid-template-columns:1fr}.summary{border-left:0;border-top:1px solid var(--line)}.metrics{grid-template-columns:1fr}.entry{grid-template-columns:32px 1fr 80px}.entry time{display:none}}
.header-actions{display:flex;align-items:center;gap:12px}.language{display:flex;background:#e8ece8;border-radius:7px;padding:3px}.language button{border:0;background:none;padding:7px 9px;border-radius:5px;font-size:9px;color:#71817b;cursor:pointer}.language button.active{background:#fff;color:var(--green);box-shadow:0 1px 5px #203a3218;font-weight:700}
.inline-actions{display:flex;gap:7px;align-items:center}.inline-actions input,.inline-actions select{border:1px solid var(--line);background:#fafbf9;border-radius:7px;padding:8px 10px;font-size:9px}.record-row{grid-template-columns:33px 1fr 85px 95px 24px}.danger,.debt-list button,.goal-card button,.recurring-list button{border:0;background:none;color:#aa6a52;cursor:pointer}.account-grid,.goal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.account-card,.goal-card{border:1px solid var(--line);border-radius:10px;padding:18px;position:relative}.account-card:before{content:"";position:absolute;left:0;top:16px;bottom:16px;width:3px;border-radius:3px;background:var(--account)}.account-card>div:first-child{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:8px}.account-card>div:first-child i{width:7px;height:7px;background:var(--account);border-radius:50%}.account-card h3{font-size:11px;margin:18px 0 7px}.account-card>b{font:500 18px Georgia,serif}.account-card>small{display:block;color:var(--muted);font-size:8px;margin-top:5px}.account-card>button{position:absolute;right:12px;bottom:12px;border:0;background:none;color:#a27361;font-size:8px;cursor:pointer}.section-gap{margin-top:18px}.debt-list>div{display:grid;grid-template-columns:1fr auto 25px;gap:15px;align-items:center;border-top:1px solid var(--line);padding:14px 0}.debt-list span{display:grid;gap:5px}.debt-list b,.debt-list strong{font-size:10px}.debt-list small{font-size:8px;color:var(--muted)}.goal-card>div:first-child{display:grid;grid-template-columns:9px 1fr auto;gap:9px;align-items:start}.goal-card>div:first-child i{width:8px;height:8px;border-radius:2px}.goal-card span{display:grid;gap:5px}.goal-card b{font-size:10px}.goal-card small{font-size:8px;color:var(--muted)}.goal-card em{font-style:normal;font-size:10px;color:var(--green2)}.goal-card h3{font:500 16px Georgia,serif;margin:18px 0 9px}.goal-progress{height:5px;background:#edf0ed;border-radius:5px;overflow:hidden}.goal-progress i{display:block;height:100%;border-radius:5px}.goal-card>div:last-child{display:flex;justify-content:space-between;margin-top:14px}.goal-card>div:last-child button:first-child{color:var(--green2)}.recurring-list>div{display:grid;grid-template-columns:33px 1fr 100px 36px 20px;gap:10px;align-items:center;border-top:1px solid var(--line);padding:13px 0}.recurring-list>div>i{width:31px;height:31px;border-radius:8px;display:grid;place-items:center;font-style:normal}.recurring-list>div>i.income{background:#e8f3ef;color:#24715f}.recurring-list>div>i.expense{background:#f6eee8;color:#a55d40}.recurring-list span{display:grid;gap:5px}.recurring-list b,.recurring-list strong{font-size:10px}.recurring-list small{font-size:8px;color:var(--muted)}.recurring-list strong.income{color:#26735f}.recurring-list strong.expense{color:#995c43}.mini-switch input{position:absolute;opacity:0;width:1px;height:1px}.mini-switch span{display:block;width:30px;height:17px;border-radius:10px;background:#cbd4cf;position:relative;cursor:pointer}.mini-switch span:after{content:"";position:absolute;width:13px;height:13px;background:#fff;border-radius:50%;left:2px;top:2px;transition:.2s}.mini-switch input:checked+span{background:var(--green2)}.mini-switch input:checked+span:after{left:15px}.reports{grid-template-columns:1fr 1fr}.bar-chart{display:grid;gap:16px}.bar-chart>div{display:grid;grid-template-columns:80px 1fr 80px;gap:10px;align-items:center}.bar-chart span,.bar-chart b{font-size:9px}.bar-chart b{text-align:right}.bar-chart>div>div{height:8px;border-radius:5px;background:#edf0ed}.bar-chart i{display:block;height:100%;border-radius:5px;background:var(--green2)}.cashflow-bars{height:180px;display:flex;gap:8px;align-items:end;border-bottom:1px solid var(--line);padding:10px}.cashflow-bars>i{flex:1;background:linear-gradient(#2d7a68,#9bc2b8);border-radius:3px 3px 0 0;position:relative}.cashflow-bars span{position:absolute;bottom:-20px;width:100%;text-align:center;font-style:normal;font-size:7px;color:var(--muted)}.report-note{margin-top:35px;background:#f1f2eb;border-radius:9px;padding:15px}.report-note b{font-size:9px}.report-note p{font-size:8px;line-height:1.6;color:var(--muted)}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.data-action{display:flex;justify-content:space-between;align-items:center;padding:16px 0;border-top:1px solid var(--line)}.data-action>span{display:grid;gap:5px}.data-action b{font-size:9px}.data-action small{font-size:8px;color:var(--muted)}.data-action button,.upload{border:1px solid var(--line);background:#fff;border-radius:7px;padding:8px 10px;font-size:8px;cursor:pointer}.upload input{display:none}.privacy-note{background:#edf5f1;border-radius:9px;padding:14px;margin-top:18px}.privacy-note b{font-size:9px}.privacy-note p{font-size:8px;line-height:1.6;color:var(--muted)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-grid label{display:grid!important;gap:7px!important;font-size:9px!important;font-weight:700!important;margin:0!important}.form-grid input,.form-grid select{border:1px solid var(--line);border-radius:7px;padding:10px;background:#fff}.form-grid+.primary{width:100%;margin-top:20px}.app>aside{overflow-y:auto}.app nav{padding-bottom:10px}
@media(max-width:1000px){.account-grid,.goal-grid{grid-template-columns:1fr 1fr}.settings-grid{grid-template-columns:1fr}}@media(max-width:650px){.account-grid,.goal-grid{grid-template-columns:1fr}.inline-actions input{width:100px}.record-row{grid-template-columns:32px 1fr 75px 20px}.reports{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}}
.login-screen{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 70% 20%,#dceae5,transparent 35%),linear-gradient(145deg,#eef2ed,#dfe8e3);padding:20px}.login-card{width:min(400px,100%);background:#fff;border:1px solid #dfe7e2;border-radius:16px;padding:34px;box-shadow:0 22px 70px #18372d1d}.login-brand{display:flex;align-items:center;gap:11px}.login-brand>span{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--green);color:#fff}.login-brand>div{display:grid;gap:3px}.login-brand b{font:600 18px Georgia,"Songti SC",serif}.login-brand small{font-size:8px;color:var(--muted)}.login-card h1{font:500 28px Georgia,"Songti SC",serif;margin:28px 0 8px}.login-card>p{font-size:10px;color:var(--muted);margin:0 0 22px}.login-card>label{display:grid;gap:7px;font-size:9px;font-weight:700;margin:15px 0}.login-card input{border:1px solid var(--line);border-radius:8px;padding:12px;font-size:11px;outline:none}.login-card input:focus{border-color:var(--green2);box-shadow:0 0 0 3px #28756316}.login-card>.primary{width:100%;margin-top:8px;padding:13px}.login-card>small{display:block;text-align:center;color:var(--muted);font-size:8px;margin-top:18px}#loginError{min-height:16px;color:#a4533a;font-size:9px;text-align:center;margin-top:10px}.profile>#logoutBtn{margin-left:auto!important;width:30px!important;padding:7px!important;text-align:center!important;font-size:14px!important}.role-readonly [data-add],.role-readonly #addBtn,.role-readonly .danger,.role-readonly [data-delete-account],.role-readonly [data-delete-goal],.role-readonly [data-delete-liability],.role-readonly [data-delete-recurring],.role-readonly [data-contribute],.role-readonly #settingsSave,.role-readonly #restoreInput{display:none!important}
.role-readonly [data-toggle-recurring]{display:none!important}
.role-editor [data-add="member"],.role-editor [data-delete-member],.role-editor #settingsSave,.role-editor .upload{display:none!important}
.totp-box{border:1px solid var(--line);border-radius:10px;padding:16px;background:#fafbf9}.totp-box label{display:grid;gap:7px;font-size:10px;font-weight:700;margin:14px 0}.security-status{display:flex;justify-content:space-between;gap:16px;align-items:center}.security-status span{display:grid;gap:5px}.security-status small{color:var(--muted);font-size:8px}.security-status em{font-style:normal;font-size:8px;border-radius:20px;padding:5px 9px;background:#f6eee8;color:#94553d}.security-status.enabled em{background:#e8f3ef;color:#24715f}.totp-steps{border-top:1px solid var(--line);margin-top:16px;padding-top:16px}.totp-steps ol{padding-left:18px;color:var(--muted);font-size:9px;line-height:1.8}.totp-steps code{display:block;padding:12px;background:#eef2ef;border-radius:7px;overflow-wrap:anywhere;letter-spacing:2px;font-weight:700;margin:10px 0}.totp-steps>button:not(.primary){border:0;background:none;color:var(--green2);cursor:pointer;padding:0}.danger-button{border:1px solid #d9b7aa;background:#fff;color:#94553d;border-radius:8px;padding:10px 14px;cursor:pointer}.login-card #totpField{display:grid;gap:8px}.login-card #totpField[hidden]{display:none}.totp-help{margin:0!important;text-align:left!important;color:var(--muted)}
