/* ==========================================================================
   Gambooza · hoja de estilo para documentos y páginas generadas
   https://gambooza-design.web.app/gambooza.css
   Incluye los tokens (tokens.css) + tipografía base + un conjunto ACOTADO de
   primitivas con prefijo .gz-. No hay más componentes que estos; si un
   documento necesita algo que no está aquí, se compone con estos, no se inventa.
   Guía de uso: https://gambooza-design.web.app/DESIGN.md
   ========================================================================== */
@import url("https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;800&family=Fira+Sans:wght@400;500;600;700&display=swap");
@import url("tokens.css");

/* --- Base ------------------------------------------------------------------ */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--gz-bg);
  color: var(--gz-ink);
  font-family: var(--gz-font-body);
  font-size: var(--gz-text-body);
  line-height: var(--gz-leading-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
h1, h2, h3, h4 {
  font-family: var(--gz-font-head);
  font-weight: 700;
  line-height: var(--gz-leading-head);
  letter-spacing: var(--gz-tracking-head);
  color: var(--gz-ink);
  margin: 0 0 var(--gz-space-3);
  text-wrap: balance;
}
h1 { font-size: var(--gz-text-h1); }
h2 { font-size: var(--gz-text-h2); margin-top: var(--gz-space-7); }
h3 { font-size: var(--gz-text-h3); font-weight: 600; margin-top: var(--gz-space-5); }
h4 { font-size: var(--gz-text-body); font-weight: 600; margin-top: var(--gz-space-4); }
h2:first-child, h3:first-child { margin-top: 0; }
p, ul, ol { margin: 0 0 var(--gz-space-4); max-width: 68ch; }
li { margin-bottom: var(--gz-space-1); }
a { color: var(--gz-good-strong); text-decoration: underline; text-underline-offset: 2px; }
a:hover { color: var(--gz-ink); }
strong { font-weight: 600; }
small, .gz-small { font-size: var(--gz-text-small); }
code, kbd, pre { font-family: var(--gz-font-mono); font-size: 0.9em; }
code { background: var(--gz-surface-2); padding: 1px 5px; border-radius: 4px; }
pre { background: var(--gz-surface-2); padding: var(--gz-space-4); border-radius: var(--gz-radius-sm); overflow-x: auto; }
img, video { max-width: 100%; height: auto; }
hr, .gz-divider { border: 0; border-top: 1px solid var(--gz-border); margin: var(--gz-space-6) 0; }
:focus-visible { outline: none; box-shadow: var(--gz-focus); border-radius: 4px; }

/* --- Layout ---------------------------------------------------------------- */
/* .gz-page: envoltorio de un DOCUMENTO (informe, propuesta, nota). Ancho 880. */
.gz-page {
  max-width: var(--gz-measure);
  margin: 0 auto;
  padding: var(--gz-space-6) var(--gz-space-5) var(--gz-space-8);
}
.gz-page--wide { max-width: var(--gz-measure-wide); }   /* dashboards, apps */
.gz-section { margin-top: var(--gz-space-7); }
.gz-section > h2 { margin-top: 0; }
.gz-grid { display: grid; gap: var(--gz-space-4); grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.gz-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.gz-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gz-stack { display: flex; flex-direction: column; gap: var(--gz-space-4); }
.gz-row { display: flex; flex-wrap: wrap; gap: var(--gz-space-3); align-items: center; }
.gz-muted { color: var(--gz-ink-muted); }
.gz-caption { font-size: var(--gz-text-caption); color: var(--gz-ink-muted); line-height: 1.4; margin: var(--gz-space-2) 0 0; }
.gz-eyebrow {
  font-family: var(--gz-font-body); font-size: var(--gz-text-caption); font-weight: 600;
  letter-spacing: 0.08em; text-transform: uppercase; color: var(--gz-ink-muted); margin: 0 0 var(--gz-space-2);
}
.gz-lead { font-size: var(--gz-text-h3); font-family: var(--gz-font-head); font-weight: 500; letter-spacing: -0.01em; line-height: 1.35; max-width: 60ch; }

/* --- Cabecera de documento --------------------------------------------------- */
.gz-header {
  display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--gz-space-4);
  padding-bottom: var(--gz-space-5); margin-bottom: var(--gz-space-6);
  border-bottom: 1px solid var(--gz-border);
}
/* El bloque de título se lleva el ancho sobrante y la marca queda a la derecha en la
   misma fila aunque el h1 sea largo; solo baja de fila por debajo de ~560 px. */
.gz-header > :first-child { flex: 1 1 360px; min-width: 0; }
.gz-header > .gz-brand { flex: none; }
.gz-header h1 { margin: 0 0 var(--gz-space-2); font-size: var(--gz-text-display); line-height: var(--gz-leading-tight); }
.gz-header .gz-meta { font-size: var(--gz-text-small); color: var(--gz-ink-muted); }
.gz-header .gz-meta span + span::before { content: "·"; margin: 0 var(--gz-space-2); }
.gz-brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; color: var(--gz-ink); }
.gz-brand img, .gz-brand svg { width: 36px; height: 36px; flex: none; }
.gz-wordmark { font-family: var(--gz-font-head); font-weight: 700; font-size: 1.25rem; letter-spacing: -0.02em; line-height: 1; }

