/* Tracker - design tokens (Wise-inspired layout, own palette: deep teal + amber) */
:root {
  --bg: #F8FAFC; --bg-2: #FFFFFF; --bg-3: #EEF2F7; --fg: #0F172A; --fg-2: #334155; --muted: #64748B;
  --line: #E2E8F0; --accent: #0F766E; --accent-2: #0D9488; --accent-soft: #CCFBF1;
  --pos: #15803D; --neg: #B91C1C; --amber: #D97706; --amber-soft: #FEF3C7; --banner: #D97706;
  --shadow: 0 1px 2px rgba(15,23,42,.06), 0 8px 24px rgba(15,23,42,.06);
  --radius: 18px; --radius-s: 12px; --tab-h: 64px;
  --sat: env(safe-area-inset-top, 0px); --sab: env(safe-area-inset-bottom, 0px);
  color-scheme: light;
}
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --bg: #0F172A; --bg-2: #162238; --bg-3: #1E293B; --fg: #F1F5F9; --fg-2: #CBD5E1; --muted: #94A3B8; --line: #26354D; --accent: #14B8A6; --accent-2: #2DD4BF; --accent-soft: #134E4A; --pos: #4ADE80; --neg: #F87171; --amber: #FBBF24; --amber-soft: #3B2F12; --banner: #B45309; --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.25); color-scheme: dark; } }
:root[data-theme="dark"] { --bg: #0F172A; --bg-2: #162238; --bg-3: #1E293B; --fg: #F1F5F9; --fg-2: #CBD5E1; --muted: #94A3B8; --line: #26354D; --accent: #14B8A6; --accent-2: #2DD4BF; --accent-soft: #134E4A; --pos: #4ADE80; --neg: #F87171; --amber: #FBBF24; --amber-soft: #3B2F12; --banner: #B45309; --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.25); color-scheme: dark; }

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; background: var(--bg); color: var(--fg); font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; font-size: 16px; line-height: 1.45; -webkit-font-smoothing: antialiased; }
a { color: var(--accent); text-decoration: none; }
h1, h2, h3 { margin: 0 0 .5rem; letter-spacing: -.01em; }
h1 { font-size: 1.5rem; } h2 { font-size: 1.15rem; } h3 { font-size: 1rem; }
code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .9em; background: var(--bg-3); padding: .1em .35em; border-radius: 6px; }
.num, td, .kpi { font-variant-numeric: tabular-nums; }
.muted { color: var(--muted); } .small { font-size: .85rem; } .tiny { font-size: .75rem; }
.pos { color: var(--pos); } .neg { color: var(--neg); } .amber { color: var(--amber); }
.center { text-align: center; } .right { text-align: right; } .huge { font-size: 3rem; }
.row { display: flex; gap: .75rem; align-items: center; flex-wrap: wrap; } .between { justify-content: space-between; }
.stack { display: grid; gap: 1rem; }
.grid-2 { display: grid; gap: 1rem; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-3 { display: grid; gap: 1rem; grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 480px) { .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* layout */
.page { padding: calc(1rem + var(--sat)) 1rem calc(var(--tab-h) + var(--sab) + 1.5rem); max-width: 1180px; margin: 0 auto; }
.page-auth { display: grid; place-items: center; min-height: 100dvh; padding-bottom: 1rem; }
.sidenav { display: none; }
.tabbar { position: fixed; left: 0; right: 0; bottom: 0; height: calc(var(--tab-h) + var(--sab)); padding-bottom: var(--sab); background: color-mix(in srgb, var(--bg-2) 92%, transparent); backdrop-filter: saturate(160%) blur(14px); -webkit-backdrop-filter: saturate(160%) blur(14px); border-top: 1px solid var(--line); display: grid; grid-template-columns: repeat(4, 1fr); z-index: 20; }
.tabbar a { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; min-height: 44px; color: var(--muted); font-size: .72rem; font-weight: 600; }
.tabbar a svg, .sidenav a svg { width: 24px; height: 24px; }
.tabbar a.active { color: var(--accent); }
@media (min-width: 900px) {
  body { display: grid; grid-template-columns: 240px 1fr; }
  .tabbar { display: none; }
  .sidenav { display: flex; flex-direction: column; gap: .25rem; padding: 1.5rem 1rem; border-right: 1px solid var(--line); background: var(--bg-2); min-height: 100dvh; position: sticky; top: 0; align-self: start; }
  .sidenav a { display: flex; align-items: center; gap: .75rem; padding: .7rem .9rem; border-radius: var(--radius-s); color: var(--fg-2); font-weight: 600; min-height: 44px; }
  .sidenav a.active { background: var(--accent-soft); color: var(--accent); }
  .sidenav .brand { font-size: 1.2rem; margin-bottom: 1rem; color: var(--fg); }
  .sidenav-foot { margin-top: auto; display: grid; gap: .5rem; padding-top: 1rem; }
  .page { padding: 2rem 2.5rem 3rem; }
}
.brand { display: inline-flex; align-items: center; gap: .6rem; font-weight: 700; }
.brand.big { font-size: 1.6rem; }
.brand-mark { width: 26px; height: 26px; border-radius: 8px; background: var(--accent); display: inline-block; position: relative; }
.brand-mark::after { content: ""; position: absolute; left: 7px; top: 13px; width: 12px; height: 6px; border-left: 3px solid #fff; border-bottom: 3px solid #fff; transform: rotate(-45deg); }

/* cards */
.card { background: var(--bg-2); border-radius: var(--radius); box-shadow: var(--shadow); padding: 1.1rem 1.15rem; border: 1px solid color-mix(in srgb, var(--line) 60%, transparent); }
.card.tight { padding: .85rem .95rem; }
.card h2, .card h3 { margin-bottom: .6rem; }
.kpi { font-size: 2.2rem; font-weight: 700; letter-spacing: -.02em; line-height: 1.1; }
.kpi.small { font-size: 1.35rem; }
.kpi-label { color: var(--muted); font-size: .8rem; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; }
.hero { display: grid; gap: .4rem; }
.hero .delta { display: flex; gap: 1rem; flex-wrap: wrap; font-weight: 600; }
.auth-card { width: min(100%, 400px); display: grid; gap: .75rem; }

/* chips, badges, buttons */
.chip { display: inline-flex; align-items: center; gap: .35rem; padding: .45rem .85rem; border-radius: 999px; border: 1px solid var(--line); background: var(--bg-2); color: var(--fg-2); font: inherit; font-size: .85rem; font-weight: 600; cursor: pointer; min-height: 36px; white-space: nowrap; }
.chip.on, .chip:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
.chip-toggle { background: var(--accent); color: #fff; border-color: var(--accent); }
.chip-toggle:hover { color: #fff; background: var(--accent-2); }
.chips { display: flex; gap: .5rem; overflow-x: auto; padding: .25rem 0 .5rem; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.chips::-webkit-scrollbar { display: none; }
.badge { display: inline-block; padding: .1rem .5rem; border-radius: 999px; font-size: .72rem; font-weight: 600; background: var(--bg-3); color: var(--fg-2); white-space: nowrap; }
.badge.ok { background: color-mix(in srgb, var(--pos) 18%, transparent); color: var(--pos); }
.badge.warn, .badge.flag { background: var(--amber-soft); color: var(--amber); }
.badge.err { background: color-mix(in srgb, var(--neg) 18%, transparent); color: var(--neg); }
.badge.gate { background: var(--amber); color: #fff; }
.badge.src-bron { background: color-mix(in srgb, var(--pos) 18%, transparent); color: var(--pos); }
.badge.src-vuistregel { background: var(--amber-soft); color: var(--amber); }
.badge.src-aanname { background: var(--bg-3); color: var(--muted); }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: .4rem; min-height: 44px; padding: .6rem 1.1rem; border-radius: var(--radius-s); border: 1px solid var(--line); background: var(--bg-2); color: var(--fg); font: inherit; font-weight: 600; cursor: pointer; }
.btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn.amber { background: var(--amber); border-color: var(--amber); color: #fff; }
.btn.danger { color: var(--neg); }
.btn.wide { width: 100%; }
.btn.sm { min-height: 36px; padding: .35rem .75rem; font-size: .85rem; }
.btn:disabled { opacity: .5; cursor: default; }

/* forms */
.form { display: grid; gap: .9rem; }
.form label, .field { display: grid; gap: .3rem; font-size: .9rem; font-weight: 600; color: var(--fg-2); }
.form input, .form select, .form textarea, input.inp, select.inp { font: inherit; padding: .7rem .85rem; border-radius: var(--radius-s); border: 1px solid var(--line); background: var(--bg); color: var(--fg); min-height: 44px; width: 100%; }
.form textarea { min-height: 90px; }
.form .inline { display: flex; align-items: center; gap: .6rem; flex-direction: row; }
.form .inline input[type=checkbox] { width: 22px; height: 22px; min-height: 0; }
.form-grid { display: grid; gap: .9rem; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.help { color: var(--muted); font-weight: 400; font-size: .8rem; }

/* flashes */
.flashes { display: grid; gap: .5rem; margin-bottom: 1rem; }
.flash { padding: .75rem 1rem; border-radius: var(--radius-s); background: var(--bg-3); font-size: .9rem; }
.flash-success { background: color-mix(in srgb, var(--pos) 14%, transparent); }
.flash-error { background: color-mix(in srgb, var(--neg) 14%, transparent); }
.flash-warning { background: var(--amber-soft); }

/* banner */
.banner { background: var(--banner); color: #fff; border-radius: var(--radius); padding: 1rem 1.15rem; display: grid; gap: .5rem; }
.banner a { color: #fff; text-decoration: underline; }

/* tables */
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--radius-s); border: 1px solid var(--line); background: var(--bg-2); }
table { border-collapse: separate; border-spacing: 0; width: 100%; font-size: .85rem; }
th, td { padding: .55rem .6rem; text-align: right; white-space: nowrap; border-bottom: 1px solid var(--line); }
th { position: sticky; top: 0; background: var(--bg-3); color: var(--muted); font-weight: 600; font-size: .72rem; text-transform: uppercase; letter-spacing: .03em; z-index: 2; }
th:first-child, td:first-child { text-align: left; position: sticky; left: 0; background: var(--bg-2); z-index: 1; max-width: 220px; overflow: hidden; text-overflow: ellipsis; }
th:first-child { background: var(--bg-3); z-index: 3; }
tr.gate td:first-child { box-shadow: inset 4px 0 0 var(--amber); }
tr.held td:first-child { font-weight: 600; }
tr.clickable { cursor: pointer; }
tr.clickable:hover td { background: var(--bg-3); }
td.muted-val { color: var(--muted); }
tbody tr:last-child td { border-bottom: 0; }
.compact td, .compact th { padding: .4rem .5rem; }

/* list */
.list { display: grid; }
.list-item { display: flex; justify-content: space-between; gap: .75rem; padding: .7rem 0; border-bottom: 1px solid var(--line); align-items: center; min-height: 44px; }
.list-item:last-child { border-bottom: 0; }
.list-item .main { display: grid; gap: .1rem; min-width: 0; }
.list-item .main strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* waterfall & charts */
.chart-box { position: relative; height: 280px; }
.chart-box canvas { max-width: 100%; }
@media (min-width: 900px) { .chart-box { height: 340px; } }
.seg { display: inline-flex; border: 1px solid var(--line); border-radius: 999px; overflow: hidden; }
.seg button { font: inherit; font-size: .85rem; font-weight: 600; padding: .45rem .9rem; background: var(--bg-2); color: var(--fg-2); border: 0; cursor: pointer; min-height: 36px; }
.seg button.on { background: var(--accent); color: #fff; }

/* calendar grid */
.cal-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: .5rem; }
@media (min-width: 900px) { .cal-grid { grid-template-columns: repeat(12, 1fr); } }
.cal-month { display: grid; gap: .3rem; justify-items: center; padding: .5rem .25rem; border-radius: var(--radius-s); border: 1px solid var(--line); background: var(--bg-2); color: inherit; min-height: 44px; }
.cal-month.current { border-color: var(--accent); }
.cal-month.selected { background: var(--accent-soft); }
.cal-month.thin .cal-amt { color: var(--amber); }
.cal-bar { width: 100%; height: 56px; display: flex; align-items: flex-end; gap: 2px; justify-content: center; }
.cal-bar span { display: block; width: 30%; border-radius: 3px 3px 0 0; }
.cal-bar .usd { background: var(--accent); } .cal-bar .eur { background: var(--accent-2); opacity: .6; } .cal-bar .tot { background: var(--fg-2); opacity: .35; }
.cal-amt { font-size: .72rem; font-weight: 600; }
.cal-name { font-size: .72rem; color: var(--muted); text-transform: uppercase; }
.legend { display: flex; gap: 1rem; flex-wrap: wrap; font-size: .78rem; color: var(--muted); }
.legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: .3rem; vertical-align: middle; }

/* sheet */
.sheet[hidden] { display: none; }
.sheet { position: fixed; inset: 0; z-index: 50; }
.sheet-backdrop { position: absolute; inset: 0; background: rgba(15,23,42,.45); }
.sheet-panel { position: absolute; left: 0; right: 0; bottom: 0; max-height: 88dvh; overflow: auto; background: var(--bg-2); border-radius: 22px 22px 0 0; padding: .5rem 1.15rem calc(1.5rem + var(--sab)); box-shadow: var(--shadow); animation: up .22s ease-out; }
@media (min-width: 900px) { .sheet-panel { left: 50%; right: auto; top: 50%; bottom: auto; transform: translate(-50%, -50%); width: min(720px, 92vw); border-radius: var(--radius); max-height: 85vh; animation: none; } }
.sheet-grip { width: 44px; height: 5px; border-radius: 3px; background: var(--line); margin: .4rem auto .9rem; }
@keyframes up { from { transform: translateY(30px); opacity: .6; } to { transform: none; opacity: 1; } }
.sheet-head { display: flex; justify-content: space-between; align-items: start; gap: 1rem; }

/* misc */
.section { margin-top: 1.5rem; }
.section-head { display: flex; justify-content: space-between; align-items: center; gap: .75rem; margin-bottom: .6rem; flex-wrap: wrap; }
details summary { cursor: pointer; font-weight: 600; min-height: 44px; display: flex; align-items: center; }
.kv { display: grid; grid-template-columns: auto 1fr; gap: .25rem 1rem; font-size: .9rem; }
.kv dt { color: var(--muted); } .kv dd { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }
.bar-h { height: 8px; border-radius: 4px; background: var(--bg-3); overflow: hidden; }
.bar-h span { display: block; height: 100%; background: var(--accent); }
.nowrap { white-space: nowrap; }
input[type=range] { width: 100%; accent-color: var(--accent); min-height: 44px; }
.htmx-request .spinner, .spinner.on { display: inline-block; }
.spinner { display: none; width: 16px; height: 16px; border: 2px solid var(--line); border-top-color: var(--accent); border-radius: 50%; animation: spin .8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
pre.log { font-size: .75rem; white-space: pre-wrap; word-break: break-word; background: var(--bg-3); padding: .75rem; border-radius: var(--radius-s); max-height: 50vh; overflow: auto; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
