/* ==========================================================================
   CUESTIONARIO EN TARJETAS
   Pantallas: /portal/nueva -> /portal/triaje/<id>/<bloque>  y  /portal/antecedentes

   Hoja propia de esta pantalla. Se carga DESPUES de kctp.css, asi que aqui se
   puede pisar la base sin pelear con la especificidad. Nada de esto sale de
   .kctp-cuest (o de las clases de pantalla del <body>): el resto del portal no
   se entera.

   LA IDEA, en una linea: cada pregunta es una TARJETA, no una fila de
   formulario. La tarjeta blanca flota sobre el hueso y dentro no hay ni una
   linea dura; la pregunta es el titular de su propia pantalla.

   De donde sale cada decision (vara = lovi.care, lado paciente):
     - La jerarquia la da el TAMANO, no el peso: la pregunta sube de 21px a
       --kctp-t-display (28 movil / 40 escritorio) en serif peso 400, y el
       titulo del bloque BAJA a 13px de apoyo. Antes competian dos serifs.
     - Interlineado 1.06 y tracking -.028em en ese display: es la palanca mas
       barata y la que mas se nota.
     - Cero bordes en el lado del paciente: la separacion la hace la sombra de
       dos capas de la base.
     - Ritmo de dos velocidades: 8-24px dentro de una tarjeta, 48-96px entre
       la cabecera y la tarjeta.
     - Lo elegido se marca con el GROSOR y la oscuridad del borde, nunca
       rellenando la opcion de color.

   VUELTA 2 (01-sep-2026). La critica de la vuelta anterior era toda de
   ESCRITORIO, y era correcta: a 1440 la pantalla era la version de telefono
   estirada. Se midio en vivo sobre /portal/triaje/98/0 y en una sola columna
   de 672px convivian CUATRO bordes izquierdos distintos (tarjeta en 384,
   opciones en 432, "Siguiente" flotando en 474, "Seguir despues" otra vez en
   384), y a 1920 sobraban 600px de fondo por lado que la pantalla no usaba.
   Lo que se hizo, en orden de impacto:

     1. ESCENARIO DE DOS COLUMNAS (seccion 6). Carril de orientacion a la
        izquierda -avance, mapa de secciones, la promesa- y la pregunta sola a
        la derecha. La composicion deja de ser "una columna centrada" y pasa a
        ser asimetrica, que es lo que hace la vara.
     2. UN SOLO BORDE IZQUIERDO Y UNO DERECHO. La tarjeta mide exactamente
        medida + 2 x padding, asi que lo de dentro llena el ancho y el padding
        queda simetrico; y la botonera es una rejilla anclada a esos mismos dos
        bordes ("Atras" a la izquierda, el primario a la derecha).
     3. EL ANCHO SE FIJA EN ch, no en pixeles sueltos: --cq-medida son 34rem,
        que a 17px son ~62 caracteres, la medida de parrafo de las dos
        referencias.
     4. EL FONDO DEJA DE SER PLANO. Un lavado de vino al 7% entrando por la
        izquierda le da profundidad al hueso y ocupa a proposito el ancho que
        antes sobraba.
     5. EL ORO APARECE UNA VEZ (y una sola): el escudo de la promesa. Es el
        mismo significado que las otras tres apariciones de oro del sistema
        -"esto lo cuidamos nosotros"- y al ser un icono con su texto al lado no
        depende del color para entenderse.

   VUELTA 2b (02-sep-2026). Se volvio a medir todo en vivo. Los tres bordes de
   arriba ya cuadraban; quedaban cinco cosas, y estas son:

     1. EL PIE LEGAL ERA EL CUARTO BORDE. Vive en el layout del portal, fuera
        de .kctp-cuest, asi que conservaba el lienzo de 720px de las demas
        pantallas: a 1440 el carril arrancaba en 354, la tarjeta en 714 y el
        pie en 494. Ahora el pie mide lo que mide la composicion (seccion 8) y
        entre 700 y 1079px el lienzo se aprieta al ancho de la tarjeta. Medido
        a 390, 768, 1000, 1079, 1440 y 1920: un solo borde izquierdo y uno
        derecho en las seis.
     2. EL CARRIL TENIA 455px DE NADA entre el porcentaje y la promesa. Vuelve
        el mapa de secciones, pero con los puntos unidos por un hilo: deja de
        tener forma de lista -que era el motivo por el que se habia apagado- y
        pasa a leerse como un recorrido. El hueco baja a 187px.
     3. EL FONDO ERA LISO DE VERDAD, no "casi liso": otra hoja del portal
        pisaba la regla del cuerpo y se llevaba por delante el grano y los
        lavados (desviacion medida: 0,0). Se apila en vez de pelear.
     4. EL MAPA NO PASABA CONTRASTE. Los nombres de seccion iban en el escalon
        de tinta que la base reserva para adornos: 2,57:1 sobre el hueso.
     5. LA PROMESA se queda pegada abajo mientras se contesta. En una pagina
        de 2.830px, decir "puedes cerrar y volver" solo al principio y al final
        es decirlo cuando no hace falta.

   VUELTA 3 (02-sep-2026). La critica volvio a ser toda de ESCRITORIO y volvio
   a tener razon: a 1440x900 la composicion medi­a 639px arrancando en 64, o sea
   que TODO cabia en el 45% de arriba y debajo quedaba una franja muerta; el
   carril se cortaba en "Fotografias" y flotaba sobre el vacio; las tres
   acciones caian en dos lineas con "Seguir despues" huerfano; y el pie legal
   quedaba partido por el pliegue. Todo junto se lee como pantalla sin
   terminar. Seis cambios, medidos antes y despues sobre /portal/triaje/98/*:

     1. LA COMPOSICION MIDE LA VENTANA. min-height: 100vh menos los dos
        rellenos del lienzo (seccion 6). La pregunta se centra verticalmente
        con margin-block:auto, la botonera baja al pie y la promesa cae al pie
        DE VERDAD de su columna. Medido: la composicion pasa de 639 a 740 y
        termina en 804; el pie legal arranca en 916, o sea entero por debajo
        del pliegue en vez de cortado a la mitad.
     2. LAS TRES ACCIONES, UNA SOLA LINEA (seccion 4): "Atras" y "Seguir
        despues" juntos a la izquierda -las dos son salidas- y el primario
        cerrando por la derecha. La fila baja de 94px a 54. En el telefono
        siguen siendo dos, que es lo unico que la critica dio por bueno.
     3. EL ENUNCIADO TIENE ESCALA PROPIA: --cq-pregunta, 32 en el telefono y 46
        en escritorio (antes 28/40). La tipografia ENCOGIA al pasar a
        escritorio: 8,2% del ancho de la tarjeta en movil contra 6,25% en
        escritorio. La bajada acompana, de 17 a 19px.
     4. EL CARRIL RESPIRA: el recorrido pasa de 7 a 10px de aire por escalon y
        la promesa de 13 a 15px, asi que el hueco entre el mapa y ella baja de
        307 a 216px y queda encuadrado entre dos anclas en vez de sobrar
        debajo de la ultima.
     5. EL CARRIL DEJA DE SER PEGAJOSO en modo "una pregunta": se clavaba
        arriba mientras la promesa subia con el scroll y se imprimian una
        encima de la otra.
     6. EL ESCENARIO DE DOS COLUMNAS ARRANCA EN 1.320 Y NO EN 1.080. La cuenta
        de la vuelta 2 se olvido del riel de navegacion (268px fijos): entre
        1.080 y 1.316 la tarjeta se salia por la derecha -212px de desborde a
        1.080 y 12 a 1.280, que es un portatil comun-. Verificado sin desborde
        en doce anchos.
   ========================================================================== */

