/* ────────────────────────────────────────────────────────────────────────
 * dash-theme.css — shared design tokens + layout primitives for the
 * nova-core dashboard. Ported from sibling pika-data dashboard.
 *
 * Adoption: each page should
 *   <link rel="stylesheet" href="/assets/dash-theme.css">
 * and stop redeclaring its own :root { --bg, --surface, ... } block.
 * ──────────────────────────────────────────────────────────────────────── */

/* ── Telka — mirrors pika-data ───────────────────────────────────────── */
@font-face { font-family: 'Telka'; font-weight: 300; font-style: normal; font-display: swap; src: url('/assets/fonts/telka/Telka-Light.woff2') format('woff2'); }
@font-face { font-family: 'Telka'; font-weight: 400; font-style: normal; font-display: swap; src: url('/assets/fonts/telka/Telka-Regular.woff2') format('woff2'); }
@font-face { font-family: 'Telka'; font-weight: 500; font-style: normal; font-display: swap; src: url('/assets/fonts/telka/Telka-Medium.woff2') format('woff2'); }
@font-face { font-family: 'Telka'; font-weight: 700; font-style: normal; font-display: swap; src: url('/assets/fonts/telka/Telka-Bold.woff2') format('woff2'); }
@font-face { font-family: 'Telka'; font-weight: 800; font-style: normal; font-display: swap; src: url('/assets/fonts/telka/Telka-Super.woff2') format('woff2'); }
@font-face { font-family: 'Telka'; font-weight: 900; font-style: normal; font-display: swap; src: url('/assets/fonts/telka/Telka-Black.woff2') format('woff2'); }
@font-face { font-family: 'Telka Extended'; font-weight: 300; font-style: normal; font-display: swap; src: url('/assets/fonts/telka-extended/Telka-Extended-Light.woff2') format('woff2'); }
@font-face { font-family: 'Telka Extended'; font-weight: 400; font-style: normal; font-display: swap; src: url('/assets/fonts/telka-extended/Telka-Extended-Regular.woff2') format('woff2'); }
@font-face { font-family: 'Telka Extended'; font-weight: 500; font-style: normal; font-display: swap; src: url('/assets/fonts/telka-extended/Telka-Extended-Medium.woff2') format('woff2'); }
@font-face { font-family: 'Telka Extended'; font-weight: 700; font-style: normal; font-display: swap; src: url('/assets/fonts/telka-extended/Telka-Extended-Bold.woff2') format('woff2'); }
@font-face { font-family: 'Telka Extended'; font-weight: 800; font-style: normal; font-display: swap; src: url('/assets/fonts/telka-extended/Telka-Extended-Super.woff2') format('woff2'); }
@font-face { font-family: 'Telka Extended'; font-weight: 900; font-style: normal; font-display: swap; src: url('/assets/fonts/telka-extended/Telka-Extended-Black.woff2') format('woff2'); }

:root {
  /* Surface palette */
  --bg:        #FCFAF7;
  --surface:   #FFFFFF;
  --surface-2: #FAF5ED;
  --border:    rgba(0,0,0,0.08);
  --ring:      rgba(0,0,0,0.06);

  /* Text palette */
  --text:  #0D0D0D;
  --muted: #6E6D6B;
  --dim:   #9CA3AF;

  /* Accent (lavender) */
  --accent:      #C4B6FF;
  --accent-bg:   #F0EEFF;
  --accent-text: #6B4FCC;

  /* Charts — mirror pika-data exactly */
  --chart-1: #CFC3FF;  /* lavender — web / primary */
  --chart-2: #9B85FF;  /* deeper lavender — iOS / secondary */
  --chart-3: #16A34A;  /* green    — tertiary / free / "good" */
  --chart-4: #DC2626;  /* red      — destructive */
  --chart-5: #F4D58D;  /* warm yellow — neutral fifth */
  --chart-6: #60A5FA;  /* blue — extra sixth series */
  --grid:    #F4EDDF;

  /* Status */
  --good: #16A34A;
  --warn: #D97706;
  --bad:  #DC2626;

  /* Geometry */
  --radius:    12px;
  --radius-sm: 8px;
  --radius-lg: 16px;

  /* Sidebar */
  --sidebar-w: 232px;
}