/* --- Cifras clave (stat strip) ------------------------------------------------ */
.gz-stats {
  display: grid; gap: var(--gz-space-3);
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  margin: var(--gz-space-5) 0;
}
.gz-stat {
  background: var(--gz-white); border: 1px solid var(--gz-border); border-radius: var(--gz-radius);
  padding: var(--gz-space-4) var(--gz-space-4) var(--gz-space-3);
  box-shadow: var(--gz-shadow-sm);
}
.gz-stat .gz-stat-label { font-size: var(--gz-text-caption); font-weight: 600; color: var(--gz-ink-muted); margin: 0 0 var(--gz-space-2); line-height: 1.3; }
.gz-stat .gz-stat-value {
  font-family: var(--gz-font-head); font-size: var(--gz-text-stat); font-weight: 700; line-height: 1;
  letter-spacing: -0.02em; font-variant-numeric: tabular-nums; margin: 0;
}
.gz-stat .gz-stat-value small { font-size: 0.45em; font-weight: 500; color: var(--gz-ink-muted); margin-left: 2px; letter-spacing: 0; }
.gz-stat .gz-stat-delta { font-size: var(--gz-text-caption); margin: var(--gz-space-2) 0 0; color: var(--gz-ink-muted); font-variant-numeric: tabular-nums; }
.gz-stat--good { background: rgba(121,186,106,.14); }
.gz-stat--good .gz-stat-value { color: var(--gz-good-strong); }
.gz-stat--bad  { background: rgba(255,66,66,.10); }
.gz-stat--bad  .gz-stat-value { color: var(--gz-bad-strong); }
.gz-stat--warn { background: rgba(232,169,58,.14); }
.gz-stat--warn .gz-stat-value { color: var(--gz-warn-strong); }
.gz-stat--soft { background: var(--gz-surface-2); }
.up   { color: var(--gz-good-strong); }
.down { color: var(--gz-bad-strong); }

