/* FlowBudget — award-level polish */
:root{
  --bg:#070b12;
  --panel:#0f1625;
  --panel-2:#0d1320;
  --line:#1c2741;
  --muted:#9ab0c6;
  --text:#f2f6fb;
  --primary:#2dd4bf; /* mint */
  --accent:#60a5fa;  /* light blue */
  --magenta:#d946ef;
  --warn:#f59e0b;
  --danger:#ef4444;
  --good:#22c55e;
  --font: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  background: radial-gradient(1200px 800px at 10% -10%, #0b142b 0%, rgba(7,11,18,0) 70%) , var(--bg);
  color:var(--text); font-family:var(--font); -webkit-font-smoothing:antialiased;
}

.bg-orbs .orb{position:fixed; border-radius:50%; filter:blur(60px); opacity:.4; z-index:-2}
.orb-a{ width:380px;height:380px;background:radial-gradient(circle,#60a5fa,transparent 60%); top:-60px; left:-60px }
.orb-b{ width:420px;height:420px;background:radial-gradient(circle,#2dd4bf,transparent 60%); bottom:-120px; right:-120px }
.orb-c{ width:320px;height:320px;background:radial-gradient(circle,#d946ef,transparent 60%); top:40%; left:60% }
.gridlines{ position:fixed; inset:0; background-image: linear-gradient(to right, rgba(255,255,255,.04) 1px, transparent 1px),
             linear-gradient(to bottom, rgba(255,255,255,.04) 1px, transparent 1px);
            background-size: 60px 60px; mask-image: radial-gradient(circle at 20% 10%, black, transparent 70%);
            z-index:-3; }

.app-shell{max-width:1200px;margin:0 auto;padding:16px;}

.topbar{
  display:flex;align-items:center;justify-content:space-between;padding:12px 0 18px 0;
}
.brand{display:flex;align-items:center;gap:10px}
.logo{
  width:36px;height:36px;border-radius:10px;background:linear-gradient(160deg,var(--accent),var(--magenta));
  display:grid;place-items:center;font-weight:800;color:#06121a; box-shadow:0 8px 24px rgba(0,0,0,.35);
}
.topbar h1{font-size:1.4rem;margin:0}
.month-switcher{display:flex;align-items:center;gap:8px}
.current-month{min-width:170px;text-align:center;font-weight:700}
.pill{border-radius:999px;border:1px solid var(--line);padding:10px 14px;background:rgba(255,255,255,.04);color:var(--text);cursor:pointer}
.ghost{background:transparent}
.pill:hover{background:rgba(255,255,255,.08)}

.actions-right{display:flex;gap:8px}

.grid{display:grid; grid-template-columns: 1.05fr 1.55fr auto; gap:16px; align-items:start;}
.left-col, .right-col{display:flex;flex-direction:column;gap:16px}
.panel{
  background:linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,.02));
  border:1px solid var(--line);
  border-radius:18px;padding:16px;box-shadow:0 20px 50px rgba(0,0,0,.4), inset 0 0 0 1px rgba(255,255,255,.04);
}
.hifi{backdrop-filter: blur(10px);}
.panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.text-btn{background:none;border:none;color:var(--accent);font-weight:700;cursor:pointer}

.budget-cards{display:grid;grid-template-columns: repeat(3,1fr); gap:12px;margin-top:8px}
.card{background:rgba(255,255,255,.04);padding:12px;border-radius:14px;border:1px solid var(--line)}
.card .label{font-size:.8rem;color:var(--muted)}
.card .value{font-weight:800;font-size:1.25rem;margin-top:4px}
.card.ok .value{color:var(--good)}

.progress-wrap{display:flex;align-items:center;gap:18px;margin-top:10px}
.ring{position:relative;display:grid;place-items:center}
.ring .track{fill:none;stroke:#23324c;stroke-width:10}
.ring .progress{fill:none;stroke:url(#grad);stroke-width:10;stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;stroke-dasharray:327;stroke-dashoffset:327}
.ring-center{position:absolute;display:flex;flex-direction:column;align-items:center;font-weight:800}
.ring-center .small{font-size:.8rem;color:var(--muted)}
.legend{display:flex;flex-direction:column;gap:6px}
.pill.tiny{padding:4px 8px;border-radius:999px;border:1px solid var(--line);font-size:.75rem}
.primary{background:linear-gradient(180deg,var(--primary),#11bfb0);border:none;color:#05221b;font-weight:800}
.accent{background:linear-gradient(180deg,var(--accent),#2b74ff);border:none;color:#041222;font-weight:800}

.categories-list{display:flex;flex-direction:column;gap:10px;margin-bottom:10px}
.cat-row{
  display:grid; grid-template-columns: 1.2fr 1fr auto; gap:10px; align-items:center;
}
.plan-actual{display:grid;grid-template-columns: 1fr auto auto auto; gap:8px; align-items:center}
.cat-row input{
  width:100%; background:var(--panel-2);border:1px solid var(--line);color:var(--text);
  border-radius:12px; padding:12px 12px; font-size:.95rem;
}
.cat-actual{color:#b9ffde;font-weight:800;text-align:right}
.small{padding:8px 10px;border-radius:12px;border:1px solid #3b2330;background:rgba(255,255,255,.02);color:#ffc7cf;cursor:pointer}
.small.danger:hover{background:#3b0f13}

.chart-wrap{background:var(--panel-2);border:1px dashed var(--line);border-radius:14px;height:220px;display:flex;align-items:center;justify-content:center;overflow:hidden}

.capture h2{margin-bottom:8px}
.quick-form{display:grid;grid-template-columns: repeat(4, 1fr); gap:12px;}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font-size:.8rem;color:var(--muted)}
.field input, .field select{
  background:var(--panel-2);border:1px solid var(--line);color:var(--text);
  border-radius:12px;padding:12px 14px;font-size:1rem;outline:none;
}
.hint{font-size:.8rem;color:var(--muted);min-height:18px}

.upload-row{grid-column:1 / -1; display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.chip.upload{border:1px dashed var(--line);background:rgba(255,255,255,.02);padding:10px 12px;border-radius:999px;cursor:pointer}
.thumbs{display:flex;gap:8px;align-items:center}
.thumbs img{height:44px;width:44px;object-fit:cover;border-radius:10px;border:1px solid var(--line)}

.actions{grid-column:1 / -1;display:flex;gap:10px;flex-wrap:wrap}
.pill.primary,.pill.ghost{padding:12px 16px}

.table-wrap{overflow:auto;max-height:46vh;border-radius:12px;border:1px solid var(--line)}
table{width:100%;border-collapse:collapse}
thead th{position:sticky;top:0;background:#0e1628;border-bottom:1px solid var(--line);padding:12px;text-align:left;font-weight:700;color:#cfe3ff}
tbody td{border-bottom:1px solid var(--line);padding:10px;color:#e3eaf3}
.num{text-align:right}
tbody tr:hover{background:rgba(255,255,255,.03)}
.search{background:var(--panel-2);border:1px solid var(--line);color:#e6f0ff;border-radius:10px;padding:10px 12px}

.action-rail{position:sticky; top:24px; display:flex;flex-direction:column;gap:12px; padding:10px;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:14px;align-self:start}
.fab{width:52px;height:52px;border-radius:16px;border:1px solid var(--line);background:linear-gradient(180deg,#111a2b,#0d1425);color:#cfe3ff;cursor:pointer;font-size:20px;box-shadow:0 10px 24px rgba(0,0,0,.35)}
.fab:hover{transform:translateY(-1px)}

.toast{position:fixed; bottom:24px; left:50%; transform:translateX(-50%) translateY(20px); background:#0c1627; color:#e6f0ff; border:1px solid var(--line); padding:10px 14px; border-radius:12px; opacity:0; transition:.2s ease; box-shadow:0 10px 30px rgba(0,0,0,.5)}
.toast.show{opacity:1; transform:translateX(-50%) translateY(0)}

@media (max-width: 980px){
  .grid{grid-template-columns: 1fr}
  .action-rail{order:-1;flex-direction:row;position:static;justify-content:flex-end}
  .table-wrap{max-height:50vh}
}