[data-theme="dark"] {
  --bg:        #0D0D0D;
  --surface:   #1A1A1A;
  --surface-2: #141414;
  --border:    rgba(255,255,255,0.08);
  --ring:      rgba(255,255,255,0.06);

  --text:  #FFFFFF;
  --muted: #8A8784;
  --dim:   #555555;

  --accent:      #C4B6FF;
  --accent-bg:   #2D1F5E;
  --accent-text: #C4B6FF;

  --chart-1: #CFC3FF;
  --chart-2: #9B85FF;
  --chart-3: #22C55E;
  --chart-4: #F87171;
  --chart-5: #F4D58D;
  --chart-6: #60A5FA;
  --grid:    #222222;
}

/* ── Body / typography base ──────────────────────────────────────────── */
html, body { background: var(--bg); color: var(--text); }
body {
  font-family: 'Telka', system-ui, -apple-system, sans-serif;
  font-size: 14px;
  line-height: 1.45;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: 'cv11', 'ss01';
  letter-spacing: -0.005em;
}

/* Typography utility classes (mirror pika-data) */
.label-mono {
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}
.value-display {
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 28px;
  font-weight: 500;
  letter-spacing: -0.5px;
  line-height: 1.1;
  color: var(--text);
}
.sub-mono {
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 12px;
  font-weight: 400;
  color: var(--muted);
}
.chart-title {
  font-family: 'Telka Extended', 'Telka', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text);
}
.section-title {
  font-family: 'Telka Extended', 'Telka', system-ui, sans-serif;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--text);
  margin: 8px 0 0;
}

/* ── App shell (sidebar + content) ───────────────────────────────────── */
.app-shell {
  display: grid;
  grid-template-columns: var(--sidebar-w) 1fr;
  min-height: 100vh;
  align-items: stretch;
}
.app-main {
  min-width: 0; /* enables children to shrink in grid */
  padding: 20px 28px 40px;
}
@media (max-width: 900px) {
  .app-shell { grid-template-columns: 1fr; }
  .app-main  { padding: 12px 14px 28px; }
}

/* ── KPI grid: max 4 per row ─────────────────────────────────────────── */
.kpi-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  margin: 12px 0 20px;
}
@media (max-width: 1240px) { .kpi-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 560px)  { .kpi-grid { grid-template-columns: 1fr; } }

.kpi-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 14px 16px 16px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: 0 1px 0 var(--ring);
  min-width: 0;
}
.kpi-card__label { /* alias of .label-mono */
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.kpi-card__value {
  font-size: 26px;
  font-weight: 500;
  letter-spacing: -0.5px;
  line-height: 1.1;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.kpi-card__deltas {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: baseline;
}
.kpi-card__delta {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 11px;
  color: var(--muted);
}
.kpi-card__delta-label {
  font-size: 9.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--dim);
}
.kpi-card__delta-value { font-variant-numeric: tabular-nums; font-weight: 500; }
.kpi-card__delta-value.up   { color: var(--good); }
.kpi-card__delta-value.down { color: var(--bad);  }
.kpi-card__delta-value.flat { color: var(--muted); }
.kpi-card__sub {
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ── Trend chart grid: 2 per row ─────────────────────────────────────── */
.chart-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}
.chart-wide { grid-column: 1 / -1; }
@media (max-width: 980px) { .chart-grid { grid-template-columns: 1fr; } }

.chart-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 16px 16px 12px;
  box-shadow: 0 1px 0 var(--ring);
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-width: 0;
}
.chart-card__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}
.chart-card__titles { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.chart-card__title { /* .chart-title scale, but tighter */
  font-family: 'Telka Extended', 'Telka', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text);
}
.chart-card__desc {
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 11px;
  color: var(--muted);
}
.chart-card__range {
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text);
  border-radius: var(--radius-sm);
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 11px;
  padding: 5px 10px 5px 8px;
  cursor: pointer;
}
.chart-card__legend {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 14px;
  padding: 0 2px;
}
.chart-legend-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  font-family: 'Telka', system-ui, sans-serif;
  font-size: 11px;
  color: var(--muted);
  transition: opacity .15s;
}
.chart-legend-chip[aria-pressed="false"] { opacity: 0.4; }
.chart-legend-chip__swatch {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 2px;
}
.chart-card__canvas-wrap {
  position: relative;
  height: 220px;
}
.chart-card__canvas-wrap.tall { height: 280px; }
.chart-card__canvas-wrap canvas { width: 100% !important; height: 100% !important; }

/* ── Section helpers ─────────────────────────────────────────────────── */
.dash-section { margin: 20px 0 28px; }
.dash-section__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 6px 0 10px;
}
.dash-section__desc { font-family: 'Telka', system-ui, sans-serif; font-size: 11px; color: var(--muted); }
