/* ============================================================
   AURORA — p3-typography.css · Categoría 3 · Tipografía (135 objetos)
   Escala, tonos de titular, cuerpo, prose (dueño único), listas,
   bloque, código, etiquetas, cifras, enlaces y utilidades de texto.
   Demostrado en specs/03.json (44 demos). Prose: dueño único del sistema.
   Jerarquía por tamaño/peso/espacio, no por color. Solo tokens.
   Pesos por token (--nz-peso-*): el 800 está retirado y nada por debajo de
   16px lleva 700. Medido antes de este cambio: el 26% de los elementos de una
   herramienta salía en negrita, así que no destacaba nada.
   Cero gradientes, cero glass. Hecho con ❤️ por David Antizar
   ============================================================ */

/* ---- 01 Escala (fluida, responsive first — tokens ya definidos) ---- */
.nz-display { font-size: var(--nz-text-4xl); font-weight: var(--nz-peso-titulo); line-height: var(--nz-leading-tight); letter-spacing: var(--nz-tracking-tight); }
.nz-h1 { font-size: var(--nz-text-3xl); font-weight: var(--nz-peso-titulo); line-height: var(--nz-leading-tight); letter-spacing: var(--nz-tracking-tight); }
.nz-h2 { font-size: var(--nz-text-2xl); font-weight: var(--nz-peso-titulo); line-height: var(--nz-leading-tight); letter-spacing: var(--nz-tracking-tight); }
.nz-h3 { font-size: var(--nz-text-xl); font-weight: var(--nz-peso-fuerte); line-height: var(--nz-leading-snug); letter-spacing: var(--nz-tracking-tight); }
.nz-h4 { font-size: var(--nz-text-lg); font-weight: var(--nz-peso-fuerte); line-height: var(--nz-leading-snug); }
.nz-h5 { font-size: var(--nz-text-base); font-weight: var(--nz-peso-fuerte); line-height: var(--nz-leading-snug); }
.nz-h6 { font-size: var(--nz-text-sm); font-weight: var(--nz-peso-fuerte); line-height: var(--nz-leading-snug); letter-spacing: var(--nz-tracking-caps); text-transform: uppercase; }
/* El antetítulo se lee a 13px (era 12px, por debajo del mínimo de interfaz que
   exige COMPOSICION.md) y se distingue por versalita + espaciado, no por peso. */
.nz-eyebrow { font-size: var(--nz-text-xs); font-weight: var(--nz-peso-fuerte); letter-spacing: var(--nz-tracking-caps); text-transform: uppercase; color: var(--nz-brand); }

/* ---- 02 Display grande y pequeño ---- */
.nz-display--xl { font-size: calc(var(--nz-text-4xl) * 1.15); letter-spacing: var(--nz-tracking-tight); }
.nz-display--sm { font-size: var(--nz-text-2xl); font-weight: var(--nz-peso-titulo); line-height: var(--nz-leading-tight); }

/* ---- 03 Tono de titular (azul / naranja / apagado / apretado) ---- */
.nz-h1--brand, .nz-h2--brand, .nz-h3--brand, .nz-h4--brand, .nz-h5--brand, .nz-h6--brand { color: var(--nz-brand); }
.nz-h1--accent, .nz-h2--accent, .nz-h3--accent, .nz-h4--accent, .nz-h5--accent, .nz-h6--accent { color: var(--nz-accent-strong); }
.nz-h1--muted, .nz-h2--muted, .nz-h3--muted, .nz-h4--muted, .nz-h5--muted, .nz-h6--muted { color: var(--nz-text-mute); }
.nz-h1--tight, .nz-h2--tight, .nz-h3--tight, .nz-h4--tight, .nz-h5--tight, .nz-h6--tight { letter-spacing: var(--nz-tracking-tight); }

