/* ==========================================================================
   JURISIA - Sistema de diseno Neobrutalista
   Usado por: index.html (acceso) y pricing.html (planes).
   No toca landing.css, que sigue sirviendo a payment-result.html.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Reset
   -------------------------------------------------------------------------- */
*,
*::before,
*::after {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

img,
svg {
    display: block;
    max-width: 100%;
}

button,
input,
select,
textarea {
    font: inherit;
    color: inherit;
}

button {
    background: none;
    border: none;
    cursor: pointer;
}

ul,
ol {
    list-style: none;
}

a {
    color: inherit;
}

/* --------------------------------------------------------------------------
   2. Tokens
   -------------------------------------------------------------------------- */
/* La paleta real vive en nb-tokens.css (fuente unica). Aqui solo se le dan
   los nombres cortos que usa esta hoja: las custom properties se resuelven en
   tiempo de uso, asi que el orden de carga entre ambas hojas es indiferente. */
:root {
    --paper: var(--nb-paper);
    --paper-2: var(--nb-paper-2);
    --white: var(--nb-white);
    --ink: var(--nb-ink);
    --ink-2: var(--nb-ink-2);
    --ink-soft: var(--nb-ink-soft);

    /* Ojo: --gold y --gold-deep NO se re-declaran aqui. Son nombres que
       info_pages.css ya usaba con otro sentido (ambar de texto) y que
       nb-tokens.css puentea asi; declararlos crearia una colision.
       Esta hoja usa var(--nb-gold) / var(--nb-gold-deep) directamente. */
    --terracotta: var(--nb-terracotta);
    --azure: var(--nb-azure);

    --bd: var(--nb-bd);
    --bd-thick: var(--nb-bd-thick);
    --radius: var(--nb-radius);
    --sx: var(--nb-sx);
    --ease: var(--nb-ease);

    --font-display: var(--nb-font-display);
    --font-ui: var(--nb-font-ui);

    --pad-brand: clamp(26px, 3.2vw, 56px);
    --pad-auth: clamp(24px, 3.6vw, 64px);
}

/* --------------------------------------------------------------------------
   3. Base
   -------------------------------------------------------------------------- */
html {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
    scroll-behavior: smooth;
}

body {    /* Sin overflow-x aqui a proposito: en <body> convierte el documento en
       contenedor de scroll y eso ROMPE position:sticky en los descendientes
       (la cabecera se iba con el scroll y dejaba la barra de lectura flotando
       a media pagina). El sitio ya se mide sin desbordamiento horizontal en
       390/360/768, asi que la red de seguridad no hace falta. */
    min-height: 100vh;
    min-height: 100dvh;
    background: var(--paper);
    color: var(--ink);
    font-family: var(--font-ui);
    font-size: 16px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    -webkit-tap-highlight-color: transparent;
}

h1,
h2,
h3 {
    font-family: var(--font-display);
    font-weight: 400;
    line-height: 1.02;
    letter-spacing: -0.02em;
}

strong {
    font-weight: 700;
}

::selection {
    background: var(--nb-gold);
    color: var(--ink);
}

/* Scrollbar en la misma gramatica: bloque macizo, borde grueso, sin radio */
* {
    scrollbar-color: var(--ink) var(--paper-2);
    scrollbar-width: thin;
}

::-webkit-scrollbar {
    width: 14px;
    height: 14px;
}

::-webkit-scrollbar-track {
    background: var(--paper-2);
    border-left: var(--bd) solid var(--ink);
}

::-webkit-scrollbar-thumb {
    background: var(--ink);
    border: var(--bd) solid var(--paper-2);
}

/* Foco visible: anillo azul desplazado, nunca eliminado */
:focus-visible {
    outline: var(--bd) solid var(--azure);
    outline-offset: 3px;
}

.skip-link {
    position: absolute;
    top: -100px;
    left: 12px;
    z-index: 100;
    padding: 12px 18px;
    background: var(--ink);
    color: var(--paper);
    border: var(--bd) solid var(--ink);
    font-weight: 700;
    text-decoration: none;
    transition: top .18s var(--ease);
}

.skip-link:focus-visible {
    top: 12px;
}

.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
}

/* --------------------------------------------------------------------------
   4. Primitivas
   -------------------------------------------------------------------------- */

/* Boton. Hover levanta 2px y engorda la sombra; :active lo hunde exactamente
   sobre la sombra (translate == --sx) y la anula: el bloque toca la pagina.
   --sx SIEMPRE deriva de --nb-sx: el peso del relieve se regula desde el token,
   y cada variante solo declara su distancia relativa a el. */
.nb-btn {
    --sx: var(--nb-sx);
    /* El COLOR de la sombra, como token. Estaba escrito a mano en las tres
       reglas -base, hover y active-, asi que tenir la sombra de una variante
       obligaba a reescribir las tres y era cuestion de tiempo que una se
       quedara atras y el boton cambiara de color al pulsarlo. */
    --sx-color: var(--ink);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    min-height: 54px;
    padding: 13px 20px;
    background: var(--white);
    color: var(--ink);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    box-shadow: var(--sx) var(--sx) 0 var(--sx-color);
    font-family: var(--font-ui);
    font-size: 15px;
    font-weight: 700;
    line-height: 1.2;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition:
        transform .13s var(--ease),
        box-shadow .13s var(--ease),
        background-color .13s var(--ease);
}

.nb-btn:hover {
    transform: translate(-2px, -2px);
    box-shadow: calc(var(--sx) + 2px) calc(var(--sx) + 2px) 0 var(--sx-color);
}

.nb-btn:active {
    transform: translate(var(--sx), var(--sx));
    box-shadow: 0 0 0 var(--sx-color);
}

.nb-btn[disabled],
.nb-btn[aria-disabled="true"] {
    opacity: .45;
    cursor: not-allowed;
    transform: none;
    box-shadow: var(--sx) var(--sx) 0 var(--ink);
}

/* Unico boton con mas peso que el resto: es la accion principal de la pagina. */
.nb-btn--lg {
    --sx: calc(var(--nb-sx) + 2px);
    min-height: 62px;
    padding: 16px 22px;
    border-width: var(--bd-thick);
    font-size: 16px;
}

.nb-btn--sm {
    --sx: calc(var(--nb-sx) - 1px);
    width: auto;
    min-height: 42px;
    padding: 9px 15px;
    font-size: 13px;
}

.nb-btn--gold {
    background: var(--nb-gold);
}

.nb-btn--gold:hover {
    background: var(--nb-gold-deep);
}

.nb-btn--ink {
    background: var(--ink);
    color: var(--paper);
}

.nb-btn--ink:hover {
    background: var(--ink-2);
}

.nb-btn--paper {
    background: var(--paper-2);
}

.nb-btn--paper:hover {
    background: var(--paper);
}

/* Chip: etiqueta rigida. Plano mientras solo informa; el relieve llega
   unicamente si es <a> o <button>, es decir, si se pulsa. Asi las etiquetas
   dejan de flotar sin motivo. */
.nb-chip {
    --sx: calc(var(--nb-sx) - 1px);
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 13px;
    background: var(--paper);
    color: var(--ink);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    text-decoration: none;
    white-space: nowrap;
}