/* --- Tarjetas ------------------------------------------------------------------ */
.gz-card {
  background: var(--gz-white); border: 1px solid var(--gz-border); border-radius: var(--gz-radius);
  padding: var(--gz-space-5); box-shadow: var(--gz-shadow-sm);
}
.gz-card > :first-child { margin-top: 0; }
.gz-card > :last-child { margin-bottom: 0; }
.gz-card--soft { background: var(--gz-surface); box-shadow: none; }
.gz-card--solid { background: var(--gz-sage); border-color: var(--gz-sage); color: #fff; }
.gz-card--solid h2, .gz-card--solid h3, .gz-card--solid h4, .gz-card--solid .gz-eyebrow, .gz-card--solid .gz-caption { color: #fff; }
.gz-card--solid a { color: #fff; }
.gz-hero {
  background: var(--gz-surface); border-radius: var(--gz-radius-lg); padding: var(--gz-space-7) var(--gz-space-6);
  box-shadow: var(--gz-shadow-md);
}

/* --- Tablas ------------------------------------------------------------------ */
.gz-table-wrap { overflow-x: auto; border: 1px solid var(--gz-border); border-radius: var(--gz-radius); background: var(--gz-white); }
.gz-table { width: 100%; border-collapse: collapse; font-size: var(--gz-text-small); font-variant-numeric: tabular-nums; }
.gz-table th, .gz-table td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--gz-border); vertical-align: top; }
.gz-table thead th { background: var(--gz-surface-2); color: var(--gz-ink-muted); font-weight: 600; font-size: var(--gz-text-caption); letter-spacing: 0.02em; white-space: nowrap; }
.gz-table tbody tr:last-child td { border-bottom: 0; }
.gz-table tbody tr:hover { background: var(--gz-bg); }
.gz-table .num, .gz-table th.num { text-align: right; }
.gz-table tfoot td, .gz-table .total td { font-weight: 700; background: var(--gz-surface); border-top: 2px solid var(--gz-border-strong); }
.gz-table--compact th, .gz-table--compact td { padding: 6px 10px; }

/* --- Avisos (callouts) ------------------------------------------------------ */
.gz-callout {
  border-left: 4px solid var(--gz-teal); background: var(--gz-surface); border-radius: var(--gz-radius-sm);
  padding: var(--gz-space-3) var(--gz-space-4); margin: var(--gz-space-4) 0;
}
.gz-callout > :last-child { margin-bottom: 0; }
.gz-callout--good { border-left-color: var(--gz-good); background: rgba(121,186,106,.12); }
.gz-callout--bad  { border-left-color: var(--gz-bad);  background: rgba(255,66,66,.08); }
.gz-callout--warn { border-left-color: var(--gz-warn); background: rgba(232,169,58,.12); }
.gz-callout-title { display: block; font-weight: 600; font-family: var(--gz-font-head); margin-bottom: 2px; }

/* --- Etiquetas y botones ---------------------------------------------------- */
.gz-badge {
  display: inline-block; padding: 2px 10px; border-radius: var(--gz-radius-pill);
  font-size: var(--gz-text-caption); font-weight: 600; line-height: 1.6; white-space: nowrap;
  background: var(--gz-surface-2); color: var(--gz-ink-muted); border: 1px solid transparent;
}
.gz-badge--good { background: rgba(121,186,106,.18); color: var(--gz-good-strong); }
.gz-badge--bad  { background: rgba(255,66,66,.12);  color: var(--gz-bad-strong); }
.gz-badge--warn { background: rgba(232,169,58,.18); color: var(--gz-warn-strong); }
.gz-badge--info { background: rgba(135,172,167,.22); color: var(--gz-ink); }
.gz-btn {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer; text-decoration: none;
  font-family: var(--gz-font-body); font-size: var(--gz-text-body); font-weight: 600; line-height: 1;
  padding: 10px 18px; border-radius: var(--gz-radius-pill);
  border: 1px solid var(--gz-ink); background: transparent; color: var(--gz-ink);
  transition: background .15s, color .15s;
}
.gz-btn:hover { background: var(--gz-ink); color: var(--gz-surface); }
.gz-btn--primary { background: var(--gz-good-strong); border-color: var(--gz-good-strong); color: #fff; }
.gz-btn--primary:hover { background: var(--gz-ink); border-color: var(--gz-ink); color: #fff; }
.gz-btn--small { font-size: var(--gz-text-small); padding: 7px 14px; }
.gz-btn::after { content: none; }
.gz-btn--arrow::after { content: "↘"; font-size: 0.9em; }

/* --- Gráfico de barras (sin librería) --------------------------------------- */
/* <div class="gz-bars"><div class="gz-bar" style="--v:62%"><span>Grifo 1</span><i></i><b>62 %</b></div>… */
/* Las tres calles (etiqueta · barra · valor) son COMPARTIDAS por todas las filas: el
   contenedor es la rejilla y cada .gz-bar aporta sus tres hijos (display: contents).
   La etiqueta nunca se trunca; se lleva lo que necesite hasta el 40 % del ancho. */
.gz-bars { display: grid; grid-template-columns: fit-content(40%) 1fr auto; column-gap: var(--gz-space-3); row-gap: 6px; align-items: center; margin: var(--gz-space-4) 0; font-size: var(--gz-text-small); }
.gz-bar { display: contents; }
.gz-bar > span { color: var(--gz-ink-muted); line-height: 1.25; }
.gz-bar > i { display: block; height: 14px; border-radius: 4px; background: var(--gz-good); width: var(--v, 0%); min-width: 2px; }
.gz-bar > b { font-weight: 600; font-variant-numeric: tabular-nums; min-width: 4ch; text-align: right; }
.gz-bar--bad > i  { background: var(--gz-bad); }
.gz-bar--warn > i { background: var(--gz-warn); }
.gz-bar--muted > i { background: var(--gz-neutral); }
.gz-bar--brand > i { background: var(--gz-mint); }

/* --- Pie de documento -------------------------------------------------------- */
.gz-footer {
  margin-top: var(--gz-space-8); padding-top: var(--gz-space-4); border-top: 1px solid var(--gz-border);
  font-size: var(--gz-text-caption); color: var(--gz-ink-muted);
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--gz-space-3);
}

/* --- Responsive e impresión --------------------------------------------------- */
@media (max-width: 640px) {
  .gz-page { padding: var(--gz-space-5) var(--gz-space-4) var(--gz-space-7); }
  .gz-header h1 { font-size: var(--gz-text-h1); }
  .gz-grid--2, .gz-grid--3 { grid-template-columns: 1fr; }
  .gz-hero { padding: var(--gz-space-5) var(--gz-space-4); border-radius: var(--gz-radius); }
  .gz-stat .gz-stat-value { font-size: 1.75rem; }
}
@media print {
  body { background: #fff; }
  .gz-page { max-width: none; padding: 0; }
  .gz-card, .gz-stat, .gz-table-wrap, .gz-hero { box-shadow: none; break-inside: avoid; }
  .gz-btn { display: none; }
  a { color: inherit; text-decoration: none; }
}