/* ---- 04 Cuerpo ---- */
.nz-lead { font-size: var(--nz-text-lg); color: var(--nz-text-soft); line-height: var(--nz-leading-snug); }
.nz-lead--sm { font-size: var(--nz-text-md); }
.nz-lead--lg { font-size: var(--nz-text-xl); line-height: var(--nz-leading-normal); }
.nz-lead--brand { color: var(--nz-text-soft); border-inline-start: 3px solid var(--nz-brand); padding-inline-start: var(--nz-space-4); }
.nz-lead--accent { color: var(--nz-text-soft); border-inline-start: 3px solid var(--nz-accent); padding-inline-start: var(--nz-space-4); }
.nz-text--large { font-size: var(--nz-text-lg); }
.nz-text--small { font-size: var(--nz-text-sm); }
.nz-text--muted { color: var(--nz-text-mute); }
.nz-text--faint { color: var(--nz-text-faint); }
.nz-text--mono { font-family: var(--nz-font-mono); font-size: .9em; }
.nz-text--success { color: var(--nz-success); }
.nz-text--danger { color: var(--nz-danger); }
.nz-text--warning { color: var(--nz-warning); }
.nz-text--brand-soft { color: var(--nz-brand-strong); background: var(--nz-brand-soft); padding: 0 .3em; border-radius: var(--nz-radius-xs); }
.nz-text--accent-soft { color: var(--nz-accent-strong); background: var(--nz-accent-soft); padding: 0 .3em; border-radius: var(--nz-radius-xs); }
.nz-text--peso-medio { font-weight: var(--nz-peso-medio); }
.nz-text--peso-fuerte { font-weight: var(--nz-peso-fuerte); }

/* ---- 05 Prose (dueño único de este objeto) ---- */
.nz-prose { max-width: var(--nz-container-narrow); margin-inline: auto; }
.nz-prose p { font-size: var(--nz-text-md); color: var(--nz-text-soft); line-height: var(--nz-leading-normal); margin-block: var(--nz-space-4); }
.nz-prose h2 { font-size: var(--nz-text-xl); letter-spacing: var(--nz-tracking-tight); margin-block: var(--nz-space-8) var(--nz-space-3); }
.nz-prose h3 { font-size: var(--nz-text-lg); letter-spacing: var(--nz-tracking-tight); margin-block: var(--nz-space-6) var(--nz-space-2); }
.nz-prose h4 { font-size: var(--nz-text-base); margin-block: var(--nz-space-5) var(--nz-space-2); }
.nz-prose ul, .nz-prose ol { margin-block: var(--nz-space-3); padding-inline-start: var(--nz-space-6); }
.nz-prose li { margin-block: var(--nz-space-1); color: var(--nz-text-soft); }
.nz-prose a { color: var(--nz-brand); }
.nz-prose strong { color: var(--nz-text); font-weight: var(--nz-peso-titulo); }
.nz-prose code { font-family: var(--nz-font-mono); font-size: .9em; padding: .1em .35em; border-radius: var(--nz-radius-xs); background: var(--nz-bg-inset); color: var(--nz-brand-strong); }
.nz-prose table { width: 100%; border-collapse: collapse; margin-block: var(--nz-space-4); font-size: var(--nz-text-sm); }
.nz-prose th, .nz-prose td { text-align: start; padding: var(--nz-space-2) var(--nz-space-3); border-bottom: var(--nz-border-w) solid var(--nz-border-soft); }
.nz-prose th { color: var(--nz-text); font-weight: var(--nz-peso-fuerte); }
.nz-prose img { max-width: 100%; height: auto; border-radius: var(--nz-radius-md); }
.nz-prose--wide { max-width: var(--nz-container-max); }
.nz-prose--brand a { color: var(--nz-brand-strong); }
.nz-prose--brand strong { color: var(--nz-brand); }
.nz-prose--brand h2, .nz-prose--brand h3 { color: var(--nz-brand); }

