:root{--bg:#f4f3ef;--surface:#fff;--ink:#1f2924;--muted:#778079;--line:#e7e8e3;--green:#173e31;--green2:#2d6b54;--mint:#dcece4;--coral:#d66d56;--gold:#c59b4b;--blue:#5478a5;--shadow:0 18px 50px rgba(35,48,41,.08);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input,select,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!important}.eyebrow{font-size:11px;letter-spacing:.17em;text-transform:uppercase;color:#899189;margin:0 0 8px}.login-shell{min-height:100vh;display:grid;grid-template-columns:1.15fr .85fr;background:#f7f6f2}.login-art{margin:20px;border-radius:30px;padding:54px;display:flex;flex-direction:column;justify-content:space-between;color:white;background:radial-gradient(circle at 75% 18%,rgba(231,203,139,.25),transparent 24%),linear-gradient(145deg,#254d3e,#122f25);position:relative;overflow:hidden}.login-art:after{content:"";position:absolute;width:450px;height:450px;border:1px solid rgba(255,255,255,.08);border-radius:50%;right:-110px;bottom:-160px;box-shadow:0 0 0 70px rgba(255,255,255,.025),0 0 0 140px rgba(255,255,255,.018)}.brand-mark{width:58px;height:58px;border-radius:18px;background:#f0d293;color:#254034;display:grid;place-items:center;font:700 30px serif;box-shadow:0 15px 30px rgba(0,0,0,.16)}.login-art h1{font-size:clamp(40px,5vw,70px);line-height:1.1;max-width:650px;margin:10px 0 14px;font-weight:650;letter-spacing:-.05em}.login-art .eyebrow,.login-art .login-sub{color:rgba(255,255,255,.68)}.login-sub{font-size:17px}.art-card{width:260px;padding:18px 22px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.08);backdrop-filter:blur(10px);border-radius:18px;display:flex;flex-direction:column;gap:5px;z-index:1}.art-card span{font-size:12px;color:rgba(255,255,255,.65)}.login-card{width:min(390px,calc(100vw - 40px));margin:auto}.login-card h2{font-size:34px;margin:4px 0 36px}.login-card label,.form-grid label{display:flex;flex-direction:column;gap:9px;font-size:13px;font-weight:600;margin-bottom:18px}.login-card input,.form-grid input,.form-grid select,.form-grid textarea{width:100%;border:1px solid #dfe2dc;border-radius:13px;background:#fff;padding:13px 14px;color:var(--ink);outline:none;transition:.2s}.login-card input{padding:15px}.login-card input:focus,.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus{border-color:#47725f;box-shadow:0 0 0 4px rgba(47,104,80,.1)}.primary,.secondary,.ghost,.danger,.danger-outline,.button-link{border:0;border-radius:11px;padding:11px 16px;font-weight:650;text-decoration:none;display:inline-flex;justify-content:center;align-items:center;gap:6px}.primary{background:var(--green);color:#fff;box-shadow:0 8px 18px rgba(23,62,49,.15)}.primary:hover{background:#20513f}.secondary{background:#fff;color:var(--green);border:1px solid #ced8d2}.ghost{background:#f1f2ee;color:#535e57}.danger{background:#b64c3c;color:#fff}.danger-outline{background:#fff;color:#b64c3c;border:1px solid #e4bdb7}.wide{width:100%;padding:15px}.form-error{color:#bc4d3f;font-size:13px;min-height:20px}.login-hint{text-align:center;color:#929991;font-size:12px;margin-top:26px}.mobile-logo{display:none}.app-shell{min-height:100vh}.sidebar{position:fixed;left:0;top:0;bottom:0;width:238px;background:#173b2f;color:white;padding:28px 18px 20px;display:flex;flex-direction:column;z-index:20}.logo{display:flex;align-items:center;gap:12px;padding:0 9px 32px}.logo>span{width:39px;height:39px;border-radius:12px;background:#ecd291;color:#18392f;display:grid;place-items:center;font:700 22px serif}.logo div{display:flex;flex-direction:column}.logo strong{font-size:18px}.logo small{font-size:10px;color:rgba(255,255,255,.55);letter-spacing:.12em}.sidebar nav{display:flex;flex-direction:column;gap:5px}.sidebar nav p{font-size:10px;letter-spacing:.15em;color:rgba(255,255,255,.38);padding:20px 13px 7px;margin:0}.sidebar nav button{border:0;background:transparent;color:rgba(255,255,255,.68);text-align:left;border-radius:11px;padding:12px 13px;display:flex;gap:11px;align-items:center}.sidebar nav button i{font-style:normal;width:20px;text-align:center;font-size:17px}.sidebar nav button:hover,.sidebar nav button.active{background:rgba(255,255,255,.11);color:white}.side-user{margin-top:auto;border-top:1px solid rgba(255,255,255,.1);padding:18px 5px 0;display:grid;grid-template-columns:37px 1fr 28px;align-items:center;gap:10px}.avatar{width:37px;height:37px;border-radius:50%;background:#e8cf94;color:#1d3a31;display:grid;place-items:center;font-weight:700}.side-user div:nth-child(2){display:flex;flex-direction:column;min-width:0}.side-user strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.side-user small{color:rgba(255,255,255,.5);font-size:11px;margin-top:2px}.side-user button{border:0;background:none;color:rgba(255,255,255,.6);font-size:18px}.main{margin-left:238px;min-height:100vh;padding:0 34px 50px}.topbar{height:106px;display:flex;align-items:center;gap:18px}.topbar h1{font-size:27px;margin:0;letter-spacing:-.03em}.topbar .eyebrow{margin-bottom:3px}.top-actions{margin-left:auto;display:flex;gap:10px;align-items:center}.month-picker{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:8px;background:white;border:1px solid var(--line);padding:8px 11px;border-radius:11px}.month-picker input{border:0;color:var(--ink);outline:none}.icon-btn{border:0;background:transparent;font-size:24px;color:var(--muted)}#menuBtn{display:none}.page{display:none}.page.active{display:block}.hero-row{display:grid;grid-template-columns:1fr 1.35fr;gap:18px}.balance-card{border-radius:22px;padding:30px;color:white;background:radial-gradient(circle at 90% 15%,rgba(224,197,132,.26),transparent 30%),linear-gradient(145deg,#214a3a,#15382c);box-shadow:var(--shadow);min-height:226px;display:flex;flex-direction:column;justify-content:center}.balance-card p{color:rgba(255,255,255,.65);font-size:13px;margin:0}.balance-card h2{font-size:40px;margin:10px 0 28px;letter-spacing:-.04em}.balance-card>div{border-top:1px solid rgba(255,255,255,.12);padding-top:18px;display:flex;gap:35px}.balance-card span{display:flex;flex-direction:column;font-size:11px;color:rgba(255,255,255,.55);gap:4px}.balance-card b{color:white;font-size:14px}.metric-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.metric-grid article{background:white;border:1px solid var(--line);border-radius:17px;padding:20px;display:flex;align-items:center;gap:14px;box-shadow:0 8px 25px rgba(25,42,33,.035)}.metric-icon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;font-weight:700}.metric-icon.green{background:#e2efe8;color:#367159}.metric-icon.coral{background:#fae9e5;color:#c26450}.metric-icon.gold{background:#f7edd6;color:#a67829}.metric-icon.blue{background:#e6edf6;color:#5478a5}.metric-grid p{font-size:12px;color:var(--muted);margin:0 0 4px}.metric-grid h3{font-size:20px;margin:0 0 3px}.metric-grid small{font-size:10px;color:#a3a9a4}.panel{background:white;border:1px solid var(--line);border-radius:18px;box-shadow:0 8px 30px rgba(29,43,35,.035)}.chart-wide{margin-top:18px;padding:24px}.panel-head{display:flex;justify-content:space-between;align-items:start;margin-bottom:18px}.panel-head h3{margin:0 0 5px;font-size:16px}.panel-head p{margin:0;font-size:11px;color:var(--muted)}.legend{display:flex;gap:15px;font-size:11px;color:var(--muted)}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}.dot.income{background:#386b56}.dot.expense{background:#dc8069}.chart-box{height:245px;position:relative}.chart-box canvas{width:100%;height:100%}.empty-chart{position:absolute;inset:0;display:grid;place-items:center;color:#a0a6a1;font-size:13px;background:rgba(255,255,255,.82)}.pie-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}.pie-grid .panel{padding:22px}.donut-wrap{display:grid;grid-template-columns:190px 1fr;align-items:center;min-height:190px}.donut-wrap canvas{width:180px;height:180px}.pie-legend{display:flex;flex-direction:column;gap:10px;font-size:11px;max-height:180px;overflow:auto}.pie-legend div{display:grid;grid-template-columns:10px 1fr auto;gap:7px;align-items:center}.pie-legend i{width:8px;height:8px;border-radius:3px}.pie-legend span{color:var(--muted)}.list-toolbar,.section-intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.search{width:min(430px,60vw);position:relative}.search span{position:absolute;left:14px;top:9px;color:#8d958e;font-size:21px}.search input{width:100%;border:1px solid var(--line);background:white;border-radius:12px;padding:12px 14px 12px 42px;outline:none}.table-panel{overflow:hidden}.table-scroll{overflow:auto}table{width:100%;border-collapse:collapse;white-space:nowrap}th{text-align:left;padding:15px 16px;font-size:11px;color:#8a918c;font-weight:650;background:#fafaf8;border-bottom:1px solid var(--line)}td{padding:15px 16px;font-size:12px;border-bottom:1px solid #eff0ed;color:#4d5751}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#fbfcfa}.money{text-align:right}.amount-income{color:#2d7456;font-weight:700}.amount-expense{color:#ca624f;font-weight:700}.badge{display:inline-flex;padding:4px 8px;border-radius:7px;font-size:10px;font-weight:650;background:#edf1ed;color:#58645d}.badge.public{background:#e4efe9;color:#356a53}.badge.private{background:#f6ebd6;color:#9b6e27}.badge.active{background:#e4efe9;color:#356a53}.badge.off{background:#eee;color:#888}.row-actions{display:flex;gap:4px}.row-actions button{border:0;background:transparent;color:#718078;padding:5px 7px;border-radius:6px}.row-actions button:hover{background:#edf1ed;color:#234d3c}.row-actions .delete:hover{background:#f9e8e4;color:#b94f40}.empty-state{display:none;flex-direction:column;align-items:center;padding:65px;color:#919891;gap:6px}.empty-state b{color:#66716a}.section-intro h2{margin:0 0 5px;font-size:22px}.section-intro p{margin:0;color:var(--muted);font-size:12px}.option-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.option-card{padding:22px}.option-card h3{margin:0}.option-card>p{font-size:11px;color:var(--muted);margin:5px 0 18px}.option-add{display:flex;gap:8px}.option-add input{flex:1;min-width:0;border:1px solid var(--line);border-radius:10px;padding:10px;outline:none}.option-add button{padding:9px 13px}.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.tag{display:flex;align-items:center;gap:5px;background:#f3f4f1;border:1px solid #e8eae5;border-radius:9px;padding:7px 9px;font-size:12px}.tag button{border:0;background:none;color:#99a09b;padding:0 2px}.tag button:hover{color:#bb5546}.backup-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}.action-card{text-align:center;padding:35px}.big-icon{display:grid;place-items:center;width:54px;height:54px;border-radius:16px;background:#e5efe9;color:#2d6650;font-size:26px;margin:0 auto 16px}.action-card h3{margin:0 0 8px}.action-card p{font-size:12px;color:var(--muted);line-height:1.7;max-width:390px;margin:0 auto 20px}.modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px}.modal-backdrop{position:absolute;inset:0;background:rgba(17,31,25,.52);backdrop-filter:blur(5px)}.modal-card{position:relative;width:min(680px,100%);max-height:92vh;overflow:auto;background:#fafaf8;border-radius:22px;box-shadow:0 25px 80px rgba(0,0,0,.22)}.modal-head{display:flex;justify-content:space-between;align-items:start;padding:24px 26px 15px}.modal-head h2{margin:0;font-size:23px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 15px;padding:8px 26px}.form-grid label.full{grid-column:1/-1}.form-grid textarea{resize:vertical;min-height:78px}.form-grid .inline-choice{display:flex;gap:8px}.form-grid .inline-choice>*{flex:1}.modal-actions{padding:18px 26px 24px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px;background:#fff;border-radius:0 0 22px 22px}.confirm-card{position:relative;width:min(390px,100%);background:#fff;border-radius:20px;padding:28px;text-align:center;box-shadow:var(--shadow)}.confirm-card .warn{width:45px;height:45px;border-radius:50%;background:#f9e8e3;color:#bd5542;display:grid;place-items:center;font-weight:800;margin:0 auto}.confirm-card h3{margin:14px 0 6px}.confirm-card p{font-size:13px;color:var(--muted);line-height:1.6}.confirm-card>div:last-child{display:flex;justify-content:center;gap:8px;margin-top:20px}.toast{position:fixed;right:24px;bottom:24px;z-index:200;background:#173b2f;color:white;padding:13px 18px;border-radius:11px;font-size:13px;box-shadow:var(--shadow);transform:translateY(80px);opacity:0;transition:.25s}.toast.show{transform:none;opacity:1}.toast.error{background:#a9473a}
.lan-panel{margin-top:18px;padding:20px 22px;display:grid;grid-template-columns:1fr auto auto;gap:18px;align-items:center}.lan-panel>div:first-child{display:flex;align-items:center;gap:13px}.lan-panel h3{margin:0 0 4px;font-size:15px}.lan-panel p{margin:0;color:var(--muted);font-size:11px}.lan-urls{display:flex;flex-direction:column;gap:3px;font:600 12px Consolas,monospace;color:#2d6650}
.combo-box{display:block;position:relative}.combo-box input{padding-right:46px}.combo-toggle{position:absolute;top:1px;right:1px;width:42px;height:calc(100% - 2px);border:0;border-radius:0 12px 12px 0;background:transparent;color:#536159;font-size:23px;line-height:1}.combo-toggle:hover,.combo-box.open .combo-toggle{background:#f1f5f1;color:var(--green)}.combo-menu{display:none;position:absolute;left:0;right:0;top:calc(100% + 5px);z-index:140;max-height:210px;overflow:auto;padding:6px;background:#fff;border:1px solid #cbd7cf;border-radius:12px;box-shadow:0 13px 30px rgba(25,42,33,.16)}.combo-box.open .combo-menu{display:block}.combo-option{display:block;width:100%;border:0;border-radius:8px;background:transparent;padding:10px 11px;text-align:left;color:var(--ink);font-size:13px}.combo-option:hover,.combo-option:focus{background:#e7f0ea;color:var(--green);outline:0}.combo-empty{display:block;padding:10px 11px;color:var(--muted);font-size:12px}
.modal-card:has(.income-voucher-form){width:min(930px,100%)}.form-grid.income-voucher-form{display:block;padding-top:4px}.income-voucher-form label{margin-bottom:0}.voucher-header{display:grid;grid-template-columns:1fr 1.25fr 1fr 1fr;gap:14px;padding-bottom:20px;border-bottom:1px solid var(--line)}.voucher-total-input input,.income-item [data-income-field="amount"]{background:#eef5f0!important;color:#1e6148!important;font-weight:750;cursor:default}.voucher-total-input input{font-size:18px}.voucher-items{padding:20px 0 4px}.voucher-items-head{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:13px}.voucher-items-head h3{font-size:16px;margin:0 0 4px}.voucher-items-head p,.legacy-hint{font-size:11px;color:var(--muted);margin:0}.add-income-item{white-space:nowrap;padding:9px 13px}.income-item{border:1px solid #dde5df;background:#fff;border-radius:15px;padding:14px 15px 5px;margin-bottom:12px;box-shadow:0 5px 15px rgba(28,47,37,.025)}.income-item-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;color:#375244;font-size:12px}.remove-income-item{border:0;background:#fbefec;color:#b96250;border-radius:7px;padding:5px 8px;font-size:11px}.remove-income-item:hover{background:#f8e2dc}.income-item-grid{display:grid;grid-template-columns:1.35fr .75fr .8fr .75fr 1fr;gap:12px}.voucher-total{display:flex;justify-content:flex-end;align-items:baseline;gap:12px;padding:2px 5px 19px;color:#657069;font-size:13px}.voucher-total strong{font-size:24px;color:#1e6148;letter-spacing:-.02em}.legacy-hint{background:#f5f0e6;color:#866c43;border-radius:8px;padding:7px 9px}
@media(max-width:1050px){.hero-row{grid-template-columns:1fr}.donut-wrap{grid-template-columns:150px 1fr}.donut-wrap canvas{width:145px;height:145px}.top-actions .secondary{display:none}}
@media(max-width:760px){.lan-panel{grid-template-columns:1fr}.lan-panel>button{width:100%}}
@media(max-width:760px){.login-shell{display:block;padding:20px;background:linear-gradient(#173b2f 0 230px,#f7f6f2 230px)}.login-art{display:none}.login-card{background:white;border-radius:24px;padding:28px;margin:80px auto 0;box-shadow:var(--shadow)}.mobile-logo{display:flex;align-items:center;gap:8px;margin-bottom:35px;font-weight:700}.mobile-logo span{display:grid;place-items:center;width:33px;height:33px;border-radius:10px;background:#e7cd8e;color:#264238}.sidebar{transform:translateX(-100%);transition:.25s;box-shadow:20px 0 60px rgba(0,0,0,.18)}.sidebar.open{transform:none}.main{margin-left:0;padding:0 16px 35px}.topbar{height:auto;min-height:100px;flex-wrap:wrap;padding:18px 0}.topbar>div:nth-child(2){order:1}.top-actions{order:2;width:100%;margin:0}.top-actions .primary,.top-actions .secondary{display:none}.month-picker{margin-left:auto}.topbar #menuBtn{display:block;order:0}.hero-row,.metric-grid,.pie-grid,.option-grid,.backup-grid{grid-template-columns:1fr}.balance-card{min-height:200px}.chart-wide{padding:18px}.pie-grid .panel{padding:18px}.list-toolbar{align-items:stretch}.search{width:100%}.list-toolbar>.primary{font-size:0;width:44px}.list-toolbar>.primary:after{content:"＋";font-size:19px}.section-intro{align-items:flex-start;gap:12px}.donut-wrap{grid-template-columns:145px 1fr}.form-grid{grid-template-columns:1fr}.form-grid label.full{grid-column:auto}.modal-card{border-radius:18px}.table-scroll{max-width:calc(100vw - 32px)}.toast{right:16px;left:16px;text-align:center}.voucher-header,.income-item-grid{grid-template-columns:1fr 1fr}.voucher-items-head{align-items:flex-start;flex-direction:column}.add-income-item{display:inline-flex}.voucher-total{padding-bottom:16px}}
@media(max-width:500px){.voucher-header,.income-item-grid{grid-template-columns:1fr}.income-item{padding:13px 12px 2px}.voucher-total{justify-content:space-between}.voucher-total strong{font-size:21px}}