/* Las medidas de la pantalla viven en el <body> y no en .kctp-cuest por un
   motivo practico: <main class="kctp-lienzo"> es HERMANO mayor de .kctp-cuest,
   y las variables CSS solo bajan. Si se declararan mas abajo, el lienzo no
   podria calcular su ancho a partir del ancho de la tarjeta. */
body.kctp-portal.pantalla-triaje,
body.kctp-portal.pantalla-nueva,
body.kctp-portal.pantalla-antecedentes {
    /* Medida de lectura, no el ancho del contenedor. 34rem = 544px, que a
       17px son ~62 caracteres: la columna de texto de la vara. */
    --cq-medida: 34rem;
    /* Padding lateral de la tarjeta de pregunta. Es UNA variable y no dos
       numeros sueltos justamente para poder calcular el ancho de la tarjeta a
       partir de ella y que el aire quede simetrico por construccion. */
    --cq-pad: var(--kctp-e5);          /* 24 en telefono */
    /* Ancho de la tarjeta = medida + los dos paddings. De aqui sale el borde
       izquierdo y el derecho de TODA la pantalla: tarjeta, botonera y rotulos
       comparten este ancho. */
    --cq-caja: calc(var(--cq-medida) + 2 * var(--cq-pad));
    /* El radio del control del paciente ya existe en la base (--kctp-radio-ch,
       12px). Aqui habia un 14px propio, y con el la pantalla corria cuatro
       peldanos de radio -10, 12, 14 y 20- con dos de ellos indistinguibles.
       Con este alias la escalera vuelve a ser la del sistema: 10 / 12 / 20. */
    --cq-radio-op: var(--kctp-radio-ch);
    /* Anchos del escenario de escritorio. Cambiar la composicion es cambiar
       estos dos numeros, no doce reglas. */
    --cq-carril: 17rem;
    --cq-calle:  5.5rem;

    /* VUELTA 3. El enunciado deja de heredar --kctp-t-display (28 -> 40) y
       tiene escala propia (32 -> 46). Motivo medido: en el telefono el titular
       ocupaba el 8,2% del ancho de la tarjeta y en escritorio solo el 6,25%, o
       sea que la tipografia se ENCOGIA al ganar sitio. La vara hace lo
       contrario: 28-36px en movil y 44-48px en escritorio, siempre en peso 400.
       El token global no se toca porque lo usan otras diez pantallas. */
    --cq-pregunta: clamp(2rem, 1.1rem + 3vw, 2.875rem);   /* 32 -> 46 */
    /* Interlineado sub-1,1 en el display: es la palanca mas barata de las dos
       referencias y la que mas se nota. Con 1,0 los acentos de dos renglones
       seguidos se tocaban; 1,04 conserva el efecto sin que se rocen. */
    --cq-lh-pregunta: 1.04;
    --cq-ls-pregunta: -.032em;
}

/* --------------------------------------------------------------------------
   0. EL LIENZO
   El hueso plano era lo que hacia que 600px de fondo por lado se leyeran como
   sobra y no como aire. Un lavado de vino entrando por la esquina superior
   izquierda -del lado del carril- le da profundidad y direccion a la pagina.
   Es atmosfera, no una forma: al 7% no se ve como un rectangulo, se ve como
   material. (El oro nunca va de fondo; regla 8 de kctp.css.)
   -------------------------------------------------------------------------- */

body.kctp-portal.pantalla-triaje,
body.kctp-portal.pantalla-nueva,
body.kctp-portal.pantalla-antecedentes {
    background-color: var(--kctp-fondo);
    /* El foco del lavado se ancla en PIXELES y no en un porcentaje del ancho.
       Con porcentajes pasaban las dos cosas malas a la vez: en 1920 el centro
       se iba tan a la derecha que la atmosfera se diluia y la pagina volvia a
       verse plana, y en 1440 quedaba medio tapado por el riel de navegacion,
       que ocupa los primeros 268px. Con min(24rem, 38%) el foco cae siempre
       justo donde empieza el contenido -384px en escritorio- y en el telefono
       el 38% lo devuelve dentro de la pantalla. */
    /* Tres capas, de arriba abajo:
         GRANO ... el hueso plano se lee como un #fbf7f5 y no como papel. Un
                   ruido fractal de 140px al 4% le da material: no se ve como
                   textura, se ve como que la pagina esta impresa en algo. Es
                   la unica manera honesta de meter "profundidad" en una
                   pantalla clinica donde no cabe una fotografia.
         LAVADO .. el vino entrando por la esquina del carril.
         POSO .... el tinto en la esquina opuesta, para que la pagina tenga
                   una diagonal y no un centro. */
    --cq-grano: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23g)' opacity='.07'/%3E%3C/svg%3E");
    --cq-lavado: radial-gradient(120rem 90rem at min(24rem, 38%) -12rem, rgba(91, 12, 47, .11), rgba(91, 12, 47, 0) 78%);
    --cq-poso:   radial-gradient(60rem 44rem at 100% 106%, rgba(38, 5, 20, .055), rgba(38, 5, 20, 0) 64%);
    background-image: var(--cq-grano), var(--cq-lavado), var(--cq-poso);
    background-repeat: repeat, no-repeat, no-repeat;
    background-size: 140px 140px, auto, auto;
}
/* OJO, ESTO PISA UNA REGLA DE OTRA HOJA A PROPOSITO.
   En escritorio v2/inicio.css pinta en el FONDO DEL CUERPO una columna blanca
   falsa (la variable --v2-columna) para que el riel de navegacion, que va en
   position:fixed, no se corte a mitad de una pagina larga. Su selector
   -body.kctp-portal:has(.kctp-riel)- pesa exactamente lo mismo que el mio
   (0,2,1) y su hoja se carga DESPUES por orden alfabetico, asi que ganaba y se
   llevaba por delante el grano y los dos lavados: medido, el fondo salia con
   desviacion 0.0, o sea liso del todo.
   La salida no es subir el volumen sino APILAR: aqui se repite su columna como
   primera capa -la de mas arriba, que es donde ella tiene que ir- y debajo van
   las tres mias. Si algun dia inicio.css deja de definir --v2-columna, el
   respaldo es `none` y lo unico que se pierde es la columna por debajo del
   pliegue en ESTAS tres pantallas; el grano y los lavados siguen.
   El :has(.kctp-riel) esta por dos motivos: sube la especificidad a (0,3,1) y
   ademas asegura que la columna solo se dibuje cuando el riel existe de
   verdad. */
@media (min-width: 1080px) {
    body.kctp-portal.pantalla-triaje:has(.kctp-riel),
    body.kctp-portal.pantalla-nueva:has(.kctp-riel),
    body.kctp-portal.pantalla-antecedentes:has(.kctp-riel) {
        background-image: var(--v2-columna, none), var(--cq-grano), var(--cq-lavado), var(--cq-poso);
        background-repeat: no-repeat, repeat, no-repeat, no-repeat;
        background-size: auto, 140px 140px, auto, auto;
        /* Las cuatro van CON la pagina, no con la ventana. Se probaron las dos
           formas: con background-attachment:fixed los lavados se leen mejor al
           hacer scroll -parecen luz de la sala y no una mancha pegada al
           papel-, pero basta con que UNA capa sea fija para que el fondo entero
           se ancle a la ventana, y entonces en una pagina larga (antecedentes
           mide 2.830px) todo lo que queda por debajo del pliegue sale liso.
           Medido en la captura de pagina completa: desviacion 1,9 arriba y 0,0
           abajo. Con las cuatro en scroll el papel llega hasta el pie (1,9 /
           0,9 / 2,4 arriba, en medio y abajo). El papel completo vale mas que
           el efecto de luz. */
        background-attachment: scroll, scroll, scroll, scroll;
    }
}