/* ---- 06 Listas ---- */
.nz-list { list-style: none; padding: 0; margin-block: var(--nz-space-2); display: flex; flex-direction: column; gap: var(--nz-space-2); }
.nz-list__item { display: flex; gap: var(--nz-space-3); align-items: flex-start; color: var(--nz-text-soft); }
.nz-list__item::before { content: ""; flex: none; width: 8px; height: 8px; margin-top: .5em; border-radius: var(--nz-radius-full); background: var(--nz-brand); }
.nz-list--accent .nz-list__item::before { background: var(--nz-accent); }
.nz-list--check .nz-list__item::before { content: "✓"; width: auto; height: auto; background: none; color: var(--nz-success); font-weight: var(--nz-peso-fuerte); font-size: var(--nz-text-sm); }
.nz-list--numeric { counter-reset: nzcount; }
.nz-list--numeric .nz-list__item { counter-increment: nzcount; display: grid; grid-template-columns: 1.75rem 1fr; gap: var(--nz-space-2); }
.nz-list--numeric .nz-list__item::before { content: counter(nzcount); width: auto; height: auto; background: none; color: var(--nz-brand); font-weight: var(--nz-peso-fuerte); font-variant-numeric: tabular-nums; margin-top: 0; }
.nz-list--brand .nz-list__item { padding: var(--nz-space-2) var(--nz-space-3); border-radius: var(--nz-radius-sm); background: var(--nz-brand-soft); color: var(--nz-text); }
.nz-list--compact { gap: var(--nz-space-1); }
.nz-list--compact .nz-list__item { font-size: var(--nz-text-sm); }
.nz-list--divided .nz-list__item + .nz-list__item { border-top: var(--nz-border-w) solid var(--nz-border-soft); padding-top: var(--nz-space-2); }
.nz-list--icon .nz-list__item { align-items: center; }
.nz-list--icon .nz-list__item::before { content: ""; width: 22px; height: 22px; margin-top: 0; border-radius: var(--nz-radius-xs); background: var(--nz-brand-soft); }
.nz-list__item--done { color: var(--nz-text-mute); text-decoration: line-through; }
.nz-list__item--done::before { background: var(--nz-success); }

/* ---- 07 Blockquote ---- */
.nz-blockquote { margin: var(--nz-space-4) 0; padding: var(--nz-space-4) var(--nz-space-5); border-left: 3px solid var(--nz-brand); background: var(--nz-bg-soft); border-radius: 0 var(--nz-radius-md) var(--nz-radius-md) 0; }
.nz-blockquote p { font-size: var(--nz-text-base); color: var(--nz-text); font-style: italic; margin: 0; }
.nz-blockquote footer { margin-top: var(--nz-space-2); font-size: var(--nz-text-sm); color: var(--nz-text-mute); font-style: normal; }
.nz-blockquote--accent { border-left-color: var(--nz-accent); }
.nz-blockquote--brand { border-left-color: var(--nz-brand-strong); background: var(--nz-brand-soft); }
.nz-blockquote--sm { padding: var(--nz-space-2) var(--nz-space-3); }
.nz-blockquote--sm p { font-size: var(--nz-text-sm); }

/* ---- 08 Código ---- */
.nz-code { font-family: var(--nz-font-mono); font-size: .88em; padding: .15em .45em; border-radius: var(--nz-radius-xs); background: var(--nz-bg-inset); color: var(--nz-brand-strong); }
.nz-code--inline { display: inline; padding: .05em .35em; }
.nz-code--brand { background: var(--nz-brand-soft); color: var(--nz-brand-strong); }
.nz-code--sm { font-size: var(--nz-text-2xs); }
.nz-code--block { display: block; padding: var(--nz-space-4); border-radius: var(--nz-radius-md); background: var(--nz-gray-900); color: var(--nz-gray-100); overflow-x: auto; line-height: var(--nz-leading-normal); font-size: var(--nz-text-sm); }
.nz-code--dark { background: var(--nz-gray-950); color: var(--nz-gray-50); }
[data-nz-theme="dark"] .nz-code--block { background: var(--nz-gray-950); color: var(--nz-gray-50); }
.nz-kbd { font-family: var(--nz-font-mono); font-size: var(--nz-text-xs); padding: 0.2rem var(--nz-space-2); border-radius: var(--nz-radius-xs); background: var(--nz-surface-2); border: var(--nz-border-w) solid var(--nz-border); box-shadow: 0 1px 0 var(--nz-border); color: var(--nz-text); }
.nz-kbd--lg { font-size: var(--nz-text-sm); padding: 0.35rem 0.7rem; }

