:root{--ink:#343740;--green:#9FD256;--blue:#5891F4;--red:#ef7474;--muted:#8a8d95}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:#fff;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:15px}button,input{font:inherit}button{cursor:pointer;transition:background .15s,transform .15s}button:disabled{opacity:.5;cursor:wait}button:focus-visible,a:focus-visible{outline:3px solid var(--blue);outline-offset:5px}button:hover:not(:disabled){filter:brightness(.95)}.wrap{max-width:1160px;margin:auto;padding:0 40px}.hero{background:var(--ink);color:white;min-height:50vh}.topbar{height:92px;display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;color:#fff;text-decoration:none;font-size:22px;font-weight:700;letter-spacing:-1px}.brand>span:last-child{font-weight:350}.brand-icon{display:block;width:38px;height:38px;margin-right:11px;flex:none}nav{display:flex;gap:30px;border-bottom:1px solid #ffffff16}.tab{background:none;border:0;color:#b8bbc4;padding:16px 2px;font-size:13px;position:relative}.tab.active{color:white}.tab.active:after{content:"";position:absolute;height:3px;border-radius:3px;background:var(--green);bottom:-1px;left:0;right:0}.eyebrow{font-size:10px;letter-spacing:1.8px;font-weight:650}h1{font-weight:450;font-size:28px;letter-spacing:-.9px;margin:10px 0 0}h1>span{color:var(--green)}.totals{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));padding:0 0 39px;gap:35px}.metric+.metric{border-left:1px solid #ffffff20;padding-left:36px}.metric-label{font-size:13px;color:#e0e1e5;display:flex;align-items:center;gap:12px;height:26px}.edit-income{background:#ffffff12;border:1px solid #ffffff20;border-radius:50%;color:#fff;width:25px;height:25px;line-height:20px}.metric-symbol{color:#999da8}.value{font-size:clamp(28px,4.1vw,52px);font-weight:500;letter-spacing:-2px;margin:10px 0 9px;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.green{color:var(--green)}.blue{color:var(--blue)}.negative{color:var(--red)!important}.section-heading{display:flex;justify-content:space-between;align-items:center;padding:43px 0 30px}.muted{color:var(--muted)}h2{font-size:25px;font-weight:550;letter-spacing:-.7px;margin:8px 0}.count{display:inline-flex;vertical-align:middle;align-items:center;justify-content:center;background:#f1f3f5;color:#898d96;border-radius:8px;font-size:12px;letter-spacing:0;padding:5px 9px;margin-left:9px}.primary{border:0;background:var(--blue);color:white;border-radius:9px;padding:13px 18px;font-size:12px;font-weight:600}.primary>span{margin-right:5px;font-size:18px;vertical-align:-1px}.list-head{display:flex;justify-content:space-between;padding:0 100px 14px 0;border-bottom:1px solid #e9eaed;font-size:10px;color:#9699a2;letter-spacing:1.5px}.expense-row{display:flex;align-items:center;border-bottom:1px solid #eff0f2;padding:20px 0;gap:16px}.expense-icon{display:grid;place-items:center;width:40px;height:40px;flex:none;background:#f0f5ff;border-radius:12px;color:var(--blue);font-size:18px}.expense-name{font-size:14px;flex:1;overflow-wrap:anywhere}.expense-amount{font-weight:550;font-size:18px;color:var(--blue);font-variant-numeric:tabular-nums;white-space:nowrap}.row-actions{display:flex;gap:6px;margin-left:16px}.icon-button{background:transparent;color:#8a8e98;border:0;border-radius:6px;padding:7px;font-size:19px;line-height:1}.icon-button:hover{background:#f2f4f7}.empty{text-align:center;color:var(--muted);padding:40px 15px;line-height:1.8;font-size:14px}.balance{margin:30px 0 50px;padding:28px;background:#f7f8f5;border:1px solid #ecefe5;border-radius:14px;display:flex;justify-content:space-between;align-items:center;gap:20px}.balance>div:first-child{display:flex;align-items:center;gap:16px}.balance-icon{display:grid;place-items:center;background:#eaf3dc;border-radius:50%;width:43px;height:43px;color:#76a540;font-size:23px}.balance h3{font-size:15px;font-weight:550;margin:0 0 7px}.balance p{font-size:12px;color:var(--muted);margin:0}.balance>div:last-child{text-align:right}.balance strong{display:block;font-size:32px;font-weight:550;letter-spacing:-1px;margin-top:6px;font-variant-numeric:tabular-nums}.balance .green{color:var(--green)}.placeholder{text-align:center;padding:70px 0;color:var(--muted)}.placeholder h2{color:var(--ink)}.placeholder-icon{font-size:45px;color:var(--blue)}dialog{border:0;border-radius:18px;padding:30px;width:min(440px,calc(100% - 32px));color:var(--ink);box-shadow:0 20px 100px #0003}dialog::backdrop{background:#25283299;backdrop-filter:blur(4px)}.dialog-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}label{display:block;font-size:13px;margin:18px 0}input{display:block;width:100%;margin-top:9px;padding:13px;border:1px solid #dfe2e8;border-radius:8px;color:var(--ink);background:#fff}input:focus{outline:2px solid var(--blue);outline-offset:1px}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:25px}.secondary,.danger{padding:12px 16px;border:0;border-radius:8px;font-size:12px;font-weight:600}.secondary{background:#f1f2f5;color:var(--ink)}.danger{background:#bf4545;color:#fff}#form-error,#delete-error,#page-error{color:#b43333;font-size:13px;line-height:1.5}#page-error{padding:15px;background:#fff1f1;border-radius:8px}[hidden]{display:none!important}@media(min-height:900px) and (min-width:701px){.hero>.wrap{min-height:50vh;display:flex;flex-direction:column}.totals{margin-top:auto}}@media(max-width:700px){.wrap{padding:0 22px}.topbar{height:78px}h1{font-size:23px}.totals{gap:12px;padding-bottom:30px}.metric+.metric{padding-left:13px}.value{font-size:clamp(22px,5.5vw,36px);letter-spacing:-1px}.metric-label{font-size:11px}.section-heading{padding-top:30px}h2{font-size:22px}.primary{padding:12px}.list-head{padding-right:80px}.expense-row{gap:10px}.expense-icon{width:32px;height:32px;font-size:15px}.expense-amount{font-size:16px}.row-actions{gap:0;margin-left:2px}.icon-button{padding:6px}.balance{padding:20px;gap:12px}.balance-icon{display:none}.balance strong{font-size:26px}.balance h3{font-size:13px}.balance p{font-size:11px}.hero{min-height:0}}

.expense-row{cursor:grab;user-select:none;position:relative}.expense-row.dragging{background:#f0f5ff;box-shadow:0 4px 18px #34374015;outline:2px solid var(--blue);border-radius:10px;cursor:grabbing;z-index:2}.row-actions{position:relative;flex:none;display:flex;margin-left:12px}.menu-toggle{font-size:26px;min-width:40px;min-height:40px}.expense-menu{position:absolute;right:0;top:calc(100% + 3px);width:140px;background:white;border:1px solid #e9eaed;border-radius:10px;padding:5px;box-shadow:0 8px 30px #34374020;z-index:10}.expense-menu button{display:block;width:100%;border:0;background:transparent;text-align:left;padding:12px;border-radius:6px;font-size:13px;color:var(--ink)}.expense-menu button:hover{background:#f3f5f8}.expense-menu .delete-action{color:#c43e3e}.expense-menu .delete-action:hover{background:#fff0f0}.expense-row:has(.expense-menu:not([hidden])){z-index:3}.list-head{padding-right:68px}@media(max-width:700px){.row-actions{max-width:none;flex-wrap:nowrap;margin-left:0}.list-head{padding-right:50px}}

.hero>.wrap{min-height:max(50vh,428px);display:flex;flex-direction:column}.topbar,nav{flex-shrink:0}.totals{margin-top:auto;padding-top:35px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@media(max-width:700px){.hero>.wrap{min-height:357px}}

.savings-totals{grid-template-columns:1fr}.savings-button{background:var(--green);color:var(--ink)}#savings-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:20px;padding-bottom:45px;align-items:start}#savings-list .expense-row{min-height:132px;padding:24px;border:1px solid #e1e9d5;border-radius:16px;background:#f8faf5;gap:20px}#savings-list .expense-name{font-size:18px;font-weight:550}#savings-list .expense-amount{color:var(--green);font-size:30px;letter-spacing:-.8px}#savings-list .expense-row.dragging{outline-color:var(--green);background:#eef6e2}@media(max-width:700px){#savings-list .expense-row{padding:18px 12px;gap:10px;min-height:112px}#savings-list .expense-name{font-size:15px}#savings-list .expense-amount{font-size:23px}}

#savings-list .expense-row{display:grid;grid-template-columns:minmax(0,1fr) 40px;grid-template-rows:auto auto;gap:18px 10px;min-height:170px;align-content:start}#savings-list .expense-name{grid-column:1;grid-row:1;align-self:center}#savings-list .row-actions{grid-column:2;grid-row:1;margin-left:0}#savings-list .expense-amount{grid-column:1 / -1;grid-row:2;white-space:normal;overflow-wrap:anywhere;font-size:30px;padding-left:4px}#savings-list>.empty{grid-column:1 / -1}

select{font:inherit}#currency-input{display:block;width:100%;margin-top:9px;padding:13px;border:1px solid #dfe2e8;border-radius:8px;background:#fff;color:var(--ink)} .header-currency{position:static;background:none;border:0;color:inherit;font-size:.48em;letter-spacing:0;vertical-align:middle;margin-left:10px;padding:4px 0;cursor:pointer}.header-currency-menu{position:fixed;z-index:1000;width:220px;max-width:calc(100vw - 24px);padding:6px;background:#fff;border:1px solid #e5e7eb;border-radius:10px;box-shadow:0 8px 30px #0003;color:var(--ink);font-size:13px}.currency-options{max-height:216px;overflow-y:auto;overscroll-behavior:contain}.header-currency-menu button{display:block;width:100%;text-align:left;border:0;background:none;border-radius:6px;padding:10px 12px;color:var(--ink);font-size:13px}.header-currency-menu button:hover,.header-currency-menu button:focus-visible{background:#f0f4e9}.header-currency-menu button[aria-pressed="true"]{background:#edf5df;font-weight:650}.header-currency-menu .other-currencies{border-top:1px solid #eee;margin-top:4px;border-radius:0;font-weight:550}.rate-status{font-size:11px;color:var(--muted);margin:20px 0 0;line-height:1.6}.rate-status a{color:inherit}.value{font-size:clamp(25px,3.5vw,46px)}@media(max-width:700px){.value{font-size:clamp(20px,4.8vw,32px)}.header-currency{margin-left:5px;font-size:.5em}}

.expense-row:focus-visible{outline:2px solid var(--blue);outline-offset:4px}.expense-name{touch-action:none}#savings-list .expense-row:focus-visible{outline-color:var(--green)}

#currency-input{text-align:left;font:inherit;cursor:pointer;margin-top:-9px}#currency-input:focus-visible{outline:2px solid var(--blue);outline-offset:2px}

/* Typography matrix: desktop, with mobile overrides below. */
:root{
  --font-logo:22px;
  --font-nav:14px;
  --font-header-label:14px;
  --font-header-amount:48px;
  --font-header-currency:24px;
  --font-section:24px;
  --font-expense-name:16px;
  --font-expense-amount:20px;
  --font-saving-name:18px;
  --font-saving-amount:32px;
  --font-balance:32px;
  --font-dialog:24px;
  --font-label:14px;
  --font-field:16px;
  --font-control:14px;
  --font-note:12px;
}
.brand{font-size:var(--font-logo);font-weight:700}
.tab{font-size:var(--font-nav);font-weight:500}
.metric-label{font-size:var(--font-header-label);font-weight:400}
.value{font-size:var(--font-header-amount);font-weight:500}
.header-currency{font-size:var(--font-header-currency);font-weight:500}
.section-heading h2,.placeholder h2{font-size:var(--font-section);font-weight:600}
.expense-name{font-size:var(--font-expense-name);font-weight:400}
.expense-amount{font-size:var(--font-expense-amount);font-weight:500}
#savings-list .expense-name{font-size:var(--font-saving-name);font-weight:600}
#savings-list .expense-amount{font-size:var(--font-saving-amount);font-weight:500}
.balance strong{font-size:var(--font-balance);font-weight:600}
dialog h2{font-size:var(--font-dialog);font-weight:600}
label{font-size:var(--font-label);font-weight:500}
input,select,#currency-input{font-size:var(--font-field);font-weight:400}
.primary,.secondary,.danger,.expense-menu button,.header-currency-menu button{font-size:var(--font-control);font-weight:500}
.list-head,.rate-status,.count,.empty,#form-error,#delete-error,#page-error{font-size:var(--font-note);font-weight:400}
@media(max-width:700px){
  :root{
    --font-logo:20px;
    --font-header-label:12px;
    --font-header-amount:28px;
    --font-header-currency:16px;
    --font-section:22px;
    --font-expense-name:15px;
    --font-expense-amount:18px;
    --font-saving-name:16px;
    --font-saving-amount:28px;
    --font-balance:28px;
    --font-dialog:22px;
  }
}