/* --------------------------------------------------------------------------
   1. EL CARRIL: progreso, mapa de secciones y promesa
   -------------------------------------------------------------------------- */

.kctp-cuest .kctp-progreso { margin-bottom: var(--kctp-e5); }
.kctp-cuest .kctp-progreso-texto {
    font-size: var(--kctp-t-meta);
    margin-bottom: 10px;
}
.kctp-cuest .kctp-progreso-barra { height: 3px; }

/* Los ocho chips con borde eran la senal "te faltan ocho secciones", que es
   justo la sensacion de cuestionario largo que hay que quitar. Se conservan
   TODOS los nombres: lo que se va es el marco. Queda un rail de texto donde
   solo la seccion actual esta subrayada. */
.kctp-cuest .kctp-pasos {
    gap: 2px 18px;
    margin-bottom: var(--kctp-e7);
    align-items: baseline;
}
.kctp-cuest .kctp-paso {
    background: none;
    border: 0;
    padding: 3px 0;
    font-size: var(--kctp-t-meta);
    /* En --kctp-tenue y no en --kctp-tenue-2. El token de la base lo dice sin
       rodeos: el segundo escalon es "solo iconos y adornos, nunca texto".
       Medido, el #a9989f sobre el hueso da 2,57:1 y el minimo para texto es
       4,5:1; el #7e6a73 da 4,7:1. Mientras el mapa estuvo apagado en el
       cuestionario esto pasaba desapercibido; ahora son ocho renglones en la
       pantalla principal, asi que hay que arreglarlo. La jerarquia entre
       "pendiente", "hecha" y "actual" no la pierde: la llevan la FORMA del
       punto (hueco / palomita / lleno con halo) y el peso de la actual, que es
       lo que pide WCAG 1.4.1. */
    color: var(--kctp-tenue);
    border-radius: 0;
    letter-spacing: 0;
}
.kctp-cuest .kctp-paso.hecho {
    background: none;
    border: 0;
    color: var(--kctp-tenue);
}
.kctp-cuest .kctp-paso.actual {
    background: none;
    border: 0;
    color: var(--kctp-tinto);
    font-weight: var(--kctp-peso-medio);
    box-shadow: inset 0 -2px 0 0 var(--kctp-acento);
}

/* La "tarjeta" que envolvia todo deja de ser una caja: pasa a ser la columna
   de la pantalla. Las cajas ahora son las preguntas. */
.kctp-cuest .kctp-tarjeta {
    background: none;
    box-shadow: none;
    border: 0;
    padding: 0;
    margin-bottom: 0;
}

/* Titulo del bloque, sobre el fondo hueso. */
.kctp-cuest .kctp-tarjeta > h2 {
    font-size: var(--kctp-t-display);
    line-height: var(--kctp-lh-display);
    letter-spacing: var(--kctp-ls-display);
    margin: 0 0 var(--kctp-e2);
    max-width: 20ch;
    text-wrap: balance;
}
.kctp-cuest .kctp-tarjeta > p.kctp-sub {
    font-size: var(--kctp-t-cuerpo);
    line-height: 1.5;
    max-width: 46ch;
    margin-bottom: var(--kctp-e6);
}
.kctp-cuest .kctp-aviso { margin-bottom: var(--kctp-e6); }

/* --- Modo "una pregunta por pantalla" -------------------------------------
   Aqui el titular de la pantalla ES la pregunta, asi que el nombre del bloque
   se retira a rotulo de apoyo y se lleva el contador a su misma linea:
   "Sobre ti - Pregunta 1 de 2". Dos rotulos de meta apilados eran dos lineas
   diciendo lo mismo. */
.kctp-modo-uno .kctp-cuest .kctp-tarjeta > h2 {
    font-family: var(--kctp-sans);
    font-size: var(--kctp-t-meta);
    font-weight: var(--kctp-peso-medio);
    line-height: 1.4;
    letter-spacing: 0;
    color: var(--kctp-tenue);
    max-width: none;
    margin-bottom: var(--kctp-e4);
}
.kctp-modo-uno .kctp-cuest .kctp-tarjeta > p.kctp-sub { display: none; }

/* Y con una pregunta por pantalla el mapa de secciones se va del telefono:
   no es navegable (son <span>, no enlaces) y lo unico que hace ahi es
   enumerar las ocho secciones que faltan, que es la sensacion que veniamos a
   quitar. En escritorio vuelve, porque alli tiene columna propia y deja de
   robarle sitio a la pregunta (seccion 6). */
.kctp-modo-uno .kctp-cuest .kctp-pasos { display: none; }

.kctp-cuest .kctp-paso-cuenta {
    display: inline;
    font-size: inherit;
    color: var(--kctp-tenue-2);
    font-weight: var(--kctp-peso-normal);
    font-variant-numeric: tabular-nums;
    margin: 0;
}
.kctp-cuest .kctp-paso-cuenta::before {
    content: "\00B7";
    margin: 0 .45em;
    color: var(--kctp-tenue-2);
}

/* "2 respuestas ya las teniamos de antes - Ver y corregir".
   Es informacion de servicio, no un estado de exito: fuera el panel verde. */
.kctp-cuest .kctp-ya-contestadas {
    background: none;
    padding: 0;
    margin: 0 0 var(--kctp-e4);
    font-size: var(--kctp-t-meta);
    color: var(--kctp-tenue);
    gap: .1rem .6rem;
}
.kctp-cuest .kctp-ya-contestadas .kctp-legal-mas {
    font-size: var(--kctp-t-meta);
    font-weight: var(--kctp-peso-normal);
}

/* --- La promesa ("puedes cerrar y volver") --------------------------------
   Tiene que estar siempre, pero en voz baja. Y es el UNICO oro de la
   pantalla: mismo significado que las otras tres apariciones de oro del
   sistema -"de esto nos ocupamos nosotros"- y, al ser un icono con su texto
   al lado, la informacion no depende del color (WCAG 1.4.1). Sobre hueso el
   #9c7433 da 4.1:1, por encima del 3:1 que pide un grafico. */
.kctp-cuest .cq-promesa {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin: var(--kctp-e5) 0 0;
    font-size: var(--kctp-t-meta);
    line-height: 1.5;
    /* En --kctp-tenue y no en --kctp-tenue-2: la base reserva ese segundo
       escalon para iconos y adornos, nunca para texto. */
    color: var(--kctp-tenue);
    max-width: 46ch;
}
.kctp-cuest .cq-promesa i {
    color: var(--kctp-oro);
    font-size: 1.05rem;
    line-height: 1.25;
    flex: 0 0 auto;
}

/* --------------------------------------------------------------------------
   2. LA TARJETA DE PREGUNTA
   -------------------------------------------------------------------------- */

.kctp-cuest .kctp-pregunta,
.kctp-cuest .kctp-uno .kctp-pregunta {
    background: var(--kctp-blanco);
    border: 0;
    border-bottom: 0;
    border-radius: var(--kctp-radio);
    box-shadow: var(--kctp-sombra);
    /* Padding IGUAL por los cuatro costados en el eje horizontal. El aire de
       abajo es un peldano mas que el de arriba porque el ojo lee un bloque
       como centrado cuando su base pesa un poco mas. */
    padding: var(--cq-pad) var(--cq-pad) calc(var(--cq-pad) + 8px);
    margin: 0 0 var(--kctp-e4);
    max-width: var(--cq-caja);
}

/* Todo lo que va dentro respeta la medida de lectura. Y como la tarjeta mide
   exactamente medida + 2 x padding, "respetar la medida" y "llenar el ancho"
   son lo mismo: el aire queda simetrico sin que nadie tenga que cuadrarlo. */
.kctp-cuest .kctp-pregunta > * { max-width: var(--cq-medida); }