button.nb-chip,
a.nb-chip {
    box-shadow: var(--sx) var(--sx) 0 var(--ink);
    cursor: pointer;
    transition: transform .13s var(--ease), box-shadow .13s var(--ease), background-color .13s var(--ease);
}

button.nb-chip:hover,
a.nb-chip:hover {
    transform: translate(-2px, -2px);
    box-shadow: calc(var(--sx) + 2px) calc(var(--sx) + 2px) 0 var(--ink);
}

button.nb-chip:active,
a.nb-chip:active {
    transform: translate(var(--sx), var(--sx));
    box-shadow: 0 0 0 var(--ink);
}

.nb-chip svg {
    width: 15px;
    height: 15px;
    flex: none;
}

/* Sticker rotado: el gesto mas reconocible del estilo. Una sola vez por
   pantalla, para que siga leyendose como acento y no como patron. */
.nb-sticker {
    position: absolute;
    top: -17px;
    left: -13px;
    padding: 7px 14px;
    background: var(--nb-gold);
    color: var(--ink);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .18em;
    text-transform: uppercase;
    transform: rotate(-3.5deg);
}

/* Regla con etiqueta al centro */
.nb-rule {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 22px 0;
}

.nb-rule::before,
.nb-rule::after {
    content: '';
    flex: 1;
    height: 3px;
    background: var(--ink);
}

.nb-rule span {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .22em;
    text-transform: uppercase;
    color: var(--ink-soft);
}

/* Marquee: dos grupos identicos + translateX(-50%) = bucle sin costura. */
.marquee {
    overflow: hidden;
    background: var(--ink);
    color: var(--nb-gold);
    border-top: var(--bd-thick) solid var(--ink);
}

.marquee-track {
    display: flex;
    width: max-content;
    animation: nb-marquee 32s linear infinite;
}

.marquee-group {
    display: flex;
    padding: 11px 0;
    white-space: nowrap;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .2em;
    text-transform: uppercase;
}

/* El separador era un rombo generico; ahora es el propio monograma. Va como
   mascara sobre currentColor, asi hereda el dorado del marquee en vez de
   duplicar el archivo del logo en otro color. */
.marquee-group span::before {
    content: '';
    display: inline-block;
    width: 13px;
    height: 13px;
    margin: 0 22px;
    vertical-align: -1px;
    background: currentColor;
    -webkit-mask: url('/assets/logo-j.svg') center / contain no-repeat;
    mask: url('/assets/logo-j.svg') center / contain no-repeat;
}

@keyframes nb-marquee {
    to {
        transform: translateX(-50%);
    }
}

/* --------------------------------------------------------------------------
   5. Index - estructura partida en dos
   -------------------------------------------------------------------------- */
.split {
    display: grid;
    grid-template-columns: 1.06fr 1fr;
    min-height: 100vh;
    min-height: 100dvh;
}

/* ---- Panel izquierdo: marca ---- */
.panel-brand {
    position: relative;
    min-width: 0;
    display: flex;
    flex-direction: column;
    padding: var(--pad-brand);
    background: var(--nb-gold);
    border-right: var(--bd-thick) solid var(--ink);
    overflow: hidden;
}

/* Reticula de puntos a 22px */
.panel-brand::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image: radial-gradient(var(--ink) 1.5px, transparent 1.6px);
    background-size: 22px 22px;
    opacity: .13;
    pointer-events: none;
}

.panel-brand > * {
    position: relative;
    z-index: 1;
}

.brand-top {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
}

.logo-badge {
    display: grid;
    place-items: center;
    width: 62px;
    height: 62px;
    flex: none;
    background: var(--ink);
    color: var(--nb-gold);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
}

.logo-badge svg {
    width: 36px;
    height: 36px;
}

.brand-core {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    /* Calibrado contra la regla de que el index no debe hacer scroll. Con el
       gancho al verificador dentro, el panel tiene cinco piezas y a 18px de
       hueco fijo se iba 72px por encima de una pantalla de 1366x768, que es la
       mas comun en los portatiles del despacho. El hueco pasa a depender del
       alto de la ventana: comodo cuando sobra sitio, justo cuando no. */
    gap: clamp(10px, 1.6vh, 18px);
    padding: clamp(14px, 2.4vh, 40px) 0;
    margin-top: auto;
    margin-bottom: auto;
}

.eyebrow {
    padding-bottom: 2px;
    border-bottom: var(--bd) solid var(--ink);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: .2em;
    text-transform: uppercase;
}

.wordmark {
    font-family: var(--font-display);
    font-size: clamp(3.1rem, 7.4vw, 6.2rem);
    line-height: .84;
    letter-spacing: -.035em;
    color: var(--ink);
}

/* "IA" en hueco: relleno crema y contorno tinta. El detalle que convierte el
   logotipo en el acento grafico de la pagina. */
.wordmark em {
    font-style: normal;
    color: var(--paper);
    -webkit-text-stroke: 3px var(--ink);
}

.tagline {
    font-size: clamp(1rem, 1.5vw, 1.2rem);
    font-weight: 700;
}

.lede {
    /* 34ch a 15px era una nota al pie debajo del lema. Es LA frase que explica
       el producto, asi que se le da cuerpo: mas tamano y mas interlineado.

       Y MAS ANCHO, no menos. A 40ch el texto caia en cuatro renglones y el
       bloque se hacia alto y estrecho justo encima de la tira de sellos, que
       tambien es una fila de tres: dos columnas estrechas apiladas. A 53ch cabe
       en tres renglones y el bloque se asienta. Medido en 1366, 1280 y 1920. */
    max-width: 53ch;
    margin-inline: auto;
    font-size: clamp(15.5px, 1.25vw, 17px);
    line-height: 1.55;
    font-weight: 500;
    color: var(--ink-2);
    text-wrap: balance;
}

/* ---- Gancho al verificador de citas ----
   Producto gratuito, anunciado desde el panel de marca. La jerarquia esta
   calculada para que NO compita con "Continuar con Google": la tarjeta es
   plana (el relieve sigue reservado a lo que se pulsa), el fondo es crema
   sobre el dorado del panel en vez de blanco como la tarjeta de acceso, y la
   unica pieza con fisica de boton es el enlace, que hereda el escalon mas
   bajo del sistema, el de .nb-chip. */
.cross-sell {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(6px, 0.9vh, 9px);
    width: min(38ch, 100%);
    padding: clamp(10px, 1.5vh, 16px) 18px clamp(12px, 1.7vh, 18px);
    background: var(--paper);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    text-align: center;
}

/* Ambar de texto, no --nb-gold: sobre crema el dorado de fondo da ~1.6:1. */
.cross-sell-eyebrow {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--nb-amber-text);
}

.cross-sell-name {
    font-size: clamp(1.05rem, 1.7vw, 1.25rem);
    letter-spacing: -.015em;
}

.cross-sell-desc {
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--ink-2);
}

/* "Gratis y sin crear cuenta" es el argumento entero del gancho, asi que se
   trata como etiqueta y no como texto corrido: quien solo barre la pantalla
   tiene que verlo antes que la descripcion. Verde de fondo con tinta encima;
   el verde como texto se queda al filo de AA. */
.cross-sell-free {
    padding: 5px 11px;
    background: var(--nb-green-bg);
    color: var(--ink);
    border: var(--nb-bd-hair) solid var(--ink);
    border-radius: var(--radius);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
}

