/* Portal público. Mobile-first, sin fuentes ni scripts externos: pensado para 4G lento.
   Los colores y el estilo (botones píldora, tarjetas con borde de color, brillos del héroe)
   salen de la landing aprobada (design/landing) a través de css/tokens.css, en claro y oscuro.
   Rediseño del 21-oct: logo oficial, héroe, cifras, tarjetas, botones y cabecera. */

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }

body {
    margin: 0;
    overflow-x: hidden;
    font-family: var(--uf-fuente);
    font-size: 1rem;
    line-height: 1.6;
    color: var(--uf-texto);
    background: var(--uf-fondo);
}

h1, h2, h3 { line-height: 1.12; letter-spacing: -.01em; margin: 0 0 .5em; }
h1 { font-size: clamp(1.9rem, 5.6vw, 3.4rem); font-weight: 800; }
h2 { font-size: clamp(1.5rem, 4vw, 2.3rem); font-weight: 800; }
h3 { font-size: 1.14rem; font-weight: 700; }
p { margin: 0 0 1em; }
a { color: var(--uf-azul-tinta); }
img, svg { max-width: 100%; }
:focus-visible { outline: 3px solid var(--uf-coral); outline-offset: 3px; border-radius: 8px; }

.pt-contenedor { width: 100%; max-width: var(--uf-ancho-max); margin: 0 auto; padding: 0 var(--uf-margen); }
.pt-oculto { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.pt-saltar { position: absolute; left: 12px; top: -60px; z-index: 100; padding: 12px 18px; font-weight: 700; background: var(--uf-primario); color: var(--uf-sobre-primario); border-radius: var(--uf-radio); }
.pt-saltar:focus { top: 12px; }
section[id] { scroll-margin-top: 76px; }

/* ===== Cabecera ===== */
.pt-cabecera { position: sticky; top: 0; z-index: 50; background: var(--uf-encabezado); border-bottom: 1px solid var(--uf-linea); backdrop-filter: blur(6px); }
.pt-cabecera-fila { display: flex; align-items: center; justify-content: space-between; min-height: 68px; gap: 12px; }
.pt-marca { display: inline-flex; align-items: center; gap: 10px; color: var(--uf-azul); text-decoration: none; }
.pt-marca picture, .pt-marca img { display: block; }
.pt-marca img { width: auto; height: 40px; }
.pt-nav-escritorio { display: none; align-items: center; gap: 4px; }
.pt-nav-escritorio a:not(.pt-boton), .pt-menu-movil nav a {
    display: inline-flex; align-items: center; min-height: var(--uf-toque-min); padding: 0 14px;
    color: var(--uf-texto); text-decoration: none; font-weight: 600; font-size: .94rem; white-space: nowrap; border-radius: 999px;
}
.pt-nav-escritorio a:not(.pt-boton):hover { background: var(--uf-fondo-2); color: var(--uf-azul-tinta); }
.pt-nav-escritorio a.active { color: var(--uf-azul-tinta); background: var(--uf-fondo-2); box-shadow: inset 0 -3px 0 var(--uf-coral); }
.pt-nav-escritorio .pt-boton { margin-left: 8px; }
.pt-menu-movil { position: relative; }
.pt-menu-movil summary { list-style: none; min-height: var(--uf-toque-min); display: inline-flex; align-items: center; padding: 0 16px; font-weight: 700; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: 999px; cursor: pointer; }
.pt-menu-movil summary:hover { border-color: var(--uf-azul); }
.pt-menu-movil summary::-webkit-details-marker { display: none; }
.pt-menu-movil nav { position: absolute; right: 0; top: calc(100% + 8px); display: grid; min-width: 220px; padding: .5rem; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-menu-movil nav a { min-height: 48px; }
.pt-menu-movil nav a:hover, .pt-menu-movil nav a.active { background: var(--uf-fondo-2); color: var(--uf-azul-tinta); }

@media (min-width: 760px) {
    .pt-nav-escritorio { display: flex; }
    .pt-menu-movil { display: none; }
}

/* ===== Botones y enlaces ===== */
.pt-boton {
    display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 48px;
    padding: 0 24px; font: inherit; font-weight: 700; color: var(--uf-sobre-primario); text-decoration: none;
    background: var(--uf-primario); border: 2px solid var(--uf-primario); border-radius: 999px; cursor: pointer;
    transition: transform .15s ease, box-shadow .15s ease, filter .15s ease;
}
.pt-boton:hover { transform: translateY(-1px); filter: brightness(1.06); }
.pt-boton:active { transform: translateY(0); }
.pt-boton-borde { color: var(--uf-texto); background: transparent; border-color: var(--uf-linea); }
.pt-boton-borde:hover { border-color: var(--uf-azul); filter: none; }
.pt-boton-acento { color: var(--uf-sobre-secundario); background: var(--uf-secundario); border-color: var(--uf-secundario); }
.pt-boton-chico { min-height: 44px; padding: 0 18px; font-size: .92rem; }
.pt-boton .pt-ico { width: 20px; height: 20px; }
.pt-ico { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.pt-enlace { display: inline-flex; align-items: center; gap: 6px; min-height: var(--uf-toque-min); padding: 0 12px; font-weight: 800; }

/* ===== Héroe ===== */
.pt-heroe {
    position: relative; overflow: hidden; padding: clamp(40px, 8vw, 88px) 0;
    background:
        radial-gradient(620px 420px at 88% 8%, var(--uf-brillo-1), transparent 70%),
        radial-gradient(520px 380px at 4% 96%, var(--uf-brillo-2), transparent 70%),
        var(--uf-fondo);
}
.pt-heroe::before {
    content: ""; position: absolute; inset: 0; pointer-events: none;
    background: linear-gradient(var(--uf-cuadricula) 1px, transparent 1px), linear-gradient(90deg, var(--uf-cuadricula) 1px, transparent 1px);
    background-size: 44px 44px;
    -webkit-mask-image: radial-gradient(75% 70% at 72% 28%, #000, transparent);
    mask-image: radial-gradient(75% 70% at 72% 28%, #000, transparent);
}
.pt-heroe-fila { position: relative; display: grid; gap: 36px; align-items: center; }
@media (min-width: 900px) { .pt-heroe-fila { grid-template-columns: 1.1fr .9fr; } }

.pt-eyebrow {
    display: inline-flex; align-items: center; gap: 8px; margin-bottom: 18px; padding: 6px 14px; font-size: .82rem; font-weight: 700;
    letter-spacing: .03em; color: var(--uf-texto-suave); background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: 999px;
}
.pt-eyebrow i { display: inline-block; width: 8px; height: 8px; background: var(--uf-estado-disponible); border-radius: 50%; }
.pt-grad {
    color: var(--uf-azul-tinta); background: linear-gradient(90deg, var(--uf-azul-tinta), var(--uf-coral-tinta));
    -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.pt-heroe h1 { font-size: clamp(2.1rem, 6vw, 3.9rem); }
.pt-entrada { max-width: 60ch; font-size: clamp(1.02rem, 2.4vw, 1.2rem); color: var(--uf-texto-suave); }
.pt-acciones { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }
.pt-confianza { display: flex; flex-wrap: wrap; gap: 10px 22px; margin: 28px 0 0; padding: 0; list-style: none; font-size: .92rem; font-weight: 600; color: var(--uf-texto-suave); }
.pt-confianza li { display: flex; align-items: center; gap: 8px; }
.pt-confianza .pt-ico { width: 18px; height: 18px; color: var(--uf-estado-disponible); }

.pt-heroe-visual { position: relative; display: grid; place-items: center; min-height: 300px; }
.pt-heroe-visual img { width: min(78%, 430px); height: auto; filter: drop-shadow(0 18px 40px var(--uf-brillo-1)); }
.pt-chip-flota {
    position: absolute; display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; font-size: .82rem; font-weight: 700; white-space: nowrap;
    background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: 999px; box-shadow: var(--uf-sombra);
}
.pt-chip-flota b { font-size: 1rem; color: var(--uf-coral-tinta); }
.pt-cf1 { top: 6%; left: 2%; }
.pt-cf2 { top: 46%; right: 0; }
.pt-cf3 { bottom: 4%; left: 8%; }
@media (max-width: 899px) { .pt-heroe-visual { min-height: 0; padding-block: 20px; } .pt-heroe-visual img { width: min(62%, 280px); } }

/* ===== Cifras ===== */
.pt-cifras { position: relative; z-index: 2; display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: -34px 0 0; padding: 0; list-style: none; }
@media (min-width: 760px) { .pt-cifras { grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); } }
.pt-cifras li { padding: 22px 12px; text-align: center; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-cifras b { display: block; font-size: clamp(2rem, 5vw, 2.8rem); font-weight: 800; line-height: 1; color: var(--uf-azul-tinta); }
.pt-cifras span { display: block; margin-top: 8px; font-size: .9rem; font-weight: 600; color: var(--uf-texto-suave); }

.pt-buscador { display: flex; flex-wrap: wrap; gap: 10px; max-width: 620px; margin: 1.5rem 0 1rem; }
.pt-buscador input { flex: 1 1 240px; }

/* ===== Campos ===== */
input[type=search] {
    width: 100%; min-height: 52px; padding: 0 20px; font: inherit; font-weight: 500; color: var(--uf-texto);
    background: var(--uf-superficie); border: 2px solid var(--uf-linea); border-radius: 999px;
}
select {
    width: 100%; min-height: 48px; padding: 0 12px; font: inherit; font-weight: 600; color: var(--uf-texto);
    background: var(--uf-superficie); border: 2px solid var(--uf-linea); border-radius: var(--uf-radio);
}
input[type=search]:hover, select:hover { border-color: var(--uf-azul); }
input[type=search]:focus-visible, select:focus-visible { outline: 3px solid var(--uf-coral); outline-offset: 2px; border-color: var(--uf-azul); }

/* Chips de tipo de programa */
.pt-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.pt-chip {
    display: inline-flex; align-items: center; gap: 8px; min-height: var(--uf-toque-min); padding: 0 16px; font-weight: 700; font-size: .88rem;
    color: var(--uf-texto); text-decoration: none; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: 999px;
}
.pt-chip::before, .pt-tipo::before { content: ""; width: 10px; height: 10px; flex: none; background: var(--uf-color-tipo); border-radius: 50%; }
.pt-chip:hover { border-color: var(--uf-color-tipo); }

/* ===== Secciones ===== */
.pt-seccion { padding: clamp(56px, 9vw, 104px) 0; }
.pt-seccion-compacta { padding-top: 28px; padding-bottom: clamp(40px, 7vw, 80px); }
.pt-seccion-alterna { background: var(--uf-fondo-2); }
.pt-seccion-cabecera { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 1rem; margin-bottom: 1.75rem; }
.pt-seccion-cabecera h2 { margin-bottom: 0; }
.pt-antetitulo { margin: 0 0 10px; font-size: .8rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; color: var(--uf-coral-tinta); }
.pt-vacio { padding: 2rem; text-align: center; color: var(--uf-texto-suave); background: var(--uf-fondo-2); border: 1px dashed var(--uf-linea); border-radius: var(--uf-radio-grande); }

/* Filtros del catálogo */
.pt-filtros { margin: 1rem 0 .75rem; padding: 1.1rem; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-filtros-fila { display: flex; gap: 10px; }
.pt-filtros-fila input { flex: 1 1 auto; min-width: 0; }
.pt-mas-filtros { margin-top: .75rem; }
.pt-mas-filtros summary { min-height: var(--uf-toque-min); display: inline-flex; align-items: center; font-weight: 800; color: var(--uf-azul-tinta); cursor: pointer; }
.pt-filtros-rejilla { display: grid; gap: .75rem; margin-top: .5rem; }
.pt-campo label { display: block; margin-bottom: 6px; font-size: .85rem; font-weight: 800; color: var(--uf-texto-suave); }
@media (min-width: 760px) { .pt-filtros-rejilla { grid-template-columns: repeat(3, 1fr); } }
.pt-chips-compactos { margin: 0 0 1rem; }
.pt-chip-activo { background: color-mix(in srgb, var(--uf-color-tipo) 22%, var(--uf-superficie)); border-color: var(--uf-color-tipo); }
.pt-conteo { color: var(--uf-texto-suave); }

/* ===== Tarjetas de programa ===== */
.pt-rejilla { display: grid; gap: 18px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 290px), 1fr)); }
.pt-tarjeta {
    display: flex; flex-direction: column; gap: .6rem; padding: 22px; background: var(--uf-superficie);
    border: 1px solid var(--uf-linea); border-top: 5px solid var(--uf-color-tipo); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra);
    transition: transform .2s ease, box-shadow .2s ease;
}
.pt-tarjeta:hover { transform: translateY(-3px); box-shadow: var(--uf-elevado); }
.pt-tarjeta h3 { margin: .45rem 0 .2rem; font-size: 1.14rem; }
.pt-tipo { display: inline-flex; align-items: center; gap: 8px; font-size: .8rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--uf-texto); }
.pt-aliado { margin: 0; font-size: .92rem; color: var(--uf-texto-suave); }
.pt-punto { display: inline-block; width: 10px; height: 10px; margin-right: .3rem; border-radius: 50%; vertical-align: middle; }
.pt-resumen { margin: 0; color: var(--uf-texto-suave); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.pt-datos { display: flex; gap: 1.5rem; margin: .25rem 0 0; }
.pt-datos dt { font-size: .8rem; color: var(--uf-texto-suave); }
.pt-datos dd { margin: 0; font-weight: 800; }
.pt-estado { margin: auto 0 0; padding-top: .75rem; font-size: .92rem; font-weight: 700; border-top: 1px dashed var(--uf-linea); }
.pt-estado-programada { color: var(--uf-azul-tinta); }
.pt-estado-demanda { color: var(--uf-coral-tinta); }
.pt-estado-proxima { color: var(--uf-texto-suave); }

/* ===== Pasos ===== */
.pt-pasos { display: grid; gap: 22px 16px; margin: 40px 0 0; padding: 0; list-style: none; counter-reset: paso; grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); }
.pt-pasos li { position: relative; padding: 34px 22px 22px; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); counter-increment: paso; }
.pt-pasos li::before { content: counter(paso); position: absolute; top: -16px; left: 20px; width: 36px; height: 36px; display: grid; place-items: center; font-weight: 800; color: var(--uf-sobre-secundario); background: var(--uf-secundario); border-radius: 50%; }
.pt-pasos h3 { margin: 0 0 6px; font-size: 1.1rem; }
.pt-pasos p { margin: 0; font-size: .94rem; color: var(--uf-texto-suave); }

/* ===== Banda final ===== */
.pt-banda { position: relative; overflow: hidden; display: grid; gap: 18px; justify-items: start; padding: clamp(28px, 6vw, 56px); color: #fff; background: var(--uf-cta); border-radius: 28px; }
.pt-banda h2 { max-width: 20ch; margin: 0; color: #fff; }
.pt-banda p { max-width: 52ch; margin: 0; opacity: .95; }
.pt-banda .pt-boton { color: #14295F; background: #fff; border-color: #fff; }

/* ===== Pie ===== */
.pt-pie { padding: 34px 0; font-size: .9rem; color: var(--uf-texto-suave); border-top: 1px solid var(--uf-linea); }
.pt-pie .pt-contenedor { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 18px 30px; }
.pt-pie p { margin: .25rem 0; }
.pt-pie .pt-marca img { height: 34px; }
.pt-pie .pt-wm { font-size: 1.3rem; }
.pt-pie-texto { max-width: 62ch; }

@media (prefers-reduced-motion: no-preference) {
    .pt-chip-flota { animation: pt-flota 6s ease-in-out infinite; }
    .pt-cf2 { animation-delay: -2s; }
    .pt-cf3 { animation-delay: -4s; }
}
@keyframes pt-flota { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-9px); } }
@media (prefers-reduced-motion: reduce) { * { scroll-behavior: auto !important; transition: none !important; animation: none !important; } }

/* ===== Vistas del catálogo ===== */
.pt-entrada-corta { margin-bottom: 1rem; }
.pt-vistas { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 1rem; }
.pt-vistas a, .pt-meses a, .pt-meses-pasos a {
    display: inline-flex; align-items: center; gap: .4rem; min-height: var(--uf-toque-min); padding: 0 16px;
    font-weight: 700; font-size: .92rem; color: var(--uf-texto); text-decoration: none; background: var(--uf-superficie);
    border: 1px solid var(--uf-linea); border-radius: 999px;
}
.pt-vistas a:hover, .pt-meses a:hover, .pt-meses-pasos a:hover { border-color: var(--uf-azul); }
.pt-vistas a.pt-vista-activa, .pt-meses a.pt-vista-activa { color: var(--uf-sobre-primario); background: var(--uf-primario); border-color: var(--uf-primario); }
.pt-contador { min-width: 1.6em; padding: 0 .4em; font-size: .8rem; text-align: center; background: color-mix(in srgb, currentColor 18%, transparent); border-radius: 999px; }
.pt-tarjeta-enlace { color: inherit; text-decoration: none; }
.pt-tarjeta-enlace:hover, .pt-tarjeta-enlace:focus-visible { text-decoration: underline; }

/* ===== Ficha pública del programa ===== */
.pt-ficha-cabecera { padding: clamp(28px, 6vw, 56px) 0; background: var(--uf-fondo-2); border-bottom: 6px solid var(--uf-color-tipo); }
.pt-migas { margin-bottom: 1rem; font-size: .92rem; color: var(--uf-texto-suave); }
.pt-datos-grandes { flex-wrap: wrap; margin-top: 1rem; }
.pt-datos-grandes dd { font-size: 1.1rem; }
.pt-ficha-cuerpo { display: grid; gap: 2rem; }
@media (min-width: 900px) { .pt-ficha-cuerpo { grid-template-columns: 1.4fr 1fr; align-items: start; } }
.pt-ficha-cuerpo h2 { margin-top: 1.5rem; font-size: clamp(1.3rem, 3vw, 1.7rem); }
.pt-ficha-cuerpo > div > h2:first-child, .pt-ficha-cuerpo aside > h2:first-child { margin-top: 0; }
.pt-edicion { margin-bottom: 1rem; padding: 22px; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-edicion header { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; }
.pt-edicion h3 { margin: 0; }
.pt-edicion h4 { margin: 1rem 0 .4rem; font-size: .8rem; font-weight: 800; text-transform: uppercase; letter-spacing: .1em; color: var(--uf-texto-suave); }
.pt-etiqueta { padding: 4px 12px; font-size: .76rem; font-weight: 800; background: var(--uf-fondo-2); border: 1px solid; border-radius: 999px; }
.pt-etiqueta-programada { color: var(--uf-azul-tinta); border-color: var(--uf-azul); }
.pt-etiqueta-demanda { color: var(--uf-coral-tinta); border-color: var(--uf-coral); }
.pt-sesiones, .pt-tarifas, .pt-lista-simple { margin: 0; padding: 0; list-style: none; }
.pt-sesiones li, .pt-tarifas li, .pt-lista-simple li { padding: .45rem 0; border-bottom: 1px dashed var(--uf-linea); }
.pt-sesiones li:last-child, .pt-tarifas li:last-child, .pt-lista-simple li:last-child { border-bottom: 0; }
.pt-sesion-tipo { color: var(--uf-texto-suave); font-size: .9rem; }
.pt-tarifas li { display: flex; justify-content: space-between; gap: 1rem; }

/* Reserva (5.4): una tarjeta por sede con sus modalidades, tarifa y lugares que quedan. */
.pt-sedes { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr)); gap: 1rem; margin: 1.5rem 0 1rem; }
.pt-sedes .pt-sede { margin: 0; }
.pt-modalidades li { flex-wrap: wrap; align-items: center; }
.pt-modalidades li > span { flex: 1 1 11rem; }
.pt-modalidades li > strong { white-space: nowrap; }
.pt-modalidades .pt-cupo { display: block; font-size: .82rem; font-weight: 600; color: var(--uf-texto-suave); }
.pt-modalidades .pt-agotado > span { opacity: .6; }
.pt-modalidades .pt-agotado .pt-cupo { color: var(--uf-coral-tinta); opacity: 1; }
.pt-aviso { margin: 1rem 0 0; padding: .75rem 1rem; font-size: .92rem; color: var(--uf-texto); background: color-mix(in srgb, var(--uf-azul) 12%, transparent); border-left: 4px solid var(--uf-azul); border-radius: var(--uf-radio); }
.pt-nota { font-size: .85rem; color: var(--uf-texto-suave); }
.pt-subtitulo { margin-top: 2rem; }
.pt-texto { white-space: pre-line; color: var(--uf-texto-suave); }

/* ===== Calendario académico (4.4): HTML y CSS, sin JavaScript ===== */
.pt-anios { display: flex; align-items: center; gap: 1rem; margin: 0 0 .75rem; }
.pt-anios a { display: inline-flex; align-items: center; min-height: var(--uf-toque-min); padding: 0 .5rem; font-weight: 700; }
.pt-anios strong { font-size: 1.2rem; }
.pt-meses { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 1rem; }
.pt-meses-pasos { display: flex; justify-content: space-between; margin: 1rem 0; }
.pt-leyenda { display: flex; flex-wrap: wrap; gap: .4rem 1.1rem; margin: 0 0 1.25rem; padding: 0; list-style: none; font-size: .92rem; font-weight: 600; color: var(--uf-texto-suave); }
.pt-leyenda i, .pt-cal-puntos i { display: inline-block; width: 10px; height: 10px; margin-right: .4rem; background: var(--uf-color-tipo); border-radius: 50%; }

.pt-anual { display: grid; gap: 1.25rem; grid-template-columns: repeat(auto-fill, minmax(min(100%, 270px), 1fr)); }

.pt-cal { width: 100%; border-collapse: collapse; table-layout: fixed; }
.pt-cal caption { padding: .4rem 0; font-weight: 800; text-align: left; }
.pt-cal caption a { color: var(--uf-texto); text-decoration: none; }
.pt-cal caption a:hover { text-decoration: underline; }
.pt-cal th { padding: .3rem 0; font-size: .8rem; font-weight: 700; color: var(--uf-texto-suave); text-align: center; }
.pt-cal th abbr { text-decoration: none; }
.pt-cal td { padding: 0; vertical-align: top; text-align: center; background: var(--uf-superficie); border: 1px solid var(--uf-linea); }
.pt-cal-vacio { background: var(--uf-fondo-2); border-color: transparent; }
.pt-cal td > a, .pt-cal td > .pt-cal-num { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: .35rem .15rem; min-height: 44px; color: var(--uf-texto); text-decoration: none; }
.pt-cal td > .pt-cal-num { color: var(--uf-texto-suave); }
.pt-cal-con-sesiones > a { background: color-mix(in srgb, var(--uf-azul) 10%, var(--uf-superficie)); font-weight: 800; }
.pt-cal-con-sesiones > a:hover { background: color-mix(in srgb, var(--uf-azul) 20%, var(--uf-superficie)); }
.pt-cal-puntos { display: flex; gap: 2px; min-height: 8px; }
.pt-cal-puntos i { width: 7px; height: 7px; margin: 0; }
.pt-cal-hoy .pt-cal-num { box-shadow: inset 0 -3px 0 var(--uf-coral); }
.pt-cal-elegido > a { outline: 3px solid var(--uf-coral); outline-offset: -3px; }
.pt-cal-eventos { display: none; width: 100%; text-align: left; }

.pt-cal-grande td { height: 4.5rem; }
@media (min-width: 760px) {
    .pt-cal-grande td { height: 7rem; }
    .pt-cal-grande td > a, .pt-cal-grande td > .pt-cal-num { align-items: flex-start; }
    .pt-cal-grande .pt-cal-puntos { display: none; }
    .pt-cal-grande .pt-cal-eventos { display: block; }
    .pt-cal-ev { display: block; margin-top: 2px; padding: 1px 4px; overflow: hidden; font-size: .75rem; font-weight: 700; line-height: 1.3; text-overflow: ellipsis; white-space: nowrap; border-left: 4px solid var(--uf-color-tipo); background: color-mix(in srgb, var(--uf-color-tipo) 14%, transparent); }
    .pt-cal-mas { display: block; font-size: .75rem; color: var(--uf-texto-suave); }
}

.pt-detalle { margin-top: 1.5rem; scroll-margin-top: 80px; }
.pt-detalle-dia { margin: 1.25rem 0 .5rem; font-size: 1rem; text-transform: capitalize; }
.pt-agenda { margin: 0; padding: 0; list-style: none; display: grid; gap: .75rem; }
.pt-agenda li { padding: 1rem 1.15rem; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-left: 8px solid var(--uf-color-tipo); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-agenda p { margin: 0; }
.pt-agenda-hora { font-weight: 800; color: var(--uf-texto-suave); font-size: .9rem; }
.pt-agenda-titulo { font-size: 1.05rem; font-weight: 800; }
.pt-etiqueta-pasada { margin-left: .4rem; color: var(--uf-texto-suave); border-color: var(--uf-linea); }

/* ===== Prosecución (4.5): matriz por carrera TSU, sin JavaScript ===== */
.pt-tarjeta-tsu { --uf-color-tipo: var(--uf-azul); }
.pt-aliado-bloque { margin-bottom: 1.25rem; padding: 22px; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-left: 8px solid var(--uf-color-aliado, var(--uf-azul)); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-aliado-bloque header { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem; }
.pt-aliado-bloque h2 { margin: 0; font-size: clamp(1.15rem, 3vw, 1.45rem); }
.pt-rutas { display: grid; gap: .75rem; margin: 1rem 0 0; padding: 0; list-style: none; }
.pt-rutas li { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .75rem; padding: .9rem 1rem; background: var(--uf-fondo-2); border-radius: var(--uf-radio); }
.pt-rutas li > div { flex: 1 1 240px; }
.pt-rutas p { margin: .35rem 0 0; }
.pt-ruta-nivel { margin: 0 .5rem; font-size: .85rem; color: var(--uf-texto-suave); }
.pt-sin-convenio { margin: 1rem 0 0; font-weight: 600; color: var(--uf-texto-suave); }
.pt-contenedor-angosto { max-width: 680px; }

/* Formulario público de inscripción */
.pt-formulario { display: grid; gap: 1rem; margin-top: 1rem; padding: 24px; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-formulario label { display: block; margin-bottom: 6px; font-size: .85rem; font-weight: 800; color: var(--uf-texto-suave); }
.pt-formulario input:not([type=checkbox]), .pt-formulario textarea {
    width: 100%; min-height: 48px; padding: 10px 14px; font: inherit; font-weight: 500; color: var(--uf-texto);
    background: var(--uf-superficie); border: 2px solid var(--uf-linea); border-radius: var(--uf-radio);
}
.pt-formulario textarea { resize: vertical; }
.pt-formulario input:hover, .pt-formulario textarea:hover { border-color: var(--uf-azul); }
.pt-formulario input:focus-visible, .pt-formulario textarea:focus-visible { outline: 3px solid var(--uf-coral); outline-offset: 2px; border-color: var(--uf-azul); }
.pt-formulario .validation-message, .pt-error { margin: 6px 0 0; font-size: .88rem; font-weight: 700; color: var(--uf-error); }
.pt-error { padding: .75rem 1rem; background: color-mix(in srgb, var(--uf-error) 10%, transparent); border-left: 4px solid var(--uf-error); border-radius: var(--uf-radio); }
.pt-formulario .pt-boton { justify-self: start; }
.pt-confirmacion { margin-top: 1rem; padding: 24px; background: var(--uf-superficie); border: 1px solid var(--uf-linea); border-left: 8px solid var(--uf-estado-disponible); border-radius: var(--uf-radio-grande); box-shadow: var(--uf-sombra); }
.pt-confirmacion h2 { font-size: 1.4rem; }

/* Preinscripción (4.6) */
.pt-casilla { display: flex; align-items: flex-start; gap: .75rem; font-size: .95rem; line-height: 1.45; }
.pt-formulario .pt-casilla input { flex: none; width: 22px; min-height: 22px; margin-top: 2px; accent-color: var(--uf-primario); }
.pt-formulario input.pt-codigo { max-width: 12rem; font-size: 1.6rem; font-weight: 800; letter-spacing: .35em; text-align: center; }
.pt-reenvio { display: grid; gap: .5rem; justify-items: start; margin-top: 1rem; }
.pt-reenvio button[disabled] { opacity: .5; cursor: not-allowed; }

/* Contador de cuórum (4.7): sin JavaScript */
.pt-cuorum { margin: .75rem 0; }
.pt-cuorum-texto { margin: 0 0 .4rem; }
.pt-cuorum-compacto { margin: .25rem 0 0; font-size: .92rem; }
.pt-cuorum-compacto .pt-cuorum-texto { margin-bottom: .3rem; }
.pt-progreso { display: block; width: 100%; height: 10px; overflow: hidden; border: 0; border-radius: 999px; background: var(--uf-fondo-2); -webkit-appearance: none; appearance: none; }
.pt-progreso::-webkit-progress-bar { background: var(--uf-fondo-2); border-radius: 999px; box-shadow: inset 0 0 0 1px var(--uf-linea); }
.pt-progreso::-webkit-progress-value { background: var(--uf-primario); border-radius: 999px; }
.pt-progreso::-moz-progress-bar { background: var(--uf-primario); border-radius: 999px; }

/* Votación de la fecha (4.8): opciones como tarjetas de selección, sin JavaScript */
.pt-formulario .pt-opcion { display: flex; align-items: flex-start; gap: .85rem; margin: 0; padding: 1rem 1.1rem; font-size: 1rem; font-weight: 500; color: var(--uf-texto); cursor: pointer; background: var(--uf-superficie); border: 2px solid var(--uf-linea); border-radius: var(--uf-radio); }
.pt-formulario .pt-opcion:hover { border-color: var(--uf-azul); }
.pt-formulario .pt-opcion:has(input:checked) { border-color: var(--uf-primario); background: color-mix(in srgb, var(--uf-azul) 10%, var(--uf-superficie)); }
.pt-formulario .pt-opcion:has(input:focus-visible) { outline: 3px solid var(--uf-coral); outline-offset: 2px; }
.pt-formulario .pt-opcion input[type=radio] { flex: none; width: 22px; min-height: 22px; margin-top: 3px; accent-color: var(--uf-primario); }
.pt-opcion strong { display: block; }
.pt-opcion strong::first-letter { text-transform: uppercase; }
.pt-opcion-hora { display: block; color: var(--uf-texto-suave); }

/* Mapa del aula (5.5): SVG con un botón por puesto; el estado se lee también por la forma, no solo por el color. */
.pt-reserva-cuerpo { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 1.5rem; align-items: start; margin-top: 1rem; }
@media (max-width: 760px) { .pt-reserva-cuerpo { grid-template-columns: 1fr; } }
.pt-mapa { margin: 0; }
.pt-mapa-svg { width: 100%; height: auto; display: block; max-height: 460px; }
.pt-mapa-aula { fill: var(--uf-superficie); stroke: var(--uf-linea); stroke-width: 2; }
.pt-puesto { cursor: pointer; outline: none; }
.pt-puesto-forma { fill: var(--uf-fondo-2); stroke: var(--uf-azul); stroke-width: 2.5; transition: fill .15s, stroke-width .15s; }
.pt-puesto-codigo { font: 800 15px var(--uf-fuente); fill: var(--uf-texto); pointer-events: none; }
.pt-puesto-pantalla { fill: none; stroke: var(--uf-azul); stroke-width: 2; pointer-events: none; }
.pt-puesto-cruz, .pt-puesto-marca { fill: none; stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
.pt-puesto-cruz { stroke: var(--uf-texto-suave); }
.pt-puesto-marca { stroke: var(--uf-azul-tinta); }
.pt-puesto-libre:hover .pt-puesto-forma, .pt-puesto-libre:focus-visible .pt-puesto-forma { fill: var(--uf-azul); fill-opacity: .25; stroke-width: 4; }
.pt-puesto-libre:focus-visible .pt-puesto-forma { stroke: var(--uf-coral); }
.pt-puesto-elegido .pt-puesto-forma, .pt-puesto-propio .pt-puesto-forma { fill: var(--uf-azul); fill-opacity: .45; stroke-width: 4; }
.pt-puesto-propio .pt-puesto-forma { stroke: var(--uf-coral); }
.pt-puesto-ocupado, .pt-puesto-otramodalidad { cursor: not-allowed; }
.pt-puesto-ocupado .pt-puesto-forma { fill: var(--uf-linea); stroke: var(--uf-texto-suave); stroke-dasharray: 5 4; }
.pt-puesto-otramodalidad { opacity: .35; }
.pt-leyenda { display: flex; flex-wrap: wrap; gap: .5rem 1.2rem; margin: .75rem 0 0; padding: 0; list-style: none; font-size: .85rem; color: var(--uf-texto-suave); }
.pt-leyenda-muestra { display: inline-block; width: 14px; height: 14px; margin-right: .35rem; vertical-align: -2px; border: 2px solid var(--uf-azul); border-radius: 4px; background: var(--uf-fondo-2); }
.pt-leyenda-muestra.pt-puesto-ocupado { background: var(--uf-linea); border: 2px dashed var(--uf-texto-suave); }
.pt-leyenda-muestra.pt-puesto-propio { background: var(--uf-azul); border-color: var(--uf-coral); }
.pt-leyenda-muestra.pt-puesto-otramodalidad { opacity: .35; }
.pt-puesto-resumen { margin: 0 0 .5rem; font-weight: 600; }
.pt-cronometro { display: flex; align-items: baseline; gap: .75rem; margin: .5rem 0 1rem; }
.pt-cronometro-tiempo { font-size: 2.4rem; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--uf-azul-tinta); }
.pt-cronometro-poco { color: var(--uf-coral-tinta); }
.pt-cronometro-texto { color: var(--uf-texto-suave); }
.pt-modalidades li .pt-boton { margin-left: .5rem; }
.pt-boton-peligro { background: var(--uf-coral); border-color: var(--uf-coral); }