/* El enunciado. En pila (varias preguntas a la vez) manda --kctp-t-titulo;
   cuando hay UNA sola en pantalla sube a display, porque es el titular. */
.kctp-cuest .kctp-pregunta > .kctp-etiqueta,
.kctp-cuest .kctp-pregunta > label.kctp-etiqueta {
    font-family: var(--kctp-serif);
    font-weight: var(--kctp-peso-normal);
    font-size: var(--kctp-t-titulo);
    line-height: var(--kctp-lh-titulo);
    letter-spacing: var(--kctp-ls-titulo);
    color: var(--kctp-tinto);
    margin-bottom: var(--kctp-e3);
    text-wrap: balance;
}
.kctp-cuest .kctp-uno .kctp-pregunta > .kctp-etiqueta,
.kctp-cuest .kctp-uno .kctp-pregunta > label.kctp-etiqueta {
    font-size: var(--cq-pregunta);
    line-height: var(--cq-lh-pregunta);
    letter-spacing: var(--cq-ls-pregunta);
    margin-bottom: var(--kctp-e3);
}
/* El asterisco de obligatoria pegado a un display de 40px se leia como parte
   del texto: se despega y se baja de tono. Pero NO en --kctp-tenue-2: ese
   escalon da 2.9:1 sobre blanco y el asterisco no es un adorno, es la unica
   marca visual de "esta hace falta". Con --kctp-tenue son 4.9:1 y pasa AA.
   (En la vuelta anterior salia rosa palido justamente por eso.) */
.kctp-cuest .kctp-obligatoria::after {
    content: " *";
    color: var(--kctp-tenue);
    font-size: .55em;
    vertical-align: .5em;
}

.kctp-cuest .kctp-ayuda,
.kctp-cuest .kctp-uno .kctp-ayuda {
    font-size: var(--kctp-t-cuerpo);
    line-height: 1.45;
    color: var(--kctp-tenue);
    margin: 0 0 var(--kctp-e5);
    max-width: 42ch;
}

/* --------------------------------------------------------------------------
   3. CONTROLES
   -------------------------------------------------------------------------- */

.kctp-cuest .kctp-opciones,
.kctp-cuest .kctp-uno .kctp-opciones { gap: 10px; }
.kctp-cuest .kctp-sino,
.kctp-cuest .kctp-uno .kctp-sino {
    gap: 10px;
    grid-template-columns: 1fr 1fr;
    max-width: min(var(--cq-medida), 26rem);
}

.kctp-cuest .kctp-opcion,
.kctp-cuest .kctp-uno .kctp-opcion {
    align-items: center;
    gap: var(--kctp-e3);
    padding: 16px 18px;
    min-height: 58px;
    /* --kctp-borde nace para separar del hueso; ahora la pregunta vive dentro
       de una tarjeta BLANCA y ahi se vuelve invisible: el control se lee como
       un hueco. La base ya tiene el token para este caso exacto. */
    border: 1px solid var(--kctp-borde-c);
    border-radius: var(--cq-radio-op);
    font-size: var(--kctp-t-cuerpo);
    line-height: 1.35;
    color: var(--kctp-tinta);
}
.kctp-cuest .kctp-opcion:hover {
    border-color: var(--kctp-borde-f);
    background: var(--kctp-crema);
}
/* Lo elegido: borde vino de 2px (1px + anillo interior), fondo blanco. */
.kctp-cuest .kctp-opcion.elegida,
.kctp-cuest .kctp-opcion:has(input:checked) {
    border-color: var(--kctp-acento);
    background: var(--kctp-blanco);
    box-shadow: inset 0 0 0 1px var(--kctp-acento);
}
.kctp-cuest .kctp-opcion input:checked + span {
    color: var(--kctp-tinto);
    font-weight: var(--kctp-peso-medio);
}

/* El control de serie del navegador es el detalle que mas delata una
   plantilla: se dibuja a mano, del tamano de la tipografia y en vino. Sigue
   siendo un <input> de verdad, asi que teclado y lector de pantalla no se
   enteran del cambio. */
.kctp-cuest .kctp-opcion input[type="radio"],
.kctp-cuest .kctp-opcion input[type="checkbox"] {
    appearance: none;
    -webkit-appearance: none;
    width: 22px;
    height: 22px;
    margin: 0;
    flex: 0 0 auto;
    /* El aro va en la tinta de apoyo y no en el borde de marca: un control
       necesita 3:1 contra el fondo (WCAG 2.2, no-texto) y el #dbc9d0 del
       borde se queda en 1.6:1. Con --kctp-tenue son 4.9:1. */
    border: 1.5px solid var(--kctp-tenue);
    background: var(--kctp-blanco);
    transition: border-color var(--kctp-mov-hover), background var(--kctp-mov-hover), box-shadow var(--kctp-mov-hover);
}
.kctp-cuest .kctp-opcion input[type="radio"] { border-radius: 50%; }
.kctp-cuest .kctp-opcion input[type="checkbox"] { border-radius: 7px; }
.kctp-cuest .kctp-opcion input[type="radio"]:checked {
    border-color: var(--kctp-acento);
    background: var(--kctp-acento);
    box-shadow: inset 0 0 0 4px var(--kctp-blanco);
}
.kctp-cuest .kctp-opcion input[type="checkbox"]:checked {
    border-color: var(--kctp-acento);
    background: var(--kctp-acento) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.4 8.4l3 3 6-6'/%3E%3C/svg%3E") center / 14px 14px no-repeat;
}

/* Campos de escribir. */
.kctp-cuest .kctp-pregunta input[type="text"],
.kctp-cuest .kctp-pregunta input[type="number"],
.kctp-cuest .kctp-pregunta input[type="date"],
.kctp-cuest .kctp-pregunta input[type="email"],
.kctp-cuest .kctp-pregunta textarea,
.kctp-cuest .kctp-pregunta select {
    border-radius: var(--cq-radio-op);
    border-color: var(--kctp-borde-c);   /* mismo motivo que en .kctp-opcion */
    padding: 14px 16px;
    min-height: 56px;
    font-size: var(--kctp-t-cuerpo);
    max-width: var(--cq-medida);
}
.kctp-cuest .kctp-pregunta textarea { min-height: 132px; line-height: 1.5; }

/* Las flechitas de serie del campo numerico. Son el mismo caso que el circulo
   del radio: dibujo del navegador dentro de una tarjeta que ya esta hecha a
   mano, y se ven como lo que son. No se pierde ninguna forma de contestar -se
   escribe el numero, y las flechas del teclado siguen subiendo y bajando- y en
   el telefono nunca existieron. */
.kctp-cuest .kctp-pregunta input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
.kctp-cuest .kctp-pregunta input[type="number"]::-webkit-outer-spin-button,
.kctp-cuest .kctp-pregunta input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

/* El numero y su unidad son un solo control, no dos cosas sueltas. */
.kctp-cuest .kctp-campo-fila {
    display: flex;
    align-items: center;
    gap: var(--kctp-e3);
}
/* Con el nombre de la clase en el selector del campo: la regla de la base
   (.kctp-pregunta input[type="number"]) pone width:100% y pesa mas que una
   clase suelta. */
.kctp-cuest .kctp-pregunta input.kctp-campo-corto { width: 7.5rem; min-width: 0; }
.kctp-cuest .kctp-pregunta input.kctp-campo-medio { width: 14rem; min-width: 0; }
.kctp-cuest .kctp-sufijo {
    font-size: var(--kctp-t-cuerpo);
    color: var(--kctp-tenue);
}

/* Error: el aro se lo lleva la tarjeta entera, no solo el campo. */
.kctp-cuest .kctp-pregunta.con-error {
    box-shadow: inset 0 0 0 1px var(--kctp-alerta-bd), var(--kctp-sombra);
}
.kctp-cuest .kctp-error { margin-top: var(--kctp-e3); }

