@charset "UTF-8";
@import url("https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&family=Poppins:wght@500;600;700;800&display=swap");
/*
 * SKA Design Tokens — Taller Kids (producto hermano sobre pulser-platform).
 *
 * TOKENS ESTRUCTURALES (inmutables entre marcas) + TIPOGRAFÍA de marca.
 * Los tokens dinámicos (brand color, semánticos, surfaces, text, borders) los
 * sirve la Branding API: /api/v1/config-manager/admin-theme.css (driven by
 * modules/settings/design.py → DESIGN_SYSTEM).
 *
 * Cargado por Unfold STYLES ANTES del admin-theme dinámico y de
 * ska-admin-components.css (ver pulser-platform core/settings/unfold.py).
 *
 * REGLA: nunca hex directo en templates/badges. Siempre var(--ska-*).
 * Ver DESIGN_SYSTEM.md §0, §2, §4.
 */

/* ═══════════════════════════════════════════════════
   STRUCTURAL TOKENS (constant across brands)
   ═══════════════════════════════════════════════════ */
:root {
    /* ── Typography ──
       `--ska-font-sans` (cuerpo) lo provee EXCLUSIVAMENTE el endpoint dinámico org-driven
       (`admin-theme.css` ← `font_family_admin` de la Organization activa). NO se declara
       acá: este estático se vuelve a enlazar DESPUÉS del endpoint en `{% block extrastyle %}`
       (`skeleton.html`: los `styles` en la línea 25, `extrastyle` en la 48), y con la misma
       especificidad gana el último — así que una declaración acá no sería un fallback sino
       un OVERRIDE de la fuente que la org eligió. Es el mismo mecanismo que se explica en
       detalle en el bloque de contraste de más abajo, con el daño ya medido.

       El display (títulos) sí es decisión de marca del producto, y por eso queda. No
       depende de `--ska-font-sans`: hasta el 23-ago-2026 valía `"Poppins", var(--ska-font-sans)`
       y eso ataba el título al token que se iba. La forma sin dependencia ya estaba escrita
       en petnova; se copió de ahí para que los cuatro productos digan lo mismo.

       DE DÓNDE SALE LA TIPOGRAFÍA DE TALLER KIDS — decidido por Sergio el 23-ago-2026
       (`1WgC6hsB`): **de la ORGANIZACIÓN**, no de este archivo. No es una preferencia de
       estilo; es que la otra respuesta ya estaba refutada por el propio repo:

         · Este deployment es MULTI-ORG y las dos orgs tienen fuentes DISTINTAS, las dos
           commiteadas: `seed_tk_branding.py:120` pide `'Nunito'` para Taller Kids, y
           `seed_tk_aulastra.py:105` pide `'Plus Jakarta Sans'` para Aulastra — que es la
           marca `is_main` (lo dice `seed_tk_branding.py:64-70`: «si YA hay otra org
           principal (la marca paraguas Aulastra), TK es un TENANT»). O sea que «Taller
           Kids se ve en Nunito pase lo que pase» no es la decisión de producto: la
           decisión está por org y ya estaba escrita.

         · Y declararlo acá no lo garantizaba ni siquiera a medias. El motor emite DOS
           tokens —`--ska-font-sans` y `--font-sans`— y este archivo sólo pisaba el
           primero. `--font-sans` es el que Unfold aplica al `<body class="font-sans">`
           (`unfold/layouts/skeleton.html:63`), así que el chrome del admin YA pintaba con
           la fuente de la org mientras `.ska-admin-wrap`/`.ska-admin-table`/`.tk-*`
           pintaban en Nunito: **dos fuentes en la misma pantalla**.

       CUÁNTAS PANTALLAS, medido el 23-ago-2026 sobre `7c267c8e` reusando
       `_templates_que_reenlazan()` del guardián: de los 80 templates que re-enlazan este
       estático dentro de `{% block extrastyle %}`, **34 son alcanzables desde el admin de
       Taller Kids** (los otros 46 son de productos hermanos o de apps que TK no monta —
       `INSTALLED_APPS` medido por `django.setup()`), y **34 de 34** traen en su propio
       marcado un consumidor de `--ska-font-sans`. Ninguna muda: el pisado pintaba en todas.

       QUÉ CAMBIÓ AL SACARLO, medido y no deducido:
         · org «Taller Kids» → NADA. El motor emite `'Nunito', -apple-system, …`: misma
           primera familia que el stack que estaba acá.
         · org «Aulastra» → sus tablas y cards dejan de verse en Nunito y pasan a Plus
           Jakarta Sans, que es lo que su `<body>` ya mostraba. Corrige la mezcla.
         · una org de TK con `font_family_admin` vacío → NO cae a `Inter`. Hereda de la
           marca `is_main` (`services.py:534`: `profile.font_family_admin or
           brand.font_family_admin`). El riesgo que sostenía la deuda estaba refutado ahí.

       CÓMO SE MIDIÓ CADA COSA, porque no todas se midieron igual:
         · POR EJECUCIÓN de `generate_full_css` con los stacks de los dos seeds: para la
           org «Taller Kids» emite `'Nunito', …` y para «Aulastra» `'Plus Jakarta Sans', …`,
           en `--ska-font-sans` y en `--font-sans` a la vez.
         · POR EJECUCIÓN contra la base de DESARROLLO local `taller_kids_db` (no
           producción): las dos únicas `Organization` son `aulastra` (is_main, Plus Jakarta
           Sans) y `taller_kids` (tenant, Nunito), y un perfil con el campo vacío recibe el
           stack de Aulastra — la herencia corrió de verdad, no está deducida.
         · POR LECTURA: el orden de carga (`skeleton.html` 25 vs 48) y qué clase consume
           qué token. La cascada en sí ya la midió `BVmf855z` en pantalla con
           `getComputedStyle`; lo que cambia acá es que para este token ya no hay dos
           declaraciones compitiendo.
         · NO SE ABRIÓ la pantalla de Taller Kids con las dos orgs. Es el paso que falta
           para ver el resultado con los ojos, y hace falta el contenedor.

       DÓNDE VERIFICARLO DESPUÉS DE DESPLEGAR: este archivo es el FUENTE. Al lado vive su
       copia de `collectstatic` en `products/taller-kids/static/…` — gitignored
       (`.gitignore:50`), invisible para el guardián (que lee el fuente) y **es la que
       recibe el navegador**. En el deploy no hace falta un paso a mano: `collectstatic`
       corre solo en el entrypoint del servicio `web` (`deploy/entrypoint.sh:84`) y es
       idempotente. El riesgo queda en dos lugares: un entorno con `SKIP_COLLECTSTATIC`
       puesto, y una máquina de desarrollo que ya tenga la copia vieja — ahí se sigue
       sirviendo el `:root` de ayer, con Nunito, y la pantalla contradice a este archivo
       sin que nada falle.

       OJO, lo que este archivo NO arregla y hay que saber: `ska_admin_webfont_url`
       (`ska_nav_tags.py:60-84`) resuelve el webfont del profile ACTIVO y no hereda de la
       `is_main`, a diferencia del CSS que sí hereda. Un tenant con el campo vacío recibe
       declarada la fuente de la marca y ningún `<link>` de Google Fonts. Es otro tema y no
       se toca acá; el `@import` de arriba mantiene Nunito y Poppins cargados igual. */
    --ska-font-display: "Poppins", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
    --ska-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;

    /* ── Contrast tokens (text-on-X) ──
       `--ska-text-on-primary`, `--ska-on-primary-muted`, `--ska-on-primary-emphasis` y
       `--ska-on-primary-danger` los provee EXCLUSIVAMENTE el endpoint dinámico
       `/api/v1/config-manager/admin-theme.css` (← `ThemeEngine`, que elige la letra por
       LUMINANCIA del primario de la org: blanca sobre un primario oscuro, y el neutro
       más oscuro de la escala sobre uno claro — `NEUTRAL["950"]`, `#09090b`, desde el
       31-ago-2026; hasta esa fecha era el `900`, `#18181b`).

       NO se declaran en `:root` acá, por el MISMO motivo que `--ska-font-sans` y con el
       daño ya medido: 82 templates del admin vuelven a enlazar este archivo dentro de
       `{% block extrastyle %}`, que en el <head> de Unfold carga DESPUÉS del endpoint
       (`skeleton.html`: los `styles` en la línea 25, `extrastyle` en la 48). Con la misma
       especificidad, gana el último — así que una declaración acá no es un fallback sino
       un OVERRIDE: la pantalla pintaba `#ffffff` donde el motor había calculado `#18181b`.

       Medido el 23-ago-2026 (`BVmf855z`). Lo vigila
       `packages/pulser-platform/tests/test_el_estatico_de_tokens_no_pisa_al_motor.py`. */

    /* ── Radius scale ── (DESIGN_SYSTEM.md §3: 7px default / 15px large) */
    --ska-radius-xs: 0.25rem;     /* 4px */
    --ska-radius-sm: 0.4375rem;   /* 7px  — BORDER_RADIUS Taller Kids */
    --ska-radius-md: 0.625rem;    /* 10px */
    --ska-radius-lg: 0.9375rem;   /* 15px — BORDER_RADIUS_LARGE Taller Kids */
    --ska-radius-xl: 1.25rem;     /* 20px */
}

/* ═══════════════════════════════════════════════════
   TYPOGRAPHY APPLICATION
   Aplica las fuentes de marca en las superficies propias (cards/hub/detail).
   El chrome de Unfold mantiene su propia cascada; los headings `ska-*`/`tk-*`
   usan --ska-font-display (Poppins) explícitamente.
   ═══════════════════════════════════════════════════ */
.ska-admin-wrap,
.ska-admin-table,
.tk-cards,
.tk-bento {
    font-family: var(--ska-font-sans);
}

.ska-admin-wrap h1,
.ska-admin-header h1,
.tk-card__name,
.tk-bento h1,
.tk-bento h2,
.tk-kpi__value {
    font-family: var(--ska-font-display);
}

/* ═══════════════════════════════════════════════════
   UTILITY CLASSES
   ═══════════════════════════════════════════════════ */

/* Reset agresivo contra contaminación de Unfold. */
.ska-reset {
    background: var(--ska-surface) !important;
    color: var(--ska-text) !important;
    border-color: var(--ska-border) !important;
}

.ska-surface-alt {
    background: var(--ska-surface-alt) !important;
}