/* Blanco, para despegarse del crema de la tarjeta sin subir de rango: el
   resto de la fisica (relieve, hover, hundido) ya la pone a.nb-chip. */
.cross-sell-link {
    margin-top: 3px;
    background: var(--white);
}

.cross-sell-link:hover {
    background: var(--nb-gold);
}

.cross-sell-link svg {
    transition: transform .13s var(--ease);
}

.cross-sell-link:hover svg {
    transform: translateX(2px);
}

.marquee {
    margin: 0 calc(var(--pad-brand) * -1) calc(var(--pad-brand) * -1);
}

/* ---- Panel derecho: acceso ---- */
.panel-auth {
    position: relative;
    min-width: 0;
    display: grid;
    /* Tres filas: la pagina que se turna arriba -centrada en lo que sobre-, el
       mando debajo y el pie al final. Antes eran dos hijos y la tercera fila
       quedaba vacia para empujar la tarjeta al centro; ahora la fila la ocupa
       el mando, asi que el centrado lo hace el `1fr` de arriba. */
    grid-template-rows: 1fr auto auto;
    justify-items: center;
    align-items: center;
    padding: var(--pad-auth);
    background: var(--paper);
    /* El fondo cambia con la pagina, y esa transicion es la mitad del efecto de
       «pasar de pagina»: sin ella se cambia una tarjeta, con ella cambia el
       lado entero. */
    transition: background .5s var(--ease);
}

/* Las dos paginas comparten fondo, y a proposito. Se probo con el verificador
   en blanco para que el turno se notara mas y el efecto fue el contrario: la
   tarjeta, que tambien es blanca, se disolvia en el panel y perdia el relieve
   que si tiene en la pagina de acceso. El turno ya se nota por el contenido;
   el fondo solo tenia que dejar de estorbar. */

/* Papel milimetrado a 28px: rima con la reticula de 22px del panel de marca
   sin repetirla. */
.panel-auth::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(to right, rgba(20, 18, 15, .055) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(20, 18, 15, .055) 1px, transparent 1px);
    background-size: 28px 28px;
    pointer-events: none;
}

.auth-card {
    position: relative;
    z-index: 1;
    grid-row: 2;
    width: min(430px, 100%);
    max-width: 100%;
    padding: clamp(26px, 3.2vw, 38px);
    background: var(--white);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    /* Pieza protagonista del index: conserva relieve, pero derivado del token
       y con el mismo peso extra que la accion principal, no mas. */
    box-shadow: calc(var(--nb-sx) + 2px) calc(var(--nb-sx) + 2px) 0 var(--ink);
    /* Todo centrado. Las dos tarjetas del panel derecho se turnan en el mismo
       hueco, asi que alinear una a la izquierda y otra al centro haria que el
       texto saltara de sitio en cada cambio; y con los botones a todo lo ancho,
       un titulo pegado al margen izquierdo se lee como un descuadre. */
    text-align: center;
}

/* La sombra del boton de planes, en el dorado de la casa.
   Es el unico sitio del sistema donde una sombra no es tinta: marca el segundo
   camino -ver precios- sin darle el peso del primero, que sigue siendo entrar
   con Google.

   El dorado y no el terracota. Se probo con --nb-terracotta (#E2552B) y sobre
   el negro del boton leia como ROJO, que en una interfaz significa error y aqui
   no hay ninguno. --nb-gold es literalmente el fondo del panel de la izquierda,
   asi que la sombra ata los dos lados de la pantalla en vez de introducir un
   color que no esta en ninguna otra parte.

   Va acotado a .auth-card: `.nb-btn--ink` tambien lo usa el boton de compra de
   pricing.html, y alli el dorado no significa nada. */
.auth-card .nb-btn--ink {
    --sx-color: var(--nb-gold);
}

.auth-title {
    margin-bottom: 8px;
    font-size: clamp(1.7rem, 2.6vw, 2.15rem);
}

.auth-sub {
    margin-bottom: 24px;
    font-size: 14.5px;
    color: var(--ink-soft);
}

.login-btn {
    --sx: calc(var(--nb-sx) + 2px);
}

/* Perfil autenticado. app.js alterna el display en linea entre 'none' y
   'flex', asi que la direccion de columna tiene que vivir aqui para
   sobrevivir a ese cambio. */
.user-profile {
    display: none;
    flex-direction: column;
    gap: 12px;
}

.user-info {
    display: flex;
    align-items: center;
    min-width: 0;
    gap: 12px;
    padding: 11px 13px;
    background: var(--paper-2);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
}

.user-avatar {
    width: 38px;
    height: 38px;
    flex: none;
    object-fit: cover;
    background: var(--white);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
}

.user-name {
    min-width: 0;
    overflow: hidden;
    font-size: 14px;
    font-weight: 700;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.fineprint {
    margin-top: 18px;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--ink-soft);
    text-align: center;
}

.fineprint a {
    color: var(--ink);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 2px;
    text-underline-offset: 2px;
}

.fineprint a:hover {
    background: var(--nb-gold);
}

/* ---- Pie compartido ---- */
.page-foot {
    position: relative;
    z-index: 1;
    grid-row: 3;
    align-self: end;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 12px 18px;
    padding-top: 26px;
    text-align: center;
}

.foot-links {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px 14px;
    font-size: 12.5px;
    color: var(--ink-soft);
}

.foot-links a {
    border-bottom: 2px solid var(--ink);
    color: var(--ink);
    font-weight: 700;
    text-decoration: none;
}

.foot-links a:hover {
    background: var(--nb-gold);
}

.foot-social {
    display: flex;
    gap: 8px;
}

/* Botones de icono del pie: secundarios y pequenos. Se quedan planos; el
   relieve se reserva para los botones de accion. */
.foot-social a {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    background: var(--white);
    border: 2px solid var(--ink);
    border-radius: var(--radius);
    transition: transform .13s var(--ease), background-color .13s var(--ease);
}

.foot-social a:hover {
    background: var(--nb-gold);
}

.foot-social a:active {
    transform: translate(1px, 1px);
}

.foot-social svg {
    width: 16px;
    height: 16px;
    fill: var(--ink);
}

/* --------------------------------------------------------------------------
   6. Modal de instalacion PWA (lo puebla landing.js)
   -------------------------------------------------------------------------- */
.pwa-install-btn[hidden] {
    display: none;
}

.pwa-guide-modal[hidden] {
    display: none;
}

.pwa-guide-modal {
    position: fixed;
    inset: 0;
    z-index: 200;
    display: grid;
    place-items: center;
    padding: 20px;
}

.pwa-guide-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(20, 18, 15, .55);
}

.pwa-guide-dialog {
    position: relative;
    width: min(420px, 100%);
    max-height: 85dvh;
    overflow-y: auto;
    padding: clamp(22px, 3vw, 30px);
    background: var(--paper);
    border: var(--bd-thick) solid var(--ink);
    border-radius: var(--radius);
}

.pwa-guide-close {
    position: absolute;
    top: 14px;
    right: 14px;
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    background: var(--white);
    border: 2px solid var(--ink);
    border-radius: var(--radius);
    transition: transform .13s var(--ease), background-color .13s var(--ease);
}

.pwa-guide-close:hover {
    background: var(--terracotta);
}

.pwa-guide-close:active {
    transform: translate(1px, 1px);
}