/* --------------------------------------------------------------------------
   4. PIE DE LA PANTALLA
   Una sola rejilla para las DOS botoneras -la que arma el guion
   (.kctp-paso-botones) y la del servidor (.kctp-acciones)-, anclada a los
   mismos dos bordes que la tarjeta. Que se comportaran distinto era lo que
   hacia que la pantalla pareciera cambiar los botones de sitio al llegar a la
   ultima pregunta del bloque.

   VUELTA 3: LAS TRES PIEZAS VUELVEN A UNA SOLA LINEA. Hasta ahora "Seguir
   despues" caia en una segunda fila, y medido a 1440 quedaba solo, a 68px por
   debajo de "Atras" y contra el borde izquierdo: una linea con dos cosas y
   otra con una, que es exactamente la forma de un pie sin terminar. Las dos
   salidas son hermanas -las dos sacan de aqui- asi que van juntas a la
   izquierda, y el unico primario cierra por la derecha.

     columna 1 ......... "Atras": izquierda, pegado al borde de la tarjeta
     columna 2 ......... "Seguir despues", a su lado, en voz mas baja
     columna 4 ......... el primario: derecha, terminando en el borde derecho

   Tres piezas, UNA linea, dos bordes. Ni uno flotando en medio. (En el
   telefono manda el pulgar y la seccion 5 vuelve a partirla en dos filas: alli
   el primario se lleva la linea entera, que es lo unico que la critica dio por
   bueno.)
   -------------------------------------------------------------------------- */

.kctp-cuest .kctp-acciones,
.kctp-cuest .kctp-paso-botones {
    /* Fuera la raya: del lado del paciente separa la sombra, no una linea. */
    border-top: 0;
    padding-top: 0;
    margin-top: var(--kctp-e6);
    max-width: var(--cq-caja);
    display: grid;
    grid-template-columns: auto auto 1fr auto;
    align-items: center;
    column-gap: var(--kctp-e3);
    row-gap: var(--kctp-e4);
}
.kctp-cuest .kctp-paso-botones button.kctp-btn-suave { grid-area: 1 / 1; justify-self: start; }
.kctp-cuest .kctp-paso-botones > a                    { grid-area: 1 / 2; justify-self: start; }
.kctp-cuest .kctp-paso-botones .kctp-btn-primario     { grid-area: 1 / 4; justify-self: end; }
/* En la fila del servidor "Atras" es un <a> y solo existe a partir del
   segundo bloque; cuando no esta, el <a> que queda es "Seguir despues", que
   nunca es el primer hijo (el boton va antes). Por eso :first-child es un
   selector seguro aqui y no hace falta una clase nueva. */
.kctp-cuest .kctp-acciones > a:first-child            { grid-area: 1 / 1; justify-self: start; }
.kctp-cuest .kctp-acciones > a:last-child             { grid-area: 1 / 2; justify-self: start; }
.kctp-cuest .kctp-acciones > button                   { grid-area: 1 / 4; justify-self: end; }

.kctp-cuest .kctp-paso-botones .kctp-btn-primario,
.kctp-cuest .kctp-acciones .kctp-btn-primario {
    min-height: 54px;
    font-size: var(--kctp-t-cuerpo);
}
/* Una sola cosa con pinta de boton por pantalla. "Atras" es una salida, no una
   propuesta: se queda en texto para que el ojo vaya directo a "Siguiente".
   Se apunta al <button> y al <a> por separado porque "Seguir despues" es un
   <a> con las MISMAS clases y ese va en su propia linea. */
.kctp-cuest .kctp-paso-botones button.kctp-btn-suave,
.kctp-cuest .kctp-acciones a.kctp-btn-suave {
    background: none;
    border-color: transparent;
    color: var(--kctp-tenue);
    padding-left: 0;
    padding-right: var(--kctp-e4);
}
.kctp-cuest .kctp-paso-botones button.kctp-btn-suave:hover,
.kctp-cuest .kctp-acciones a.kctp-btn-suave:hover {
    background: none;
    border-color: transparent;
    color: var(--kctp-acento);
}
.kctp-cuest .kctp-paso-botones button.kctp-btn-suave:disabled {
    color: var(--kctp-tenue-2);
    border-color: transparent;
}
/* "Seguir despues" es la salida mas suave de las tres: ni boton ni columna
   propia, una linea de texto pegada al borde izquierdo. */
.kctp-cuest .kctp-paso-botones > a,
.kctp-cuest .kctp-acciones > a:last-child {
    background: none;
    border-color: transparent;
    color: var(--kctp-tenue);
    font-size: var(--kctp-t-menor);
    padding: 0;
    min-height: 0;
}
.kctp-cuest .kctp-paso-botones > a:hover,
.kctp-cuest .kctp-acciones > a:last-child:hover { color: var(--kctp-acento); background: none; }

.kctp-cuest .kctp-paso-falta {
    margin: var(--kctp-e4) 0 0;
    font-size: var(--kctp-t-menor);
    max-width: var(--cq-caja);
}

/* --------------------------------------------------------------------------
   5. TELEFONO
   Aqui manda el pulgar: el primario se lleva la linea entera y las dos
   salidas comparten la de abajo. Es la unica parte de la pantalla que la
   critica dio por buena, asi que se toca lo minimo.
   -------------------------------------------------------------------------- */

@media (max-width: 699px) {
    .kctp-cuest .kctp-acciones,
    .kctp-cuest .kctp-paso-botones {
        grid-template-columns: auto 1fr auto;
        row-gap: var(--kctp-e3);
    }
    /* El primario, primero y a lo ancho. */
    .kctp-cuest .kctp-paso-botones .kctp-btn-primario,
    .kctp-cuest .kctp-acciones > button { grid-area: 1 / 1 / 2 / -1; justify-self: stretch; }
    /* Y debajo, las dos salidas en la misma linea. */
    .kctp-cuest .kctp-paso-botones button.kctp-btn-suave,
    .kctp-cuest .kctp-acciones > a:first-child { grid-area: 2 / 1; justify-self: start; }
    .kctp-cuest .kctp-paso-botones > a,
    .kctp-cuest .kctp-acciones > a:last-child  { grid-area: 2 / 2 / 3 / -1; justify-self: start; }
    .kctp-cuest .kctp-uno .kctp-pregunta { min-height: 14rem; }
}

/* --------------------------------------------------------------------------
   6. ESCRITORIO: un escenario de dos columnas
   -------------------------------------------------------------------------- */

