/* Ported verbatim from the dashboard.html prototype. */
:root{--ink:#e8edf5;--ink2:#aab8ca;--mute:#7d8da0;--line:#243044;--paper:#0d1420;--card:#161f2e;
--amber:#e0a34a;--amber-bg:#2e2415;--green:#3ecf8e;--green-bg:#122a20;--rust:#f0685a;--rust-bg:#2e1714;
--slate:#7c8cf8;--grid:#1e2a3c;--purple:#8b7cf6}
*{box-sizing:border-box}
body{margin:0;background:#0d1420;color:var(--ink);font-family:'IBM Plex Sans',system-ui,-apple-system,sans-serif;font-size:15px;line-height:1.5;font-variant-numeric:tabular-nums lining-nums}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:.82em}
.wrap{max-width:1180px;margin:0 auto;padding:22px 16px 70px}
h1{font-size:21px;font-weight:600;margin:0 0 2px;letter-spacing:-.01em}
.sub{color:var(--mute);font-size:13.5px;margin:0 0 18px}
h2{font-size:13px;font-weight:600;color:var(--mute);margin:0 0 12px}
nav{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:20px;overflow-x:auto}
nav button{background:none;border:0;border-bottom:2px solid transparent;color:var(--mute);
 font:inherit;font-size:14px;padding:9px 13px;cursor:pointer;white-space:nowrap}
nav button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--ink);font-weight:500}
button:focus-visible,input:focus-visible,a:focus-visible{outline:2px solid var(--slate);outline-offset:2px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:17px 19px;margin-bottom:13px}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:11px;margin-bottom:13px}
.tile{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.tile .v{font-size:25px;font-weight:600;letter-spacing:-.02em;line-height:1.15}
.tile .l{color:var(--mute);font-size:12.5px;margin-top:3px}
.tile .n{font-size:12px;margin-top:5px}
.up{color:var(--green)} .dn{color:var(--rust)} .wa{color:var(--amber)}
.bar{display:flex;height:32px;border-radius:5px;overflow:hidden;background:var(--line);margin-bottom:11px}
.seg{transition:width .35s;display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:600;color:#fff;overflow:hidden;white-space:nowrap}
.keys{display:flex;flex-wrap:wrap;gap:16px 26px}
.key{display:flex;align-items:baseline;gap:7px}.dot{width:9px;height:9px;border-radius:2px;flex:none}
.key b{font-size:17px;font-weight:600}.key span{color:var(--mute);font-size:12.5px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:13px}
@media(max-width:760px){.grid2{grid-template-columns:1fr}}
svg{display:block;width:100%;height:auto}
.hb{display:grid;grid-template-columns:132px 1fr 84px;gap:9px;align-items:center;margin-bottom:7px;font-size:13.5px}
.hb .track{background:var(--grid);border-radius:3px;height:19px;overflow:hidden}
.hb .fill{height:100%;border-radius:3px}
.hb .n{text-align:right;color:var(--mute);font-size:12.5px}
table{width:100%;border-collapse:collapse;font-size:13.5px}
th{text-align:right;font-weight:600;color:var(--mute);font-size:12px;padding:6px 7px;border-bottom:1px solid var(--line)}
th:first-child,td:first-child{text-align:left}
td{text-align:right;padding:4px 7px;border-bottom:1px solid var(--grid)}
td input{width:88px;font:inherit;font-size:13px;text-align:right;padding:3px 6px;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--ink);font-variant-numeric:tabular-nums}
td input:hover{border-color:var(--line)}td input:focus{border-color:var(--slate);background:var(--paper)}
tr.tot td{font-weight:600;border-top:1px solid var(--line);border-bottom:0}
.ctl{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}
.chip{border:1px solid var(--line);background:var(--card);color:var(--ink2);padding:6px 12px;border-radius:16px;font:inherit;font-size:13px;cursor:pointer}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
input[type=search],input[type=text],input[type=number]{font:inherit;padding:6px 10px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--ink)}
input[type=search]{min-width:180px;flex:1}
.count{color:var(--mute);font-size:13px;margin-left:auto}
.row{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:12px 15px;margin-bottom:7px;display:grid;grid-template-columns:1fr auto;gap:5px 16px}
.row.done{opacity:.6}
.nm{font-weight:500;line-height:1.35}
.meta{color:var(--mute);font-size:12.5px;margin-top:3px;display:flex;flex-wrap:wrap;gap:3px 11px}
.money{text-align:right;white-space:nowrap}.money b{font-size:17px;font-weight:600;display:block}.money span{color:var(--mute);font-size:12px}
.tag{display:inline-block;padding:1.5px 7px;border-radius:4px;font-size:11.5px;font-weight:500}
.t-cd,.t-df{background:var(--rust-bg);color:var(--rust)}.t-sl{background:var(--green-bg);color:var(--green)}
.t-ca{background:var(--amber-bg);color:var(--amber)}.t-sw{background:var(--amber-bg);color:var(--amber);font-weight:600}
.acts{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px 13px;align-items:center;border-top:1px solid var(--line);padding-top:9px;margin-top:2px}
label.cb{display:flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer;color:var(--ink2)}
label.cb input{width:16px;height:16px;accent-color:var(--green);cursor:pointer}
.amt{width:86px}.note{flex:1;min-width:140px}.pfx{color:var(--mute);font-size:13px}
.btn{border:1px solid var(--line);background:var(--card);color:var(--ink2);padding:7px 14px;border-radius:7px;font:inherit;font-size:13.5px;cursor:pointer}
.btn:hover{border-color:var(--slate)}
.btn.pri{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.warn{background:var(--amber-bg);color:var(--amber);border:1px solid currentColor;border-radius:8px;padding:10px 14px;font-size:13.5px;margin-bottom:13px}
.empty{text-align:center;padding:46px 20px;color:var(--mute)}
.status{color:var(--mute);font-size:12.5px;font-style:italic}
.drop{border:2px dashed var(--line);border-radius:10px;padding:28px 20px;text-align:center;color:var(--mute);cursor:pointer}
.drop.over{border-color:var(--slate);background:var(--green-bg)}
.hide{display:none}
p.note-t{color:var(--mute);font-size:13px;margin:9px 0 0;max-width:70ch}
@media(max-width:620px){.row{grid-template-columns:1fr}.money{display:flex;gap:8px;align-items:baseline;text-align:left}.money b{display:inline}.hb{grid-template-columns:96px 1fr 70px}}
.rings{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:0;
 background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:13px}
.ring{padding:22px 14px 20px;text-align:center;border-right:1px solid var(--line)}
.ring:last-child{border-right:0}
.ring svg{width:100%;max-width:152px;margin:0 auto}
.ring .rv{font-size:21px;font-weight:600;letter-spacing:-.02em}
.ring .rl{font-size:11px;color:var(--mute);letter-spacing:.06em;margin-top:6px}
.ring .rd{font-size:12.5px;font-weight:500;margin-top:3px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:11px;margin-bottom:13px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:13px 15px;
 border-bottom:3px solid var(--slate)}
.stat .sl{font-size:11.5px;color:var(--mute);letter-spacing:.05em;margin-bottom:5px}
.stat .sv{font-size:22px;font-weight:600;letter-spacing:-.02em}
.stat .sd{font-size:12px;color:var(--mute);margin-top:3px}
.pick{display:flex;gap:8px;align-items:center;margin-bottom:13px;flex-wrap:wrap}
.pick select{font:inherit;font-size:13.5px;padding:6px 10px;border:1px solid var(--line);
 border-radius:7px;background:var(--card);color:var(--ink)}
@media(max-width:700px){.ring{border-right:0;border-bottom:1px solid var(--line)}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* additions for the Flask build */
nav a{text-decoration:none}
.warn.err{border-color:var(--rust);background:var(--rust-bg);color:var(--ink)}
table.fin{width:100%;border-collapse:collapse;font-size:13.5px}
table.fin th,table.fin td{padding:6px 8px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
table.fin th:first-child,table.fin td:first-child{text-align:left}
table.fin tfoot th{border-top:2px solid var(--line);border-bottom:0;font-weight:600}
table.fin td.ro{color:var(--ink2)}
input.cell,input.acct{background:var(--paper);border:1px solid var(--line);color:var(--ink);
 border-radius:5px;padding:4px 6px;font:inherit;font-size:13px;width:100px;text-align:right}
input.acct{width:100%;text-align:left}
.cashrow{display:flex;align-items:center;gap:7px;margin-bottom:6px}
.cashrow .lbl{flex:1;background:var(--paper);border:1px solid var(--line);color:var(--ink);
 border-radius:5px;padding:5px 7px;font:inherit;font-size:13.5px}
.cashrow .x{background:none;border:0;color:var(--mute);font-size:17px;cursor:pointer;padding:0 5px}
.cashrow .x:hover{color:var(--rust)}
.tot{text-align:right;font-weight:600;font-size:16px;padding-top:9px;margin-top:5px;border-top:2px solid}
a.btn{display:inline-block;text-decoration:none}

/* removals sub-nav */
.subnav{display:flex;gap:2px;flex-wrap:wrap;margin:-6px 0 16px;
 border-bottom:1px solid var(--line);padding-bottom:0}
.subnav a{text-decoration:none;color:var(--mute);font-size:13.5px;padding:7px 12px;
 border-bottom:2px solid transparent;display:flex;align-items:center;gap:6px;white-space:nowrap}
.subnav a:hover{color:var(--ink2)}
.subnav a.on{color:var(--ink);border-bottom-color:var(--slate);font-weight:500}
.subnav a .n{background:var(--grid);color:var(--ink2);border-radius:9px;
 padding:1px 7px;font-size:11.5px;font-variant-numeric:tabular-nums}
.subnav a.on .n{background:var(--slate);color:#0d1420}

/* dropzone */
.dropzone{border:2px dashed var(--line);border-radius:10px;padding:26px 18px;
 text-align:center;color:var(--mute);cursor:pointer;transition:.12s;background:var(--paper)}
.dropzone:hover{border-color:var(--slate);color:var(--ink2)}
.dropzone.over{border-color:var(--slate);background:var(--grid);color:var(--ink)}
.dropzone b{color:var(--ink2)}
#chatlog{max-height:340px;overflow-y:auto;margin:10px 0}

/* ======================================================================
   Controls — buttons, selects, inputs
   One scale, one radius, one focus ring, so nothing looks bolted on.
   ====================================================================== */

.btn, a.btn, button.btn{
  -webkit-appearance:none;appearance:none;
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  height:34px;padding:0 14px;
  background:var(--card);color:var(--ink2);
  border:1px solid var(--line);border-radius:8px;
  font:inherit;font-size:13.5px;font-weight:500;line-height:1;
  text-decoration:none;cursor:pointer;white-space:nowrap;
  transition:background .12s,border-color .12s,color .12s,transform .06s;
}
.btn:hover{background:var(--grid);border-color:var(--slate);color:var(--ink)}
.btn:active{transform:translateY(1px)}
.btn:disabled,.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none}
.btn:disabled:hover{background:var(--card);border-color:var(--line);color:var(--ink2)}

/* the one action a page wants you to take */
.btn.primary{background:var(--slate);border-color:var(--slate);color:#0d1420;font-weight:600}
.btn.primary:hover{filter:brightness(1.1);color:#0d1420}
.btn.danger:hover{border-color:var(--rust);color:var(--rust);background:var(--rust-bg)}
.btn.sm{height:28px;padding:0 10px;font-size:12.5px;border-radius:7px}

/* Native selects render as OS widgets and look nothing like the rest of the
   page, so draw our own chevron and strip the platform styling. */
select, select.acct{
  -webkit-appearance:none;appearance:none;
  height:34px;padding:0 32px 0 11px;
  background-color:var(--paper);color:var(--ink);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5L6 8l3.5-3.5' fill='none' stroke='%237d8da0' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;
  border:1px solid var(--line);border-radius:8px;
  font:inherit;font-size:13.5px;line-height:1;cursor:pointer;
  transition:border-color .12s,background-color .12s;
}
select:hover{border-color:var(--slate)}
select option{background:var(--card);color:var(--ink)}

input[type=text],input[type=search],input[type=number],input[type=file],textarea,
input.lbl,input.amt,input.note,input.acct,input.cell,textarea.acct{
  -webkit-appearance:none;appearance:none;
  background:var(--paper);color:var(--ink);
  border:1px solid var(--line);border-radius:8px;
  padding:8px 11px;font:inherit;font-size:13.5px;
  transition:border-color .12s;
}
input[type=text]:hover,input[type=search]:hover,input[type=number]:hover,textarea:hover{
  border-color:var(--grid)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--slate);
  box-shadow:0 0 0 3px rgba(124,140,248,.16)}
input::placeholder,textarea::placeholder{color:var(--mute)}
input.cell{height:32px;padding:0 9px;text-align:right}
input.amt{height:34px;width:110px;text-align:right}

input[type=file]{padding:6px 10px;cursor:pointer;color:var(--ink2);font-size:12.5px}
input[type=file]::file-selector-button{
  -webkit-appearance:none;appearance:none;
  margin:-2px 10px -2px -4px;padding:5px 11px;
  background:var(--card);color:var(--ink2);
  border:1px solid var(--line);border-radius:6px;
  font:inherit;font-size:12.5px;cursor:pointer}
input[type=file]::file-selector-button:hover{border-color:var(--slate);color:var(--ink)}

/* filter chips */
.chip{
  -webkit-appearance:none;appearance:none;
  height:30px;padding:0 13px;
  background:transparent;color:var(--mute);
  border:1px solid var(--line);border-radius:99px;
  font:inherit;font-size:13px;cursor:pointer;
  transition:background .12s,color .12s,border-color .12s}
.chip:hover{color:var(--ink2);border-color:var(--slate)}
.chip[aria-pressed="true"]{background:var(--slate);border-color:var(--slate);
  color:#0d1420;font-weight:600}

.ctl{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.cashrow .x{width:28px;height:28px;border-radius:7px;border:1px solid transparent;
  display:inline-flex;align-items:center;justify-content:center;line-height:1}
.cashrow .x:hover{border-color:var(--rust);background:var(--rust-bg)}

/* ======================================================================
   Privacy blur — for screenshots.
   Blurs figures, not labels, so the layout still reads as a dashboard.
   ====================================================================== */
body.blurred .blurable,
body.blurred .tile .v,
body.blurred .stat .sv,
body.blurred .ring text,
body.blurred table.fin td:not(:first-child),
body.blurred table.fin th:not(:first-child),
body.blurred .money b,
body.blurred .money span,
body.blurred .tot,
body.blurred .hb .n,
body.blurred .legend span,
body.blurred .cashrow .amt,
body.blurred input.cell,
body.blurred .mono{
  filter:blur(6px);
  user-select:none;
  transition:filter .15s;
}
/* Charts are shapes, not numbers, but the axis values give it away. */
body.blurred svg text{filter:blur(5px)}
body.blurred .row .nm,
body.blurred .box-label{filter:blur(5px)}

#blurtoggle{
  position:fixed;right:16px;bottom:16px;z-index:50;
  height:36px;padding:0 14px;
  background:var(--card);color:var(--mute);
  border:1px solid var(--line);border-radius:99px;
  font:inherit;font-size:13px;cursor:pointer;
  box-shadow:0 4px 14px rgba(0,0,0,.35);
  display:inline-flex;align-items:center;gap:7px}
#blurtoggle:hover{color:var(--ink);border-color:var(--slate)}
body.blurred #blurtoggle{background:var(--slate);color:#0d1420;
  border-color:var(--slate);font-weight:600}
