:root{--bg:#f4f5f3;--panel:#ffffff;--line:#e4e6e2;--ink:#17191c;--muted:#767b85;--faint:#a3a8b1;--green:#0f8a5f;--green-soft:#e3f4ec;--red:#c8483f;--red-soft:#faeae8;--blue:#2f6fed;--soft:#eef0ec;--track:#e7e9e5;--grid:#ebede9;--radius:16px;color-scheme:light}
html[data-theme=dark]{--bg:#111316;--panel:#191c21;--line:#272b32;--ink:#f1f2f4;--muted:#9096a0;--faint:#5f6570;--green:#3ccf8e;--green-soft:rgba(60,207,142,.12);--red:#f0776e;--red-soft:rgba(240,119,110,.12);--blue:#6d9bff;--soft:#22262d;--track:#2a2f37;--grid:#23272e;color-scheme:dark}
*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;height:100%}
body{font-family:Manrope,Inter,-apple-system,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.45;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;transition:background .2s,color .2s}
button{font:inherit;cursor:pointer;color:inherit}a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:8px}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
.app{display:grid;grid-template-columns:232px 1fr;min-height:100vh}
.side{background:var(--bg);border-right:1px solid var(--line);padding:26px 18px 18px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:17px;letter-spacing:-.01em;padding:0 8px 28px}
.brand .mark{width:28px;height:28px;border-radius:9px;background:var(--green);display:grid;place-items:center;color:#fff;font-size:13px;font-weight:800}
.nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;margin-bottom:2px;color:var(--muted);font-weight:600;transition:background .15s,color .15s}
.nav a svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.nav a:hover{background:var(--soft);color:var(--ink)}
.nav a.on{background:var(--ink);color:var(--bg)}
.feed{margin-top:18px;padding-top:14px;border-top:1px solid var(--line);flex:1;min-height:0;display:flex;flex-direction:column}
.feedhd{display:flex;justify-content:space-between;align-items:center;padding:0 8px 8px;font-size:12px;font-weight:700;color:var(--muted)}
.feedhd a{color:var(--muted);font-weight:600}.feedhd a:hover{color:var(--ink)}
#feed{overflow:auto;min-height:0;padding:0 4px}
.fi{display:grid;grid-template-columns:8px 1fr;gap:10px;align-items:start;padding:7px 4px;font-size:12px;line-height:1.35}
.fi i{width:8px;height:8px;border-radius:50%;margin-top:5px;background:var(--faint)}
.fi.ok i{background:var(--green)}.fi.bad i{background:var(--red)}.fi.info i{background:var(--blue)}
.fi b{display:block;font-weight:600;color:var(--ink)}.fi small{color:var(--muted)}
.side .foot{margin-top:auto;display:flex;align-items:center;gap:10px;padding:12px 8px 0;border-top:1px solid var(--line);min-width:0}
.side .foot img{width:34px;height:34px;border-radius:50%;flex:none}
.side .foot .who{min-width:0}.side .foot b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}.side .foot small{color:var(--muted);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px}
.side .signout{margin-left:auto;background:none;border:0;color:var(--muted);padding:6px;border-radius:8px}.side .signout:hover{background:var(--soft);color:var(--ink)}
main{padding:28px 36px 48px;min-width:0;max-width:1440px}
.top{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:24px}
h1{margin:0;font-size:22px;font-weight:800;letter-spacing:-.02em}.sub{color:var(--muted);margin-top:2px}
.actions{display:flex;gap:8px;align-items:center}
.btn{border:1px solid var(--line);background:var(--panel);color:var(--ink);border-radius:10px;padding:9px 14px;font-weight:600;transition:background .15s,border-color .15s}
.btn:hover{border-color:var(--faint)}
.btn.primary{background:var(--ink);border-color:var(--ink);color:var(--bg)}.btn.primary:hover{opacity:.9}
.btn.danger{color:var(--red)}.btn.icon{width:38px;padding:0;text-align:center;font-size:15px}.btn.sm{padding:6px 10px;font-size:13px;border-radius:8px}
.btn:disabled{opacity:.5;cursor:default}
select.btn{padding-right:28px;appearance:auto}
/* hero */
.hero{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:0;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:20px;overflow:hidden}
.hero>div{padding:24px 26px;border-left:1px solid var(--line)}.hero>div:first-child{border-left:0}
.hero .l{color:var(--muted);font-weight:600;font-size:13px}
.hero .v{font-size:24px;font-weight:800;letter-spacing:-.03em;margin:6px 0 6px;line-height:1.1}
.hero .big .v{font-size:40px}
.hero .d{font-size:13px;color:var(--muted)}.hero .d b{font-weight:700}
.up{color:var(--green)}.down{color:var(--red)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:22px 24px}
.card h2{margin:0;font-size:15px;font-weight:800;letter-spacing:-.01em}
.card .hd{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;gap:12px}
.donut{display:grid;grid-template-columns:200px 1fr;gap:26px;align-items:center;min-height:220px}
.legend div{display:grid;grid-template-columns:10px 1fr auto 46px;gap:12px;align-items:center;padding:7px 0;border-top:1px solid var(--line)}
.legend div:first-child{border-top:0}
.legend i{width:8px;height:8px;border-radius:50%;display:inline-block}
.legend .p{color:var(--muted);text-align:right;font-size:13px}
.tbl{width:100%;border-collapse:collapse}
.tbl td,.tbl th{padding:12px 6px;border-top:1px solid var(--line);text-align:left;vertical-align:middle}
.tbl th{color:var(--muted);font-weight:600;font-size:12px;border-top:0;padding-top:0}
.tbl tbody tr:first-child td{border-top:0}
.tbl td:first-child{padding-left:0}.tbl td:last-child,.tbl th:last-child{padding-right:0}
.tx{display:flex;align-items:center;gap:12px;min-width:0}
.tile{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;flex:none;font-weight:800;font-size:13px;letter-spacing:.02em}
.tx small{display:block;color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.amt{text-align:right;font-weight:700;white-space:nowrap}
.muted{color:var(--muted)}
.bar{height:6px;border-radius:99px;background:var(--track);overflow:hidden}.bar i{display:block;height:100%;border-radius:99px;background:var(--green);transition:width .3s}
.bar i.warn{background:#d98b1c}.bar i.over{background:var(--red)}
.brow{display:grid;grid-template-columns:36px 150px 1fr 130px 44px;gap:14px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}
.brow:first-child{border-top:0}
.goal{padding:14px 0;border-top:1px solid var(--line)}.goal:first-child{border-top:0}.goal .r{display:flex;justify-content:space-between;margin-bottom:8px}
.bill{display:grid;grid-template-columns:36px 1fr 110px 120px 100px;gap:14px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}.bill:first-child{border-top:0}.bill.due b{color:var(--red)}
.view{display:none}.view.on{display:block}
.empty{padding:28px 8px;text-align:center;color:var(--muted)}
.empty .btn{margin-top:12px}
.pill{display:inline-block;padding:3px 9px;border-radius:99px;font-size:12px;font-weight:600;background:var(--soft)}
.pill.ok{background:var(--green-soft);color:var(--green)}.pill.bad{background:var(--red-soft);color:var(--red)}
input.f,select.f{border:1px solid var(--line);border-radius:10px;padding:8px 12px;font:inherit;background:var(--panel);color:var(--ink)}
.banner{background:var(--soft);border:1px solid var(--line);color:var(--muted);padding:10px 14px;border-radius:10px;margin-bottom:16px;font-size:13px}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;opacity:0;transition:.2s;pointer-events:none;font-weight:600}
.toast.on{opacity:1}
#gate{position:fixed;inset:0;background:var(--bg);display:grid;place-items:center;z-index:50}
#gate .box{background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:20px;padding:36px;width:360px;text-align:center}
#gate .box p{color:var(--muted)}#gate .err{color:var(--red);font-size:13px;min-height:18px}
.chartwrap{position:relative;height:250px}.chartwrap .empty{position:absolute;inset:0;display:grid;place-items:center;padding:0}
@media(max-width:1100px){.hero{grid-template-columns:1fr 1fr}.hero>div:nth-child(3){border-left:0}.hero>div:nth-child(n+3){border-top:1px solid var(--line)}.grid2{grid-template-columns:1fr}.donut{grid-template-columns:1fr}}
@media(max-width:800px){.app{grid-template-columns:1fr}.feed{display:none}.side{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line)}main{padding:18px}.hero{grid-template-columns:1fr}.hero>div{border-left:0}.brow{grid-template-columns:36px 1fr 100px}.brow>:nth-child(3),.brow>:nth-child(5){display:none}.bill{grid-template-columns:36px 1fr 90px}.bill>:nth-child(4),.bill>:nth-child(5){display:none}}