@media (min-width: 700px) {
    body.kctp-portal.pantalla-triaje,
    body.kctp-portal.pantalla-nueva,
    body.kctp-portal.pantalla-antecedentes {
        --cq-pad: var(--kctp-e7);   /* 48px: el aire lateral de la tarjeta */
    }
    .kctp-cuest .kctp-pregunta,
    .kctp-cuest .kctp-uno .kctp-pregunta {
        margin-bottom: var(--kctp-e5);
        /* El radio sube un peldano al pasar a escritorio. No es un valor nuevo
           en la escalera: es la MISMA pieza a otro tamano, que es literalmente
           lo que hace la vara ("en movil baja un escalon: 20/24px"). En el
           telefono la tarjeta ocupa casi toda la pantalla y 20px ya se leen
           blandos; aqui es un panel de 640x443 sobre un lienzo enorme y con
           20px se emparentaba con los controles de 12 que lleva dentro. */
        border-radius: 24px;
    }

    /* El par "Si / No" pasa a llenar la medida. Con los 26rem del telefono
       cada tarjeta de /portal/antecedentes -y son ocho seguidas- se quedaba
       con 128px de blanco a la derecha del control, que es exactamente el
       "descentrado" que se venia a arreglar. Llenando la medida, las dos
       mitades (272px) son la mitad justa de una fila de opciones normal: una
       sola escalera de anchos en toda la pantalla. */
    .kctp-cuest .kctp-sino,
    .kctp-cuest .kctp-uno .kctp-sino { max-width: var(--cq-medida); }

    /* Antes cada pregunta reservaba 20rem y el contenido se quedaba pegado
       arriba: la tarjeta se leia como un rectangulo vacio con una firma. Se
       conserva un piso de altura (para que no salte de una pregunta a otra)
       pero el contenido se centra. */
    .kctp-cuest .kctp-uno .kctp-pregunta {
        min-height: 19rem;
        display: flex;
        flex-direction: column;
        justify-content: center;
        /* En el telefono la tarjeta ocupa casi toda la pantalla y una sombra
           discreta basta. Aqui es UN objeto de 640px sobre un lienzo enorme:
           lo que tiene que hacer es despegarse. La base ya guarda esa sombra
           para "la tarjeta que flota de verdad" (contacto de 1px + difusa de
           56px con spread negativo, tenida de tinto), y esta es exactamente
           esa situacion. */
        box-shadow: var(--kctp-sombra-caja);
    }
    .kctp-cuest .kctp-uno .kctp-pregunta.con-error {
        box-shadow: inset 0 0 0 1px var(--kctp-alerta-bd), var(--kctp-sombra-caja);
    }
    .kctp-cuest .kctp-uno .kctp-ayuda { margin-bottom: var(--kctp-e6); }

    /* Un boton de 580px de ancho no se lee como un boton, se lee como una
       banda. En el telefono ocupa la linea entera porque ahi es el pulgar
       quien manda; aqui vuelve a su tamano y se pega al borde derecho. */
    .kctp-cuest .kctp-paso-botones .kctp-btn-primario,
    .kctp-cuest .kctp-acciones .kctp-btn-primario { min-width: 14rem; }
    /* En /portal/antecedentes el primario es el unico hijo de la fila y viene
       con .kctp-btn-bloque (width:100%). Sin esto se estiraria a los 640px de
       la tarjeta; con esto comparte borde derecho con las tarjetas de arriba,
       igual que "Siguiente" en el cuestionario. */
    .kctp-cuest .kctp-acciones > .kctp-btn-bloque { width: auto; min-width: 16rem; }
}

/* El escenario de dos columnas empieza cuando cabe de verdad: carril (17rem) +
   calle (5.5rem) + tarjeta (40rem) = 1000px, mas los 48 de aire del lienzo son
   1.048... Y A LA IZQUIERDA HAY UN RIEL DE NAVEGACION DE 268px QUE NO SE MUEVE.
   La cuenta de la vuelta 2 se olvido de ese riel y puso el corte en 1.080, asi
   que entre 1.080 y 1.316 la composicion no cabia y la tarjeta se salia por la
   derecha: medido, 212px de desborde a 1.080, 92 a 1.200 y 12 a 1.280 -o sea
   que en un portatil de 1.280, que es de los mas comunes, el borde derecho de
   la pregunta quedaba fuera de la pantalla-. El corte real es 268 + 1.048 =
   1.316, y se redondea a 1.320. Por debajo la pantalla vuelve a ser UNA columna
   (que ya estaba resuelta) en vez de dos columnas rotas. Verificado sin
   desborde horizontal en 1.000, 1.024, 1.080, 1.120, 1.200, 1.280, 1.320,
   1.366, 1.400, 1.440, 1.600 y 1.920. */