/* ---- 09 Etiqueta / chip de texto ----
   Una etiqueta es interfaz: se lee a 13px, no a 12px. Se distingue por el
   espaciado y el color, no por el peso (llevaba 700/800 sobre 12px). */
.nz-lbl { display: inline-flex; align-items: center; gap: var(--nz-space-1); padding: 0.2rem 0.7rem; border-radius: var(--nz-radius-full); background: var(--nz-bg-inset); color: var(--nz-text-soft); font-size: var(--nz-text-xs); font-weight: var(--nz-peso-fuerte); }
.nz-lbl--brand { background: var(--nz-brand-soft); color: var(--nz-brand); }
.nz-lbl--accent { background: var(--nz-accent-soft); color: var(--nz-accent-strong); }
.nz-lbl--success { background: var(--nz-success-soft); color: var(--nz-success); }
.nz-lbl--danger { background: var(--nz-danger-soft); color: var(--nz-danger); }
.nz-lbl--info { background: var(--nz-info-soft); color: var(--nz-info); }
.nz-lbl--neutral { background: var(--nz-bg-inset); color: var(--nz-text-mute); }
.nz-lbl--outline { background: none; border: var(--nz-border-w) solid var(--nz-border-strong); color: var(--nz-text-soft); }
.nz-lbl--lg { padding: 0.3rem 0.9rem; font-size: var(--nz-text-sm); }
.nz-lbl--sm { padding: 0.1rem var(--nz-space-2); font-size: var(--nz-text-2xs); font-weight: var(--nz-peso-medio); }
.nz-lbl i { width: 5px; height: 5px; border-radius: 50%; background: currentColor; }

/* ---- 10 Cifras / números ---- */
.nz-num { font-variant-numeric: tabular-nums; letter-spacing: var(--nz-tracking-tight); }
.nz-num--stat { font-size: var(--nz-text-2xl); font-weight: var(--nz-peso-titulo); color: var(--nz-text); }
.nz-num--brand { color: var(--nz-brand); }
.nz-num--accent { color: var(--nz-accent-strong); }
.nz-num--sm { font-size: var(--nz-text-sm); }
.nz-num--lg { font-size: var(--nz-text-xl); font-weight: var(--nz-peso-fuerte); }
.nz-num--success { color: var(--nz-success); }
.nz-num--danger { color: var(--nz-danger); }
.nz-num--muted { color: var(--nz-text-mute); }