.pwa-guide-close svg {
    width: 17px;
    height: 17px;
}

.pwa-guide-kicker {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--ink-soft);
}

.pwa-guide-title {
    margin: 6px 0 10px;
    font-size: 1.5rem;
}

.pwa-guide-intro {
    margin-bottom: 16px;
    font-size: 14px;
    color: var(--ink-2);
}

.pwa-guide-steps {
    counter-reset: pwa-step;
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 20px;
}

.pwa-guide-steps li {
    counter-increment: pwa-step;
    display: flex;
    gap: 12px;
    align-items: flex-start;
    padding: 11px 13px;
    background: var(--white);
    border: 2px solid var(--ink);
    border-radius: var(--radius);
    font-size: 14px;
    line-height: 1.45;
}

.pwa-guide-steps li::before {
    content: counter(pwa-step);
    display: grid;
    place-items: center;
    width: 24px;
    height: 24px;
    flex: none;
    background: var(--nb-gold);
    border: 2px solid var(--ink);
    border-radius: var(--radius);
    font-size: 12px;
    font-weight: 700;
}

.pwa-guide-ok {
    --sx: var(--nb-sx);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 50px;
    padding: 13px 20px;
    background: var(--ink);
    color: var(--paper);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    box-shadow: var(--sx) var(--sx) 0 var(--nb-gold);
    font-size: 15px;
    font-weight: 700;
    transition: transform .13s var(--ease), box-shadow .13s var(--ease);
}

.pwa-guide-ok:hover {
    transform: translate(-2px, -2px);
    box-shadow: calc(var(--sx) + 2px) calc(var(--sx) + 2px) 0 var(--nb-gold);
}

.pwa-guide-ok:active {
    transform: translate(var(--sx), var(--sx));
    box-shadow: 0 0 0 var(--nb-gold);
}

/* --------------------------------------------------------------------------
   7. Pricing
   -------------------------------------------------------------------------- */
.page-pricing {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    min-height: 100dvh;
    background: var(--paper);
    background-image:
        linear-gradient(to right, rgba(20, 18, 15, .05) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(20, 18, 15, .05) 1px, transparent 1px);
    background-size: 28px 28px;
}

.topbar {
    position: sticky;
    top: 0;
    z-index: 30;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 13px clamp(16px, 3vw, 40px);
    background: var(--nb-gold);
    border-bottom: var(--bd-thick) solid var(--ink);
}

.topbar-brand {
    display: flex;
    align-items: center;
    gap: 11px;
    font-family: var(--font-display);
    font-size: 19px;
    letter-spacing: -.02em;
    text-decoration: none;
}

.topbar-brand .logo-badge {
    width: 40px;
    height: 40px;
}

.topbar-brand .logo-badge svg {
    width: 23px;
    height: 23px;
}

.topbar-actions {
    display: flex;
    align-items: center;
    gap: 10px;
}

.topbar-actions .nb-chip {
    min-height: 42px;
}

/* En la barra el perfil es una fila, no una columna: se sobreescribe la
   direccion que usa el panel de acceso del index. */
.topbar-actions .user-profile {
    flex-direction: row;
    align-items: center;
    gap: 10px;
}

.topbar-actions .user-info {
    padding: 5px 11px 5px 5px;
    background: var(--white);
}

.topbar-actions .user-avatar {
    width: 30px;
    height: 30px;
    border-width: 2px;
}

.topbar-actions .login-btn {
    --sx: calc(var(--nb-sx) - 1px);
    width: auto;
    min-height: 42px;
    padding: 9px 15px;
    font-size: 13px;
}

.pricing-main {
    flex: 1;
    width: 100%;
    max-width: 1080px;
    margin: 0 auto;
    padding: clamp(36px, 6vw, 72px) clamp(16px, 3vw, 40px) clamp(48px, 7vw, 88px);
}

.pricing-head {
    max-width: 640px;
    margin: 0 auto clamp(34px, 5vw, 56px);
    text-align: center;
}

.pricing-head .eyebrow {
    display: inline-block;
    margin-bottom: 18px;
}

.pricing-title {
    font-size: clamp(2.3rem, 6vw, 3.6rem);
    line-height: .95;
}

.pricing-title em {
    font-style: normal;
    color: var(--paper);
    -webkit-text-stroke: 3px var(--ink);
}

.pricing-sub {
    margin-top: 16px;
    font-size: clamp(15px, 1.7vw, 17px);
    color: var(--ink-2);
}

.plan-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(290px, 1fr));
    gap: clamp(22px, 3vw, 34px);
    align-items: start;
    max-width: 880px;
    margin: 0 auto;
}

/* Las tarjetas de plan son las piezas protagonistas de pricing: conservan
   relieve, pero medido desde el token. */
.plan-card {
    --sx: var(--nb-sx);
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 18px;
    padding: clamp(24px, 3vw, 34px);
    background: var(--white);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
    box-shadow: var(--sx) var(--sx) 0 var(--ink);
    transition: transform .16s var(--ease), box-shadow .16s var(--ease);
}

.plan-card:hover {
    transform: translate(-2px, -2px);
    box-shadow: calc(var(--sx) + 2px) calc(var(--sx) + 2px) 0 var(--ink);
}

.plan-card--pro {
    --sx: calc(var(--nb-sx) + 2px);
    background: var(--nb-gold);
    border-width: var(--bd-thick);
}

.plan-name {
    font-size: 1.45rem;
}

.plan-blurb {
    margin-top: -10px;
    font-size: 13.5px;
    color: var(--ink-soft);
}

.plan-card--pro .plan-blurb {
    color: var(--ink-2);
}

.plan-price {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 2px 9px;
    padding: 16px 0;
    border-top: var(--bd) solid var(--ink);
    border-bottom: var(--bd) solid var(--ink);
}

.plan-currency {
    font-family: var(--font-display);
    font-size: 1.3rem;
}

.plan-amount {
    font-family: var(--font-display);
    font-size: clamp(2.4rem, 6vw, 3.1rem);
    line-height: .9;
    letter-spacing: -.04em;
}

.plan-period {
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--ink-soft);
}

.plan-card--pro .plan-period {
    color: var(--ink-2);
}

.plan-features {
    display: flex;
    flex-direction: column;
    gap: 11px;
}

.plan-features li {
    display: flex;
    align-items: flex-start;
    gap: 11px;
    font-size: 14.5px;
    line-height: 1.45;
}

.plan-features svg {
    width: 21px;
    height: 21px;
    flex: none;
    margin-top: 1px;
    padding: 3px;
    background: var(--ink);
    color: var(--nb-gold);
    border-radius: var(--radius);
    stroke-width: 3;
}

.plan-features li.is-off {
    color: var(--ink-soft);
}

.plan-features li.is-off svg {
    background: var(--paper-2);
    color: var(--ink-soft);
}

.plan-cta {
    margin-top: auto;
    padding-top: 4px;
}

/* payments-bold.js alterna display entre 'none' e 'inline-flex' al renderizar
   el boton de Bold: el ancho completo tiene que venir del propio elemento. */
#pricing-buy-btn {
    width: 100%;
}

.bold-container-wrap {
    display: flex;
    justify-content: center;
    width: 100%;
}

.bold-container-wrap:not(:empty) {
    margin-top: 4px;
}