@media (min-width: 1320px) {
    /* El lienzo del portal mide 720px para todo el mundo. Esta pantalla pide
       otra cosa, y lo pide SOLO para si misma (de ahi la clase de pantalla que
       el layout ya pone en el <body>): la hoja base no se toca. */
    body.pantalla-triaje main.kctp-lienzo,
    body.pantalla-nueva main.kctp-lienzo,
    body.pantalla-antecedentes main.kctp-lienzo {
        max-width: calc(var(--cq-carril) + var(--cq-calle) + var(--cq-caja) + 2 * var(--kctp-e5));
    }

    .kctp-cuest {
        display: grid;
        /* La segunda columna mide exactamente la tarjeta. Asi el borde derecho
           de la tarjeta ES el borde derecho de la composicion, y no queda un
           sobrante que parezca un error de calculo. */
        grid-template-columns: var(--cq-carril) var(--cq-caja);
        grid-template-rows: auto 1fr;
        column-gap: var(--cq-calle);
        align-items: start;
    }
    /* Carril: se queda a la vista mientras se contesta. A partir de 1000px el
       riel de navegacion apaga la cabecera pegajosa, asi que aqui no hay nada
       que despejar y basta con los 64px de aire del lienzo. */
    .kctp-cuest .cq-rail {
        grid-area: 1 / 1;
        position: sticky;
        top: 4rem;
    }
    /* La promesa cierra el carril por ABAJO. Colgada del bloque de progreso
       quedaba flotando a media altura, que es como se ve un elemento al que no
       le asignaron sitio. Anclada al pie de la fila 2 la columna izquierda
       pasa a tener dos extremos -arriba donde vas, abajo la promesa- y el
       vacio de en medio deja de ser un descuido para ser el aire de la
       composicion. Es lo que hacen las dos referencias con sus columnas. */
    .kctp-cuest .cq-promesa {
        grid-area: 2 / 1;
        align-self: end;
        margin-top: var(--kctp-e9);
        /* Y ademas se queda pegada al borde de abajo de la ventana mientras se
           contesta. En /portal/triaje la pagina cabe entera y esto no hace
           nada; donde cambia el dia es en /portal/antecedentes, que mide
           2.830px de alto: sin esto, la promesa -"puedes cerrar y volver"- se
           lee al empezar, desaparece al segundo scroll y vuelve a aparecer
           cuando ya contestaste las ocho. Que es justo al reves de cuando
           hace falta. De paso el carril deja de tener 2.150px de nada entre
           el mapa y ella. */
        position: sticky;
        bottom: var(--kctp-e7);
        /* Es el ancla de abajo de la columna, no una nota al pie: en 13px se
           leia como el residuo del carril. A 15px pesa lo que tiene que pesar
           y sigue tres peldanos por debajo del enunciado. */
        font-size: var(--kctp-t-menor);
    }
    /* Y la pregunta ocupa la columna derecha entera. */
    .kctp-cuest .kctp-tarjeta { grid-area: 1 / 2 / 3 / 3; }

    /* --- VUELTA 3: LA COMPOSICION OCUPA LA PANTALLA ------------------------
       El defecto de la vuelta anterior, medido a 1440x900: la composicion
       media 639px y arrancaba en 64, o sea que TODO el contenido cabia en el
       45% de arriba; debajo quedaba una franja muerta de 197px y, ya pasado el
       pliegue, el pie legal cortado a la mitad (iba de 815 a 1036). Eso no se
       lee como aire, se lee como una pantalla a medio cargar.

       El aire de la vara tambien es enorme, pero es INTENCIONAL: sus columnas
       llegan de arriba abajo y el hueco queda ENTRE elementos anclados, no
       despues del ultimo. Asi que aqui la composicion pasa a medir lo que mide
       la ventana, y con eso pasan tres cosas de golpe:

         - la pregunta se centra VERTICALMENTE en el alto disponible en vez de
           colgar del borde de arriba (margin-block:auto sobre el unico hijo
           visible del formulario: el sobrante se reparte por igual arriba y
           abajo, y de paso empuja la botonera al pie);
         - el aviso del escudo cae al PIE de su columna de verdad (la fila 2 de
           la rejilla ya crece hasta abajo), asi que el carril tiene dos
           extremos y el hueco de en medio queda encuadrado;
         - el pliegue deja de cortar el pie legal: la primera pantalla termina
           limpia en el relleno del lienzo y el aviso de urgencias empieza
           entero mas abajo. No se quita ni una palabra, se corre.

       El resto (100vh - relleno de arriba - relleno de abajo) son exactamente
       los dos rellenos de .kctp-lienzo en escritorio: e8 arriba y 6rem abajo.
       Solo en modo "una pregunta por pantalla": /portal/antecedentes apila
       ocho tarjetas y mide 2.830px, ahi no hay sobrante que repartir. */
    body.kctp-modo-uno .kctp-cuest {
        min-height: calc(100vh - var(--kctp-e8) - 6rem);
    }
    /* Y con la composicion llena, el carril DEJA DE SER PEGAJOSO en este modo.
       No es un capricho: el carril se clavaba arriba mientras la promesa
       -anclada al pie de la composicion- subia con el scroll, y a mitad de
       recorrido una se metia encima de la otra ("Fotografias" y "Cada seccion
       se guarda..." impresas una sobre otra; visto en la ultima pregunta del
       bloque 2). El pegajoso existia para la pagina larga; aqui la pantalla
       cabe entera y la pagina solo baja lo que mide el aviso legal, asi que el
       carril no se pierde de vista y ya no hay dos cosas disputandose el mismo
       sitio. /portal/antecedentes no lleva esta clase y conserva su carril
       pegajoso, que ahi si hace falta (mide 2.830px). */
    body.kctp-modo-uno .kctp-cuest .cq-rail { position: static; }
    /* La columna derecha tiene que ESTIRARSE para que su reparto interno tenga
       alto que repartir; con el align-items:start de la rejilla se quedaba en
       la altura de su contenido. */
    body.kctp-modo-uno .kctp-cuest .kctp-tarjeta {
        align-self: stretch;
        display: flex;
        flex-direction: column;
    }
    body.kctp-modo-uno .kctp-cuest .kctp-tarjeta > form {
        display: flex;
        flex-direction: column;
        flex: 1 1 auto;
        min-height: 0;
    }
    /* Las que no tocan estan en display:none, asi que el unico que queda en el
       reparto es el paso actual. Sus dos margenes automaticos se comen el
       sobrante a partes iguales: pregunta al centro, botonera abajo. */
    body.kctp-modo-uno .kctp-cuest .kctp-uno .kctp-pregunta:not(.kctp-paso-oculto) {
        margin-top: auto;
        margin-bottom: auto;
    }
    /* CASO SIN PREGUNTA A LA VISTA: el bloque entero venia contestado de antes
       ("Preguntas de seguridad - Todo esto ya lo tenemos", que pasa en dos de
       los siete bloques de la consulta de prueba). Ahi no hay tarjeta que
       reparta el sobrante y la botonera se quedaba clavada arriba, con 570px de
       nada debajo: la unica pantalla del recorrido donde los botones y la
       promesa no compartian linea. Con esto la fila baja al mismo pie que en
       todos los demas pasos y la composicion sigue teniendo sus dos extremos.
       El :has() ya se usa en esta hoja y en la base. */
    body.kctp-modo-uno .kctp-cuest .kctp-uno:not(:has(.kctp-pregunta:not(.kctp-paso-oculto):not([hidden]))) .kctp-acciones {
        margin-top: auto;
    }

    /* Con la columna llena, el enunciado puede llevar dentro la escala que
       pide el sitio. La bajada sube de 17 a 19px: la vara pone subtitulos de
       22-24px debajo de displays de 44-48, y a 17px la nuestra se leia como
       la nota al pie de la pregunta y no como parte de ella. */
    .kctp-cuest .kctp-uno .kctp-ayuda { font-size: 1.1875rem; line-height: 1.4; }

    /* --- El carril por dentro ---------------------------------------------
       Todo lo de esta columna es de apoyo: 13 y 15px, tinta tenue. La unica
       cosa grande de la pantalla sigue siendo la pregunta. */
    .kctp-cuest .kctp-progreso { margin-bottom: var(--kctp-e8); }
    .kctp-cuest .kctp-progreso-texto {
        flex-direction: column;
        align-items: flex-start;
        gap: 6px;
        margin-bottom: 14px;
    }
    /* El segundo dato ("57% completado", "Paso 1 de 3") es el ancla del
       carril: sube a serif de titulo (28px). Es un instrumento, no un titulo,
       asi que no compite con los 40px de la pregunta; y va por DEBAJO de ella
       en la escala, que es la unica manera de que la pregunta siga mandando. */
    .kctp-cuest .kctp-progreso-texto > span:last-child {
        font-family: var(--kctp-serif);
        font-size: var(--kctp-t-titulo);
        line-height: var(--kctp-lh-titulo);
        letter-spacing: var(--kctp-ls-titulo);
        color: var(--kctp-tinto);
        font-variant-numeric: tabular-nums;
    }

    /* El mapa de secciones, en vertical y en su propia columna.
       VUELTA 2b: aqui el mapa se ENCIENDE tambien en el cuestionario largo
       (.kctp-modo-uno), que es donde estaba apagado. El motivo del apagado era
       bueno -ocho renglones al lado del riel de navegacion se leen como una
       segunda navegacion- pero el precio era peor: en el carril quedaban 455px
       de nada entre el porcentaje y la promesa, medidos a 1440. La solucion no
       es esconder el mapa, es que deje de tener FORMA de lista: los puntos se
       unen con un hilo vertical, y entonces ya no se lee como un menu sino
       como un recorrido -que es literalmente lo que es-. Un recorrido con
       palomitas ademas es la respuesta visual al "57% completado" de arriba:
       el numero dice cuanto, el hilo dice de que.
       En el telefono sigue apagado (seccion 1): ahi no hay columna donde
       ponerlo y solo enumeraria lo que falta. */
    .kctp-cuest .kctp-pasos,
    .kctp-modo-uno .kctp-cuest .kctp-pasos {
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: 0;
        margin: 0;
    }
    /* VUELTA 3: el recorrido respira. Con 7px de aire por escalon la lista
       terminaba en 439 y dejaba 307px de nada hasta la promesa; con 10px baja
       hasta 503 y el hueco pasa a ser el aire ENTRE dos anclas, que es como lo
       usan las dos referencias, en vez de la sobra que queda debajo de la
       ultima. El renglon sigue siendo de 15px: lo que crece es el intervalo,
       no la letra. */
    .kctp-cuest .kctp-paso {
        position: relative;
        padding: 10px 0 10px 24px;
        font-size: var(--kctp-t-menor);
        line-height: 1.3;
        box-shadow: none;
    }
    /* Pendiente: un punto hueco. Hecha: una palomita. Actual: el punto lleno
       con halo. La diferencia es de FORMA y no solo de color, que es lo que
       pide WCAG 1.4.1 (la base las distinguia con verde contra blanco). */
    .kctp-cuest .kctp-paso::before {
        content: "";
        position: absolute;
        left: 0;
        top: 1.15em;
        width: 7px;
        height: 7px;
        border-radius: 50%;
        /* Mismo motivo que el color del texto: el aro de "pendiente" es la
           unica marca de ese estado, y en --kctp-borde-f se queda en 1,5:1
           contra el hueso. */
        border: 1.5px solid var(--kctp-tenue-2);
    }
    .kctp-cuest .kctp-paso.hecho::before {
        left: -2px;
        top: .92em;
        width: 12px;
        height: 12px;
        border: 0;
        border-radius: 0;
        background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%238a2a50' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.6 8.6l3.4 3.4 7.4-7.4'/%3E%3C/svg%3E") center / 12px 12px no-repeat;
    }
    /* El hilo. Va del punto de cada seccion al de la siguiente, y no existe
       debajo de la ultima. Es lo que convierte ocho renglones en un recorrido.
       El punto mide 7px con caja de borde, asi que su centro cae en 3.5px: el
       hilo de 1px arranca en 3 para quedar centrado con el. */
    .kctp-cuest .kctp-paso::after {
        content: "";
        position: absolute;
        left: 3px;
        /* Arranca 2px por debajo del punto y termina justo donde empieza el
           siguiente (-.95em es exactamente el desplazamiento del punto dentro
           de su renglon). Con `bottom: 1px` el trazo se cortaba en el borde de
           cada renglon y el hilo salia punteado: ocho rayitas sueltas en vez
           de un recorrido. */
        top: calc(1.15em + 9px);
        bottom: -1.15em;
        width: 1px;
        background: var(--kctp-borde);
    }
    .kctp-cuest .kctp-paso:last-child::after { content: none; }
    /* Lo ya recorrido se pinta: el hilo por debajo de una seccion hecha va en
       el vino claro de las palomitas, no en el borde. Asi el carril tiene un
       trazo que crece, que es la misma informacion que la barra de arriba
       dicha de otra manera. */
    .kctp-cuest .kctp-paso.hecho::after { background: var(--kctp-borde-f); }

    .kctp-cuest .kctp-paso.actual {
        box-shadow: none;
        color: var(--kctp-tinto);
        font-weight: var(--kctp-peso-medio);
    }
    .kctp-cuest .kctp-paso.actual::before {
        background: var(--kctp-acento);
        border-color: var(--kctp-acento);
        box-shadow: 0 0 0 4px var(--kctp-acento-sw);
    }

    /* El rotulo del bloque y el aviso de "ya contestadas" son de la columna
       derecha y arrancan en el mismo borde izquierdo que la tarjeta. En 13px
       sobre una columna de 640px el rotulo se perdia: el nombre del bloque
       sube a la tinta principal y el contador se queda en la de apoyo. La
       jerarquia dentro de la linea la hacen el color y el peso, no el tamano
       (es el recurso de redaccion de Stripe). */
    .kctp-modo-uno .kctp-cuest .kctp-tarjeta > h2 {
        color: var(--kctp-tinta);
        font-size: var(--kctp-t-menor);
        margin-bottom: var(--kctp-e5);
    }
}

