:root{--bg:#f4f8f6;--panel:#fff;--ink:#17211f;--muted:#64736f;--line:#dbe6e2;--green:#176b5b;--green-soft:#def4ec;--blue:#1f5f93;--blue-soft:#e3f1ff;--red:#a73535;--red-soft:#ffe7e7;--shadow:0 18px 44px #1739351f}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{color:var(--ink);background:linear-gradient(135deg, #176b5b1a, #1f5f9314), var(--bg);font-family:Microsoft YaHei,PingFang SC,Arial,sans-serif}button,input,select,textarea{font:inherit}.login{z-index:10;background:linear-gradient(135deg,#183a37,#1f5f93);place-items:center;padding:20px;display:grid;position:fixed;inset:0}.login-card{background:#fff;border-radius:8px;width:min(420px,100%);padding:26px;box-shadow:0 24px 80px #00000047}.login-card h1{margin:0 0 8px;font-size:25px}.login-card p{color:var(--muted);margin:0 0 18px;line-height:1.6}.app{grid-template-columns:380px minmax(0,1fr);min-height:100vh;display:grid}.app.locked{filter:blur(8px);pointer-events:none;-webkit-user-select:none;user-select:none}.left{border-right:1px solid var(--line);background:#fff;flex-direction:column;gap:16px;height:100vh;padding:22px;display:flex;position:sticky;top:0;overflow:auto}.brand{color:#fff;box-shadow:var(--shadow);background:#183a37;border-radius:8px;padding:18px}.brand h1{margin:0 0 8px;font-size:23px}.brand p{color:#ffffffc7;margin:0;font-size:13px;line-height:1.6}.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px #183a370f}.form{padding:16px}.label{color:var(--muted);margin:0 0 7px;font-size:13px;font-weight:800;display:block}.field{background:#fff;border:1px solid #ccd9d5;border-radius:6px;outline:none;width:100%;height:44px;padding:0 12px}.field:focus{border-color:var(--green);box-shadow:0 0 0 3px #176b5b21}textarea.field{resize:vertical;height:74px;padding-top:10px}.grid2{grid-template-columns:1fr 1fr;gap:12px;display:grid}.switch{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px;display:grid}.switch button{border:1px solid var(--line);height:48px;color:var(--muted);cursor:pointer;background:#fff;border-radius:7px;font-weight:900}.switch button.active[data-type=收入]{color:var(--blue);background:var(--blue-soft);border-color:#91bbe4}.switch button.active[data-type=支出]{color:var(--red);background:var(--red-soft);border-color:#f0a5a5}.switch button.active[data-type=进货]{color:var(--green);background:var(--green-soft);border-color:#8bd0bd}.money{position:relative}.money b{color:var(--muted);position:absolute;top:36px;left:12px}.money input{height:56px;padding-left:30px;font-size:22px;font-weight:900}.primary{background:var(--green);color:#fff;cursor:pointer;border:0;border-radius:7px;width:100%;height:50px;font-weight:900;box-shadow:0 10px 18px #176b5b38}.secondary{border:1px solid var(--line);height:38px;color:var(--muted);cursor:pointer;background:#fff;border-radius:6px;padding:0 12px;font-weight:800}.hint{min-height:22px;color:var(--green);text-align:center;font-size:13px;font-weight:800}.error{min-height:24px;color:var(--red);text-align:center;margin-top:10px;font-size:13px;font-weight:800}.right{min-width:0;padding:24px}.top{justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px;display:flex}.top h2{margin:0;font-size:24px}.pill{border:1px solid var(--line);color:var(--muted);background:#fff;border-radius:7px;padding:10px 14px;font-weight:900}.kpis{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px;display:grid}.kpi{min-height:118px;padding:18px}.kpi span{color:var(--muted);margin-bottom:12px;font-size:13px;font-weight:900;display:block}.kpi strong{white-space:nowrap;font-size:28px;line-height:1.1;display:block}.kpi small{color:var(--muted);margin-top:10px;font-size:12px;display:block}.positive{color:var(--green)}.negative{color:var(--red)}.main{grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);align-items:start;gap:16px;display:grid}.title{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.title h3{margin:0;font-size:16px}.body{padding:16px}.block{margin-top:16px}.bars{gap:12px;display:grid}.bar{grid-template-columns:80px 1fr 100px;align-items:center;gap:10px;font-size:13px;font-weight:900;display:grid}.track{background:#edf3f1;border-radius:4px;height:12px;overflow:hidden}.fill{background:var(--green);width:0%;height:100%}.fill.income{background:var(--blue)}.fill.expense{background:var(--red)}.fill.purchase{background:var(--green)}.daily{gap:10px;padding:16px;display:grid}.day{background:#fbfdfc;border:1px solid #edf2f0;border-radius:7px;grid-template-columns:92px repeat(4,minmax(86px,1fr));align-items:center;gap:10px;padding:12px;font-size:13px;display:grid}.day strong{color:var(--green);text-align:right;white-space:nowrap}.day.loss strong{color:var(--red)}.records{max-height:520px;overflow:auto}.record{border-bottom:1px solid #edf2f0;grid-template-columns:82px 64px minmax(0,1fr) 112px 34px;align-items:center;gap:10px;padding:12px 16px;display:grid}.tag{border-radius:5px;justify-content:center;align-items:center;height:28px;font-size:12px;font-weight:900;display:inline-flex}.tag.income{color:var(--blue);background:var(--blue-soft)}.tag.expense{color:var(--red);background:var(--red-soft)}.tag.purchase{color:var(--green);background:var(--green-soft)}.record strong,.record small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.record small{color:var(--muted);margin-top:3px}.amount{text-align:right;white-space:nowrap;font-weight:900}.delete{cursor:pointer;color:#789;background:#f1f5f4;border:0;border-radius:5px;width:30px;height:30px;font-weight:900}.chips{flex-wrap:wrap;gap:8px;padding:16px;display:flex}.chip{border:1px solid var(--line);cursor:pointer;color:var(--muted);background:#fff;border-radius:999px;padding:8px 11px;font-size:13px;font-weight:800}.empty{text-align:center;color:var(--muted);padding:28px 16px}@media (max-width:980px){.app{grid-template-columns:1fr}.left{height:auto;position:static}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.main{grid-template-columns:1fr}}@media (max-width:620px){.left,.right{padding:14px}.grid2,.kpis,.day{grid-template-columns:1fr}.record{grid-template-columns:68px 56px minmax(0,1fr)}.record .amount,.record .delete{grid-column:3;justify-self:end}}