#pricing-payment-hint {
    margin-top: 12px;
    font-size: 12.5px;
    line-height: 1.45;
    text-align: center;
    color: var(--ink-2);
}

#pricing-payment-hint:empty {
    display: none;
}

.plan-note {
    margin-top: 10px;
    font-size: 12px;
    line-height: 1.45;
    text-align: center;
    /* Sobre el dorado de la tarjeta Pro, --ink-soft se quedaba en 4.38:1. */
    color: var(--ink-2);
}

.plan-note a {
    font-weight: 700;
    color: var(--ink);
    text-decoration: underline;
    text-decoration-thickness: 2px;
    text-underline-offset: 2px;
}

.plan-note a:hover {
    background: var(--white);
}

/* Preguntas */
.faq {
    max-width: 880px;
    margin: clamp(46px, 6vw, 78px) auto 0;
}

.faq-title {
    margin-bottom: 22px;
    font-size: clamp(1.4rem, 3vw, 1.8rem);
    text-align: center;
}

.faq-list {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
    gap: 16px;
}

/* Tarjetas de lectura, no pulsables: borde si, relieve no. */
.faq-item {
    padding: 20px 22px;
    background: var(--white);
    border: var(--bd) solid var(--ink);
    border-radius: var(--radius);
}

.faq-item h3 {
    margin-bottom: 8px;
    font-size: 15px;
    letter-spacing: 0;
}

.faq-item p {
    font-size: 14px;
    line-height: 1.55;
    color: var(--ink-2);
}

.faq-item a {
    font-weight: 700;
    color: var(--ink);
    text-decoration: underline;
    text-decoration-thickness: 2px;
    text-underline-offset: 2px;
}

.faq-item a:hover {
    background: var(--nb-gold);
}

/* Pie de la pagina de planes: banda tinta a todo el ancho */
.site-foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px 20px;
    padding: 20px clamp(16px, 3vw, 40px);
    background: var(--ink);
    color: var(--paper);
    border-top: var(--bd-thick) solid var(--ink);
    font-size: 12.5px;
}

.site-foot .foot-links {
    color: rgba(251, 243, 228, .7);
}

.site-foot .foot-links a {
    color: var(--nb-gold);
    border-bottom-color: var(--nb-gold);
}

.site-foot .foot-links a:hover {
    background: var(--nb-gold);
    color: var(--ink);
}

/* --------------------------------------------------------------------------
   8. Adaptacion a movil
   -------------------------------------------------------------------------- */
@media (max-width: 920px) {
    .split {
        grid-template-columns: 1fr;
        min-height: 0;
    }

    .panel-brand {
        border-right: none;
        border-bottom: var(--bd-thick) solid var(--ink);
    }

    /* En vertical el panel de marca deja de ser escena y pasa a ser cabecera:
       se cae todo lo decorativo para que el boton de acceso entre en pantalla
       sin desplazar. */
    .brand-core {
        gap: 12px;
        padding: 14px 0 16px;
        margin: 0;
    }

    /* La tarjeta del verificador si se queda: es la unica via de entrada
       al otro producto, pero adelgazada: en vertical no puede empujar el boton
       de acceso fuera de pantalla. La descripcion se cae con .lede; el
       nombre, el "gratis" y el enlace bastan para entender la oferta. */
    .lede,
    .cross-sell-desc {
        display: none;
    }

    .cross-sell {
        gap: 7px;
        padding: 12px 14px 14px;
    }

    .wordmark {
        font-size: clamp(2.9rem, 15vw, 4.4rem);
    }

    .wordmark em {
        -webkit-text-stroke-width: 2.5px;
    }

    .logo-badge {
        width: 42px;
        height: 42px;
    }

    .logo-badge svg {
        width: 24px;
        height: 24px;
    }

    .panel-auth {
        display: flex;
        flex-direction: column;
        gap: 18px;
        padding: clamp(18px, 4vw, 30px) var(--pad-auth) clamp(16px, 3vw, 24px);
    }

    .auth-card {
        width: min(430px, 100%);
        margin: 0 auto;
    }

    .page-foot {
        padding-top: 0;
        gap: 8px;
    }

    .foot-links {
        gap: 10px 14px;
        font-size: 11px;
    }

    .foot-social svg {
        width: 17px;
        height: 17px;
    }

    /* ── el no-scroll tambien en vertical ────────────────────────────────────
     *
     * Medido a 390x844: marca 441 + acceso 547 = 988px, 144 de mas. Lo que se
     * recorta es, por este orden: lo decorativo, el aire, y nada de lo que
     * informa. El gancho al verificador SE QUEDA -es la unica via de entrada al
     * otro producto- pero pasa de tarjeta a apunte: antetitulo fuera, el
     * "gratis" y el enlace en la misma linea. */
    .marquee {
        display: none;
    }

    .cross-sell-eyebrow {
        display: none;
    }

    .cross-sell {
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: center;
        gap: 8px;
        padding: 10px 12px;
    }

    .cross-sell-name {
        flex: 1 0 100%;
        font-size: 1rem;
    }

    .cross-sell-free {
        padding: 4px 9px;
        font-size: 10px;
    }

    .cross-sell-link {
        margin-top: 0;
    }

}

@media (max-width: 560px) {
    :root {
        --pad-brand: 20px;
        --pad-auth: 20px;
    }

    .nb-sticker {
        top: -15px;
        left: -8px;
        padding: 6px 12px;
        font-size: 10px;
    }

    /* En movil el relieve baja un escalon: todo vuelve al peso base del token. */
    .auth-card {
        box-shadow: var(--nb-sx) var(--nb-sx) 0 var(--ink);
    }

    .plan-card {
        --sx: var(--nb-sx);
    }

    .plan-card--pro {
        --sx: var(--nb-sx);
    }

    .site-foot {
        justify-content: center;
        text-align: center;
    }

    .topbar-name {
        display: none;
    }
}

/* En pantallas muy bajas (movil apaisado) el pie deja de competir por altura */
@media (max-height: 560px) and (min-width: 921px) {
    .brand-core {
        gap: 12px;
        padding: 18px 0;
    }

    .lede,
    .cross-sell-desc {
        display: none;
    }

    .cross-sell {
        gap: 7px;
        padding: 12px 14px 14px;
    }
}

/* --------------------------------------------------------------------------
   9. Preferencias del sistema
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }

    *,
    *::before,
    *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
    }

    /* Sin animacion el marquee se convierte en una banda estatica legible */
    .marquee-track {
        animation: none;
        transform: none;
    }
}

@media print {
    .marquee,
    .panel-brand::before,
    .panel-auth::before,
    .pwa-guide-modal,
    .pwa-install-btn {
        display: none !important;
    }

    body {
        background: #fff;
    }

    .nb-btn,
    .plan-card,
    .auth-card,
    .faq-item {
        box-shadow: none !important;
    }
}

/* --------------------------------------------------------------------------
   Reserva del texto en hueco
   --------------------------------------------------------------------------
   El relleno de .wordmark em y .pricing-title em es del color del papel: lo
   que los hace legibles es el contorno -webkit-text-stroke. Esa propiedad no
   tiene equivalente estandar, asi que si el navegador no la soporta el titular
   quedaria invisible (crema sobre crema). Aqui se renuncia al efecto y se
   recupera la legibilidad.
   -------------------------------------------------------------------------- */