/* Pantalla grande de verdad: no se estira la lectura (la tarjeta se queda en
   sus 40rem, que es la medida correcta y no se negocia), se abre la
   composicion. El carril respira y la calle se ensancha, que es como las dos
   referencias usan el ancho de mas. */
@media (min-width: 1500px) {
    body.kctp-portal.pantalla-triaje,
    body.kctp-portal.pantalla-nueva,
    body.kctp-portal.pantalla-antecedentes {
        --cq-carril: 19rem;
        --cq-calle: 7rem;
    }
    .kctp-cuest .cq-promesa { margin-top: var(--kctp-e7); }
}

/* --------------------------------------------------------------------------
   8. EL PIE LEGAL ENTRA EN LA COMPOSICION
   El aviso de urgencias vive en el layout del portal (footer.kctp-pie-legal),
   fuera de .kctp-cuest, y por eso conservaba el lienzo de 720px de todas las
   demas pantallas. Medido a 1440: el carril arrancaba en 354, la tarjeta en
   714... y el pie en 494. Era el CUARTO borde izquierdo de la pantalla, justo
   el defecto que esta vuelta venia a cerrar; se arreglaron los tres de arriba
   y quedaba este.
   Ahora el pie mide lo mismo que la composicion, asi que:
     - su raya de arriba va de borde a borde (354 a 1354) y hace de cierre de
       la pagina, que es para lo que sirve una raya;
     - su texto arranca en el borde de la tarjeta (714), no en un sitio propio.
   Un solo borde izquierdo de arriba abajo, incluido el pie.
   Se toca SOLO desde las clases de pantalla de este cuestionario: el pie de
   las demas pantallas del portal no se entera.
   -------------------------------------------------------------------------- */

/* Entre la tablet y el escenario de dos columnas la pantalla es UNA columna, y
   ahi el lienzo del portal (720px) es 80px mas ancho que la tarjeta (640): la
   raya del pie y el borde derecho de la tarjeta no coincidian por 32px. Se
   iguala el lienzo -y el pie con el- al ancho de la tarjeta. Medido a 768 y a
   1079. */
@media (min-width: 700px) and (max-width: 1319.98px) {
    body.pantalla-triaje main.kctp-lienzo,
    body.pantalla-nueva main.kctp-lienzo,
    body.pantalla-antecedentes main.kctp-lienzo,
    body.pantalla-triaje footer.kctp-pie-legal,
    body.pantalla-nueva footer.kctp-pie-legal,
    body.pantalla-antecedentes footer.kctp-pie-legal {
        max-width: calc(var(--cq-caja) + 2 * var(--kctp-e5));
    }
}

@media (min-width: 1320px) {
    body.pantalla-triaje footer.kctp-pie-legal,
    body.pantalla-nueva footer.kctp-pie-legal,
    body.pantalla-antecedentes footer.kctp-pie-legal {
        max-width: calc(var(--cq-carril) + var(--cq-calle) + var(--cq-caja) + 2 * var(--kctp-e5));
    }
    /* El texto se corre a la columna de la derecha y se queda en su medida:
       un parrafo de 13px a 1000px de ancho es ilegible, y la regla de las dos
       referencias es 410-490px para texto pequeno. */
    body.pantalla-triaje footer.kctp-pie-legal > p,
    body.pantalla-nueva footer.kctp-pie-legal > p,
    body.pantalla-antecedentes footer.kctp-pie-legal > p {
        margin-left: calc(var(--cq-carril) + var(--cq-calle));
        max-width: 58ch;
    }
}

/* Y este es el precio de haber puesto display:flex mas arriba: pesa mas que
   el display:none con el que la base esconde las preguntas que no tocan, y
   en escritorio salian las ocho a la vez. Va al final y con la clase en el
   mismo elemento para que gane siempre. */
.kctp-cuest .kctp-uno .kctp-pregunta.kctp-paso-oculto { display: none; }

/* --------------------------------------------------------------------------
   7. MOVIMIENTO
   Entradas con la curva de movimiento del sistema. Solo la pregunta que
   aparece; nada mas se mueve.
   -------------------------------------------------------------------------- */

@keyframes cq-entra {
    from { opacity: 0; transform: translateY(10px); }
    to   { opacity: 1; transform: none; }
}
/* La clase .kctp-entra la pone el guion SOLO al cambiar de paso; en la primera
   pintada no, para que la pagina no abra con medio segundo de tarjeta en
   blanco. Volver a mostrar un elemento que estaba en display:none reinicia la
   animacion, asi que basta con ponerla una vez. */
.kctp-cuest .kctp-uno .kctp-pregunta.kctp-entra:not(.kctp-paso-oculto) {
    animation: cq-entra .38s cubic-bezier(.33, 1, .68, 1) both;
}
@media (prefers-reduced-motion: reduce) {
    .kctp-cuest .kctp-uno .kctp-pregunta.kctp-entra:not(.kctp-paso-oculto) { animation: none; }
}


/* --------------------------------------------------------------------------
   OBJETIVO TACTIL DE "SEGUIR DESPUES"  (02-sep-2026)
   --------------------------------------------------------------------------
   Medido en el telefono: 24px de alto, y la guia pide 44. La regla general del
   portal no llegaba porque esta hoja se carga despues de kctp.css y gana por
   especificidad, asi que el arreglo vive aqui, que es donde manda.
   Solo con dedos: en escritorio la fila esta bien como esta.                  */
@media (pointer: coarse) {
    .kctp-cuest .kctp-paso-botones > a {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
    }
}
