:root{--ink:#172321;--muted:#687470;--bg:#f3f6f4;--surface:#fff;--line:#dde5e1;--green:#16785c;--red:#c34646;--nav:#14251f;--accent:#c9f06a;font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--ink)}*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}.gate{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 70% 20%,#274c3f,#11211c 55%)}.login-card{width:min(420px,100%);background:#fff;padding:32px;border-radius:18px;display:grid;grid-template-columns:auto 1fr;gap:18px;box-shadow:0 32px 90px #0005}.login-card label,.login-card button,.login-card .error{grid-column:1/-1}.logo{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--accent);color:#14251f;font-weight:900;font-size:22px}.kicker{margin:0 0 5px;text-transform:uppercase;letter-spacing:.1em;font-size:11px;font-weight:800;color:var(--muted)}h1,h2,h3,p{margin-top:0}h1{font-size:25px;margin-bottom:0}h2{font-size:30px;margin-bottom:0}h3{margin-bottom:0}label{display:grid;gap:7px;font-size:13px;font-weight:700}input,select{width:100%;border:1px solid var(--line);background:#fff;border-radius:10px;padding:12px;color:var(--ink);outline:none}input:focus,select:focus{border-color:var(--green);box-shadow:0 0 0 3px #16785c20}.primary,.secondary{border:0;border-radius:10px;padding:12px 17px;font-weight:800}.primary{background:var(--green);color:#fff}.secondary{background:#e9efec;color:var(--ink)}.error{color:var(--red);min-height:20px;margin:0}.shell{min-height:100vh;display:grid;grid-template-columns:245px minmax(0,1fr)}aside{position:sticky;top:0;height:100vh;padding:25px 18px;background:var(--nav);color:#fff;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;padding:0 8px 28px}.brand div:last-child{display:grid}.brand span{font-size:12px;color:#9db0a9}.brand .logo{width:40px;height:40px;border-radius:11px}nav{display:grid;gap:6px}.nav{border:0;background:transparent;color:#b9c8c3;text-align:left;padding:12px 14px;border-radius:10px;font-weight:700}.nav:hover,.nav.active{background:#ffffff12;color:#fff}.aside-foot{margin-top:auto;border-top:1px solid #ffffff18;padding:18px 8px 0;display:grid;gap:10px;color:#9db0a9;font-size:12px}.link{border:0;background:none;padding:0;color:var(--green);font-weight:800;text-align:left}.aside-foot .link{color:var(--accent)}main{padding:30px;min-width:0}header{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px}.badge{padding:9px 13px;background:#fff;border:1px solid var(--line);border-radius:999px;font-size:12px;font-weight:800}.view{display:none}.view.active{display:block}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}.metrics article{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:20px}.metrics span{display:block;color:var(--muted);font-size:12px;font-weight:750;margin-bottom:8px}.metrics strong{font-size:25px}.green{color:var(--green)}.red{color:var(--red)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:20px}.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.recent-row{display:grid;grid-template-columns:100px 1fr 160px;gap:14px;padding:13px 0;border-top:1px solid var(--line);align-items:center}.recent-row small,.muted{color:var(--muted)}.recent-row .num{text-align:right;font-weight:800}.filters{margin-bottom:14px}.filter-grid{display:grid;grid-template-columns:2fr repeat(6,1fr);gap:10px}.filter-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}.compact{grid-template-columns:repeat(3,1fr)}.compact strong{font-size:20px}.table-panel{padding:0;overflow:hidden}.table-panel .panel-head{padding:18px 20px 0}.table-wrap{overflow:auto;max-height:58vh}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:13px 16px;border-top:1px solid var(--line);text-align:left;white-space:nowrap}th{position:sticky;top:0;background:#f8faf9;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.num{text-align:right}.empty{text-align:center;color:var(--muted);padding:40px}.upload{max-width:760px}.upload>p{line-height:1.7;color:var(--muted)}.drop{margin-top:22px;border:2px dashed #b9c9c2;border-radius:14px;padding:35px;text-align:center;display:grid;gap:8px;background:#f8faf9}.drop span{color:var(--muted);font-weight:400}.drop input{margin:12px auto 0;max-width:420px}.busy{position:fixed;inset:0;background:#10201ddd;color:#fff;display:grid;place-items:center;align-content:center;gap:16px;z-index:20}.spinner{width:42px;height:42px;border:4px solid #ffffff33;border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:1050px){.filter-grid{grid-template-columns:repeat(3,1fr)}.metrics{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.shell{grid-template-columns:1fr}aside{position:static;height:auto;padding:14px}.brand{padding-bottom:12px}nav{display:flex}.aside-foot{display:none}main{padding:18px}.metrics,.compact,.filter-grid{grid-template-columns:1fr}.recent-row{grid-template-columns:85px 1fr}.recent-row .num{grid-column:2}.table-wrap{max-height:none}header{margin-top:5px}.table-panel{padding:14px;background:transparent;border:0;overflow:visible}.table-panel .panel-head{padding:0 2px 8px}.table-panel table,.table-panel tbody{display:block}.table-panel thead{display:none}.table-panel tbody{display:grid;gap:14px}.table-panel .transaction-card{--card-color:var(--red);position:relative;display:grid;grid-template-columns:1fr auto;grid-template-areas:"category date" "amount amount" "description description";gap:8px 14px;padding:18px 16px 15px;border:2px solid var(--card-color);border-radius:12px;background:#fff;box-shadow:0 8px 24px #1723210a}.table-panel .transaction-card.income{--card-color:var(--green)}.table-panel .transaction-card td{display:block;border:0;padding:0;white-space:normal}.table-panel .transaction-card .cell-category{grid-area:category;position:relative;top:-31px;justify-self:start;max-width:75vw;padding:0 8px;background:var(--bg);color:var(--muted);font-size:16px;font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-panel .transaction-card .cell-date{grid-area:date;color:var(--card-color);font-size:12px;font-weight:750}.table-panel .transaction-card .cell-amount{grid-area:amount;text-align:left;color:var(--card-color);font-size:24px;font-weight:850;line-height:1.15;margin-top:-15px}.table-panel .transaction-card .cell-description{grid-area:description;color:var(--card-color);font-size:14px;font-style:italic;line-height:1.4}.table-panel .transaction-card .cell-type{position:absolute;right:14px;bottom:13px;padding:4px 8px;border-radius:999px;background:color-mix(in srgb,var(--card-color) 10%,white);color:var(--card-color);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.08em}.table-panel td.empty{display:block;padding:35px;text-align:center}}
@media(max-width:720px){.table-panel .table-wrap{padding-top:16px;overflow:visible}}
@media(min-width:721px){.table-panel{padding:20px;background:transparent;border:0;overflow:visible}.table-panel .panel-head{padding:0 2px 10px}.table-panel .table-wrap{max-height:none;overflow:visible;padding-top:14px}.table-panel table,.table-panel tbody{display:block}.table-panel thead{display:none}.table-panel tbody{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.table-panel .transaction-card{--card-color:var(--red);position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"category date" "amount amount" "description description";gap:9px 18px;min-height:150px;padding:23px 20px 18px;border:2px solid var(--card-color);border-radius:14px;background:#fff;box-shadow:0 9px 26px #1723210a}.table-panel .transaction-card.income{--card-color:var(--green)}.table-panel .transaction-card td{display:block;border:0;padding:0;white-space:normal}.table-panel .transaction-card .cell-category{grid-area:category;position:relative;top:-37px;justify-self:start;max-width:100%;padding:0 10px;background:var(--bg);color:var(--muted);font-size:16px;font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-panel .transaction-card .cell-date{grid-area:date;color:var(--card-color);font-size:12px;font-weight:800}.table-panel .transaction-card .cell-amount{grid-area:amount;margin-top:-18px;text-align:left;color:var(--card-color);font-size:27px;font-weight:850;line-height:1.15}.table-panel .transaction-card .cell-description{grid-area:description;padding-right:90px;color:var(--card-color);font-size:14px;font-style:italic;line-height:1.45}.table-panel .transaction-card .cell-type{position:absolute;right:18px;bottom:17px;padding:5px 9px;border-radius:999px;background:#f7eeee;color:var(--card-color);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.08em}.table-panel .transaction-card.income .cell-type{background:#eaf5f1}.table-panel td.empty{display:block;grid-column:1/-1;padding:45px;text-align:center;background:#fff;border:1px solid var(--line);border-radius:14px}}@media(min-width:721px) and (max-width:1100px){.table-panel tbody{grid-template-columns:1fr}}
@media(min-width:721px){.table-panel{padding:0;background:var(--surface);border:1px solid var(--line);overflow:hidden}.table-panel .panel-head{padding:18px 20px 10px;margin-bottom:0}.table-panel .table-wrap{max-height:62vh;overflow:auto;padding:0 20px}.table-panel table,.table-panel tbody{display:block}.table-panel tbody{display:block}.table-panel .transaction-card{position:relative;display:grid;grid-template-columns:150px minmax(0,1fr) auto 190px;grid-template-areas:"date description description amount" "date category type amount";gap:3px 0;min-height:0;padding:17px 0;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;box-shadow:none}.table-panel .transaction-card td{display:block;border:0;padding:0;white-space:normal}.table-panel .transaction-card .cell-date{grid-area:date;align-self:center;color:var(--muted);font-size:13px;font-weight:500}.table-panel .transaction-card .cell-description{grid-area:description;padding:0;color:var(--ink);font-size:15px;font-style:normal;font-weight:800;line-height:1.3}.table-panel .transaction-card .cell-category{grid-area:category;position:static;justify-self:start;max-width:none;padding:0;background:transparent;color:var(--muted);font-size:13px;font-weight:500;overflow:visible;white-space:normal}.table-panel .transaction-card .cell-type{grid-area:type;position:static;justify-self:start;padding:0;background:transparent;color:var(--muted);font-size:13px;font-weight:500;text-transform:none;letter-spacing:0}.table-panel .transaction-card .cell-type::before{content:"· ";margin:0 5px}.table-panel .transaction-card.income .cell-type{background:transparent}.table-panel .transaction-card .cell-amount{grid-area:amount;align-self:center;margin:0;text-align:right;color:var(--card-color);font-size:15px;font-weight:850;line-height:1.2}.table-panel td.empty{display:block;padding:45px;text-align:center;background:transparent;border:0}}@media(min-width:721px) and (max-width:900px){.table-panel .transaction-card{grid-template-columns:110px minmax(0,1fr) auto 145px}}
.forecast-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.forecast-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.forecast-panel{padding:0;overflow:hidden}.forecast-panel .panel-head{margin:0;padding:20px;border-bottom:1px solid var(--line)}.forecast-add{width:40px;height:40px;border:0;border-radius:12px;display:grid;place-items:center;background:var(--green);color:#fff;font-size:25px;line-height:1;box-shadow:0 7px 18px #16785c2b}.outstanding-panel .forecast-add{background:var(--red);box-shadow:0 7px 18px #c346462b}.forecast-list{min-height:180px}.forecast-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 18px;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line)}.forecast-row:last-child{border-bottom:0}.forecast-row>div:first-child{min-width:0}.forecast-row strong,.forecast-row span{display:block}.forecast-row strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}.forecast-row span{margin-top:4px;color:var(--muted);font-size:12px}.forecast-row>b{font-size:15px;white-space:nowrap}.forecast-actions{grid-column:1/-1;display:flex;gap:8px}.forecast-actions button{border:0;background:transparent;padding:3px 0;color:var(--green);font-size:12px;font-weight:800}.forecast-actions button+button{margin-left:10px}.forecast-actions .delete{color:var(--red)}.forecast-empty{padding:46px 20px;text-align:center;color:var(--muted);font-size:13px}.forecast-editor{display:grid;grid-template-columns:minmax(0,1fr) 150px;gap:12px;padding:18px 20px;background:#f8faf9;border-bottom:1px solid var(--line)}.forecast-editor label span{color:var(--muted);font-size:11px}.forecast-editor>div{grid-column:1/-1;display:flex;gap:8px}.forecast-editor button{padding:9px 14px}.forecast-message{min-height:22px;margin:14px 2px 0;font-weight:700}.forecast-message:not(:empty){color:var(--green)}@media(max-width:950px){.forecast-grid{grid-template-columns:1fr}}@media(max-width:720px){nav{flex-wrap:wrap}.nav{flex:1 1 calc(50% - 6px)}.forecast-metrics{grid-template-columns:1fr}.forecast-editor{grid-template-columns:1fr}.forecast-row{padding:15px}.forecast-panel .panel-head{padding:17px}.forecast-grid{gap:14px}}
.overview-forecast{margin-bottom:18px}.overview-section-head{display:flex;align-items:end;justify-content:space-between;gap:16px;padding:2px 2px 12px}.overview-section-head h3{font-size:20px}.overview-forecast .forecast-metrics{margin-bottom:0}@media(max-width:720px){.overview-section-head{align-items:center}.overview-section-head h3{font-size:18px}}
.incoming-editor{grid-template-columns:minmax(0,1.5fr) 110px minmax(120px,.8fr)}.usd-conversion{grid-column:1/-1;display:grid;grid-template-columns:minmax(170px,240px) auto;gap:10px 12px;align-items:end;padding:14px;border:1px solid #cfe0d9;border-radius:12px;background:#fff}.usd-conversion[hidden]{display:none!important}.usd-conversion .rate-button{height:42px}.conversion-preview{grid-column:1/-1;margin:2px 0 0;color:var(--green);font-size:14px;font-weight:850}.usd-conversion small{grid-column:1/-1;color:var(--muted);line-height:1.4}.forecast-editor .forecast-editor-actions{grid-column:1/-1}@media(max-width:720px){.incoming-editor,.usd-conversion{grid-template-columns:1fr}.usd-conversion .rate-button,.conversion-preview,.usd-conversion small{grid-column:1}}
.overview-metrics article,.overview-forecast .metrics article{padding:17px 18px}.overview-metrics strong,.overview-forecast .metrics strong{font-size:22px}.cashflow-chart-panel{padding:22px;margin-top:2px}.chart-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:18px}.chart-header h3{font-size:20px}.chart-actions{display:flex;align-items:center;gap:12px}.chart-controls{display:grid;grid-template-columns:150px 170px 170px auto;gap:10px;align-items:end;padding:14px;border:1px solid var(--line);border-radius:12px;background:#f8faf9}.chart-controls label span{font-size:11px}.chart-controls .secondary{height:42px}.chart-range-totals{display:flex;align-items:center;flex-wrap:wrap;gap:12px 25px;padding:16px 2px 8px;color:var(--muted);font-size:12px}.chart-range-totals span{display:flex;align-items:center;gap:7px}.chart-range-totals strong{color:var(--ink);font-size:13px}.chart-range-totals i{width:10px;height:10px;border-radius:3px}.legend-income{background:var(--green)}.legend-expense{background:var(--red)}.chart-viewport{width:100%;overflow-x:auto;overflow-y:hidden;padding-bottom:4px}.chart-viewport canvas{display:block}.chart-empty{margin:0;padding:75px 20px;text-align:center;color:var(--muted)}@media(max-width:1050px){.chart-controls{grid-template-columns:repeat(3,minmax(0,1fr))}.chart-controls .secondary{grid-column:1/-1;justify-self:start}}@media(max-width:720px){.overview-metrics strong,.overview-forecast .metrics strong{font-size:21px}.cashflow-chart-panel{padding:17px}.chart-header{align-items:center}.chart-header h3{font-size:18px}.chart-controls{grid-template-columns:1fr 1fr}.chart-controls label:first-child{grid-column:1/-1}.chart-controls .secondary{grid-column:1/-1;width:100%}.chart-range-totals{display:grid;grid-template-columns:1fr;gap:8px}.chart-viewport{margin-inline:-6px;width:calc(100% + 12px)}}