@supports not (-webkit-text-stroke: 1px #000) {

    .wordmark em,
    .pricing-title em {
        color: var(--nb-ink);
    }
}

/* ── no-scroll en telefonos bajos ────────────────────────────────────────────
 *
 * Medido a 360x740 -un Galaxy A, que es de lo mas comun en Colombia-: marca 346
 * + acceso 506 = 852px, 112 de mas. Las reglas de ancho ya habian apretado lo
 * que se podia; lo que falta depende del ALTO, asi que se condiciona a el y no
 * al ancho: un telefono en horizontal no tiene este problema y no debe pagarlo.
 *
 * Se va lo decorativo y solo lo decorativo. El boton de Google, el enlace a
 * planes y el aviso de terminos no se tocan: son la razon de la pantalla. */
/* Compactacion del apilado. Depende SOLO del ancho: si los paneles estan
   apilados, el alto siempre es el recurso escaso, mida el telefono 640 o 932.
   Antes esto llevaba `and (max-height: 900px)` y dejaba a los telefonos de 915
   y 932 apilados pero sin compactar, con la tarjeta a tamano de escritorio. */
@media (max-width: 920px) {
    /* «Consulta. Analiza. Investiga.» es un lema, no informacion: el mismo
       mensaje lo da la frase del panel de acceso, que si se queda. */
    .tagline {
        display: none;
    }

    .brand-top {
        display: none;
    }

    .brand-core {
        gap: 10px;
        padding: 10px 0 12px;
    }

    .wordmark {
        font-size: clamp(2.3rem, 12vw, 3.2rem);
    }

    .cross-sell {
        padding: 8px 10px;
        gap: 6px;
    }

    .cross-sell-name {
        font-size: .92rem;
    }

    .panel-auth {
        gap: 12px;
        padding: 14px var(--pad-auth) 12px;
    }

    .auth-card {
        padding: 18px 16px 16px;
    }

    .fineprint {
        font-size: 10.5px;
    }

    .rotador-mando {
        margin-top: 10px;
    }

    .rotador-punto {
        padding: 4px 10px;
        font-size: 10px;
    }

    /* Las filas con linea divisoria ocupan mas que la lista con palomitas que
       sustituyeron -tres filas con aire arriba y abajo-, y en un telefono bajo
       eso saca la tarjeta del verificador de la pantalla. Se aprieta el aire,
       no se quita ninguna fila: las tres dicen algo que el usuario necesita
       antes de subir un escrito. */
    .verif-lista li {
        padding: 5px 4px;
    }

    .verif-lista {
        margin: 2px 0 4px;
        font-size: 12.5px;
    }

    .auth-title {
        font-size: clamp(1.35rem, 6vw, 1.7rem);
        margin-bottom: 5px;
    }

    .auth-sub {
        margin-bottom: 14px;
        font-size: 13.5px;
    }

    .auth-card {
        padding: 16px 15px 15px;
    }
}

/* ══ el panel que se turna ════════════════════════════════════════════════════ */

.rotador {
    position: relative;
    display: grid;
    /* `minmax(0, 1fr)` y no la pista `auto` por defecto. Con `auto`, la pista se
       dimensiona al max-content de la tarjeta mas ancha, y la lista de la
       tarjeta del verificador lleva `width: max-content`: entre las dos hacian
       crecer la pista a 430px dentro de una ventana de 350 y la pagina sacaba
       barra horizontal. El `minmax(0, ...)` es lo que permite que la pista
       encoja por debajo de su contenido. */
    grid-template-columns: minmax(0, 1fr);
    width: 100%;
    justify-items: center;
}

/* Las dos vistas comparten celda: asi el panel no cambia de alto al pasar de
   una a otra, que es lo que haria saltar al mando y al pie de abajo. */
.rotador-vista {
    grid-area: 1 / 1;
    width: min(430px, 100%);
    min-width: 0;
}

.rotador-vista[hidden] {
    display: none;
}

/* La animacion va en la vista que ENTRA y no como transicion, porque el
   elemento viene de `display: none` y una transicion no arranca desde ahi.
   Sube un poco y aparece: suficiente para que se lea como un cambio de pagina
   y lo bastante corto para no hacerse esperar. */
@keyframes rotador-entra {
    from { opacity: 0; transform: translateY(10px); }
    to   { opacity: 1; transform: translateY(0); }
}

.rotador-vista:not([hidden]) {
    animation: rotador-entra .38s var(--ease) both;
}

/* ── el mando ── */
.rotador-mando {
    display: flex;
    gap: 8px;
    margin-top: 16px;
}

.rotador-punto {
    padding: 5px 13px;
    background: transparent;
    color: var(--ink-soft);
    border: var(--nb-bd-hair) solid var(--ink-soft);
    border-radius: 999px;
    font-family: inherit;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
    cursor: pointer;
    /* El COLOR no se transiciona, solo el fondo y el borde. Al cambiar de
       pastilla, el fondo pasa de tinta a transparente mientras el texto iba de
       crema a tinta: a mitad de camino quedaba texto casi blanco sobre un fondo
       casi crema, y durante esos 150 ms la pastilla se veia vacia. Snapping el
       color, siempre hay contraste. */
    transition: background .15s var(--ease), border-color .15s var(--ease);
}

.rotador-punto:hover {
    border-color: var(--ink);
    color: var(--ink);
}

.rotador-punto[aria-selected='true'] {
    background: var(--ink);
    border-color: var(--ink);
    color: var(--paper);
}

/* ── la tarjeta del verificador ── */

/* El distintivo de «Gratis» en verde y no en dorado: el dorado es de la marca y
   aqui compite con el boton. El verde es el mismo de los estados favorables del
   verificador, asi que quien llegue alli lo reconoce. */
.nb-sticker--verde {
    background: var(--nb-green-bg);
    color: var(--nb-green);
}

.verif-lista {
    /* Filas centradas y separadas por una linea, sin palomitas.
       Las palomitas obligaban a alinear el texto a la izquierda -un chulo y una
       frase centrada no se pueden justificar a la vez sin que uno de los dos
       quede bailando- y en una tarjeta cuyo contenido va centrado eso rompia la
       simetria. Las lineas hacen el mismo trabajo de separar sin pedir sitio a
       un lado. */
    display: flex;
    flex-direction: column;
    margin: 4px 0 6px;
    padding: 0;
    list-style: none;
    font-size: 13.5px;
    line-height: 1.4;
    color: var(--ink-2);
}

.verif-lista li {
    padding: 9px 4px;
    text-align: center;
}

/* La linea va entre filas y no debajo de la ultima: `+` la pone solo donde hay
   una fila antes. Y en hairline, que en este sistema es el trazo de lo que
   separa, no de lo que encierra. */
.verif-lista li + li {
    border-block-start: var(--nb-bd-hair) solid color-mix(in srgb, var(--ink) 22%, transparent);
}

@media (prefers-reduced-motion: reduce) {
    .panel-auth,
    .rotador-vista:not([hidden]) {
        transition: none;
        animation: none;
    }
}