/* ---- 11 Enlaces con vida ---- */
.nz-link { position: relative; color: var(--nz-brand); font-weight: var(--nz-peso-fuerte); text-decoration: none; }
.nz-link::after { content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 2px; border-radius: var(--nz-radius-full); background: currentColor; transform: scaleX(0); transform-origin: left; transition: transform var(--nz-dur-base) var(--nz-ease-out); }
.nz-link:hover::after { transform: scaleX(1); }
.nz-link--accent { color: var(--nz-accent-strong); }
.nz-link--brand { color: var(--nz-brand-strong); font-weight: var(--nz-peso-titulo); }
.nz-link--danger { color: var(--nz-danger); }
.nz-link--quiet { color: var(--nz-text-soft); font-weight: var(--nz-peso-normal); }
.nz-link--underline { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.nz-link--underline:hover { text-decoration-color: var(--nz-brand); }
.nz-link--underline::after { display: none; }
.nz-link--external::after { content: "↗"; position: static; width: auto; height: auto; background: none; transform: none; margin-left: var(--nz-space-1); font-size: .9em; }
.nz-link--inline { display: inline-flex; align-items: center; gap: var(--nz-space-1); }
.nz-link--inline::after { display: none; }
.nz-link--arrow::before { content: "→"; transform: translateX(0); transition: transform var(--nz-dur-base) var(--nz-ease-out); }
.nz-link--arrow:hover::before { transform: translateX(4px); }

/* ---- 12 Medidas de línea ---- */
.nz-measure { max-width: 68ch; }
.nz-measure--narrow { max-width: 52ch; }
.nz-measure--wide { max-width: 80ch; }

/* ---- 13 Truncado a N líneas ---- */
.nz-truncate { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nz-truncate--1, .nz-truncate--2, .nz-truncate--3 { display: -webkit-box; -webkit-box-orient: vertical; white-space: normal; overflow: hidden; }
.nz-truncate--1 { -webkit-line-clamp: 1; line-clamp: 1; }
.nz-truncate--2 { -webkit-line-clamp: 2; line-clamp: 2; }
.nz-truncate--3 { -webkit-line-clamp: 3; line-clamp: 3; }

/* ---- 14 Alineación ---- */
.nz-center { text-align: center; }
.nz-align-left { text-align: left; }
.nz-align-right { text-align: right; }
.nz-align-justify { text-align: justify; }

/* ---- 15 Ritmo y equilibrio de texto ---- */
.nz-caps { text-transform: uppercase; letter-spacing: var(--nz-tracking-caps); }
.nz-balance { text-wrap: balance; }
.nz-pretty { text-wrap: pretty; }
.nz-indent { text-indent: var(--nz-space-6); }

/* ---- 16 Columnas de texto (responsive first) ---- */
.nz-columns-2 { columns: 1; column-gap: var(--nz-space-6); }
.nz-columns-3 { columns: 1; column-gap: var(--nz-space-6); }
@media (min-width: 640px) { .nz-columns-2 { columns: 2; } .nz-columns-3 { columns: 2; } }
@media (min-width: 960px) { .nz-columns-3 { columns: 3; } }

/* ---- 17 Letra capital ---- */
.nz-initial::first-letter { float: left; font-size: 3em; line-height: .9; font-weight: var(--nz-peso-titulo); padding-right: var(--nz-space-2); color: var(--nz-brand); }

/* ---- 18 Resaltado de marcador ---- */
.nz-highlight { background: var(--nz-warning-soft); color: var(--nz-text); padding: 0 .15em; border-radius: var(--nz-radius-xs); }
.nz-highlight--brand { background: var(--nz-brand-tint); color: var(--nz-brand-strong); }
.nz-highlight--accent { background: var(--nz-accent-tint); color: var(--nz-accent-strong); }
.nz-underline--accent { text-decoration: underline; text-decoration-color: var(--nz-accent); text-decoration-thickness: 2px; text-underline-offset: 3px; }

/* ---- 19 Fecha / antetítulo de artículo ---- */
.nz-dateline { font-size: var(--nz-text-xs); color: var(--nz-text-mute); letter-spacing: var(--nz-tracking-caps); text-transform: uppercase; }

/* ---- 20 Figura con pie de foto ---- */
.nz-figura { margin: var(--nz-space-4) 0; }
.nz-figura__pie { margin-top: var(--nz-space-2); font-size: var(--nz-text-xs); color: var(--nz-text-mute); }

/* ---- 21 Nota al pie de un bloque ---- */
.nz-nota { margin-top: var(--nz-space-3); padding-inline-start: var(--nz-space-3); border-inline-start: var(--nz-border-w-strong) solid var(--nz-border-strong); font-size: var(--nz-text-xs); color: var(--nz-text-mute); }

/* ---- 22 Utilidades de línea y tracking ---- */
.nz--leading-tight { line-height: var(--nz-leading-tight); }
.nz--leading-snug { line-height: var(--nz-leading-snug); }
.nz--leading-normal { line-height: var(--nz-leading-normal); }
.nz--tracking-tight { letter-spacing: var(--nz-tracking-tight); }
.nz--tracking-caps { letter-spacing: var(--nz-tracking-caps); }
