:root{--bg: #f3eee4;--bg-accent: #e8dfd0;--card: #fffcf7;--ink: #1f1b16;--muted: #7a7268;--line: #e4d8c8;--teal: #0f766e;--teal-dark: #115e59;--amber: #b45309;--danger: #b42318;--shadow: 0 18px 40px rgba(58, 41, 22, .08)}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;color:var(--ink);background:radial-gradient(circle at top right,#f7e7c8 0%,transparent 32%),linear-gradient(180deg,var(--bg),#efe8db);font-family:Manrope,sans-serif}button,input{font:inherit}h1,h2{font-family:"Source Serif 4",Georgia,serif;margin:0}h1{font-size:2rem;letter-spacing:-.03em}h2{font-size:1.2rem}.muted{color:var(--muted)}.eyebrow{margin:0 0 .2rem;text-transform:uppercase;letter-spacing:.12em;font-size:.72rem;color:var(--teal-dark);font-weight:700}.boot{padding:4rem;text-align:center;color:var(--muted)}.error{color:var(--danger);margin:0}.income{color:var(--teal-dark)}.expense{color:var(--amber)}.login-shell{min-height:100vh;display:grid;place-items:center;padding:1.5rem}.login-card{width:min(420px,100%);background:var(--card);border:1px solid var(--line);border-radius:28px;padding:2rem;box-shadow:var(--shadow);display:grid;gap:.9rem}.login-card label,.page label{display:grid;gap:.35rem;font-size:.92rem}input{border:1px solid var(--line);background:#fff;border-radius:12px;padding:.7rem .8rem}button{border:0;border-radius:999px;background:var(--teal);color:#fff;padding:.75rem 1.1rem;cursor:pointer;font-weight:600}button:disabled{opacity:.6;cursor:wait}button.ghost{background:transparent;color:var(--ink);border:1px solid var(--line)}button.link{background:transparent;color:inherit;padding:0;border-radius:0;font-weight:600;text-align:left}button.chip{background:#fff;color:var(--ink);border:1px solid var(--line);padding:.45rem .8rem}button.chip.active{background:var(--ink);color:#fff}.page{width:min(1180px,calc(100% - 2rem));margin:0 auto;padding:1.5rem 0 3rem;display:grid;gap:1rem}.topbar,.filters,.metrics,.grid,.dropzone,.panel,.period-bar{background:var(--card);border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow)}.topbar,.dropzone,.filters,.table-head,.period-bar{display:flex;justify-content:space-between;gap:1rem;align-items:center;flex-wrap:wrap}.topbar,.dropzone,.filters,.panel,.metrics article,.period-bar{padding:1.1rem 1.25rem}.user{color:var(--muted)}.nav{display:flex;gap:.4rem}.nav-link{text-decoration:none;color:var(--ink);border:1px solid var(--line);border-radius:999px;padding:.45rem .9rem;font-weight:600;background:#fff}.nav-link.active{background:var(--ink);color:#fff;border-color:var(--ink)}.icon-btn{width:42px;height:42px;padding:0;border-radius:14px;background:#fff;color:var(--ink);border:1px solid var(--line);font-size:1.6rem;line-height:1;display:grid;place-items:center}.icon-btn.spacer{visibility:hidden}.burger span{display:block;width:16px;height:2px;background:var(--ink);margin:2px 0;border-radius:2px}.burger{align-content:center;gap:3px}.burger span{margin:0}.burger.open{border-color:var(--ink)}.chart-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.period-anchor{position:relative}.period-menu{position:absolute;z-index:10;right:0;top:calc(100% + 6px);width:max-content;max-width:min(420px,calc(100vw - 3rem));display:grid;gap:.8rem;padding:1rem;background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}.period-menu p{margin:0}.chart-stage{display:grid;grid-template-columns:42px minmax(0,1fr) 42px;gap:.75rem;align-items:center}.chart-empty{min-height:200px;display:grid;place-items:center;text-align:center;padding:1rem}.chart-empty a{color:var(--teal-dark);font-weight:600}.chart-center{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;text-align:center;pointer-events:none}.chart-center span{color:var(--muted);font-size:.86rem}.chart-center strong{font-family:"Source Serif 4",Georgia,serif;font-size:1.5rem}.cat-head{display:flex;justify-content:space-between;align-items:center;gap:1rem}.cat-head p{margin:.3rem 0 0}.cat-form{display:flex;gap:.6rem;margin-top:1rem}.cat-form input{flex:1}.danger-btn{color:var(--danger);border-color:#f0c7c2}.chart-panel.wide{display:grid;gap:1rem}.chart-wide{position:relative;width:min(520px,100%);margin:0 auto}.cat-list{list-style:none;margin:0;padding:0;display:grid;gap:.15rem}.cat-row{width:100%;display:grid;grid-template-columns:16px 10px minmax(0,1fr) auto 7.5rem;gap:.75rem;align-items:center;background:transparent;color:inherit;border-radius:14px;padding:.65rem .75rem;text-align:left;font-weight:500}.cat-row:hover{background:#f7f1e7}.cat-row i{width:10px;height:10px;border-radius:99px}.cat-row b{text-align:right;white-space:nowrap}.chevron{width:8px;height:8px;border-right:2px solid var(--teal-dark);border-bottom:2px solid var(--teal-dark);transform:rotate(-45deg);transition:transform .15s ease;justify-self:center}.cat-list li.open .chevron{transform:rotate(45deg)}.cat-list li.open .cat-row{background:#f4faf7}.cat-name{display:grid;min-width:0}.cat-name span{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cat-name small{color:var(--muted);font-size:.82rem}.share{padding:.15rem .55rem;border-radius:999px;background:#e3f4ee;color:var(--teal-dark);font-weight:700;font-size:.86rem}.cat-ops{margin:.2rem 0 .6rem 2.6rem;padding:.35rem .5rem;background:#f4faf7;border:1px solid #d6ece3;border-left:3px solid var(--teal);border-radius:16px;display:grid}.cat-ops>.muted{margin:0;padding:.6rem}.op-row{display:grid;grid-template-columns:minmax(0,1fr) 190px 7rem 42px;gap:.75rem;align-items:center;padding:.55rem .5rem;border-top:1px solid #e2efe9}.op-row:first-child{border-top:0}.op-row.dim{opacity:.55}.op-main{display:grid;min-width:0}.op-main span{font-weight:600;font-size:.92rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.op-main small{color:var(--muted);font-size:.8rem}.op-row b{text-align:right;white-space:nowrap;font-size:.92rem}.combo{position:relative;min-width:160px}.combo-list{position:absolute;z-index:8;left:0;right:0;top:calc(100% + 4px);margin:0;padding:.3rem;list-style:none;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);max-height:220px;overflow:auto}.combo-list button{width:100%;background:transparent;color:inherit;border-radius:8px;text-align:left;padding:.45rem .55rem}.combo-list button:hover{background:var(--bg-accent)}.dropzone{border:1.5px dashed #cbbda8;background:#fffaf2}.dropzone.over{border-color:var(--teal);background:#f3faf6}.file-btn{background:var(--ink);color:#fff;border-radius:999px;padding:.7rem 1rem;cursor:pointer;font-weight:600}.banner{margin:0;padding:.8rem 1rem;background:#ecf8f3;color:var(--teal-dark);border-radius:14px}.presets,.dates,.topbar-actions{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.search{min-width:min(320px,100%);flex:1}.metrics{display:grid;grid-template-columns:repeat(4,1fr);padding:0;overflow:hidden}.metrics article{border-right:1px solid var(--line)}.metrics article:last-child{border-right:0}.metrics span{color:var(--muted);font-size:.86rem}.metrics strong{display:block;margin-top:.35rem;font-size:1.45rem;font-family:"Source Serif 4",Georgia,serif}.grid{display:grid;grid-template-columns:1.4fr 1fr;padding:0;overflow:hidden}.grid .panel{box-shadow:none;border:0;border-radius:0}.grid .chart-panel{border-right:1px solid var(--line)}.chart-wrap{display:grid;grid-template-columns:280px 1fr;gap:.5rem;align-items:center}.legend{list-style:none;margin:0;padding:0;display:grid;gap:.45rem}.legend li{display:grid;grid-template-columns:10px 1fr auto;gap:.5rem;align-items:center;font-size:.92rem}.legend i{width:10px;height:10px;border-radius:99px}.cats{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.8rem}.cat{display:flex;align-items:center;gap:.4rem;padding:.35rem .65rem;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:.86rem}.table-panel{padding:1rem 0 0}.table-head{padding:0 1.25rem .8rem}.table-scroll{overflow:auto}table{width:100%;border-collapse:collapse}th,td{padding:.75rem 1rem;text-align:left;border-top:1px solid var(--line);font-size:.92rem;vertical-align:middle}th{cursor:pointer;color:var(--muted);font-weight:600;position:sticky;top:0;background:var(--card)}tr.dim{opacity:.55}.desc{display:grid}.desc small{color:var(--muted)}.switch{width:42px;height:24px;padding:0;border-radius:999px;background:#d7cfc3;position:relative}.switch:after{content:"";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:left .15s ease}.switch.on{background:var(--teal)}.switch.on:after{left:21px}input.invalid{border-color:var(--danger)}.login-card small.error{font-size:.82rem}.auth-switch{margin:0;text-align:center}.auth-switch a,.button-link{color:var(--teal-dark);font-weight:600}.button-link{text-align:center}input[type=checkbox]{width:18px;height:18px;padding:0;margin:0;accent-color:var(--teal);cursor:pointer}.admin{display:grid;gap:1rem;padding:1.1rem 0 0}.admin>.banner,.admin>.error{margin:0 1.25rem}.admin-head,.bulk-bar{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;padding:0 1.25rem}.admin-head{justify-content:space-between}.bulk-bar .muted{margin-right:auto}.bulk-bar button:disabled{cursor:not-allowed}.admin-table th{cursor:default}.admin-table .check-cell{width:44px}.admin-table tr.selected{background:#f4faf7}.empty-cell{text-align:center;padding:2rem 1rem}.row-actions{display:flex;gap:.4rem;justify-content:flex-end;flex-wrap:wrap}button.small{padding:.35rem .75rem;font-size:.86rem}.status-badge{display:inline-block;padding:.15rem .6rem;border-radius:999px;font-size:.82rem;font-weight:700;white-space:nowrap}.status-badge.pending{background:#fdf0dc;color:var(--amber)}.status-badge.active{background:#e3f4ee;color:var(--teal-dark)}.status-badge.frozen{background:#e7eef8;color:#2f5a8a}@media(max-width:900px){.metrics,.grid,.chart-wrap{grid-template-columns:1fr}.metrics article,.grid .chart-panel{border-right:0;border-bottom:1px solid var(--line)}h1{font-size:1.6rem}.chart-stage{grid-template-columns:36px minmax(0,1fr) 36px;gap:.4rem}.nav-arrow{width:36px;height:36px}.cat-row{grid-template-columns:16px 10px minmax(0,1fr) auto auto;gap:.5rem}.cat-ops{margin-left:.8rem}.op-row{grid-template-columns:minmax(0,1fr) auto 42px}.op-row .combo{grid-column:1 / -1;grid-row:2}}