/* ══ las fuentes que se consultan ═════════════════════════════════════════════

   Tres sellos en tinta plana sobre el dorado. Sustituyen a una tarjeta de papel
   que decia los mismos tres nombres por escrito: un sello se reconoce sin
   leerlo, que es justo lo que hace falta en un panel que el visitante barre en
   medio segundo.

   Van en TINTA y no a todo color por dos motivos que apuntan al mismo sitio.
   El estetico: tres escudos fotograficos sobre un sistema de dos colores y
   trazo duro se ven pegados, no integrados. Y el que importa: un escudo oficial
   a todo color en la portada de un producto comercial se lee como aval de esa
   corporacion. No lo hay. El rotulo «Consulta» encima y la tinta plana dicen lo
   correcto: son las fuentes que este producto consulta. */
.fuentes {
    width: min(42ch, 100%);
}


.fuentes-lista {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(10px, 1.6vw, 20px);
    margin: 0;
    padding: 0;
    list-style: none;
}

.fuente {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
}

/* El disco de papel. Es lo que iguala tres emblemas que no componen igual -uno
   es un sello circular con texto alrededor, otro un aguila suelta y el tercero
   dos letras- y lo que les da el borde duro del sistema. */
.fuente-sello {
    display: grid;
    place-items: center;
    width: clamp(72px, 7.6vw, 94px);
    aspect-ratio: 1;
    background: var(--paper);
    border: var(--bd) solid var(--ink);
    border-radius: 50%;
    box-shadow: var(--nb-sx) var(--nb-sx) 0 var(--ink);
}

.fuente-sello img {
    width: 76%;
    height: 76%;
    object-fit: contain;
}

/* El hueco del Consejo de Estado mientras no haya sello: las siglas con el
   mismo encuadre. Un hueco vacio se leeria como que falta algo; dos letras
   bien puestas se leen como una marca mas. */
/* SUIN-Juriscol no es un sello circular sino un logotipo horizontal, asi que
   dentro del mismo disco necesita mas ancho: a 76% -la proporcion de los dos
   escudos- su trazo quedaba la mitad de grueso que el de ellos y la fila se
   veia descompensada. Lo que se iguala no es el tamano del archivo, es el peso
   visual. */
.fuente-sello--ancho img {
    width: 86%;
    height: auto;
}

.fuente-nombre {
    font-size: 11px;
    font-weight: 700;
    line-height: 1.25;
    letter-spacing: .02em;
    text-align: center;
    color: var(--ink-2);
}

/* ══ el fondo del panel de marca ══════════════════════════════════════════════

   Tres capas, de atras a adelante:

     1) bandas diagonales duras, en los dos dorados y el terracota, muy bajas de
        opacidad. Dan profundidad sin convertirse en un dibujo que compita con
        el logotipo.
     2) la trama de puntos que ya estaba.
     3) el borde en olas contra el panel derecho.

   Las bandas son `linear-gradient` con PARADAS DURAS -dos paradas en el mismo
   porcentaje- y no degradados: un degradado suave en un sistema de trazo duro
   se ve como un error de render. */
.panel-brand {
    background:
        linear-gradient(115deg,
            transparent 0 38%,
            color-mix(in srgb, var(--nb-gold-deep) 55%, transparent) 38% 46%,
            transparent 46% 100%),
        linear-gradient(115deg,
            transparent 0 62%,
            color-mix(in srgb, var(--nb-terracotta) 16%, transparent) 62% 66%,
            transparent 66% 100%),
        linear-gradient(200deg,
            color-mix(in srgb, var(--nb-paper) 26%, transparent) 0 14%,
            transparent 14% 100%),
        var(--nb-gold);
}

/* ── el borde en olas ──
   Va en un pseudoelemento sobre el canto derecho, con un SVG repetido en
   vertical: la onda tiene que ser IDENTICA en cada repeticion o se ve el corte,
   y eso con gradientes de CSS no sale limpio.

   El `border-right` del panel se quita aqui: la onda ya trae su propia linea de
   tinta y dos trazos juntos se verian como un error. */
.panel-brand {
    border-right: 0;
}

.panel-brand::after {
    content: '';
    position: absolute;
    inset-block: 0;
    inset-inline-end: -1px;
    width: 26px;
    z-index: 2;
    pointer-events: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='170' viewBox='0 0 26 170' preserveAspectRatio='none'%3E%3Cpath d='M26 0 H13 C1 21 1 64 13 85 C25 106 25 149 13 170 H26 Z' fill='%23FBF3E4'/%3E%3Cpath d='M13 0 C1 21 1 64 13 85 C25 106 25 149 13 170' fill='none' stroke='%2314120F' stroke-width='3'/%3E%3C/svg%3E");
    background-repeat: repeat-y;
    background-size: 26px 170px;
}

/* En vertical los paneles se apilan, asi que la onda tiene que pasar del canto
   derecho al canto de abajo. Se gira el mismo dibujo. */
@media (max-width: 920px) {
    .panel-brand {
        border-bottom: 0;
    }

    .panel-brand::after {
        inset: auto 0 -1px 0;
        width: auto;
        height: 22px;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='170' height='22' viewBox='0 0 170 22' preserveAspectRatio='none'%3E%3Cpath d='M0 22 V11 C21 -2 64 -2 85 11 C106 24 149 24 170 11 V22 Z' fill='%23FBF3E4'/%3E%3Cpath d='M0 11 C21 -2 64 -2 85 11 C106 24 149 24 170 11' fill='none' stroke='%2314120F' stroke-width='3'/%3E%3C/svg%3E");
        background-repeat: repeat-x;
        background-size: 170px 22px;
    }

    .fuentes-lista {
        gap: 10px;
    }
}

/* El escalon mas bajo del index: 360x740 y por debajo. La vista del verificador
   tiene una fila mas de contenido que la de acceso -el titular a dos lineas y
   las tres filas de la lista-, asi que es la que marca el limite. Va aparte
   para que un telefono de 844 no pague un recorte que solo necesita uno de
   740. */
@media (max-width: 920px) and (max-height: 760px) {
    .verif-lista li {
        padding: 3px 4px;
    }

    .verif-lista {
        font-size: 12px;
    }

    .auth-title {
        font-size: clamp(1.2rem, 5.4vw, 1.5rem);
    }

    .auth-sub {
        margin-bottom: 10px;
        font-size: 12.5px;
    }

    .nb-btn {
        min-height: 46px;
        font-size: 14px;
    }

    .fineprint {
        margin-top: 10px;
    }

}

/* ══ la tira de capacidades ═══════════════════════════════════════════════════

   Seis etiquetas en rejilla de 3x2. Es lo que dice que esto no es un buscador:
   la frase de arriba explica QUE es, y esto -sin que haya que leerlo entero-
   ensena CUANTO hace. Son los seis modos que el producto tiene de verdad, los
   que estan en chat.html, no una lista de aspiraciones.

   ── por que rejilla y no una fila que se envuelve ──
   Se probo con `flex-wrap` y filetes con `li + li`, y el filete salia tambien
   al principio del segundo renglon: `+` mira el orden en el DOM, no en que
   linea visual acaba cada elemento, y CSS no tiene forma de preguntar «eres el
   primero de tu renglon». Quedaba una raya suelta colgando a la izquierda que
   se leia como un error de render.

   Con la rejilla, quien empieza renglon se sabe de antemano -- `3n+1` -- asi
   que los filetes se ponen donde deben y no hay ninguno huerfano. De paso se
   lee como una tabla, que es mas deliberado que una lista que se desborda. */
.capacidades {
    display: grid;
    grid-template-columns: repeat(3, auto);
    justify-content: center;
    width: min(46ch, 100%);
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--nb-amber-text-strong);
}

.capacidades li {
    padding: 4px 10px;
    text-align: center;
}

/* Filete a la izquierda de todo el que NO empiece columna. */
.capacidades li:not(:nth-child(3n + 1)) {
    border-inline-start: var(--nb-bd-hair) solid color-mix(in srgb, var(--ink) 30%, transparent);
}

/* Y arriba de todo el que este en la segunda fila. */
.capacidades li:nth-child(n + 4) {
    border-block-start: var(--nb-bd-hair) solid color-mix(in srgb, var(--ink) 30%, transparent);
}

/* La rejilla de capacidades en telefonos bajos. NO se esconde: alli el `.lede`
   ya esta oculto, asi que esta rejilla es lo unico que dice que el producto
   hace mas que buscar.

   Va al FINAL del archivo y no dentro del bloque de 760 de mas arriba porque
   una media query no suma especificidad: colocada antes de las reglas base de
   `.capacidades`, ganaba la base por orden de aparicion y el override no hacia
   nada. */
@media (max-width: 920px) and (max-height: 760px) {
    .capacidades {
        font-size: 10px;
        letter-spacing: .02em;
    }

    .capacidades li {
        padding: 1px 6px;
    }

    /* Los ultimos tres pixeles: el hueco entre las piezas del panel de marca.
       A 360x740 sobraban tres, y bajarlos de aqui no le quita legibilidad a
       nada. */
    .brand-core {
        gap: 8px;
    }
}

/* ══ el apilado en vertical, revisado ═════════════════════════════════════════

   Se habia calibrado contra dos medidas concretas -390x844 y 360x740- y por eso
   fallaba en nueve de los veinte tamanos que se miden ahora: 375x667 (un iPhone
   SE, que hay muchos), 502x600, 820x600, 320x568. Ajustar a medidas sueltas es
   perseguir el sintoma; lo que sigue depende del ALTO disponible, que es la
   variable que manda cuando los dos paneles se apilan.

   ── la pegatina ──
   `.nb-sticker` cuelga 17px por encima de la tarjeta. En dos columnas eso cae
   sobre el papel del panel derecho y queda bien. Apilados, cae sobre el borde en
   olas del panel de marca y se cruzan los dos dibujos. Se mete dentro de la
   tarjeta: en el flujo, centrada, sin salirse de nada. */
@media (max-width: 920px) {
    .nb-sticker {
        position: static;
        display: inline-block;
        margin-bottom: 10px;
        transform: none;
    }
}

/* ── los sellos, solo si hay alto ──
   Las tres marcas con su pie ocupan unos 130px. En un movil en vertical eso es
   la cuarta parte de la pantalla, y compite con el boton de acceso, que es la
   razon de la pagina.

   710px NO es un numero elegido a ojo: se midio con los sellos siempre
   visibles y la pagina desbordaba en 568, 600, 640, 667 y 693, y cabia en 720,
   740, 800, 844, 915 y 932. El umbral esta donde esta la frontera. Si se toca
   algo del panel de marca, hay que volver a medirla.

   Lo que se pierde es la senal de «que cortes consulta». No es grave aqui: la
   rejilla de capacidades se queda, y la tarjeta de acceso dice que es un
   asistente de investigacion jurisprudencial colombiana. */
@media (max-width: 920px) and (max-height: 710px) {
    .fuentes {
        display: none;
    }
}

/* ══ el ultimo tramo: ventanas apiladas y bajas ═══════════════════════════════

   Quedaban 320x568, 480x600, 502x600 y 820x600. En vez de un escalon nuevo por
   cada medida -que es lo que ya se hizo mal dos veces- se ata el tamano al ALTO
   con `min()`: el wordmark deja de crecer solo con el ancho y pasa a estar
   acotado tambien por la ventana, asi que encoge solo en cuanto la pantalla es
   baja, sin que nadie escriba un umbral.

   Es la misma idea que ya usa el verificador con sus `svh`, y la que hace que
   esto aguante medidas que nadie midio. */
@media (max-width: 920px) {
    .wordmark {
        font-size: min(clamp(2.3rem, 12vw, 3.2rem), 9.5vh);
    }

    /* El pie en 320px se parte en tres renglones y pasa de 34 a 61px. Apretado
       y en una linea, vuelve a su sitio. */
    .page-foot {
        gap: 6px;
    }

    .foot-links {
        gap: 6px 10px;
        font-size: 10.5px;
    }

    .rotador-mando {
        margin-top: 8px;
    }
}

/* Y por debajo de 620px de alto, lo decorativo del panel de marca sobra: ahi
   el boton de acceso se juega la pantalla entera. */
@media (max-width: 920px) and (max-height: 620px) {
    .capacidades {
        font-size: 9.5px;
    }

    .capacidades li {
        padding: 1px 5px;
    }

    .brand-core {
        gap: 6px;
        padding: 8px 0 10px;
    }

    .panel-auth {
        gap: 8px;
        padding-block: 10px 8px;
    }

    /* El separador «PLANES» cuesta 61px el solo: 17 de contenido y 44 de
       margen. Es un rotulo de division, no una pieza; en una pantalla de 568px
       ese margen es un 8% del total. */
    .nb-rule {
        margin: 8px 0;
    }

    .fineprint {
        margin-top: 8px;
        font-size: 10px;
    }

    .nb-btn {
        min-height: 42px;
        padding: 9px 14px;
    }

    .login-btn {
        --sx: var(--nb-sx);
    }

    /* La tarjeta del verificador tiene una fila mas que la de acceso -el
       titular a dos lineas y tres filas de lista-, asi que es la que marca el
       limite de la pantalla. Se aprieta ella, no las dos. */
    .verif-lista li {
        padding: 1px 4px;
    }

    .verif-lista {
        font-size: 11px;
        margin: 0 0 2px;
    }

    .auth-title {
        font-size: 1.15rem;
    }

    .auth-sub {
        font-size: 11.5px;
        margin-bottom: 6px;
    }

    .rotador-mando {
        margin-top: 6px;
    }
}

/* ══ escritorio bajo ══════════════════════════════════════════════════════════

   1366x600 es un portatil con la barra de pestanas, la de direcciones y la de
   marcadores abiertas: ancho de sobra y 600px de alto. El bloque de arriba solo
   cubria por debajo de 560, asi que esta franja se quedaba fuera por 40px.

   En dos columnas hay ancho para todo, asi que aqui NO se esconde contenido:
   se quita aire. Y los sellos se quedan, que en un monitor son lo que dice de
   donde sale lo que responde. */
@media (max-height: 640px) and (min-width: 921px) {
    .brand-core {
        gap: clamp(8px, 1.2vh, 14px);
        padding: clamp(10px, 1.8vh, 22px) 0;
    }

    .fuente-sello {
        width: clamp(50px, 9vh, 66px);
    }

    .fuentes-lista {
        gap: clamp(8px, 1.2vw, 14px);
    }

    .panel-auth {
        padding-block: clamp(12px, 2vh, 24px);
    }

    .nb-rule {
        margin: clamp(10px, 1.8vh, 22px) 0;
    }

    .auth-card {
        padding: clamp(18px, 2.4vw, 30px);
    }
}
