/* =========================================================
   VARIABLES GLOBALES
========================================================= */

:root {

    --app-font: 'Quicksand', system-ui, sans-serif; /* Fuente más redondita y amable */
	
	--bg: #eef3f9; /* Color de fondo principal de la aplicación */

    --bg-2: #f8fbff; /* Color secundario del degradado de fondo */

    --panel: rgba(255, 255, 255, 0.94); /* Fondo semitransparente de tarjetas */

    --panel-strong: #e7eef8; /* Fondo alternativo más fuerte */

    --border: #d3deec; /* Color general de bordes */

    --text: #172334; /* Color principal de texto */

    --muted: #607086; /* Color secundario de texto */

    --primary: #2f6fed; /* Azul principal de botones y focos */

    --primary-hover: #245ad0; /* Azul al pasar el ratón */

    --success: #119669; /* Verde para estados positivos */

    --success-bg: rgba(17, 150, 105, 0.10); /* Fondo verde translúcido */

    --danger-bg: #fff1f1; /* Fondo rojo suave */

    --danger-text: #b42318; /* Color rojo de error */

    --required: #d92d20; /* Color de elementos obligatorios */

    --shadow: none; /* Sombra global desactivada */
}

/* =========================================================
   RESET GENERAL
========================================================= */

* {

    box-sizing: border-box; /* Hace que padding y border no aumenten el tamaño real */
}

html,
body {

    width: 100%; /* Hace que ocupen todo el ancho */

    height: 100%; /* Hace que ocupen todo el alto */

    margin: 0; /* Elimina márgenes automáticos del navegador */

    overflow: hidden; /* Elimina scroll global horizontal y vertical */
}

body {

    font-family: var(--app-font); /* Usa la fuente principal definida en :root */

    color: var(--text); /* Aplica color principal de texto */

    background: #f7f9fc; /* Fondo blanco puro en modo día */
}

/* =========================================================
   LAYOUT PRINCIPAL
========================================================= */

.app-shell {

    width: 100vw; /* Hace que la aplicación ocupe todo el ancho de la pantalla */

    height: 100vh; /* Hace que la aplicación ocupe todo el alto visible */

    overflow: hidden; /* Evita scroll general */
}

.main {

    height: 100vh; /* Hace que el contenido principal ocupe toda la altura */

    padding: 12px; /* Espaciado interior general */

    overflow: hidden; /* Evita scroll principal */

    display: flex; /* Usa flexbox vertical */

    flex-direction: column; /* Coloca elementos uno debajo de otro */

    gap: 10px; /* Separación vertical entre bloques */
}

/* =========================================================
   BOTONES MODULO
========================================================= */

.module-selector {

    display: grid; /* Grid vertical */

    gap: 5px; /* Separación */
}

.module-btn {

    width: 100%; /* Ocupa todo el ancho */

    min-height: 34px; /* Altura mínima */

    padding: 6px 8px; /* Espaciado interior */

    border: 1px solid #b9cdef; /* Borde */

    border-radius: 11px; /* Bordes redondos */

    background: #edf4ff; /* Fondo azul claro */

    color: #2f5f9f; /* Texto azul */

    font-size: 11px; /* Tamaño pequeño */

    font-weight: 800; /* Texto grueso */

    text-align: center; /* Texto centrado */

    text-transform: uppercase; /* Texto en mayúsculas */

    cursor: pointer; /* Cursor mano */
}

.module-btn-active {

    background: #c8ddfa; /* Fondo activo */

    border-color: #5f8fd0; /* Borde activo */

    color: #183f72; /* Texto activo */
}

/* =========================================================
   TARJETAS GENERALES
========================================================= */

.card,
.side-panel {

    background: var(--panel); /* Fondo blanco translúcido */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 18px; /* Bordes redondeados */

    padding: 12px; /* Espaciado interior */

    overflow: hidden; /* Evita que el contenido sobresalga */

    min-height: 0; /* Permite que flex/grid reduzcan altura */
}

.card-header {

    display: flex; /* Flex horizontal */

    align-items: center; /* Centrado vertical */

    justify-content: space-between; /* Separación máxima */

    gap: 10px; /* Espaciado */

    margin-bottom: 8px; /* Separación inferior */
}

.card-header h2 {

    margin: 0; /* Elimina márgenes */

    font-size: 16px; /* Tamaño título */

    text-transform: uppercase; /* Mayúsculas */

    letter-spacing: .02em; /* Espaciado letras */
}

/* =========================================================
   HERO SUPERIOR
========================================================= */

.hero {

    display: flex; /* Organiza el título y estado horizontalmente */

    align-items: center; /* Centra verticalmente */

    justify-content: space-between; /* Separa izquierda y derecha */

    padding: 0 4px; /* Añade separación lateral suave */

    min-height: 72px; /* Da altura consistente al header */

    flex-shrink: 0; /* Evita compresión */
}

.hero h1 {

    margin: 0; /* Elimina márgenes */

    font-size: 40px; /* Tamaño grande */

    line-height: 1.02; /* Compacta altura */

    letter-spacing: .01em; /* Espaciado */

    font-weight: 900; /* Muy grueso */
}

/* =========================================================
   TAGS
========================================================= */

.tag {

    border: 1px solid var(--border); /* Borde */

    background: #f4f7fb; /* Fondo claro */

    color: var(--muted); /* Texto gris */

    padding: 4px 8px; /* Espaciado */

    border-radius: 999px; /* Forma píldora */

    font-size: 10px; /* Texto pequeño */

    font-weight: 800; /* Texto grueso */

    text-transform: uppercase; /* Mayúsculas */
}

.tag-success {

    color: var(--success); /* Texto verde */

    background: var(--success-bg); /* Fondo verde */

    border-color: rgba(
        17,
        150,
        105,
        0.20
    ); /* Borde verde */
}

/* =========================================================
   COLUMNAS PRINCIPALES
========================================================= */

.dashboard-columns {

    display: grid; /* Usa grid para dividir ambas columnas */

    grid-template-columns:
        0.8fr
        1.2fr; /* Aprovecha mejor la pantalla ahora que no existe sidebar */

    gap: 10px; /* Separación */

    flex: 1; /* Ocupa espacio restante */

    min-height: 0; /* Permite reducir altura */

    overflow: hidden; /* Sin scroll general */
}

.dashboard-column {

    display: flex; /* Flex vertical */

    flex-direction: column; /* Tarjetas una debajo de otra */

    gap: 10px; /* Separación */

    min-height: 0; /* Ajuste correcto */

    overflow: hidden; /* Evita scroll general */
}

/* =========================================================
   TARJETAS ESPECIFICAS
========================================================= */

.right-column .card:first-child { /* Tarjeta de trimestre y actividades */

    flex: 1; /* Ocupa todo el alto disponible de la columna derecha */

    min-height: 0; /* Permite que la tabla se adapte bien */
}

/* =========================================================
   FORMULARIOS
========================================================= */

.field {

    min-width: 0; /* Evita desbordamientos */
}

.field-top {

    margin-top: 10px; /* Separación superior */
}

.compact-field {

    max-width: 360px; /* Anchura máxima */
}

label {

    display: block; /* Línea propia */

    margin-bottom: 4px; /* Separación */

    color: var(--muted); /* Color gris */

    font-size: 12px; /* Tamaño */

    font-weight: 800; /* Negrita */

    text-transform: uppercase; /* Mayúsculas */
}

input,
select,
textarea {

    width: 100%; /* Ancho completo */

    padding: 9px 10px; /* Espaciado */

    border-radius: 10px; /* Bordes redondos */

    border: 1px solid var(--border); /* Borde */

    background: white; /* Fondo */

    color: var(--text); /* Texto */

    outline: none; /* Sin outline */

    font-size: 13px; /* Tamaño */

    font-family: inherit; /* Hereda fuente */
}

input,
select {

    height: 37px; /* Altura uniforme */
}

textarea {

    resize: none; /* Impide que el usuario cambie manualmente el tamaño del textarea */

    min-height: 92px; /* Hace el cuadro de comentario más cómodo para escribir */

    max-height: 92px; /* Mantiene una altura estable visualmente */

    overflow-y: auto; /* Permite scroll interno si el comentario es largo */

    line-height: 1.4; /* Mejora la legibilidad del texto */
}

input:focus,
select:focus,
textarea:focus {

    border-color: var(--primary); /* Borde azul */
}

/* =========================================================
   BOTONES
========================================================= */

.btn {

    border: none; /* Sin borde */

    border-radius: 14px; /* Bordes redondos */

    cursor: pointer; /* Cursor mano */

    font-weight: 900; /* Texto grueso */

    font-size: 13px; /* Tamaño */

    text-transform: uppercase; /* Mayúsculas */

    min-height: 38px; /* Altura mínima */

    padding: 9px 12px; /* Espaciado */

    transition: .2s; /* Animación suave */
}

.btn-calculate {

    background: #f4f8fe; /* Fondo azul muy claro */

    color: #2f5f9f; /* Texto azul */

    border: 1px solid #c9d8ee; /* Borde azul suave */
}

.btn-calculate:hover {

    background: #e8f1ff; /* Fondo azul claro al pasar el ratón */

    color: #234f86; /* Texto azul un poco más intenso */

    border-color: #a9c3e8; /* Borde azul algo más marcado */
}

.btn-secondary {

    background: #f4f8fe; /* Fondo claro */

    color: #2f5f9f; /* Texto azul */

    border: 1px solid #c9d8ee; /* Borde */
}

/* =========================================================
   LISTA ALUMNOS
========================================================= */

.students-list {

    display: grid; /* Organiza las tarjetas de alumnado en vertical */

    gap: 8px; /* Deja separación entre alumnos */

    overflow-y: auto; /* Permite scroll solo dentro del listado de alumnos */

    overflow-x: hidden; /* Evita scroll horizontal dentro del listado */

    min-height: 0; /* Permite que el listado se adapte a la altura disponible */

    max-height: 100%; /* Impide que el listado crezca más que su tarjeta */
}

.student-card {

    border: 1px solid var(--border); /* Borde */

    background: #f8fafc; /* Fondo */

    border-radius: 14px; /* Bordes */

    padding: 10px; /* Espaciado */

    display: grid; /* Grid */

    grid-template-columns:
        1fr
        auto; /* Nombre + botón */

    gap: 6px; /* Separación */

    align-items: start; /* Arriba */
}

.student-name {

    font-weight: 900; /* Texto grueso */
}

.student-condition {

    font-size: 12px; /* Tamaño */

    color: var(--muted); /* Gris */

    margin-top: 3px; /* Separación */
}

/* =========================================================
   TABLA NOTAS
========================================================= */

.table-wrap {

    margin-top: 0; /* Evita margen duplicado porque term-actions ya separa la tabla */

    overflow: auto; /* Permite scroll SOLO dentro de la tabla */

    border: 1px solid var(--border); /* Añade borde suave */

    border-radius: 14px; /* Redondea esquinas */

    min-height: 0; /* Permite reducción correcta dentro del flex */

    flex: 1; /* Hace que ocupe el espacio disponible */

    display: flex; /* Permite que la tabla interna se adapte correctamente */
}

.grades-table {

    width: 100%; /* Anchura */

    border-collapse: collapse; /* Bordes unidos */

    background: white; /* Fondo */
}

.grades-table th,
.grades-table td {

    border-bottom: 1px solid var(--border); /* Añade línea separadora inferior */

	border-right: 1px solid #e3ebf5;

    padding: 8px; /* Añade espacio interno */

    text-align: center; /* Centra el texto de cabeceras y celdas */

    font-size: 12px; /* Define el tamaño del texto */

    vertical-align: middle; /* Centra el contenido verticalmente */
}

.grades-table th {

    background: #f4f7fb; /* Fondo */

    color: var(--muted); /* Texto */

    text-transform: uppercase; /* Mayúsculas */

    font-weight: 900; /* Negrita */

    position: sticky; /* Cabecera fija */

    top: 0; /* Pegada arriba */

    z-index: 5; /* Prioridad visual */
}

.final-cell {

    font-weight: 900; /* Negrita */

    color: var(--success); /* Verde */

    font-size: 15px; /* Tamaño */
}

.grades-table input {

    text-align: center; /* Centra el número dentro de cada casilla de nota */
}

.grades-table td:first-child,
.grades-table th:first-child {

    text-align: center; /* Centra también la columna del alumnado */
}

/* =========================================================
   GRAFICA
========================================================= */

.chart {

    height: 100%; /* Ocupa toda la altura */

    display: flex; /* Flex */

    align-items: end; /* Barras abajo */

    gap: 10px; /* Separación */

    padding: 15px; /* Espaciado */

    border: 1px solid var(--border); /* Borde */

    border-radius: 14px; /* Bordes */

    background: #f8fafc; /* Fondo */

    overflow-x: auto; /* Scroll horizontal interno */

    overflow-y: hidden; /* Sin scroll vertical */
}

.bar-wrap { /* Columna completa de cada alumno en la gráfica de grupo */

    min-width: 80px; /* Da anchura mínima */

    height: 100%; /* Ocupa toda la altura */

    display: grid; /* Divide nota, barra y nombre */

    grid-template-rows: 22px 1fr 18px; /* Nota arriba, barra centro, nombre abajo */

    justify-items: center; /* Centra horizontalmente */

    min-height: 0; /* Evita desbordes */
}

.bar-value { /* Nota superior */

    height: 22px; /* Reserva altura fija */

    display: flex; /* Centra el texto */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra horizontalmente */

    font-size: 12px; /* Tamaño nota */

    font-weight: 900; /* Negrita */

    margin: 0; /* Elimina margen que desalineaba */
}

.bar-zone { /* Zona fija donde vive la barra */

    width: 100%; /* Ocupa todo el ancho */

    height: 100%; /* Ocupa toda la altura disponible */

    display: flex; /* Permite apoyar la barra */

    align-items: flex-end; /* Apoya todas las barras abajo */

    justify-content: center; /* Centra la barra */
}

.bar { /* Barra de evolución del grupo */

    width: 34px; /* Ancho barra */

    background: #8bb4f5; /* Azul suave */

    border-radius: 10px 10px 0 0; /* Redondeo superior */

    min-height: 4px; /* Muestra notas bajas */
}

.bar-label { /* Nombre inferior */

    height: 18px; /* Altura fija */

    line-height: 18px; /* Alinea texto */

    font-size: 11px; /* Tamaño nombre */

    color: var(--muted); /* Color gris */

    max-width: 78px; /* Limita ancho */

    overflow: hidden; /* Oculta exceso */

    text-overflow: ellipsis; /* Puntos suspensivos */

    white-space: nowrap; /* Sin salto de línea */

    margin: 0; /* Evita desplazamientos */
}

/* =========================================================
   RESPONSIVE
========================================================= */

@media (max-width: 980px) {

    .app-shell {

        grid-template-columns: 1fr; /* Hace que el sidebar pase arriba en móvil */
    }

    .dashboard-columns {

        grid-template-columns: 1fr; /* Convierte las columnas en una sola columna vertical */
    }

    .hero h1 {

        font-size: 30px; /* Reduce el tamaño del título en pantallas pequeñas */
    }
}

/* =========================================================
   AJUSTES FINALES LAYOUT
========================================================= */

.dashboard-column > .card {

    display: flex; /* Aplica flex solo a las tarjetas de las columnas principales */

    flex-direction: column; /* Ordena el contenido interno de esas tarjetas en vertical */
}

.term-actions { /* Barra de controles del bloque Trimestre i activitats */

    display: grid; /* Organiza selector y botones en una misma fila */

    grid-template-columns: 200px 1fr auto auto; /* Hace el selector igual de compacto y empuja botones a la derecha */

    gap: 10px; /* Mantiene separación entre selector y botones */

    align-items: center; /* Alinea verticalmente el selector y los botones en el centro */

    flex-shrink: 0; /* Evita que esta fila se comprima */

    margin-top: -9px; /* Sube la fila para igualarla con Trimestre i activitats */

    margin-bottom: 12px; /* Separa los controles de la tabla inferior */
}

.chart {

    min-height: 0; /* Permite que la gráfica se adapte correctamente */
}

.modal {

    overflow: hidden; /* Evita scroll del fondo cuando el modal está abierto */
}

.delete-btn {

    width: 32px; /* Define un tamaño fijo para el botón de borrar */

    height: 32px; /* Define la altura fija del botón */

    border: none; /* Elimina el borde feo del navegador */

    border-radius: 12px; /* Redondea el botón */

    background: var(--danger-bg); /* Aplica fondo rojo suave */

    color: var(--danger-text); /* Aplica color rojo al icono */

    font-size: 18px; /* Aumenta el tamaño de la X */

    font-weight: 900; /* Hace la X más visible */

    cursor: pointer; /* Muestra cursor de botón */

    display: grid; /* Permite centrar la X */

    place-items: center; /* Centra la X dentro del botón */
}

.empty { /* Mensajes vacíos generales */

    padding: 8px 18px; /* Menos altura para que no baje tanto */

    color: var(--text); /* Color principal */

    font-size: 14px; /* Tamaño cómodo */

    line-height: 1.4; /* Separación correcta */

}

.table-wrap .empty { /* Mensaje vacío dentro de la tabla */

    padding: 16px 18px; /* Mantiene "Crea una clase" separado de las esquinas */

}

.hidden {

    display: none; /* Oculta cualquier elemento que tenga la clase hidden */
}

.modal {

    position: fixed; /* Coloca el modal fijo encima de toda la pantalla */

    inset: 0; /* Hace que el modal ocupe toda la ventana */

    background: rgba(15, 23, 42, 0.45); /* Añade fondo oscuro transparente */

    display: grid; /* Permite centrar la ventana modal */

    place-items: center; /* Centra el modal horizontal y verticalmente */

    z-index: 9999; /* Coloca el modal por encima de toda la app */
}

.modal.hidden {

    display: none; /* Mantiene oculto el modal cuando tiene la clase hidden */
}

.picker-dialog-bg, .picker-dialog { /* Selector de Google Drive: se inserta fuera de nuestro control con su propio z-index, que quedaba por debajo del modal (z-index 9999) y aparecía tapado. */
    z-index: 2147483647 !important; /* El z-index máximo posible en CSS, para que siempre quede por encima de cualquier modal de la app. */
}

.modal-card { /* Modal general de la app */

    max-width: 760px; /* Devuelve tamaño normal a todos los modales */

	width: min(760px, 92vw); /* Hace que los modales normales no sean gigantes */

    max-height: 86vh; /* Evita que el modal sea más alto que la pantalla */

    overflow-y: auto; /* Permite scroll interno si el modal tiene mucho contenido */

    background: white; /* Fondo blanco del modal */

    border: 1px solid var(--border); /* Añade borde suave */

    border-radius: 20px; /* Redondea las esquinas del modal */

    padding: 18px; /* Añade espacio interior */

    box-shadow: 0 24px 60px rgba(15, 23, 42, 0.25); /* Añade sombra elegante */
}

.modal-header {

    display: flex; /* Organiza título y botón cerrar en horizontal */

    justify-content: space-between; /* Separa título y X */

    align-items: center; /* Centra verticalmente ambos elementos */

    gap: 12px; /* Añade separación interna */

    margin-bottom: 16px; /* Separa la cabecera del contenido */
}

.modal-header h2 {

    margin: 0; /* Elimina margen por defecto del título */

    font-size: 20px; /* Define tamaño del título del modal */

    text-transform: uppercase; /* Convierte el título en mayúsculas */
}

#modalClose {

    width: 34px; /* Define ancho del botón cerrar */

    height: 34px; /* Define alto del botón cerrar */

    border: none; /* Elimina borde del navegador */

    border-radius: 8px; /* Reduce el redondeo de la X para un aspecto más profesional */

    background: var(--danger-bg); /* Fondo rojo suave */

    color: var(--danger-text); /* Color rojo para la X */

    font-size: 22px; /* Tamaño de la X */

    font-weight: 900; /* Hace la X gruesa */

    cursor: pointer; /* Muestra cursor de botón */
}

.form-grid {

    display: grid; /* Organiza campos del modal en columnas */

    grid-template-columns: 1fr 1fr; /* Crea dos columnas iguales */

    gap: 12px; /* Añade separación entre campos */
}

.duplicate-target-grid { /* Grid de Classe destí, Trimestre destí i Matèria destí del modal Duplicar activitat, los tres en la misma fila */
    grid-template-columns: 1fr 1fr 1fr;
}

.modal-actions {

    display: flex; /* Coloca botones del modal en horizontal */

    justify-content: flex-end; /* Alinea los botones a la derecha */

    gap: 10px; /* Añade separación entre botones */

    margin-top: 16px; /* Separa los botones del contenido */
}

.notice {

    padding: 12px; /* Añade espacio interno */

    border-radius: 14px; /* Redondea el aviso */

    background: #f4f8fe; /* Fondo azul muy claro */

    border: 1px solid var(--border); /* Borde suave */

    color: var(--muted); /* Texto gris */
}

.weight-row {

    display: grid; /* Organiza nombre y porcentaje */

    grid-template-columns: 1fr 120px; /* Nombre flexible y campo fijo */

    gap: 10px; /* Separación entre nombre e input */

    align-items: center; /* Centra verticalmente */

    margin-bottom: 10px; /* Separa cada actividad */
}

.new-class-subject-row {

    display: flex; /* Coloca el input y los botones en línea */

    gap: 8px; /* Separación entre input y botones */

    align-items: center; /* Centra verticalmente */

    margin-bottom: 8px; /* Separa cada fila de asignatura */
}

.new-class-subject-row input {

    flex: 1; /* El campo de texto ocupa el espacio disponible */

    height: 37px; /* Misma altura que el botón de eliminar para que no se vean descuadrados */

    box-sizing: border-box; /* Incluye el borde y el padding dentro de la altura fijada */
}

.new-class-subject-row .icon-btn {

    height: 37px; /* Misma altura que el input de la asignatura */

    min-height: 37px; /* Evita que otras reglas globales lo agranden */

    box-sizing: border-box; /* Incluye el borde dentro de la altura fijada */

    flex-shrink: 0; /* Evita que el botón se comprima y pierda su forma cuadrada */
}

.new-class-subject-input,
.edit-class-subject-input {

    flex: 1; /* El campo de texto ocupa el espacio disponible */
}

#btnSaveComment {

    margin-top: 4px; /* Reduce la separación para que el botón quepa dentro del box */

    flex-shrink: 0; /* Evita que el botón se comprima */

    width: 100%; /* Mantiene el botón ocupando todo el ancho disponible */

    min-height: 38px; /* Mantiene altura suficiente para que el botón se lea bien */

	background: #f4f8fe; /* Mismo fondo que el resto de botones */

    color: #2f5f9f; /* Mismo color de texto */

    border: 1px solid #c9d8ee; /* Mismo borde */
}

#btnSaveComment:hover {

    background: #e8f1ff; /* Mismo hover que el resto */

    color: #234f86; /* Mismo color hover */

    border-color: #a9c3e8; /* Mismo borde hover */
}

.hero-right {

    display: flex; /* Organiza estadísticas superiores */

    align-items: center; /* Centra verticalmente */
}

.top-stats {

    display: flex; /* Organiza estadísticas horizontalmente */

    align-items: center; /* Centra verticalmente */

    gap: 14px; /* Espaciado entre estadísticas */
}

.mini-stat {

    display: flex; /* Organiza texto y número */

    align-items: center; /* Centra verticalmente */

    gap: 6px; /* Espaciado interno */

    padding: 8px 12px; /* Espaciado interior */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 999px; /* Forma cápsula */

    background: white; /* Fondo blanco */
}

.mini-stat span {

    font-size: 12px; /* Tamaño texto */

    color: var(--muted); /* Color gris */
}

.mini-stat strong {

    font-size: 14px; /* Tamaño número */

    color: var(--text); /* Color oscuro */

    font-weight: 900; /* Número destacado */
}

.student-follow-panel {

    display: flex; /* Organiza todo el contenido del seguimiento verticalmente */

    flex-direction: column; /* Coloca todos los elementos uno debajo del otro */

    gap: 8px; /* Reduce ligeramente la separación vertical entre bloques */

    flex: 1 1 auto; /* Ocupa el espacio sobrante de la columna izquierda, después de Classe activa */

    min-height: 0; /* Permite que se ajuste dentro del espacio disponible */

    overflow: hidden; /* Evita que el contenido rompa el layout */
}

.student-chart-section {

    display: flex; /* Organiza el contenido verticalmente */

    flex-direction: column; /* Mantiene título y gráfica en columna */

    gap: 8px; /* Añade separación interna */
}

.student-chart {

    max-height: 230px; /* Limita la altura para que el panel completo siga cabiendo */

    border: 1px solid var(--border); /* Añade borde suave */

    border-radius: 16px; /* Redondea el contenedor */

    background: #f8fafc; /* Fondo claro */

    padding: 12px; /* Espacio interior */

    display: flex; /* Organiza filas verticalmente */

    flex-direction: column; /* Coloca una actividad debajo de otra */

    gap: 10px; /* Separa actividades */

    overflow-y: auto; /* Permite scroll interno si hay muchas actividades */

    overflow-x: hidden; /* Evita scroll horizontal */
}

.individual-row {

    display: grid; /* Divide la fila en nombre, gráfico y resultado */

    grid-template-columns: 130px 1fr 78px; /* Define columnas compactas */

    gap: 12px; /* Separa columnas */

    align-items: center; /* Centra verticalmente */

    padding: 10px; /* Espacio interior */

    border: 1px solid var(--border); /* Borde de cada actividad */

    border-radius: 14px; /* Redondea cada fila */

    background: white; /* Fondo blanco */
}

.individual-name {

    font-size: 12px; /* Tamaño del nombre */

    font-weight: 900; /* Destaca la actividad */

    color: var(--text); /* Color principal */

    text-transform: uppercase; /* Mayúsculas */

    overflow: hidden; /* Oculta texto sobrante */

    text-overflow: ellipsis; /* Añade puntos suspensivos */

    white-space: nowrap; /* Evita salto de línea */
}

.individual-graph {

    display: flex; /* Organiza barra y escala */

    flex-direction: column; /* Escala debajo */

    gap: 5px; /* Separa barra y escala */
}

.individual-track {

    position: relative; /* Permite colocar marcador de media */

    height: 14px; /* Altura de la barra */

    border-radius: 999px; /* Barra redondeada */

    background: #e7eef8; /* Fondo de barra */

    overflow: visible; /* Permite ver marcador */
}

.individual-fill {

    height: 100%; /* Ocupa toda la altura */

    border-radius: 999px; /* Relleno redondeado */

    background: #3f7df1; /* Azul de nota individual */
}

.individual-average-marker {

    position: absolute; /* Coloca marcador encima de la barra */

    top: -5px; /* Lo hace sobresalir */

    width: 4px; /* Anchura del marcador */

    height: 24px; /* Altura del marcador */

    border-radius: 999px; /* Marcador redondeado */

    background: #119669; /* Verde de media */

    transform: translateX(-50%); /* Centra el marcador */
}

.individual-scale {

    display: flex; /* Coloca 0, 5 y 10 horizontalmente */

    justify-content: space-between; /* Distribuye la escala */

    font-size: 10px; /* Tamaño pequeño */

    color: var(--muted); /* Color gris */

    font-weight: 700; /* Hace la escala visible */
}

.individual-result {

    display: flex; /* Organiza nota y media */

    flex-direction: column; /* Nota arriba, media abajo */

    align-items: flex-end; /* Alinea a la derecha */
}

.individual-result strong {

    font-size: 24px; /* Nota grande */

    font-weight: 900; /* Nota destacada */

    color: var(--text); /* Color principal */
}

.individual-result span {

    font-size: 10px; /* Media pequeña */

    color: var(--success); /* Media en verde */

    font-weight: 800; /* Destaca media */
}

.student-history-section { /* Zona historial comentarios: altura natural, el scroll ahora lo hace todo el panel junto en .student-follow-body */

    display: flex; /* Permite controlar el crecimiento interno */

    flex-direction: column; /* Apila título e historial */
}

.comment-history { /* Contenedor del historial de comentarios: altura natural, el scroll ahora lo hace todo el panel junto en .student-follow-body */

    display: flex; /* Organiza comentarios verticalmente */

    flex-direction: column; /* Un comentario debajo de otro */

    gap: 8px; /* Separación entre comentarios */
}

.history-item {

    padding: 10px 12px; /* Añade espacio interior */

    border-radius: 12px; /* Redondea esquinas */

    border: 1px solid var(--border); /* Añade borde suave */

    background: #f8fafc; /* Fondo claro */

    color: var(--text); /* Texto oscuro */

    font-size: 13px; /* Tamaño cómodo de lectura */

    line-height: 1.4; /* Mejora legibilidad */
}

.section-title-row {

    display: flex; /* Organiza título y texto auxiliar */

    align-items: center; /* Centra verticalmente */

    justify-content: space-between; /* Separa extremos */

    gap: 10px; /* Añade separación */
}

.section-title-row h3 {

    margin: 0; /* Elimina márgenes */

    font-size: 14px; /* Tamaño subtítulo */

    text-transform: uppercase; /* Mayúsculas */

    letter-spacing: .02em; /* Espaciado entre letras */
}

.small-muted {

    font-size: 11px; /* Tamaño pequeño */

    color: var(--muted); /* Color gris */

    font-weight: 600; /* Peso medio */
}

.student-follow-panel .field-top {

    flex-shrink: 0; /* Evita que el bloque de nuevo comentario se comprima */
}

.student-follow-panel #btnSaveComment {

    flex-shrink: 0; /* Mantiene el botón siempre visible */

    margin-top: 0; /* Elimina espacio innecesario entre textarea y botón */
}

.student-top-row { /* Fila de controles del bloque Seguiment de l'alumne/a */

    display: grid; /* Organiza alumno, condición, editar y borrar en una misma fila */

    grid-template-columns: minmax(220px, 1fr) minmax(180px, 0.75fr) 38px 38px; /* Estrecha selector y condición para que entren editar y borrar */

    gap: 8px; /* Reduce separación para que todo quepa en horizontal */

    align-items: end; /* Alinea todos los controles por la parte inferior */

    margin-top: -4px; /* Mantiene la fila subida */
}

.student-select-field {

    margin: 0; /* Elimina márgenes extra */
}

.student-condition-field {

    margin: 0; /* Elimina márgenes extra */
}

.student-condition-field input {

    font-weight: 700; /* Hace más visible la condición */

    color: var(--muted); /* Usa color gris elegante */
}

.compact-hero {

    position: relative; /* Permite posicionar el título de forma absoluta */

    display: flex; /* Organiza contenido horizontalmente */

    align-items: flex-start; /* Coloca elementos arriba */

    justify-content: space-between; /* Separa izquierda y derecha */

    min-height: 74px; /* Da suficiente altura para selector y título */

    padding: 0 4px; /* Añade pequeño margen lateral */
}

.compact-hero h1 {

    position: absolute; /* Saca el título del flujo normal */

    left: 50%; /* Lleva el título al centro horizontal */

    transform: translateX(-50%); /* Centra exactamente el título */

    top: 0; /* Lo coloca arriba */

    margin: 0; /* Elimina márgenes */

    font-size: 44px; /* Mantiene tamaño grande */

    white-space: nowrap; /* Evita salto de línea */

    text-align: center; /* Centra el texto */
}

.top-class-tools {

    display: flex; /* Organiza selector y botón horizontalmente */

    align-items: flex-end; /* Alinea el botón con la parte inferior del selector */

    gap: 8px; /* Separa selector y botón */

    z-index: 2; /* Mantiene visible el grupo sobre el título */

    flex-shrink: 0; /* Evita que el grupo se comprima */
}

.top-class-field {

    width: 190px; /* Hace el selector más compacto */
}

.icon-btn {

    width: 40px; /* Define ancho cuadrado */

    height: 40px; /* Define altura cuadrada */

    border-radius: 14px; /* Redondea el botón */

    border: 1px solid var(--border); /* Añade borde suave */

    display: grid; /* Permite centrar el contenido */

    place-items: center; /* Centra el símbolo + */

    cursor: pointer; /* Muestra cursor de botón */

    font-size: 24px; /* Hace visible el símbolo + */

    font-weight: 900; /* Hace el símbolo grueso */

    line-height: 1; /* Evita desajustes */
}

.primary-icon-btn {

    background: #f4f8fe; /* Fondo azul muy claro */

    color: #2f5f9f; /* Símbolo azul */

    border: 1px solid #c9d8ee; /* Borde azul suave */
}

.secondary-icon-btn {

    background: #f4f8fe; /* Fondo azul muy claro */

    color: #2f5f9f; /* Símbolo azul */

    border: 1px solid #c9d8ee; /* Borde azul suave */
}

.card-header .icon-btn {

    width: 38px; /* Ajusta tamaño dentro de tarjetas */

    height: 38px; /* Ajusta altura dentro de tarjetas */

    flex-shrink: 0; /* Evita compresión */
}

.compact-hero > .top-class-tools:first-of-type { /* Mantiene CLASSE ACTIVA pegado a la izquierda */
    margin-right: auto !important; /* Empuja el título y usuario hacia sus posiciones correctas */
} /* Fin ajuste clase activa izquierda */

.activity-header-cell {

    display: flex; /* Organiza nombre y botón horizontalmente */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra el contenido */

    gap: 14px; /* Separa el nombre y la X */
}

.activity-delete-btn {

    width: 34px; /* Hace el botón más visible */

    height: 34px; /* Mantiene formato cuadrado */

    border: 1px solid #f2b8b5; /* Añade borde rojo suave */

    border-radius: 12px; /* Redondea esquinas como en la referencia */

    background: #fff7f7; /* Fondo rojo muy claro */

    color: #c5342d; /* Color rojo intenso para la X */

    font-size: 20px; /* Hace la X más grande */

    font-weight: 900; /* Hace la X gruesa */

    cursor: pointer; /* Muestra cursor interactivo */

    display: flex; /* Permite centrar contenido */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra horizontalmente */

    transition: all 0.15s ease; /* Suaviza hover */

    flex-shrink: 0; /* Evita deformaciones */
}

.activity-delete-btn:hover {

    background: #ffe0e0; /* Oscurece el fondo al pasar el ratón */
}

.danger-icon-btn {

    background: #fff5f5; /* Fondo rojo muy claro */

    color: #c5342d; /* Color rojo intenso */

    border: 1px solid #f0b8b5; /* Añade borde rojo suave */
}

.danger-icon-btn:hover {

    background: #ffe8e8; /* Oscurece ligeramente el fondo */

    border-color: #de8f89; /* Intensifica el borde */

    transform: scale(1.05); /* Añade pequeño zoom */
}

.student-top-row {

    grid-template-columns: 1fr 0.8fr 38px; /* Selector, condición y botón eliminar */
}

.student-delete-top-btn {

    align-self: end; /* Alinea el botón con la parte baja de los campos */

    justify-self: end; /* Coloca el botón al final de la fila */

    width: 38px; /* Igual altura visual que los campos */

    height: 38px; /* Igual altura visual que los campos */

    border-radius: 12px; /* Mantiene forma suave */

    font-size: 20px; /* Tamaño de la X */

    margin-bottom: 0; /* Evita desplazamiento */
}

.student-dropdown {

    position: relative; /* Permite colocar el menú debajo del botón */

    width: 100%; /* Ocupa todo el ancho del campo */
}

.student-dropdown-button {

    width: 100%; /* Ocupa todo el ancho */

    min-height: 38px; /* Altura parecida a los inputs */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 12px; /* Redondea esquinas */

    background: white; /* Fondo blanco */

    padding: 0 12px; /* Espacio interno */

    display: flex; /* Organiza texto y flecha */

    align-items: center; /* Centra verticalmente */

    justify-content: space-between; /* Separa texto y flecha */

    font-size: 13px; /* Tamaño texto */

    color: var(--text); /* Color principal */

    cursor: pointer; /* Cursor de botón */
}

.student-dropdown-menu {

    position: absolute; /* Coloca menú sobre el contenido */

    top: calc(100% + 6px); /* Lo sitúa debajo del botón */

    left: 0; /* Alinea a la izquierda */

    right: 0; /* Ocupa el mismo ancho */

    z-index: 30; /* Lo pone por encima de otros elementos */

    background: white; /* Fondo blanco */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 14px; /* Redondea menú */

    box-shadow: 0 18px 35px rgba(15, 23, 42, .18); /* Sombra elegante */

    padding: 8px; /* Espacio interno */
}

.student-dropdown-search {

    width: 100%; /* Ocupa ancho completo */

    height: 36px; /* Altura compacta */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 10px; /* Redondea input */

    padding: 0 10px; /* Espacio interno */

    margin-bottom: 8px; /* Separa buscador y opciones */

    font-size: 13px; /* Tamaño texto */
}

.student-dropdown-options {

    max-height: 150px; /* Limita altura del listado */

    overflow-y: auto; /* Scroll interno si hay muchos alumnos */

    display: flex; /* Organiza opciones */

    flex-direction: column; /* Una opción debajo de otra */

    gap: 4px; /* Separación entre opciones */
}

.student-dropdown-option {

    width: 100%; /* Opción ocupa todo el ancho */

    border: none; /* Sin borde */

    background: transparent; /* Fondo transparente */

    text-align: left; /* Texto alineado a la izquierda */

    padding: 9px 10px; /* Espacio interno */

    border-radius: 10px; /* Redondea opción */

    cursor: pointer; /* Cursor interactivo */

    font-size: 13px; /* Tamaño texto */

    font-weight: 600 !important; /* Iguala el grosor al resto de selectores */

    color: var(--text); /* Color principal */

    display: flex; /* Centra el texto verticalmente dentro del sombreado, en vez de depender del line-height por defecto del botón */

    align-items: center; /* Centrado vertical real */
}

.student-dropdown-options { /* Lista de alumnos del desplegable */
    font-weight: 600 !important; /* Evita que herede negritas más fuertes */
} /* Fin lista alumnos */

.student-dropdown-option:hover { /* Opción al pasar el ratón */
    font-weight: 600 !important; /* Mantiene el mismo grosor al hacer hover */
} /* Fin hover opción alumno */

.student-dropdown-option:hover {

    background: #eef5ff; /* Fondo azul suave al pasar ratón */
}

.history-item {

    display: flex; /* Coloca el comentario y la X en la misma fila */

    align-items: center; /* Centra verticalmente el contenido */

    justify-content: space-between; /* Deja el texto a la izquierda y la X a la derecha */

    gap: 10px; /* Añade separación entre texto y botón */
}

.history-text {

    flex: 1; /* Hace que el texto ocupe todo el espacio disponible */

    min-width: 0; /* Evita que textos largos rompan el diseño */

    overflow-wrap: anywhere; /* Permite cortar palabras largas si hace falta */
}

.comment-delete-btn {

    width: 28px; /* Define el ancho del botón */

    height: 28px; /* Define el alto del botón */

    border: 1px solid #f2b8b5; /* Añade borde rojo suave */

    border-radius: 7px; /* Redondea el botón */

    background: #fff7f7; /* Fondo rojo muy claro */

    color: #c5342d; /* X roja */

    font-size: 18px; /* Tamaño de la X */

    font-weight: 900; /* Hace la X más gruesa */

    cursor: pointer; /* Muestra cursor de botón */

    display: flex; /* Permite centrar la X */

    align-items: center; /* Centra verticalmente la X */

    justify-content: center; /* Centra horizontalmente la X */

    flex-shrink: 0; /* Evita que el botón se deforme */
}

.comment-delete-btn:hover {

    background: #ffe8e8; /* Cambia el fondo al pasar el ratón */

    border-color: #de8f89; /* Intensifica el borde al pasar el ratón */
}

/* =========================================================
   NUEVA EVOLUCIÓN INDIVIDUAL UNIFICADA
========================================================= */

.student-chart { /* Rediseña el contenedor principal del gráfico individual */

    max-height: 260px; /* Da más espacio al gráfico unificado */

    padding: 12px; /* Mantiene espacio interior cómodo */

    gap: 8px; /* Separa la leyenda, escala y barras */

    overflow-y: auto; /* Permite scroll si hay muchas actividades */

    overflow-x: hidden; /* Evita scroll horizontal */
}

.student-chart-legend { /* Crea la leyenda superior del gráfico */

    display: flex; /* Coloca los elementos en horizontal */

    justify-content: flex-end; /* Alinea la leyenda a la derecha */

    gap: 14px; /* Separa los elementos de la leyenda */

    font-size: 11px; /* Usa texto pequeño */

    font-weight: 400; /* Texto normal sin negrita */

    color: var(--muted); /* Usa color gris secundario */

    flex-shrink: 0; /* Evita que la leyenda se comprima */
}

.student-chart-legend span { /* Ajusta cada elemento de la leyenda */

    display: flex; /* Permite alinear icono y texto */

    align-items: center; /* Centra verticalmente icono y texto */

    gap: 5px; /* Separa icono y texto */
}

.legend-bar { /* Dibuja el icono azul de la nota */

    width: 18px; /* Define ancho del icono */

    height: 8px; /* Define alto del icono */

    border-radius: 999px; /* Redondea el icono */

    background: #3f7df1; /* Usa azul de la nota */
}

.legend-average { /* Dibuja el icono verde de la media */

    width: 4px; /* Define ancho del marcador */

    height: 16px; /* Define alto del marcador */

    border-radius: 999px; /* Redondea el marcador */

    background: #119669; /* Usa verde de la media */
}

.student-chart-scale-top { /* Crea la escala superior de 0 a 10 */

    display: grid; /* Usa grid para repartir los números */

    grid-template-columns: repeat(5, 1fr); /* Crea cinco posiciones iguales */

    padding-left: 150px; /* Alinea la escala con el inicio de las barras */

    padding-right: 92px; /* Alinea la escala antes de los valores */

    font-size: 10px; /* Usa texto pequeño */

    color: var(--muted); /* Usa color secundario */

    font-weight: 800; /* Hace la escala visible */

    flex-shrink: 0; /* Evita que se comprima */
}

.student-chart-scale-top span { /* Ajusta cada número de la escala */

    text-align: center; /* Centra cada número */
}

.student-chart-unified { /* Contenedor de todas las barras del gráfico */

    display: flex; /* Organiza las filas en vertical */

    flex-direction: column; /* Coloca actividades una debajo de otra */

    gap: 8px; /* Separa cada actividad */
}

.student-chart-line { /* Fila completa de cada actividad */

    display: grid; /* Divide nombre, barra y valores */

    grid-template-columns: 130px 1fr 78px; /* Define columnas de actividad, gráfico y nota */

    align-items: center; /* Centra todo verticalmente */

    gap: 10px; /* Separa columnas */

    padding: 10px; /* Añade espacio interior */

    border: 1px solid var(--border); /* Añade borde suave */

    border-radius: 14px; /* Redondea la fila */

    background: white; /* Fondo blanco para cada actividad */
}

.student-chart-name { /* Nombre de cada actividad */

    font-size: 12px; /* Define tamaño del nombre */

    font-weight: 900; /* Hace el nombre más visible */

    color: var(--text); /* Usa color principal */

    text-transform: uppercase; /* Muestra el nombre en mayúsculas */

    overflow: hidden; /* Oculta texto sobrante */

    text-overflow: ellipsis; /* Añade puntos suspensivos si no cabe */

    white-space: nowrap; /* Evita salto de línea */
}

.student-chart-track { /* Barra base donde se dibuja nota y media */

    position: relative; /* Permite colocar la media encima */

    height: 16px; /* Define altura de la barra */

    border-radius: 999px; /* Redondea la barra */

    background: #e7eef8; /* Fondo gris azulado */

    overflow: visible; /* Permite ver el marcador verde */
}

.student-chart-fill { /* Barra azul de la nota del alumno */

    height: 100%; /* Ocupa toda la altura de la pista */

    border-radius: 999px; /* Redondea la barra azul */

    background: #3f7df1; /* Color azul de nota */
}

.student-chart-average { /* Marcador verde de la media del grupo */

    position: absolute; /* Permite colocarlo sobre la barra */

    top: -5px; /* Hace que sobresalga arriba */

    width: 4px; /* Define ancho del marcador */

    height: 26px; /* Define alto del marcador */

    border-radius: 999px; /* Redondea el marcador */

    background: #119669; /* Color verde de la media */

    transform: translateX(-50%); /* Centra el marcador en su posición exacta */
}

.student-chart-values { /* Zona derecha con nota y media */

    display: flex; /* Organiza nota y media */

    flex-direction: column; /* Coloca nota arriba y media abajo */

    align-items: flex-end; /* Alinea números a la derecha */
}

.student-chart-values strong { /* Nota principal del alumno */

    font-size: 24px; /* Hace la nota grande */

    font-weight: 900; /* Hace la nota gruesa */

    color: var(--text); /* Usa color principal */
}

.student-chart-values span { /* Texto de media del grupo */

    font-size: 10px; /* Hace la media más pequeña */

    color: var(--success); /* Usa verde para la media */

    font-weight: 900; /* Destaca la media */
}

/* =========================================================
   EVOLUCIÓN INDIVIDUAL COMPACTA SIN SCROLL
========================================================= */

.student-chart { /* Rediseña el contenedor para que todo se vea sin scroll vertical */

    max-height: none; /* Elimina la altura máxima anterior */

    height: 230px; /* Da una altura fija compacta */

    overflow: hidden; /* Quita el scroll vertical */

    padding: 10px; /* Ajusta el espacio interior */

    gap: 6px; /* Reduce separación interna */
}

.student-compact-legend { /* Leyenda superior del gráfico */

    display: flex; /* Coloca la leyenda en horizontal */

    justify-content: flex-end; /* Alinea la leyenda a la derecha */

    gap: 14px; /* Separa los elementos */

    font-size: 11px; /* Tamaño pequeño */

    font-weight: 900; /* Texto grueso */

    color: var(--muted); /* Color gris */

    flex-shrink: 0; /* Evita que se comprima */
}

.student-compact-legend span { /* Cada elemento de la leyenda */

    display: flex; /* Alinea icono y texto */

    align-items: center; /* Centra verticalmente */

    gap: 5px; /* Separa icono y texto */
}

.compact-legend-bar { /* Icono azul de nota */

    width: 18px; /* Ancho del icono */

    height: 8px; /* Alto del icono */

    border-radius: 999px; /* Redondea el icono */

    background: #3f7df1; /* Color azul */
}

.compact-legend-line { /* Icono verde de media */

    width: 18px; /* Ancho del icono */

    height: 4px; /* Alto del icono */

    border-radius: 999px; /* Redondea el icono */

    background: #119669; /* Color verde */
}

.student-compact-chart { /* Contenedor del gráfico con eje y barras */

    flex: 1; /* Ocupa todo el espacio disponible */

    min-height: 0; /* Permite ajustarse dentro del panel */

    display: grid; /* Divide eje y zona de barras */

    grid-template-columns: 28px 1fr; /* Eje pequeño y gráfico grande */

    gap: 8px; /* Separa eje y gráfico */
}

.compact-y-axis { /* Eje vertical de notas */

    height: 100%; /* Ocupa toda la altura */

    display: flex; /* Organiza valores verticalmente */

    flex-direction: column; /* Coloca números de arriba a abajo */

    justify-content: space-between; /* Reparte los números */

    align-items: flex-end; /* Alinea números a la derecha */

    font-size: 10px; /* Tamaño pequeño */

    font-weight: 900; /* Texto visible */

    color: var(--muted); /* Color gris */
}

.compact-bars-area { /* Zona principal donde aparecen todas las actividades */

    position: relative; /* Permite colocar líneas de fondo */

    display: grid; /* Coloca columnas automáticamente */

    grid-auto-flow: column; /* Organiza actividades en columnas */

    grid-auto-columns: minmax(48px, 1fr); /* Hace que todas quepan y se repartan */

    gap: 8px; /* Separa columnas */

    height: 100%; /* Ocupa toda la altura disponible */

    padding: 0 4px; /* Añade margen lateral mínimo */

    overflow: hidden; /* Evita scroll */
}

.compact-grid-line { /* Líneas horizontales de referencia */

    position: absolute; /* Coloca líneas dentro del gráfico */

    left: 0; /* Empieza a la izquierda */

    right: 0; /* Llega hasta la derecha */

    height: 1px; /* Grosor de línea */

    background: #dce6f3; /* Color suave */

    z-index: 0; /* Queda por detrás de las barras */
}

.line-10 { top: 0%; } /* Posición línea 10 */

.line-75 { top: 25%; } /* Posición línea 7,5 */

.line-50 { top: 50%; } /* Posición línea 5 */

.line-25 { top: 75%; } /* Posición línea 2,5 */

.line-0 { bottom: 0%; } /* Posición línea 0 */

.compact-activity-column { /* Columna completa de actividad */

    position: relative; /* Mantiene la columna sobre las líneas */

    z-index: 1; /* Pone la columna encima del fondo */

    display: grid; /* Organiza barra, nota y nombre */

    grid-template-rows: 1fr auto auto; /* Barra arriba, nota y nombre abajo */

    align-items: end; /* Apoya la barra abajo */

    min-width: 0; /* Evita desbordes */

    height: 100%; /* Ocupa toda la altura */
}

.compact-bar-zone { /* Zona vertical donde sube la barra */

    position: relative; /* Permite colocar media y barra */

    height: 100%; /* Ocupa toda la zona superior */

    width: 100%; /* Ocupa ancho completo */

    display: flex; /* Permite apoyar barra abajo */

    align-items: flex-end; /* Coloca barra desde abajo */

    justify-content: center; /* Centra barra horizontalmente */

    padding-top: 4px; /* Da margen arriba */
}

.compact-bar { /* Barra azul del alumno */

    width: 52%; /* Define ancho proporcional de la barra */

    min-height: 4px; /* Hace visible notas bajas */

    border-radius: 10px 10px 0 0; /* Redondea parte superior */

    background: #3f7df1; /* Color azul */

    z-index: 2; /* Pone la barra sobre la media si se cruzan */
}

.compact-average-marker { /* Marca verde horizontal de media */

    position: absolute; /* Posiciona según la nota media */

    left: 12%; /* Empieza cerca del borde izquierdo */

    right: 12%; /* Termina cerca del borde derecho */

    height: 4px; /* Grosor de la marca */

    border-radius: 999px; /* Redondea la marca */

    background: #119669; /* Color verde */

    transform: translateY(50%); /* Centra la línea en su posición */

    z-index: 3; /* Coloca la media por encima de la barra */
}

.compact-grade-value { /* Nota numérica debajo de la barra */

    margin-top: 4px; /* Separa nota de la barra */

    text-align: center; /* Centra la nota */

    font-size: 17px; /* Tamaño visible */

    font-weight: 900; /* Texto grueso */

    color: var(--text); /* Color principal */

    line-height: 1; /* Compacta altura */
}

.compact-activity-name { /* Nombre inferior de la actividad */

    margin-top: 4px; /* Separa nombre de nota */

    text-align: center; /* Centra el texto */

    font-size: 10px; /* Tamaño compacto */

    font-weight: 900; /* Texto fuerte */

    color: var(--muted); /* Color gris */

    text-transform: uppercase; /* Mayúsculas */

    white-space: nowrap; /* Evita salto de línea */

    overflow: hidden; /* Oculta texto que no cabe */

    text-overflow: ellipsis; /* Añade puntos suspensivos */
}

/* =========================================================
   EVOLUCIÓN INDIVIDUAL AJUSTADA
========================================================= */

.student-chart { /* Contenedor exterior del gráfico individual */

    height: 285px; /* Da altura suficiente sin hacerlo exagerado */

    max-height: none; /* Elimina límites anteriores */

    overflow: hidden; /* Evita scroll vertical */

    padding: 14px 18px 12px 18px; /* Ajusta espacios interiores */

    display: block; /* Permite que el gráfico use su propia estructura */

    background: #fbfdff; /* Fondo casi blanco como en la referencia */
}

.student-full-chart { /* Contenedor general del gráfico */

    height: 100%; /* Ocupa toda la altura del contenedor */

    display: flex; /* Organiza leyenda y gráfico */

    flex-direction: column; /* Coloca leyenda arriba y gráfico debajo */

    gap: 6px; /* Reduce separación vertical */
}

.student-full-legend { /* Leyenda superior */

    display: flex; /* Coloca elementos en horizontal */

    justify-content: flex-end; /* Alinea la leyenda a la derecha */

    gap: 22px; /* Separa los elementos */

    font-size: 12px; /* Tamaño equilibrado */

    font-weight: 400; /* Quita la negrita del texto de la leyenda */

    color: var(--text); /* Color principal */

    height: 22px; /* Reserva altura fija para la leyenda */

    flex-shrink: 0; /* Evita que se comprima */
}

.student-full-legend span { /* Cada elemento de la leyenda */

    display: flex; /* Alinea icono y texto */

    align-items: center; /* Centra verticalmente */

    gap: 8px; /* Separa icono y texto */
}

.full-legend-bar { /* Icono azul de nota */

    width: 30px; /* Ancho del icono */

    height: 10px; /* Alto del icono */

    border-radius: 999px; /* Redondea el icono */

    background: #8bb4f5; /* Mismo azul suave que las barras */
}

.full-legend-line { /* Icono verde de media */

    width: 34px; /* Ancho de la línea */

    height: 3px; /* Grosor de línea */

    border-radius: 999px; /* Redondea extremos */

    background: #119669; /* Verde de media */
}

.student-full-body { /* Zona con eje y barras */

    flex: 1; /* Ocupa el espacio restante */

    min-height: 0; /* Permite ajustar altura */

    display: grid; /* Divide eje y gráfico */

    grid-template-columns: 34px 1fr; /* Eje izquierdo y zona principal */

    gap: 10px; /* Separa eje y barras */
}

.student-full-y-axis { /* Eje vertical */

    height: calc(100% - 40px); /* Alinea el eje solo con la zona de barras */

    display: flex; /* Organiza números */

    flex-direction: column; /* Coloca números verticalmente */

    justify-content: space-between; /* Reparte del 10 al 0 */

    align-items: flex-end; /* Alinea a la derecha */

    font-size: 12px; /* Tamaño cómodo */

    font-weight: 900; /* Texto fuerte */

    color: #52657d; /* Color más suave para los números del eje */

    padding-top: 0; /* Evita desplazamiento superior */
}

.student-full-area { /* Área principal del gráfico */

    position: relative; /* Permite colocar líneas internas */

    height: calc(100% - 40px); /* Reserva abajo espacio para notas y nombres */

    border-left: 1px solid #8fa3bd; /* Eje vertical más claro */

	border-bottom: 1px solid #8fa3bd; /* Eje inferior más claro */

    padding: 0 28px; /* Da aire lateral como en la referencia */
}

.student-full-grid { /* Capa de líneas horizontales */

    position: absolute; /* Coloca líneas dentro del área */

    inset: 0; /* Ocupa toda la zona del gráfico */

    pointer-events: none; /* No interfiere con el uso */
}

.student-full-grid-line { /* Línea horizontal de referencia */

    position: absolute; /* Permite ubicar por porcentaje */

    left: 0; /* Empieza al borde izquierdo */

    right: 0; /* Llega al borde derecho */

    height: 1px; /* Grosor fino */

    background: transparent; /* Evita doble línea sólida */

    border-top: 1px solid #d8e2ef; /* Línea lisa suave */

    transform: translateY(50%); /* Centra la línea en el valor */
}

.student-full-bars { /* Contenedor de columnas */

    position: relative; /* Mantiene barras sobre la cuadrícula */

    z-index: 2; /* Pone las barras encima */

    height: 100%; /* Ocupa la altura exacta del área */

    display: grid; /* Distribuye actividades */

    grid-auto-flow: column; /* Coloca columnas en horizontal */

    grid-auto-columns: minmax(72px, 1fr); /* Reparte el espacio disponible */

    gap: 34px; /* Separa columnas */

    align-items: end; /* Apoya todo abajo */
}

.student-full-column { /* Columna completa por actividad */

    position: relative; /* Permite colocar texto debajo del eje */

    height: 100%; /* Ocupa toda la zona de barras */

    min-width: 0; /* Evita desbordamientos */
}

.student-full-plot { /* Zona vertical real de barra */

    position: relative; /* Permite colocar media y barra */

    height: 100%; /* Hace que la barra empiece desde el 0 real */

    display: flex; /* Permite apoyar barra abajo */

    align-items: flex-end; /* Coloca la barra desde abajo */

    justify-content: center; /* Centra la barra */
}

.student-full-bar { /* Barra azul */

    width: 72%; /* Barra más ancha como la imagen buena */

    min-height: 4px; /* Permite ver notas muy bajas */

    border-radius: 12px 12px 0 0; /* Redondea solo arriba */

    background: #8bb4f5; /* Azul suave algo más claro */

    position: relative; /* Mantiene posición */

    z-index: 2; /* Barra sobre líneas */
}

.student-full-average { /* Línea verde de media */

    position: absolute; /* Coloca la media según su nota */

    left: 2%; /* Hace la línea más larga */

    right: 2%; /* Hace la línea más larga */

    height: 3px; /* Grosor elegante */

    border-radius: 999px; /* Redondea extremos */

    background: #119669; /* Verde media */

    transform: translateY(50%); /* Centra la línea en el valor */

    z-index: 3; /* Media encima de la barra */
}

.student-full-grade { /* Nota numérica */

    position: absolute; /* Permite colocarla bajo el eje */

    left: 0; /* Ocupa toda la columna */

    right: 0; /* Ocupa toda la columna */

    bottom: -30px; /* Coloca la nota debajo del eje */

    text-align: center; /* Centra nota */

    font-size: 24px; /* Nota grande pero no exagerada */

    font-weight: 900; /* Nota fuerte */

    color: #26364a; /* Color oscuro más suave para la nota */

    line-height: 1; /* Compacta altura */
}

.student-full-name { /* Nombre de actividad */

    position: absolute; /* Permite colocarlo bajo la nota */

    left: 0; /* Ocupa toda la columna */

    right: 0; /* Ocupa toda la columna */

    bottom: -48px; /* Coloca el nombre debajo de la nota */

    text-align: center; /* Centra nombre */

    font-size: 11px; /* Tamaño compacto */

    font-weight: 900; /* Texto fuerte */

    color: #52657d; /* Color más suave para el nombre de actividad */

    text-transform: uppercase; /* Mayúsculas */

    white-space: nowrap; /* Evita salto de línea */

    overflow: hidden; /* Oculta exceso */

    text-overflow: ellipsis; /* Añade puntos suspensivos si no cabe */
}

/* =========================================================
   FILAS ALTERNAS TABLA DE NOTAS
========================================================= */

.grades-table tbody tr:nth-child(odd) { /* Aplica estilo a las filas impares */

    background: #ffffff; /* Mantiene fondo blanco */
}

.grades-table tbody tr:nth-child(even) { /* Aplica estilo a las filas pares */

    background: #fcfdff; /* Fondo azul muy suave para facilitar la lectura */
}

.grades-table tbody tr:hover { /* Aplica estilo al pasar el ratón por una fila */

    background: #eef5ff; /* Resalta suavemente la fila activa */
}

/* =========================================================
   SEPARADORES VERTICALES TABLA DE NOTAS
========================================================= */

.grades-table th:last-child,
.grades-table td:last-child {

    border-right: none; /* Elimina la línea en la última columna */
}

.grades-table input {

    max-width: 90%; /* Evita que los inputs ocupen toda la celda */

    margin: 0 auto; /* Centra los inputs dentro de la celda */

    display: block; /* Permite centrar correctamente el input */
}

.grades-table th,
.grades-table td { /* Permite que la tabla se adapte sin scroll horizontal */

    white-space: normal; /* Permite adaptar el contenido */

    min-width: 0; /* Quita el ancho mínimo que provocaba scroll */

    width: auto; /* Deja que el navegador reparta el espacio */
}

.grades-table th:first-child,
.grades-table td:first-child {

    min-width: 130px; /* Reduce la anchura mínima de la columna de alumnos */

    width: 130px; /* Mantiene la columna de alumnos más compacta */
}

.grades-table th:last-child,
.grades-table td:last-child {

    min-width: 90px; /* Mantiene compacta la columna final */
}

.grades-table input {

    max-width: 88%; /* Evita que el input toque las líneas verticales */

    margin: 0 auto; /* Centra el input */

    display: block; /* Permite centrarlo correctamente */
}

/* =========================================================
   BOTONES JUNTO AL TÍTULO DE TARJETA
========================================================= */

.title-with-button { /* Cabecera con botón pegado al título */

    justify-content: flex-start; /* Coloca título y botón al inicio */

    gap: 10px; /* Separa título y botón */
}

.inline-title-btn { /* Botón pequeño al lado del título */

    width: 32px; /* Reduce el ancho del botón */

    height: 32px; /* Reduce el alto del botón */

    min-height: 32px; /* Evita que herede alturas mayores */

    border-radius: 12px; /* Mantiene esquinas suaves */

    font-size: 20px; /* Ajusta tamaño del símbolo */

    flex-shrink: 0; /* Evita que se comprima */
}

/* =========================================================
   COLUMNA CONDICIÓN Y SELECTOR DE ORDEN
========================================================= */

.sort-field { /* Ajusta el campo de ordenar */

    min-width: 170px; /* Da ancho suficiente al selector */
}

.condition-cell { /* Estilo de la celda de condición */

    color: #52657d; /* Usa tono gris azulado */

    font-weight: 800; /* Hace el texto visible */

    font-size: 12px; /* Mantiene tamaño compacto */
}

.grades-table th:nth-child(2),
.grades-table td:nth-child(2) { /* Ajusta la columna condición */

    min-width: 120px; /* Da espacio suficiente a la condición */

    width: 120px; /* Mantiene columna compacta */
}

/* =========================================================
   ORDENAR EN CABECERA DE TRIMESTRE
========================================================= */

.term-header-with-sort { /* Cabecera con título a la izquierda y ordenar a la derecha */

    justify-content: space-between; /* Separa título y selector ordenar */

    align-items: flex-start; /* Alinea ambos bloques por arriba */
}

.term-title-left { /* Grupo de título y botón crear trimestre */

    display: flex; /* Coloca título y botón en horizontal */

    align-items: center; /* Centra verticalmente título y botón */

    gap: 10px; /* Separa título y botón */
}

.sort-field-header { /* Selector ordenar dentro de la cabecera */

    width: 180px; /* Da ancho fijo al selector */

    min-width: 180px; /* Evita que se comprima */
}

.sort-field-header select { /* Ajusta el selector de ordenar */

    height: 36px; /* Igual altura visual que otros campos */

    font-size: 13px; /* Mantiene tamaño de texto */
}

/* =========================================================
   FILTROS DESPLEGABLES EN TABLA DE NOTAS
========================================================= */

.filter-th { /* Cabecera que contiene filtro desplegable */

    position: sticky; /* Mantiene comportamiento de cabecera fija */

    overflow: visible; /* Permite que el desplegable salga fuera */
}

.filter-header-cell { /* Contenedor de ALUMNO/A y CONDICIÓN */

    position: relative; /* Permite colocar el botón de filtro sin mover el texto */

    width: 100%; /* Ocupa todo el ancho de la cabecera */

    height: 36px; /* Iguala la altura visual a las actividades */

    display: flex; /* Permite centrar el texto */

    align-items: center; /* Centra verticalmente el contenido */

    justify-content: center; /* Centra horizontalmente el texto */
}

.filter-header-cell span { /* Texto ALUMNO/A y CONDICIÓN */

    display: block; /* Trata el texto como bloque independiente */

    width: 100%; /* Hace que el texto use toda la celda */

    padding: 0 30px 0 6px; /* Reserva espacio para el botón sin descentrar tanto */

    text-align: center; /* Centra el texto */

    font-size: 12px !important; /* Iguala el tamaño a las actividades */

    font-weight: 900 !important; /* Mantiene el grosor */

    color: #26364a !important; /* Usa el mismo color que las actividades */

    text-transform: uppercase !important; /* Mantiene mayúsculas */

    line-height: 36px !important; /* Centra verticalmente el texto */
}

.filter-header-cell .column-filter-btn { /* Botón filtro de ALUMNO/A y CONDICIÓN */

    position: absolute; /* Coloca el botón sin afectar al centrado */

    right: 1px; /* Lo separa un poco del borde derecho */

    top: 50%; /* Lo coloca a media altura */

    transform: translateY(-50%); /* Lo centra verticalmente */

    width: 24px; /* Mantiene tamaño igual al resto */

    height: 24px; /* Mantiene altura igual al resto */
}

.column-filter-btn { /* Botón pequeño de filtro */

    width: 24px; /* Ancho del botón */

    height: 24px; /* Alto del botón */

    border-radius: 8px; /* Bordes suaves */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    background: #f4f8fe; /* Fondo azul claro */

    color: #2f5f9f; /* Texto azul */

    font-size: 12px; /* Tamaño flecha */

    font-weight: 900; /* Hace la flecha visible */

    cursor: pointer; /* Cursor de botón */
}

.column-filter-btn.filter-active { /* Botón cuando hay filtro activo */

    background: #e8f1ff; /* Fondo activo */

    border-color: #8fb3e6; /* Borde activo */

    color: #234f86; /* Texto activo */
}

.column-filter-menu { /* Menú desplegable del filtro */

    position: absolute; /* Coloca el menú flotante */

    top: calc(100% + 6px); /* Lo sitúa debajo de la cabecera */

    left: 6px; /* Lo separa del borde izquierdo */

    width: 260px; /* Ancho del menú */

    max-height: 310px; /* Altura máxima */

    background: white; /* Fondo blanco */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    border-radius: 14px; /* Bordes redondeados */

    padding: 10px; /* Espaciado interno */

    box-shadow: 0 18px 35px rgba(15, 23, 42, .16); /* Sombra suave */

    z-index: 50; /* Coloca el menú por encima de la tabla */

    text-align: left; /* Alinea contenido a la izquierda */
}

.column-filter-search { /* Buscador del filtro de columna */

    width: 100%; /* Ocupa el mismo ancho que los botones inferiores juntos */

    height: 38px; /* Mantiene una altura cómoda */

    margin-bottom: 0 !important; /* Evita separación duplicada */

    border-color: #8fb3e6; /* Mantiene borde azul visible */

    text-align: left; /* Alinea el texto dentro del buscador */

    padding: 0 12px; /* Añade espacio interior lateral */
}

.column-filter-actions { /* Zona de botones del filtro */

    display: grid; /* Organiza botones en grid */

    grid-template-columns: 1fr 1fr; /* Dos botones iguales */

    gap: 8px; /* Separación entre botones */

    margin-bottom: 10px; /* Separación inferior */
}

.column-filter-actions button { /* Botones limpiar */

    height: 30px; /* Altura compacta */

    border-radius: 9px; /* Bordes suaves */

    border: none; /* Sin borde, estética nueva */

    background: #f4f8fe; /* Fondo claro */

    color: #8aa0ba; /* Texto gris azulado */

    font-size: 11px; /* Texto pequeño */

    font-weight: 900; /* Texto fuerte */

    text-transform: uppercase; /* Mayúsculas */

    cursor: pointer; /* Cursor de botón */
}

.column-filter-options { /* Lista de opciones */

    display: flex; /* Organiza opciones */

    flex-direction: column; /* Una debajo de otra */

    gap: 6px; /* Separación entre opciones */

    max-height: 210px; /* Altura máxima */

    overflow-y: auto; /* Scroll interno */
}

.column-filter-option { /* Cada opción con checkbox */

    display: flex; /* Coloca checkbox y texto */

    align-items: center; /* Centra verticalmente */

    gap: 8px; /* Separación */

    padding: 5px 3px; /* Espaciado */

    color: #26364a; /* Texto oscuro suave */

    font-size: 12px; /* Tamaño texto */

    font-weight: 900; /* Texto fuerte */

    cursor: pointer; /* Cursor interactivo */
}

.column-filter-option input { /* Checkbox */

    width: 16px; /* Ancho checkbox */

    height: 16px; /* Alto checkbox */

    padding: 0; /* Quita padding */

    margin: 0; /* Quita margen */
}

.column-filter-menu { /* Fuerza separación interna del desplegable */

    display: flex; /* Organiza buscador, botones y opciones en vertical */

    flex-direction: column; /* Coloca cada bloque uno debajo del otro */

    gap: 10px; /* Añade separación real entre buscador, botones y opciones */
}

.column-filter-menu.hidden { /* Mantiene oculto el desplegable cuando toca */

    display: none; /* Oculta el menú aunque tenga display flex */
}

.column-filter-search { /* Buscador del filtro */

    margin-bottom: 0 !important; /* Evita conflictos con márgenes anteriores */
}

.column-filter-actions { /* Zona de botones limpiar */

    margin-bottom: 0 !important; /* Evita conflictos con márgenes anteriores */
}

.column-filter-actions button { /* Botones limpiar del filtro con estilo activo */

    background: #edf4ff !important; /* Fondo azul claro activo */

    color: #2f5f9f !important; /* Texto azul más visible */

    border: none !important; /* Sin borde, estética nueva */

    opacity: 1 !important; /* Evita aspecto desactivado */

    cursor: pointer !important; /* Mantiene cursor de botón */
}

.column-filter-actions button:hover { /* Efecto al pasar el ratón */

    background: #dfeeff !important; /* Azul claro más intenso */

    border: none !important; /* Sin borde, estética nueva */

    color: #244f87 !important; /* Texto azul más oscuro */
}

.column-filter-btn:focus,
.column-filter-btn:focus-visible { /* Quita el borde negro al cerrar con ESC */

    outline: none !important; /* Elimina el contorno negro del navegador */

    box-shadow: none !important; /* Elimina cualquier sombra de foco */
}

.group-chart-header { /* Cabecera de evolución del grupo */

    align-items: flex-start; /* Alinea título y selector por arriba */
}

.group-sort-field { /* Selector de orden de evolución del grupo */

    width: 180px; /* Da ancho al selector */

    min-width: 180px; /* Evita que se comprima */
}

.group-sort-field select { /* Select de orden del grupo */

    height: 36px; /* Ajusta altura */

    font-size: 13px; /* Mantiene texto legible */
}

.group-sort-field { /* Coloca ORDENAR y el selector en la misma línea */

    display: flex; /* Organiza etiqueta y selector en horizontal */

    align-items: center; /* Centra verticalmente etiqueta y selector */

    gap: 8px; /* Separa ORDENAR del selector */

    width: auto; /* Permite que el conjunto se ajuste al contenido */

    min-width: 260px; /* Da espacio suficiente al conjunto */
}

.group-sort-field label { /* Ajusta la etiqueta ORDENAR */

    margin-bottom: 0; /* Quita el salto visual debajo del label */

    white-space: nowrap; /* Evita que ORDENAR salte de línea */
}

.group-sort-field select { /* Ajusta el selector */

    width: 180px; /* Mantiene ancho cómodo */

    height: 36px; /* Mantiene altura uniforme */
}

.bar-value { /* Nota superior de cada barra */

    height: 18px; /* Reserva siempre el mismo espacio para la nota */

    display: flex; /* Permite centrar el número */

    align-items: center; /* Centra verticalmente el número */

    justify-content: center; /* Centra horizontalmente el número */
}

.bar-label { /* Nombre inferior de cada alumno */

    height: 16px; /* Reserva siempre el mismo espacio para el nombre */

    line-height: 16px; /* Alinea el texto verticalmente */
}

.chart { /* Fuerza que todas las columnas de la gráfica usen la misma altura */

    align-items: stretch !important; /* Estira todas las columnas para que tengan la misma base */
}

.bar-wrap { /* Columna completa de cada alumno */

    height: auto !important; /* Evita conflicto con alturas anteriores */

    align-self: stretch !important; /* Hace que cada columna ocupe toda la altura disponible */

    display: grid !important; /* Divide nota, barra y nombre */

    grid-template-rows: 22px minmax(0, 1fr) 18px !important; /* Nota, zona barra y nombre */

    justify-items: center !important; /* Centra horizontalmente */
}

.bar-zone { /* Zona fija de la barra */

    width: 100% !important; /* Ocupa todo el ancho */

    height: 100% !important; /* Ocupa toda la zona central */

    display: flex !important; /* Permite apoyar la barra */

    align-items: flex-end !important; /* Apoya todas las barras en la misma línea */

    justify-content: center !important; /* Centra la barra */
}

.bar-value { /* Nota superior */

    margin: 0 !important; /* Elimina márgenes que desalinean */

    height: 22px !important; /* Altura fija */
}

.bar-label { /* Nombre inferior */

    margin: 0 !important; /* Elimina márgenes que desalinean */

    height: 18px !important; /* Altura fija */

    line-height: 18px !important; /* Centra texto */
}

.comment-write-card { /* Tarjeta derecha para escribir comentarios */

    flex: 0 0 210px; /* Da altura fija al bloque inferior derecho */

    min-height: 0; /* Permite que se ajuste dentro de la columna */

    display: flex; /* Organiza el contenido verticalmente */

    flex-direction: column; /* Coloca título, textarea y botón en columna */

    gap: 8px; /* Separa los elementos internos */

    background: var(--panel); /* Fondo blanco translúcido de tarjeta */

    border: 1px solid var(--border); /* Borde suave como el resto de boxes */

    border-radius: 18px; /* Bordes redondeados como el resto de boxes */

    padding: 12px; /* Espaciado interior de tarjeta */

    overflow: hidden; /* Evita desbordes */
}

.comment-write-field { /* Campo del comentario */

    flex: 1; /* Hace que el textarea ocupe el espacio disponible */

    min-height: 0; /* Evita que rompa el layout */
}

.comment-write-card textarea { /* Textarea del comentario en la columna derecha */

    height: 88px; /* Altura cómoda para escribir */

    min-height: 88px; /* Mantiene altura mínima */

    max-height: 88px; /* Evita que crezca demasiado */
}

.comment-write-card #btnSaveComment { /* Botón guardar comentario en la tarjeta derecha */

    margin-top: 0; /* Quita margen extra */

    width: 100%; /* Ocupa todo el ancho */

    flex-shrink: 0; /* Evita que se comprima */
}

.comment-write-card textarea { /* Ajusta separación del cuadro de comentario */

    margin-bottom: 8px; /* Separa el textarea del botón guardar */
}

.comment-write-card textarea { /* Ajusta la altura del cuadro de comentario */

    height: 98px; /* Altura intermedia */

    min-height: 98px; /* Mantiene la altura mínima */

    max-height: 98px; /* Evita que crezca más */
}

.student-follow-panel .card-header { /* Da más aire bajo el título principal */

    margin-bottom: 14px; /* Separa el título del selector de alumno */

    position: relative; /* Permite anclar el botón de ampliar en la esquina superior derecha de la tarjeta */
}

.student-chart-section { /* Da más aire antes de Evolución individual */

    margin-top: 8px; /* Separa la gráfica de los campos superiores */
}

.student-history-section { /* Da más aire antes del Histórico */

    margin-top: 8px; /* Separa histórico de la gráfica */
}

.student-chart-section { /* Separador superior de Evolución individual */

    border-top: 1px solid #d8e2ef; /* Línea gris clara separadora */

    padding-top: 10px; /* Separa el título de la línea */
}

.student-history-section { /* Separador superior de Histórico */

    border-top: 1px solid #d8e2ef; /* Línea gris clara separadora */

    padding-top: 6px; /* Separa el título de la línea */
}

.term-actions .field { /* Campo del selector de trimestre */

    width: 260px; /* Hace el selector más ancho para que el trimestre no salte de línea */

    max-width: 260px; /* Mantiene un ancho fijo más cómodo visualmente */
}

.term-actions #btnNewActivity { /* Botón nueva actividad */

    grid-column: 3; /* Coloca el botón hacia la derecha */
}

.term-actions #btnOpenWeights { /* Botón calcular nota final */

    grid-column: 4; /* Coloca el botón al extremo derecho */
}

.grades-table input[type="number"]::-webkit-outer-spin-button,
.grades-table input[type="number"]::-webkit-inner-spin-button { /* Quita las flechas de Chrome/Edge */

    -webkit-appearance: none; /* Oculta los controles de subir/bajar */

    margin: 0; /* Elimina margen del control */
}

.grades-table input[type="number"] { /* Quita las flechas de Firefox */

    appearance: textfield; /* Muestra el input como texto normal */

    -moz-appearance: textfield; /* Oculta los controles numéricos en Firefox */
}

.points-grade-cell { /* Celda para actividades puntuadas por partes */

    display: flex; /* Coloca input y total en horizontal */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra dentro de la celda */

    gap: 6px; /* Separa el input del total */
}

.points-grade-cell input { /* Input de puntos obtenidos */

    max-width: 70px; /* Hace el input más compacto */

    margin: 0; /* Evita márgenes heredados */
}

.points-grade-cell span { /* Texto /total */

    color: #52657d; /* Color gris azulado */

    font-size: 12px; /* Tamaño discreto */

    font-weight: 800; /* Hace visible el total */
}

.grades-table { /* Hace que todas las columnas quepan en el ancho visible */

    table-layout: fixed; /* Reparte el ancho disponible entre columnas */

    width: 100%; /* Ocupa todo el ancho del contenedor */
}

.grades-table input { /* Ajusta los inputs para que no fuercen scroll */

    width: 88%; /* Reduce el ancho dentro de cada celda */

    min-width: 0; /* Permite que el input se comprima */

    max-width: 110px; /* Evita inputs demasiado grandes */
}

.activity-header-cell { /* Permite que los títulos largos se adapten */

    gap: 6px; /* Reduce separación entre texto y botón */

    flex-wrap: nowrap; /* Mantiene texto y X en la misma línea */
}

.activity-header-cell span { /* Texto de actividad */

    overflow: hidden; /* Oculta exceso de texto */

    text-overflow: ellipsis; /* Añade puntos suspensivos */

    white-space: nowrap; /* Evita salto de línea */
}

.grades-table th { /* Hace que los títulos se adapten mejor */

    font-size: clamp(9px, 0.65vw, 12px); /* Reduce el texto si hay muchas columnas */

    padding: 6px 5px; /* Reduce espacio interno de cabecera */

    line-height: 1.1; /* Compacta la altura del texto */
}

.activity-header-cell span { /* Nombre de actividad en cabecera */

    font-size: clamp(9px, 0.65vw, 12px); /* Escala el texto del título */

    max-width: 100%; /* Evita que empuje el botón X */
}

.activity-delete-btn { /* Botón X de actividad más adaptable */

    width: clamp(26px, 2vw, 34px); /* Reduce el botón si hay muchas columnas */

    height: clamp(26px, 2vw, 34px); /* Reduce altura proporcional */

    font-size: clamp(15px, 1.3vw, 20px); /* Escala la X */
}

.activity-header-cell { /* Permite que el título completo de la actividad se vea */

    flex-wrap: wrap; /* Permite que el texto baje a otra línea */

    row-gap: 4px; /* Separa un poco las líneas */

    line-height: 1.1; /* Compacta el texto */
}

.activity-header-cell span { /* Texto del título de actividad */

    white-space: normal !important; /* Permite salto de línea */

    overflow: visible !important; /* Evita cortar el texto */

    text-overflow: unset !important; /* Quita los puntos suspensivos */

    word-break: normal; /* Mantiene palabras normales */

    overflow-wrap: anywhere; /* Permite cortar solo si no cabe */
}

.grades-table th { /* Cabeceras de tabla */

    height: auto; /* Permite crecer en altura */

    min-height: 46px; /* Mantiene altura mínima cómoda */
}

.activity-header-cell { /* Cabecera de actividad con título centrado real y botón X a la derecha */

    position: relative; /* Permite colocar la X sin afectar al centrado del título */

    display: flex !important; /* Centra el título de forma real */

    align-items: center; /* Centra verticalmente título y botón */

    justify-content: center; /* Centra el título respecto a toda la celda */

    min-height: 28px; /* Mantiene altura cómoda en cabecera */
}

.activity-header-cell span { /* Texto del título de actividad */

    text-align: center; /* Centra el título dentro de su espacio */

    white-space: normal !important; /* Permite que el título use dos líneas */

    overflow: visible !important; /* Evita cortar el texto */

    text-overflow: unset !important; /* Quita puntos suspensivos */

    line-height: 1.1; /* Compacta el texto */
}

.activity-delete-btn { /* Botón X de actividades colocado sin mover el título */

    width: 24px !important; /* Igual ancho que filtro */

    height: 24px !important; /* Igual alto que filtro */

    min-width: 24px !important; /* Evita que se comprima */

    border-radius: 8px !important; /* Igual redondeo que filtro */

    font-size: 15px !important; /* Ajusta tamaño de la X */

    position: absolute; /* Saca la X del cálculo de centrado del título */

    right: 4px; /* Coloca la X a la derecha de la celda */

    top: 50%; /* La sitúa a media altura */

    transform: translateY(-50%); /* Centra la X verticalmente */
}

.grades-table td { /* Hace más legible el contenido de la tabla */

    font-size: 14px; /* Aumenta el texto de las celdas */
}

.grades-table input { /* Hace más grandes los números de las notas */

    font-size: 15px; /* Aumenta el número dentro del input */

    font-weight: 700; /* Hace la nota más visible */
}

.points-grade-cell span { /* Hace más visible el /8 o /total */

    font-size: 14px; /* Aumenta el texto del total */

    font-weight: 900; /* Destaca el total */
}

.final-cell { /* Nota final del trimestre */

    font-size: 16px !important; /* Aumenta el tamaño de la nota final */

    font-weight: 900; /* Mantiene nota final destacada */

    border-radius: 10px; /* Suaviza visualmente el color */
}

.final-red { /* Nota final de 0 a menor de 5 */

    background: #ffe5e5; /* Fondo rojo suave */

    color: #b42318 !important; /* Texto rojo */
}

.final-orange { /* Nota final de 5 a menor de 7 */

    background: #fff0d6; /* Fondo naranja suave */

    color: #b65c00 !important; /* Texto naranja */
}

.final-yellow { /* Nota final de 7 a menor de 9 */

    background: #fff8c5; /* Fondo amarillo suave */

    color: #8a6a00 !important; /* Texto amarillo oscuro */
}

.final-green { /* Nota final de 9 a 10 */

    background: #dff7ea; /* Fondo verde suave */

    color: #087443 !important; /* Texto verde */
}

.final-empty { /* Sin nota final */

    background: transparent; /* Sin color si no hay nota */

    color: var(--muted) !important; /* Texto gris */
}

.final-cell { /* Nota final ocupando toda la celda */

    border-radius: 0 !important; /* Quita esquinas redondeadas */

    padding: 0 !important; /* Permite que el color llegue a toda la celda */

    vertical-align: middle; /* Centra el número verticalmente */
}

.final-red,
.final-orange,
.final-yellow,
.final-green,
.final-empty { /* Colores de nota final en celda completa */

    background-clip: border-box !important; /* Hace que el fondo ocupe toda la celda */
}

.grades-table input { /* Hace más compactos los cuadros de nota */

    width: 100% !important; /* Ocupa el ancho de la celda hasta el máximo, en vez de un ancho fijo que desborda columnas estrechas */

    max-width: 68px !important; /* Evita que vuelva a crecer */

    min-width: 0 !important; /* Permite que se encoja si la columna es más estrecha */

    box-sizing: border-box !important; /* Incluye el padding dentro de ese ancho */

    display: block !important; /* Hace que el margin:auto de otras reglas lo centre de verdad dentro de la celda */

    margin: 0 auto !important; /* Centra el cuadro de nota dentro de la celda */
}

.points-grade-cell input { /* Hace más compacto el input de puntos */

    width: 62px !important; /* Reduce el ancho para notas tipo /8 */

    max-width: 62px !important; /* Evita que se alargue */
}

.final-cell { /* Número de nota final más grande */

    font-size: 22px !important; /* Aumenta mucho la nota final */

    font-weight: 900 !important; /* Mantiene el número muy destacado */
}

#selectedStudentName { /* Nombre del alumno seleccionado */

    font-size: 15px; /* Hace el nombre un poco más grande */

    font-weight: 700; /* Hace el nombre más visible */
}

#classSelect { /* Selector de clase activa */

    font-size: 15px; /* Hace el nombre de la clase un poco más grande */

    font-weight: 700; /* Hace el texto más visible */
}

input,
select,
textarea { /* Centra visualmente el contenido de campos */

    line-height: normal; /* Evita desajustes verticales del navegador */
}

input,
select { /* Inputs y selectores */

    display: flex; /* Ayuda al centrado vertical */

    align-items: center; /* Centra verticalmente el contenido */
}

.grades-table input { /* Celdas donde se escriben notas */

    height: 36px !important; /* Altura uniforme */

    line-height: 36px !important; /* Centra el número verticalmente */

    padding-top: 0 !important; /* Evita desplazamiento hacia abajo */

    padding-bottom: 0 !important; /* Evita desplazamiento hacia arriba */
}

.student-dropdown-button { /* Selector personalizado de alumno */

    height: 38px; /* Mantiene altura uniforme */

    align-items: center; /* Centra el nombre verticalmente */
}

#classSelect,
#termSelect,
#studentSortSelect { /* Selectores principales */

    height: 38px; /* Altura uniforme */

    padding-top: 0; /* Ajusta centrado vertical */

    padding-bottom: 0; /* Ajusta centrado vertical */
}

.condition-cell,
.final-cell,
.grades-table td,
.grades-table th { /* Celdas de la tabla */

    vertical-align: middle !important; /* Centra contenido verticalmente */
}

#modalClose { /* Botón X de cerrar modal */

    border: 1px solid #f0b8b5 !important; /* Añade borde rojo suave como otros botones */

    background: transparent !important; /* Elimina el fondo rosado de la X del modal */

    color: #c5342d !important; /* X roja */
}

#modalClose:hover { /* Hover del botón cerrar modal */

    background: #ffe8e8 !important; /* Fondo rojo más visible al pasar el ratón */

    border-color: #de8f89 !important; /* Borde rojo más marcado */
}

.top-login-tools { /* Zona derecha de usuario dentro de la barra superior */
    position: static !important; /* Quita la posición absoluta para que respete el layout de la barra */
    top: auto !important; /* Anula la distancia superior antigua */
    right: auto !important; /* Anula la distancia derecha antigua */
    z-index: 3 !important; /* Mantiene el bloque por encima si hay solapes */
    padding-right: 16px !important; /* Separa el bloque de usuario del borde derecho de la barra */
    display: flex !important; /* Permite alinear la caja interior */
    align-items: center !important; /* Centra verticalmente el bloque interior */
    justify-content: flex-end !important; /* Mantiene el bloque hacia la derecha */
} /* Fin zona derecha de usuario */

.session-login-link,
.session-logout { /* Botones/enlaces de sesión */

    display: inline-flex; /* Permite centrar texto */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra horizontalmente */

    min-height: 34px; /* Altura cómoda */

    padding: 7px 13px; /* Espacio interior */

    border-radius: 14px; /* Bordes redondeados */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    background: #f4f8fe; /* Fondo azul claro */

    color: #2f5f9f; /* Texto azul */

    font-size: 12px; /* Tamaño de texto */

    font-weight: 900; /* Texto destacado */

    text-transform: uppercase; /* Mayúsculas */

    text-decoration: none; /* Sin subrayado */
}

.session-login-link:hover,
.session-logout:hover { /* Hover sesión */

    background: #e8f1ff; /* Fondo azul más visible */

    border-color: #a9c3e8; /* Borde más marcado */

    color: #234f86; /* Texto más intenso */
}

.session-box { /* Caja cuando hay usuario conectado */

    display: flex; /* Organiza nombre y cerrar sesión */

    flex-direction: column; /* Coloca nombre arriba y cerrar sesión abajo */

    align-items: flex-end; /* Alinea a la derecha */

    gap: 4px; /* Separa nombre y enlace */
}

.session-client { /* Nombre del usuario conectado */

    color: var(--text); /* Color principal */

    font-size: 13px; /* Tamaño del nombre */

    font-weight: 900; /* Nombre destacado */

    text-transform: uppercase; /* Nombre en mayúsculas */
}

.login-page { /* Página completa de login */

    min-height: 100vh; /* Ocupa toda la altura */

    display: grid; /* Permite centrar contenido */

    place-items: center; /* Centra horizontal y vertical */

    background: linear-gradient(180deg, var(--bg-2) 0%, var(--bg) 100%); /* Fondo igual a la app */

    overflow: auto; /* Permite scroll si hace falta */
}

.login-shell { /* Contenedor externo del login */

    width: 100%; /* Ocupa ancho completo */

    display: flex; /* Permite centrar */

    justify-content: center; /* Centra horizontalmente */

    padding: 20px; /* Espacio en pantallas pequeñas */
}

.login-card { /* Tarjeta del login */

    width: min(420px, 92vw); /* Ancho máximo adaptable */

    background: var(--panel); /* Fondo de tarjeta */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 22px; /* Bordes redondeados */

    padding: 26px; /* Espacio interior */

    box-shadow: none; /* Sin sombra */
}

.login-title { /* Título login */

    margin: 0; /* Sin margen superior */

    font-size: 26px; /* Tamaño título */

    font-weight: 900; /* Texto fuerte */

    text-transform: uppercase; /* Mayúsculas */

    color: var(--text); /* Color principal */
}

.login-subtitle { /* Subtítulo login */

    margin: 6px 0 18px 0; /* Separación */

    color: var(--muted); /* Color gris */

    font-size: 13px; /* Tamaño texto */
}

.login-form { /* Formulario login */

    display: grid; /* Campos uno debajo de otro */

    gap: 12px; /* Separación entre campos */
}

.login-error { /* Error de login */

    margin-bottom: 14px; /* Separación inferior */

    padding: 10px 12px; /* Espacio interior */

    border-radius: 12px; /* Bordes redondeados */

    background: #fff1f1; /* Fondo rojo suave */

    border: 1px solid #f0b8b5; /* Borde rojo suave */

    color: #b42318; /* Texto rojo */

    font-size: 13px; /* Tamaño texto */

    font-weight: 800; /* Texto visible */
}

.login-success { /* Aviso positivo en login (p.ej. código enviado), mismo formato que .login-error pero en verde */

    margin-bottom: 14px; /* Separación inferior */

    padding: 10px 12px; /* Espacio interior */

    border-radius: 12px; /* Bordes redondeados */

    background: #eefbf1; /* Fondo verde suave */

    border: 1px solid #a9dfb8; /* Borde verde suave */

    color: #1a7a35; /* Texto verde */

    font-size: 13px; /* Tamaño texto */

    font-weight: 800; /* Texto visible */
}

.login-back-link { /* Enlace volver */

    text-align: center; /* Centra texto */

    color: #2f5f9f; /* Azul suave */

    font-size: 12px; /* Tamaño pequeño */

    font-weight: 800; /* Texto fuerte */

    text-transform: uppercase; /* Mayúsculas */

    text-decoration: none; /* Sin subrayado */
}

.login-back-link:hover { /* Hover volver */

    text-decoration: underline; /* Subraya al pasar ratón */
}

.login-page { /* Página de login con fondo visible */

    background: transparent !important; /* Quita el fondo propio del login */

    position: relative; /* Permite crear fondo con pseudo-elemento */
}

.login-page::before { /* Fondo igual que la app detrás del login */

    content: ""; /* Crea una capa visual */

    position: fixed; /* Ocupa toda la pantalla */

    inset: 0; /* Ajusta a todos los bordes */

    background: linear-gradient(180deg, var(--bg-2) 0%, var(--bg) 100%); /* Fondo de la app */

    z-index: -1; /* Lo manda detrás de la tarjeta */
}

.login-card { /* Tarjeta de login transparente */

    background: rgba(255, 255, 255, 0.62) !important; /* Hace visible el fondo detrás */

    backdrop-filter: blur(12px); /* Difumina el fondo */

    -webkit-backdrop-filter: blur(12px); /* Compatibilidad */

    border: 1px solid rgba(211, 222, 236, 0.65) !important; /* Borde suave */
}

.login-page { /* Página de login sobre fondo de la app */

    background: transparent !important; /* Quita el fondo propio */

    overflow: hidden !important; /* Evita scroll */
}

.login-bg-frame { /* App visible detrás del login */

    position: fixed; /* Fija el fondo a pantalla completa */

    inset: 0; /* Ocupa toda la pantalla */

    width: 100vw; /* Ancho completo */

    height: 100vh; /* Alto completo */

    border: none; /* Quita borde del iframe */

    z-index: 0; /* Lo deja detrás */

    pointer-events: none; /* Evita poder clicar la app de fondo */

    filter: blur(2px); /* Difumina ligeramente la app */
}

.login-shell { /* Contenedor del login por encima del fondo */

    position: relative; /* Permite subirlo sobre el iframe */

    z-index: 2; /* Lo pone por encima de la app */
}

.login-card { /* Tarjeta transparente */

    background: rgba(255, 255, 255, 0.86) !important; /* Hace la tarjeta menos transparente */

    backdrop-filter: blur(14px); /* Efecto cristal */

    -webkit-backdrop-filter: blur(14px); /* Compatibilidad */

    border: 1px solid rgba(211, 222, 236, 0.70) !important; /* Borde suave */
}

html.login-page,
body.login-page { /* Permite hacer scroll si la tarjeta (por ejemplo, el formulario de crear usuari) no cabe entera en pantallas pequeñas o portátiles con poca altura. */
    height: auto !important; /* Anula la altura fija del 100% heredada de la regla general: con altura fija, el contenido que sobra quedaba encerrado dentro de body en vez de hacer crecer la página y poder desplazarla con scroll normal. */
    min-height: 100% !important; /* Mantiene la pantalla completa cubierta cuando el contenido cabe sin problema. */
    overflow-y: auto !important; /* Anula el overflow:hidden global, pensado para la app principal, que aquí bloqueaba ver el contenido que no cabía. */
    overflow-x: hidden !important; /* Mantiene bloqueado el scroll horizontal. */
}

body.login-page .login-card { /* Fuerza que la tarjeta de login sea menos transparente */

    background: rgba(255, 255, 255, 0.92) !important; /* Hace la tarjeta mucho menos transparente */

    backdrop-filter: blur(8px) !important; /* Reduce el efecto cristal */

    -webkit-backdrop-filter: blur(8px) !important; /* Compatibilidad */
}

body.login-page .login-bg-frame { /* Suaviza la app que se ve detrás */

    opacity: 0.55 !important; /* Hace que el fondo moleste menos */
}

.session-logout { /* Botón cerrar sesión en rojo suave */

    background: #fff5f5 !important; /* Fondo rojo claro */

    color: #c5342d !important; /* Texto rojo */

    border: 1px solid #f0b8b5 !important; /* Borde rojo suave */
}

.session-logout:hover { /* Hover cerrar sesión */

    background: #ffe8e8 !important; /* Fondo rojo más visible */

    border-color: #de8f89 !important; /* Borde rojo más marcado */

    color: #a61f1a !important; /* Texto rojo más intenso */
}

.session-logout { /* Botón cerrar sesión con la misma altura que guardar e importar */

    min-height: 28px !important; /* Iguala la altura mínima a los botones de guardar e importar */

    height: 28px !important; /* Fuerza la misma altura visual que los botones de icono */

    padding: 7px 13px !important; /* Mantiene un espacio interior equilibrado */

    border-radius: 14px !important; /* Iguala el redondeo al resto de botones superiores */

    font-size: 11px !important; /* Mantiene el texto compacto para que quepa bien */

    display: inline-flex !important; /* Permite centrar el texto vertical y horizontalmente */

    align-items: center !important; /* Centra el texto verticalmente */

    justify-content: center !important; /* Centra el texto horizontalmente */
}

.compact-hero h1 { /* Baja solo el título principal */

    top: 12px !important; /* Mueve CONTROL VALVE un poco hacia abajo sin tocar nada más */
}

.masked-password { /* Hace que un input de texto se vea como contraseña */

    -webkit-text-security: disc; /* Oculta los caracteres como puntos en Chrome/Edge */

    text-security: disc; /* Compatibilidad adicional */
}

.bulk-students-table { /* Contenedor de la tabla tipo Excel para añadir alumnos */
    display: grid; /* Organiza cabecera y filas en vertical */
    gap: 0; /* Quita separación entre filas para parecer tabla */
    border: 1px solid #e9edf4; /* Usa un borde más suave */
    border-radius: 8px; /* Unifica el redondeo con el resto de la app */
    overflow: hidden; /* Recorta bordes internos */
    background: #ffffff; /* Mantiene fondo limpio */
} /* Fin tabla alumnado */

.bulk-students-header { /* Cabecera de la tabla de alumnos */
    display: grid; /* Divide la cabecera en columnas */
    grid-template-columns: 1fr 1fr; /* Crea dos columnas iguales */
    padding-right: 15px; /* Reserva el mismo espacio que ocupa la barra de scroll */
    background: #f8fafc; /* Fondo más limpio y menos azulado */
    border-bottom: 1px solid #e9edf4; /* Línea inferior suave */
    color: #172334; /* Texto principal */
    font-size: 11px; /* Cabecera más compacta */
    font-weight: 700; /* Reduce la negrita */
    text-transform: uppercase; /* Mantiene mayúsculas */
} /* Fin cabecera tabla alumnado */

.bulk-students-header div { /* Celda de cabecera */
    padding: 8px 10px; /* Espaciado interior más compacto */
    border-right: 1px solid #e9edf4; /* Separador vertical más suave */
} /* Fin celda cabecera */

.bulk-students-header div:last-child { /* Última celda de cabecera */

    border-right: none; /* Quita separador final */
}

.bulk-students-row { /* Fila editable de alumno */
    display: grid; /* Divide la fila en columnas */
    grid-template-columns: 1fr 1fr; /* Crea columna nombre y condición */
    border-bottom: 1px solid #e9edf4; /* Línea inferior más suave */
} /* Fin fila alumnado */

.bulk-students-row:last-child { /* Última fila */

    border-bottom: none; /* Quita línea inferior final */
}

.bulk-students-row input { /* Inputs de la tabla */
    border: none; /* Quita borde individual */
    border-radius: 0; /* Quita esquinas individuales */
    height: 34px; /* Hace las filas un poco más compactas */
    font-size: 13px; /* Mantiene texto legible */
    font-weight: 500; /* Reduce peso visual */
    padding: 0 10px; /* Espaciado lateral */
    background: white; /* Fondo blanco */
} /* Fin inputs tabla */

.bulk-students-row input:first-child { /* Primera columna de cada fila */
    border-right: 1px solid #e9edf4; /* Separador vertical más suave */
} /* Fin separador columnas */

.bulk-students-row input:focus { /* Campo activo */

    outline: 2px solid var(--primary); /* Marca azul el campo seleccionado */

    outline-offset: -2px; /* Mete el borde azul dentro de la celda */
}

.modal-card { /* Permite que los desplegables del modal salgan sin cortarse */

    max-height: 94vh; /* Mantiene el modal alto en pantalla */

    width: min(620px, 94vw); /* Mantiene la anchura amplia del modal */

    overflow: visible !important; /* Permite que el desplegable se vea fuera del modal */
}

.bulk-students-rows { /* Contenedor scrollable de filas de alumnado */

    max-height: 62vh; /* Permite ver muchas filas sin que el modal se salga */

    overflow-y: auto; /* Activa scroll vertical dentro de la tabla */

    overflow-x: hidden; /* Evita scroll horizontal innecesario */
}

.bulk-students-table { /* Ajusta la tabla masiva de alumnado */

    max-height: 68vh; /* Limita la altura total de la tabla */

    overflow: hidden; /* Mantiene las esquinas redondeadas limpias */
}

#classSelect,
#termSelect,
#studentSortSelect { /* Mantiene visibles los selectores nativos mientras ajustamos los personalizados */

    display: none !important; /* Vuelve a mostrar los selectores originales */
}

.pretty-select { /* Contenedor general del selector bonito */

    position: relative; /* Permite colocar el menú desplegable debajo */

    width: 100%; /* Ocupa todo el ancho disponible */
}

.pretty-select-button { /* Botón visible del selector bonito */

    width: 100%; /* Ocupa todo el ancho */

    height: 38px; /* Igual altura que el selector de alumno */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 12px; /* Bordes redondeados */

    background: white; /* Fondo blanco */

    padding: 0 12px; /* Espacio lateral */

    display: flex; /* Organiza texto y flecha */

    align-items: center; /* Centra verticalmente */

    justify-content: space-between; /* Separa texto y flecha */

    font-size: 15px; /* Texto más visible */

    font-weight: 700; /* Hace el valor seleccionado más claro */

    color: var(--text); /* Color principal */

    cursor: pointer; /* Muestra cursor de botón */
}

.pretty-select-button:focus,
.pretty-select-button:focus-visible,
.pretty-select-button:active { /* Es un <button>, así que al pulsarlo el navegador le añadía su contorno azul de foco por defecto; el borde no debe cambiar al abrirlo */
    outline: none !important;
    border-color: var(--border) !important;
    box-shadow: none !important;
}

.pretty-select-arrow { /* Flecha del selector bonito */

    font-size: 12px; /* Tamaño de la flecha */

    color: var(--text); /* Color de la flecha */
}

.pretty-select-menu { /* Menú desplegable personalizado */

    position: absolute; /* Coloca el menú flotando debajo */

    top: calc(100% + 6px); /* Separa el menú del botón */

    left: 0; /* Alinea a la izquierda */

    right: 0; /* Ocupa el mismo ancho */

    z-index: 80; /* Lo pone por encima de tarjetas y tabla */

    background: white; /* Fondo blanco */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 14px; /* Bordes redondeados */

    box-shadow: 0 18px 35px rgba(15, 23, 42, .18); /* Sombra igual al selector de alumno */

    padding: 8px; /* Espacio interno */
}

.pretty-select-menu.pretty-select-menu-upward { /* Variante que abre hacia arriba cuando no cabe por debajo */

    top: auto; /* Anula la posición desde arriba */

    bottom: calc(100% + 6px); /* Ancla el menú justo encima del botón */
}

.pretty-select-search { /* Buscador interno del desplegable */

    width: 100%; /* Ocupa todo el ancho */

    height: 36px; /* Altura compacta */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 10px; /* Bordes redondeados */

    padding: 0 10px; /* Espacio lateral */

    margin-bottom: 8px; /* Separa buscador de opciones */

    font-size: 13px; /* Tamaño de texto */
}

.pretty-select-options { /* Contenedor de opciones */

    max-height: 180px; /* Limita altura del listado */

    overflow-y: auto; /* Permite scroll si hay muchas opciones */

    display: flex; /* Organiza opciones */

    flex-direction: column; /* Una opción debajo de otra */

    gap: 4px; /* Separación entre opciones */
}

.pretty-select-option { /* Botón de cada opción */

    width: 100%; /* Ocupa todo el ancho */

    border: none; /* Sin borde */

    background: transparent; /* Fondo transparente */

    text-align: left; /* Texto alineado a la izquierda */

    padding: 9px 10px; /* Espacio interno */

    border-radius: 10px; /* Bordes suaves */

    cursor: pointer; /* Cursor interactivo */

    font-size: 13px; /* Tamaño de texto */

    color: var(--text); /* Color principal */

    display: flex; /* Centra el texto verticalmente dentro del sombreado, en vez de depender del line-height por defecto del botón */

    align-items: center; /* Centrado vertical real */
}

.pretty-select-option:hover { /* Opción al pasar el ratón */

    background: #eef5ff; /* Fondo azul suave */
}

.pretty-select-group { /* Envoltorio plegable de cada clase con sus asignaturas */

    display: flex; /* Apila título y asignaturas */

    flex-direction: column; /* Título arriba, asignaturas debajo */
}

.pretty-select-group-label { /* Título de grupo (nombre de la clase) dentro del selector combinado, pulsable para plegar/desplegar */

    width: 100%; /* Ocupa todo el ancho */

    border: none; /* Sin borde */

    background: transparent; /* Fondo transparente */

    text-align: left; /* Texto alineado a la izquierda */

    padding: 9px 10px; /* Espacio interno, igual que las opciones */

    border-radius: 10px; /* Bordes suaves, igual que las opciones */

    font-size: 13px; /* Mismo tamaño que las asignaturas, para que destaque como cabecera visual */

    font-weight: 700; /* Algo más de peso para diferenciarlo de las asignaturas */

    color: #8f9bb0; /* Tono más claro que el texto normal, sin competir con las asignaturas */

    cursor: pointer; /* Indica que se puede pulsar para plegar/desplegar */
}

.pretty-select-group-label:hover { /* Título de grupo al pasar el ratón */

    background: #f2f5fa; /* Fondo gris muy suave */
}

.pretty-select-group-options { /* Asignaturas de la clase, ocultas mientras el grupo está plegado */

    display: none; /* Oculto por defecto */

    flex-direction: column; /* Una asignatura debajo de otra */

    gap: 4px; /* Separación entre asignaturas */
}

.pretty-select-group-expanded .pretty-select-group-options { /* Asignaturas visibles cuando el grupo está desplegado */

    display: flex; /* Muestra la lista de asignaturas */
}

.pretty-select-suboption { /* Opción de asignatura dentro del grupo de su classe */

    padding-left: 18px; /* Sangría para mostrar que pertenece al grupo de arriba */
}

#newActivityType { /* Selector del tipo de calificación en el modal de nueva actividad */

    height: 40px; /* Da un poco más de altura para que el texto no se corte */

    line-height: 40px; /* Centra verticalmente el texto del selector */

    padding-top: 0; /* Evita que el texto baje demasiado */

    padding-bottom: 0; /* Evita que el texto se corte por abajo */
}

.modal-pretty-select { /* Contenedor del selector bonito dentro de modales */

    position: relative; /* Permite que el menú se coloque debajo del botón */

    width: 100%; /* Ocupa todo el ancho del modal */
}

.modal-pretty-select .student-dropdown-menu { /* Menú bonito dentro del modal */

    z-index: 10000; /* Asegura que el menú aparezca por encima del modal */
}

#newActivityTypeMenu { /* Menú del selector bonito de tipo de actividad */

    position: absolute; /* Coloca el menú flotando sobre el contenido */

    top: calc(100% + 6px); /* Sitúa el menú justo debajo del botón */

    left: 0; /* Alinea el menú con el botón */

    right: 0; /* Mantiene el mismo ancho del botón */

    max-height: none; /* Evita que el menú se corte por altura */

    overflow: visible; /* Muestra todas las opciones */
}

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button { /* Quita las flechas de subir y bajar en Chrome, Edge y Safari */

    -webkit-appearance: none; /* Oculta los controles internos del input numérico */

    margin: 0; /* Elimina el espacio reservado para las flechas */
}

input[type="number"] { /* Quita las flechas de subir y bajar en Firefox */

    appearance: textfield; /* Hace que el campo numérico se vea como campo de texto */

    -moz-appearance: textfield; /* Oculta los controles numéricos en Firefox */
}

.column-filter-menu { /* Ajusta el ancho interno del desplegable de filtros */

    width: 300px; /* Da más espacio para que buscador y botones respiren */
}

.column-filter-search { /* Fuerza el buscador del filtro a ocupar todo el ancho */

    width: 100% !important; /* Hace que mida lo mismo que la fila de botones */

    display: block !important; /* Evita que se quede con tamaño automático */

    text-align: left !important; /* Alinea el texto a la izquierda */

    padding: 0 12px !important; /* Da aire interior al texto */
}

.column-filter-menu .column-filter-search { /* Fuerza el buscador dentro del menú de filtro */

    display: block !important; /* Anula el display flex heredado de los inputs */

    width: calc(100% - 0px) !important; /* Ocupa todo el ancho interno del menú */

    max-width: none !important; /* Evita que otro estilo limite el ancho */

    min-width: 0 !important; /* Permite que use el ancho disponible */

    box-sizing: border-box !important; /* Incluye padding y borde dentro del ancho */

    text-align: left !important; /* Alinea el texto a la izquierda */
}

.column-filter-option input[type="checkbox"] { /* Reduce los cuadros de selección múltiple del filtro */

    width: 18px !important; /* Hace el checkbox más pequeño */

    height: 18px !important; /* Hace el checkbox más pequeño en altura */

    min-width: 18px !important; /* Evita que se deforme */

    padding: 0 !important; /* Quita espacio interno innecesario */

    display: inline-block !important; /* La checkbox está dentro de un <th> de .grades-table, así que hereda "display:block; margin:0 auto" pensado para los inputs de nota; eso convertía el margen automático en un hueco enorme que empujaba el texto hacia la derecha */

    margin: 0 !important; /* Anula ese margin:0 auto heredado */

    flex-shrink: 0 !important; /* Evita que el checkbox se comprima dentro de la fila flex */
}

#prettySortSelect .pretty-select-button { /* Hace menos pesada la letra del selector ordenar */

    font-weight: 700 !important; /* Reduce la negrita del texto seleccionado */
}

.sort-field-header #prettySortSelect .pretty-select-button { /* Ajusta el selector bonito de ordenar */

    font-size: 14px !important; /* Hace el texto más pequeño */

    font-weight: 700 !important; /* Reduce la negrita */

    line-height: 1.1 !important; /* Evita que el texto ocupe demasiada altura */
	
	border-radius: 8px !important; /* Reduce el redondeo del selector ORDENAR para igualarlo al resto de la aplicación */
}

input,
select,
textarea { /* Ajusta la alineación vertical de los controles nativos */

    line-height: normal; /* Evita que el texto quede desplazado */

    vertical-align: middle; /* Centra el contenido verticalmente */
}

.pretty-select-button,
.student-dropdown-button { /* Ajusta los selectores personalizados */

    display: flex; /* Permite centrar el contenido */

    align-items: center; /* Centra verticalmente texto y flecha */
}

.column-filter-search { /* Ajusta el buscador de filtros */

    line-height: normal; /* Evita que el placeholder quede alto o bajo */
}

.sort-field-header #prettySortSelect .pretty-select-button { /* Centra verticalmente el texto del selector ordenar */

    height: 38px !important; /* Mantiene altura uniforme */

    min-height: 38px !important; /* Evita que se comprima */

    padding-top: 0 !important; /* Quita desplazamiento superior */

    padding-bottom: 0 !important; /* Quita desplazamiento inferior */

    align-items: center !important; /* Centra texto y flecha verticalmente */
}

.sort-field-header #prettySortSelect .pretty-select-button span:first-child { /* Ajusta solo el texto seleccionado */

    display: flex; /* Permite centrar el texto */

    align-items: center; /* Centra verticalmente */

    height: 100%; /* Ocupa toda la altura del botón */
}

.sort-field-header #prettySortSelect .pretty-select-button span:first-child { /* Corrige la altura visual del texto de Ordenar */

    position: relative; /* Permite mover solo el texto sin tocar el botón */

    top: 2px; /* Baja ligeramente el texto para centrarlo */
}

.student-edit-top-btn { /* Botón editar alumno dentro de la fila superior */

    width: 38px !important; /* Igual ancho que la X del alumno */

    height: 38px !important; /* Igual alto que la X del alumno */

    min-width: 38px !important; /* Evita que se agrande */

    align-self: end; /* Lo alinea con el selector y la condición */
}

.student-delete-top-btn { /* Botón borrar alumno dentro de la fila superior */

    align-self: end; /* Lo mantiene en la misma línea que editar */
}

.student-select-field,
.student-condition-field { /* Permite que los campos se estrechen dentro del grid */

    min-width: 0; /* Evita que empujen los botones a otra línea */
}

.student-top-row { /* Fila correcta de alumno, condición y botones */

    display: flex !important; /* Coloca todos los elementos en una única fila */

    align-items: flex-end !important; /* Alinea todo por la parte inferior */

    gap: 8px !important; /* Deja separación pequeña entre elementos */

    flex-wrap: nowrap !important; /* Evita que la X baje a otra línea */
}

.student-select-field { /* Campo selector de alumno */

    flex: 1 1 42% !important; /* Ocupa espacio flexible pero permite estrecharse */

    min-width: 0 !important; /* Evita que empuje los botones */
}

.student-condition-field { /* Campo condición */

    flex: 1 1 34% !important; /* Ocupa menos que el selector de alumno */

    min-width: 0 !important; /* Evita que empuje los botones */
}

.student-edit-top-btn,
.student-delete-top-btn { /* Botones editar y borrar alumno */

    width: 38px !important; /* Igual ancho que la X */

    height: 38px !important; /* Igual altura que la X */

    min-width: 38px !important; /* Evita que se compriman */

    flex: 0 0 38px !important; /* Reserva exactamente su espacio en la fila */
}

.term-select-edit-row { /* Fila que contiene selector de trimestre y botón editar */

    display: flex; /* Coloca selector y botón editar en horizontal */

    align-items: flex-end; /* Alinea selector y botón por abajo */

    gap: 8px; /* Separa selector y botón */
}

.term-select-box { /* Caja del selector de trimestre */

    flex: 1 1 auto; /* Permite que el selector ocupe el espacio disponible */

    min-width: 0; /* Evita que empuje el botón fuera */
}

.term-edit-btn { /* Botón editar trimestre */

    width: 38px !important; /* Igual ancho que otros botones pequeños */

    height: 38px !important; /* Igual altura que otros botones pequeños */

    min-width: 38px !important; /* Evita que se comprima */

    flex: 0 0 38px; /* Reserva espacio fijo para el botón */
}

.activity-edit-btn { /* Botón editar actividad con estética azul como los demás */

    width: 24px !important; /* Igual ancho que la X */

    height: 24px !important; /* Igual alto que la X */

    min-width: 24px !important; /* Evita que se comprima */

    border: 1px solid #bfdbfe !important; /* Borde azul suave */

    border-radius: 8px !important; /* Bordes suaves */

    background: #eff6ff !important; /* Fondo azul claro */

    color: #1f5aa6 !important; /* Icono azul */

    font-size: 13px !important; /* Tamaño del icono */

    font-weight: 900 !important; /* Hace el icono más visible */

    display: flex !important; /* Permite centrar el icono */

    align-items: center !important; /* Centra verticalmente */

    justify-content: center !important; /* Centra horizontalmente */

    padding: 0 !important; /* Elimina desplazamientos internos */

    line-height: 1 !important; /* Evita que el icono se descentre */

    position: absolute; /* Lo saca del cálculo de centrado */

    right: 34px; /* Lo coloca antes de la X */

    top: 50%; /* Lo sitúa a media altura */

    transform: translateY(-50%); /* Lo centra verticalmente */
}

.comment-actions { /* Contenedor de botones editar y borrar comentario */

    display: flex; /* Coloca los botones en horizontal */

    gap: 8px; /* Separa editar y borrar */

    align-items: center; /* Centra verticalmente los botones */
}

.comment-edit-btn { /* Botón editar comentario con estética azul */

    width: 28px !important; /* Ancho del botón editar */

    height: 28px !important; /* Alto del botón editar */

    min-width: 28px !important; /* Evita que se comprima */

    border: 1px solid #bfdbfe !important; /* Borde azul suave */

    border-radius: 6px !important; /* Bordes redondeados */

    background: #eff6ff !important; /* Fondo azul claro */

    color: #1f5aa6 !important; /* Icono azul */

    font-size: 13px !important; /* Tamaño del icono */

    font-weight: 900 !important; /* Hace el icono visible */

    display: flex !important; /* Permite centrar el icono */

    align-items: center !important; /* Centra verticalmente */

    justify-content: center !important; /* Centra horizontalmente */

    padding: 0 !important; /* Evita desplazamientos internos */

    line-height: 1 !important; /* Evita descentrado del icono */
}

.activity-edit-btn,
.comment-edit-btn { /* Muestra la manita al pasar por botones de editar */

    cursor: pointer !important; /* Indica que el botón es clicable */
}

button,
.btn,
.icon-btn,
.pretty-select-button,
.student-dropdown-button,
.column-filter-btn,
.activity-edit-btn,
.activity-delete-btn,
.comment-edit-btn,
.comment-delete-btn { /* Suaviza cambios de tono sin cambiar tamaño */

    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; /* Solo anima colores */
}

button:hover,
.btn:hover,
.icon-btn:hover,
.pretty-select-button:hover,
.student-dropdown-button:hover,
.column-filter-btn:hover,
.activity-edit-btn:hover,
.comment-edit-btn:hover { /* Cambia el tono de botones normales al pasar el ratón */

    background: #e8f1ff !important; /* Cambia a azul claro */

    border-color: #a9c3e8 !important; /* Refuerza el borde azul */

    color: #234f86 !important; /* Refuerza el icono o texto */

    box-shadow: none !important; /* Evita sombras */

    transform: none !important; /* Evita que el botón crezca */
}

.activity-delete-btn:hover,
.comment-delete-btn:hover,
.danger-icon-btn:hover,
.agenda-delete-btn:hover,
#modalClose:hover { /* Cambia el tono de botones rojos sin agrandarlos */

    background: #ffe8e8 !important; /* Cambia a rojo claro */

    border-color: #de8f89 !important; /* Refuerza el borde rojo */

    color: #a61f1a !important; /* Refuerza la X roja */

    box-shadow: none !important; /* Evita sombras */

    transform: none !important; /* Evita que el botón crezca */
}

.activity-edit-btn:hover,
.activity-delete-btn:hover { /* Mantiene quietos los botones de actividad al pasar el ratón */

    transform: translateY(-50%) !important; /* Conserva el centrado vertical absoluto */

    box-shadow: none !important; /* Evita sombra */

    cursor: pointer !important; /* Mantiene la manita */
}

.student-history-section .section-title-row { /* Separa el título Historial de comentarios de la lista */

    margin-bottom: 8px; /* Deja la misma distancia visual que Evolució individual con su gráfico */
}

.term-delete-btn { /* Botón eliminar trimestre */

    width: 38px !important; /* Igual ancho que editar trimestre */

    height: 38px !important; /* Igual alto que editar trimestre */

    min-width: 38px !important; /* Evita que se comprima */

    flex: 0 0 38px; /* Reserva su espacio en la fila */
}

.danger-confirm-btn { /* Botón rojo de confirmación dentro del modal */

    background: #fff5f5 !important; /* Fondo rojo claro */

    color: #c5342d !important; /* Texto rojo */

    border: 1px solid #f0b8b5 !important; /* Borde rojo suave */
}

.danger-confirm-btn:hover { /* Hover del botón rojo de confirmación */

    background: #ffe8e8 !important; /* Fondo rojo más intenso */

    border-color: #de8f89 !important; /* Borde rojo más marcado */

    color: #a61f1a !important; /* Texto rojo más oscuro */
}

.session-client { /* Nombre del usuario conectado */

    font-size: 16px !important; /* Hace el nombre más grande */

    line-height: 1.1; /* Mantiene el texto compacto */
}

.session-client { /* Nombre del usuario conectado */

    color: #26364a !important; /* Usa un azul grisáceo más suave que el negro */
}

.main-title,
.app-title,
.header-title,
header h1 { /* Título CUADERN DOCENT */

    color: #26364a !important; /* Mismo tono que el nombre del usuario */
}

:root { /* Color principal de texto de la aplicación */

    --app-text-color: #26364a; /* Azul grisáceo suave */
}

body,
h1,
h2,
h3,
h4,
h5,
h6,
label,
th,
td,
span,
p,
div,
input,
textarea,
select,
option { /* Texto general de la aplicación */

    color: var(--app-text-color); /* Sustituye los negros por el nuevo tono */
}

input::placeholder,
textarea::placeholder { /* Texto de ejemplo */

    color: #7b8794 !important; /* Gris suave para ejemplos */
}

.student-delete-top-btn,
.term-delete-btn { /* Iguala visualmente las X de alumno y trimestre */

    width: 38px !important; /* Mismo ancho */

    height: 38px !important; /* Misma altura */

    min-width: 38px !important; /* Evita que se comprima */

    font-size: 22px !important; /* Igual tamaño de la X */

    line-height: 1 !important; /* Centra mejor la X */
}

.session-backup { /* Botón copia de seguridad */

    display: inline-flex; /* Centra el texto */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra horizontalmente */

    min-height: 26px; /* Misma altura que cerrar sesión */

    padding: 4px 9px; /* Espacio interior compacto */

    border-radius: 10px; /* Bordes redondeados */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    background: #f4f8fe; /* Fondo azul claro */

    color: #2f5f9f !important; /* Texto azul */

    font-size: 10px; /* Texto pequeño */

    font-weight: 900; /* Texto destacado */

    text-transform: uppercase; /* Mayúsculas */

    text-decoration: none; /* Quita subrayado */
}

.session-backup:hover { /* Hover del botón copia */

    background: #e8f1ff !important; /* Fondo azul más marcado */

    border-color: #a9c3e8 !important; /* Borde azul más visible */

    color: #234f86 !important; /* Texto azul más oscuro */
}

.backup-file-input { /* Oculta el input nativo de archivo */

    display: none; /* Elimina el botón feo del navegador */
}

.backup-file-label { /* Botón bonito para seleccionar archivo */

    display: inline-flex; /* Permite centrar el texto */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra horizontalmente */

    min-height: 34px; /* Altura cómoda */

    padding: 7px 12px; /* Espacio interno */

    border-radius: 8px !important; /* Reduce el redondeo del botón Seleccionar fitxer para igualarlo al resto de la aplicación */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    background: #f4f8fe; /* Fondo azul claro */

    color: #2f5f9f !important; /* Texto azul */

    font-size: 12px; /* Tamaño texto */

    font-weight: 900; /* Texto destacado */

    text-transform: uppercase; /* Mayúsculas */

    cursor: pointer; /* Muestra mano */

    margin-right: 10px; /* Separa del nombre del archivo */
}

.backup-file-label:hover { /* Hover del botón seleccionar archivo */

    background: #e8f1ff !important; /* Oscurece tono azul */

    border-color: #a9c3e8 !important; /* Marca borde */

    color: #234f86 !important; /* Texto más oscuro */
}

.backup-file-name { /* Texto con nombre del archivo */

    color: #607086; /* Gris suave */

    font-size: 12px; /* Tamaño discreto */

    font-weight: 700; /* Hace el texto legible */
}

#backupFileInput { /* Selector real de archivo de copia */

    margin-top: 6px; /* Baja ligeramente la zona del archivo */
}

.backup-file-label { /* Botón seleccionar fitxer */

    margin-top: 10px; /* Deja más distancia respecto al título FITXER JSON */

    margin-right: 12px; /* Separa más el botón del texto del archivo */
}

#modalBody .field label { /* Etiquetas dentro del modal */

    margin-bottom: 14px; /* Baja más el contenido respecto al título FITXER JSON */
}

#backupFileInput + .backup-file-label { /* Botón seleccionar fitxer dentro del modal de importar */

    margin-top: 14px; /* Mantiene el botón más abajo */
}

#backupFileInput { /* Input real oculto de importar copia */

    margin-top: 14px; /* Baja toda la fila del selector */
}

#backupFileInput ~ .backup-file-name { /* Texto del archivo seleccionado */

    margin-top: 14px; /* Alinea el texto con el botón */
}

.backup-import-field { /* Campo Fitxer JSON del modal importar */

    margin-top: 18px !important; /* Mantiene separación con el aviso superior */

    display: block !important; /* Evita separaciones automáticas del layout */
}

.backup-import-field label { /* Texto FITXER JSON */

    margin-bottom: 7px !important; /* Acerca mucho el botón al título */
}

.backup-file-label { /* Botón seleccionar fitxer */

    margin-top: 0 !important; /* Elimina separación superior del botón */
}

.backup-icon-btn { /* Botones icono de copia/importación */

    width: 32px !important; /* Define ancho compacto */

    height: 28px !important; /* Define alto compacto */

    min-width: 32px !important; /* Evita que se comprima */

    padding: 0 !important; /* Quita espacio interno de texto */

    font-size: 16px !important; /* Tamaño del icono */

    line-height: 1 !important; /* Centra mejor el icono */

    display: inline-flex !important; /* Permite centrar */

    align-items: center !important; /* Centra verticalmente */

    justify-content: center !important; /* Centra horizontalmente */

    text-decoration: none !important; /* Quita subrayado del enlace */
}

.session-box { /* Caja superior derecha con nombre arriba y botones abajo */

    display: grid !important; /* Permite separar nombre y botones por filas */

    grid-template-columns: auto auto auto !important; /* Tres botones en la fila inferior */

    grid-template-rows: auto auto !important; /* Primera fila nombre, segunda fila botones */

    align-items: center !important; /* Centra verticalmente */

    justify-content: end !important; /* Alinea todo a la derecha */

    gap: 6px 8px !important; /* Separa filas y columnas */
}

.session-client { /* Nombre del usuario conectado */

    grid-column: 1 / -1 !important; /* Hace que el nombre ocupe toda la primera fila */

    justify-self: end !important; /* Alinea el nombre a la derecha */

    margin-right: 0 !important; /* Quita margen lateral */
}

#btnImportBackup,
.backup-icon-btn { /* Botones de copia e importar */

    cursor: pointer !important; /* Muestra la mano al pasar el cursor */
}

.backup-icon-btn { /* Centra los iconos de copia e importar */

    display: inline-flex !important; /* Permite centrar el contenido */

    align-items: center !important; /* Centra verticalmente */

    justify-content: center !important; /* Centra horizontalmente */

    padding: 0 !important; /* Evita desplazamiento interno */

    line-height: 1 !important; /* Evita que el emoji se desplace */
}

.backup-icon-btn { /* Igual tono visual en guardar e importar */

    background: transparent !important; /* Elimina el fondo azul claro del botón */

    border-color: #c9d8ee !important; /* Mantiene el borde azul suave */

    color: #2f5f9f !important; /* Mantiene el color base */

}

.backup-icon-btn,
#btnImportBackup { /* Iguala guardar copia e importar copia */

    background: transparent !important; /* Hace el fondo transparente en ambos botones */

    border: 1px solid #c9d8ee !important; /* Mantiene el borde azul suave */

    color: #2f5f9f !important; /* Mantiene el color base del icono */

    cursor: pointer !important; /* Mantiene la mano al pasar el cursor */

}

.backup-icon-btn:hover,
#btnImportBackup:hover { /* Hover igual para ambos botones */

    background: #e8f1ff !important; /* Mismo azul al pasar el ratón */

    border-color: #a9c3e8 !important; /* Mismo borde al pasar el ratón */

    color: #234f86 !important; /* Mismo color al pasar el ratón */
}

.activity-header-cell { /* Contenedor del título y botones de cada actividad */

    min-height: 42px !important; /* Da altura suficiente para colocar editar arriba y borrar abajo */

    padding-right: 24px !important; /* Reserva espacio a la derecha para los botones */

    position: relative !important; /* Permite colocar los botones dentro de la cabecera */
}

.activity-header-cell span { /* Texto del nombre de la actividad */

    padding-right: 0 !important; /* Elimina el espacio anterior que ya no necesitamos */

    max-width: calc(100% - 4px) !important; /* Evita que el texto ocupe más de su zona */

    font-size: 10px !important; /* Reduce un poco el texto cuando hay muchas actividades */

    line-height: 1.1 !important; /* Compacta el texto en varias líneas */
}

.activity-edit-btn { /* Botón editar actividad */

    width: 18px !important; /* Hace el botón de editar más pequeño */

    height: 18px !important; /* Hace el botón de editar más bajo */

    min-width: 18px !important; /* Evita que el botón se deforme */

    border-radius: 6px !important; /* Redondea suavemente el botón */

    font-size: 11px !important; /* Reduce el icono del lápiz */

    position: absolute !important; /* Coloca el botón dentro de la cabecera */

    right: 3px !important; /* Lo pega a la derecha */

    top: 3px !important; /* Lo coloca en la esquina superior derecha */
}

.activity-delete-btn { /* Botón borrar actividad */

    width: 18px !important; /* Hace el botón de borrar más pequeño */

    height: 18px !important; /* Hace el botón de borrar más bajo */

    min-width: 18px !important; /* Evita que el botón se deforme */

    border-radius: 6px !important; /* Redondea suavemente el botón */

    font-size: 12px !important; /* Reduce el tamaño de la X */

    position: absolute !important; /* Coloca el botón dentro de la cabecera */

    right: 3px !important; /* Lo pega a la derecha */

    top: auto !important; /* Anula la posición vertical anterior */

    bottom: 3px !important; /* Lo coloca en la esquina inferior derecha */

    transform: none !important; /* Elimina el centrado vertical anterior */
}

.activity-header-cell { /* Contenedor del encabezado de cada actividad */

    position: relative !important; /* Permite colocar los botones dentro del encabezado */

    height: 36px !important; /* Mantiene el encabezado compacto */

    min-height: 36px !important; /* Evita que el encabezado crezca hacia abajo */

    padding: 0 24px 0 6px !important; /* Reserva espacio a la derecha para los botones */

    display: flex !important; /* Permite centrar el título correctamente */

    align-items: center !important; /* Centra el título verticalmente */

    justify-content: center !important; /* Centra el título horizontalmente */

    overflow: hidden !important; /* Evita que el contenido se salga del encabezado */
}

.activity-header-cell span { /* Texto del título de la actividad */

    display: block !important; /* Trata el título como un bloque controlable */

    width: 100% !important; /* Permite que el título use el ancho disponible */

    padding: 0 !important; /* Elimina rellenos anteriores que descentraban el texto */

    white-space: nowrap !important; /* Impide que el título salte a dos líneas */

    overflow: hidden !important; /* Oculta el texto que no quepa */

    text-overflow: ellipsis !important; /* Añade puntos suspensivos si el título es muy largo */

    text-align: center !important; /* Centra el texto horizontalmente */

    line-height: 36px !important; /* Centra el texto verticalmente dentro del encabezado */
}

.activity-edit-btn { /* Botón editar actividad */

    position: absolute !important; /* Coloca el botón sin mover el título */

    top: 9px !important; /* Coloca el lápiz en la esquina superior derecha */

    right: 0px !important; /* Pega el lápiz a la derecha */

    width: 18px !important; /* Reduce el ancho del botón */

    height: 18px !important; /* Reduce la altura del botón */

    min-width: 18px !important; /* Evita que el botón se deforme */

    padding: 0 !important; /* Elimina relleno interior */

    font-size: 11px !important; /* Reduce el tamaño del icono */

    line-height: 18px !important; /* Centra el icono verticalmente */

    border-radius: 5px !important; /* Redondea el botón */
}

.activity-delete-btn { /* Botón borrar actividad */

    position: absolute !important; /* Coloca el botón sin mover el título */

    top: auto !important; /* Anula posiciones superiores anteriores */

    bottom: 0px !important; /* Coloca la X en la esquina inferior derecha */

    right: 0px !important; /* Pega la X a la derecha */

    width: 18px !important; /* Reduce el ancho del botón */

    height: 18px !important; /* Reduce la altura del botón */

    min-width: 18px !important; /* Evita que el botón se deforme */

    padding: 0 !important; /* Elimina relleno interior */

    font-size: 14px !important; /* Reduce el tamaño de la X */

    line-height: 18px !important; /* Centra la X verticalmente */

    border-radius: 5px !important; /* Redondea el botón */

    transform: none !important; /* Elimina centrados verticales anteriores */
}

.activity-delete-btn:hover { /* Evita que la X de borrar actividad se mueva al pasar el ratón */

    transform: none !important; /* Anula el zoom heredado del hover rojo */

    background: #ffe8e8 !important; /* Mantiene el cambio de color al pasar el ratón */

    border-color: #de8f89 !important; /* Mantiene el borde rojo más marcado al pasar el ratón */
}

.activity-header-cell span { /* Texto del título de cada actividad */

    font-size: 12px !important; /* Iguala el tamaño al texto de ALUMNO/A y CONDICIÓN */

    font-weight: 900 !important; /* Iguala el grosor al texto de ALUMNO/A y CONDICIÓN */

    color: var(--text) !important; /* Usa el mismo color principal que las otras cabeceras */

    text-transform: uppercase !important; /* Mantiene el mismo estilo en mayúsculas */

    letter-spacing: 0 !important; /* Evita separación extra entre letras */

    white-space: nowrap !important; /* Evita que el título salte a dos líneas */
}

.activity-header-cell { /* Contenedor del encabezado de cada actividad */

    position: relative !important; /* Permite colocar los botones sin afectar al título */

    display: flex !important; /* Mantiene el título centrado con flexbox */

    align-items: center !important; /* Centra el título verticalmente */

    justify-content: center !important; /* Centra el título horizontalmente respecto a toda la celda */

    padding: 0 !important; /* Quita el espacio lateral que desplazaba el texto */

    height: 36px !important; /* Mantiene la altura compacta del encabezado */

    min-height: 36px !important; /* Evita que el encabezado crezca */
}

.activity-header-cell span { /* Texto del título de la actividad */

    position: absolute !important; /* Saca el texto del flujo para centrarlo respecto a toda la celda */

    left: 50% !important; /* Coloca el centro del texto en el centro de la celda */

    top: 50% !important; /* Coloca el texto en el centro vertical de la celda */

    transform: translate(-50%, -50%) !important; /* Centra exactamente el texto horizontal y verticalmente */

    max-width: calc(100% - 44px) !important; /* Evita que el texto se meta debajo de los botones */

    white-space: nowrap !important; /* Impide que el texto salte a dos líneas */

    overflow: hidden !important; /* Oculta el texto si no cabe */

    text-overflow: ellipsis !important; /* Añade puntos suspensivos si el título es demasiado largo */

    text-align: center !important; /* Centra el texto dentro de su propio ancho */

    line-height: 1 !important; /* Evita desajustes verticales */
}

.student-full-bar { /* Barra azul de la nota individual */

    background: #c7dcff !important; /* Usa un azul muy claro y elegante */

    border: 1px solid #a9c8f5 !important; /* Añade un borde azul suave para definir mejor la barra */

    border-bottom: none !important; /* Quita el borde inferior para que apoye limpia sobre el eje */

    border-radius: 12px 12px 0 0 !important; /* Mantiene redondeada solo la parte superior */

    opacity: 1 !important; /* Mantiene el color claro pero bien visible */
}

.student-full-average { /* Línea verde de la mediana del grupo */

    background: #0f9f73 !important; /* Usa un verde limpio y moderno */

    height: 3px !important; /* Mantiene una línea fina y elegante */

    opacity: 0.95 !important; /* Suaviza ligeramente la línea */
}

.full-legend-bar { /* Icono azul de la leyenda */

    background: #f7faff !important; /* Fondo blanco azulado muy sutil */

    border: 1px solid #a9c8f5 !important; /* Iguala el borde de la leyenda al de las barras */
}

.student-full-average { /* Línea verde de la mediana del grupo */

    background: #22a06b !important; /* Verde tipo Notion/Airtable */

    height: 2px !important; /* Más fina */

    border-radius: 999px !important; /* Extremos redondeados */

    opacity: 0.85 !important; /* Más discreta */
}

.full-legend-average { /* Icono de la leyenda de la mediana */

    background: #22a06b !important; /* Mismo verde que la línea */
}

.full-legend-line { /* Línea verde de la mediana en la leyenda */

    width: 34px !important; /* Mantiene la longitud de la línea en la leyenda */

    height: 2px !important; /* Iguala la altura a la línea real de la mediana */

    background: #22a06b !important; /* Usa el mismo verde que la mediana del gráfico */

    border-radius: 999px !important; /* Redondea los extremos de la línea */

    opacity: 0.85 !important; /* Iguala la suavidad visual de la línea real */

    display: inline-block !important; /* Permite aplicar bien ancho y alto */

    flex-shrink: 0 !important; /* Evita que la línea se comprima dentro de la leyenda */
}

.activity-header-cell span { /* Texto del título de cada actividad */

    color: #26364a !important; /* Usa un negro azulado más suave que el negro puro */
}

.history-title-actions { /* Grupo del título Historial de comentarios y el botón Generar informe */

    display: flex; /* Coloca el título y el botón en horizontal */

    align-items: center; /* Centra verticalmente el título y el botón */

    gap: 10px; /* Añade separación entre título y botón */
}

.btn-report { /* Botó Generar informe */

    min-height: 30px; /* Fa que el botó tingui una altura còmoda */

    padding: 6px 12px; /* Dona més aire al text del botó */

    border-radius: 10px; /* Arrodoneix les cantonades */

    border: 1px solid #c9d8ee; /* Afegeix una vora blava suau */

    background: #f4f8fe; /* Aplica un fons blau molt clar */

    color: #2f5f9f; /* Aplica color blau al text */

    font-size: 12px; /* Fa el text una mica més gran */

    font-weight: 700; /* Redueix la negreta perquè sigui més elegant */

    text-transform: none; /* Manté el text en format normal */

    cursor: pointer; /* Mostra el cursor de botó */
}

.btn-report:hover { /* Efecto del botón Generar informe al pasar el ratón */

    background: #e8f1ff; /* Hace el fondo un poco más azul */

    border-color: #a9c3e8; /* Marca más el borde */

    color: #234f86; /* Oscurece ligeramente el texto */
}

.report-box { /* Simula una hoja A4 dentro del modal */

    width: 100%; /* Ocupa todo el ancho disponible */

    min-height: 720px; /* Da sensación de documento real */

    max-height: 75vh; /* Evita que se salga de la pantalla */

    overflow-y: auto; /* Permite desplazarse por informes largos */

    background: #ffffff; /* Fondo blanco tipo documento */

    border: 1px solid #d9e2ef; /* Borde muy suave */

    border-radius: 8px; /* Menos redondeado, más profesional */

    padding: 48px 56px; /* Márgenes amplios tipo Word */

    box-shadow: inset 0 0 0 1px #f5f7fb; /* Da sensación de hoja física */
}

.report-box pre { /* Contenido del informe */

    margin: 0; /* Elimina márgenes extra */

    white-space: pre-wrap; /* Mantiene saltos de línea */

    font-family: "Calibri", "Segoe UI", Arial, sans-serif; /* Estilo documento moderno */

    font-size: 15px; /* Tamaño cómodo para lectura */

    line-height: 1.75; /* Espaciado profesional */

    color: #172334; /* Color principal */

    text-align: justify; /* Aspecto de informe real */

    word-break: normal; /* Evita cortes raros */
}

.print-report { /* Contenidor que s'utilitza només per imprimir */
    padding: 0 !important; /* Elimina el espacio extra superior */
    margin: 0 !important; /* Elimina márgenes extra */
    color: #172334; /* Manté el color principal */
    font-family: Arial, sans-serif; /* Usa una font segura per imprimir */
} /* Fin estilos impresión */

.print-report pre { /* Text imprimible de l'informe */

    white-space: pre-wrap; /* Manté salts de línia i adapta el text */

    font-family: Arial, sans-serif; /* Usa font segura per PDF */

    font-size: 14px; /* Manté mida llegible */

    line-height: 1.55; /* Millora la lectura */
}

.loading-overlay { /* Crea una capa encima de toda la app mientras se genera el informe */
    position: fixed; /* Fija la capa a la pantalla aunque haya scroll */
    inset: 0; /* Hace que la capa ocupe toda la pantalla */
    background: rgba(255, 255, 255, 0.75); /* Añade fondo blanco semitransparente */
    backdrop-filter: blur(3px); /* Difumina ligeramente la app de detrás */
    display: flex; /* Permite centrar la rueda y el texto */
    flex-direction: column; /* Coloca la rueda encima y el texto debajo */
    align-items: center; /* Centra horizontalmente el contenido */
    justify-content: center; /* Centra verticalmente el contenido */
    gap: 18px; /* Deja espacio entre la rueda y el texto */
    z-index: 99999; /* Coloca el loader por encima de todo */
}

.loading-overlay.hidden { /* Define cómo se oculta el loader */
    display: none; /* Oculta completamente la capa */
}

.loading-spinner { /* Crea la rueda de carga */
    width: 62px; /* Define el ancho de la rueda */
    height: 62px; /* Define el alto de la rueda */
    border: 6px solid #dbe7f7; /* Crea el círculo base azul claro */
    border-top-color: #8fb3ea; /* Pinta una parte más oscura para ver el giro */
    border-radius: 50%; /* Convierte el cuadrado en círculo */
    animation: spin 0.8s linear infinite; /* Hace que la rueda gire sin parar */
}

.loading-text { /* Estilo del texto de carga */
    font-size: 14px; /* Define el tamaño del texto */
    font-weight: 900; /* Hace el texto grueso */
    color: #234f86; /* Aplica color azul al texto */
    text-transform: uppercase; /* Convierte el texto en mayúsculas */
    letter-spacing: .04em; /* Separa un poco las letras */
}

@keyframes spin { /* Define la animación de giro */
    to { /* Marca el final de la animación */
        transform: rotate(360deg); /* Hace que la rueda dé una vuelta completa */
    }
}

.box-loading-overlay { /* Capa de càrrega local sobre una caixa concreta (no tota la pantalla) mentre es crea un grup, alumne, trimestre, activitat, objectiu o comentari nou */
    position: absolute !important; /* Es col·loca respecte a la caixa que la conté, no respecte a tota la pantalla */
    inset: 0 !important; /* Cobreix tota la caixa */
    background: rgba(255, 255, 255, .6) !important; /* Fons blanc semitransparent, com el del login: es continua veient el contingut ja existent */
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    z-index: 20 !important; /* Per sobre del contingut de la caixa, però no de modals ni menús */
    border-radius: inherit !important; /* Respecta les cantonades arrodonides de la caixa que la conté */
}

#appModuleTabs .box-loading-overlay { /* Versió més suau de la capa de càrrega per a la barra de pestanyes: sense roda, així que un fons tan opac es notava massa fort */
    background: rgba(255, 255, 255, .35) !important;
}

.box-loading-spinner { /* Roda de càrrega petita per a les capes locals; reutilitza l'animació @keyframes spin ja existent */
    width: 32px !important;
    height: 32px !important;
    border: 4px solid #dbe7f7 !important;
    border-top-color: #8fb3ea !important;
    border-radius: 50% !important;
    animation: spin 0.8s linear infinite !important;
}

#classActiveSlot, #studentTopRow, #termSelectField, #gradeTableWrap, #studentObjectives, #commentHistory, #studentChartWrap, #editClassSubjectRows, #newGroupColumns, #appModuleTabs { /* Caixes on pot aparèixer la roda de càrrega local: necessiten position:relative perquè la capa es col·loqui just a sobre seu */
    position: relative !important;
}

.editable-report-textarea { /* Área editable principal del informe tipo Word */

    width: 100%; /* Hace que ocupe todo el ancho del editor */

    flex: 1; /* Hace que ocupe toda la altura disponible */

    min-height: 0; /* Permite que el contenedor se adapte correctamente */

    resize: none; /* Evita que el usuario rompa el diseño arrastrando */

    border: none !important; /* Elimina el marco interior pequeño azul */

    border-radius: 0 !important; /* Quita esquinas redondeadas internas */

    padding: 42px 44px; /* Añade márgenes internos tipo hoja Word */

    background: #ffffff; /* Fondo blanco del documento */

    color: var(--text); /* Usa el color principal del texto */

    font-size: 16px; /* Hace el texto más cómodo de leer */

    line-height: 1.8; /* Separa más las líneas como en Word */

    font-family: Inter, system-ui, sans-serif; /* Usa la misma fuente elegante de la app */

    outline: none; /* Elimina borde azul del navegador */

    overflow-y: auto; /* Permite scroll vertical dentro del documento */

    box-shadow: none !important; /* Elimina cualquier sombra interior */

    white-space: pre-wrap; /* Mantiene saltos de línea del informe */

    background-clip: padding-box; /* Evita efectos raros en bordes */

    height: 100%; /* Hace que el editor ocupe todo el alto disponible */
}

.editable-report-textarea:focus { /* Estilo al editar el informe */

    border: none !important; /* Evita que aparezca borde azul */

    outline: none !important; /* Evita outline azul del navegador */

    box-shadow: none !important; /* Elimina brillo azul al hacer clic */
}

.report-editor-box { /* Caja exterior completa del editor */

    width: 100%; /* Hace que ocupe todo el ancho disponible */

    height: 68vh; /* Define una altura fija tipo documento */

    border: 1px solid #d7e2f0; /* Añade borde exterior elegante */

    border-radius: 16px; /* Redondea esquinas exteriores */

    background: #ffffff; /* Fondo blanco */

    overflow: hidden; /* Evita que el contenido sobresalga */

    display: flex; /* Permite organizar barra y editor */

    flex-direction: column; /* Coloca la barra arriba y el texto debajo */
}

.report-toolbar { /* Barra superior estilo Word */

    height: 58px; /* Define altura fija de la barra */

    border-bottom: 1px solid #d7e2f0; /* Añade línea separadora inferior */

    display: flex; /* Organiza botones horizontalmente */

    align-items: center; /* Centra verticalmente */

    gap: 8px; /* Separa los botones */

    padding: 0 18px; /* Añade margen lateral */

    background: #ffffff; /* Fondo blanco */

    flex-shrink: 0; /* Evita que la barra se comprima */
}

.report-toolbar button { /* Botones decorativos */

    width: 34px; /* Define ancho */

    height: 34px; /* Define alto */

    border: 1px solid #d7e2f0; /* Añade borde suave */

    border-radius: 8px; /* Redondea botones */

    background: #f8fafc; /* Fondo gris muy claro */

    color: #172334; /* Color oscuro */

    font-size: 18px; /* Tamaño iconos */

    font-weight: 900; /* Hace visibles los iconos */

    cursor: pointer; /* Indica que son botones activos */
}

.toolbar-separator { /* Separador vertical */

    width: 1px; /* Grosor línea */

    height: 28px; /* Altura línea */

    background: #d7e2f0; /* Color gris azulado */
}

.toolbar-label { /* Texto Párrafo */

    font-size: 16px; /* Tamaño texto */

    font-weight: 600; /* Peso medio */

    color: #172334; /* Color principal */
}

.toolbar-arrow { /* Flecha decorativa */

    font-size: 16px; /* Tamaño flecha */

    color: #172334; /* Color principal */
}

.modal-card { /* Caja general del modal */

    max-height: 92vh !important; /* Evita que el modal se salga de pantalla */

    overflow: hidden !important; /* Evita scroll externo raro */

    display: flex !important; /* Permite ordenar contenido */

    flex-direction: column !important; /* Coloca contenido verticalmente */
}

#modalBody { /* Contenedor interno del modal */

    display: flex; /* Permite controlar editor y botones */

    flex-direction: column; /* Coloca editor arriba y botones abajo */

    flex: 1; /* Ocupa todo el espacio disponible */

    min-height: 0; /* Evita errores de altura */

    overflow: hidden; /* Evita que el modal entero haga scroll raro */
}

#modalBody .modal-actions { /* Zona botones inferiores */

    flex-shrink: 0; /* Evita que desaparezcan */

    margin-top: 18px; /* Separa botones del editor */
}

.report-box { /* Caja del informe dentro del modal */

    height: auto !important; /* Evita que cree una caja gigante */

    min-height: 0 !important; /* Elimina alturas mínimas antiguas */

    padding: 0 !important; /* Quita espacios interiores excesivos */

    border: none !important; /* Quita el marco exterior extra */

    overflow: visible !important; /* Permite que se vean editor y botones */
}

.report-editor-box { /* Caja exterior completa del editor */

    width: 100%; /* Hace que ocupe todo el ancho disponible */

    height: 68vh; /* Define una altura fija tipo documento */

    border: 1px solid #d7e2f0; /* Añade borde exterior elegante */

    border-radius: 16px; /* Redondea esquinas exteriores */

    background: #ffffff; /* Fondo blanco */

    overflow: hidden; /* Evita que el contenido sobresalga */

    display: flex; /* Permite organizar barra y editor */

    flex-direction: column; /* Coloca la barra arriba y el texto debajo */

    flex: 1; /* Hace que el editor ocupe correctamente el espacio disponible */

    min-height: 0; /* Permite que el scroll interno funcione bien */
}

.editable-report-textarea { /* Zona editable del informe */

    width: 100%; /* Ocupa todo el ancho */

    min-height: 56vh !important; /* Hace que el documento tenga una altura grande tipo Word */

    padding: 32px 42px !important; /* Da márgenes interiores tipo documento */

    border: none !important; /* Elimina el marco interior */

    resize: none !important; /* Evita redimensionar manualmente */

    overflow-y: auto !important; /* Activa scroll vertical dentro del informe cuando el texto es largo */

    font-size: 16px !important; /* Hace el texto cómodo de leer */

    line-height: 1.7 !important; /* Mejora separación entre líneas */

    box-shadow: none !important; /* Elimina brillo azul */

    display: block; /* Hace que se comporte como documento normal */

    background: #ffffff; /* Fondo blanco */

    color: var(--text); /* Usa color principal del texto */

    outline: none !important; /* Elimina borde azul navegador */

    font-family: Inter, system-ui, sans-serif; /* Usa fuente elegante */
}

#modalBody .modal-actions { /* Botones inferiores del informe */

    display: flex !important; /* Muestra los botones en fila */

    justify-content: flex-end !important; /* Los coloca a la derecha */

    gap: 12px !important; /* Espacio entre botones */

    margin-top: 16px !important; /* Separación respecto al editor */

    padding-bottom: 0 !important; /* Evita que se bajen demasiado */

    flex-shrink: 0 !important; /* Impide que desaparezcan */
}

.grades-table th { /* Cabeceras de la tabla de notas */

    font-size: 15px; /* Mantiene tamaño correcto */

    font-weight: 900; /* Recupera grosor original */
}

.grades-table th { /* Cabeceras generales de la tabla */

    font-size: 12px !important; /* Iguala todas las cabeceras */

    font-weight: 900 !important; /* Mantiene negrita uniforme */

    text-align: center !important; /* Centra el texto */
}

.editable-report-textarea { /* Editor del informe */

    -webkit-user-modify: read-write; /* Evita comportamientos raros del editor en Chrome */

    spellcheck: false; /* Intenta desactivar corrector ortográfico */

    text-align: justify !important; /* El informe queda justificado por defecto */
}

.modal-card.report-modal-card { /* Modal especial solo para el informe */

    max-width: 1100px !important; /* Mantiene el informe ancho tipo documento */

	width: min(1100px, 95vw) !important; /* Aprovecha el ancho solo en informes */
}

.grades-table td:nth-child(2) { /* Columna CONDICIÓN */

    font-weight: 700 !important; /* Iguala la negrita al nombre del alumno */
}

.final-header-cell { /* Permite colocar el botón de ampliar dentro de la cabecera Final */
    position: relative; /* Hace que el botón se posicione respecto a esta celda */
} /* Fin del estilo de la cabecera Final */

.expand-table-btn { /* Botón para ampliar la tabla de notas */
    position: absolute; /* Coloca el botón en una esquina de la celda */
    top: 5px; /* Lo separa ligeramente de la parte superior */
    right: 5px; /* Lo separa ligeramente de la parte derecha */
    width: 24px; /* Define el ancho del botón */
    height: 24px; /* Define el alto del botón */
    border-radius: 8px; /* Redondea las esquinas del botón */
    border: 1px solid #c9d8ee; /* Aplica un borde azul suave */
    background: #f4f8fe; /* Aplica fondo azul claro */
    color: #2f5f9f; /* Aplica color azul al icono */
    font-size: 14px; /* Define el tamaño del icono */
    font-weight: 900; /* Hace el icono más grueso */
    cursor: pointer; /* Muestra cursor de botón */
} /* Fin del botón de ampliar */

.expand-table-btn:hover { /* Estilo al pasar el ratón por encima */
    background: #e8f1ff; /* Intensifica suavemente el fondo azul */
    border-color: #a9c3e8; /* Intensifica suavemente el borde */
} /* Fin del hover del botón */

.modal-card.expanded-table-modal-card:not(.expanded-student-follow-modal-card) { /* Modal ampliado de la taula de notes (comparte clase con el seguiment ampliat, así que se excluye aquí para no afectarlo) */
    width: 96vw !important; /* Hace que el modal ocupe casi todo el ancho */
    max-width: 96vw !important; /* Evita que el máximo anterior limite el ancho */
    height: auto !important; /* Se ajusta al alumnado real en vez de ocupar siempre el alto máximo */
    max-height: 92vh !important; /* Pero nunca más alto que la pantalla; con muchos alumnos aparece scroll interno */
    display: flex; /* Permite organizar el título y la tabla en vertical */
    flex-direction: column; /* Coloca la cabecera arriba y la tabla debajo */
} /* Fin del tamaño del modal ampliado de notas */

.modal-card.expanded-student-follow-modal-card { /* Modal de seguiment ampliat: mantiene su tamaño de siempre, sin el auto-ajuste de la taula de notes */
    width: 96vw !important; /* Igual que antes */
    max-width: 96vw !important; /* Igual que antes */
    height: 92vh !important; /* Igual que antes: siempre ocupa casi toda la pantalla */
    max-height: 92vh !important; /* Igual que antes */
    display: flex; /* Igual que antes */
    flex-direction: column; /* Igual que antes */
} /* Fin del tamaño del modal de seguiment ampliat */

.modal-card.admin-panel-modal-card { /* Panel de administración: mismo tamaño ampliado que el seguiment de l'alumne */
    width: 96vw !important;
    max-width: 96vw !important;
    height: 92vh !important;
    max-height: 92vh !important;
    display: flex;
    flex-direction: column;
}

.admin-panel-total { /* Contador de usuarios junto al título del panel */
    color: var(--muted);
    font-size: 14px;
    font-weight: 600;
    margin-left: 10px;
}

.admin-panel-table-wrap { /* Contenedor con scroll horizontal si la tabla no cabe */
    overflow: auto;
    flex: 1 1 auto;
    min-height: 0;
}

table.admin-panel-table { /* Tabla del panel de administración */
    width: 100%;
    border-collapse: collapse;
    min-width: 760px;
}

.admin-panel-table th { /* Cabecera de columnas */
    text-align: left;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: var(--muted);
    font-weight: 700;
    padding: 12px 14px;
    border-bottom: 1px solid var(--border);
    position: sticky;
    top: 0;
    background: var(--panel);
}

.admin-panel-table td {
    padding: 12px 14px;
    font-size: 14px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

.admin-panel-table tr:last-child td {
    border-bottom: none;
}

.admin-panel-table tr:hover td {
    background: var(--bg-2);
}

.admin-panel-name {
    font-weight: 700;
}

.admin-panel-muted {
    color: var(--muted);
    font-size: 13px;
}

.admin-panel-badge {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    white-space: nowrap;
}

.admin-panel-badge-trial { background: #eef5ff; color: #245a9f; }

.admin-panel-badge-active { background: rgba(17, 150, 105, 0.12); color: #119669; }

.admin-panel-badge-free_forever { background: #f4efff; color: #6a4bb8; }

.admin-panel-badge-canceled { background: #fff1f1; color: #b42318; }

.admin-panel-count {
    font-variant-numeric: tabular-nums;
}

.admin-panel-empty {
    text-align: center;
    color: var(--muted);
    padding: 40px 0;
}

.modal-card.expanded-chart-modal-card { /* Modal exclusivo de la gràfica d'evolució individual (botón ⤢ del propio gràfic): misma altura fija que el seguiment ampliat, no solo la del contingut */
    width: 96vw !important; /* Igual de ancho que la taula de notes ampliada */
    max-width: 96vw !important; /* Evita que el máximo anterior limite el ancho */
    height: 92vh !important; /* Igual que .expanded-student-follow-modal-card, en vez de ajustarse solo al alto de la gràfica */
    max-height: 92vh !important; /* Pero nunca más alto que la pantalla */
    display: flex; /* Permite organizar el título y la gràfica en vertical */
    flex-direction: column; /* Coloca la cabecera arriba y la gràfica debajo */
} /* Fin del tamaño del modal exclusivo de la gràfica */

.expanded-grade-table-wrap { /* Contenedor de la tabla ampliada */
    flex: 1; /* Hace que la tabla ocupe todo el espacio disponible */
    min-height: 0; /* Permite que el scroll interno funcione bien */
    overflow: auto; /* Activa scroll dentro del modal si la tabla no cabe */
    border: 1px solid var(--border); /* Añade borde igual que la tabla original */
    border-radius: 14px; /* Redondea el contenedor de la tabla */
} /* Fin del contenedor de tabla ampliada */

.expanded-grade-tools { /* Barra superior de controles dentro del modal ampliado */
    display: grid; /* Organiza los controles en una fila ordenada */
    grid-template-columns: 40px 240px 40px 40px 1fr max-content max-content 220px; /* Añade espacio flexible para empujar botones a la derecha */
    gap: 10px; /* Añade separación entre controles */
    align-items: end; /* Alinea botones y selectores por la parte inferior */
    margin-bottom: 12px; /* Separa los controles de la tabla */
    flex-shrink: 0; /* Evita que la barra superior se comprima */
} /* Fin de la barra superior ampliada */

.expanded-term-control { /* Bloque del selector de trimestre ampliado */
    min-width: 0; /* Evita desbordamientos del selector */
} /* Fin del bloque trimestre ampliado */

.expanded-sort-control { /* Bloque del selector ordenar ampliado */
    min-width: 0; /* Evita desbordamientos del selector */
} /* Fin del bloque ordenar ampliado */

.expanded-grade-tools label { /* Etiquetas de los controles ampliados */
    margin-bottom: 4px; /* Mantiene separación entre etiqueta y campo */
} /* Fin de etiquetas ampliadas */

.expanded-grade-tools select { /* Selectores dentro del modal ampliado */
    height: 38px; /* Igual altura que los selectores normales */
} /* Fin de selectores ampliados */

.expanded-grade-tools .btn { /* Botones dentro del modal ampliado */
    height: 38px; /* Igual altura que los campos */
    white-space: nowrap; /* Evita que el texto del botón salte de línea */
} /* Fin de botones ampliados */

.expanded-term-icon-btn { /* Botones pequeños de trimestre dentro del modal ampliado */
    width: 38px; /* Define el ancho igual que los botones normales */
    height: 38px; /* Define el alto igual que los campos */
    min-height: 38px; /* Evita que el botón se comprima */
    align-self: end; /* Alinea el botón con la parte baja del selector */
    border-radius: 12px; /* Mantiene esquinas suaves */
    font-size: 20px; /* Ajusta el tamaño del símbolo */
} /* Fin de los botones de trimestre ampliados */

.sub-modal { /* Capa oscura del subbox encima del box gigante */
    position: fixed; /* Coloca el subbox fijo sobre toda la pantalla */
    inset: 0; /* Ocupa toda la pantalla */
    display: grid; /* Permite centrar el subbox */
    place-items: center; /* Centra el subbox */
    background: rgba(15, 23, 42, 0.28); /* Oscurece suavemente el box gigante */
    z-index: 10000; /* Coloca el subbox por encima del modal grande */
} /* Fin de la capa del subbox */

.sub-modal-card { /* Tarjeta del subbox */
    width: min(760px, 92vw) !important; /* Mantiene tamaño normal */
    max-width: 760px !important; /* Evita que herede el tamaño gigante */
    height: auto !important; /* Mantiene altura natural */
    max-height: 86vh !important; /* Limita altura máxima */
    overflow-y: auto; /* Permite scroll si hace falta */
    background: white; /* Mantiene fondo blanco */
    box-shadow: 0 28px 80px rgba(15, 23, 42, 0.38) !important; /* Da profundidad al subbox */
} /* Fin de tarjeta subbox */

.sub-modal-body { /* Contenido del subbox */
    width: 100%; /* Ocupa todo el ancho */
} /* Fin contenido subbox */

.sub-modal .modal-header button { /* Botón cerrar del subbox */
    width: 34px; /* Define ancho */
    height: 34px; /* Define alto */
    border: 1px solid #f0b8b5; /* Borde rojo suave */
    border-radius: 12px; /* Redondea el botón */
    background: #fff5f5; /* Fondo rojo claro */
    color: #c5342d; /* X roja */
    font-size: 22px; /* Tamaño de la X */
    font-weight: 900; /* Hace la X gruesa */
    cursor: pointer; /* Cursor de botón */
} /* Fin botón cerrar subbox */

.filter-header-cell .column-filter-btn { /* Fija el botón de filtro para que no se mueva */
    position: absolute !important; /* Mantiene el botón fuera del flujo de la celda */
    right: -1px !important; /* Fija siempre la misma distancia derecha */
    top: 50% !important; /* Lo mantiene centrado verticalmente */
    transform: translateY(-50%) !important; /* Centra el botón sin permitir desplazamientos */
    margin: 0 !important; /* Evita movimientos por márgenes */
} /* Fin del ajuste fijo del botón filtro */

.filter-header-cell .column-filter-btn:hover,
.filter-header-cell .column-filter-btn:focus,
.filter-header-cell .column-filter-btn:active { /* Evita movimiento al pasar, clicar o enfocar */
    transform: translateY(-50%) !important; /* Mantiene exactamente la misma posición */
    margin: 0 !important; /* Evita saltos por margen */
    outline: none !important; /* Quita borde de foco del navegador */
    box-shadow: none !important; /* Evita sombras que cambien el tamaño visual */
} /* Fin del hover fijo del botón filtro */

.expanded-pretty-select { /* Selectores bonitos dentro del box gigante */
    width: 100%; /* Ocupan todo el ancho de su bloque */
} /* Fin selectores bonitos ampliados */

.expanded-pretty-select .pretty-select-button { /* Botón visible de los selectores del box gigante */
    height: 38px !important; /* Mantiene la misma altura que el resto de controles */
    min-height: 38px !important; /* Evita que se comprima */
    align-items: center !important; /* Centra el texto verticalmente */
} /* Fin botón visible ampliado */

.expanded-pretty-select .pretty-select-menu { /* Menú desplegable de los selectores del box gigante */
    z-index: 10002 !important; /* Lo coloca por encima de la tabla ampliada */
} /* Fin menú desplegable ampliado */

.expanded-grade-tools select.hidden { /* Selectores reales ocultos dentro del box gigante */
    display: none !important; /* Evita que se vean los selectores nativos */
} /* Fin ocultación de selectores reales */

.sub-modal-card { /* Permite que los desplegables del subbox no se corten */
    overflow: visible !important; /* Deja salir el menú del selector fuera de la tarjeta */
} /* Fin ajuste subbox */

.sub-modal-body { /* Permite que el contenido del subbox muestre menús flotantes */
    overflow: visible !important; /* Evita que el desplegable quede recortado */
} /* Fin ajuste cuerpo subbox */

.sub-modal .modal-pretty-select { /* Contenedor del selector bonito dentro del subbox */
    position: relative !important; /* Mantiene el menú anclado al botón */
    z-index: 10003 !important; /* Coloca el selector por encima del resto del subbox */
} /* Fin contenedor selector subbox */

.sub-modal #newActivityTypeMenu { /* Menú del tipo de calificación en Nova activitat */
    z-index: 10004 !important; /* Coloca el menú por encima de todo el subbox */
    max-height: none !important; /* Evita que el menú se corte en altura */
    overflow: visible !important; /* Muestra todas las opciones */
} /* Fin menú tipo calificación */

.modal-card { /* Permite que los desplegables de los modales normales no se corten */
    overflow: visible !important; /* Deja salir el menú del selector fuera de la tarjeta */
} /* Fin ajuste modal normal */

#modalBody { /* Permite que el contenido del modal normal muestre menús flotantes */
    overflow: visible !important; /* Evita que el desplegable quede recortado */
} /* Fin ajuste cuerpo modal normal */

.modal-card:has(.settings-columns) { /* La ventana de Personalització no tiene desplegables grandes que necesiten salir del modal, pero sí puede tener más contenido del que cabe en pantalla (sobre todo con las columnas apiladas en móvil). Recupera el scroll propio del modal. */
    overflow-y: auto !important;
}

#modalBody:has(.settings-columns) {
    overflow-y: auto !important;
}

.modal-card .modal-pretty-select { /* Contenedor del selector bonito dentro del modal normal */
    position: relative !important; /* Mantiene el menú anclado al botón */
    z-index: 10003 !important; /* Coloca el selector por encima del resto del modal */
} /* Fin contenedor selector modal normal */

.modal-card #newActivityTypeMenu { /* Menú del tipo de calificación en Nova activitat */
    z-index: 10004 !important; /* Coloca el menú por encima de todo el modal */
    max-height: none !important; /* Evita que el menú se corte en altura */
    overflow: visible !important; /* Muestra todas las opciones */
} /* Fin menú tipo calificación modal normal */

.expanded-grade-tools { /* Barra superior del box gigante */
    display: flex !important; /* Evita solapamientos usando una fila flexible */
    align-items: end !important; /* Alinea todos los controles por abajo */
    gap: 10px !important; /* Mantiene la misma separación entre botones y selector */
    width: 100% !important; /* Ocupa todo el ancho del box gigante */
    margin-bottom: 12px !important; /* Separa la barra superior de la tabla */
    flex-shrink: 0 !important; /* Evita que la barra se comprima */
} /* Fin barra superior del box gigante */

.expanded-new-activity-btn { /* Botón + Nova activitat */
    margin-left: auto !important; /* Empuja solo el grupo derecho hacia la derecha */
    width: 180px !important; /* Fija ancho compacto */
    min-width: 180px !important; /* Evita que se haga pequeño */
    max-width: 180px !important; /* Evita que se estire */
    flex: 0 0 180px !important; /* Reserva exactamente su ancho */
} /* Fin botón + Nova activitat */

.expanded-calculate-btn { /* Botón calcular nota final */
    width: 300px !important; /* Da ancho suficiente para el texto */
    min-width: 300px !important; /* Evita que se comprima */
    max-width: 300px !important; /* Evita que se estire */
    flex: 0 0 300px !important; /* Reserva exactamente su ancho */
} /* Fin botón calcular */

.expanded-sort-control { /* Selector ordenar */
    width: 220px !important; /* Mantiene ancho estable */
    min-width: 220px !important; /* Evita que se comprima */
    max-width: 220px !important; /* Evita que crezca */
    flex: 0 0 220px !important; /* Reserva exactamente su ancho */
} /* Fin selector ordenar */

.expand-table-btn { /* Botón para abrir el box gigante */
    display: flex !important; /* Permite centrar el icono */
    align-items: center !important; /* Centra el icono verticalmente */
    justify-content: center !important; /* Centra el icono horizontalmente */
    padding: 0 !important; /* Quita desplazamientos internos */
    line-height: 1 !important; /* Evita que el icono quede alto o bajo */
    font-size: 15px !important; /* Ajusta el tamaño del icono */
} /* Fin botón abrir box gigante */

.report-actions { /* Grupo de botones del informe */
    display: flex; /* Coloca generar informe y configuración en fila */
    align-items: center; /* Centra ambos botones verticalmente */
    gap: 8px; /* Separa los botones */
} /* Fin grupo informe */

.btn-report-settings { /* Botón de configuración del informe */
    width: 32px; /* Define ancho compacto */
    height: 30px; /* Define alto compacto */
    border-radius: 10px; /* Redondea el botón */
    border: 1px solid #c9d8ee; /* Borde azul suave */
    background: #f4f8fe; /* Fondo azul claro */
    color: #2f5f9f; /* Icono azul */
    font-size: 15px; /* Tamaño del engranaje */
    font-weight: 900; /* Hace visible el icono */
    cursor: pointer; /* Muestra cursor de botón */
} /* Fin botón configuración */

.report-config-textarea { /* Textarea del prompt IA */
    min-height: 170px !important; /* Mantiene altura mínima para textareas normales del informe IA */
    resize: none !important; /* Evita redimensionado manual */
} /* Fin textarea prompt */

.report-config-template { /* Textarea de plantilla IA */
    min-height: 190px !important; /* Da espacio para pegar plantilla */
    max-height: 190px !important; /* Mantiene altura estable */
    resize: none !important; /* Evita redimensionado manual */
} /* Fin textarea plantilla */

.modal-card:has(#reportPromptConfig) { /* Modal de configuración del informe IA */
    width: min(980px, 94vw) !important; /* Hace el box más ancho */
    max-width: 980px !important; /* Aumenta el ancho máximo */
} /* Fin tamaño modal configuración informe */

#reportPromptConfig { /* Campo para redactar el prompt */
    min-height: 330px !important; /* Hace el prompt más alto */
    max-height: 330px !important; /* Mantiene una altura estable */
    font-size: 14px !important; /* Mejora la lectura */
    line-height: 1.55 !important; /* Mejora la separación entre líneas */
} /* Fin campo prompt IA */

.modal-card:has(#reportPromptConfig) .field-top { /* Zona del ejemplo de informe */
    margin-top: 24px !important; /* Añade más distancia respecto al prompt */
} /* Fin separación ejemplo informe */

.edit-student-condition-block { /* Bloque condición dentro de editar alumno */
    margin-top: 20px !important; /* Añade separación respecto al nombre */
    padding-top: 18px !important; /* Separa la línea del contenido */
    border-top: 1px solid #d8e2ef !important; /* Línea gris fina separadora */
} /* Fin separación condición editar alumno */

.new-activity-type-block { /* Bloque tipo de calificación dentro de nueva actividad */
    margin-top: 20px !important; /* Añade separación respecto al nombre */
    padding-top: 18px !important; /* Separa la línea del contenido */
    border-top: 1px solid #d8e2ef !important; /* Línea gris fina separadora */
} /* Fin separación tipo nueva actividad */

.login-card { /* Permite colocar el botón Crear usuari en la esquina superior derecha. */
    position: relative; /* Hace que el botón superior se posicione dentro de la tarjeta. */
}

.register-top-btn { /* Botón superior Crear usuari. */
    position: absolute; /* Coloca el botón en una posición fija dentro de la tarjeta. */
    top: 18px; /* Separa el botón desde arriba. */
    right: 18px; /* Separa el botón desde la derecha. */
    border: 1px solid #c9d8ee; /* Añade borde azul suave. */
    background: #f4f8fe; /* Añade fondo azul muy claro. */
    color: #2f5f9f; /* Define el color azul del texto. */
    border-radius: 12px; /* Redondea el botón. */
    padding: 7px 11px; /* Añade espacio interior. */
    font-size: 11px; /* Define tamaño pequeño. */
    font-weight: 900; /* Hace el texto grueso. */
    text-transform: uppercase; /* Muestra el texto en mayúsculas. */
    cursor: pointer; /* Muestra cursor de botón. */
}

.register-top-btn:hover { /* Efecto al pasar el ratón por Crear usuari. */
    background: #e8f1ff; /* Cambia el fondo al pasar el ratón. */
    border-color: #a9c3e8; /* Cambia el borde al pasar el ratón. */
}

.register-back-btn { /* Botón para volver desde registro al login. */
    border: none; /* Quita borde de botón. */
    background: transparent; /* Quita fondo de botón. */
    cursor: pointer; /* Muestra cursor de botón. */
    width: 100%; /* Ocupa todo el ancho. */
    margin-top: 2px; /* Añade pequeña separación superior. */
}

.login-shell { /* Contenedor externo del login. */
    min-height: 100vh !important; /* Hace que ocupe toda la altura de la pantalla. */
    display: flex !important; /* Permite centrar la tarjeta. */
    align-items: center !important; /* Centra la tarjeta verticalmente. */
    justify-content: center !important; /* Centra la tarjeta horizontalmente. */
}

.login-card { /* Tarjeta central del login. */
    position: relative !important; /* Permite colocar el botón Crear usuari dentro de la tarjeta. */
    width: min(420px, 92vw) !important; /* Recupera el ancho original de la tarjeta. */
    padding: 26px !important; /* Recupera el espacio interior original. */
    border-radius: 22px !important; /* Recupera las esquinas redondeadas. */
    border: 1px solid rgba(211, 222, 236, 0.65) !important; /* Recupera el marco suave. */
    background: rgba(255, 255, 255, 0.62) !important; /* Recupera el fondo translúcido de la tarjeta. */
    backdrop-filter: blur(12px) !important; /* Recupera el desenfoque del fondo. */
    -webkit-backdrop-filter: blur(12px) !important; /* Añade compatibilidad del desenfoque en navegadores WebKit. */
}

.register-top-btn { /* Botón Crear usuari dentro de la tarjeta. */
    position: absolute !important; /* Coloca el botón respecto a la tarjeta. */
    top: 22px !important; /* Lo separa de la parte superior de la tarjeta. */
    right: 22px !important; /* Lo separa de la derecha de la tarjeta. */
    border: 1px solid #c9d8ee !important; /* Añade borde azul suave. */
    background: #f4f8fe !important; /* Añade fondo azul claro. */
    color: #2f5f9f !important; /* Pone el texto azul. */
    border-radius: 12px !important; /* Redondea el botón. */
    padding: 7px 11px !important; /* Añade espacio interior. */
    font-size: 11px !important; /* Define tamaño pequeño. */
    font-weight: 900 !important; /* Hace el texto grueso. */
    text-transform: uppercase !important; /* Pone el texto en mayúsculas. */
    cursor: pointer !important; /* Muestra cursor de botón. */
    z-index: 2 !important; /* Asegura que el botón quede por encima del contenido. */
}

#loginBox .login-title { /* Título del login. */
    padding-right: 120px !important; /* Deja espacio para que no choque con Crear usuari. */
}

.class-active-slot { /* Apartado Classe activa, primer bloque de la columna izquierda en todas las anchuras */
    display: block;
    flex: 0 0 auto; /* Tamaño según su contenido: no crece, deja el espacio sobrante a Seguiment de l'alumne/a */
}

/* =========================================================
   CLASSE ACTIVA I SEGUIMENT: TÍTULOS PLEGABLES
========================================================= */

.collapsible-panel-title { /* Título de Classe activa o Seguiment, pulsable para plegar la tarjeta entera */
    cursor: pointer; /* Indica que se puede pulsar */
    display: flex; /* Alinea la flecha con el texto */
    align-items: center; /* Centra verticalmente */
    gap: 6px; /* Separa la flecha del texto */
    user-select: none; /* Evita seleccionar el texto al pulsar repetido */
}

.panel-collapse-arrow { /* Flecha de estado plegado/desplegado */
    font-size: 11px; /* Tamaño discreto */
    color: var(--muted); /* Tono secundario */
    transition: transform .15s ease; /* Suaviza el giro */
}

.student-follow-body { /* Envuelve el contenido de Seguiment de l'alumne/a para poder ocultarlo entero */
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex: 1 1 auto;
    min-height: 0;
    padding-top: 4px; /* Compensa el margin-top negativo de .student-top-row para que no quede recortado por el overflow del panel */
    overflow-y: auto; /* Muestra scroll vertical si el contenido no cabe en el alto disponible, en vez de recortarlo */
    overflow-x: hidden; /* Evita scroll horizontal */
    scrollbar-width: none; /* Oculta la barra de scroll en Firefox, sin quitar la funcionalidad */
    -ms-overflow-style: none; /* Oculta la barra de scroll en Edge/IE antiguos */
}

.student-follow-body::-webkit-scrollbar { /* Oculta la barra de scroll en Chrome, Safari y Edge modernos */
    display: none;
}

.student-follow-body > * {
    flex-shrink: 0; /* Evita que flexbox comprima las secciones para que quepan a la fuerza; si no caben, es .student-follow-body quien hace scroll */
}

.class-active-slot.panel-collapsed .class-picker-columns,
.student-follow-panel.panel-collapsed .student-follow-body,
.comment-write-card.panel-collapsed .comment-write-body {
    display: none; /* Oculta todo el contenido, solo queda visible la cabecera */
}

.class-active-slot.panel-collapsed .panel-collapse-arrow,
.student-follow-panel.panel-collapsed .panel-collapse-arrow,
.comment-write-card.panel-collapsed .panel-collapse-arrow {
    transform: rotate(-90deg); /* Gira la flecha para indicar que está plegado */
}

.class-active-slot.panel-collapsed { /* Tarjeta Classe activa plegada: solo la altura de su cabecera */
    flex: 0 0 auto !important;
}

.student-follow-panel.panel-collapsed { /* Tarjeta Seguiment plegada: solo la altura de su cabecera */
    flex: 0 0 auto !important;
    height: auto !important;
}

.comment-write-card.panel-collapsed { /* Tarjeta Nou comentari plegada: solo la altura de su cabecera, deja el espacio libre a Trimestre i Activitats */
    flex: 0 0 auto !important;
}

/* =========================================================
   CLASSE ACTIVA: NOMBRE EN LA CABECERA
========================================================= */

.header-class-info { /* Bloque de la cabecera con el nombre de la classe activa i el botó d'assistència */
    display: flex; /* Coloca el texto y el botón en línea */
    align-items: center; /* Centra verticalmente */
    gap: 10px; /* Separa el texto del botón */
}

.header-class-label { /* Caja con el nombre de la classe activa en la cabecera, siempre visible aunque esté vacía */
    display: flex; /* Centra el texto verticalmente dentro de la caja */
    align-items: center; /* Centra verticalmente */
    box-sizing: border-box; /* El padding no aumenta el tamaño total */
    min-width: 90px; /* Se ve como una caja incluso sin ninguna classe seleccionada */
    min-height: 38px; /* Misma altura que el botón d'Assistència */
    padding: 0 12px; /* Aire interior */
    border: 1px solid var(--border); /* Borde visible, como el resto de campos de la app */
    border-radius: 8px; /* Redondeo discreto */
    background: rgba(255, 255, 255, 0.6); /* Fondo suave para distinguirla del resto de la cabecera */
    font-weight: 700; /* Le da presencia */
    font-size: 14px; /* Tamaño legible sin competir con el título */
    color: var(--muted); /* Tono discreto, igual que otras etiquetas secundarias */
    white-space: nowrap; /* Evita que el nombre salte de línea */
    max-width: 260px; /* Evita que un nombre muy largo empuje el botón fuera de la cabecera (ancho suficiente para que quepa el texto por defecto en español, el idioma más largo) */
    overflow: hidden; /* Recorta si no cabe */
    text-overflow: ellipsis; /* Muestra puntos suspensivos si se recorta */
}

/* =========================================================
   CLASSE ACTIVA: SELECTOR DE TRES COLUMNES (CURS / GRUP / ASSIGNATURA)
========================================================= */

.class-picker-columns { /* Contenedor de las tres columnas, separadas solo por una línea */
    display: flex;
    align-items: stretch;
    gap: 0;
}

.class-picker-column { /* Cada columna individual */
    flex: 1 1 0;
    min-width: 0;
    padding: 0 10px;
}

.class-picker-column:first-child {
    padding-left: 0; /* La primera columna no necesita aire a la izquierda */
}

.class-picker-column:last-child {
    padding-right: 0; /* La última columna no necesita aire a la derecha */
}

.class-picker-column + .class-picker-column {
    border-left: 1px solid var(--border); /* Línea gris entre columnas, igual que el resto de separadores de la app */
}

.class-picker-column-title { /* Título de cada columna: Curs, Grup, Assignatura */
    margin: 0 0 6px; /* Separa el título de la lista */
    font-size: 11px; /* Tamaño discreto */
    text-transform: uppercase; /* Mayúsculas, igual que el resto de etiquetas de campo */
    letter-spacing: .02em; /* Espaciado sutil */
    color: var(--muted); /* Tono secundario */
    font-weight: 700; /* Presencia sin competir con el título de la tarjeta */
}

.class-picker-list { /* Lista de curs, grup o assignatura dentro del box Classe activa */
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.class-picker-item { /* Tarjeta clicable de curs, grup o assignatura */
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 6px;
    width: 100%;
    padding: 7px 8px;
    border-radius: 8px;
    border: 1px solid var(--border);
    background: #ffffff;
    cursor: pointer;
    font-size: 13px;
    font-weight: 700;
    text-align: left;
    color: var(--text);
}

.class-picker-item-active { /* Curs, grup o assignatura actualmente seleccionados: negrita y un azul muy tenue de fondo, sin sombra */
    font-weight: 800;
    background: #f3f8fd;
}

.class-picker-item-name { /* Nombre dentro de la tarjeta */
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.class-picker-item-more { /* Botón de tres puntos, igual que en Recursos */
    flex-shrink: 0;
    width: 20px;
    height: 20px;
    border-radius: 6px;
    display: grid;
    place-items: center;
    font-size: 13px;
    line-height: 1;
    color: inherit;
    opacity: .6;
}

.class-picker-item-more:hover {
    background: rgba(15, 35, 63, 0.08);
    opacity: 1;
}

.class-picker-empty { /* Aviso cuando una columna todavía no tiene elementos */
    font-size: 12px;
    color: var(--muted);
    padding: 6px 2px;
}

/* =========================================================
   MODAL CREAR CURS: VARIAS COLUMNES DE GRUP
========================================================= */

.field-header-row { /* Fila con la etiqueta "Grup" y el botón de añadir otro grup, uno junto al otro */
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}

.new-group-columns { /* Contenedor de las columnas de grup, una por grup a crear */
    display: flex;
    flex-wrap: wrap;
    gap: 10px 0; /* Separación vertical entre filas si se apilan; la horizontal ya la da el padding de cada columna, para que la línea quede centrada */
}

.modal-card:has(.new-group-columns) { /* La ventana de crear curs se ensancha sola según los grups que haya, hasta un máximo, antes de empezar a apilarlos en otra fila */
    width: fit-content;
    min-width: min(620px, 92vw);
    max-width: min(1360px, 96vw);
}

.new-group-column { /* Columna individual de un grup, con su nombre y sus assignatures */
    flex: 1 1 200px;
    min-width: 180px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    padding: 0 6px;
}

.new-group-column:first-child {
    padding-left: 0; /* La primera columna no necesita aire a la izquierda */
}

.new-group-column:last-child {
    padding-right: 0; /* La última columna no necesita aire a la derecha */
}

.new-group-column + .new-group-column {
    border-left: 1px solid var(--border); /* Separa los grups solo con una línea, igual que Classe activa */
}

.new-group-column-header { /* Fila con el nombre del grup y los botones de copiar/quitar columna */
    display: flex;
    align-items: center;
    gap: 4px;
}

.new-group-column-header input {
    flex: 1;
    min-width: 0;
}

.new-group-more-btn { /* Botón de tres puntos de cada columna de grup: eliminar o copiar assignatures */
    flex-shrink: 0;
    width: 22px;
    height: 22px;
    margin-left: auto; /* Lo empuja pegado al borde derecho de la columna, junto a la línea separadora */
    margin-right: -4px; /* Lo acerca un poco más a la línea separadora */
    border-radius: 8px;
    color: var(--text);
    opacity: .7;
    cursor: pointer; /* Muestra la mano, igual que el resto de botones de tres puntos de la app */
}

.new-group-more-btn:hover {
    opacity: 1;
}

.new-group-subjects-label { /* Etiqueta "Assignatures" dentro de cada columna */
    margin: 2px 0 0;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: .02em;
    color: var(--muted);
    font-weight: 700;
}

@media (max-width: 1100px) { /* En pantalla estrecha las tres columnas se apilan una debajo de otra */

    .class-picker-columns {
        flex-direction: column;
    }

    .class-picker-column + .class-picker-column {
        border-left: none;
        border-top: 1px solid var(--border);
        padding-top: 10px;
        margin-top: 4px;
    }

    .class-picker-column {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
}

@media (max-width: 1100px) { /* Activa este diseño cuando la pantalla es pequeña o dividida */

    html, body { /* Afecta a toda la página */

        height: auto !important; /* Anula la altura fija del 100% para que el body pueda crecer y no quede como contenedor de scroll interno separado del viewport */

        min-height: 100% !important; /* Mantiene como mínimo la altura de pantalla */

        overflow-y: auto !important; /* Permite hacer scroll vertical */

        overflow-x: hidden !important; /* Evita scroll horizontal */
    }

    .app-shell { /* Contenedor general de la app */

        height: auto !important; /* Permite que la app crezca hacia abajo */

        min-height: 100vh !important; /* Mantiene como mínimo la altura de pantalla */

        overflow: visible !important; /* Permite que el contenido se vea al bajar */
    }

    .main { /* Zona principal de la app */

        height: auto !important; /* Permite altura automática */

        min-height: 100vh !important; /* Mantiene altura mínima completa */

        overflow: visible !important; /* Evita que se corte el contenido */
    }

    .dashboard-columns { /* Contenedor de Seguiment y Trimestre */

        display: flex !important; /* Cambia de columnas a bloques verticales */

        flex-direction: column !important; /* Coloca los bloques uno debajo del otro */

        overflow: visible !important; /* Permite que haya scroll */
    }

    .right-column, /* Columna donde están Trimestre i activitats y Nou comentari */
    .left-column { /* Columna donde está Seguiment de l'alumne/a */

        display: contents !important; /* Deja de ser una caja propia para que sus tarjetas se puedan reordenar individualmente junto a las de la otra columna */
    }

    .class-active-slot { /* Nuevo apartado Classe activa, trasladado aquí por JS desde la cabecera */

        display: block !important; /* Solo se muestra en pantalla estrecha */

        order: 0 !important; /* Primer apartado, antes de Trimestre i activitats */

        margin-bottom: 0 !important; /* Usa el mismo gap que el resto de tarjetas */

        overflow: visible !important; /* Evita que el desplegable de Classe activa quede recortado por la tarjeta */
    }

    .term-activities-card { /* Tarjeta Trimestre i activitats */

        order: 1 !important; /* Segundo apartado */
    }

    .student-follow-panel { /* Tarjeta Seguiment de l'alumne/a */

        order: 2 !important; /* Tercer apartado */
    }

    .comment-write-card { /* Tarjeta Nou comentari */

        order: 3 !important; /* Cuarto apartado */
    }

    .dashboard-column { /* Cada columna individual */

        overflow: visible !important; /* Evita que se corte el contenido */
    }

    .card { /* Tarjetas generales */

        overflow: visible !important; /* Permite que el contenido crezca */
    }

    .table-wrap { /* Tabla de notas */

        max-height: 420px !important; /* Da altura máxima a la tabla */

        overflow: auto !important; /* Permite scroll dentro de la tabla si es grande */
    }
}

@media (max-width: 1100px) { /* Ajusta la cabecera cuando la pantalla es pequeña */

    .compact-hero { /* Cabecera superior en pantalla pequeña */

		position: static !important; /* Evita posiciones flotantes */

		display: grid !important; /* Permite colocar título arriba y dos columnas debajo */

		grid-template-columns: 1fr 1fr !important; /* Crea izquierda y derecha */

		gap: 12px !important; /* Separa filas y columnas */

		align-items: end !important; /* Alinea los bloques por abajo */

		min-height: auto !important; /* Permite altura natural */

		padding-bottom: 14px !important; /* Separa cabecera del contenido */
	}

    .compact-hero h1 { /* Título CUADERN DOCENT */

		position: static !important; /* Quita posición absoluta */

		transform: none !important; /* Quita centrado forzado */

		grid-column: 1 / -1 !important; /* Hace que el título ocupe toda la fila superior */

		order: 1 !important; /* Coloca el título arriba */

		text-align: center !important; /* Centra el título */

		font-size: 38px !important; /* Tamaño adaptado */

		white-space: normal !important; /* Permite ajustar el texto */
	}

    .compact-hero h1 { /* Título principal */

        order: 1 !important; /* Coloca el título después de Classe activa */
    }

	.top-class-tools { /* Bloque izquierdo: classe activa y botones */

		order: 2 !important; /* Lo coloca en la segunda fila, lado izquierdo */

		width: auto !important; /* Ocupa solo lo necesario */

		display: flex !important; /* Coloca selector y botones en fila */

		flex-wrap: nowrap !important; /* Evita salto de línea */

		justify-self: start !important; /* Lo manda a la izquierda */

		align-self: end !important; /* Lo alinea con el bloque derecho */

		align-items: flex-end !important; /* Alinea selector y botones por abajo */
	}

    .top-login-tools { /* Bloque derecho: usuario, guardar, importar y cerrar sesión */

		position: static !important; /* Evita que flote sobre la tabla */

		order: 3 !important; /* Lo coloca en la segunda fila, lado derecho */

		width: auto !important; /* Ocupa solo lo necesario */

		justify-self: end !important; /* Lo manda a la derecha */

		align-self: end !important; /* Lo alinea con Classe activa */

		display: flex !important; /* Mantiene usuario y botones visibles */

		align-items: flex-end !important; /* Alinea contenido por abajo */
	}
			
	
    .session-box { /* Caja del usuario y botones */

		display: flex !important; /* Coloca usuario y botones en fila */

		flex-direction: row !important; /* Mantiene todo horizontal */

		align-items: center !important; /* Centra verticalmente */

		gap: 8px !important; /* Añade separación entre elementos */
	}
}

@media (max-width: 1100px) { /* Aplica este cambio solo en pantallas pequeñas */

    .expand-table-btn { /* Botón que amplía la tabla de notas */

        display: none !important; /* Oculta el botón de ampliar tabla en pantalla pequeña */
    }
}

/* =========================================================
   OBJECTIUS DE L'ALUMNE/A
========================================================= */

.student-objectives-section { /* Zona de objetivos del alumno */

    display: flex; /* Permite organizar título y objetivos en vertical */

    flex-direction: column; /* Coloca título arriba y lista debajo */

    gap: 8px; /* Separa título y lista */

    margin-top: 8px; /* Separa objetivos de la gráfica */

    border-top: 1px solid #d8e2ef; /* Añade línea separadora superior */

    padding-top: 4px; /* Separa el contenido de la línea */
}

.student-objectives { /* Contenedor de la lista de objetivos: altura natural, el scroll ahora lo hace todo el panel junto en .student-follow-body */

    display: flex; /* Organiza los objetivos en vertical */

    flex-direction: column; /* Coloca un objetivo debajo de otro */

    gap: 8px; /* Separa objetivos entre sí */
}

.objective-item { /* Caja de un objetivo */

    display: grid; /* Organiza checkbox, texto y botones */

    grid-template-columns: 26px 1fr auto; /* Checkbox, texto flexible y acciones */

    align-items: center; /* Centra elementos verticalmente */

    gap: 8px; /* Separa columnas */

    padding: 9px 10px; /* Añade espacio interno */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 12px; /* Redondea la caja */

    background: #f8fafc; /* Fondo claro */

    color: var(--text); /* Color principal */
}

.objective-check { /* Checkbox del objetivo */

    width: 18px !important; /* Define ancho del checkbox */

    height: 18px !important; /* Define alto del checkbox */

    margin: 0 !important; /* Elimina margen del navegador */

    cursor: pointer; /* Muestra cursor interactivo */
}

.objective-text { /* Texto del objetivo */

    font-size: 13px; /* Tamaño cómodo */

    font-weight: 700; /* Hace visible el objetivo */

    line-height: 1.35; /* Mejora lectura */

    overflow-wrap: anywhere; /* Evita desbordes con textos largos */
}

.objective-actions { /* Botones de editar y eliminar */

    display: flex; /* Coloca botones en horizontal */

    align-items: center; /* Centra verticalmente */

    gap: 6px; /* Separa botones */
}

.objective-done { /* Objetivo marcado como cumplido */

    background: #eefaf4; /* Fondo verde suave */

    border-color: rgba(17, 150, 105, 0.25); /* Borde verde suave */
}

.objective-done .objective-text {

    color: #087443;

    text-decoration: line-through;

    text-decoration-thickness: 1px;

    opacity: 0.70 !important;

    font-weight: 500 !important;
}

.student-table-name-btn { /* Botón invisible para seleccionar alumno desde la tabla */

    width: 100%; /* Ocupa toda la celda del nombre */

    border: none; /* Quita borde de botón */

    background: transparent; /* Quita fondo de botón */

    color: var(--text); /* Usa el color normal del texto */

    font: inherit; /* Hereda la fuente de la tabla */

    font-weight: 900; /* Mantiene el nombre en negrita */

    cursor: pointer; /* Muestra que se puede clicar */

    text-align: center; /* Centra el nombre */
}

.student-table-name-btn:hover,
.student-table-name-btn:focus,
.student-table-name-btn:active { /* Mantiene limpio el nombre del alumno al pasar, enfocar o clicar */

    color: var(--text) !important; /* Mantiene el mismo color del texto en modo día */

    text-decoration: none !important; /* Elimina cualquier subrayado */

    background: transparent !important; /* Elimina el recuadro azul del hover global */

    border-color: transparent !important; /* Evita que aparezca borde al interactuar */

    outline: none !important; /* Evita borde de foco del navegador */

    box-shadow: none !important; /* Evita cualquier sombra visual */

    transform: none !important; /* Evita cualquier movimiento del botón */
}

/* =========================================================
   BOTÓ PREMIUM AL TÍTOL PRINCIPAL
========================================================= */

.main-title-row { /* Fila central con título y botón premium */

    position: absolute; /* Permite centrar el grupo dentro de la cabecera */

    left: 50%; /* Coloca el grupo en el centro horizontal */

    top: 10px; /* Baja el título y el botón premium dentro de la cabecera */

    transform: translateX(-50%); /* Centra exactamente el grupo */

    display: flex; /* Coloca el título y el botón en la misma fila */

    align-items: center; /* Centra verticalmente el título y el botón */

    gap: 16px; /* Separa el título del botón premium */

    white-space: nowrap; /* Evita que el título y el botón salten de línea */

    z-index: 2; /* Mantiene el grupo visible sobre otros elementos */
}

.main-title-row h1 { /* Título principal dentro de la fila premium */

    position: static !important; /* Anula la posición absoluta anterior del h1 */

    left: auto !important; /* Elimina la posición izquierda anterior */

    top: auto !important; /* Elimina la posición superior anterior */

    transform: none !important; /* Elimina el centrado anterior del h1 */

    margin: 0; /* Elimina márgenes del título */
}

.premium-main-btn { /* Botón premium grande junto al título */

    width: 42px; /* Define ancho cuadrado para la corona */

	height: 42px; /* Define altura cuadrada para la corona */

	padding: 0; /* Elimina espacio interno innecesario */

    border-radius: 14px; /* Redondea las esquinas */

    border: 1px solid #c9d8ee; /* Añade borde azul suave */

	background: #f4f8fe; /* Usa fondo azul claro como el resto de botones */

	color: #2f5f9f; /* Usa azul principal para la corona */

    font-size: 24px; /* Hace la corona elegante más visible */

    font-weight: 900; /* Hace el texto muy visible */

    cursor: pointer; /* Muestra cursor de botón */

    display: inline-flex; /* Permite centrar contenido */

    align-items: center; /* Centra verticalmente corona y texto */

    justify-content: center; /* Centra horizontalmente corona y texto */

    gap: 6px; /* Separa la corona del texto */

    text-transform: uppercase; /* Muestra el texto en mayúsculas */

    line-height: 1; /* Evita desajustes verticales */
}

.premium-main-btn:hover { /* Efecto al pasar el ratón */

    background: #e8f1ff; /* Fondo azul más visible al pasar el ratón */

	border-color: #a9c3e8; /* Intensifica el borde azul */

    transform: scale(1.04); /* Hace un pequeño zoom visual */
}

@media (max-width: 1200px) { /* Ajustes para pantallas pequeñas o ventanas estrechas */

    .compact-hero { /* Cabecera superior */

        min-height: 118px; /* Da más altura para que título y botones no se pisen */

        padding-top: 46px; /* Baja la fila de botones de clase debajo del título */
    }

    .main-title-row { /* Grupo del título y corona */

        top: 14px; /* Coloca el título arriba en pantallas pequeñas */

        z-index: 4; /* Mantiene título y corona por encima */
    }

    .compact-hero h1 { /* Título principal */

        font-size: 34px; /* Reduce un poco el título para que quepa mejor */
    }

    .premium-main-btn { /* Botón corona premium */

        width: 34px; /* Reduce el ancho del botón */

        height: 34px; /* Reduce el alto del botón */

        font-size: 20px; /* Reduce ligeramente la corona */
    }

    .top-class-tools { /* Botones de clase */

        margin-top: 0; /* Evita desplazamientos raros */

        z-index: 3; /* Mantiene botones visibles debajo del título */
    }

    .top-login-tools { /* Zona de usuario */

        top: 58px; /* Baja usuario y botones para que no choquen con el título */

        right: 4px; /* Mantiene la zona pegada a la derecha */
    }
}

/* =========================================================
   PERSONALITZACIÓ DIA / NIT
========================================================= */

.settings-columns { display: flex; gap: 22px; align-items: flex-start; } /* Dos columnas: preferencias a la izquierda, cuenta a la derecha */

.settings-column { flex: 1; min-width: 0; display: flex; flex-direction: column; } /* Cada columna ocupa la mitad del ancho disponible */

.settings-column:first-child { padding-right: 22px; border-right: 1px solid var(--border); } /* Línea vertical gris entre las dos columnas */

@media (max-width: 700px) { /* La ventana de Personalització tiene dos columnas fijas lado a lado; en móvil cada una se queda con la mitad del ancho del modal (apenas 150-160px), demasiado estrecho para los botones de idioma y los campos de cuenta. Se apilan en una sola columna. */
    .settings-columns {
        flex-direction: column !important;
        align-items: stretch !important;
        gap: 18px !important;
    }

    .settings-column:first-child {
        padding-right: 0 !important;
        border-right: none !important;
        padding-bottom: 18px !important;
        border-bottom: 1px solid var(--border) !important; /* Sustituye la línea vertical por una horizontal entre bloques */
    }
} /* Fin apilado de Personalització en móvil */

.settings-block { display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid var(--border); } /* Organiza el bloque de personalización, más compacto para que quepa todo sin scroll */

.settings-column .settings-block:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; } /* El último bloque de cada columna no necesita línea divisoria debajo */

@media (min-width: 701px) { /* Solo con las columnas lado a lado; en móvil ya van apiladas y no tiene sentido igualar alturas */
    .settings-columns { align-items: stretch; } /* Estira ambas columnas a la altura de la más alta, en vez de que cada una acabe donde acabe su contenido */
    .settings-column .settings-block:last-child { flex: 1 1 auto; } /* Deja que el último bloque de cada columna crezca para ocupar el espacio sobrante */
} /* Fin igualar alturas de columnas */

#deleteAccountBtn { margin-top: auto !important; } /* Empuja el botón al fondo de su columna */

.settings-block:has(#openSuggestionsBtn) { gap: 4px; } /* Menos separación entre el título, la descripción y el botón del bloque de suggeriments */
.settings-block:has(#openSuggestionsBtn) .field-hint { margin: 0; } /* Quita el margen del navegador por defecto (arriba y abajo) para que quede pegado al título y al botón */

.settings-block h3 { margin: 0; font-size: 14px; text-transform: uppercase; font-weight: 900; } /* Estilo del título del bloque */

.settings-block select { display: none !important; } /* Oculta los selectores nativos de Personalització para usar los bonitos de la app */

.modal-card:has(#agendaReminderMinutesField) { max-height: 97vh !important; max-width: 1120px !important; width: min(1120px, 94vw) !important; overflow: visible !important; padding-bottom: 20px; } /* Da más altura y anchura a Personalització (dos columnas). overflow visible (en vez de auto) para que el desplegable de minutos pueda salir del modal sin cortarse; con las dos columnas ya no hace falta scroll de seguridad. */

.modal-card:has(#agendaReminderMinutesField) .modal-header { margin-bottom: 10px; } /* Reduce el hueco bajo el título para ganar espacio vertical */

.modal-card:has(#agendaReminderMinutesField) .settings-block { gap: 10px; margin-bottom: 18px; padding-bottom: 18px; } /* Con las dos columnas sobra espacio vertical, así que separa bien cada apartado */

.modal-card:has(#agendaReminderMinutesField) .settings-column .settings-block:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; } /* El último bloque de cada columna no necesita línea ni espacio debajo */

.modal-card:has(#agendaReminderMinutesField) .account-settings-block { padding-top: 0 !important; } /* Ya no hace falta aire extra arriba: no queda ninguna línea separadora encima */

.modal-card:has(#agendaReminderMinutesField) .account-settings-block h3 { margin: 0 0 14px 0 !important; } /* Más aire bajo el título Dades del compte */

.modal-card:has(#agendaReminderMinutesField) .account-settings-grid { gap: 20px !important; } /* Más separación entre cada campo (nom, correu, contrasenya...) */

.modal-card:has(#agendaReminderMinutesField) .account-settings-grid input { padding: 10px 14px !important; } /* Campos más cómodos, hay espacio de sobra con las dos columnas */

.modal-card:has(#agendaReminderMinutesField) .account-settings-grid .field label { margin-bottom: 6px !important; } /* Más aire entre etiqueta y campo */

.modal-card:has(#agendaReminderMinutesField) .modal-actions { margin-top: 28px !important; } /* Acerca el botón Guardar canvis a la esquina inferior derecha, en vez de quedar pegado justo debajo del contenido */

.appearance-options { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; } /* Coloca Dia y Nit en dos columnas */

.appearance-option { min-height: 36px; border-radius: 14px; border: 1px solid #c9d8ee; background: #f4f8fe; color: #2f5f9f; font-size: 13px; font-weight: 900; cursor: pointer; text-transform: uppercase; transition: none !important; } /* Botón Dia/Nit, algo más bajo para ganar espacio vertical. Sin transición: hay una regla global de "button" que anima background/border-color/color en 0.15s pero no el outline, así que al marcar la opción activa el contorno aparecía al instante y el sombreado 150ms después. */

.appearance-option-active { border-color: #2f6fed; color: #234f86; } /* Marca la opción activa solo con el contorno del borde y el color de texto, sin sombreado de fondo ni halo exterior. */

.session-client-button { border: 0 !important; background: transparent !important; padding: 0; cursor: pointer; font-family: inherit; text-align: right; text-decoration: none !important; outline: none !important; box-shadow: none !important; appearance: none !important; -webkit-appearance: none !important; } /* Convierte el nombre en botón sin subrayado */

.session-client-button:hover,
.session-client-button:focus,
.session-client-button:active { text-decoration: none !important; outline: none !important; box-shadow: none !important; background: transparent !important; }

.login-card a.login-back-link:hover,
.login-card button.login-back-link:hover,
.login-card .login-back-link:hover,
.login-card .register-back-btn:hover { /* Quita el subrayado del botón volver del login */

    text-decoration: none !important; /* Elimina el subrayado del hover */

    -webkit-text-decoration-line: none !important; /* Elimina subrayado en Chrome/Edge */

    text-decoration-line: none !important; /* Fuerza que no haya línea */

    border-bottom: none !important; /* Quita línea si viene de borde */
}

.register-back-btn,
.register-back-btn:hover,
.register-back-btn:focus,
.register-back-btn:active { /* Botón Tornar a iniciar sessió */

    font-weight: 800 !important; /* Negrita */

    text-decoration: none !important; /* Quita subrayado */

    border: none !important; /* Quita bordes */

    box-shadow: none !important; /* Quita líneas por sombra */

    background: transparent !important; /* Mantiene fondo limpio */

    color: #8bb4f5 !important; /* Texto azul visible */
}

#registerBox:not(.hidden) ~ .register-top-btn { /* Oculta el botón superior Crear usuari cuando estamos registrando */

    display: none !important; /* Quita el botón porque ya estamos en Crear usuari */
}

/* =========================================================
   AJUSTE FINAL LOGIN IDIOMAS Y CREAR USUARIO
========================================================= */

.login-language-switcher { /* Selector de idioma dentro del login y registro */
    display: flex !important; /* Coloca todos los botones de idioma en una fila */
    justify-content: center !important; /* Centra los botones horizontalmente */
    align-items: center !important; /* Centra los botones verticalmente */
    gap: 10px !important; /* Añade separación entre botones */
    margin-top: 18px !important; /* Separa el selector del botón Entrar o del bloque anterior */
    margin-bottom: 0 !important; /* Evita margen inferior excesivo */
    flex-wrap: wrap !important; /* Permite salto de línea si la pantalla es pequeña */
} /* Fin selector idioma login */

.login-language-switcher button { /* Botones CA ES EN FR IT DE */
    border: 1px solid #c9d8ee !important; /* Añade borde azul suave */
    background: #f4f8fe !important; /* Añade fondo azul muy claro */
    color: #2f5f9f !important; /* Define texto azul */
    border-radius: 10px !important; /* Redondea cada botón */
    padding: 7px 12px !important; /* Da espacio interior cómodo */
    font-size: 12px !important; /* Ajusta el tamaño del texto */
    font-weight: 900 !important; /* Hace el texto grueso */
    cursor: pointer !important; /* Muestra cursor de botón */
} /* Fin botones idioma */

.login-language-switcher button.language-option-active { /* Idioma activo */
    background: #dfeeff !important; /* Marca el idioma activo con fondo azul */
    border-color: #8fb3e6 !important; /* Marca el idioma activo con borde más intenso */
    color: #234f86 !important; /* Oscurece el texto del idioma activo */
    box-shadow: 0 0 0 3px rgba(47, 111, 237, 0.16) !important; /* Añade halo suave al idioma activo */
} /* Fin idioma activo */

.login-card .register-top-btn { /* Botón Crear usuario dentro del login */
    position: static !important; /* Quita la posición absoluta que lo ponía arriba a la derecha */
    display: block !important; /* Hace que ocupe su propia línea */
    width: fit-content !important; /* Ajusta el ancho al texto */
    margin: 16px auto 0 auto !important; /* Lo coloca debajo de los idiomas y centrado */
    border: 1px solid #c9d8ee !important; /* Mantiene borde azul suave */
    background: #f4f8fe !important; /* Mantiene fondo azul claro */
    color: #2f5f9f !important; /* Mantiene texto azul */
    border-radius: 14px !important; /* Redondea el botón */
    padding: 10px 22px !important; /* Da más presencia al botón */
    font-size: 13px !important; /* Ajusta tamaño de texto */
    font-weight: 900 !important; /* Mantiene texto grueso */
    text-transform: uppercase !important; /* Mantiene mayúsculas */
    cursor: pointer !important; /* Muestra cursor de botón */
} /* Fin botón crear usuario */

.login-card .register-top-btn:hover { /* Hover Crear usuario */
    background: #e8f1ff !important; /* Cambia el fondo al pasar el ratón */
    border-color: #a9c3e8 !important; /* Cambia el borde al pasar el ratón */
} /* Fin hover Crear usuario */

/* =========================================================
   AJUSTE FINAL MODAL IDIOMAS PERSONALIZACIÓN
========================================================= */
.language-options { /* Contenedor de idiomas del modal de personalización */
    display: grid !important; /* Organiza los idiomas en cuadrícula */
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important; /* Muestra tres columnas equilibradas */
    gap: 10px !important; /* Separa los botones de idioma */
} /* Fin contenedor idiomas */

.language-options .appearance-option { /* Botones de idioma del modal */
    width: 100% !important; /* Hace que cada botón ocupe su celda */
    min-width: 0 !important; /* Evita que un idioma largo rompa la fila */
} /* Fin botones idioma modal */

@media (max-width: 620px) { /* Ajuste responsive para móviles */
    .language-options { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; } /* Reduce a dos columnas en pantallas pequeñas */
} /* Fin responsive idiomas */

/* =========================================================
   AJUSTE RESPONSIVE CABECERA Y BOTONES TRIMESTRE
   Evita solapes en pantallas pequeñas.
========================================================= */

.main-title-row {
    max-width: calc(100vw - 40px) !important;
}

.main-title-row h1,
.compact-hero h1 {
    white-space: nowrap !important;
    font-size: clamp(28px, 5.2vw, 44px) !important;
    line-height: 1 !important;
}

.term-actions .btn,
.term-actions .btn-calculate,
#btnNewActivity,
#btnOpenWeights,
#btnNewStudent,
#btnNewTerm,
#btnNewGroup,
#btnAttendance {
    min-height: 38px !important; /* Misma altura que el botón DESAR COMENTARI */
    height: 38px !important; /* Evita que los botones de trimestre se vean demasiado altos */
    padding: 9px 18px !important; /* Mantiene el estilo ancho sin aumentar la altura */
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    text-align: center !important;
    line-height: 1.05 !important;
    white-space: nowrap !important;
    box-sizing: border-box !important;
}

#btnOpenWeights {
    font-size: 13px !important;
}

@media (max-width: 1200px) {
    .main-title-row {
        top: 8px !important;
        gap: 10px !important;
    }

    .main-title-row h1,
    .compact-hero h1 {
        white-space: nowrap !important;
        font-size: clamp(30px, 4.6vw, 38px) !important;
    }

    .compact-hero {
        min-height: 122px !important;
        padding-top: 50px !important;
    }
}

@media (max-width: 1100px) {
    .compact-hero {
        display: grid !important;
        grid-template-columns: minmax(0, 1fr) auto !important;
        grid-template-areas:
            "title title"
            "class login" !important;
        gap: 12px !important;
        align-items: end !important;
        padding-top: 0 !important;
    }

    .main-title-row {
        position: static !important;
        transform: none !important;
        grid-area: title !important;
        justify-self: center !important;
        justify-content: center !important;
        width: 100% !important;
        max-width: 100% !important;
        order: 0 !important;
    }

    .compact-hero h1,
    .main-title-row h1 {
        position: static !important;
        transform: none !important;
        white-space: nowrap !important;
        font-size: clamp(32px, 5vw, 42px) !important;
        text-align: center !important;
        grid-column: auto !important;
    }

    .top-class-tools {
        grid-area: class !important;
        min-width: 0 !important;
    }

    .top-login-tools {
        grid-area: login !important;
        min-width: 0 !important;
    }

    .term-actions {
        grid-template-columns: minmax(230px, 1fr) auto auto !important;
        gap: 10px !important;
        align-items: end !important;
    }

    .term-actions .field {
        grid-column: 1 !important;
        width: 100% !important;
        max-width: none !important;
        min-width: 0 !important;
    }

    .term-actions #btnNewActivity {
        grid-column: 2 !important;
    }

    .term-actions #btnOpenWeights {
        grid-column: 3 !important;
    }
}

@media (max-width: 760px) {
    .compact-hero {
        grid-template-columns: 1fr !important;
        grid-template-areas:
            "title"
            "class"
            "login" !important;
    }

    .top-class-tools,
    .top-login-tools {
        justify-self: stretch !important;
        width: 100% !important;
    }

    .session-box {
        flex-wrap: wrap !important;
        justify-content: flex-start !important;
    }

    .term-header-with-sort {
        flex-wrap: wrap !important;
        gap: 12px !important;
    }

    .term-actions {
        grid-template-columns: 1fr !important;
    }

    .term-actions .field,
    .term-actions #btnNewActivity,
    .term-actions #btnOpenWeights {
        grid-column: 1 !important;
        width: 100% !important;
    }
}

/* =========================================================
   AJUSTE RESPONSIVE: usuario antes que clase activa
   ========================================================= */
@media (max-width: 1100px) {
    .compact-hero {
        grid-template-columns: 1fr !important;
        grid-template-areas:
            "title"
            "login"
            "class" !important;
        align-items: center !important;
    }

    .top-login-tools {
        grid-area: login !important;
        justify-self: start !important;
        width: 100% !important;
        order: 2 !important;
    }

    .top-class-tools {
        grid-area: class !important;
        justify-self: start !important;
        width: 100% !important;
        order: 3 !important;
    }

    .session-box {
        flex-direction: row !important;
        flex-wrap: wrap !important;
        justify-content: flex-start !important;
        align-items: center !important;
        gap: 8px !important;
    }
}

@media (max-width: 760px) {
    .compact-hero {
        grid-template-areas:
            "title"
            "login"
            "class" !important;
    }
}

/* =========================================================
   AGENDA ESTIL CALENDARI APPLE
========================================================= */

.agenda-modal-card { /* Modal grande de agenda semanal */

    width: min(1480px, 97vw) !important; /* Hace la agenda ancha como calendario */

    max-width: 1480px !important; /* Limita el tamaño máximo */

} /* Fin modal agenda */

.agenda-grid { /* Contenedor exterior del calendario */

    max-height: 72vh; /* Limita la altura visible */

    overflow: auto; /* Permite desplazarse por las horas */

    border: 1px solid #d6e1ef; /* Añade borde suave */

    border-radius: 8px !important; /* Reduce el redondeo del contenedor de la agenda para igualarlo al resto de la aplicación */

    background: #ffffff; /* Fondo blanco */

} /* Fin contenedor calendario */

.agenda-table { /* Cuadrícula principal del calendario */

    display: grid; /* Crea estructura tipo calendario */

    grid-template-columns: 74px repeat(5, minmax(190px, 1fr)); /* Columna de horas y cinco días */

    grid-auto-rows: 42px; /* Cada media hora ocupa una fila */

    min-width: 1080px; /* Evita que el calendario se comprima demasiado */

    position: relative; /* Permite colocar eventos encima */

    user-select: none; /* Evita seleccionar texto al arrastrar */

    background: #ffffff; /* Fondo blanco */

} /* Fin tabla calendario */

.agenda-head { /* Cabecera de cada día */

    position: sticky; /* Mantiene la cabecera visible al hacer scroll */

    top: 0; /* Fija la cabecera arriba */

    z-index: 10; /* La coloca encima del calendario */

    height: 64px; /* Da altura tipo Apple Calendar */

    padding: 8px 10px; /* Añade espacio interior */

    background: rgba(248, 251, 255, 0.96); /* Fondo claro translúcido */

    backdrop-filter: blur(12px); /* Da efecto cristal suave */

    border-bottom: 1px solid #d6e1ef; /* Línea inferior */

    border-right: 1px solid #e1e9f3; /* Línea derecha */

    color: #172334; /* Color principal */

    font-size: 11px; /* Tamaño del nombre del día */

    font-weight: 900; /* Texto fuerte */

    text-align: center; /* Centra el texto */

    text-transform: uppercase; /* Día en mayúsculas */

} /* Fin cabecera día */

.agenda-time-head { /* Cabecera de la columna de horas */

    left: 0; /* Mantiene la esquina fija */

    z-index: 11; /* Se pone por encima del resto */

} /* Fin cabecera hora */

.agenda-head span { /* Nombre del día */

    display: block; /* Coloca el día arriba */

    letter-spacing: .03em; /* Da aire al texto */

} /* Fin nombre día */

.agenda-head strong { /* Número del día */

    display: inline-grid; /* Permite centrar el número */

    place-items: center; /* Centra el número dentro del círculo */

    width: 30px; /* Tamaño del círculo */

    height: 30px; /* Altura del círculo */

    margin-top: 5px; /* Separa número y día */

    border-radius: 999px; /* Hace forma circular */

    color: #2f5f9f; /* Azul suave de botones */

    font-size: 18px; /* Número visible */

    font-weight: 800; /* Número elegante */

} /* Fin número día */

.agenda-time-cell { /* Celda de hora */

    position: sticky; /* Fija la columna de horas al mover horizontalmente */

    left: 0; /* Pega la columna a la izquierda */

    z-index: 4; /* La pone sobre las celdas */

    padding: 0 10px 0 0; /* Quita altura extra y deja espacio a la derecha */
	transform: none; /* Evita que la hora suba y se corte */
	line-height: 13px; /* Ajusta la altura del texto a la fila compacta */
	overflow: visible; /* Permite que la hora se vea completa */
	white-space: nowrap; /* Evita que la hora se parta */

    background: #ffffff; /* Fondo blanco */

    border-right: 1px solid #d6e1ef; /* Línea derecha */

    color: #7b8da5; /* Color gris suave */

    font-size: 11px; /* Tamaño de hora */

    font-weight: 700; /* Hora visible */

    text-align: right; /* Alinea la hora a la derecha */

} /* Fin celda hora */

.agenda-cell { /* Celda seleccionable del calendario */

    border-right: 1px solid #edf2f8; /* Línea vertical suave */

    border-bottom: 1px solid #edf2f8; /* Línea horizontal suave */

    background: #ffffff; /* Fondo blanco */

    cursor: crosshair; /* Indica que se puede arrastrar */

} /* Fin celda calendario */

.agenda-cell:hover { /* Celda bajo el cursor */

    background: #f6f9fe; /* Resalta suavemente al pasar */

} /* Fin hover celda */

.agenda-cell-selected { /* Rango seleccionado al arrastrar */

    background: rgba(143, 179, 230, 0.22) !important; /* Marca selección azul suave */

} /* Fin selección */

.agenda-event { /* Bloque de actividad estilo Apple Calendar */

    z-index: 8; /* Coloca evento encima de la cuadrícula */

    margin: 2px 5px; /* Deja aire dentro de la columna */

    padding: 7px 9px; /* Añade espacio interior */

    border-radius: 6px !important; /* Reduce el redondeo de las actividades de la agenda */

    background: #dcecff; /* Fondo azul claro tipo calendario */

    border-left: 4px solid #8fb3e6; /* Barra lateral de color */

    color: #183f72; /* Texto azul oscuro */

    font-size: 12px; /* Tamaño del texto */

    font-weight: 800; /* Texto visible */

    cursor: pointer; /* Permite editar o borrar */

    overflow: hidden; /* Evita desbordes */

    box-shadow: inset 0 0 0 1px rgba(143, 179, 230, 0.35); /* Borde interno suave */

} /* Fin evento */

.agenda-event:hover { /* Evento al pasar el cursor */

    background: #cfe4ff; /* Intensifica el azul */

} /* Fin hover evento */

.agenda-event strong { /* Título del evento */

    display: block; /* Coloca título en línea propia */

    overflow: hidden; /* Oculta texto largo */

    text-overflow: ellipsis; /* Añade puntos suspensivos */

    white-space: nowrap; /* Evita salto de línea */

} /* Fin título evento */

.agenda-event span { /* Horario del evento */

    display: block; /* Coloca hora debajo */

    margin-top: 3px; /* Separa título y hora */

    font-size: 10px; /* Hora más pequeña */

    color: #52657d; /* Gris azulado */

    font-weight: 700; /* Hora visible */

} /* Fin hora evento */

.agenda-title-nav { /* Botones junto al título */

    display: inline-flex; /* Coloca botones en línea */

    align-items: center; /* Centra verticalmente */

    gap: 8px; /* Separa botones */

    margin-left: 14px; /* Separa botones del título */

} /* Fin navegación */

.agenda-nav-btn { /* Botones navegación agenda */

    display: inline-flex; /* Permite centrar contenido */

    align-items: center; /* Centra verticalmente */

    justify-content: center; /* Centra horizontalmente */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    background: #f4f8fe; /* Fondo azul claro */

    color: #2f5f9f; /* Azul de botones */

    border-radius: 12px; /* Redondea botón */

    height: 34px; /* Altura del botón */

    padding: 0 14px; /* Espacio horizontal */

    font-size: 12px; /* Tamaño texto */

    font-weight: 900; /* Texto fuerte */

    cursor: pointer; /* Cursor de botón */

    text-transform: uppercase; /* Texto en mayúsculas */

} /* Fin botón navegación */

.agenda-arrow-btn { /* Botones de flecha */

    width: 34px; /* Botón cuadrado */

    padding: 0 !important; /* Quita padding extra */

    font-size: 22px; /* Flecha grande */

    line-height: 1; /* Evita descentrado */

    padding-bottom: 2px !important; /* Ajuste óptico de flecha */

} /* Fin flecha */

.agenda-nav-btn:hover { /* Hover botones navegación */

    background: #e8f1ff; /* Fondo activo */

    border-color: #a9c3e8; /* Borde más visible */

    color: #234f86; /* Texto más oscuro */

} /* Fin hover navegación */

.agenda-event-description-input { /* Campo de descripción del evento de agenda */

    min-height: 110px !important; /* Da espacio cómodo para escribir descripción */

    max-height: 180px !important; /* Limita la altura máxima del campo */

} /* Fin descripción evento */

.agenda-event-links-input { /* Campo de enlaces del evento de agenda */

    min-height: 90px !important; /* Da espacio para varios enlaces */

    max-height: 140px !important; /* Limita la altura máxima del campo */

} /* Fin enlaces evento */

.agenda-detail-block h3 { /* Título dentro del detalle de actividad */

    margin: 0 0 12px 0; /* Separa el título del contenido */

    font-size: 18px; /* Hace visible el título */

    text-transform: uppercase; /* Mantiene estilo de la app */

} /* Fin título detalle */

.agenda-detail-block p { /* Texto de descripción del detalle */

    margin: 0 0 14px 0; /* Separa la descripción de los enlaces */

    line-height: 1.45; /* Mejora la lectura */

    color: var(--text); /* Usa color principal */

} /* Fin descripción detalle */

.agenda-links-list { /* Lista de enlaces del evento */

    display: flex; /* Organiza enlaces en vertical */

    flex-direction: column; /* Pone un enlace debajo de otro */

    gap: 8px; /* Separa los enlaces */

} /* Fin lista enlaces */

.agenda-links-list a { /* Enlace individual del evento */

    display: block; /* Hace cada enlace una línea completa */

    padding: 9px 10px; /* Añade espacio interior */

    border: 1px solid #c9d8ee; /* Añade borde azul suave */

    border-radius: 12px; /* Redondea el enlace */

    background: #f4f8fe; /* Fondo azul claro */

    color: #2f5f9f; /* Texto azul suave */

    font-size: 12px; /* Tamaño del enlace */

    font-weight: 800; /* Hace el enlace visible */

    text-decoration: none; /* Quita subrayado */

    overflow-wrap: anywhere; /* Evita que URLs largas rompan el modal */

} /* Fin enlace individual */

.agenda-event p { /* Descripción visible dentro del bloque de agenda */

    margin: 6px 0 0 0; /* Separa la descripción del horario */

    font-size: 11px; /* Hace la descripción compacta */

    line-height: 1.3; /* Mejora la lectura del texto */

    color: #183f72; /* Usa azul oscuro legible */

    font-weight: 600; /* Hace el texto claro sin exagerar */

    overflow: hidden; /* Evita que el texto salga del bloque */

    display: -webkit-box; /* Permite limitar líneas del texto */

    -webkit-line-clamp: 2; /* Muestra como máximo dos líneas */

    -webkit-box-orient: vertical; /* Hace que el recorte funcione en vertical */

} /* Fin descripción en bloque agenda */

.agenda-event a { /* Enlace visible dentro del bloque de agenda */

    display: block; /* Coloca el enlace en línea propia */

    margin-top: 5px; /* Separa el enlace de la descripción */

    font-size: 10px; /* Hace el enlace compacto */

    color: #2f5f9f; /* Usa el azul suave de botones */

    font-weight: 800; /* Hace el enlace visible */

    text-decoration: underline; /* Marca que es un enlace */

    overflow: hidden; /* Evita que enlaces largos desborden */

    text-overflow: ellipsis; /* Añade puntos suspensivos */

    white-space: nowrap; /* Evita que el enlace salte de línea */

} /* Fin enlace en bloque agenda */

.agenda-color-options { /* Contenedor de colores pastel */

    display: flex; /* Coloca los colores en fila */

    gap: 10px; /* Separa los círculos de color */

    flex-wrap: wrap; /* Permite saltar línea si no caben */

} /* Fin contenedor colores */

.agenda-color-option { /* Botón circular de color */

    width: 30px; /* Define ancho del círculo */

    height: 30px; /* Define alto del círculo */

    border-radius: 999px; /* Hace el botón completamente circular */

    border: 2px solid transparent; /* Prepara borde activo */

    cursor: pointer; /* Muestra cursor de botón */

    padding: 0; /* Quita espacio interior */

} /* Fin botón color */

.agenda-color-option-active { /* Color seleccionado */

    border-color: #172334 !important; /* Marca el color elegido con borde oscuro */

    box-shadow: 0 0 0 3px rgba(47, 95, 159, 0.15); /* Añade halo suave al color seleccionado */

} /* Fin color seleccionado */

.agenda-color-blue { /* Azul pastel */

    background: #dcecff; /* Fondo azul pastel */

} /* Fin azul pastel */

.agenda-color-yellow { /* Amarillo pastel */

    background: #fff3bf; /* Fondo amarillo pastel */

} /* Fin amarillo pastel */

.agenda-color-red { /* Rojo pastel */

    background: #ffd6d6; /* Fondo rojo pastel */

} /* Fin rojo pastel */

.agenda-color-green { /* Verde pastel */

    background: #d9f7df; /* Fondo verde pastel */

} /* Fin verde pastel */

.agenda-color-purple { /* Lila pastel */

    background: #eadcff; /* Fondo lila pastel */

} /* Fin lila pastel */

.agenda-color-pink { /* Rosa pastel */

    background: #ffdff0; /* Fondo rosa pastel */

} /* Fin rosa pastel */

.agenda-color-orange { /* Naranja pastel */

    background: #ffe1bf; /* Fondo naranja pastel */

} /* Fin naranja pastel */

.agenda-event-blue { /* Evento azul pastel */

    background: #dcecff !important; /* Fondo azul pastel */

    border-left-color: #8fb3e6 !important; /* Barra lateral azul */

} /* Fin evento azul */

.agenda-event-yellow { /* Evento amarillo pastel */

    background: #fff3bf !important; /* Fondo amarillo pastel */

    border-left-color: #f0c84b !important; /* Barra lateral amarilla */

} /* Fin evento amarillo */

.agenda-event-red { /* Evento rojo pastel */

    background: #ffd6d6 !important; /* Fondo rojo pastel */

    border-left-color: #ef8f8f !important; /* Barra lateral roja */

} /* Fin evento rojo */

.agenda-event-green { /* Evento verde pastel */

    background: #d9f7df !important; /* Fondo verde pastel */

    border-left-color: #82c995 !important; /* Barra lateral verde */

} /* Fin evento verde */

.agenda-event-purple { /* Evento lila pastel */

    background: #eadcff !important; /* Fondo lila pastel */

    border-left-color: #b79be8 !important; /* Barra lateral lila */

} /* Fin evento lila */

.agenda-event-pink { /* Evento rosa pastel */

    background: #ffdff0 !important; /* Fondo rosa pastel */

    border-left-color: #e89ac4 !important; /* Barra lateral rosa */

} /* Fin evento rosa */

.agenda-event-orange { /* Evento naranja pastel */

    background: #ffe1bf !important; /* Fondo naranja pastel */

    border-left-color: #eba45c !important; /* Barra lateral naranja */

} /* Fin evento naranja */

.agenda-reminder-container { /* Contenedor de avisos de eventos próximos */
    position: fixed; /* Se mantiene fijo aunque se haga scroll */
    top: 16px; /* Separación del borde superior */
    right: 16px; /* Separación del borde derecho */
    z-index: 100000; /* Queda por encima de cualquier modal abierto */
    display: flex; /* Apila varios avisos en columna */
    flex-direction: column; /* Los nuevos avisos se añaden hacia abajo */
    gap: 10px; /* Separación entre avisos */
    max-width: 320px; /* Evita que el aviso sea demasiado ancho */
    pointer-events: none; /* Deja pasar los clics por el hueco del contenedor */
}

.agenda-reminder-toast { /* Tarjeta individual de aviso */
    position: relative; /* Permite posicionar el botón de cerrar dentro */
    pointer-events: auto; /* El propio aviso sí recibe los clics */
    background: white; /* Fondo por defecto, lo sobreescribe el color del evento */
    border-left: 5px solid #8fb3e6; /* Barra lateral por defecto, la sobreescribe el color del evento */
    border-radius: 12px; /* Esquinas redondeadas como el resto de la app */
    box-shadow: 0 12px 28px rgba(15, 23, 42, .22); /* Sombra para que destaque sobre cualquier pantalla */
    padding: 12px 30px 12px 14px; /* Espacio interior, más ancho a la derecha por el botón de cerrar */
    animation: agendaReminderSlideIn .25s ease; /* Entrada suave desde la derecha */
}

.agenda-reminder-toast.agenda-reminder-toast-closing { /* Estado de salida del aviso */
    animation: agendaReminderFadeOut .25s ease forwards; /* Desvanece el aviso antes de eliminarlo */
}

.agenda-reminder-close { /* Botón para cerrar el aviso manualmente */
    position: absolute; /* Se coloca en la esquina superior derecha de la tarjeta */
    top: 8px; /* Separación del borde superior */
    right: 8px; /* Separación del borde derecho */
    width: 20px; /* Tamaño reducido para no molestar */
    height: 20px; /* Tamaño reducido para no molestar */
    border: none; /* Sin borde */
    background: transparent; /* Sin fondo propio */
    color: #10233f; /* Color oscuro acorde a la app */
    font-size: 15px; /* Tamaño legible de la X */
    line-height: 1; /* Centra la X verticalmente */
    cursor: pointer; /* Indica que es pulsable */
    opacity: .6; /* Discreto por defecto */
}

.agenda-reminder-close:hover { opacity: 1; } /* Se resalta al pasar el cursor */

.agenda-reminder-title { /* Título fijo del aviso, ej. "Pròxim event" */
    font-size: 11px; /* Tamaño pequeño de etiqueta */
    font-weight: 800; /* Bien marcado */
    text-transform: uppercase; /* Estilo de etiqueta en mayúsculas */
    letter-spacing: .04em; /* Ligero aire entre letras */
    color: #4a5b73; /* Color discreto */
    margin-bottom: 4px; /* Separación con el título del evento */
}

.agenda-reminder-event-title { /* Nombre del evento dentro del aviso */
    font-size: 15px; /* Tamaño destacado */
    font-weight: 700; /* Buen peso visual */
    color: #10233f; /* Color oscuro principal de la app */
    margin-bottom: 2px; /* Pequeña separación con la hora */
}

.agenda-reminder-time { /* Minutos restantes hasta el evento */
    font-size: 13px; /* Tamaño secundario */
    color: #4a5b73; /* Color discreto a juego con el título */
}

@keyframes agendaReminderSlideIn { /* Animación de entrada del aviso */
    from { transform: translateX(24px); opacity: 0; } /* Empieza desplazado y transparente */
    to { transform: translateX(0); opacity: 1; } /* Termina en su posición final y visible */
}

@keyframes agendaReminderFadeOut { /* Animación de salida del aviso */
    from { transform: translateX(0); opacity: 1; } /* Empieza visible */
    to { transform: translateX(24px); opacity: 0; } /* Termina desplazado y transparente */
} /* Textos principales legibles en modo noche */

.agenda-color-blue { background: #d8ebff !important; } /* Muestra el color azul sin necesidad de pasar el cursor */
.agenda-color-yellow { background: #fff1a8 !important; } /* Muestra el color amarillo sin necesidad de pasar el cursor */
.agenda-color-red { background: #ffd6d6 !important; } /* Muestra el color rojo sin necesidad de pasar el cursor */
.agenda-color-green { background: #d9f7df !important; } /* Muestra el color verde sin necesidad de pasar el cursor */
.agenda-color-purple { background: #eadcff !important; } /* Muestra el color lila sin necesidad de pasar el cursor */
.agenda-color-pink { background: #ffdff0 !important; } /* Muestra el color rosa sin necesidad de pasar el cursor */
.agenda-color-orange { background: #ffe1bf !important; } /* Muestra el color naranja sin necesidad de pasar el cursor */

.agenda-color-option { /* Mejora el aspecto base de cada color */

    border: 2px solid transparent !important; /* Quita el borde oscuro por defecto */

    box-shadow: none !important; /* Elimina el halo anterior */

    transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease, background .15s ease; /* Suaviza selección y hover */

} /* Fin mejora base color */

.agenda-color-option-active { /* Marca el color seleccionado de forma más elegante */

    border-color: rgba(23, 35, 52, 0.35) !important; /* Usa un borde oscuro suave, no negro fuerte */

    box-shadow: 0 0 0 4px rgba(47, 95, 159, 0.10) !important; /* Añade halo muy suave */

    transform: scale(1.08); /* Agranda ligeramente el color elegido */

} /* Fin color seleccionado elegante */

.agenda-color-blue:hover { /* Hover azul pastel */

    background: #bfdcff !important; /* Intensifica el azul al pasar el cursor */

} /* Fin hover azul */

.agenda-color-yellow:hover { /* Hover amarillo pastel */

    background: #ffe58a !important; /* Intensifica el amarillo al pasar el cursor */

} /* Fin hover amarillo */

.agenda-color-red:hover { /* Hover rojo pastel */

    background: #ffb8b8 !important; /* Intensifica el rojo al pasar el cursor */

} /* Fin hover rojo */

.agenda-color-green:hover { /* Hover verde pastel */

    background: #bdf0c9 !important; /* Intensifica el verde al pasar el cursor */

} /* Fin hover verde */

.agenda-color-purple:hover { /* Hover lila pastel */

    background: #d9c2ff !important; /* Intensifica el lila al pasar el cursor */

} /* Fin hover lila */

.agenda-color-pink:hover { /* Hover rosa pastel */

    background: #ffc6e4 !important; /* Intensifica el rosa al pasar el cursor */

} /* Fin hover rosa */

.agenda-color-orange:hover { /* Hover naranja pastel */

    background: #ffc98f !important; /* Intensifica el naranja al pasar el cursor */

} /* Fin hover naranja */

.agenda-repeat-label { /* Etiqueta de repetir semanalmente */

    display: flex; /* Coloca checkbox y texto en la misma línea */

    align-items: center; /* Centra verticalmente el checkbox y el texto */

    gap: 8px; /* Separa checkbox y texto */

    margin: 0; /* Elimina margen extra */

    color: var(--text); /* Usa color principal */

    font-size: 13px; /* Tamaño cómodo */

    font-weight: 900; /* Hace visible la opción */

    text-transform: none; /* Evita mayúsculas forzadas */

    cursor: pointer; /* Permite clicar toda la línea */

} /* Fin etiqueta repetición */

.agenda-repeat-label input { /* Checkbox de repetición */

    width: 17px; /* Define ancho del checkbox */

    height: 17px; /* Define alto del checkbox */

    margin: 0; /* Quita margen del navegador */

    padding: 0; /* Quita relleno del navegador */

} /* Fin checkbox repetición */

.agenda-repeat-row { /* Fila que une repetir semanalmente y fecha final */

    display: flex; /* Coloca checkbox y fecha final en la misma línea */

    align-items: center; /* Centra verticalmente ambos elementos */

    gap: 18px; /* Separa la opción de repetición de la fecha final */

    flex-wrap: wrap; /* Permite bajar la fecha si la ventana es pequeña */

} /* Fin fila repetición */

.agenda-repeat-end { /* Caja de fecha final */

    display: flex; /* Coloca etiqueta e input en horizontal */

    align-items: center; /* Centra etiqueta e input verticalmente */

    gap: 8px; /* Separa etiqueta y campo de fecha */

} /* Fin caja fecha final */

.agenda-repeat-end.hidden { /* Oculta la fecha final cuando no se repite */

    display: none; /* Esconde completamente la caja de fecha final */

} /* Fin ocultar fecha final */

.agenda-link-meeting-category-field:not(.hidden) { /* Selector de categoría de la reunión vinculada, en la misma fila que los checkboxes */

    display: flex; /* Permite que el selector se ajuste al contenido en vez de estirarse */

    align-items: center; /* Centra verticalmente junto a los checkboxes */

} /* Fin selector categoría reunión vinculada: :not(.hidden) evita pisar la clase .hidden cuando el checkbox está desmarcado */

.agenda-link-meeting-category-field .pretty-select { /* Contenedor del selector bonito de categoría */

    display: inline-block; /* Se ajusta al ancho de su contenido en vez de estirarse al 100% */

    width: auto; /* Anula el ancho fijo del selector genérico */

    max-width: min(280px, calc(100vw - 220px)); /* Nunca supera el ancho disponible en la ventana */

} /* Fin ancho selector categoría */

.agenda-link-meeting-category-field .pretty-select-button { /* Botón visible del selector de categoría */

    display: inline-flex !important; /* Permite que el ancho dependa del texto, no del 100% genérico */

    width: auto !important; /* Anula el ancho fijo del botón genérico */

    max-width: 100%; /* No supera el contenedor, que ya está limitado a la ventana */

    white-space: nowrap; /* Mantiene el nombre de la categoría en una sola línea */

    gap: 10px; /* Separa el texto de la flecha ahora que el botón no se estira */

} /* Fin botón selector categoría */

.agenda-link-meeting-category-field .pretty-select-menu { /* Menú desplegable del selector de categoría */

    left: 0 !important; /* Ancla el menú al borde izquierdo del botón */

    right: auto !important; /* Anula el ancho igual al botón, que ahora puede ser más estrecho que las opciones */

    width: max-content; /* Se ajusta al nombre de categoría más largo */

    max-width: min(280px, calc(100vw - 220px)); /* Nunca supera el ancho disponible en la ventana */

} /* Fin menú selector categoría */

.agenda-link-meeting-category-field .pretty-select-option { /* Opciones del menú de categoría */

    white-space: nowrap; /* Evita que los nombres largos se partan en varias líneas */

    overflow: hidden; /* Si aun así no cupiera, recorta en vez de forzar scroll horizontal */

    text-overflow: ellipsis; /* Indica visualmente el recorte con puntos suspensivos */

} /* Fin opciones selector categoría */

.agenda-linked-meeting-chip { /* Chip que muestra la reunión vinculada a una actividad de agenda */

    display: inline-flex; /* Coloca icono y texto en línea */

    align-items: center; /* Centra verticalmente icono y texto */

    gap: 6px; /* Separa icono y texto */

    margin-top: 6px; /* Separa el chip del checkbox de vincular */

    padding: 6px 12px; /* Espacio interno del chip */

    border: none; /* Quita el borde por defecto del botón */

    border-radius: 999px; /* Forma de píldora */

    background: var(--pastel-blue, #e3edff); /* Fondo suave coherente con los colores pastel de la agenda */

    color: var(--text); /* Usa el color de texto principal */

    font-size: 13px; /* Tamaño discreto */

    cursor: pointer; /* Indica que se puede pulsar */

} /* Fin chip reunión vinculada */

.agenda-repeat-end label { /* Etiqueta Data final en la fila */

    margin-bottom: 0; /* Quita margen inferior para alinear con el input */

    white-space: nowrap; /* Evita que la etiqueta salte de línea */

} /* Fin etiqueta fecha final */

.agenda-repeat-end input { /* Campo de fecha final */

    width: 170px; /* Da ancho cómodo al campo de fecha */

} /* Fin input fecha final */

.agenda-time-picker { /* Contenedor del selector elegante de hora */

    position: relative; /* Permite colocar el desplegable debajo del botón */

    width: 100%; /* Ocupa todo el ancho disponible */

} /* Fin contenedor selector hora */

.agenda-time-picker-btn { /* Botón visible del selector de hora */

    width: 100%; /* Ocupa todo el ancho */

    height: 37px; /* Igual altura que los inputs */

    border: 1px solid var(--border); /* Borde suave de la app */

    border-radius: 12px; /* Bordes redondeados */

    background: #f4f8fe; /* Fondo azul claro elegante */

    color: #172334; /* Texto oscuro */

    padding: 0 12px; /* Espacio interior lateral */

    display: flex; /* Coloca hora y flecha en la misma línea */

    align-items: center; /* Centra verticalmente */

    justify-content: space-between; /* Separa hora y flecha */

    font-size: 13px; /* Tamaño de texto */

    font-weight: 800; /* Texto visible */

    cursor: pointer; /* Cursor de botón */

} /* Fin botón selector hora */

.agenda-time-picker-menu { /* Menú desplegable de horas */

    position: absolute; /* Coloca el menú flotante */

    top: calc(100% + 6px); /* Lo sitúa debajo del botón */

    left: 0; /* Alinea a la izquierda */

    right: 0; /* Ocupa el mismo ancho */

    z-index: 10000; /* Lo muestra por encima del modal */

    max-height: 230px; /* Limita la altura del menú */

    overflow-y: auto; /* Permite scroll si hay muchas horas */

    padding: 8px; /* Espacio interior */

    border: 1px solid #c9d8ee; /* Borde azul suave */

    border-radius: 14px; /* Bordes redondeados */

    background: white; /* Fondo blanco */

    box-shadow: 0 18px 35px rgba(15, 23, 42, .16); /* Sombra elegante */

} /* Fin menú horas */

.agenda-time-picker-option { /* Opción individual de hora */

    width: 100%; /* Ocupa todo el ancho */

    height: 34px; /* Altura cómoda */

    border: none; /* Quita borde */

    border-radius: 10px; /* Redondea cada opción */

    background: transparent; /* Fondo normal transparente */

    color: #172334; /* Texto oscuro */

    text-align: left; /* Alinea texto a la izquierda */

    padding: 0 10px; /* Espacio lateral */

    font-size: 13px; /* Tamaño texto */

    cursor: pointer; /* Cursor de botón */

    display: flex; /* Centra el texto verticalmente dentro de la altura fija, en vez de depender del line-height por defecto del botón */

    align-items: center; /* Centrado vertical real */

} /* Fin opción hora */

.agenda-time-picker-option:hover { /* Resalta la hora al pasar el cursor */

    background: #e8f1ff !important; /* Aplica un sombreado azul suave al pasar el ratón */

    color: inherit !important; /* Mantiene el color original del texto */

    font-weight: inherit !important; /* Mantiene el grosor original del texto sin negrita */

    cursor: pointer; /* Muestra la mano al pasar el cursor */

} /* Fin hover hora */

.agenda-time-picker-option-active { /* Hora seleccionada */

    background: #dcecff !important; /* Fondo azul claro seleccionado */

    color: #2f5f9f !important; /* Texto azul suave */

    font-weight: 900; /* Hora seleccionada en negrita */

} /* Fin hora seleccionada */

.agenda-time-picker-btn { /* Quita el fondo azul del selector de hora */

    background: white !important; /* Usa fondo blanco como los inputs normales */

} /* Fin fondo blanco selector hora */

.agenda-time-picker-btn:hover { /* Mantiene un hover muy suave */

    background: #fbfdff !important; /* Añade solo un fondo casi blanco al pasar el cursor */

} /* Fin hover selector hora */

.agenda-event { /* Reduce el redondeo de las actividades de la agenda */

    border-radius: 5px !important; /* Hace las esquinas menos redondeadas */

} /* Fin flecha blanca selector hora */

.agenda-delete-btn { /* Botón destructivo utilizado en la agenda. */

    background: #fff0f0 !important; /* Aplica un fondo rojo muy claro. */

    border: 1px solid #e5a4a4 !important; /* Añade el borde rojo como el resto de botones Eliminar. */

    color: #b9281e !important; /* Mantiene el texto rojo oscuro. */

    box-shadow: none !important; /* Elimina sombras adicionales. */

} /* Fin estilo botón eliminar agenda. */

.agenda-delete-btn:hover { /* Mantiene el estilo rojo al pasar el ratón. */

    background: #ffe8e8 !important; /* Oscurece ligeramente el fondo rojo. */

    border-color: #de8f89 !important; /* Mantiene el borde rojo al hacer hover. */

    color: #a61f1a !important; /* Oscurece ligeramente el texto rojo. */

    box-shadow: none !important; /* Evita sombras al hacer hover. */

    transform: none !important; /* Evita desplazamientos al hacer hover. */

} /* Fin hover eliminar modo noche */

.agenda-detail-readonly { /* Caja grande de detalle de actividad */

    border-left: 5px solid #8fb3e6; /* Añade barra lateral como los eventos */

    border-radius: 10px; /* Redondea suavemente el detalle */

    padding: 16px; /* Añade espacio interior */

    color: #172334; /* Texto oscuro legible sobre colores pastel */

} /* Fin detalle actividad */

.agenda-detail-readonly h3 { /* Título del detalle */

    margin: 0 0 8px 0; /* Separa el título del horario */

    font-size: 22px; /* Hace el título grande */

    font-weight: 900; /* Hace el título destacado */

    text-transform: none !important; /* Muestra el título tal cual se escribió, igual que en la cuadrícula del calendario */

} /* Fin título detalle */

.agenda-detail-time { /* Horario del detalle */

    margin-bottom: 16px; /* Separa horario del contenido */

    font-size: 13px; /* Tamaño del horario */

    font-weight: 900; /* Horario destacado */

    color: #2f5f9f; /* Azul suave de la app */

} /* Fin horario detalle */

.agenda-detail-section { /* Cada sección del detalle */

    margin-top: 14px; /* Separa secciones */

} /* Fin sección detalle */

.agenda-detail-section h4 { /* Títulos Descripció y Enllaços */

    margin: 0 0 8px 0; /* Separa título del contenido */

    font-size: 12px; /* Tamaño pequeño */

    font-weight: 900; /* Texto fuerte */

    text-transform: uppercase; /* Títulos en mayúsculas */

    color: #172334; /* Texto oscuro */

} /* Fin títulos detalle */

.agenda-detail-section p { /* Texto de descripción y enlaces vacíos dentro del detalle del evento */

    margin: 0; /* Quita márgenes extra */

    line-height: 1.5; /* Mejora la lectura */

    font-size: 14px; /* Mantiene un tamaño cómodo */

    color: #172334; /* Mantiene el texto oscuro */

    font-weight: 400 !important; /* Quita la negrita heredada del contenido */

} /* Fin detalle modo noche */

button:focus { /* Quita el borde negro que queda al cerrar con ESC */

    outline: none !important; /* Elimina el contorno negro del navegador */

} /* Fin quitar focus de botones */

button:focus-visible { /* Quita el borde negro visible en botones */

    outline: none !important; /* Elimina el contorno visible del foco */

    box-shadow: none !important; /* Elimina sombras de foco si aparecen */

} /* Fin hover navegación agenda modo noche. */

.agenda-now-line { /* Línea que indica la hora actual dentro de la agenda. */

    position: absolute; /* Permite posicionarla dentro de la tabla de la agenda. */

    left: 74px; /* Empieza después de la columna de horas. */

    right: 0; /* Llega hasta el final de los días. */

    height: 2px; /* Grosor de la línea. */

    background: #e74c3c; /* Color rojo. */

    z-index: 200; /* Queda por encima de la cuadrícula. */

    pointer-events: none; /* No bloquea clics. */

}

.agenda-now-dot { /* Punto de la línea de hora actual. */

    position: absolute; /* Permite colocarlo al inicio de la línea. */

    width: 10px; /* Anchura del punto. */

    height: 10px; /* Altura del punto. */

    border-radius: 50%; /* Forma circular. */

    background: #e74c3c; /* Color rojo. */

    left: -5px; /* Lo centra al inicio de la línea. */

    top: -4px; /* Lo centra verticalmente sobre la línea. */

}

.student-table-name-btn { /* Botón del nombre del alumno dentro de la tabla de notas */
    font-weight: 650 !important; /* Hace que el nombre del alumno no salga tan en negrita */
}

/* ========================================================= */
/* RÚBRICA (subgrupo 3: selector de grupo) — bloque único y consolidado */
/* ========================================================= */

.rubric-group-btn { /* Botón evaluar grupo */
    flex-shrink: 0; /* Evita que el botón se comprima */
    display: inline-flex !important; /* Coloca icono y texto en la misma línea */
    align-items: center !important; /* Centra verticalmente icono y texto */
    gap: 8px !important; /* Separa el icono del texto */
}

.rubric-group-modal { /* Contenedor del selector de grupo */
    display: flex; /* Organiza el contenido en vertical */
    flex-direction: column; /* Apila aviso, lista y botones */
    gap: 12px; /* Separa bloques */
}

.rubric-group-list { /* Lista de alumnos del grupo */
    max-height: 360px; /* Limita altura */
    overflow-y: auto; /* Permite scroll si hay muchos alumnos */
    display: flex; /* Lista vertical */
    flex-direction: column; /* Un alumno debajo de otro */
    gap: 8px; /* Separación entre alumnos */
}

.rubric-group-student { /* Tarjeta de alumno seleccionable */

    display: grid; /* Organiza checkbox, nombre y check */

    grid-template-columns: 24px 1fr 28px; /* Checkbox, nombre y check visual */

    align-items: center; /* Centra verticalmente */

    gap: 12px; /* Separa elementos */

    padding: 14px 16px; /* Hace la tarjeta más cómoda */

    border: 1px solid var(--border); /* Borde suave */

    border-radius: 8px !important; /* Reduce el redondeo de cada alumno en AVALUAR GRUP */

    background: #f8fbff; /* Fondo claro */

    cursor: pointer; /* Indica que se puede pulsar */

    transition: all .15s ease; /* Animación suave */
}

.rubric-group-student:hover { /* Tarjeta al pasar el ratón */

    background: #eef5ff; /* Azul muy suave */

    transform: translateY(-1px); /* Pequeña elevación */
}

.rubric-group-student-selected { /* Tarjeta seleccionada */

    background: #dce9fb !important; /* Fondo azul claro */

    border-color: #2f5f9f !important; /* Borde azul */

    box-shadow: inset 0 0 0 2px #2f5f9f; /* Marco interior azul */
}

.rubric-group-check { /* Check visual de la tarjeta */

    display: none; /* Oculto por defecto */

    color: #2f5f9f; /* Azul corporativo */

    font-size: 22px; /* Tamaño visible */

    font-weight: 900; /* Check grueso */

    text-align: center; /* Centra el check */
}

.rubric-group-student-selected .rubric-group-check { /* Check cuando la tarjeta está seleccionada */

    display: block; /* Muestra el check */
}

.rubric-group-student span { /* Nombre del alumno */

    font-weight: 900; /* Hace el nombre visible */

    color: var(--text); /* Color principal */

    text-transform: uppercase; /* Mantiene formato de lista */

    min-width: 0; /* Evita desbordes */
}

.rubric-group-student input { /* Checkbox del grupo */
    width: 18px; /* Ancho del checkbox */
    height: 18px; /* Alto del checkbox */
    padding: 0; /* Quita padding */
}

.rubric-group-search { /* Buscador dentro del selector de grupo */

    height: 40px; /* Altura cómoda */

    border-radius: 8px !important; /* Reduce el redondeo del buscador de alumnos */

    border: 1px solid var(--border); /* Borde suave */

    padding: 0 12px; /* Espacio interior lateral */

    font-size: 14px; /* Texto legible */

    font-weight: 700; /* Texto algo destacado */

    background: white; /* Fondo blanco */
}

.rubric-group-names { /* Lista de alumnos del grupo en la cabecera de rúbrica */

    display: block; /* Pone los nombres debajo del título de grupo */

    margin-top: 4px; /* Separa el grupo de los nombres */

    font-size: 14px; /* Hace los nombres más discretos */

    font-weight: 800; /* Mantiene los nombres visibles */

    color: var(--muted); /* Usa color secundario */

    text-transform: uppercase; /* Mantiene el formato de nombres */
}

.rubric-group-icon { /* Icono de grupo dentro de la nota de rúbrica */
    display: inline-flex !important; /* Permite centrar el emoji como si fuera un elemento propio */
    align-items: center !important; /* Centra verticalmente el emoji dentro de su caja */
    justify-content: center !important; /* Centra horizontalmente el emoji dentro de su caja */
    line-height: 1 !important; /* Evita que el emoji cree altura extra */
    transform: translateY(-2px) !important; /* Baja ligeramente el icono para alinearlo con el número */
} /* Fin del ajuste del icono de grupo */


.term-actions .btn { /* Botones de nueva actividad y calcular nota final */
    height: 40px !important; /* Iguala la altura visual de los dos botones */
    display: flex !important; /* Permite centrar el texto dentro del botón */
    align-items: center !important; /* Centra el texto verticalmente */
    justify-content: center !important; /* Centra el texto horizontalmente */
} /* Fin ajuste botones de trimestre */

.term-actions { /* Barra de acciones del bloque Trimestre i activitats */
    align-items: end !important; /* Mantiene todos los controles alineados por la parte inferior */
} /* Fin ajuste de alineación de la barra */

#btnNewActivity,
#btnOpenWeights { /* Botones Nova activitat y Calcular nota final trimestre */
    height: 40px !important; /* Fuerza la misma altura en ambos botones */
    min-height: 40px !important; /* Evita que uno quede más bajo o más alto que el otro */
    margin-top: 0 !important; /* Elimina desplazamientos superiores */
    margin-bottom: 0 !important; /* Elimina desplazamientos inferiores */
    padding-top: 0 !important; /* Quita padding vertical superior irregular */
    padding-bottom: 0 !important; /* Quita padding vertical inferior irregular */
    display: flex !important; /* Permite centrar el texto dentro del botón */
    align-items: center !important; /* Centra el texto verticalmente */
    justify-content: center !important; /* Centra el texto horizontalmente */
    line-height: 1 !important; /* Evita que el texto modifique la altura visual */
    align-self: end !important; /* Alinea ambos botones exactamente en la misma base */
} /* Fin ajuste de botones */

.bulk-students-row input::placeholder { /* Texto de ayuda dentro de los campos de añadir alumnado */
    color: #9aa8ba !important; /* Hace el texto del placeholder más clarito */
    opacity: 0.65 !important; /* Suaviza todavía más el texto por defecto */
} /* Fin recuadro Mal */

.attendance-top-btn { /* Botón asistencia en seguimiento */
    margin-left: auto !important; /* Lo empuja a la derecha de la cabecera */
} /* Fin botón asistencia */

.attendance-modal { /* Modal de asistencia */
    display: grid; /* Organiza el contenido en vertical */
    gap: 10px; /* Separa bloques */
} /* Fin modal asistencia */

.attendance-student-name { /* Nombre del alumno en asistencia */
    font-size: 18px; /* Hace visible el nombre */
    font-weight: 900; /* Destaca el nombre */
    text-transform: uppercase; /* Mantiene estilo de la app */
} /* Fin nombre alumno */

.attendance-options { /* Grupo de opciones */
    display: grid; /* Organiza botones en columnas */
    grid-template-columns: repeat(3, 1fr); /* Tres opciones iguales */
    gap: 8px; /* Separa botones */
} /* Fin opciones */

.attendance-option { /* Botón de opción */
    min-height: 38px; /* Altura cómoda */
    border-radius: 12px; /* Bordes redondeados */
    border: 1px solid var(--border); /* Borde suave */
    background: #f4f8fe; /* Fondo claro */
    color: #2f5f9f; /* Texto azul */
    font-weight: 900; /* Texto fuerte */
    cursor: pointer; /* Cursor de botón */
} /* Fin opción */

.attendance-option-active { /* Opción seleccionada */
    background: #d8e9ff !important; /* Fondo activo */
    border-color: #2f6fed !important; /* Borde activo */
    color: #174a91 !important; /* Texto activo */
} /* Fin opción activa */

.attendance-history { /* Historial */
    border-top: 1px solid var(--border); /* Separador superior */
    padding-top: 10px; /* Espacio tras separador */
} /* Fin historial */

.attendance-history h3 { /* Título historial */
    margin: 0 0 8px 0; /* Ajusta margen */
    font-size: 14px; /* Tamaño compacto */
    text-transform: uppercase; /* Mayúsculas */
} /* Fin título historial */

.attendance-history-item { /* Registro del historial */
    display: grid; /* Organiza datos */
    grid-template-columns: 100px 1fr 1fr; /* Fecha, asistencia y deberes */
    gap: 8px; /* Separación */
    align-items: center; /* Centrado vertical */
    padding: 8px 10px; /* Espacio interno */
    border: 1px solid var(--border); /* Borde suave */
    border-radius: 12px; /* Bordes redondeados */
    background: #f8fbff; /* Fondo claro */
    margin-bottom: 6px; /* Separación inferior */
} /* Fin registro */

.attendance-history-item small { /* Observación del registro */
    grid-column: 1 / -1; /* Ocupa toda la fila */
    color: var(--muted); /* Texto secundario */
    font-weight: 700; /* Hace visible la nota */
} /* Fin opción activa noche */

.attendance-table-wrap { /* Contenedor de tabla asistencia */
    max-height: 62vh; /* Limita altura */
    overflow: auto; /* Activa scroll */
    border: 1px solid var(--border); /* Añade borde */
    border-radius: 14px; /* Redondea esquinas */
    margin-top: 12px; /* Separa de la fecha */
} /* Fin contenedor asistencia */

.attendance-table { /* Tabla asistencia */
    width: 100%; /* Ocupa todo el ancho */
    border-collapse: collapse; /* Une bordes */
} /* Fin tabla asistencia */

.attendance-table th,
.attendance-table td { /* Celdas asistencia */
    border-bottom: 1px solid var(--border); /* Línea inferior */
    padding: 8px; /* Espacio interno */
    text-align: center; /* Centra contenido */
} /* Fin celdas */

.attendance-table th { /* Cabecera asistencia */
    background: #f4f7fb; /* Fondo cabecera */
    font-weight: 900; /* Texto fuerte */
    text-transform: uppercase; /* Mayúsculas */
} /* Fin cabecera */

.attendance-table td:first-child { /* Nombre alumno */
    text-align: center; /* Alinea nombres a la izquierda */
    font-weight: 900; /* Destaca nombres */
} /* Fin columna alumno */

.attendance-table input[type="checkbox"] { /* Checkboxes de asistencia y deberes */
    width: 22px !important; /* Hace el checkbox más visible */
    height: 22px !important; /* Hace el checkbox más cómodo */
    cursor: pointer; /* Muestra cursor de botón */
    accent-color: #2f6fed; /* Usa el azul principal al marcar */
} /* Fin checkboxes asistencia */

.attendance-table th,
.attendance-table td { /* Centra todas las columnas de asistencia */
    text-align: center !important; /* Centra cabeceras y celdas */
} /* Fin centrado asistencia */

.attendance-table td:first-child { /* Columna de alumnos en asistencia */
    text-align: center !important; /* Centra también los nombres */
    font-weight: 600 !important; /* Quita negrita excesiva */
} /* Fin columna alumnos asistencia */

.attendance-table td:nth-child(2),
.attendance-table td:nth-child(3) { /* Columnas de checkbox de asistencia y deberes */
    text-align: center !important; /* Centra la celda completa */
    vertical-align: middle !important; /* Centra verticalmente el checkbox */
} /* Fin columnas checkbox */

.attendance-table input[type="checkbox"] { /* Checkboxes de asistencia */
    display: block !important; /* Permite centrar con margen automático */
    margin: 0 auto !important; /* Centra el checkbox horizontalmente */
} /* Fin centrado checkbox */

.attendance-summary { /* Resumen debajo del gráfico */
    display: grid; /* Coloca asistencia y deberes en columnas */
    grid-template-columns: 1fr 1fr; /* Dos cajas iguales */
    gap: 10px; /* Separación */
    margin-top: 8px; /* Separación respecto al gráfico */
} /* Fin resumen */

.attendance-summary-box { /* Caja de porcentaje */
    border: 1px solid var(--border); /* Borde suave */
    border-radius: 14px; /* Bordes redondeados */
    background: #f8fbff; /* Fondo claro */
    padding: 10px; /* Espacio interno */
    text-align: center; /* Centra contenido */
} /* Fin caja */

.attendance-summary-box span { /* Título de caja */
    display: block; /* Línea propia */
    font-size: 11px; /* Tamaño pequeño */
    font-weight: 900; /* Texto fuerte */
    text-transform: uppercase; /* Mayúsculas */
    color: var(--muted); /* Color secundario */
} /* Fin título */

.attendance-summary-box strong { /* Porcentaje */
    display: block; /* Línea propia */
    font-size: 24px; /* Número grande */
    font-weight: 900; /* Muy visible */
    color: var(--text); /* Color principal */
    margin-top: 2px; /* Separación */
} /* Fin porcentaje */

.attendance-summary-box small { /* Contador */
    display: block; /* Línea propia */
    font-size: 11px; /* Tamaño pequeño */
    font-weight: 800; /* Visible */
    color: var(--muted); /* Color secundario */
} /* Fin noche */

.attendance-summary { /* Resumen compacto debajo del gráfico */
    gap: 8px !important; /* Reduce separación entre cajas */
    margin-top: 6px !important; /* Reduce separación con el gráfico */
} /* Fin resumen compacto */

.attendance-summary-box { /* Caja compacta de asistencia/deberes */
    padding: 6px 8px !important; /* Reduce altura interior */
    border-radius: 12px !important; /* Mantiene esquinas suaves */
} /* Fin caja compacta */

.attendance-summary-box span { /* Título compacto */
    font-size: 10px !important; /* Reduce título */
    line-height: 1.1 !important; /* Compacta altura */
} /* Fin título compacto */

.attendance-summary-box strong { /* Porcentaje compacto */
    font-size: 18px !important; /* Reduce número principal */
    line-height: 1.05 !important; /* Compacta altura */
    margin-top: 1px !important; /* Reduce separación */
} /* Fin porcentaje compacto */

.attendance-summary-box small { /* Contador compacto */
    font-size: 10px !important; /* Reduce contador */
    line-height: 1.1 !important; /* Compacta altura */
} /* Fin contador compacto */

.attendance-summary-box span { /* Título ATTENDANCE/HOMEWORK del resumen */
    font-size: 9px !important; /* Mantiene el tamaño compacto actual */
    font-weight: 700 !important; /* Hace ATTENDANCE y HOMEWORK más gruesos */
    letter-spacing: 0.02em !important; /* Da un poco más de presencia al texto */
} /* Fin título ATTENDANCE/HOMEWORK */

.attendance-summary-box strong { /* Porcentaje más limpio */
    font-size: 16px !important;
    font-weight: 700 !important;
}

.attendance-summary-box small { /* Contador más discreto */
    font-size: 9px !important;
    font-weight: 700 !important;
}

/* ========================================================= */ /* Separador visual del bloque */
 /* BOTONES DE ELIMINAR SUAVIZADOS */ /* Título del bloque */
 /* ========================================================= */ /* Separador visual del bloque */

button.danger-icon-btn, /* Suaviza botones principales de eliminar */
button.delete-btn, /* Suaviza botones pequeños de borrar */
button.activity-delete-btn, /* Suaviza botones de eliminar actividades */
button.comment-delete-btn, /* Suaviza botones de eliminar comentarios */
button.agenda-delete-btn, /* Suaviza botones de eliminar agenda */
button.rubric-delete-btn, /* Suaviza botones de eliminar rúbrica */
button.danger-confirm-btn, /* Suaviza botones de confirmación de eliminar */
#modalClose, /* Suaviza la X de cierre del modal */
.sub-modal-card .modal-header button, /* Suaviza la X de cierre de subventanas */
.modal-actions .btn.btn-calculate[onclick*="delete"], /* Suaviza botones eliminar en modales */
.modal-actions .btn.btn-calculate[onclick*="Delete"], /* Suaviza botones Delete en modales */
.modal-actions .btn.btn-calculate[onclick*="confirm"] { /* Suaviza botones confirm en modales */
    background: transparent !important; /* Hace el fondo completamente transparente manteniendo el borde */
    color: #9f4b4b !important; /* Mantiene rojo suave para indicar acción peligrosa */
    border: 1px solid #d8c7c7 !important; /* Usa borde rosado grisáceo discreto */
	border-radius: 8px !important; /* Fuerza el mismo redondeo profesional para todas las X de los modales */
    box-shadow: none !important; /* Elimina sombras llamativas */
    transform: none !important; /* Evita zoom o movimiento */
} /* Fin botones eliminar modo día */

button.danger-icon-btn:hover, /* Hover de botones principales de eliminar */
button.delete-btn:hover, /* Hover de botones pequeños de borrar */
button.activity-delete-btn:hover, /* Hover de botones de eliminar actividades */
button.comment-delete-btn:hover, /* Hover de botones de eliminar comentarios */
button.agenda-delete-btn:hover, /* Hover de botones de eliminar agenda */
button.rubric-delete-btn:hover, /* Hover de botones de eliminar rúbrica */
button.danger-confirm-btn:hover, /* Hover de botones de confirmación de eliminar */
#modalClose:hover, /* Hover de la X de cierre del modal */
.sub-modal-card .modal-header button:hover, /* Hover de la X de subventanas */
.modal-actions .btn.btn-calculate[onclick*="delete"]:hover, /* Hover de botones eliminar en modales */
.modal-actions .btn.btn-calculate[onclick*="Delete"]:hover, /* Hover de botones Delete en modales */
.modal-actions .btn.btn-calculate[onclick*="confirm"]:hover { /* Hover de botones confirm en modales */
    background: #f1f3f7 !important; /* Oscurece muy poco el fondo en modo día */
    color: #8d3030 !important; /* Refuerza ligeramente el rojo en hover */
    border-color: #c9aaaa !important; /* Marca un poco más el borde en hover */
    box-shadow: none !important; /* Mantiene el hover limpio */
    transform: none !important; /* Evita zoom o movimiento */
} /* Fin hover botones eliminar modo noche */

.session-logout { /* Aplica al botón de cerrar sesión el mismo estilo danger suave del modo día */
    background: #f7f9fc !important; /* Usa fondo gris claro integrado con la estética de día */
    color: #9f4b4b !important; /* Mantiene una señal rojiza suave de acción sensible */
    border: 1px solid #d8c7c7 !important; /* Usa borde rosado grisáceo discreto */
    box-shadow: none !important; /* Elimina sombras llamativas */
    transform: none !important; /* Evita zoom o movimiento */
	white-space: nowrap !important; /* Evita que TANCAR SESSIÓ se parta o baje de línea */
} /* Fin estilo cerrar sesión modo día */

.session-logout:hover { /* Aplica hover suave al botón de cerrar sesión en modo día */
    background: #f1f3f7 !important; /* Oscurece muy poco el fondo al pasar el ratón */
    color: #8d3030 !important; /* Refuerza ligeramente el rojo en hover */
    border-color: #c9aaaa !important; /* Marca un poco más el borde en hover */
    box-shadow: none !important; /* Mantiene el hover limpio */
    transform: none !important; /* Evita zoom o movimiento */
} /* Fin hover cerrar sesión modo noche */

.rubric-empty-plus { /* Aplica estilo únicamente al símbolo + de rúbricas sin nota */
    font-weight: 900 !important; /* Hace el símbolo mucho más grueso */
    font-family: Arial Black, Arial, sans-serif !important; /* Usa una fuente muy gruesa */
    font-size: 20px !important; /* Aumenta ligeramente el tamaño para que se perciba mejor */
    line-height: 1 !important; /* Mantiene el símbolo centrado verticalmente */
} /* Fin estilo del símbolo + */

.grades-table .rubric-grade-btn .rubric-empty-plus,
.grades-table .checklist-grade-btn .rubric-empty-plus { /* Iguala ambos al tamaño pequeño (15px), que es el que ya tenía rúbrica y el que se prefiere visualmente. */
    font-size: 15px !important;
    font-weight: 900 !important;
    font-family: Arial Black, Arial, sans-serif !important;
    line-height: 1 !important;
}

/* ========================================================= */ /* Separador visual del bloque */
 /* BOTONES CON FONDO TRANSPARENTE */ /* Título del bloque */
 /* ========================================================= */ /* Separador visual del bloque */

button, /* Aplica transparencia a todos los botones nativos */
.btn, /* Aplica transparencia a botones principales */
.btn-calculate, /* Aplica transparencia a botones de acción */
.btn-secondary, /* Aplica transparencia a botones secundarios */
.icon-btn, /* Aplica transparencia a botones de icono */
.primary-icon-btn, /* Aplica transparencia a iconos principales */
.secondary-icon-btn, /* Aplica transparencia a iconos secundarios */
.danger-icon-btn, /* Aplica transparencia a botones de eliminar */
.delete-btn, /* Aplica transparencia a botones pequeños de borrar */
.activity-edit-btn, /* Aplica transparencia a botones de editar actividad */
.activity-delete-btn, /* Aplica transparencia a botones de eliminar actividad */
.comment-edit-btn, /* Aplica transparencia a botones de editar comentario */
.comment-delete-btn, /* Aplica transparencia a botones de eliminar comentario */
.column-filter-btn, /* Aplica transparencia a botones de filtro */
.student-dropdown-button, /* Aplica transparencia al selector de alumno */
.student-table-name-btn, /* Aplica transparencia al botón del nombre del alumno */
.session-backup, /* Aplica transparencia a botones de copia */
.session-logout, /* Aplica transparencia a cerrar sesión */
.register-top-btn, /* Aplica transparencia a crear usuario */
.register-back-btn, /* Aplica transparencia a volver al login */
.backup-file-label, /* Aplica transparencia a seleccionar archivo */
#modalClose { /* Aplica transparencia a la X del modal */
    background: transparent !important; /* Quita el fondo del botón */
    background-color: transparent !important; /* Refuerza el fondo transparente */
    background-image: none !important; /* Elimina posibles degradados */
    box-shadow: none !important; /* Elimina sombras que parezcan fondo */
} /* Fin botones transparentes */

button:hover, /* Mantiene transparente el hover */
.btn:hover, /* Mantiene transparente el hover */
.btn-calculate:hover, /* Mantiene transparente el hover */
.btn-secondary:hover, /* Mantiene transparente el hover */
.icon-btn:hover, /* Mantiene transparente el hover */
.primary-icon-btn:hover, /* Mantiene transparente el hover */
.secondary-icon-btn:hover, /* Mantiene transparente el hover */
.danger-icon-btn:hover, /* Mantiene transparente el hover */
.delete-btn:hover, /* Mantiene transparente el hover */
.activity-edit-btn:hover, /* Mantiene transparente el hover */
.activity-delete-btn:hover, /* Mantiene transparente el hover */
.comment-edit-btn:hover, /* Mantiene transparente el hover */
.comment-delete-btn:hover, /* Mantiene transparente el hover */
.column-filter-btn:hover, /* Mantiene transparente el hover */
.student-dropdown-button:hover, /* Mantiene transparente el hover */
.student-table-name-btn:hover, /* Mantiene transparente el hover */
.session-backup:hover, /* Mantiene transparente el hover */
.session-logout:hover, /* Mantiene transparente el hover */
.register-top-btn:hover, /* Mantiene transparente el hover */
.register-back-btn:hover, /* Mantiene transparente el hover */
.backup-file-label:hover, /* Mantiene transparente el hover */
#modalClose:hover { /* Mantiene transparente el hover */
    background: transparent !important; /* Evita que vuelva el fondo al pasar el ratón */
    background-color: transparent !important; /* Refuerza transparencia en hover */
    background-image: none !important; /* Elimina degradados en hover */
    box-shadow: none !important; /* Elimina sombras en hover */
} /* Fin hover transparente */

/* ========================================================= */ /* Separador visual */
/* X Y BOTONES DE ELIMINAR TOTALMENTE TRANSPARENTES */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

button[class*="delete"], /* Selecciona cualquier botón cuya clase contenga delete */
button[class*="danger"], /* Selecciona cualquier botón cuya clase contenga danger */
button[onclick*="delete"], /* Selecciona cualquier botón que ejecute una función delete */
button[onclick*="Delete"], /* Selecciona cualquier botón que ejecute una función Delete */
.delete-btn, /* Selecciona botones pequeños de eliminar */
.danger-icon-btn, /* Selecciona botones rojos de eliminar */
.activity-delete-btn, /* Selecciona botones de eliminar actividad */
.comment-delete-btn, /* Selecciona botones de eliminar comentario */
.student-delete-top-btn, /* Selecciona botón eliminar alumno */
.term-delete-btn, /* Selecciona botón eliminar trimestre */
#btnDeleteClass, /* Selecciona botón eliminar clase */
#btnDeleteStudent, /* Selecciona botón eliminar alumno */
#btnDeleteTerm, /* Selecciona botón eliminar trimestre */
#modalClose { /* Selecciona botón cerrar modal */
    background: transparent !important; /* Quita cualquier fondo */
    background-color: transparent !important; /* Quita cualquier color de fondo */
    background-image: none !important; /* Quita degradados o imágenes de fondo */
    box-shadow: none !important; /* Quita sombras internas o externas */
}

button[class*="delete"]:hover, /* Mantiene transparente al pasar el ratón */
button[class*="danger"]:hover, /* Mantiene transparente al pasar el ratón */
button[onclick*="delete"]:hover, /* Mantiene transparente al pasar el ratón */
button[onclick*="Delete"]:hover, /* Mantiene transparente al pasar el ratón */
.delete-btn:hover, /* Mantiene transparente al pasar el ratón */
.danger-icon-btn:hover, /* Mantiene transparente al pasar el ratón */
.activity-delete-btn:hover, /* Mantiene transparente al pasar el ratón */
.comment-delete-btn:hover, /* Mantiene transparente al pasar el ratón */
.student-delete-top-btn:hover, /* Mantiene transparente al pasar el ratón */
.term-delete-btn:hover, /* Mantiene transparente al pasar el ratón */
#btnDeleteClass:hover, /* Mantiene transparente al pasar el ratón */
#btnDeleteStudent:hover, /* Mantiene transparente al pasar el ratón */
#btnDeleteTerm:hover, /* Mantiene transparente al pasar el ratón */
#modalClose:hover { /* Mantiene transparente al pasar el ratón */
    background: transparent !important; /* Evita que vuelva el fondo */
    background-color: transparent !important; /* Evita que vuelva el color de fondo */
    background-image: none !important; /* Evita que vuelva el degradado */
    box-shadow: none !important; /* Evita que vuelva la sombra */
}


/* ========================================================= */ /* Separador visual */
/* HOVER DE OPCIONES EN SELECTORES PERSONALIZADOS */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

.student-dropdown-option:hover, /* Opción del selector de alumno al pasar el cursor */
.pretty-select-option:hover, /* Opción de selectores visuales al pasar el cursor */
.pretty-option:hover, /* Opción alternativa de selectores visuales al pasar el cursor */
.column-filter-option:hover { /* Opción de filtros al pasar el cursor */
    background: #eef5ff !important; /* Recupera el sombreado azul suave */
    background-color: #eef5ff !important; /* Refuerza el fondo azul suave */
    color: #234f86 !important; /* Da contraste azul al texto */
} /* Fin hover opciones */

.student-dropdown-option, /* Opción normal del selector de alumno */
.pretty-select-option, /* Opción normal de selectores visuales */
.pretty-option, /* Opción alternativa de selectores visuales */
.column-filter-option { /* Opción normal de filtros */
    transition: background-color 0.15s ease, color 0.15s ease !important; /* Suaviza el cambio al pasar el cursor */
} /* Fin transición opciones */

/* ========================================================= */ /* Separador visual */
/* LAYOUT CLASSE ACTIVA ALINEADO CON LAS TARJETAS */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

.top-class-tools { /* Contenedor de Classe activa */
    background: #ffffff !important; /* Fondo blanco de la tarjeta */
    border: 1px solid #d3deec !important; /* Borde suave igual que los paneles */
    border-radius: 18px !important; /* Esquinas redondeadas */
    padding: 12px 14px !important; /* Espacio interior del layout */
    box-shadow: none !important; /* Mantiene el diseño plano */
    align-items: flex-end !important; /* Alinea selector y botones abajo */
    margin-left: -4px !important; /* Iguala la separación izquierda de las tarjetas inferiores */
} /* Fin layout Classe activa */

.top-class-field { /* Campo del selector de clase */
    width: 190px !important; /* Mantiene el ancho actual del selector */
    margin: 0 !important; /* Elimina márgenes extra */
} /* Fin campo Classe activa */

.top-class-tools .icon-btn { /* Botones editar, crear y eliminar clase */
    background: transparent !important; /* Mantiene fondo transparente */
    height: 38px !important; /* Ajusta altura al selector */
    width: 38px !important; /* Ajusta anchura al selector */
} /* Fin botones Classe activa */

/* ========================================================= */ /* Separador visual */
/* LAYOUTS MENOS REDONDEADOS */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

.card, /* Tarjetas principales */
.side-panel, /* Paneles laterales */
.comment-write-card, /* Layout de nuevo comentario */
.top-class-tools, /* Layout de Classe activa */
.modal-card { /* Layout de ventanas modales */
    border-radius: 12px !important; /* Reduce solo el redondeado de layouts grandes */
} /* Fin layouts menos redondeados */

/* ========================================================= */ /* Separador visual */
/* TEXTO CONDICIÓ MÁS CLARO */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

#studentConditionInput { /* Campo Sense condició especial */
    color: #9aa8ba !important; /* Hace el texto mucho más claro */
    font-weight: 600 !important; /* Reduce un poco la fuerza visual */
} /* Fin campo condición */

/* ========================================================= */ /* Separador visual */
/* AJUSTE ESTÉTICO SUAVE GENERAL */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

.card, /* Tarjetas principales */
.comment-write-card, /* Tarjeta de nuevo comentario */
.top-class-tools { /* Caja de classe activa */
    border-color: #dbe5f2 !important; /* Bordes más suaves */
} /* Fin bordes suaves */

.card-header h2, /* Títulos de tarjetas */
.section-title-row h3, /* Subtítulos internos */
.term-title-left h2 { /* Título de trimestre */
    color: #10233f !important; /* Azul oscuro más elegante */
    letter-spacing: .03em !important; /* Ligero aire entre letras */
} /* Fin títulos */

.grades-table th, /* Cabeceras de tabla */
.grades-table td { /* Celdas de tabla */
    border-color: #e2eaf5 !important; /* Líneas de tabla más suaves */
} /* Fin tabla */

.grades-table tbody tr:nth-child(even) { /* Filas pares de la tabla */
    background: #fcfdff !important; /* Alternancia más suave */
} /* Fin filas pares */

.grades-table tbody tr:hover { /* Fila al pasar el ratón */
    background: #eef6ff !important; /* Hover suave de tabla */
} /* Fin hover tabla */

.compact-hero h1 { /* Título principal */
    font-size: 40px !important; /* Reduce ligeramente el tamaño del título */
    letter-spacing: .08em !important; /* Hace el título más premium */
} /* Fin título principal */

input, /* Inputs */
select, /* Selectores */
textarea, /* Textareas */
.student-dropdown-button, /* Selector de alumno */
.pretty-select { /* Selectores personalizados */
    border-color: #d4dfed !important; /* Bordes de campos más suaves */
} /* Fin campos */

/* ========================================================= */ /* Separador visual */
/* ESTÉTICA MÁS PROFESIONAL: REDONDEO MÁS SOBRIO */ /* Título del bloque */
/* ========================================================= */ /* Separador visual */

.card, /* Tarjetas principales */
.side-panel, /* Paneles laterales */
.comment-write-card, /* Tarjeta de nuevo comentario */
.top-class-tools, /* Caja de classe activa */
.modal-card, /* Ventanas modales */
.login-card { /* Tarjeta de login */
    border-radius: 10px !important; /* Reduce el redondeo de los layouts principales */
} /* Fin layouts principales */

.btn, /* Botones generales */
.icon-btn, /* Botones cuadrados con icono */
.delete-btn, /* Botones de eliminar */
.activity-delete-btn, /* Botón eliminar actividad */
.activity-edit-btn, /* Botón editar actividad */
.comment-delete-btn, /* Botón eliminar comentario */
.comment-edit-btn, /* Botón editar comentario */
.btn-report, /* Botón generar informe */
.btn-report-settings, /* Botón configuración informe */
.session-logout, /* Botón cerrar sesión */
.session-backup, /* Botones guardar e importar copia */
.agenda-nav-btn, /* Botones navegación agenda */
.agenda-delete-btn { /* Botón borrar agenda */
    border-radius: 8px !important; /* Reduce el redondeo de todos los botones */
} /* Fin botones */

input, /* Campos de texto */
select, /* Selectores normales */
textarea, /* Áreas de texto */
.student-dropdown-button, /* Selector de alumnado */
.student-dropdown-menu, /* Menú desplegable de alumnado */
.pretty-select, /* Selector visual personalizado */
.pretty-select-menu, /* Menú del selector visual */
.column-filter-menu, /* Menú de filtros */
.agenda-time-picker-btn, /* Botón selector de hora */
.agenda-time-picker-menu { /* Menú selector de hora */
    border-radius: 8px !important; /* Reduce el redondeo de campos y desplegables */
} /* Fin campos y selectores */

.table-wrap, /* Contenedor de tabla de notas */
.grades-table, /* Tabla de notas */
.bulk-students-table, /* Tabla para añadir alumnado */
.attendance-table-wrap { /* Tabla de asistencia */
    border-radius: 8px !important; /* Reduce el redondeo de las tablas */
} /* Fin tablas */

.student-chart, /* Gráfica individual */
.history-item, /* Comentarios del historial */
.objective-item, /* Objetivos del alumno */
.notice, /* Avisos */
.attendance-summary-box, /* Cajas de asistencia/deberes */
.agenda-event, /* Eventos de agenda */
.agenda-detail-readonly { /* Detalle de evento de agenda */
    border-radius: 8px !important; /* Reduce el redondeo de cajas internas */
} /* Fin cajas internas */

.comment-edit-btn, /* Botón editar comentario */
.comment-delete-btn { /* Botón eliminar comentario */

    width: 34px !important; /* Hace el botón ligeramente rectangular */

    min-width: 34px !important; /* Evita que se comprima */

    height: 28px !important; /* Mantiene una altura compacta */

    border-radius: 6px !important; /* Da esquinas suaves en lugar de forma circular */

} /* Fin botones editar y eliminar comentarios */

#btnAgenda, /* Botón principal de la agenda */
.agenda-main-btn, /* Clase específica del botón de agenda */
.premium-main-btn.agenda-main-btn { /* Selector combinado para ganar prioridad */

    border-radius: 8px !important; /* Reduce el redondeo del botón de agenda */

} /* Fin ajuste botón agenda */

.term-select-box .pretty-select-button { /* Botón visible del selector de trimestre */

    border-radius: 8px !important; /* Fuerza un redondeo más discreto en el selector */

} /* Fin selector de trimestre */

.top-class-field .pretty-select-button { /* Botón visible del selector de clase activa */

    border-radius: 8px !important; /* Fuerza un redondeo más discreto en el selector */

} /* Fin selector de clase activa */

#prettyExpandedTermSelect .pretty-select-button, /* Botón visible del selector de trimestre en tabla ampliada */
#prettyExpandedSortSelect .pretty-select-button { /* Botón visible del selector ordenar en tabla ampliada */

    border-radius: 8px !important; /* Reduce el redondeo para igualarlo al resto de selectores */

} /* Fin selectores de la tabla ampliada */

.student-condition-field input { /* Campo visual de la condición del alumno */

    height: 38px !important; /* Iguala la altura con el selector de alumno */

    min-height: 38px !important; /* Evita que otros estilos lo hagan más bajo */

    display: flex !important; /* Permite centrar el contenido */

    align-items: center !important; /* Centra el texto verticalmente */

} /* Fin campo condición */

.backup-file-label { /* Botón Seleccionar fitxer del modal de importar copia */

    border-radius: 8px !important; /* Fuerza el mismo redondeo que el resto de botones de la aplicación */

} /* Fin botón Seleccionar fitxer */

#btnNewObjective, /* Botón añadir objetivo */
#btnGenerateReport, /* Botón Generar informe */
#btnReportSettings { /* Botón configuración del informe */

    border-radius: 8px !important; /* Iguala el redondeo al resto de botones de la aplicación */

} /* Fin botones de objetivos e informes */

.main-title-row h1, /* Título principal CUADERN DOCENT */
.compact-hero .main-title-row h1, /* Título dentro de la cabecera compacta */
header.hero.compact-hero .main-title-row h1 { /* Selector más específico para ganar prioridad */

    letter-spacing: -0.00em !important; /* Junta más las letras del título principal */

} /* Fin ajuste espaciado título */

.objective-item .icon-btn, /* Botón editar objetivo */
.objective-item .danger-icon-btn, /* Botón eliminar objetivo */
.objective-actions button { /* Botones de acciones del objetivo */

    width: 28px !important; /* Fuerza un ancho cuadrado */

    height: 28px !important; /* Fuerza una altura cuadrada */

    min-width: 28px !important; /* Evita que se ensanche */

    padding: 0 !important; /* Elimina el padding horizontal extra */

    display: flex !important; /* Permite centrar el icono */

    align-items: center !important; /* Centra verticalmente el icono */

    justify-content: center !important; /* Centra horizontalmente el icono */

} /* Fin botones de acciones de objetivos */

.login-language-switcher button,
.login-card .register-top-btn {
    border-radius: 8px !important;
}

.login-card {
    border-radius: 8px !important;
}

/* FONDO GENERAL MÁS LIMPIO */
body {
    background:
        radial-gradient(circle at top center, #ffffff 0%, #f6f9fd 45%, #eef4fb 100%) !important;
}

/* CONTENEDOR PRINCIPAL */
.main {
    background: transparent !important;
}

/* LAYOUTS / TARJETAS PRINCIPALES */
.card,
.login-card,
.session-box,
.top-class-tools,
.comment-write-card,
.student-follow-panel {
    background: rgba(255, 255, 255, 0.88) !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: 0 8px 24px rgba(31, 58, 92, 0.08) !important;
}

/* TARJETAS INTERNAS MÁS SUAVES */
.table-wrap,
.student-chart,
.attendance-summary-box,
.objective-item,
.history-item,
.notice {
    background: rgba(255, 255, 255, 0.72) !important;
    border: 1px solid #dbe7f5 !important;
    border-radius: 8px !important;
    box-shadow: 0 4px 14px rgba(31, 58, 92, 0.05) !important;
}

/* SEPARACIÓN VISUAL MÁS FINA */
.dashboard-columns {
    gap: 12px !important;
}

.dashboard-column {
    gap: 10px !important;
}

/* HEADER MÁS LIMPIO */
.hero {
    background: transparent !important;
}

/* MEJORA VISUAL DEL BLOQUE NOU COMENTARI */
.comment-write-card {
    margin-top: 2px !important;
    padding: 16px !important;
    border-radius: 8px !important;
    background: rgba(255, 255, 255, 0.92) !important;
    border: 1px solid #d9e4f2 !important;
    box-shadow: 0 8px 24px rgba(31, 58, 92, 0.07) !important;
}

/* CABECERA DEL COMENTARIO */
.comment-write-card .card-header {
    margin-bottom: 10px !important;
    align-items: center !important;
}

/* TÍTULO */
.comment-write-card h2 {
    font-size: 15px !important;
    letter-spacing: 0.02em !important;
}

/* NOMBRE DEL ALUMNO A LA DERECHA */
#commentSelectedStudentName {
    color: #607086 !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    margin-left: auto !important;
}

/* TEXTAREA MÁS LIMPIO */
.comment-write-card textarea {
    height: 96px !important;
    min-height: 96px !important;
    max-height: 96px !important;
    border-radius: 8px !important;
    background: #fbfdff !important;
    border: 1px solid #d9e4f2 !important;
    box-shadow: inset 0 1px 3px rgba(31, 58, 92, 0.04) !important;
}

/* IGUALAR TAMAÑO VISUAL DEL +, LÁPIZ Y X */

#btnEditStudent,
#btnDeleteStudent,
#btnNewClass,
#btnEditClass,
#btnDeleteClass,
#btnEditTerm,
#btnDeleteTerm {
    width: 38px !important;
    height: 38px !important;
    min-width: 38px !important;
    min-height: 38px !important;
    padding: 0 !important;

    display: flex !important;
    align-items: center !important;
    justify-content: center !important;

    line-height: 1 !important;
    font-family: var(--app-font) !important; /* Usa la misma fuente global de la app en todos los botones de icono */
    border-radius: 8px !important;
}

/* El + necesita verse un poco más grande */
#btnNewClass {
    font-size: 20px !important;
    font-weight: 800 !important;
}

/* La X visualmente pesa más, por eso la bajamos */
#btnDeleteStudent,
#btnDeleteClass,
#btnDeleteTerm {
    font-size: 20px !important;
    font-weight: 800 !important;
}

/* El lápiz equilibrado */
#btnEditStudent,
#btnEditClass,
#btnEditTerm {
    font-size: 20px !important;
    font-weight: 800 !important;
}

/* BLOQUE USUARIO SUPERIOR DERECHO */

.top-login-tools {
    align-items: flex-start !important;
}

.session-box { /* Caja superior derecha con nombre arriba y botones abajo */
    background: rgba(255, 255, 255, 0.92) !important; /* Mantiene el fondo blanco suave de la caja */
    border: 1px solid #d9e4f2 !important; /* Mantiene el borde azul claro */
    border-radius: 8px !important; /* Mantiene las esquinas redondeadas */
    box-shadow: 0 8px 24px rgba(31, 58, 92, 0.07) !important; /* Mantiene la sombra suave */
    padding: 10px 12px !important; /* Mantiene espacio interior */
    display: grid !important; /* Permite organizar el contenido en filas */
    grid-template-columns: auto auto auto auto !important; /* Crea columnas para admin, guardar, importar y cerrar sesión (agenda está oculto con display:none) */
    grid-template-rows: auto auto !important; /* Crea dos filas: nombre arriba y botones abajo */
    gap: 8px !important; /* Separa filas y botones */
    align-items: center !important; /* Centra verticalmente los elementos */
    justify-content: end !important; /* Alinea todo el bloque hacia la derecha */
} /* Fin caja superior derecha */

/* NOMBRE */
.session-client { /* Nombre del usuario conectado */
    grid-column: 1 / 5 !important; /* Hace que el nombre ocupe toda la primera fila */
    justify-self: end !important; /* Alinea el nombre a la derecha */
    margin-right: 0 !important; /* Elimina margen lateral del nombre */
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;

    font-size: 15px !important;
    font-weight: 900 !important;
    color: #172334 !important;
}

/* ICONOS COPIA / IMPORTAR */
.backup-icon-btn {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;

    display: flex !important;
    align-items: center !important;
    justify-content: center !important;

    border-radius: 8px !important;
    background: #ffffff !important;
    border: 1px solid #c9d8ee !important;
    box-shadow: none !important;

    font-size: 16px !important;
    padding: 0 !important;
}

/* CERRAR SESIÓN */
.session-logout {
    height: 34px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;

    padding: 0 14px !important;
    border-radius: 8px !important;

    background: #fff7f7 !important;
    border: 1px solid #efc9c9 !important;
    color: #b42318 !important;

    font-size: 11px !important;
    font-weight: 900 !important;
    text-decoration: none !important;
    white-space: nowrap !important;
}

/* Hover suave */
.backup-icon-btn:hover {
    background: #f4f8fe !important;
}

.session-logout:hover {
    background: #ffecec !important;
}

/* ALINEAR BLOQUE USUARIO CON EL LAYOUT DE DEBAJO */

/* BOTONES DE IDIOMA A 8PX */

.language-option,
.language-btn,
[data-language-option],
#userSettingsModal button,
.personalization-language button {
    border-radius: 8px !important;
}

/* ASISTENCIA Y DEBERES DENTRO DEL GRÁFICO */

.student-chart {
    position: relative !important;
}

.attendance-summary {
    display: none !important;
}

.attendance-summary-inside {
    position: absolute !important;
    top: 16px !important;
    left: 18px !important;
    z-index: 10 !important;

    display: flex !important;
    align-items: center !important;
    gap: 18px !important;

    padding: 12px 18px !important;

    background: rgba(255, 255, 255, 0.92) !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: 0 6px 18px rgba(31, 58, 92, 0.06) !important;
}

.attendance-mini-box {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    min-width: 86px !important;
}

.attendance-mini-box span {
    font-size: 11px !important;
    font-weight: 900 !important;
    color: #607086 !important;
    text-transform: uppercase !important;
}

.attendance-mini-box strong {
    font-size: 24px !important;
    font-weight: 900 !important;
    line-height: 1.1 !important;
}

.attendance-mini-separator {
    width: 1px !important;
    height: 42px !important;
    background: #d9e4f2 !important;
}

.percent-green {
    color: #119669 !important;
}

.percent-yellow {
    color: #e6a700 !important;
}

.percent-orange {
    color: #f97316 !important;
}

.percent-red {
    color: #d92d20 !important;
}

/* ASISTENCIA / DEURES COMPACTO Y ALINEADO CON LA LEYENDA */

.student-chart {
    position: relative !important;
    height: 315px !important;
    padding-top: 58px !important;
}

.attendance-summary {
    display: none !important;
}

.attendance-summary-inside {
    position: absolute !important;
    top: 18px !important;
    left: 18px !important;
    z-index: 10 !important;

    display: flex !important;
    align-items: center !important;
    gap: 10px !important;

    padding: 6px 12px !important;

    background: rgba(255, 255, 255, 0.92) !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: 0 4px 12px rgba(31, 58, 92, 0.05) !important;
}

.attendance-mini-box {
    display: flex !important;
    align-items: center !important;
    gap: 6px !important;
    min-width: auto !important;
}

.attendance-mini-box span {
    font-size: 10px !important;
    font-weight: 900 !important;
    color: #607086 !important;
    text-transform: uppercase !important;
}

.attendance-mini-box strong {
    font-size: 15px !important;
    font-weight: 900 !important;
    line-height: 1 !important;
}

.attendance-mini-separator {
    width: 1px !important;
    height: 18px !important;
    background: #d9e4f2 !important;
}

.student-full-legend {
    height: 28px !important;
    align-items: center !important;
}

.student-full-body {
    height: calc(100% - 28px) !important;
}

.student-full-area,
.student-full-y-axis {
    height: calc(100% - 42px) !important;
}

/* ALINEAR ASISTENCIA / DEURES CON LA LEYENDA DEL GRÁFICO */

.student-chart {
    position: relative !important;
    height: 315px !important;
    padding-top: 20px !important;
}

/* Caja izquierda */
.attendance-summary-inside {
    position: absolute !important;
    top: 22px !important;
    left: 32px !important;
    z-index: 10 !important;

    width: 250px !important;
    height: 48px !important;

    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 16px !important;

    padding: 0 16px !important;

    background: rgba(255, 255, 255, 0.94) !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: 0 4px 12px rgba(31, 58, 92, 0.05) !important;
}

/* Cada bloque */
.attendance-mini-box {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;

    min-width: 88px !important;
    height: 100% !important;
    gap: 2px !important;
}

.attendance-mini-box span {
    font-size: 10px !important;
    font-weight: 900 !important;
    color: #607086 !important;
    text-transform: uppercase !important;
    line-height: 1 !important;
}

.attendance-mini-box strong {
    font-size: 17px !important;
    font-weight: 900 !important;
    line-height: 1 !important;
}

/* Línea separadora */
.attendance-mini-separator {
    width: 1px !important;
    height: 30px !important;
    background: #d9e4f2 !important;
}

/* Leyenda derecha a la misma altura */
.student-full-legend {
    height: 48px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    padding-right: 20px !important;
}

/* Cuerpo del gráfico debajo de ambos bloques */
.student-full-body {
    height: calc(100% - 48px) !important;
}

.student-full-area,
.student-full-y-axis {
    height: calc(100% - 42px) !important;
}

/* ASISTENCIA / DEURES EN ESQUINA SUPERIOR IZQUIERDA DEL GRÁFICO */

.student-chart {
    position: relative !important;
    height: 315px !important;
    padding-top: 80px !important;
}

/* Caja superior izquierda */
.attendance-summary-inside {
    position: absolute !important;
    top: 16px !important;
    left: 16px !important;
    z-index: 10 !important;

    width: 220px !important;
    height: 58px !important;

    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 14px !important;

    padding: 0 14px !important;

    background: rgba(255, 255, 255, 0.94) !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: 0 4px 12px rgba(31, 58, 92, 0.05) !important;
}

/* Cada bloque */
.attendance-mini-box {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;

    min-width: 78px !important;
    height: 100% !important;
    gap: 4px !important;
}

.attendance-mini-box span {
    font-size: 10px !important;
    font-weight: 900 !important;
    color: #607086 !important;
    text-transform: uppercase !important;
    line-height: 1 !important;
}

.attendance-mini-box strong {
    font-size: 23px !important;
    font-weight: 900 !important;
    line-height: 1 !important;
}

/* Separador */
.attendance-mini-separator {
    width: 1px !important;
    height: 38px !important;
    background: #d9e4f2 !important;
}

/* Leyenda derecha alineada arriba */
.student-full-legend {
    height: 58px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    padding-right: 20px !important;
}

/* Gráfico debajo de la franja superior */
.student-full-body {
    height: calc(100% - 58px) !important;
}

.student-full-area,
.student-full-y-axis {
    height: calc(100% - 42px) !important;
}

/* ALINEAR LEYENDA CON ASISTENCIA / DEURES */

.student-full-legend {
    position: absolute !important;
    top: 16px !important;
    right: 28px !important;
    height: 58px !important;

    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;

    gap: 28px !important;
    padding: 0 !important;
    margin: 0 !important;

    z-index: 10 !important;
}

/* Mantener el gráfico debajo de la franja superior */
.student-full-chart {
    padding-top: 74px !important;
}

.student-full-body {
    height: calc(100% - 74px) !important;
}

/* HACER QUE EL GRÁFICO APROVECHE MEJOR EL ESPACIO */

.student-chart {
    height: 320px !important;
    padding: 74px 18px 14px 18px !important;
}

/* El gráfico ocupa todo el espacio disponible bajo la franja superior */
.student-full-chart {
    height: 100% !important;
    padding-top: 0 !important;
}

.student-full-body {
    height: 100% !important;
    min-height: 0 !important;
}

/* Área real del gráfico */
.student-full-area {
    height: calc(100% - 42px) !important;
    padding: 0 18px !important;
}

/* Eje Y alineado con el área */
.student-full-y-axis {
    height: calc(100% - 42px) !important;
}

/* Las barras se adaptan mejor al ancho */
.student-full-bars {
    height: 100% !important;
    grid-auto-columns: minmax(60px, 1fr) !important;
    gap: 24px !important;
}

/* Números y nombres inferiores más compactos */
.student-full-grade {
    bottom: -28px !important;
    font-size: 22px !important;
}

.student-full-name {
    bottom: -44px !important;
    font-size: 10px !important;
}

/* EVITAR QUE EL GRÁFICO SE SOLAPE CON ASISTENCIA / DEURES */

.student-chart {
    height: 350px !important; /* Da más altura total al gráfico para que no se corten las notas inferiores */
    padding: 92px 18px 34px 18px !important; /* Añade espacio inferior para mostrar nota y nombre sin recortarlos */
}

/* Mantiene la caja arriba */
.attendance-summary-inside {
    top: 16px !important;
    left: 16px !important;
}

/* Mantiene la leyenda alineada arriba */
.student-full-legend {
    top: 16px !important;
    right: 28px !important;
}

/* El gráfico empieza más abajo */
.student-full-chart {
    height: 100% !important;
    padding-top: 0 !important;
}

.student-full-body {
    height: 100% !important;
}

.student-full-area,
.student-full-y-axis {
    height: calc(100% - 64px) !important; /* Reduce un poco el área de barras para reservar espacio inferior a las etiquetas */
}

/* COLUMNAS DEL GRÁFICO CON BORDER-RADIUS 8PX */

.student-full-bar {
    border-radius: 8px 8px 0 0 !important;
}

/* Por si alguna barra muy baja se ve como una pastilla */
.student-full-bar[style*="height:0"],
.student-full-bar[style*="height: 0"] {
    border-radius: 8px !important;
}

/* LEYENDA DEL GRÁFICO A 8PX */

.full-legend-bar,
.student-full-legend .full-legend-bar {
    width: 28px !important;
    height: 10px !important;
    border-radius: 8px !important;
}

/* BARRAS DEL GRÁFICO SIN DEGRADADO */

.student-full-bar {
    background: #f7faff !important; /* Fondo blanco azulado muy sutil */
    border: 1px solid #9fb5d8 !important;
    border-bottom: none !important;
    border-radius: 8px 8px 0 0 !important;
    opacity: 1 !important;
}

/* Leyenda igual que las barras con fondo claro y contorno */ /* Identifica el ajuste de la leyenda */

.full-legend-bar,
.student-full-legend .full-legend-bar { /* Icono Nota alumne/a de la leyenda */
    width: 28px !important; /* Mantiene el ancho actual de la leyenda */
    height: 10px !important; /* Mantiene la altura actual de la leyenda */
    background: #f7faff !important; /* Usa el mismo fondo claro que las barras */
    border: 2px solid #9fbce8 !important; /* Usa solo contorno azul */
    border-radius: 8px !important; /* Mantiene esquinas redondeadas */
    box-sizing: border-box !important; /* Evita que el borde agrande el icono */
} /* Fin leyenda Nota alumne/a */

/* FONDO GENERAL DE LA APP */
body,
.app-shell,
.main {
    background: #f5f6f8 !important;
}

/* LAYOUTS PRINCIPALES EN BLANCO */
.top-class-tools,
.session-box,
.card,
.student-follow-panel,
.comment-write-card {
    background: #ffffff !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: none !important;
}

/* LAYOUTS INTERNOS MÁS LIMPIOS */
.table-wrap,
.student-chart,
.objective-item,
.history-item,
.attendance-summary-inside {
    background: #ffffff !important;
    border: 1px solid #d9e4f2 !important;
    border-radius: 8px !important;
    box-shadow: none !important;
}

/* INPUTS Y SELECTS BLANCOS */
input,
select,
textarea,
.pretty-select,
.student-dropdown-button {
    background: #ffffff !important;
}

/* ICONOS DE ACTIVIDAD SIN CONTORNO */

.activity-edit-btn,
.activity-delete-btn {
    width: auto !important;
    height: auto !important;
    padding: 0 !important;

    border: none !important;
    background: transparent !important;
    box-shadow: none !important;

    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
}

.activity-edit-btn:hover,
.activity-delete-btn:hover {
    background: transparent !important;
    box-shadow: none !important;
}

.activity-edit-btn {
    color: #2f5f9f !important;
}

.activity-delete-btn {
    color: #b34747 !important;
}

/* QUITAR CONTORNO REAL DE LA X DE ACTIVIDADES */

.grades-table .activity-delete-btn,
.activity-header-cell .activity-delete-btn,
button.activity-delete-btn {
    width: 18px !important;
    height: 18px !important;
    min-width: 18px !important;
    min-height: 18px !important;

    padding: 0 !important;
    margin: 0 !important;

    border: 0 !important;
    outline: 0 !important;
    background: transparent !important;
    box-shadow: none !important;

    border-radius: 0 !important;

    color: #b34747 !important;
    font-size: 15px !important;
    font-weight: 900 !important;
    line-height: 1 !important;
}

.grades-table .activity-delete-btn:hover,
.activity-header-cell .activity-delete-btn:hover,
button.activity-delete-btn:hover {
    border: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
}

/* SUBIR UN POCO LA CAJA DE ESCRIBIR COMENTARIO */

.comment-write-card textarea {
    margin-top: -5px !important;
}

.agenda-main-btn { /* Ajusta el antiguo botón de agenda cuando ya no está junto al título */
    position: static !important; /* Evita que conserve posiciones especiales del diseño anterior */
    transform: none !important; /* Elimina desplazamientos heredados del botón anterior */
    margin: 0 !important; /* Quita márgenes antiguos para alinearlo con guardar e importar */
} /* Fin ajuste del botón de agenda reubicado */

.compact-hero { /* Barra superior completa de la aplicación */
    height: 86px !important; /* Define una altura estable para todo el encabezado */
    min-height: 86px !important; /* Evita que la barra se comprima */
    padding: 10px 14px !important; /* Añade espacio interior a los lados y arriba */
    background: rgba(255, 255, 255, 0.92) !important; /* Convierte el encabezado en una barra blanca continua */
    border: 1px solid #d9e4f2 !important; /* Añade un borde azul claro alrededor de toda la barra */
    border-radius: 8px !important; /* Redondea ligeramente las esquinas de la barra */
    display: flex !important; /* Organiza clase, título y usuario en una sola fila */
    align-items: center !important; /* Centra verticalmente todos los bloques */
    justify-content: space-between !important; /* Coloca clase a la izquierda, título al centro y usuario a la derecha */
    gap: 18px !important; /* Deja separación entre las tres zonas */
    box-shadow: 0 8px 24px rgba(31, 58, 92, 0.05) !important; /* Añade una sombra muy suave */
} /* Fin barra superior completa */

.compact-hero h1 { /* Título central CUADERN DOCENT */
    position: static !important; /* Devuelve el título al flujo normal del flex */
    transform: none !important; /* Elimina el centrado absoluto anterior */
    flex: 1 !important; /* Permite que el título ocupe el espacio central disponible */
    text-align: center !important; /* Centra el texto dentro de la zona central */
    font-size: 40px !important; /* Mantiene el título grande pero controlado */
    line-height: 1 !important; /* Evita que el título aumente la altura de la barra */
    margin: 0 !important; /* Elimina márgenes del título */
    white-space: nowrap !important; /* Evita que el título salte de línea */
} /* Fin título central */

.top-class-tools { /* Zona izquierda de clase activa */
    height: auto !important; /* Permite que la zona se adapte a la nueva barra */
    min-height: 0 !important; /* Elimina alturas forzadas anteriores */
    background: transparent !important; /* Quita cualquier fondo de caja independiente */
    border: none !important; /* Quita borde de caja independiente */
    box-shadow: none !important; /* Quita sombra de caja independiente */
    padding: 0 !important; /* Quita relleno extra */
    display: flex !important; /* Mantiene selector y botones en línea */
    align-items: flex-end !important; /* Alinea los botones con el selector */
    gap: 8px !important; /* Mantiene separación entre selector y botones */
    flex: 0 0 auto !important; /* Impide que la zona izquierda se estire */
} /* Fin zona izquierda */

.top-class-field { /* Campo del selector de clase activa */
    width: 210px !important; /* Da una anchura estable al selector de clase */
    margin: 0 !important; /* Elimina márgenes extra */
} /* Fin selector de clase */

.top-login-tools { /* Zona derecha de usuario */
    height: auto !important; /* Permite que la zona se adapte a la nueva barra */
    min-height: 0 !important; /* Elimina alturas forzadas anteriores */
    background: transparent !important; /* Quita fondo de caja exterior */
    border: none !important; /* Quita borde de caja exterior */
    box-shadow: none !important; /* Quita sombra de caja exterior */
    padding: 0 !important; /* Quita relleno extra */
    display: flex !important; /* Mantiene el bloque del usuario alineado */
    align-items: center !important; /* Centra verticalmente el bloque del usuario */
    flex: 0 0 auto !important; /* Impide que la zona derecha se estire */
} /* Fin zona derecha */

.session-box { /* Bloque interior del usuario dentro de la barra */
    height: auto !important; /* Quita alturas fijas anteriores */
    min-height: 0 !important; /* Evita que se genere hueco vertical */
    background: transparent !important; /* Quita la tarjeta interior del usuario */
    border: none !important; /* Quita el borde de la tarjeta interior */
    box-shadow: none !important; /* Quita la sombra de la tarjeta interior */
    padding: 0 !important; /* Quita relleno de la tarjeta interior */
    display: grid !important; /* Mantiene dos filas: nombre y botones */
    grid-template-columns: auto auto auto auto !important; /* Crea columnas para admin, guardar, importar y cerrar sesión (agenda está oculto con display:none) */
    grid-template-rows: auto auto !important; /* Crea una fila para el nombre y otra para los botones */
    gap: 6px 8px !important; /* Separa nombre y botones de forma compacta */
    align-items: center !important; /* Centra los botones verticalmente */
    justify-content: end !important; /* Alinea todo a la derecha */
} /* Fin bloque interior usuario */

.session-client { /* Nombre del usuario */
    grid-column: 1 / 5 !important; /* Hace que el nombre ocupe toda la primera fila */
    justify-self: end !important; /* Alinea el nombre a la derecha */
    margin: 0 !important; /* Elimina márgenes extra del nombre */
} /* Fin nombre usuario */

.top-class-tools { /* Zona izquierda de CLASSE ACTIVA */
    order: 1 !important; /* Coloca CLASSE ACTIVA en la izquierda */
} /* Fin orden clase activa */

.main-title-row { /* Zona central del título */
    order: 2 !important; /* Coloca CUADERN DOCENT en el centro */
    flex: 1 !important; /* Hace que el título ocupe el espacio central */
    text-align: center !important; /* Centra el título dentro de su zona */
} /* Fin orden título */

.top-login-tools { /* Zona derecha del usuario */
    order: 3 !important; /* Coloca ALBERT SOTO y sus botones en la derecha */
} /* Fin orden usuario */

.main-title-row { /* Zona central donde está CUADERN DOCENT */
    display: flex !important; /* Permite centrar el título dentro de su zona */
    align-items: center !important; /* Centra verticalmente el título */
    justify-content: center !important; /* Centra horizontalmente el título */
    height: 100% !important; /* Hace que la zona del título ocupe toda la altura de la barra */
} /* Fin zona central del título */

.main-title-row h1 { /* Texto CUADERN DOCENT */
    margin: 0 !important; /* Elimina márgenes que desajustan el centrado vertical */
    line-height: 1 !important; /* Evita altura extra por la línea del texto */
    transform: translateY(-10px) !important; /* Baja el título ligeramente para verlo más centrado */
} /* Fin ajuste vertical del título */

#btnAttendance { /* Botón ASISTÈNCIA */
    background: #f4f8fe !important; /* Usa un azul muy suave casi blanco */
    color: #2f5f9f !important; /* Mantiene el texto azul elegante */
    border: 1px solid #c9d8ee !important; /* Usa un borde azul claro */
} /* Fin botón asistencia */

#btnNewActivity { /* Botón + NOVA ACTIVITAT */
    background: #f4f8fe !important; /* Usa un azul muy suave casi blanco */
    color: #2f5f9f !important; /* Mantiene el texto azul elegante */
    border: 1px solid #c9d8ee !important; /* Usa un borde azul claro */
} /* Fin botón nueva actividad */

#btnOpenWeights { /* Botón CALCULAR NOTA FINAL TRIMESTRE */
    background: #f4f8fe !important; /* Usa un azul muy suave casi blanco */
    color: #2f5f9f !important; /* Mantiene el texto azul elegante */
    border: 1px solid #c9d8ee !important; /* Usa un borde azul claro */
} /* Fin botón calcular nota final */

#btnSaveComment { /* Botón DESAR COMENTARI */
    background: #f4f8fe !important; /* Usa un azul muy suave casi blanco */
    color: #2f5f9f !important; /* Mantiene el texto azul elegante */
    border: 1px solid #c9d8ee !important; /* Usa un borde azul claro */
} /* Fin botón guardar comentario */

#btnAttendance:hover, /* Hover botón asistencia */
#btnNewActivity:hover, /* Hover botón nueva actividad */
#btnOpenWeights:hover, /* Hover botón calcular nota final */
#btnSaveComment:hover { /* Hover botón guardar comentario */
    background: #edf4ff !important; /* Aplica un azul apenas más visible al pasar el ratón */
    color: #234f86 !important; /* Oscurece ligeramente el texto al pasar el ratón */
    border-color: #b9cdef !important; /* Marca un poco más el borde al pasar el ratón */
} /* Fin hover suave botones principales */

.expanded-new-activity-btn { /* Botón + NOVA ACTIVITAT dentro de la tabla ampliada */
    background: #f4f8fe !important; /* Aplica el azul muy suave usado en los botones principales */
    color: #2f5f9f !important; /* Aplica el azul elegante al texto */
    border: 1px solid #c9d8ee !important; /* Aplica borde azul claro */
} /* Fin botón nueva actividad ampliada */

.expanded-calculate-btn { /* Botón CALCULAR NOTA FINAL TRIMESTRE dentro de la tabla ampliada */
    background: #f4f8fe !important; /* Aplica el azul muy suave usado en los botones principales */
    color: #2f5f9f !important; /* Aplica el azul elegante al texto */
    border: 1px solid #c9d8ee !important; /* Aplica borde azul claro */
} /* Fin botón calcular nota ampliada */

.expanded-new-activity-btn:hover { /* Hover del botón + NOVA ACTIVITAT ampliado */
    background: #edf4ff !important; /* Aumenta muy suavemente el azul al pasar el ratón */
    color: #234f86 !important; /* Oscurece ligeramente el texto al pasar el ratón */
    border-color: #b9cdef !important; /* Refuerza ligeramente el borde al pasar el ratón */
} /* Fin hover nueva actividad ampliada */

.expanded-calculate-btn:hover { /* Hover del botón CALCULAR NOTA FINAL ampliado */
    background: #edf4ff !important; /* Aumenta muy suavemente el azul al pasar el ratón */
    color: #234f86 !important; /* Oscurece ligeramente el texto al pasar el ratón */
    border-color: #b9cdef !important; /* Refuerza ligeramente el borde al pasar el ratón */
} /* Fin hover calcular nota ampliada */

#btnSaveComment { /* Botón DESAR COMENTARI */
    font-size: 13px !important; /* Iguala el tamaño de letra con ASISTÈNCIA y los botones de actividad */
    font-weight: 900 !important; /* Iguala el grosor del texto con el resto de botones principales */
    text-transform: uppercase !important; /* Mantiene el texto en mayúsculas como los otros botones */
} /* Fin ajuste tamaño botón guardar comentario */

.brand-header { /* Bloque completo de marca situado en el centro de la cabecera */
    display: flex !important; /* Coloca icono y textos en horizontal */
    align-items: center !important; /* Centra verticalmente icono y textos */
    justify-content: center !important; /* Centra toda la marca dentro de la zona central */
    gap: 14px !important; /* Separa visualmente icono y textos */
} /* Fin bloque de marca */

.brand-icon { /* Icono educativo principal */
    font-size: 42px !important; /* Da protagonismo visual al icono */
    line-height: 1 !important; /* Evita espacios verticales extra */
    display: flex !important; /* Permite centrar correctamente el icono */
    align-items: center !important; /* Centra verticalmente el icono */
    justify-content: center !important; /* Centra horizontalmente el icono */
} /* Fin icono educativo */

.brand-text { /* Contenedor del título y subtítulo */
    display: flex !important; /* Organiza los textos verticalmente */
    flex-direction: column !important; /* Coloca subtítulo debajo del título */
    align-items: flex-start !important; /* Alinea ambos textos por la izquierda */
} /* Fin contenedor de textos */

.brand-text h1 { /* Texto principal CUADERN DOCENT */
    margin: 0 !important; /* Elimina márgenes por defecto */
    line-height: 1 !important; /* Compacta la altura del título */
    font-size: 52px !important; /* Mantiene protagonismo visual */
} /* Fin título principal */

.brand-subtitle { /* Texto secundario descriptivo */
    margin-top: 4px !important; /* Separa ligeramente el subtítulo del título */
    font-size: 13px !important; /* Usa un tamaño discreto */
    font-weight: 600 !important; /* Da presencia sin competir con el título */
    color: #4f6b93 !important; /* Usa un azul grisáceo elegante */
    letter-spacing: 0.2px !important; /* Mejora la lectura */
} /* Fin subtítulo */

.compact-hero { /* Barra superior como estaba antes del cambio de marca */
    position: relative !important; /* Permite centrar el título sin mover clase activa ni usuario */
    display: flex !important; /* Recupera la estructura anterior de la cabecera */
    align-items: center !important; /* Centra verticalmente los bloques laterales */
    justify-content: space-between !important; /* Mantiene clase izquierda y usuario derecha */
    height: 86px !important; /* Mantiene una altura estable de cabecera */
    min-height: 86px !important; /* Evita que la cabecera se comprima */
} /* Fin restauración cabecera */

.top-class-tools { /* Bloque izquierdo CLASSE ACTIVA */
    order: 1 !important; /* Mantiene CLASSE ACTIVA a la izquierda */
    position: static !important; /* Evita posiciones raras heredadas */
    z-index: 3 !important; /* Deja la clase por encima si hay solape */
} /* Fin bloque clase activa */

.top-login-tools { /* Bloque derecho usuario y botones */
    order: 3 !important; /* Mantiene usuario y botones a la derecha */
    position: static !important; /* Evita posiciones raras heredadas */
    z-index: 3 !important; /* Deja usuario por encima si hay solape */
} /* Fin bloque usuario */

.main-title-row { /* Bloque central de marca */
    position: absolute !important; /* Centra la marca respecto a toda la barra */
    left: 50% !important; /* Lleva la marca al centro horizontal real */
    top: 50% !important; /* Lleva la marca al centro vertical real */
    transform: translate(-50%, -50%) !important; /* Centra exactamente la marca */
    margin: 0 !important; /* Elimina márgenes heredados */
    z-index: 2 !important; /* Coloca la marca debajo de los bloques laterales si se acercan */
} /* Fin bloque central marca */

.brand-header { /* Marca con icono, título y subtítulo */
    display: flex !important; /* Coloca icono y textos en horizontal */
    align-items: center !important; /* Centra verticalmente icono y textos */
    justify-content: center !important; /* Centra la marca dentro de su propio bloque */
    gap: 12px !important; /* Separa icono y texto */
    white-space: nowrap !important; /* Evita que el título salte de línea */
} /* Fin marca */

.brand-icon { /* Icono educativo */
    font-size: 30px !important; /* Reduce el icono para que no desborde la cabecera */
    line-height: 1 !important; /* Evita altura extra del emoji */
} /* Fin icono */

.brand-text h1 { /* Título CUADERN DOCENT */
    font-size: 38px !important; /* Recupera un tamaño compatible con la cabecera */
    line-height: 1 !important; /* Evita que el texto cree altura extra */
    margin: 0 !important; /* Elimina márgenes del título */
} /* Fin título */

.brand-subtitle { /* Subtítulo de la marca */
    font-size: 12px !important; /* Mantiene el subtítulo discreto */
    line-height: 1.1 !important; /* Compacta la altura del subtítulo */
    margin-top: 4px !important; /* Separa suavemente subtítulo y título */
} /* Fin subtítulo */

.top-class-tools { /* Bloque izquierdo de CLASSE ACTIVA */
    order: 1 !important; /* Coloca CLASSE ACTIVA en la izquierda */
    margin-right: auto !important; /* Empuja el resto de elementos hacia el centro y derecha */
} /* Fin posición izquierda clase activa */

.main-title-row { /* Bloque central de marca */
    order: 2 !important; /* Coloca CUADERN DOCENT después de CLASSE ACTIVA */
    left: 50% !important; /* Mantiene la marca en el centro real de la barra */
    transform: translate(-50%, -50%) !important; /* Centra la marca horizontal y verticalmente */
} /* Fin posición central marca */

.top-login-tools { /* Bloque derecho de usuario */
    order: 3 !important; /* Coloca usuario y botones a la derecha */
    margin-left: auto !important; /* Empuja el usuario hacia el extremo derecho */
    margin-right: 0 !important; /* Evita separación extra a la derecha */
} /* Fin posición derecha usuario */

.compact-hero { /* Barra superior completa */
    position: relative !important; /* Permite colocar izquierda, centro y derecha de forma exacta */
    height: 86px !important; /* Mantiene la altura actual de la barra */
    min-height: 86px !important; /* Evita que la barra se comprima */
} /* Fin barra superior */

.top-class-tools { /* Bloque CLASSE ACTIVA */
    position: absolute !important; /* Fija el bloque en una posición concreta */
    left: 14px !important; /* Coloca CLASSE ACTIVA a la izquierda */
    top: 50% !important; /* Lo sitúa a media altura de la barra */
    transform: translateY(-50%) !important; /* Lo centra verticalmente */
    margin: 0 !important; /* Elimina márgenes que lo puedan desplazar */
} /* Fin bloque izquierdo */

.main-title-row { /* Bloque central CUADERN DOCENT */
    position: absolute !important; /* Fija el título en una posición concreta */
    left: 50% !important; /* Coloca el título en el centro horizontal real */
    top: 50% !important; /* Lo sitúa a media altura de la barra */
    transform: translate(-50%, -50%) !important; /* Centra el título perfectamente */
    margin: 0 !important; /* Elimina márgenes heredados */
    z-index: 2 !important; /* Mantiene el título visible en el centro */
} /* Fin bloque central */

.top-login-tools { /* Bloque usuario y botones */
    position: absolute !important; /* Fija el bloque en una posición concreta */
    right: 14px !important; /* Coloca el usuario a la derecha */
    top: 50% !important; /* Lo sitúa a media altura de la barra */
    transform: translateY(-50%) !important; /* Lo centra verticalmente */
    margin: 0 !important; /* Elimina márgenes que lo puedan desplazar */
} /* Fin bloque derecho */

.compact-hero { /* Barra superior completa */
    position: relative !important; /* Permite centrar el título respecto a toda la barra */
    display: flex !important; /* Coloca CLASSE ACTIVA a la izquierda y usuario a la derecha */
    align-items: center !important; /* Centra verticalmente todos los elementos */
    justify-content: space-between !important; /* Separa izquierda y derecha */
    height: 86px !important; /* Mantiene la altura de la cabecera */
    min-height: 86px !important; /* Evita que la cabecera se comprima */
    padding: 10px 14px !important; /* Da aire interior a la barra */
} /* Fin barra superior */

.top-class-tools { /* Bloque izquierdo CLASSE ACTIVA */
    position: static !important; /* Evita posiciones absolutas anteriores */
    transform: none !important; /* Elimina desplazamientos anteriores */
    margin: 0 !important; /* Quita márgenes que movían el bloque */
    flex: 0 0 auto !important; /* Mantiene el bloque a la izquierda sin estirarse */
    align-self: center !important; /* Centra verticalmente CLASSE ACTIVA */
    z-index: 3 !important; /* Mantiene el bloque por encima del título si se acercan */
} /* Fin bloque izquierdo */

.main-title-row { /* Bloque central del logo y título */
    position: absolute !important; /* Centra el título respecto a toda la barra */
    left: 50% !important; /* Lleva el bloque al centro horizontal */
    top: 50% !important; /* Lleva el bloque al centro vertical */
    transform: translate(-50%, -50%) !important; /* Centra exactamente el bloque */
    margin: 0 !important; /* Elimina márgenes heredados */
    display: flex !important; /* Permite alinear el contenido de marca */
    align-items: center !important; /* Centra icono y textos verticalmente */
    justify-content: center !important; /* Centra la marca dentro del bloque */
    z-index: 2 !important; /* Coloca la marca entre los bloques laterales */
    pointer-events: none !important; /* Evita bloquear clics de botones cercanos */
} /* Fin bloque central */

.main-title-row * { /* Elementos internos del título */
    pointer-events: auto !important; /* Permite interacción dentro del título si hiciera falta */
} /* Fin interacción título */

.top-login-tools { /* Bloque derecho usuario y botones */
    position: static !important; /* Evita posiciones absolutas anteriores */
    transform: none !important; /* Elimina desplazamientos anteriores */
    margin: 0 !important; /* Quita márgenes que movían el bloque */
    margin-left: auto !important; /* Empuja el usuario hacia la derecha */
    flex: 0 0 auto !important; /* Mantiene el bloque derecho sin estirarse */
    align-self: center !important; /* Centra verticalmente el bloque derecho */
    z-index: 3 !important; /* Mantiene el usuario por encima del título si se acercan */
} /* Fin bloque derecho */

.brand-header { /* Marca completa con icono, título y subtítulo */
    display: flex !important; /* Coloca icono y texto en horizontal */
    align-items: center !important; /* Centra icono y texto verticalmente */
    justify-content: center !important; /* Centra el conjunto de marca */
    gap: 12px !important; /* Separa el birrete del texto */
    white-space: nowrap !important; /* Evita que el título salte de línea */
} /* Fin marca */

.brand-icon { /* Icono del birrete */
    font-size: 30px !important; /* Mantiene el icono proporcionado */
    line-height: 1 !important; /* Evita altura extra del emoji */
    display: flex !important; /* Permite centrar el icono */
    align-items: center !important; /* Centra verticalmente el icono */
    justify-content: center !important; /* Centra horizontalmente el icono */
} /* Fin icono */

.brand-text { /* Contenedor del título y subtítulo */
    display: flex !important; /* Organiza título y subtítulo */
    flex-direction: column !important; /* Coloca subtítulo debajo */
    align-items: flex-start !important; /* Alinea los textos a la izquierda */
    justify-content: center !important; /* Centra verticalmente los textos */
} /* Fin textos marca */

.brand-text h1 { /* Título CUADERN DOCENT */
    position: static !important; /* Anula la posición absoluta antigua del h1 */
    left: auto !important; /* Anula posiciones anteriores */
    top: auto !important; /* Anula posiciones anteriores */
    transform: none !important; /* Elimina desplazamientos anteriores */
    margin: 0 !important; /* Quita márgenes del título */
    font-size: 38px !important; /* Mantiene tamaño grande pero estable */
    line-height: 1 !important; /* Compacta el alto del título */
    letter-spacing: 0.08em !important; /* Mantiene aspecto de marca */
    white-space: nowrap !important; /* Evita salto de línea */
} /* Fin título */

.brand-subtitle { /* Subtítulo de la marca */
    margin-top: 4px !important; /* Separa el subtítulo del título */
    font-size: 12px !important; /* Mantiene subtítulo discreto */
    line-height: 1.1 !important; /* Compacta la altura */
    font-weight: 600 !important; /* Da presencia sin competir con el título */
    color: #4f6b93 !important; /* Usa azul grisáceo elegante */
} /* Fin subtítulo */

/* ========================================================= */ /* Separador visual */
/* ARREGLO DEFINITIVO CABECERA: CLASSE / TÍTULO / USUARIO */ /* Título del bloque */
/* Solo pantallas anchas: en pantallas estrechas/divididas manda el bloque responsive de más abajo (@media max-width: 1100px / 760px), que apila las zonas en vez de forzar 3 columnas fijas. */
/* ========================================================= */ /* Separador visual */

@media (min-width: 1101px) {

header.hero.compact-hero { /* Cabecera superior completa */
    display: grid !important; /* El título ocupa toda la cabecera y se autocentra */
    grid-template-columns: 1fr !important; /* Classe activa ya no vive aquí: una sola zona para el título */
    grid-template-areas: "title" !important; /* Define el orden correcto de las zonas */
    align-items: center !important; /* Centra verticalmente todos los bloques */
    gap: 16px !important; /* Añade separación entre las tres zonas */
    min-height: 86px !important; /* Mantiene la altura actual de la cabecera */
    height: 86px !important; /* Fuerza una altura estable */
    padding: 10px 18px !important; /* Da aire interior sin mover el diseño */
    position: relative !important; /* Evita comportamientos raros heredados */
} /* Fin cabecera superior */

header.hero.compact-hero .main-title-row { /* Bloque central CUADERN DOCENT */
    grid-area: title !important; /* Coloca el título en la zona central */
    justify-self: center !important; /* Centra horizontalmente el título */
    align-self: center !important; /* Centra verticalmente el título */
    position: static !important; /* Anula posición absoluta anterior */
    transform: none !important; /* Anula desplazamientos anteriores */
    margin: 0 !important; /* Elimina márgenes que desplacen el título */
    width: auto !important; /* Evita que el título ocupe toda la cabecera */
    max-width: none !important; /* Quita límites anteriores */
    display: flex !important; /* Permite centrar la marca interna */
    align-items: center !important; /* Centra icono y texto verticalmente */
    justify-content: center !important; /* Centra la marca dentro del bloque */
    order: initial !important; /* Anula órdenes anteriores */
} /* Fin bloque central */

header.hero.compact-hero .top-login-tools { /* Bloque derecho ALBERT SOTO y botones */
    position: absolute !important; /* Se ancla a la derecha, fuera del grid, para no descentrar el título */
    right: 10px !important; /* Menos distancia respecto al borde de la cabecera */
    top: 50% !important; /* Centra verticalmente */
    transform: translateY(-50%) !important; /* Ajuste fino del centrado vertical */
    margin: 0 !important; /* Elimina márgenes que lo muevan */
    padding-right: 0 !important; /* Evita empujes internos innecesarios */
    width: auto !important; /* Hace que ocupe solo lo necesario */
} /* Fin bloque derecho */

header.hero.compact-hero .header-class-info { /* Bloque izquierdo: nombre de la classe activa i botó d'assistència */
    position: absolute !important; /* Se ancla a la izquierda, fuera del grid, para no descentrar el título */
    left: 10px !important; /* Menos distancia respecto al borde de la cabecera */
    bottom: 10px !important; /* Alinea con la fila de botones (guardar/importar/tancar sessió), más abajo que el centro */
    top: auto !important; /* Anula el centrado vertical anterior */
    transform: none !important; /* Ya no hace falta compensar con translateY */
    margin: 0 !important; /* Elimina márgenes que lo muevan */
    width: auto !important; /* Hace que ocupe solo lo necesario */
} /* Fin bloque izquierdo */

header.hero.compact-hero .brand-header { /* Marca completa con birrete y texto */
    display: flex !important; /* Coloca icono y texto en horizontal */
    align-items: center !important; /* Centra icono y texto verticalmente */
    justify-content: center !important; /* Centra el conjunto de la marca */
    gap: 12px !important; /* Separa el birrete del texto */
    white-space: nowrap !important; /* Evita que el título salte de línea */
} /* Fin marca */

header.hero.compact-hero .brand-text h1 { /* Texto CUADERN DOCENT */
    position: static !important; /* Anula posición antigua del h1 */
    left: auto !important; /* Anula left antiguo */
    top: auto !important; /* Anula top antiguo */
    transform: none !important; /* Anula translate antiguo */
    margin: 0 !important; /* Elimina margen del título */
    font-size: 38px !important; /* Mantiene tamaño correcto */
    line-height: 1 !important; /* Compacta la altura del título */
    text-align: left !important; /* Mantiene alineado con el subtítulo */
    white-space: nowrap !important; /* Evita salto de línea */
} /* Fin título */

header.hero.compact-hero .brand-subtitle { /* Subtítulo del título principal */
    margin-top: 4px !important; /* Separa subtítulo del título */
    font-size: 12px !important; /* Mantiene subtítulo discreto */
    line-height: 1.1 !important; /* Compacta el subtítulo */
    text-align: left !important; /* Alinea subtítulo con el título */
} /* Fin subtítulo */

} /* Fin @media (min-width: 1101px) */

#btnAttendance,
#btnNewActivity,
#btnOpenWeights,
#btnSaveComment,
#btnNewStudent,
#btnNewTerm,
#btnNewGroup,
.expanded-new-activity-btn,
.expanded-calculate-btn { /* Botones principales de acción */
    background: #eef5ff !important; /* Azul suave un poco más visible */
    color: #245a9f !important; /* Azul más definido para el texto */
    border-color: #b8cdec !important; /* Borde azul algo más presente */
} /* Fin botones principales */

#btnAttendance:hover,
#btnNewActivity:hover,
#btnOpenWeights:hover,
#btnSaveComment:hover,
#btnNewStudent:hover,
#btnNewTerm:hover,
#btnNewGroup:hover,
.expanded-new-activity-btn:hover,
.expanded-calculate-btn:hover { /* Hover de botones principales */
    background: #e4efff !important; /* Azul ligeramente más marcado al pasar el ratón */
    color: #1f4f8c !important; /* Texto algo más intenso */
    border-color: #9fbde6 !important; /* Borde más visible al pasar el ratón */
} /* Fin hover botones principales */

#btnAttendance,
#btnNewStudent,
#btnNewActivity,
#btnNewGroup,
#btnNewTerm,
#btnOpenWeights,
#btnSaveComment { /* Asistència, Afegir alumne, Nova activitat, Nou grup, Nou trimestre, Calcular nota i Guardar comentari: en minúscula i sense contorn */
    text-transform: none !important; /* Deixa el text tal com ve escrit, sense forçar majúscules */
    border: none !important; /* Elimina el contorn del botó */
} /* Fin ajust minúscula/sense contorn */

header.hero.compact-hero { /* Cabecera superior */
    background: rgba(255, 255, 255, 0.96) !important; /* Hace la cabecera un poco más limpia y blanca */
} /* Fin cabecera superior */

.brand-text h1 { /* Título CUADERN DOCENT */
    color: #22324a !important; /* Da más presencia al título sin usar negro puro */
    letter-spacing: 0.10em !important; /* Refuerza la sensación de marca */
} /* Fin título principal */

.brand-subtitle { /* Subtítulo de la marca */
    color: #42628f !important; /* Hace el subtítulo un poco más legible */
} /* Fin subtítulo */

.student-chart { /* Caja exterior del gráfico individual */
    background: #ffffff !important; /* Hace el gráfico más limpio */
    border: 1px solid #d9e4f2 !important; /* Mantiene borde suave */
    border-radius: 10px !important; /* Igual redondeo que el resto de la app */
} /* Fin caja gráfico */

.student-full-area { /* Zona donde se dibujan las barras */
    border-left: none !important; /* Quita el eje vertical duro */
    border-bottom: 1px solid #c8d6e8 !important; /* Mantiene solo línea inferior suave */
    padding: 0 36px !important; /* Da más aire lateral a las barras */
} /* Fin zona barras */

.student-full-grid-line { /* Líneas horizontales del gráfico */
    border-top: 1px solid #edf2f8 !important; /* Hace las líneas mucho más suaves */
} /* Fin líneas horizontales */

.student-full-y-axis { /* Números del eje vertical */
    color: #8a9bb0 !important; /* Suaviza los números del eje */
    font-size: 11px !important; /* Reduce ligeramente el tamaño */
    font-weight: 700 !important; /* Baja la fuerza visual */
} /* Fin eje vertical */

.student-full-bar { /* Barras de nota del alumno */
    background: #c7dcff !important; /* Usa azul plano suave sin degradado */
    border: 1px solid #a9c8f5 !important; /* Define la barra con borde azul claro */
    border-bottom: none !important; /* Elimina borde inferior para apoyar limpio */
    border-radius: 10px 10px 0 0 !important; /* Redondea solo la parte superior */
    width: 64% !important; /* Mantiene las barras más elegantes y menos pesadas */
} /* Fin barras alumno */

.student-full-average { /* Línea verde de media */
    background: #24a06f !important; /* Usa verde más moderno */
    height: 2px !important; /* Hace la línea más fina */
    opacity: 0.8 !important; /* La vuelve más discreta */
} /* Fin línea media */

.student-full-grade { /* Nota bajo cada barra */
    color: #22324a !important; /* Usa azul oscuro elegante */
    font-size: 22px !important; /* Reduce un poco el tamaño */
} /* Fin nota */

.student-full-name { /* Nombre de la actividad bajo la nota */
    color: #52657d !important; /* Suaviza el nombre de actividad */
    font-size: 10px !important; /* Lo hace más discreto */
    letter-spacing: 0.02em !important; /* Mejora lectura */
} /* Fin nombre actividad */

.student-full-legend { /* Leyenda del gráfico */
    background: #f7faff !important; /* Fondo blanco azulado muy sutil */
    font-size: 11px !important; /* Reduce un poco la leyenda */
} /* Fin leyenda */

.student-full-legend span:first-child i,
.student-compact-legend span:first-child i { /* Icono visual de Nota alumne/a */
    background: #c7dcff !important; /* Fuerza el azul exacto de las barras */
    border: 1px solid #a9c8f5 !important; /* Fuerza el borde azul claro */
} /* Fin icono visual nota */

.grades-table input { /* Inputs de nota dentro de la tabla */
    background: transparent !important; /* Quita el fondo blanco del recuadro */
    border: 1px solid transparent !important; /* Oculta el borde mientras no se edita */
    box-shadow: none !important; /* Elimina cualquier sombra del input */
    border-radius: 8px !important; /* Mantiene una forma suave cuando aparezca el foco */
} /* Fin inputs limpios */

.grades-table input:hover { /* Inputs de nota al pasar el ratón */
    background: #f8fbff !important; /* Muestra un fondo muy suave al pasar el ratón */
    border-color: #d7e4f4 !important; /* Muestra un borde muy discreto al pasar el ratón */
} /* Fin hover inputs */

.grades-table input:focus { /* Inputs de nota al editar */
    background: #ffffff !important; /* Recupera fondo blanco al escribir */
    border-color: #9fbde6 !important; /* Marca el input con azul suave al editar */
    outline: none !important; /* Elimina borde negro del navegador */
} /* Fin foco inputs */

.grades-table button { /* Botones dentro de la tabla de notas */
    background: transparent !important; /* Quita el fondo blanco del botón */
    border: 1px solid transparent !important; /* Oculta el borde del botón */
    box-shadow: none !important; /* Elimina sombras del botón */
    border-radius: 8px !important; /* Mantiene redondeo suave si aparece hover */
} /* Fin botones limpios tabla */

.grades-table button:hover { /* Botones de tabla al pasar el ratón */
    background: #f8fbff !important; /* Muestra fondo muy suave al pasar el ratón */
    border-color: #d7e4f4 !important; /* Muestra borde discreto al pasar el ratón */
} /* Fin hover botones tabla */

.grades-table button:focus { /* Botones de tabla al recibir foco */
    background: #ffffff !important; /* Recupera fondo blanco al seleccionar */
    border-color: #9fbde6 !important; /* Marca con azul suave al seleccionar */
    outline: none !important; /* Quita borde negro del navegador */
} /* Fin foco botones tabla */

.points-grade-cell { /* Celda de puntuación obtenida / puntuación total */
    display: inline-flex !important; /* Hace que el conjunto número + total mida solo su contenido */
    align-items: center !important; /* Centra verticalmente el número y el total */
    justify-content: center !important; /* Centra internamente el conjunto */
    gap: 2 !important; /* Elimina separación entre número y /total */
    width: auto !important; /* Evita que el conjunto ocupe todo el ancho de la celda */
    margin: 0 auto !important; /* Centra el conjunto completo dentro de la columna */
} /* Fin celda puntuación */

.points-grade-cell input { /* Número de puntuación obtenida */
    width: 24px !important; /* Da solo el espacio necesario al número */
    max-width: 24px !important; /* Evita que el input se ensanche */
    min-width: 24px !important; /* Mantiene una anchura estable al editar */
    padding: 0 !important; /* Elimina espacio interior */
    text-align: center !important; /* Pega el número al /total */
} /* Fin input puntuación */

.points-grade-cell span { /* Texto /total */
    display: inline-block !important; /* Hace que /total se comporte como texto compacto */
    margin: 0 !important; /* Elimina márgenes */
} /* Fin texto total */

.grades-table .activity-edit-btn:hover,
.grades-table .activity-delete-btn:hover { /* Evita que editar y borrar actividad muestren contorno al pasar el cursor */
    background: transparent !important; /* Quita cualquier fondo que aparezca en hover */
    border-color: transparent !important; /* Quita el contorno visible en hover */
    box-shadow: none !important; /* Quita cualquier sombra de hover */
} /* Fin hover limpio */

.grades-table .activity-edit-btn:focus,
.grades-table .activity-delete-btn:focus,
.grades-table .activity-edit-btn:focus-visible,
.grades-table .activity-delete-btn:focus-visible,
.grades-table .activity-edit-btn:active,
.grades-table .activity-delete-btn:active { /* Evita contorno al clicar o enfocar */
    outline: none !important; /* Quita el borde del navegador */
    background: transparent !important; /* Mantiene fondo invisible */
    border-color: transparent !important; /* Mantiene borde invisible */
    box-shadow: none !important; /* Quita sombras de foco */
} /* Fin foco limpio */

.grades-table .expand-table-btn:hover { /* Evita que el botón ampliar tabla muestre contorno al pasar el cursor */
    background: transparent !important; /* Quita cualquier fondo visible en hover */
    border-color: transparent !important; /* Quita el contorno visible en hover */
    box-shadow: none !important; /* Quita cualquier sombra */
} /* Fin hover limpio ampliar tabla */

.grades-table .expand-table-btn:focus,
.grades-table .expand-table-btn:focus-visible,
.grades-table .expand-table-btn:active { /* Evita contorno al clicar o enfocar el botón ampliar */
    outline: none !important; /* Quita el borde del navegador */
    background: transparent !important; /* Mantiene fondo invisible */
    border-color: transparent !important; /* Mantiene borde invisible */
    box-shadow: none !important; /* Quita sombras de foco */
} /* Fin foco limpio ampliar tabla */

.grades-table th { /* Cabecera de la tabla de notas */
    background: #f1f6fc !important; /* Usa un azul grisáceo más profesional */
    border-bottom: 1px solid #cbd9ea !important; /* Marca mejor la separación con las filas */
} /* Fin cabecera tabla */

.grades-table td { /* Celdas de la tabla de notas */
    height: 48px !important; /* Da más aire vertical a cada fila */
    border-color: #dfe8f4 !important; /* Suaviza las líneas internas */
    text-align: center !important; /* Centra el contenido (nota, +, condició) dentro de la celda, sea cual sea su ancho */
} /* Fin celdas tabla */

.grades-table tbody tr:nth-child(even) { /* Filas pares */
    background: #fcfdff !important; /* Hace el zebra más sutil */
} /* Fin filas pares */

.grades-table tbody tr:hover { /* Fila al pasar el ratón */
    background: #eef6ff !important; /* Resalta la fila de forma suave */
} /* Fin hover fila */

.grades-table input { /* Notas editables */
    font-weight: 900 !important; /* Da presencia uniforme a las notas */
    color: #12263f !important; /* Usa azul oscuro en vez de negro puro */
} /* Fin notas */

.condition-cell { /* Columna condición */
    color: #465b76 !important; /* Hace la condición más elegante */
} /* Fin condición */

.table-wrap { /* Caja exterior de la tabla */
    border-color: #cbd9ea !important; /* Borde exterior más definido */
    background: #ffffff !important; /* Fondo limpio */
} /* Fin caja tabla */

.grades-table input,
.points-grade-cell input,
.points-grade-cell span { /* Notas normales y puntuaciones */
    color: #2f4968 !important; /* Usa azul grisáceo más suave que el negro */
} /* Fin color notas */

.grades-table td { /* Texto general de las celdas */
    color: #2f4968 !important; /* Suaviza el color del contenido de la tabla */
} /* Fin color celdas */

.student-table-name-btn { /* Nombre del alumno en la tabla */
    color: #22324a !important; /* Mantiene el nombre algo más fuerte que las notas */
} /* Fin nombre alumno */

body { /* Fondo general de la aplicación */
    background: #f5f8fc !important; /* Suaviza el fondo para que las tarjetas respiren más */
} /* Fin fondo general */

.main { /* Contenedor principal */
    gap: 12px !important; /* Aumenta ligeramente la separación entre cabecera y contenido */
} /* Fin contenedor principal */

.dashboard-columns { /* Columnas principales */
    gap: 12px !important; /* Separa un poco más el panel izquierdo y derecho */
} /* Fin columnas principales */

.card { /* Tarjetas principales */
    border-color: #cfdceb !important; /* Da un borde algo más limpio y profesional */
} /* Fin tarjetas */

.card-header h2,
.section-title-row h3 { /* Títulos de secciones */
    color: #1f3047 !important; /* Refuerza títulos sin llegar a negro puro */
} /* Fin títulos */

.student-chart,
.table-wrap,
.comment-write-card textarea { /* Zonas internas principales */
    background: #fbfdff !important; /* Da una sensación más limpia dentro de las cajas */
} /* Fin interiores */

header.hero.compact-hero { /* Cabecera superior completa */
    border-color: #cfdceb !important; /* Iguala el borde de la cabecera al resto de tarjetas */
} /* Fin borde cabecera */

.top-class-tools,
.top-login-tools { /* Bloques interiores de clase activa y usuario */
    border-color: #cfdceb !important; /* Iguala los bordes internos con el resto del layout */
} /* Fin bordes bloques superiores */

.history-item .comment-edit-btn,
.history-item .comment-delete-btn { /* Botones editar y eliminar dentro de Historial de comentaris */
    width: 28px !important; /* Igual ancho que los botones de Objectius */
    height: 28px !important; /* Igual alto que los botones de Objectius */
    min-width: 28px !important; /* Evita que se estiren horizontalmente */
    max-width: 28px !important; /* Impide que crezcan más que un cuadrado */
    padding: 0 !important; /* Quita relleno que deformaba el botón */
    border-radius: 6px !important; /* Iguala el redondeo visual de Objectius */
    display: flex !important; /* Permite centrar el icono */
    align-items: center !important; /* Centra verticalmente el icono */
    justify-content: center !important; /* Centra horizontalmente el icono */
    flex: 0 0 28px !important; /* Fuerza tamaño cuadrado fijo */
} /* Fin botones historial cuadrados */

.history-item .comment-actions { /* Grupo de botones editar y eliminar del historial */
    gap: 6px !important; /* Iguala la separación entre botones a la de Objectius */
} /* Fin separación botones historial */

.modal-card.report-modal-card,
.report-editor-box,
.report-toolbar,
.editable-report-textarea,
.report-toolbar button { /* Elementos del informe generado */
    border-radius: 8px !important; /* Iguala el redondeo del informe al resto de la app */
} /* Fin redondeo informe */

.report-toolbar { /* Barra superior del editor de informe */
    border-top-left-radius: 8px !important; /* Redondea esquina superior izquierda */
    border-top-right-radius: 8px !important; /* Redondea esquina superior derecha */
    border-bottom-left-radius: 0 !important; /* Evita redondeo interior inferior */
    border-bottom-right-radius: 0 !important; /* Evita redondeo interior inferior */
} /* Fin barra editor */

.editable-report-textarea { /* Zona editable del informe */
    border-top-left-radius: 0 !important; /* Evita doble redondeo con la barra */
    border-top-right-radius: 0 !important; /* Evita doble redondeo con la barra */
} /* Fin zona editable */

/* ========================================================= */ /* Separador visual */
/* GRÁFICO INDIVIDUAL MÁS COMPACTO */ /* Título del ajuste */
/* ========================================================= */ /* Separador visual */

.student-chart { /* Caja completa del gráfico individual */
    height: 240px !important; /* Reduce la altura total del gráfico para ganar espacio en objetivos e historial */
    padding: 70px 16px 10px 16px !important; /* Reduce el espacio interior manteniendo sitio para asistencia y leyenda */
    overflow: hidden !important; /* Evita que aparezca scroll dentro del gráfico */
} /* Fin caja gráfico compacto */

.attendance-summary-inside { /* Caja de asistencia y deberes */
    top: 12px !important; /* Vuelve a un "top" fijo cerca de la cabecera del gráfico: el centrado vertical (top:50%) se calculaba respecto a TODO el alto de .student-chart, no solo la franja superior, así que la caja acababa en el centro del gráfico en vez de arriba */
    left: 14px !important; /* Ajusta la distancia desde la izquierda */
    width: 200px !important; /* Reduce el ancho de la caja */
    height: 48px !important; /* Reduce la altura de la caja */
    padding: 0 12px !important; /* Reduce el espacio interior */
    gap: 12px !important; /* Reduce la separación entre asistencia y deberes */
} /* Fin caja asistencia */

.attendance-mini-box { /* Cada bloque de asistencia/deberes */
    min-width: 70px !important; /* Reduce el ancho mínimo de cada bloque */
    gap: 2px !important; /* Reduce la separación entre etiqueta y porcentaje */
} /* Fin bloque asistencia */

.attendance-mini-box span { /* Texto Assistència y Deures */
    font-size: 9px !important; /* Hace la etiqueta más compacta */
} /* Fin etiqueta asistencia */

.attendance-mini-box strong { /* Porcentaje de asistencia y deberes */
    font-size: 19px !important; /* Reduce el porcentaje sin perder visibilidad */
} /* Fin porcentaje asistencia */

.attendance-mini-separator { /* Línea entre asistencia y deberes */
    height: 30px !important; /* Reduce la altura del separador */
} /* Fin separador asistencia */

.student-full-legend { /* Leyenda Nota alumne/a y Mediana grup */
    top: 12px !important; /* Alinea la leyenda con la caja de asistencia */
    right: 22px !important; /* Ajusta distancia desde la derecha */
    height: 48px !important; /* Reduce altura reservada para la leyenda */
    gap: 20px !important; /* Reduce separación entre leyendas */
    font-size: 11px !important; /* Hace la leyenda más compacta */
} /* Fin leyenda */

.student-full-chart { /* Contenedor interno del gráfico */
    height: 100% !important; /* Hace que use toda la altura disponible */
    padding-top: 0 !important; /* Evita espacio extra superior */
} /* Fin contenedor interno */

.student-full-body { /* Cuerpo del gráfico */
    height: 100% !important; /* Ocupa toda la zona útil */
    min-height: 0 !important; /* Permite que el gráfico se reduzca correctamente */
} /* Fin cuerpo gráfico */

.student-full-area,
.student-full-y-axis { /* Área de barras y eje vertical */
    height: calc(100% - 40px) !important; /* Reserva menos espacio inferior para notas y nombres */
} /* Fin área y eje */

.student-full-bars { /* Contenedor de columnas del gráfico */
    gap: 20px !important; /* Reduce separación entre barras */
    grid-auto-columns: minmax(54px, 1fr) !important; /* Hace las columnas más compactas */
} /* Fin columnas gráfico */

.student-full-grade { /* Nota debajo de cada barra */
    bottom: -25px !important; /* Acerca la nota al eje */
    font-size: 20px !important; /* Reduce ligeramente la nota */
} /* Fin nota gráfico */

.student-full-name { /* Nombre de actividad debajo de la nota */
    bottom: -40px !important; /* Acerca el nombre al gráfico */
    font-size: 9px !important; /* Reduce el nombre de actividad */
} /* Fin nombre actividad */

.student-full-body { /* Cuerpo del gráfico con eje Y y barras */
    align-items: flex-start !important; /* Hace que eje Y y gráfico empiecen exactamente a la misma altura */
} /* Fin cuerpo gráfico */

.student-full-y-axis { /* Contenedor de números del eje Y */
    position: relative !important; /* Permite colocar cada número por porcentaje */
    display: block !important; /* Anula el reparto automático vertical anterior */
    height: calc(100% - 52px) !important; /* Iguala exactamente la altura del eje a la zona de líneas */
    padding: 0 !important; /* Elimina espacios que descuadraban los números */
    margin: 0 !important; /* Elimina márgenes que movían el eje */
    align-self: flex-start !important; /* Alinea el eje con la parte superior del gráfico */
} /* Fin eje Y */

.student-full-area { /* Área donde están las líneas y barras */
    height: calc(100% - 52px) !important; /* Usa la misma altura exacta que el eje Y */
    margin: 0 !important; /* Evita desplazamientos respecto al eje */
} /* Fin área gráfica */

.student-y-label { /* Cada número del eje Y */
    position: absolute !important; /* Coloca el número en una posición exacta */
    right: 0 !important; /* Pega el número al gráfico */
    transform: translateY(50%) !important; /* Centra el número justo sobre su línea */
    font-size: 9px !important; /* Mantiene los números compactos */
    line-height: 1 !important; /* Evita que el texto empuje verticalmente */
    font-weight: 700 !important; /* Mantiene buena lectura */
} /* Fin número eje Y */

.attendance-summary-inside { /* Caja de Assistència y Deures dentro del gráfico */
    width: 180px !important; /* Hace la caja más estrecha */
    height: 42px !important; /* Hace la caja más baja */
    padding: 0 10px !important; /* Reduce el espacio interior */
    gap: 10px !important; /* Reduce la separación entre Assistència y Deures */
} /* Fin caja compacta */

.attendance-mini-box { /* Cada bloque Assistència o Deures */
    min-width: 62px !important; /* Reduce el ancho mínimo de cada indicador */
} /* Fin bloque compacto */

.attendance-mini-box span { /* Texto Assistència y Deures */
    font-size: 8px !important; /* Mantiene el tamaño compacto */
    font-weight: 750 !important; /* Reduce la negrita para que se vea más limpio */
    letter-spacing: 0.2px !important; /* Mejora la legibilidad en tamaño pequeño */
    color: #5f738d !important; /* Azul grisáceo suave en lugar de azul oscuro */
} /* Fin texto indicador */

.attendance-mini-box strong { /* Porcentaje 100% */
    font-size: 17px !important; /* Hace el porcentaje más pequeño */
    line-height: 1 !important; /* Compacta la altura del porcentaje */
} /* Fin porcentaje */

.attendance-mini-separator { /* Separador vertical entre Assistència y Deures */
    height: 26px !important; /* Reduce la altura del separador */
} /* Fin separador */


#btnSaveComment { /* Botón Desar comentari */
    background: #e8f1ff !important; /* Da un poco más de presencia al botón principal de comentario */
    border-color: #b8cdea !important; /* Refuerza ligeramente el borde */
    color: #245a9d !important; /* Mantiene el azul profesional */
} /* Fin botón guardar comentario */

#btnSaveComment:hover { /* Hover del botón Desar comentari */
    background: #dcecff !important; /* Marca un poco más el hover */
    border-color: #9fbde6 !important; /* Refuerza el borde al pasar el ratón */
    color: #1f4f8c !important; /* Oscurece ligeramente el texto */
} /* Fin hover guardar comentario */

.grades-table tbody tr:hover { /* Fila de la tabla al pasar el ratón */
    background: inherit !important; /* Evita que la fila se marque al pasar por encima */
} /* Fin hover fila */

.grades-table tbody tr:nth-child(odd):hover { /* Filas impares al pasar el ratón */
    background: #ffffff !important; /* Mantiene el mismo fondo blanco */
} /* Fin hover filas impares */

.grades-table tbody tr:nth-child(even):hover { /* Filas pares al pasar el ratón */
    background: #f7faff !important; /* Mantiene el mismo fondo azul suave */
} /* Fin hover filas pares */

.grades-table .student-table-name-btn,
.grades-table .student-table-name-btn:hover,
.grades-table .student-table-name-btn:focus,
.grades-table .student-table-name-btn:active,
.grades-table .student-table-name-btn:focus-visible { /* Botón del nombre del alumno */
    background: transparent !important; /* Evita cualquier fondo azul */
    background-color: transparent !important; /* Fuerza fondo transparente */
    background-image: none !important; /* Evita fondos heredados */
    border: none !important; /* Quita cualquier borde */
    outline: none !important; /* Quita contorno de foco */
    box-shadow: none !important; /* Quita sombra */
    text-decoration: none !important; /* Quita subrayado */
    border-radius: 0 !important; /* Evita efecto de caja redondeada */
} /* Fin nombre alumno sin marcado */

.student-full-bar { /* Barra de nota del alumno en el gráfico */
    max-width: 45px !important; /* Mantiene la barra estrecha */
    background: #f7faff !important; /* Fondo blanco azulado muy sutil */
    border: 2px solid #9fbce8 !important; /* Marca solo el contorno azul */
} /* Fin barra con contorno */

.student-full-average { /* Línea verde de mediana del grupo */
    width: 70px !important; /* Hace la línea verde más corta y proporcionada */
    max-width: 70px !important; /* Evita que se estire con la columna */
    left: 50% !important; /* Coloca la línea desde el centro de la columna */
    right: auto !important; /* Anula el ancho automático anterior */
    transform: translate(-50%, 50%) !important; /* Centra la línea horizontalmente y la mantiene alineada en altura */
} /* Fin línea verde mediana */

.student-full-legend span:first-child i { /* Icono de Nota alumne/a en la leyenda */
    display: inline-block !important; /* Hace que el icono respete ancho y alto */
    width: 28px !important; /* Mantiene el ancho de la leyenda */
    height: 10px !important; /* Mantiene la altura de la leyenda */
    background-color: #f7faff !important; /* Iguala el fondo claro de las barras */
    background-image: none !important; /* Elimina cualquier fondo anterior */
    border: 2px solid #9fbce8 !important; /* Añade el contorno azul */
    border-radius: 8px !important; /* Mantiene el redondeo */
    box-sizing: border-box !important; /* Evita que el borde agrande el icono */
    flex: 0 0 28px !important; /* Evita que flex lo estire o comprima */
} /* Fin icono Nota alumne/a */

.objective-item.objective-done { /* Objetivo marcado como completado */
    background: #eefaf3 !important; /* Pone toda la fila en verde muy suave */
    border-color: #b9e6cc !important; /* Cambia el borde a verde suave */
} /* Fin objetivo completado */

.objective-item.objective-done .objective-text { /* Texto del objetivo completado */
    color: #168456 !important; /* Pone el texto en verde */
    font-weight: 800 !important; /* Mantiene el texto visible */
    text-decoration: none !important; /* Evita que salga tachado si existe algún estilo anterior */
} /* Fin texto objetivo completado */

.final-cell.final-red { /* Nota final suspendida */
    color: #b42318 !important; /* Pone el número en rojo como el fondo */
} /* Fin nota final roja */

.final-cell.final-orange { /* Nota final aprobada justa */
    color: #b65c00 !important; /* Pone el número en naranja como el fondo */
} /* Fin nota final naranja */

.final-cell.final-yellow { /* Nota final notable */
    color: #8a6a00 !important; /* Pone el número en amarillo oscuro */
} /* Fin nota final amarilla */

.final-cell.final-green { /* Nota final excelente */
    color: #087443 !important; /* Pone el número en verde */
} /* Fin nota final verde */

.attendance-mini-box strong { /* Porcentaje de Assistència y Deures */
    font-size: 14px !important; /* Reduce el tamaño del 100% */
    font-weight: 800 !important; /* Baja un poco la fuerza visual */
    line-height: 1 !important; /* Mantiene el texto compacto */
} /* Fin porcentaje compacto */

.attendance-mini-box span { /* Texto Assistència y Deures */
    font-size: 8px !important; /* Mantiene el título pequeño */
    font-weight: 600 !important; /* Mantiene el título menos pixelado */
} /* Fin título compacto */

.attendance-summary-inside { /* Caja de Assistència y Deures */
    height: 40px !important; /* Misma altura exacta que .student-term-finals (la caixa de nota final), para que queden idèntiques i no només centrades per top:50% */
} /* Fin caja asistencia/deures */

.student-term-grade { /* Caja naranja de la nota trimestral */
    width: 92px !important; /* Reduce ligeramente el ancho para equilibrarlo con asistencia y deberes */
    height: 92px !important; /* Reduce ligeramente la altura visual */
    min-width: 92px !important; /* Mantiene tamaño constante */
    min-height: 92px !important; /* Mantiene tamaño constante */
} /* Fin caja nota trimestral */

.student-term-grade-value { /* Número de la nota trimestral */
    font-size: 34px !important; /* Reduce el tamaño del 6.5 para equilibrarlo visualmente */
    font-weight: 600 !important; /* Hace la nota menos dominante */
} /* Fin número nota trimestral */

.student-full-grade { /* Nota inferior del gráfico individual */
    font-size: 18px !important; /* Reduce ligeramente la nota para que no domine el gráfico */
    font-weight: 600 !important; /* Baja un poco la fuerza visual */
} /* Fin nota inferior gráfico */

.student-full-name { /* Nombre de actividad debajo de cada barra */
    font-size: 9px !important; /* Reduce un poco el nombre para que acompañe a la nota */
    font-weight: 800 !important; /* Baja ligeramente la negrita */
} /* Fin nombre actividad gráfico */

.account-settings-block { /* Bloque de datos de cuenta dentro del modal. */
    margin-top: 0px !important; /* Deja aire equilibrado por encima de Dades del compte. */
} /* Fin bloque cuenta. */

.account-settings-block h3 { /* Título Dades del compte */
    margin: 0 0 12px 0 !important; /* Ajusta separación inferior */
    font-size: 14px !important; /* Mantiene tamaño coherente */
    text-transform: uppercase !important; /* Mantiene estilo de títulos */
    color: #26364a !important; /* Usa azul grisáceo de la app */
} /* Fin título cuenta */

.account-settings-grid { /* Grid de campos de cuenta */
    display: grid !important; /* Organiza campos en columnas */
    grid-template-columns: 1fr 1fr !important; /* Dos columnas iguales */
    gap: 12px !important; /* Separación entre campos */
} /* Fin grid cuenta */

.account-settings-grid .field label { /* Etiquetas del bloque cuenta */
    margin-bottom: 6px !important; /* Separa etiqueta del input */
    color: #52657d !important; /* Usa gris azulado suave */
} /* Fin etiquetas cuenta */

.account-settings-grid input { /* Inputs de datos de cuenta */
    border-radius: 8px !important; /* Iguala radio visual de la app */
    border-color: #cfdceb !important; /* Borde suave */
    background: #fbfdff !important; /* Fondo limpio */
} /* Fin inputs cuenta */

.account-full-field { /* Campo que debe ocupar todo el ancho */
    grid-column: 1 / -1 !important; /* Ocupa las dos columnas */
} /* Fin campo ancho completo */

@media (max-width: 720px) { /* Ajuste responsive del modal */
    .account-settings-grid { /* Grid cuenta en pantallas pequeñas */
        grid-template-columns: 1fr !important; /* Una sola columna */
    } /* Fin grid responsive */
} /* Fin responsive */

.forgot-password-btn { /* Botón de recuperar contraseña en el login */
    width: auto !important; /* Evita que ocupe todo el ancho como un botón principal */
    min-height: auto !important; /* Evita altura de botón grande */
    margin: 4px auto 0 auto !important; /* Centra el botón y separa de Entrar */
    padding: 0 !important; /* Quita relleno de botón estándar */
    border: none !important; /* Elimina el borde negro */
    background: transparent !important; /* Deja fondo transparente */
    color: #52657d !important; /* Usa gris azulado discreto */
    font-size: 12px !important; /* Tamaño pequeño tipo enlace */
    font-weight: 700 !important; /* Peso medio */
    text-transform: none !important; /* Evita mayúsculas */
    cursor: pointer !important; /* Mantiene cursor de botón */
    display: block !important; /* Permite centrarlo con margin auto */
} /* Fin botón recuperar contraseña */

#registerBox form.login-form { /* Formulario de registro (NOMBRE, correu...) */
    margin-top: 14px; /* Iguala la separación con la del bloque de arriba (Gratuït durant la fase beta / Ets un centre educatiu) */
} /* Fin separación antes de NOMBRE */

#registerSchoolContactBtn.hidden { /* El .forgot-password-btn de arriba fuerza display:block !important, así que la clase .hidden genérica no basta para ocultar este botón cuando el registro viene de un enlace de centro */
    display: none !important;
} /* Fin ocultar "¿Eres un centro?" en registros de centro */

.forgot-password-btn:hover { /* Hover recuperar contraseña */
    color: #2f5f9f !important; /* Cambia a azul al pasar el ratón */
    text-decoration: underline !important; /* Lo muestra como enlace */
    background: transparent !important; /* Evita fondo al pasar el ratón */
    border: none !important; /* Evita borde al pasar el ratón */
} /* Fin hover recuperar contraseña */

.forgot-password-btn:focus,
.forgot-password-btn:focus-visible,
.forgot-password-btn:active { /* Estados de foco y clic */
    outline: none !important; /* Quita contorno del navegador */
    box-shadow: none !important; /* Quita sombra */
    background: transparent !important; /* Mantiene fondo transparente */
    border: none !important; /* Mantiene sin borde */
} /* Fin foco recuperar contraseña */

button:hover,
.btn:hover,
.icon-btn:hover,
.session-backup:hover,
.backup-icon-btn:hover,
.session-logout:hover,
.comment-edit-btn:hover,
.comment-delete-btn:hover {
    transform: none !important;
    box-shadow: none !important;
    filter: none !important;
    opacity: 0.72 !important;
}

.activity-edit-btn:hover,
.activity-delete-btn:hover,
.column-filter-btn:hover,
.pretty-select-button:hover,
.student-dropdown-button:hover,
.pretty-select:hover,
.pretty-select:hover *,
.student-dropdown:hover,
.student-dropdown:hover * {
    opacity: 1 !important;
    filter: none !important;
}

#prettyTermSelect,
#prettyTermSelect *,
#prettySortSelect,
#prettySortSelect *,
#prettyClassSelect,
#prettyClassSelect *,
.student-dropdown,
.student-dropdown * {
    opacity: 1 !important;
    filter: none !important;
}

#prettyTermSelect .pretty-select-button:hover,
#prettySortSelect .pretty-select-button:hover,
#prettyClassSelect .pretty-select-button:hover,
#studentDropdownButton:hover {
    opacity: 1 !important;
    filter: none !important;
    background: white !important;
    background-color: white !important;
}

#prettyExpandedTermSelect,
#prettyExpandedTermSelect *,
#prettyExpandedSortSelect,
#prettyExpandedSortSelect * {
    opacity: 1 !important;
    filter: none !important;
}

#prettyExpandedTermSelect .pretty-select-button:hover,
#prettyExpandedSortSelect .pretty-select-button:hover {
    opacity: 1 !important;
    filter: none !important;
    background: white !important;
    background-color: white !important;
}

.column-filter-search {
    border: 1px solid #8fb3e6 !important;
}

.column-filter-actions button {
    border: none !important;
    background: #edf4ff !important;
    color: #2f5f9f !important;
    opacity: 1 !important;
}

button#btnImportBackup.session-backup.backup-icon-btn:hover {
    background: white !important;
    background-color: white !important;
}

.login-language-switcher button {
    background: white !important;
    border: 1px solid #b9cdef !important;
    box-shadow: none !important;
    color: #2f5f9f !important;
}

.login-language-switcher button:hover {
    background: white !important;
    box-shadow: none !important;
    opacity: 0.72 !important;
}

.login-language-switcher button.language-option-active {
    background: #eef5ff !important;
    border: 1px solid #3f79db !important;
    box-shadow: none !important;
    color: #2f5f9f !important;
}

.login-page .login-language-switcher button[data-language-option] {
    background: white !important;
    border: 1px solid #b9cdef !important;
    box-shadow: none !important;
    outline: none !important;
    color: #2f5f9f !important;
}

.login-page .login-language-switcher button[data-language-option].language-option-active {
    background: #eef5ff !important;
    border: 1px solid #3f79db !important;
    box-shadow: none !important;
    outline: none !important;
    color: #2f5f9f !important;
}

.login-page .login-language-switcher button[data-language-option]:focus,
.login-page .login-language-switcher button[data-language-option]:focus-visible,
.login-page .login-language-switcher button[data-language-option]:active {
    box-shadow: none !important;
    outline: none !important;
}

.student-full-legend,
.student-full-legend span {
    background: transparent !important;
    background-color: transparent !important;
}

.student-term-finals {
    position: absolute !important;
    top: 12px !important; /* Mismo "top" fijo que .attendance-summary-inside: el centrado (top:50%) se calculaba respecto a TODO el alto de .student-chart, no solo la franja superior, así que la caja acababa en el centro del gráfico en vez de arriba */
    left: 202px !important;
    right: 250px !important;
    height: 40px !important; /* Misma altura exacta que .attendance-summary-inside, para que queden idèntiques i no només centrades per top:50% */

    display: flex !important;
    align-items: stretch !important;
    justify-content: flex-start !important;
    gap: 8px !important;

    z-index: 11 !important;
    background: transparent !important;
}

.student-term-final-badge {
    width: 40px !important;
    height: 40px !important; /* Misma altura que .attendance-summary-inside, ja que és el que fa que .student-term-finals (el seu contenidor) es veja alt */
    min-height: 40px !important;
    padding: 0 !important;

    display: flex !important;
    align-items: center !important;
    justify-content: center !important;

    border: 1px solid #d8b23a !important;
    border-radius: 8px !important;
    box-sizing: border-box !important;
}

.student-term-final-badge strong {
    font-size: 14px !important;
    font-weight: 600 !important;
    line-height: 1 !important;
}

.student-term-final-badge.final-red {
    background: #ffe5e5 !important;
    color: #b42318 !important;
    border: 1px solid #f0b8b5 !important;
}

.student-term-final-badge.final-orange {
    background: #fff0d6 !important;
    color: #b65c00 !important;
    border: 1px solid #f4c98c !important;
}

.student-term-final-badge.final-yellow {
    background: #fff8c5 !important;
    color: #8a6a00 !important;
    border: 1px solid #eadf8a !important;
}

.student-term-final-badge.final-green {
    background: #dff7ea !important;
    color: #087443 !important;
    border: 1px solid #9dd8b8 !important;
}

.student-term-finals {
    max-width: calc(100% - 460px) !important;
    overflow: hidden !important;
}

.student-term-final-badge {
    flex: 0 0 40px !important;
}

.attendance-mini-box strong {
    font-weight: 600 !important;
}

#selectedStudentName {
    font-weight: 600 !important;
}

#studentConditionInput {
    font-weight: 500 !important;
}

#studentDropdownButton span {
    font-weight: inherit !important;
}

#prettyClassSelect button.pretty-select-button,
#prettyTermSelect button.pretty-select-button,
#prettySortSelect button.pretty-select-button,
#prettyExpandedTermSelect button.pretty-select-button,
#prettyExpandedSortSelect button.pretty-select-button,
.sort-field-header #prettySortSelect button.pretty-select-button {
    font-weight: 500 !important;
}

#prettyClassSelect button.pretty-select-button span:first-child,
#prettyTermSelect button.pretty-select-button span:first-child,
#prettySortSelect button.pretty-select-button span:first-child,
#prettyExpandedTermSelect button.pretty-select-button span:first-child,
#prettyExpandedSortSelect button.pretty-select-button span:first-child,
.sort-field-header #prettySortSelect button.pretty-select-button span:first-child {
    font-weight: 500 !important;
}

.objective-text {
    font-weight: 600 !important;
}

.field label {
    font-weight: 700 !important;
}

.field label {
    font-weight: 500 !important;
}

.agenda-time-picker-btn {
    font-weight: 600 !important;
}

.agenda-time-picker-btn span {
    font-weight: 600 !important;
}

.agenda-time-picker-option {
    font-weight: 600 !important;
} 

/* =========================================================
   NEGRITA SOLO EN ETIQUETAS SUPERIORES
========================================================= */

label[for="classSelect"], /* CLASSE ACTIVA */

label[for="studentDropdownButton"], /* ALUMNE/A */

label[for="studentConditionInput"], /* CONDICIÓ */

label[for="termSelect"], /* TRIMESTRE */

label[for="studentSortSelect"] { /* ORDENAR */

    font-weight: 750 !important; /* Hace solo estas etiquetas mucho más gruesas */

    color: #061b38 !important; /* Oscurece solo estas etiquetas para reforzar la negrita */

    letter-spacing: 0.02em !important; /* Mejora la presencia visual sin cambiar el tamaño */
}

/* =========================================================
   NEGRITA NORMAL EN ETIQUETAS DEL MODAL DE NOTAS AMPLIADO
========================================================= */

.expanded-table-modal-card label[for="expandedTermSelect"] { /* Texto TRIMESTRE dentro de la tabla ampliada */

    font-weight: 750 !important; /* Baja la negrita solo en TRIMESTRE del modal ampliado */

    color: #26364a !important; /* Mantiene un azul oscuro normal sin verse tan pesado */
}

.expanded-table-modal-card label[for="expandedSortSelect"] { /* Texto ORDENAR dentro de la tabla ampliada */

    font-weight: 750 !important; /* Baja la negrita solo en ORDENAR del modal ampliado */

    color: #26364a !important; /* Mantiene un azul oscuro normal sin verse tan pesado */
}

/* =========================================================
   LEYENDA DEL GRÁFICO EN VERTICAL
========================================================= */

.student-full-legend { /* Contenedor de la leyenda del gráfico individual */

    flex-direction: column !important; /* Coloca Nota alumne/a y Mediana grup una encima de la otra */

    align-items: flex-start !important; /* Alinea las dos líneas de la leyenda a la izquierda */

    gap: 6px !important; /* Reduce la separación entre las dos líneas */

    height: auto !important; /* Permite que la leyenda crezca en vertical */
}

.student-full-legend span { /* Cada línea de la leyenda */

    min-height: 14px !important; /* Mantiene una altura cómoda para cada elemento */
}

/* =========================================================
   LEYENDA: ACORTAR LÍNEA DE MEDIANA
========================================================= */

.full-legend-line { /* Línea verde de la leyenda */

    width: 28px !important; /* Reduce la longitud para alinearla visualmente con el icono azul */

    margin-left: 0px !important; /* Compensa el ancho visual y mejora la alineación */
}

/* =========================================================
   OBJETIVOS: EVITAR NEGRITA AL MARCAR
========================================================= */

.objective-item.objective-done .objective-text { /* Texto del objetivo cuando está marcado como cumplido */

    font-weight: 600 !important; /* Mantiene el texto sin negrita al seleccionar el objetivo */
}

/* =========================================================
   PESTAÑAS PRINCIPALES: CUADERN DOCENT / REUNIONS
========================================================= */

.app-module-tabs { /* Contenedor de las pestañas principales */

    display: flex !important; /* Coloca las pestañas en horizontal */

    justify-content: center !important; /* Centra las pestañas bajo la cabecera */

    align-items: center !important; /* Alinea las pestañas verticalmente */

    gap: 8px !important; /* Separa las dos pestañas */

    margin-top: -4px !important; /* Acerca las pestañas a la cabecera */

    margin-bottom: 10px !important; /* Separa las pestañas del contenido */

    flex-shrink: 0 !important; /* Evita que las pestañas se compriman */
} /* Fin contenedor pestañas */

.app-module-tab { /* Botón de cada pestaña principal */

    min-width: 170px !important; /* Da anchura cómoda a cada pestaña */

    height: 38px !important; /* Mantiene altura compacta */

    padding: 0 18px !important; /* Añade espacio lateral */

    border: 1px solid #c9d8ee !important; /* Usa borde azul suave */

    border-radius: 999px !important; /* Hace las pestañas tipo píldora */

    background: #f4f8fe !important; /* Fondo suave para pestaña inactiva */

    color: #2f5f9f !important; /* Texto azul de pestaña */

    font-size: 13px !important; /* Tamaño de texto cómodo */

    font-weight: 900 !important; /* Texto fuerte */

    text-transform: uppercase !important; /* Mantiene estilo de la app */

    cursor: pointer !important; /* Muestra cursor de botón */

    transition: all 0.18s ease !important; /* Suaviza el cambio visual */
} /* Fin botón pestaña */

.app-module-tab:hover { /* Pestaña al pasar el ratón */

    background: #e8f1ff !important; /* Fondo más visible al pasar el ratón */

    border-color: #a9c3e8 !important; /* Borde más marcado al pasar el ratón */
} /* Fin hover pestaña */

.app-module-tab-active { /* Pestaña activa */

    background: #2f6fed !important; /* Fondo azul para pestaña seleccionada */

    color: #ffffff !important; /* Texto blanco en pestaña activa */

    border-color: #2f6fed !important; /* Borde igual al fondo activo */

    box-shadow: 0 8px 18px rgba(47, 111, 237, 0.22) !important; /* Sombra suave de pestaña activa */
} /* Fin pestaña activa */

.app-page-view { /* Cada página interna de la app */

    min-height: 0 !important; /* Permite que el contenido se adapte al alto disponible */

    flex: 1 !important; /* Hace que cada vista ocupe el espacio disponible */

    display: flex !important; /* Permite controlar el contenido interno */

    flex-direction: column !important; /* Coloca el contenido de cada vista en vertical */
} /* Fin vista interna */

.app-page-view.hidden { /* Vista interna oculta */

    display: none !important; /* Oculta completamente la vista que no está activa */
} /* Fin vista oculta */

.meetings-page { /* Contenedor de la página de reuniones */

    flex: 1 !important; /* Ocupa todo el alto disponible */

    min-height: 0 !important; /* Permite ajuste correcto dentro de main */

    display: flex !important; /* Permite que la tarjeta crezca */

    flex-direction: column !important; /* Ordena el contenido verticalmente */
} /* Fin página reuniones */

.meetings-card { /* Tarjeta principal del módulo reuniones */

    flex: 1 !important; /* Hace que la tarjeta ocupe el espacio disponible */

    min-height: 0 !important; /* Evita desbordes verticales */

    display: flex !important; /* Organiza la tarjeta en vertical */

    flex-direction: column !important; /* Coloca cabecera y contenido uno debajo de otro */
} /* Fin tarjeta reuniones */

.meetings-empty-state { /* Estado vacío inicial de reuniones */

    flex: 1 !important; /* Centra el contenido dentro de la tarjeta */

    display: flex !important; /* Permite centrar el estado vacío */

    flex-direction: column !important; /* Coloca icono, título y texto en vertical */

    align-items: center !important; /* Centra horizontalmente */

    justify-content: center !important; /* Centra verticalmente */

    text-align: center !important; /* Centra los textos */

    gap: 10px !important; /* Separa icono, título y texto */

    color: #52657d !important; /* Usa gris azulado suave */
} /* Fin estado vacío reuniones */

.meetings-empty-icon { /* Icono grande del estado vacío */

    font-size: 44px !important; /* Hace visible el icono de reuniones */

    line-height: 1 !important; /* Evita altura extra del emoji */
} /* Fin icono reuniones */

.meetings-empty-state h3 { /* Título del estado vacío */

    margin: 0 !important; /* Elimina margen por defecto */

    color: #1f3047 !important; /* Usa color de título de la app */

    font-size: 18px !important; /* Tamaño de título cómodo */

    font-weight: 900 !important; /* Mantiene título fuerte */
} /* Fin título estado vacío */

.meetings-empty-state p { /* Texto explicativo del estado vacío */

    margin: 0 !important; /* Elimina margen por defecto */

    max-width: 520px !important; /* Limita ancho para lectura cómoda */

    font-size: 14px !important; /* Tamaño cómodo de lectura */

    line-height: 1.5 !important; /* Mejora la legibilidad */
} /* Fin texto estado vacío */

/* =========================================================
   INTEGRAR PESTAÑAS CON LA CABECERA
========================================================= */

.app-module-tabs { /* Contenedor de las pestañas principales */

    margin-top: -2px !important; /* Acerca las pestañas al bloque superior */

    margin-bottom: -2px !important; /* Reduce el espacio entre pestañas y contenido principal */

    padding: 0 !important; /* Elimina relleno extra si lo hubiera */
}

.main { /* Contenedor principal de la aplicación */

    gap: 6px !important; /* Reduce la separación vertical entre cabecera, pestañas y contenido */
}

.dashboard-columns { /* Columnas principales de la app */

    margin-top: 0 !important; /* Evita espacio superior extra antes de las tarjetas */
}

/* =========================================================
   PESTAÑAS MÁS COMPACTAS
========================================================= */

.app-module-tab { /* Botón de cada pestaña principal */

    height: 34px !important; /* Reduce un poco la altura de las pestañas */

    min-width: 160px !important; /* Hace las pestañas algo más compactas */

    font-size: 12px !important; /* Ajusta el texto al nuevo tamaño */
}

/* =========================================================
   OCULTAR BOTÓN ANTIGUO DE AGENDA
========================================================= */

#btnAgenda { /* Botón antiguo de agenda situado junto al usuario */

    display: none !important; /* Oculta el botón porque ahora la agenda está en las pestañas principales */
} /* Fin ocultar botón antiguo de agenda */

.app-module-tabs { /* Contenedor de pestañas principales */

    gap: 7px !important; /* Ajusta la separación para que quepan Cuadern Docent, Agenda y Reunions */
} /* Fin ajuste contenedor pestañas */

.app-module-tab { /* Botones de las pestañas principales */

    min-width: 145px !important; /* Reduce un poco el ancho para encajar las tres pestañas */
} /* Fin ajuste botones pestañas */

/* =========================================================
   AGENDA COMO PÁGINA INTERNA
========================================================= */

.agenda-page { /* Contenedor general de la página agenda */

    flex: 1 !important; /* Ocupa todo el espacio disponible */

    min-height: 0 !important; /* Permite que la agenda se adapte a la altura */

    display: flex !important; /* Permite que la tarjeta crezca */
}

.agenda-page-card { /* Tarjeta principal de agenda */

    flex: 1 !important; /* Hace que la tarjeta ocupe todo el alto disponible */

    min-height: 0 !important; /* Evita desbordes */

    display: flex !important; /* Organiza cabecera y agenda */

    flex-direction: column !important; /* Coloca cabecera arriba y calendario debajo */
}

.agenda-page-header { /* Cabecera de la agenda integrada */

    flex-shrink: 0 !important; /* Evita que la cabecera se comprima */
}

.agenda-page-card .agenda-grid { /* Agenda dentro de la página */

    flex: 1 !important; /* Ocupa todo el espacio disponible dentro de la tarjeta */

    min-height: 0 !important; /* Permite scroll interno correcto */

    max-height: none !important; /* Quita límites pensados para modal */

    overflow: auto !important; /* Mantiene scroll interno de la agenda */
}

/* =========================================================
   AGENDA: REPARAR ESQUINA SUPERIOR IZQUIERDA
========================================================= */

.agenda-page-card .agenda-grid { /* Contenedor exterior de la agenda como página */

    border: 1px solid #d6e1ef !important; /* Fuerza un borde visible alrededor de toda la agenda */

    border-radius: 8px !important; /* Mantiene el mismo redondeo que la agenda original */

    overflow: hidden !important; /* Recorta las esquinas internas para que no tapen el borde */
}

.agenda-page-card .agenda-table { /* Cuadrícula interna real de la agenda */

    border-radius: 8px !important; /* Hace que la cuadrícula respete el redondeo exterior */

    overflow: hidden !important; /* Evita que las cabeceras tapen las esquinas */
}

.agenda-page-card .agenda-time-head { /* Celda vacía de la esquina superior izquierda */

    border-top-left-radius: 8px !important; /* Redondea específicamente la esquina superior izquierda */

    background: rgba(248, 251, 255, 0.96) !important; /* Mantiene el fondo de cabecera para que se vea limpio */
}

.agenda-page-card .agenda-head:last-of-type { /* Cabecera del viernes en la esquina superior derecha */

    border-top-right-radius: 8px !important; /* Redondea específicamente la esquina superior derecha */
}

/* =========================================================
   AGENDA: RECUPERAR CABECERA DE DÍAS
========================================================= */

.agenda-page-card .agenda-grid { /* Contenedor exterior de la agenda como página */

    overflow: auto !important; /* Recupera el scroll sin cortar la cabecera de días */
}

.agenda-page-card .agenda-table { /* Cuadrícula interna real de la agenda */

    overflow: visible !important; /* Permite que la cabecera de días vuelva a mostrarse */
}

.agenda-page-card .agenda-time-head { /* Celda vacía superior izquierda */

    border-top-left-radius: 8px !important; /* Mantiene la esquina superior izquierda redondeada */
}

.agenda-page-card .agenda-head { /* Cabeceras de los días de la semana */

    display: flex !important; /* Fuerza que las cabeceras vuelvan a mostrarse correctamente */

    visibility: visible !important; /* Evita que queden ocultas por reglas anteriores */

    opacity: 1 !important; /* Asegura que los días y números sean visibles */
}

/* =========================================================
   AGENDA: CENTRAR CABECERAS DE DÍAS
========================================================= */

.agenda-page-card .agenda-head { /* Cabeceras de lunes a viernes dentro de la agenda */

    justify-content: center !important; /* Centra horizontalmente el día y el número */

    align-items: center !important; /* Centra verticalmente el contenido de la cabecera */

    text-align: center !important; /* Centra el texto dentro de cada cabecera */

    flex-direction: column !important; /* Coloca el nombre del día encima del número */
}

.agenda-page-card .agenda-head strong, /* Nombre del día */

.agenda-page-card .agenda-head span { /* Número del día */

    width: 100% !important; /* Hace que cada línea ocupe todo el ancho para poder centrarse */

    text-align: center !important; /* Centra cada texto individualmente */
}

/* =========================================================
   PESTAÑAS INTEGRADAS EN LA CABECERA
========================================================= */

.app-module-tabs { /* Barra inferior integrada bajo la cabecera */

    width: calc(100% - 20px) !important; /* Hace que la barra tenga el mismo ancho visual que la cabecera */

    margin: -8px auto 8px auto !important; /* Pega la barra a la cabecera y separa poco el contenido */

    padding: 0 24px !important; /* Alinea las pestañas con el interior de la cabecera */

    height: 38px !important; /* Da altura de barra de navegación */

    display: flex !important; /* Coloca las pestañas en horizontal */

    justify-content: center !important; /* Centra las pestañas en la barra */

    align-items: stretch !important; /* Hace que las pestañas ocupen toda la altura */

    gap: 0 !important; /* Elimina separación entre pestañas para que parezca una barra continua */

    background: rgba(255, 255, 255, 0.72) !important; /* Punt mig entre el fons gairebé opac d'abans (.94) i el massa transparent d'ara mateix (.5) */

    border: 1px solid var(--border) !important; /* Añade borde igual al layout superior */

    border-top: none !important; /* Une visualmente la barra con la cabecera */

    border-radius: 0 0 8px 8px !important; /* Redondea solo las esquinas inferiores */

    box-shadow: none !important; /* Evita efecto de botón flotante */
}

.app-module-tab { /* Cada pestaña de navegación */

    min-width: 190px !important; /* Da anchura uniforme a cada pestaña */

    height: 100% !important; /* Ocupa toda la altura de la barra */

    padding: 0 24px !important; /* Añade espacio lateral cómodo */

    border: none !important; /* Quita borde de botón individual */

    border-radius: 0 !important; /* Elimina forma de píldora */

    background: transparent !important; /* Integra la pestaña en la barra */

    color: #52657d !important; /* Color discreto para pestañas inactivas */

    font-size: 13px !important; /* Mantiene tamaño cómodo */

    font-weight: 900 !important; /* Mantiene texto fuerte */

    text-transform: uppercase !important; /* Mantiene estilo de la app */

    cursor: pointer !important; /* Mantiene cursor interactivo */

    position: relative !important; /* Permite dibujar la línea inferior activa */

    box-shadow: none !important; /* Quita sombra de botones anteriores */
}

.app-module-tab:hover { /* Pestaña al pasar el ratón */

    background: #f4f8fe !important; /* Da un hover suave sin romper la integración */

    color: #2f5f9f !important; /* Refuerza el texto al pasar el ratón */
}

.app-module-tab-active { /* Pestaña activa */

    background: transparent !important; /* Mantiene la pestaña activa integrada en la barra */

    color: #1f5fd6 !important; /* Azul principal para la pestaña activa */

    box-shadow: none !important; /* Quita sombra de píldora */
}

.app-module-tab-active::after { /* Línea inferior de pestaña activa */

    content: "" !important; /* Crea la línea decorativa */

    position: absolute !important; /* Posiciona la línea dentro de la pestaña */

    left: 22px !important; /* Deja margen a la izquierda de la línea */

    right: 22px !important; /* Deja margen a la derecha de la línea */

    bottom: 0 !important; /* Coloca la línea pegada abajo */

    height: 3px !important; /* Grosor de la línea activa */

    border-radius: 999px 999px 0 0 !important; /* Redondea la parte superior de la línea */

    background: #2f6fed !important; /* Color azul principal de la línea activa */
}

/* =========================================================
   PESTAÑAS PLEGABLES BAJO LA CABECERA
========================================================= */

.module-tabs-toggle { /* Botón pequeño para abrir y cerrar las pestañas */

    width: 120px !important; /* Define una anchura compacta para el botón */

    height: 28px !important; /* Hace el botón más pequeño que las pestañas */

    margin: -7px auto 0 auto !important; /* Lo pega visualmente a la cabecera superior */

    display: flex !important; /* Permite centrar el contenido del botón */

    align-items: center !important; /* Centra verticalmente el texto */

    justify-content: center !important; /* Centra horizontalmente el texto */

    border: 1px solid var(--border) !important; /* Usa el mismo borde suave de la app */

    border-top: none !important; /* Hace que parezca una pestaña que sale de la cabecera */

    border-radius: 0 0 12px 12px !important; /* Redondea solo las esquinas inferiores */

    background: rgba(255, 255, 255, 0.96) !important; /* Mantiene fondo blanco como la cabecera */

    color: #2f5f9f !important; /* Usa azul de la app */

    font-size: 11px !important; /* Hace el texto discreto */

    font-weight: 900 !important; /* Mantiene el texto visible */

    text-transform: uppercase !important; /* Mantiene el estilo de la interfaz */

    cursor: pointer !important; /* Muestra cursor de botón */

    z-index: 5 !important; /* Mantiene el botón por encima del contenido */
} /* Fin botón abrir/cerrar pestañas */

.app-module-tabs { /* Barra de pestañas cuando está visible */

    transition: max-height 0.22s ease, opacity 0.18s ease, margin 0.22s ease !important; /* Suaviza el plegado y desplegado */

    overflow: hidden !important; /* Permite esconder las pestañas sin que sobresalgan */
} /* Fin barra visible */

.app-module-tabs.module-tabs-hidden { /* Barra de pestañas cuando está oculta */

    max-height: 0 !important; /* Pliega completamente la barra */

    height: 0 !important; /* Elimina la altura visible */

    opacity: 0 !important; /* Hace desaparecer las pestañas */

    margin-top: 0 !important; /* Evita hueco superior al ocultar */

    margin-bottom: 0 !important; /* Evita hueco inferior al ocultar */

    padding-top: 0 !important; /* Elimina relleno superior al ocultar */

    padding-bottom: 0 !important; /* Elimina relleno inferior al ocultar */

    border-width: 0 !important; /* Oculta el borde de la caja plegada */
} /* Fin barra oculta */

/* =========================================================
   CONTROL INVISIBLE PARA MOSTRAR MÓDULOS
========================================================= */

.module-tabs-toggle { /* Botón invisible que abre o cierra las pestañas */

    width: 220px !important; /* Define una zona clicable cómoda bajo el título */

    height: 2px !important; /* Convierte el botón en una línea muy fina */

    margin: -5px auto 0 auto !important; /* Lo coloca justo debajo de la cabecera */

    padding: 0 !important; /* Elimina cualquier relleno del botón */

    border: none !important; /* Elimina el borde visible del botón */

    border-radius: 999px !important; /* Redondea la línea azul */

    background: rgba(47, 111, 237, 0.45) !important; /* Crea una línea azul sutil */

    color: transparent !important; /* Oculta el texto del botón */

    font-size: 0 !important; /* Oculta cualquier texto interno */

    overflow: hidden !important; /* Evita que se vea el contenido del botón */

    cursor: pointer !important; /* Mantiene la zona clicable */

    display: block !important; /* Hace que la línea se comporte como bloque centrado */

    opacity: 0.55 !important; /* Hace que la línea sea discreta */
}

.module-tabs-toggle:hover { /* Línea azul al pasar el ratón */

    height: 4px !important; /* Hace la línea un poco más visible al pasar el ratón */

    opacity: 0.9 !important; /* Refuerza la línea al pasar el ratón */

    background: rgba(47, 111, 237, 0.45) !important; /* Crea una línea azul sutil */
}

/* =========================================================
   PESTAÑA ACTIVA MÁS SUAVE
========================================================= */

.app-module-tab-active { /* Pestaña activa de la página seleccionada */

    color: #2f5f9f !important; /* Usa un azul más suave que el azul fuerte actual */
}

.app-module-tab-active::after { /* Línea inferior de la pestaña activa */

    background: #8bb4f5 !important; /* Cambia la línea activa a un azul más claro y elegante */
}

/* =========================================================
   REUNIONES: CABECERA SIN TÍTULO
========================================================= */

.meetings-card-header-clean { /* Cabecera limpia del módulo reuniones */

    justify-content: flex-end !important; /* Coloca el botón de nueva reunión a la derecha */
}

/* =========================================================
   CABECERA: ALINEAR USUARIO E ICONOS A LA DERECHA
========================================================= */

.session-box { /* Caja derecha del usuario conectado */

    display: grid !important; /* Organiza el nombre arriba y los botones debajo */

    grid-template-columns: repeat(4, auto) !important; /* Crea columnas para admin, guardar, importar y cerrar sesión (agenda está oculto con display:none) */

    justify-content: end !important; /* Alinea todo el bloque al borde derecho */

    justify-items: end !important; /* Alinea cada elemento al borde derecho de su zona */

    gap: 6px !important; /* Mantiene separación entre iconos y botón */
}

.session-client-button { /* Nombre ALBERT SOTO */

    grid-column: 1 / -1 !important; /* Hace que el nombre ocupe toda la fila superior */

    justify-self: end !important; /* Alinea el final del nombre con el final de cerrar sesión */

    text-align: right !important; /* Alinea el texto del nombre a la derecha */

    width: 100% !important; /* Permite que el texto use toda la fila */
}

/* =========================================================
   PÁGINA DE REUNIONES
========================================================= */

.meetings-layout { /* Layout principal de reuniones */

    flex: 1 !important; /* Ocupa todo el espacio disponible */

    min-height: 0 !important; /* Permite scroll interno */

    display: grid !important; /* Organiza columnas */

    grid-template-columns: 220px 320px 1fr !important; /* Categorías, lista y editor */

    gap: 12px !important; /* Separación entre columnas */
}

.meetings-sidebar,
.meetings-list-panel,
.meetings-editor-panel { /* Columnas del módulo reuniones */

    border: 1px solid var(--border) !important; /* Borde suave */

    border-radius: 8px !important; /* Esquinas redondeadas */

    background: #fbfdff !important; /* Fondo claro */

    padding: 12px !important; /* Espacio interno */

    min-height: 0 !important; /* Permite adaptación */
}

.meeting-categories-list,
.meetings-list { /* Listas internas */

    display: flex !important; /* Lista vertical */

    flex-direction: column !important; /* Elementos uno debajo de otro */

    gap: 8px !important; /* Separación entre elementos */

    overflow-y: auto !important; /* Scroll interno */

    min-height: 0 !important; /* Evita desbordes */
}

.meeting-category-btn,
.meeting-list-item { /* Botones de categoría y reunión */

    width: 100% !important; /* Ocupa ancho completo */

    border: 1px solid #d5e0ef !important; /* Borde suave */

    border-radius: 8px !important; /* Esquinas redondeadas */

    background: white !important; /* Fondo blanco */

    color: #26364a !important; /* Texto oscuro */

    padding: 10px !important; /* Espacio interno */

    text-align: left !important; /* Texto alineado a la izquierda */

    cursor: pointer !important; /* Cursor interactivo */

    font-weight: 500 !important; /* Texto visible */
}

.meeting-category-active,
.meeting-list-item-active { /* Elemento activo */

    background: #e8f1ff !important; /* Fondo azul suave */

    border-color: #8bb4f5 !important; /* Borde azul */

    color: #1f5fd6 !important; /* Texto azul */
}

.meeting-list-item { /* Tarjeta de una reunión */

    display: flex !important; /* Organiza contenido */

    flex-direction: column !important; /* Título, fecha y categoría */

    gap: 4px !important; /* Separación interna */
}

.meeting-list-item span,
.meeting-list-item small { /* Textos secundarios de reunión */

    color: #607086 !important; /* Gris secundario */

    font-size: 12px !important; /* Tamaño pequeño */
}

.meeting-editor-box { /* Caja del editor */

    height: 100% !important; /* Ocupa todo el alto */

    display: flex !important; /* Organiza editor */

    flex-direction: column !important; /* Datos, toolbar, documento y botones */

    gap: 10px !important; /* Separación */
}

.meeting-editor-fields { /* Campos fecha, hora y participantes */

    display: grid !important; /* Organiza campos */

    grid-template-columns: 150px 120px 1fr !important; /* Fecha, hora y participantes */

    gap: 8px !important; /* Separación */
}

.meeting-title-input { /* Título de reunión */

    font-size: 20px !important; /* Título grande */

    font-weight: 600 !important; /* Título destacado */
}

.meeting-toolbar { /* Barra de herramientas */

    display: flex !important; /* Botones en línea */

    gap: 6px !important; /* Separación */

    border-bottom: 1px solid var(--border) !important; /* Línea separadora */

    padding-bottom: 8px !important; /* Espacio bajo botones */
}

.meeting-toolbar button { /* Botones editor */

    border: 1px solid #c9d8ee !important; /* Borde azul suave */

    border-radius: 8px !important; /* Esquinas suaves */

    background: #f4f8fe !important; /* Fondo azul claro */

    color: #2f5f9f !important; /* Texto azul */

    font-weight: 600 !important; /* Texto fuerte */

    cursor: pointer !important; /* Cursor interactivo */
}

.meeting-content-editor { /* Editor tipo documento */

    flex: 1 !important; /* Ocupa todo el espacio disponible */

    min-height: 0 !important; /* Permite scroll */

    overflow-y: auto !important; /* Scroll interno */

    border: 1px solid #d5e0ef !important; /* Borde de documento */

    border-radius: 14px !important; /* Esquinas redondeadas */

    background: white !important; /* Fondo documento */

    padding: 18px !important; /* Espacio de escritura */

    font-size: 15px !important; /* Tamaño cómodo */

    line-height: 1.7 !important; /* Lectura cómoda */

    outline: none !important; /* Quita borde negro al escribir */
}

.meeting-editor-actions { /* Botones inferiores del editor de reuniones */
    display: flex !important; /* Mantiene los botones en línea */
    justify-content: stretch !important; /* Permite que el botón ocupe todo el ancho */
    gap: 8px !important; /* Mantiene separación si hubiera más botones */
} /* Fin botones inferiores reuniones */

#btnSaveMeeting { /* Botón SAVE MEETING con estilo idéntico a SAVE COMMENT */
    margin-top: 4px !important; /* Mantiene la misma separación superior */
    flex-shrink: 0 !important; /* Evita que el botón se comprima */
    width: 100% !important; /* Ocupa todo el ancho disponible */
    min-height: 38px !important; /* Mantiene la misma altura */
    background: #f4f8fe !important; /* Mismo fondo que SAVE COMMENT */
    color: #2f5f9f !important; /* Mismo color de texto */
    border: 1px solid #c9d8ee !important; /* Mismo borde */
    border-radius: 8px !important; /* Usa el mismo redondeo global de los botones */
    font-weight: 900 !important; /* Mantiene el texto destacado */
} /* Fin botón SAVE MEETING */

#btnSaveMeeting:hover { /* Hover idéntico a SAVE COMMENT */
    background: #e8f1ff !important; /* Mismo fondo hover */
    color: #234f86 !important; /* Mismo color hover */
    border-color: #a9c3e8 !important; /* Mismo borde hover */
} /* Fin hover SAVE MEETING */

/* =========================================================
   REUNIONES: ESPACIO ENTRE BOTÓN Y LISTA
========================================================= */

.meetings-list-header { /* Cabecera de la lista de reuniones */

    margin-bottom: 10px !important; /* Separa el botón Nova reunió de las reuniones creadas */
}

/* =========================================================
   REUNIONES: OCULTAR ESTADO VACÍO CUANDO TOCA
========================================================= */

.meetings-empty-state.hidden { /* Estado vacío de reuniones cuando debe ocultarse */

    display: none !important; /* Fuerza que desaparezcan las manos y el mensaje al seleccionar reunión */
}

/* =========================================================
   REUNIONES: BOTONES DE GUARDADO SIEMPRE VISIBLES
========================================================= */

.meetings-editor-panel { /* Panel derecho del editor de reuniones */

    overflow: hidden !important; /* Evita que el editor se salga del panel */
}

.meeting-editor-actions { /* Zona inferior de botones del editor */

    flex-shrink: 0 !important; /* Evita que el botón Guardar reunión desaparezca abajo */

    padding-top: 8px !important; /* Separa el botón del editor */
}

.meeting-content-editor { /* Caja de escritura de la reunión */

    max-height: calc(100vh - 360px) !important; /* Reduce la altura para dejar visible el botón guardar */

    min-height: 260px !important; /* Mantiene una zona cómoda para escribir */
}

/* =========================================================
   REUNIONES: CORREGIR OCULTACIÓN Y BOTÓN GUARDAR
========================================================= */

.meeting-editor-box.hidden { /* Editor de reunión cuando no debe verse */

    display: none !important; /* Oculta realmente el editor si no hay reunión seleccionada */
}

.meetings-editor-panel .meetings-empty-state.hidden { /* Mensaje de manos cuando hay reunión seleccionada */

    display: none !important; /* Oculta realmente las manos y el texto superior */
}

.meetings-editor-panel { /* Panel derecho de edición de reuniones */

    display: flex !important; /* Permite controlar el alto interno */

    flex-direction: column !important; /* Coloca el editor en vertical */

    overflow: hidden !important; /* Evita que el contenido se salga */
}

.meeting-editor-box { /* Caja completa del editor de reunión */

    flex: 1 !important; /* Ocupa todo el espacio disponible */

    min-height: 0 !important; /* Permite que el editor se reduzca correctamente */

    display: flex !important; /* Organiza campos, editor y botones */

    flex-direction: column !important; /* Coloca todo en vertical */
}

.meeting-content-editor { /* Zona blanca donde escribes el acta */

    flex: 1 !important; /* Ocupa el espacio disponible sin tapar botones */

    min-height: 220px !important; /* Mantiene una zona cómoda de escritura */

    max-height: none !important; /* Quita el límite anterior que podía romper el layout */
}

.meeting-editor-actions { /* Zona inferior con Guardar reunión y eliminar */

    display: flex !important; /* Muestra los botones en línea */

    justify-content: flex-end !important; /* Coloca los botones a la derecha */

    gap: 8px !important; /* Separa los botones */

    flex-shrink: 0 !important; /* Evita que desaparezcan al crecer el editor */

    padding-top: 10px !important; /* Separa los botones del editor */

    background: #fbfdff !important; /* Da fondo limpio a la zona inferior */
}

/* =========================================================
   REUNIONES: ESPACIO ENTRE + Y CATEGORÍAS
========================================================= */

.meetings-sidebar-header { /* Cabecera de la columna de categorías */

    margin-bottom: 14px !important; /* Separa el botón + de la primera categoría */
}

.meeting-categories-list { /* Lista de categorías */

    margin-top: 6px !important; /* Añade aire extra antes de las categorías */
}

/* =========================================================
   REUNIONES: TÍTULOS Y BOTONES EN LA MISMA LÍNEA
========================================================= */

.meetings-title-row { /* Fila de título y botón en reuniones */

    display: flex !important; /* Coloca título y botón en horizontal */

    align-items: center !important; /* Centra verticalmente título y botón */

    justify-content: space-between !important; /* Deja el título a la izquierda y el botón a la derecha */

    gap: 10px !important; /* Añade separación entre título y botón */

    margin-bottom: 14px !important; /* Separa la cabecera de las categorías o reuniones */
}

.meetings-title-row h3 { /* Títulos CATEGORIES y REUNIONS */

    margin: 0 !important; /* Elimina margen por defecto */

    font-size: 16px !important; /* Mantiene tamaño parecido al resto de títulos */

    font-weight: 950 !important; /* Hace el título más marcado */

    text-transform: uppercase !important; /* Fuerza mayúsculas por CSS también */
}

.meetings-list-header { /* Cabecera de la lista de reuniones */

    margin-bottom: 14px !important; /* Mantiene separación entre botón y reuniones creadas */
}

.meetings-list-header .btn { /* Botón + NOVA REUNIÓ */

    white-space: nowrap !important; /* Evita que el texto del botón salte de línea */

    font-size: 12px !important; /* Hace el botón más compacto para caber junto al título */
}

/* =========================================================
   REUNIONES: CATEGORÍA SELECCIONADA MÁS SUAVE
========================================================= */

.meeting-category-active { /* Categoría seleccionada en la columna de reuniones */

    background: #f4f8fe !important; /* Usa un azul muy suave como fondo activo */

    border-color: #8bb4f5 !important; /* Usa un borde azul claro parecido al de la pestaña activa */

    color: #2f5f9f !important; /* Usa un azul menos intenso para el texto */
}

/* =========================================================
   REUNIONES: ELIMINAR CATEGORÍAS
========================================================= */

.meeting-category-row { /* Fila que contiene categoría y botón eliminar */

    display: grid !important; /* Coloca categoría y X en la misma fila */

    grid-template-columns: 1fr 32px !important; /* Categoría flexible y botón X fijo */

    gap: 6px !important; /* Separa la categoría del botón eliminar */

    align-items: center !important; /* Centra verticalmente ambos elementos */
	
	position: relative; /* Permite dibujar la línea separadora */
	padding-bottom: 10px; /* Deja espacio para la línea */
	margin-bottom: 0px; /* Separa categorías */
}

.meeting-category-row::after { /* Línea separadora entre categorías */
    content: ""; /* Crea la línea decorativa */
    position: absolute; /* Permite posicionarla */
    left: 12px; /* No llega completamente al borde */
    right: 12px; /* No llega completamente al borde */
    bottom: 0; /* La coloca debajo de la categoría */
    height: 1px; /* Línea fina */
    background: rgba(120, 140, 170, 0.25); /* Gris azulado muy suave */
} /* Fin línea categorías */

.meeting-category-row:last-child::after { /* Última categoría */
    display: none; /* No muestra línea al final de la lista */
} /* Fin última categoría */

.meeting-category-row .meeting-category-btn { /* Botón de categoría dentro de una fila */

    margin: 0 !important; /* Evita separaciones raras dentro de la fila */
}

.meeting-category-delete-btn { /* Botón X para eliminar categoría */

    width: 32px !important; /* Tamaño cuadrado pequeño */

    height: 32px !important; /* Tamaño cuadrado pequeño */

    border: 1px solid #f0b8b5 !important; /* Borde rojo suave */

    border-radius: 10px !important; /* Esquinas redondeadas */

    background: #fff5f5 !important; /* Fondo rojo muy claro */

    color: #c5342d !important; /* X roja */

    font-size: 18px !important; /* Tamaño visible de la X */

    font-weight: 900 !important; /* Hace la X más marcada */

    cursor: pointer !important; /* Muestra cursor de botón */

    display: grid !important; /* Permite centrar la X */

    place-items: center !important; /* Centra la X dentro del botón */

    line-height: 1 !important; /* Evita desajuste vertical */
}

.meeting-category-delete-btn:hover { /* Botón X al pasar el ratón */

    background: #ffe8e8 !important; /* Intensifica el fondo rojo al pasar el ratón */

    border-color: #de8f89 !important; /* Intensifica el borde rojo al pasar el ratón */
}

/* =========================================================
   REUNIONES: X DE CATEGORÍA SIN RECUADRO
========================================================= */

.meeting-category-delete-btn { /* X para eliminar categoría */

    width: 24px !important; /* Hace la X más compacta */

    height: 24px !important; /* Hace la X más compacta */

    border: none !important; /* Quita el recuadro */

    border-radius: 6px !important; /* Mantiene una zona de clic suave */

    background: transparent !important; /* Quita el fondo del botón */

    color: #c5342d !important; /* Usa el mismo rojo de los botones X */

    font-size: 20px !important; /* Hace la X visible */

    font-weight: 900 !important; /* Hace la X gruesa */

    cursor: pointer !important; /* Mantiene cursor de botón */

    display: grid !important; /* Permite centrar la X */

    place-items: center !important; /* Centra la X */

    line-height: 1 !important; /* Evita desajuste vertical */
}

.meeting-category-delete-btn:hover { /* X de categoría al pasar el ratón */

    background: #fff1f1 !important; /* Fondo rojo muy suave como el resto de X */

    color: #b42318 !important; /* Rojo más intenso al pasar el ratón */

    border: none !important; /* Evita que aparezca recuadro al pasar el ratón */
}

/* =========================================================
   REUNIONES: TÍTULOS MENOS PESADOS
========================================================= */

.meetings-title-row h3 { /* Títulos CATEGORIES y REUNIONS */

    font-weight: 700 !important; /* Reduce la negrita respecto al 950 actual */
}

/* =========================================================
   REUNIONES: SELECTOR CATEGORÍA SIN NEGRITA
========================================================= */

#prettyNewMeetingCategory .pretty-select-button { /* Botón visible del selector de categoría en Nova reunió */

    font-weight: 400 !important; /* Quita la negrita del texto seleccionado */
}

#prettyNewMeetingCategory .pretty-select-button span:first-child { /* Texto seleccionado dentro del selector de categoría */

    font-weight: 400 !important; /* Fuerza peso normal solo en el texto de la categoría */
}

#prettyNewMeetingCategory .pretty-select-option { /* Opciones del desplegable de categoría */

    font-weight: 400 !important; /* Quita la negrita también en las opciones del menú */
}

/* =========================================================
   REUNIONES: FECHA Y HORA MÁS BONITAS
========================================================= */

#newMeetingDate, /* Campo fecha de Nova reunió */

#newMeetingTime { /* Campo hora de Nova reunió */

    height: 38px !important; /* Iguala la altura al resto de selectores */

    border: 1px solid #c9d8ee !important; /* Usa borde azul suave como los selectores bonitos */

    border-radius: 12px !important; /* Redondea el campo como el resto de la app */

    background: #ffffff !important; /* Mantiene fondo blanco limpio */

    color: #26364a !important; /* Usa texto oscuro suave */

    font-size: 13px !important; /* Mantiene tamaño coherente */

    font-weight: 400 !important; /* Evita que fecha y hora salgan en negrita */

    padding: 0 12px !important; /* Da espacio interior lateral */

    cursor: pointer !important; /* Muestra que el campo es interactivo */
}

#newMeetingDate:hover, /* Hover fecha */

#newMeetingTime:hover { /* Hover hora */

    border-color: #8bb4f5 !important; /* Marca el borde en azul suave al pasar el ratón */

    background: #fbfdff !important; /* Fondo ligeramente azulado al pasar el ratón */
}

#newMeetingDate:focus, /* Foco fecha */

#newMeetingTime:focus { /* Foco hora */

    border-color: #8bb4f5 !important; /* Usa azul suave al seleccionar */

    box-shadow: 0 0 0 3px rgba(139, 180, 245, 0.18) !important; /* Añade halo suave como selector moderno */

    outline: none !important; /* Quita borde negro del navegador */
}

#newMeetingDate::-webkit-calendar-picker-indicator, /* Icono calendario */

#newMeetingTime::-webkit-calendar-picker-indicator { /* Icono reloj */

    opacity: 0.65 !important; /* Suaviza el icono nativo */

    cursor: pointer !important; /* Mantiene cursor de botón */
}

/* =========================================================
   REUNIONES: MÁS ESPACIO BAJO EL TÍTULO
========================================================= */

.meeting-title-input { /* Campo del título de la reunión abierta */

    margin-bottom: 10px !important; /* Añade separación entre el título y los campos de fecha, hora y participantes */
}

.meeting-editor-fields { /* Fila de fecha, hora y participantes */

    margin-bottom: 6px !important; /* Añade un poco más de aire antes de la barra de herramientas */
}

/* =========================================================
   REUNIONES: REUNIÓN SELECCIONADA MÁS SUAVE
========================================================= */

.meeting-list-item-active { /* Reunión seleccionada en la lista */

    background: #f4f8fe !important; /* Usa el mismo azul suave que la categoría seleccionada */

    border-color: #8bb4f5 !important; /* Usa el mismo borde azul claro */

    color: #2f5f9f !important; /* Usa azul menos intenso para el texto */
}

/* =========================================================
   REUNIONES: ELIMINAR REUNIONES DESDE LA LISTA
========================================================= */

.meeting-list-row { /* Fila que contiene reunión y X */

    display: grid !important; /* Coloca reunión y X en la misma fila */

    grid-template-columns: 1fr 24px !important; /* Deja la reunión flexible y la X pequeña */

    gap: 6px !important; /* Separa la reunión de la X */

    align-items: center !important; /* Centra verticalmente la reunión y la X */
	
	position: relative; /* Permite dibujar la línea */
	padding-bottom: 10px; /* Espacio inferior */
	margin-bottom: 0px; /* Separa reuniones */
}

.meeting-list-row::after { /* Línea separadora entre reuniones */
    content: ""; /* Crea la línea */
    position: absolute; /* Permite posicionarla */
    left: 14px; /* Deja margen lateral */
    right: 14px; /* Deja margen lateral */
    bottom: 0; /* La coloca debajo */
    height: 1px; /* Grosor fino */
    background: rgba(120, 140, 170, 0.20); /* Color suave */
} /* Fin línea reuniones */

.meeting-list-row:last-child::after { /* Última reunión */
    display: none; /* Oculta la última línea */
} /* Fin última reunión */

.meeting-list-delete-btn { /* X para eliminar reunión */

    width: 24px !important; /* Hace la X compacta */

    height: 24px !important; /* Hace la X compacta */

    border: none !important; /* Quita recuadro */

    border-radius: 6px !important; /* Mantiene zona clicable suave */

    background: transparent !important; /* Quita fondo */

    color: #c5342d !important; /* Usa rojo de eliminar */

    font-size: 20px !important; /* Hace visible la X */

    font-weight: 900 !important; /* Hace la X marcada */

    cursor: pointer !important; /* Mantiene cursor de botón */

    display: grid !important; /* Permite centrar la X */

    place-items: center !important; /* Centra la X */
}

.meeting-list-delete-btn:hover { /* X de reunión al pasar el ratón */

    background: #fff1f1 !important; /* Fondo rojo muy suave */

    color: #b42318 !important; /* Rojo más intenso al pasar el ratón */
}

/* =========================================================
   REUNIONES: CORREGIR CURSOR DEL EDITOR
========================================================= */

.meeting-content-editor { /* Editor donde se escribe el acta de la reunión */

    unicode-bidi: normal !important; /* Anula el comportamiento que puede mover el cursor antes de la primera letra */

    direction: ltr !important; /* Mantiene la escritura normal de izquierda a derecha */

    text-align: left !important; /* Mantiene el texto alineado a la izquierda */

    caret-color: #172334 !important; /* Hace visible el cursor en posición correcta */
}

/* =========================================================
   REUNIONES: EDITOR ESTABLE SIN ERROR DE CURSOR
========================================================= */

textarea.meeting-content-editor { /* Editor de acta de reuniones */

    height: auto !important; /* Evita la altura fija global de los textarea */

    min-height: 220px !important; /* Mantiene una zona amplia de escritura */

    max-height: none !important; /* Anula el límite global de 92px */

    resize: none !important; /* Evita que el usuario rompa el layout */

    white-space: pre-wrap !important; /* Conserva saltos de línea */

    text-align: left !important; /* Mantiene escritura desde la izquierda */

    direction: ltr !important; /* Fuerza escritura normal */
}

.meeting-content-editor {
    border-radius: 8px !important;
}

.meeting-toolbar button {
    border-radius: 8px !important;
}

.meeting-content-editor:empty::before { /* Placeholder del editor visual */

    content: attr(data-placeholder); /* Muestra el texto de ayuda */

    color: #7b8798; /* Color gris suave */
}

/* =========================================================
   REUNIONES: ESTABILIZAR CURSOR EN EDITOR VISUAL
========================================================= */

.meeting-content-editor { /* Editor visual de reuniones */

    display: block !important; /* Evita comportamientos raros del cursor en contenteditable */

    direction: ltr !important; /* Fuerza escritura de izquierda a derecha */

    unicode-bidi: normal !important; /* Evita inversión del cursor */

    white-space: pre-wrap !important; /* Conserva saltos de línea */

    text-align: left !important; /* Mantiene escritura alineada a la izquierda */
}

/* =========================================================
   REUNIONES: BARRA WORD COMPACTA
========================================================= */

.meeting-toolbar { /* Barra de herramientas del editor de reuniones */

    display: flex !important; /* Coloca los botones en horizontal */

    align-items: center !important; /* Centra verticalmente los botones */

    gap: 4px !important; /* Reduce separación entre botones */

    flex-wrap: wrap !important; /* Permite salto si no cabe */
}

.meeting-toolbar button { /* Botones de formato de reuniones */

    min-width: 28px !important; /* Da ancho compacto */

    height: 28px !important; /* Da altura compacta */

    border-radius: 8px !important; /* Usa radio 8 */

    font-weight: 800 !important; /* Hace visible el icono */
}

.meeting-toolbar-separator { /* Separador entre grupos de botones */

    width: 1px !important; /* Anchura fina */

    height: 20px !important; /* Altura del separador */

    background: #c9d8ee !important; /* Color suave */

    margin: 0 5px !important; /* Espacio lateral */
}

/* =========================================================
   REUNIONES: BOTONES WORD SIN RECUADRO SALVO ACTIVO
========================================================= */

.meeting-toolbar button { /* Botones de la barra de reuniones */

    border: 1px solid transparent !important; /* Oculta el recuadro por defecto */

    background: transparent !important; /* Quita fondo por defecto */

    color: #2f5f9f !important; /* Mantiene color azul de herramienta */

    box-shadow: none !important; /* Evita sombras de botón */
}

.meeting-toolbar button:hover { /* Botones al pasar el ratón */

    background: #f4f8fe !important; /* Fondo azul muy suave al pasar */

    border-color: #d8e6f7 !important; /* Borde muy suave al pasar */
}

.meeting-format-btn-active { /* Botón de formato activo */

    background: #eef5ff !important; /* Fondo activo suave */

    border-color: #8bb4f5 !important; /* Recuadro azul suave cuando está activo */

    color: #1f5fd6 !important; /* Texto azul cuando está activo */
}

/* =========================================================
   REUNIONES: EVITAR INVERSIÓN DEL PRIMER CARÁCTER
========================================================= */

.meeting-content-editor,
.meeting-content-editor * { /* Editor de reuniones y contenido interno */

    direction: ltr !important; /* Fuerza escritura izquierda a derecha */

    unicode-bidi: normal !important; /* Evita inversión bidireccional del cursor */

    text-align: left; /* Mantiene alineación normal por defecto */
}

.meeting-content-editor-base:not(.tox-tinymce textarea) { /* Oculta el textarea base solo visualmente */
    position: absolute; /* Lo saca del flujo visual */
    left: -99999px; /* Lo mueve fuera de la pantalla */
    width: 1px; /* Reduce su ancho */
    height: 1px; /* Reduce su alto */
    opacity: 0; /* Lo hace invisible */
}

.meetings-editor-panel { /* Columna derecha del editor de reuniones */
    display: flex; /* Permite distribuir elementos verticalmente */
    flex-direction: column; /* Organiza los elementos en columna */
    min-height: 0; /* Permite que los hijos se adapten correctamente */
} /* Fin panel reuniones */

.meeting-editor-box { /* Caja principal de edición */
    display: flex; /* Organiza contenido verticalmente */
    flex-direction: column; /* Coloca campos, editor y botones uno debajo de otro */
    flex: 1; /* Ocupa todo el espacio disponible */
    min-height: 0; /* Permite que TinyMCE crezca correctamente */
} /* Fin caja editor */

.tox-tinymce { /* Contenedor principal de TinyMCE */
    flex: 1 !important; /* Hace que ocupe todo el espacio libre */
    min-height: 500px !important; /* Altura mínima cómoda */
    height: 100% !important; /* Usa toda la altura disponible */
} /* Fin TinyMCE */

.tox-editor-container { /* Zona interna del editor */
    height: 100% !important; /* Hace crecer el contenido interno */
} /* Fin contenedor interno */

.tox-edit-area { /* Área donde se escribe */
    height: 100% !important; /* Extiende la zona editable */
} /* Fin área editable */

.modal-card.report-modal-card { /* Modal especial del informe generado */
    height: 88vh !important; /* Hace que el modal del informe use casi toda la pantalla */
    max-height: 88vh !important; /* Evita que el modal se salga de la pantalla */
    display: flex !important; /* Permite repartir cabecera, editor y botones */
    flex-direction: column !important; /* Coloca los elementos en vertical */
    overflow: hidden !important; /* Evita scroll externo del modal */
} /* Fin modal informe */

.modal-card.report-modal-card #modalBody { /* Cuerpo del modal del informe */
    flex: 1 !important; /* Ocupa todo el espacio entre título y botones */
    min-height: 0 !important; /* Permite que TinyMCE calcule bien la altura */
    display: flex !important; /* Activa distribución vertical */
    flex-direction: column !important; /* Editor arriba y botones abajo */
    overflow: hidden !important; /* Evita scroll duplicado fuera del editor */
} /* Fin cuerpo modal informe */

.modal-card.report-modal-card .report-box { /* Caja general del informe */
    flex: 1 !important; /* Ocupa todo el espacio disponible */
    min-height: 0 !important; /* Permite reducir altura correctamente */
    display: flex !important; /* Permite que el editor crezca */
    flex-direction: column !important; /* Mantiene estructura vertical */
    overflow: hidden !important; /* Mantiene el scroll dentro de TinyMCE */
} /* Fin caja informe */

.modal-card.report-modal-card .report-editor-box { /* Caja donde vive TinyMCE */
    flex: 1 !important; /* Hace que el editor llegue hasta los botones */
    height: auto !important; /* Elimina la altura fija anterior */
    min-height: 0 !important; /* Permite scroll interno correcto */
    display: flex !important; /* Permite que TinyMCE ocupe todo */
    flex-direction: column !important; /* Mantiene TinyMCE en columna */
    overflow: hidden !important; /* Evita que el contenido se salga */
} /* Fin caja editor informe */

.modal-card.report-modal-card .report-editor-box .tox-tinymce { /* Contenedor TinyMCE del informe */
    flex: 1 !important; /* Ocupa todo el alto disponible */
    height: 100% !important; /* Usa toda la altura de la caja */
    min-height: 0 !important; /* Anula el mínimo global de 500px */
} /* Fin TinyMCE informe */

.modal-card.report-modal-card .tox-editor-container { /* Contenedor interno de TinyMCE */
    height: 100% !important; /* Mantiene altura completa */
} /* Fin contenedor interno */

.modal-card.report-modal-card .tox-edit-area { /* Área editable de TinyMCE */
    height: 100% !important; /* Extiende el área editable */
} /* Fin área editable */

.modal-card.report-modal-card .tox-edit-area__iframe { /* Iframe real de escritura */
    height: 100% !important; /* Mantiene el iframe ocupando todo */
} /* Fin iframe informe */

.modal-card.report-modal-card #modalBody .modal-actions { /* Botones inferiores del informe */
    flex-shrink: 0 !important; /* Evita que los botones se compriman */
    margin-top: 16px !important; /* Separa los botones del editor */
} /* Fin botones informe */

.meetings-editor-panel { /* Panel derecho de reuniones */
    min-height: 0 !important; /* Permite que el editor calcule bien la altura */
    overflow: hidden !important; /* Evita scroll externo duplicado */
} /* Fin panel reuniones */

.meeting-editor-box { /* Caja completa del editor de reuniones */
    display: flex !important; /* Activa distribución vertical */
    flex-direction: column !important; /* Coloca campos, editor y botones en columna */
    min-height: 0 !important; /* Permite que TinyMCE tenga scroll interno */
    overflow: hidden !important; /* Evita que el contenido se salga */
} /* Fin caja reuniones */

.meeting-editor-box .tox-tinymce { /* TinyMCE de reuniones */
    flex: 1 !important; /* Ocupa todo el espacio disponible */
    height: 100% !important; /* Usa toda la altura de la caja */
    min-height: 0 !important; /* Anula mínimos anteriores */
} /* Fin TinyMCE reuniones */

.meeting-editor-box .tox-editor-container { /* Contenedor interno TinyMCE reuniones */
    height: 100% !important; /* Mantiene altura completa */
} /* Fin contenedor interno reuniones */

.meeting-editor-box .tox-edit-area { /* Área editable de reuniones */
    height: 100% !important; /* Extiende el área editable */
} /* Fin área editable reuniones */

.meeting-editor-box .tox-edit-area__iframe { /* Iframe real de escritura en reuniones */
    height: 100% !important; /* Permite scroll interno dentro del iframe */
} /* Fin iframe reuniones */

.meeting-editor-actions { /* Botones inferiores de reuniones */
    flex-shrink: 0 !important; /* Mantiene los botones visibles abajo */
} /* Fin botones reuniones */

.tox-tinymce:focus-within { /* Se aplica cuando el cursor está dentro de TinyMCE */
    outline: none !important; /* Elimina el contorno azul */
    box-shadow: none !important; /* Elimina el brillo azul de foco */
    border-color: var(--border) !important; /* Mantiene el mismo borde normal de la aplicación */
} /* Fin estilo foco TinyMCE */

.tox .tox-edit-area::before { /* Capa de foco interna que TinyMCE dibuja por defecto */
    border: none !important; /* Elimina el borde azul interno */
} /* Fin foco interno TinyMCE */

.btn-danger { /* Botón de confirmación peligrosa como eliminar */
    background: #fff5f5 !important; /* Fondo rojo muy suave */
    color: #a84444 !important; /* Texto rojo elegante */
    border: 1px solid #e4b9b9 !important; /* Borde rojo suave */
    box-shadow: none !important; /* Elimina sombras */
} /* Fin botón peligro */

.btn-danger:hover { /* Estado al pasar el ratón sobre eliminar */
    background: #ffe8e8 !important; /* Fondo rojo algo más marcado */
    color: #8f3030 !important; /* Texto rojo más intenso */
    border-color: #d99a9a !important; /* Borde rojo más visible */
} /* Fin hover peligro noche */

.meetings-sidebar,
.meetings-list-panel,
.meetings-editor-panel { /* Columnas principales del módulo reuniones */
    display: flex !important; /* Permite que cabecera y lista se repartan el alto */
    flex-direction: column !important; /* Coloca título arriba y contenido debajo */
    overflow: hidden !important; /* Evita que la columna crezca fuera de su caja */
} /* Fin columnas reuniones */

.meeting-categories-list,
.meetings-list { /* Listas internas de categorías y reuniones */
    flex: 1 !important; /* Ocupa solo el espacio disponible debajo del título */
    min-height: 0 !important; /* Permite que el scroll interno funcione */
    max-height: 100% !important; /* Evita que la lista empuje la página */
    overflow-y: auto !important; /* Muestra scroll vertical cuando hay muchos elementos */
    overflow-x: hidden !important; /* Evita scroll horizontal */
    padding-right: 4px !important; /* Deja espacio para la barra de scroll */
} /* Fin scroll listas reuniones */

.meetings-list-header,
.meetings-sidebar-header { /* Cabeceras de reuniones y categorías */
    flex-shrink: 0 !important; /* Evita que el título y botón se compriman */
} /* Fin cabeceras reuniones */

.meeting-category-row[draggable="true"] { /* Fila de categoría arrastrable */
    cursor: grab; /* Indica que se puede arrastrar */
} /* Fin fila arrastrable */

.meeting-category-row[draggable="true"]:active { /* Fila mientras se arrastra */
    cursor: grabbing; /* Indica arrastre activo */
} /* Fin arrastre activo */

.meeting-category-btn { /* Botón de categoría */
    justify-content: flex-start !important; /* Alinea icono y texto a la izquierda */
    gap: 8px !important; /* Separa icono de texto */
} /* Fin botón categoría */

.meeting-category-color-blue { /* Categoría azul */
    background: #dcecff !important; /* Fondo azul pastel */
    border-color: #8fb3e6 !important; /* Borde azul */
} /* Fin azul */

.meeting-category-color-yellow { /* Categoría amarilla */
    background: #fff3bf !important; /* Fondo amarillo pastel */
    border-color: #f0c84b !important; /* Borde amarillo */
} /* Fin amarillo */

.meeting-category-color-red { /* Categoría roja */
    background: #ffd6d6 !important; /* Fondo rojo pastel */
    border-color: #ef8f8f !important; /* Borde rojo */
} /* Fin rojo */

.meeting-category-color-green { /* Categoría verde */
    background: #d9f7df !important; /* Fondo verde pastel */
    border-color: #82c995 !important; /* Borde verde */
} /* Fin verde */

.meeting-category-color-purple { /* Categoría lila */
    background: #eadcff !important; /* Fondo lila pastel */
    border-color: #b79be8 !important; /* Borde lila */
} /* Fin lila */

.meeting-category-color-pink { /* Categoría rosa */
    background: #ffdff0 !important; /* Fondo rosa pastel */
    border-color: #e89ac4 !important; /* Borde rosa */
} /* Fin rosa */

.meeting-category-color-orange { /* Categoría naranja */
    background: #ffe1bf !important; /* Fondo naranja pastel */
    border-color: #eba45c !important; /* Borde naranja */
} /* Fin naranja */

.meeting-list-item strong { /* Título de la reunión en la lista lateral */
    font-weight: 500 !important; /* Reduce la negrita manteniendo protagonismo */
    color: var(--text) !important; /* Mantiene el color principal */
} /* Fin título reunión */

@media (max-width: 1100px) { /* Ajuste agenda para pantalla compartida */

    .agenda-page-card .agenda-grid { /* Contenedor con scroll de la agenda */
        overflow: auto !important; /* Permite scroll horizontal y vertical dentro de la agenda */
    } /* Fin contenedor agenda */

    .agenda-page-card .agenda-table { /* Tabla real de la agenda */
        min-width: 840px !important; /* Aumenta el ancho mínimo para que quepan las horas completas */
        grid-template-columns: 86px repeat(5, minmax(130px, 1fr)) !important; /* Ensancha la columna de horas */
    } /* Fin tabla agenda */

    .agenda-page-card .agenda-head { /* Cabecera de cada día */
        min-width: 130px !important; /* Mantiene ancho mínimo de cada día */
        font-size: 11px !important; /* Mantiene texto compacto en cabecera */
    } /* Fin cabecera día */

    .agenda-page-card .agenda-time-head,
    .agenda-page-card .agenda-time-cell { /* Columna de horas */
        width: 86px !important; /* Da más anchura real a la columna de horas */
        min-width: 86px !important; /* Evita que la columna de horas se comprima */
        padding-right: 12px !important; /* Separa la hora de la línea vertical */
        text-align: right !important; /* Alinea las horas hacia la cuadrícula */
        overflow: visible !important; /* Permite ver la hora completa */
        white-space: nowrap !important; /* Evita que la hora se parta */
    } /* Fin horas */

    .agenda-page-card .agenda-cell { /* Celdas de agenda */
        min-width: 130px !important; /* Mantiene ancho de cada celda */
    } /* Fin celdas agenda */

} /* Fin responsive agenda */

//*ICONOS PASTEL*//

.app-svg-icon {
    width: 22px;
    height: 22px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background-color: #8fb3e6;
    mask-position: center;
    mask-repeat: no-repeat;
    mask-size: contain;
    -webkit-mask-position: center;
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-size: contain;
    flex-shrink: 0;
}

.brand-icon.app-svg-icon {
    width: 42px;
    height: 42px;
    background-color: #9fc2f6;
}

.backup-icon-btn.app-svg-icon,
.btn-report-settings.app-svg-icon {
    width: 34px !important;
    height: 34px !important;
    background-color: #8fb3e6 !important;
}

.app-module-tab {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important; /* Icono y texto viajan juntos (ya no hay icono absoluto) y se centran como un solo bloque en el botón */
    gap: 8px !important;
}

.app-module-tab .app-svg-icon {
    width: 18px;
    height: 18px;
    background-color: #8fb3e6;
}

.app-icon-academic {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M12 3 1 8l11 5 9-4.09V16h2V8L12 3Zm-6 8.18V15c0 2.21 2.69 4 6 4s6-1.79 6-4v-3.82l-6 2.73-6-2.73Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M12 3 1 8l11 5 9-4.09V16h2V8L12 3Zm-6 8.18V15c0 2.21 2.69 4 6 4s6-1.79 6-4v-3.82l-6 2.73-6-2.73Z'/%3E%3C/svg%3E");
}

.app-icon-calendar {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 2h2v3h6V2h2v3h3a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3V2Zm13 8H4v10h16V10Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 2h2v3h6V2h2v3h3a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3V2Zm13 8H4v10h16V10Z'/%3E%3C/svg%3E");
}

.app-icon-save {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M5 3h12l2 2v16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm2 2v6h10V5H7Zm2 10v4h6v-4H9Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M5 3h12l2 2v16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm2 2v6h10V5H7Zm2 10v4h6v-4H9Z'/%3E%3C/svg%3E");
}

.app-icon-import {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 4h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm8 4v5H9l4 4 4-4h-3V8h-2Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 4h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm8 4v5H9l4 4 4-4h-3V8h-2Z'/%3E%3C/svg%3E");
}

.app-icon-book {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 4.5A2.5 2.5 0 0 1 6.5 2H21v17H7a3 3 0 0 0-3 3V4.5ZM7 4v12.5A4.96 4.96 0 0 1 10 15h9V4H7Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 4.5A2.5 2.5 0 0 1 6.5 2H21v17H7a3 3 0 0 0-3 3V4.5ZM7 4v12.5A4.96 4.96 0 0 1 10 15h9V4H7Z'/%3E%3C/svg%3E");
}

.app-icon-meeting {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M8 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM2 20c0-3.31 2.69-6 6-6s6 2.69 6 6v1H2v-1Zm12.5 1v-1c0-2.03-.76-3.88-2-5.29A5.48 5.48 0 0 1 16 13.5c3.04 0 5.5 2.46 5.5 5.5v2h-7Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M8 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM2 20c0-3.31 2.69-6 6-6s6 2.69 6 6v1H2v-1Zm12.5 1v-1c0-2.03-.76-3.88-2-5.29A5.48 5.48 0 0 1 16 13.5c3.04 0 5.5 2.46 5.5 5.5v2h-7Z'/%3E%3C/svg%3E");
}

.app-icon-settings {
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M19.14 12.94c.04-.31.06-.63.06-.94s-.02-.63-.06-.94l2.03-1.58-2-3.46-2.39.96a7.06 7.06 0 0 0-1.63-.94L14.8 3h-4l-.35 3.04c-.58.23-1.12.55-1.63.94l-2.39-.96-2 3.46 2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58 2 3.46 2.39-.96c.5.39 1.05.71 1.63.94l.35 3.04h4l.35-3.04c.58-.23 1.12-.55 1.63-.94l2.39.96 2-3.46-2.03-1.58ZM12 15.5A3.5 3.5 0 1 1 12 8a3.5 3.5 0 0 1 0 7.5Z'/%3E%3C/svg%3E");
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M19.14 12.94c.04-.31.06-.63.06-.94s-.02-.63-.06-.94l2.03-1.58-2-3.46-2.39.96a7.06 7.06 0 0 0-1.63-.94L14.8 3h-4l-.35 3.04c-.58.23-1.12.55-1.63.94l-2.39-.96-2 3.46 2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58 2 3.46 2.39-.96c.5.39 1.05.71 1.63.94l.35 3.04h4l.35-3.04c.58-.23 1.12-.55 1.63-.94l2.39.96 2-3.46-2.03-1.58ZM12 15.5A3.5 3.5 0 1 1 12 8a3.5 3.5 0 0 1 0 7.5Z'/%3E%3C/svg%3E");
}

.top-login-tools {
    padding-right: 22px !important;
}

.session-box {
    flex-direction: row !important;
    align-items: center !important;
    gap: 12px !important;
}

.session-client-button {
    height: 46px !important;
    padding: 0 18px 0 48px !important;
    border-radius: 14px !important;
    border: 1px solid #dfd4f6 !important;
    background: #f6f0ff !important;
    color: #172334 !important;
    position: relative !important;
    font-size: 16px !important;
    text-transform: none !important;
}

.session-client-button::before {
    content: "";
    position: absolute;
    left: 16px;
    width: 23px;
    height: 23px;
    background: #a5addf !important; /* Azul lavanda suave */
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 2c-4.42 0-8 2.24-8 5v1h16v-1c0-2.76-3.58-5-8-5Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 2c-4.42 0-8 2.24-8 5v1h16v-1c0-2.76-3.58-5-8-5Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.pastel-icon-btn {
    width: 46px !important;
    height: 46px !important;
    min-width: 46px !important;
    min-height: 46px !important;
    border-radius: 14px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    position: relative !important;
    padding: 0 !important;
    font-size: 0 !important;
    text-decoration: none !important;
}

.pastel-icon-btn::before {
    content: "";
    width: 25px;
    height: 25px;
    display: block;
}

.pastel-calendar {
    background: #e7fbf5 !important;
    border: 1px solid #c8eee3 !important;
}

.pastel-calendar::before {
    background: #49bfa4;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 2h2v3h6V2h2v3h3a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3V2Zm13 8H4v10h16V10Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 2h2v3h6V2h2v3h3a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3V2Zm13 8H4v10h16V10Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.pastel-save {
    background: #f4efff !important;
    border: 1px solid #ded2f7 !important;
}

.pastel-save::before {
    background: #8d68d7;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M5 3h12l2 2v16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm2 2v6h10V5H7Zm2 10v4h6v-4H9Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M5 3h12l2 2v16H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm2 2v6h10V5H7Zm2 10v4h6v-4H9Z'/%3E%3C/svg%3E") center / contain no-repeat;
	transform: translateX(1.5px); /* Baja ligeramente el icono para corregir el centrado visual del disquete */
}

.pastel-import {
    background: #fff3df !important;
    border: 1px solid #f5ddb7 !important;
}

.pastel-import::before {
    background: #eba33c;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 4h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm8 4v5H9l4 4 4-4h-3V8h-2Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 4h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm8 4v5H9l4 4 4-4h-3V8h-2Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.pastel-admin { /* Botón que abre el panel de administración, solo visible para el usuario administrador. */
    background: #eef5ff !important;
    border: none !important;
    border-radius: 8px !important;
}

.pastel-admin::before {
    background: #245a9f;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 20h4V10H4v10Zm6 0h4V4h-4v16Zm6 0h4v-6h-4v6Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M4 20h4V10H4v10Zm6 0h4V4h-4v16Zm6 0h4v-6h-4v6Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.session-logout {
    height: 46px !important;
    min-height: 46px !important;
    padding: 0 18px 0 46px !important;
    border-radius: 14px !important;
    background: #fff5f5 !important;
    border: 1px solid #f3c9c9 !important;
    color: #d45757 !important;
    position: relative !important;
    font-size: 14px !important;
    text-transform: none !important;
}

.session-logout::before {
    content: "";
    position: absolute;
    left: 16px;
    width: 22px;
    height: 22px;
    background: #df5f5f;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M10 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h5v-2H5V5h5V3Zm6.59 5.59L18.17 10H9v2h9.17l-1.58 1.41L18 15l4-4-4-4-1.41 1.59Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M10 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h5v-2H5V5h5V3Zm6.59 5.59L18.17 10H9v2h9.17l-1.58 1.41L18 15l4-4-4-4-1.41 1.59Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.app-module-tabs {
    justify-content: flex-start !important;
    gap: 44px !important;
    padding-left: 38px !important;
}

.app-module-tab {
    position: relative !important;
    display: inline-flex !important;
    align-items: center !important;
    gap: 12px !important;
    padding: 18px 20px !important; /* Simétrico: el icono ya no es absoluto, así que no hace falta reservar hueco a la izquierda */
    font-size: 16px !important;
    font-weight: 900 !important;
    color: #4d5b70 !important;
    background: transparent !important;
    border: none !important;
}

.app-module-tab::before {
    content: "";
    width: 28px;
    height: 28px;
    flex-shrink: 0; /* El icono va dentro del flujo flex, junto al texto, para que ambos se centren como un bloque */
}

#tabMainPage::before {
    background: #8fb3e6;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 3h12a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm2 3v12h9V6H9ZM3 6h2v2H3V6Zm0 5h2v2H3v-2Zm0 5h2v2H3v-2Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 3h12a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm2 3v12h9V6H9ZM3 6h2v2H3V6Zm0 5h2v2H3v-2Zm0 5h2v2H3v-2Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

#tabMainPage::before {
    width: 24px !important;
    height: 24px !important;
}

#tabAgendaPage::before {
    background: #7ccdbc;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 2h2v3h6V2h2v3h3a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3V2Zm13 8H4v10h16V10Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M7 2h2v3h6V2h2v3h3a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h3V2Zm13 8H4v10h16V10Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

#tabMeetingsPage::before {
    background: #f0a95b;
    mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M8 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM2 20c0-3.31 2.69-6 6-6s6 2.69 6 6v1H2v-1Zm12.5 1v-1c0-2.03-.76-3.88-2-5.29A5.48 5.48 0 0 1 16 13.5c3.04 0 5.5 2.46 5.5 5.5v2h-7Z'/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M8 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm8-1a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM2 20c0-3.31 2.69-6 6-6s6 2.69 6 6v1H2v-1Zm12.5 1v-1c0-2.03-.76-3.88-2-5.29A5.48 5.48 0 0 1 16 13.5c3.04 0 5.5 2.46 5.5 5.5v2h-7Z'/%3E%3C/svg%3E") center / contain no-repeat;
}

.app-module-tab-active {
    color: #2f6fed !important;
}

.app-module-tab-active::after {
    height: 4px !important;
    border-radius: 999px !important;
    background: #8fb3e6 !important;
}

.top-class-tools {
    transform: scale(0.82) !important;
    transform-origin: top left !important;
}

.compact-hero {
    min-height: 58px !important;
    align-items: flex-start !important;
}

.top-class-field {
    width: 190px !important;
}

.top-class-tools .icon-btn {
    width: 30px !important;
    height: 30px !important;
    min-height: 30px !important;
}

.app-module-tabs {
    justify-content: center !important;
    gap: 34px !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    height: 38px !important;
}

.app-module-tab {
    padding: 8px 16px !important;
    font-size: 14px !important;
    min-height: 36px !important;
}

.app-module-tab::before {
    width: 22px !important;
    height: 22px !important;
}

.app-module-tab-active::after {
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
}

.session-box {
    gap: 6px !important;
}

.session-client-button {
    height: 30px !important;
    min-height: 30px !important;
    padding: 0 16px 0 42px !important;
    font-size: 14px !important;
}

.session-client-button::before {
    left: 14px !important;
    width: 20px !important;
    height: 20px !important;
}

.pastel-icon-btn {
    width: 30px !important;
    height: 30px !important;
    min-width: 30px !important;
    min-height: 30px !important;
}

.pastel-icon-btn::before {
    width: 22px !important;
    height: 22px !important;
}

.session-logout {
    height: 30px !important;
    min-height: 30px !important;
    padding: 0 18px 0 38px !important;
    font-size: 12px !important;
}

.session-logout::before {
    left: 13px !important;
    width: 19px !important;
    height: 19px !important;
}

.session-client-button {
    background: transparent !important;
    border-color: #d6e4f7 !important;
    box-shadow: none !important;
}

.pastel-save {
    background: transparent !important;
    border-color: #d6e4f7 !important;
    box-shadow: none !important;
}

.pastel-calendar {
    background: transparent !important;
    border-color: #d6e4f7 !important;
    box-shadow: none !important;
}

.pastel-import {
    background: transparent !important;
    border-color: #d6e4f7 !important;
    box-shadow: none !important;
}

.session-client-button:hover,
.pastel-save:hover,
.pastel-calendar:hover,
.pastel-import:hover {
    background: #f7faff !important;
    border-color: #bcd2ef !important;
}

.session-client-button:hover {
    background: #f7faff !important;
    border: 1px solid #bcd2ef !important;
    box-shadow: none !important;
    color: #5b78a0 !important;
}

.session-client-button {
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    padding: 0 12px 0 30px !important;
    display: inline-flex !important;
    align-items: center !important;
    white-space: nowrap !important;
}

.session-client-button::before {
    left: 8px !important;
    width: 17px !important;
    height: 17px !important;
}

.app-module-tab-active {
    color: #4f78b8 !important;
}

.app-module-tab-active::after {
    height: 3px !important;
    background: #b9d3f7 !important;
    opacity: 0.85 !important;
}

#tabMainPage.app-module-tab-active::before,
#tabAgendaPage.app-module-tab-active::before,
#tabMeetingsPage.app-module-tab-active::before {
    opacity: 0.85 !important;
}

.session-client-button {
    border-radius: 8px !important;
}

.pastel-save {
    border-radius: 8px !important;
}

.pastel-import {
    border-radius: 8px !important;
}

.session-logout {
    border-radius: 8px !important;
}

.student-chart {
    overflow: visible !important; /* Permite que las etiquetas inferiores del gráfico no se corten */
}

.student-full-chart {
    overflow: visible !important; /* Permite que la nota y el nombre salgan sin quedar recortados */
}

.student-full-body {
    overflow: visible !important; /* Evita que el cuerpo interno del gráfico corte las etiquetas inferiores */
}

.student-full-area {
    overflow: visible !important; /* Evita que el área real del gráfico recorte la nota inferior */
}

.student-full-bars {
    overflow: visible !important; /* Permite que las etiquetas bajo las barras sean visibles */
}

.student-full-grade {
    bottom: -22px !important; /* Sube un poco la nota para que no quede cortada en pantallas pequeñas */
}

.student-full-name {
    bottom: -38px !important; /* Sube el nombre del trimestre para que no quede cortado */
}

/* =========================================================
   EVITA QUE SE CORTEN LAS CAJAS DE NOTAS FINALES
========================================================= */

.student-term-finals {
    max-width: none !important; /* Permite que las cajas de notas finales usen el espacio disponible */
    overflow: visible !important; /* Evita que la primera o última caja quede cortada */
    flex-wrap: nowrap !important; /* Mantiene las notas en una sola línea */
    padding-left: 4px !important; /* Añade aire a la izquierda para que no se corte el borde */
    padding-right: 4px !important; /* Añade aire a la derecha para que no se corte el borde */
}

.student-term-final-badge {
    flex: 0 0 40px !important; /* Da ancho fijo suficiente a cada caja de nota */
    width: 40px !important; /* Asegura que la caja mantenga anchura estable */
    min-width: 40px !important; /* Evita que la caja se comprima según la pantalla */
}

/* =========================================================
   SEGUIMENT DE L'ALUMNE/A AMPLIADO
========================================================= */

.student-follow-header-actions {
    display: flex !important; /* Coloca los botones de la cabecera en una misma fila */
    align-items: center !important; /* Centra verticalmente los botones */
    gap: 8px !important; /* Separa entre sí los botones que queden en esta fila */
}

.student-follow-expand-btn { /* Botón de ampliar Seguiment de l'alumne/a */
    position: absolute !important; /* Lo saca del flujo para anclarlo a la esquina de la tarjeta */
    top: -6px !important; /* Compensa el padding de la tarjeta para acercarlo más a la esquina real */
    right: -6px !important; /* Compensa el padding de la tarjeta para acercarlo más a la esquina real */
    width: 24px !important; /* Mismo tamaño que el botón de ampliar de la taula de notes */
    height: 24px !important; /* Mismo tamaño que el botón de ampliar de la taula de notes */
    min-width: 24px !important; /* Evita que herede el tamaño mayor de icon-btn */
    min-height: 24px !important; /* Evita que herede el tamaño mayor de icon-btn */
    border: none !important; /* Quita el contorno del botón */
    background: transparent !important; /* Deja solo la flecha, sin fondo ni borde */
    font-size: 14px !important; /* Hace la flecha más pequeña */
    padding: 0 !important; /* Quita espacio interior sobrante */
}

.expanded-student-follow-modal-card #modalBody {
    height: calc(100% - 58px) !important; /* Hace que el cuerpo del modal ocupe casi todo el alto disponible */
    min-height: 0 !important; /* Permite que las columnas internas tengan scroll */
}

.expanded-student-follow-layout {
    height: 100% !important; /* Ocupa todo el alto del cuerpo del modal */
    display: grid !important; /* Divide el seguimiento ampliado en dos columnas */
    grid-template-columns: 44% 56% !important; /* Da menos ancho a datos/gráfica y más ancho a comentarios */
    gap: 12px !important; /* Separa las dos columnas */
    min-height: 0 !important; /* Permite que el contenido se ajuste sin desbordar */
}

.expanded-student-follow-left {
    display: flex !important; /* Organiza datos, gráfica y objetivos en vertical */
    flex-direction: column !important; /* Coloca los bloques uno debajo de otro */
    gap: 12px !important; /* Separa visualmente los bloques */
    min-height: 0 !important; /* Permite que la columna se adapte al alto disponible */
}

.expanded-student-follow-right {
    display: flex !important; /* Organiza historial y nuevo comentario en vertical */
    flex-direction: column !important; /* Coloca histórico arriba y nuevo comentario abajo */
    gap: 12px !important; /* Separa histórico y nuevo comentario */
    min-height: 0 !important; /* Permite scroll interno */
}

.expanded-student-info-card {
    display: grid !important; /* Coloca alumno y condición en dos columnas */
    grid-template-columns: 1fr 1fr !important; /* Reparte el ancho entre alumno y condición */
    gap: 12px !important; /* Separa los dos campos */
    flex-shrink: 0 !important; /* Evita que la caja de datos se comprima */
}

.expanded-student-readonly {
    min-height: 38px !important; /* Igual altura que un input normal */
    padding: 9px 10px !important; /* Da aire interior al texto */
    border: 1px solid #d3deec !important; /* Aplica borde suave */
    border-radius: 8px !important; /* Redondea el campo visual */
    background: #fbfdff !important; /* Fondo claro tipo input */
    font-weight: 400 !important; /* Destaca el dato del alumno */
}

.expanded-student-section {
    border: 1px solid #d3deec !important; /* Crea cajas internas suaves */
    border-radius: 8px !important; /* Redondea las cajas internas */
    padding: 12px !important; /* Añade separación interior */
    background: rgba(255, 255, 255, 0.72) !important; /* Fondo blanco suave */
    min-height: 0 !important; /* Permite que el contenido interno tenga scroll */
}

.expanded-student-chart {
    height: 310px !important; /* Hace la gráfica más grande que en la pantalla normal */
    max-height: none !important; /* Evita límites anteriores de la gráfica */
}

.expanded-objectives-section {
    flex: 1 !important; /* Hace que objetivos ocupen el espacio restante de la izquierda */
    overflow: auto !important; /* Permite scroll si hay muchos objetivos */
}

.expanded-history-section {
    flex: 1 !important; /* Hace que el histórico ocupe la mayor parte de la derecha */
    display: flex !important; /* Permite que el historial interno crezca */
    flex-direction: column !important; /* Coloca cabecera arriba e historial debajo */
    overflow: hidden !important; /* Evita que el histórico rompa el modal */
}

#expandedCommentHistory {
    flex: 1 !important; /* Hace que el historial llene la caja disponible */
    overflow: auto !important; /* Permite scroll si hay muchos comentarios */
    min-height: 0 !important; /* Permite que el scroll funcione dentro del flex */
}

.expanded-new-comment-section {
    flex-shrink: 0 !important; /* Mantiene visible el bloque de nuevo comentario */
}

#expandedCommentText {
    height: 120px !important; /* Hace más alto el cuadro donde se escribe el comentario */
    min-height: 120px !important; /* Evita que otros estilos reduzcan la altura */
    max-height: 120px !important; /* Mantiene una altura estable dentro del bloque */
    margin-bottom: 10px !important; /* Mantiene la separación actual con el botón guardar */
}

.expanded-student-info-card .field {
    gap: 4px !important; /* Reduce la separación entre la etiqueta y el campo de datos */
    margin-bottom: 0 !important; /* Evita espacio extra debajo de cada campo */
}

/* =========================================================
   SELECTOR DE ALUMNO EN SEGUIMIENTO AMPLIADO
========================================================= */

.expanded-student-info-card .field {
    margin-bottom: 0 !important; /* Elimina separación extra bajo los campos de alumno y condición */
}

.expanded-student-info-card label {
    margin-bottom: 6px !important; /* Reduce la distancia entre la etiqueta y el campo */
}

#expandedStudentSelect {
    width: 100% !important; /* Hace que el selector ocupe todo el ancho disponible */
    min-height: 37px !important; /* Iguala la altura visual de la caja de condición */
    height: 37px !important; /* Fuerza la misma altura que condición */
    padding: 0 18px !important; /* Mantiene el espacio lateral del texto */
    border-radius: 8px !important; /* Iguala el redondeo de condición */
    border: 1px solid #d3deec !important; /* Mantiene el mismo borde */
    background: #fbfdff !important; /* Mantiene el mismo fondo */
    color: #2d3b4f !important; /* Mantiene el color del texto */
    font-size: 16px !important; /* Mantiene el tamaño del texto */
    font-weight: 400 !important; /* Mantiene el peso del texto */
    line-height: 68px !important; /* Centra visualmente el texto en vertical */
    cursor: pointer !important; /* Mantiene el cursor de selección */
}

.expanded-student-readonly {
    height: 30px !important; /* Iguala la altura de la condición con el selector de alumno */
    display: flex !important; /* Permite centrar verticalmente el texto */
    align-items: center !important; /* Centra el texto de condición en vertical */
    padding: 0 18px !important; /* Añade aire lateral al texto de condición */
    font-size: 16px !important; /* Mantiene el tamaño de texto grande */
    font-weight: 400 !important; /* Mantiene peso visual equilibrado */
}

/* =========================================================
   SELECTOR VISUAL ALUMNO - MODAL AMPLIADO
========================================================= */

#expandedPrettyStudentSelect {
    width: 100% !important; /* Ocupa todo el ancho disponible */
}

#expandedPrettyStudentSelect .pretty-select-display {
    min-height: 68px !important; /* Iguala la altura visual de la caja de condición */
    font-size: 18px !important; /* Mantiene el tamaño de texto del alumno */
    font-weight: 600 !important; /* Igual peso que el selector normal */
    font-family: var(--app-font) !important; /* Usa Quicksand */
}

#expandedPrettyStudentSelect .pretty-select-dropdown {
    z-index: 99999 !important; /* Garantiza que el desplegable quede por encima del modal */
}

#expandedStudentSelect {
    display: none !important; /* Oculta el selector nativo para que solo se vea el selector visual con buscador */
}

#expandedPrettyStudentSelect .pretty-select-button {
    border-radius: 8px !important; /* Reduce el redondeo de la caja principal del selector de alumno ampliado */
}

#expandedPrettyStudentSelect .pretty-select-menu {
    border-radius: 8px !important; /* Reduce el redondeo del menú desplegable del selector de alumno ampliado */
}

#expandedPrettyStudentSelect .pretty-select-search {
    border-radius: 8px !important; /* Reduce el redondeo del buscador interno */
}

#expandedPrettyStudentSelect .pretty-select-option {
    border-radius: 8px !important; /* Reduce el redondeo de cada opción del desplegable */
}

.expanded-student-section .section-title-row {
    margin-bottom: 8px !important; /* Añade separación entre el título de la sección y el contenido que aparece debajo */
}

.expanded-objectives-section .section-title-row {
    margin-top: -6px !important; /* Sube ligeramente la cabecera de objetivos para alinearla mejor visualmente */
}

.expanded-history-section .section-title-row {
    margin-top: -6px !important; /* Sube la cabecera del historial para acercarla al borde superior */
}

/* =========================================================
   BOTÓN DESAR COMENTARI - SEGUIMIENTO AMPLIADO
========================================================= */

.expanded-save-comment-btn {
    width: 100% !important; /* Hace que el botón ocupe todo el ancho disponible */
    height: 40px !important; /* Iguala la altura del botón principal de la pantalla de seguimiento */
    border: 1px solid #bfd0ea !important; /* Mantiene el borde azul suave de la aplicación */
    border-radius: 8px !important; /* Redondea el botón igual que los controles principales */
    background: #e8f0fc !important; /* Usa el fondo azul claro característico de la aplicación */
    color: #2f5ea8 !important; /* Usa el azul corporativo para el texto */
    font-size: 18px !important; /* Hace el texto más visible */
    font-weight: 700 !important; /* Destaca la acción principal */
    cursor: pointer !important; /* Muestra cursor de acción */
    transition: all 0.15s ease !important; /* Suaviza el efecto al pasar el ratón */
}

.expanded-save-comment-btn:hover {
    background: #dde9fb !important; /* Oscurece ligeramente el fondo al pasar el ratón */
    border-color: #a9c2ea !important; /* Refuerza el borde en hover */
}

.expanded-save-comment-btn:active {
    transform: translateY(1px) !important; /* Da sensación de pulsación */
}

.expanded-student-follow-right {
    padding-right: 12px !important; /* Añade el mismo aire visual a la derecha que existe en la zona izquierda */
    box-sizing: border-box !important; /* Hace que el padding no rompa el ancho calculado de la columna */
}

#expandedPrettyStudentSelect .pretty-select-button {
    font-weight: 500 !important; /* Reduce la negrita del nombre del alumno seleccionado para que se vea más equilibrado */
}

#expandedStudentCondition {
    color: #7b889d !important; /* Usa el mismo tono gris azulado suave de la pantalla principal */
    font-weight: 400 !important; /* Evita que la condición destaque demasiado */
}

#expandedStudentCondition:empty {
    color: #7b889d !important; /* Mantiene el mismo color si el contenido se actualiza dinámicamente */
}

#expandedStudentCondition {
    font-size: 14px !important; /* Reduce el tamaño de la condición para que se parezca a la pantalla principal */
}

.expanded-student-info-card label {
    font-weight: 700 !important; /* Hace que las etiquetas STUDENT y CONDITION destaquen más */
}

.expanded-objectives-section {
    overflow: hidden !important; /* Evita scroll en toda la caja exterior de objetivos */
}

#expandedStudentObjectives {
    flex: 1 !important; /* Hace que la lista use todo el espacio libre dentro de objetivos */
    min-height: 0 !important; /* Permite que el scroll funcione correctamente en flex */
    max-height: 100% !important; /* Evita que la lista crezca fuera de la caja */
    overflow-y: auto !important; /* Muestra scroll solo cuando los objetivos ya no caben */
    overflow-x: hidden !important; /* Evita scroll horizontal */
    padding-right: 6px !important; /* Deja espacio para que la barra no tape botones */
}

/* =========================================================
   REUNIONES: X DE ELIMINAR EN ROJO SUAVE
========================================================= */

.meeting-category-delete-btn,
.meeting-list-delete-btn {
    color: #a65252 !important; /* Usa el rojo suave igualado al resto de botones de eliminar */
    background: transparent !important; /* Mantiene el fondo transparente */
    border: none !important; /* Evita recuadros en las X de reuniones */
}

.meeting-category-delete-btn:hover,
.meeting-list-delete-btn:hover {
    color: #944747 !important; /* Oscurece solo un poco al pasar el ratón */
    background: #fff4f4 !important; /* Usa un fondo rojo muy suave en hover */
}

#meetingEditorBox {
    position: relative !important; /* Permite centrar el aviso dentro de la zona del editor */
}

.meeting-saved-notice {
    position: absolute !important; /* Coloca el aviso dentro del editor */
    left: 50% !important; /* Lo lleva al centro horizontal */
    top: 50% !important; /* Lo lleva al centro vertical */
    transform: translate(-50%, -50%) !important; /* Centra exactamente el aviso */
    z-index: 20 !important; /* Lo muestra por encima del contenido */
    padding: 14px 22px !important; /* Añade espacio interior */
    border: 1px solid #cfe8d7 !important; /* Borde verde suave */
    border-radius: 8px !important; /* Redondea el aviso */
    background: #eef8f2 !important; /* Fondo verde pastel */
    color: #4f8a63 !important; /* Texto verde suave */
    font-size: 15px !important; /* Tamaño cómodo */
    font-weight: 700 !important; /* Hace visible el mensaje */
    box-shadow: 0 10px 28px rgba(15, 23, 42, 0.10) !important; /* Añade sombra suave */
}

.meeting-category-color-blue.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #8fb3e6 !important; /* Resalta la categoría azul */
}

.meeting-category-color-yellow.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #f0c84b !important; /* Resalta la categoría amarilla */
}

.meeting-category-color-red.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #ef8f8f !important; /* Resalta la categoría roja */
}

.meeting-category-color-green.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #82c995 !important; /* Resalta la categoría verde */
}

.meeting-category-color-purple.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #b79be8 !important; /* Resalta la categoría lila */
}

.meeting-category-color-pink.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #e89ac4 !important; /* Resalta la categoría rosa */
}

.meeting-category-color-orange.meeting-category-active {
    box-shadow: inset 0 0 0 1.5px #eba45c !important; /* Resalta la categoría naranja */
}

.pastel-meeting-empty {
    width: 80px;
    height: 80px;
    margin: 0 auto 16px;
    opacity: 0.85;

    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cpath fill='%239ec5fe' d='M10 14h28a6 6 0 0 1 6 6v12a6 6 0 0 1-6 6H22l-8 8v-8h-4a6 6 0 0 1-6-6V20a6 6 0 0 1 6-6z'/%3E%3Cpath fill='%23cfe2ff' d='M38 22h16a6 6 0 0 1 6 6v10a6 6 0 0 1-6 6h-2v6l-6-6h-8a6 6 0 0 1-6-6V28a6 6 0 0 1 6-6z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

.pastel-resource-empty { /* Icono de estado vacío del panel de competencias de Recursos */
    width: 80px;
    height: 80px;
    margin: 0 auto 16px;
    opacity: 0.85;

    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect x='13' y='10' width='38' height='48' rx='6' fill='%23cfe2ff'/%3E%3Crect x='24' y='6' width='16' height='8' rx='2' fill='%239ec5fe'/%3E%3Cpath d='M20 27h5l3 3 6-6' stroke='%239ec5fe' stroke-width='3' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3Crect x='33' y='25' width='11' height='3' rx='1.5' fill='%239ec5fe'/%3E%3Cpath d='M20 41h5l3 3 6-6' stroke='%239ec5fe' stroke-width='3' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3Crect x='33' y='39' width='11' height='3' rx='1.5' fill='%239ec5fe'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
} /* Fin icono estado vacío Recursos */

/* =========================================================
   BOTÓN SELECCIONAR FITXER MÁS NEGRITA
========================================================= */

#modalBody .backup-import-field .backup-file-label {
    font-weight: 700 !important; /* Hace el texto del botón seleccionar fitxer lo más grueso posible */
    letter-spacing: 0.015em !important; /* Mantiene el texto claro al aumentar la negrita */
}

/* =========================================================
   REUNIONES - REDUCIR NEGRITA BOTONES SUPERIORES
========================================================= */

.meetings-page .inline-title-btn {
    font-weight: 800 !important; /* Hace el símbolo + menos grueso */
}

.meetings-page .inline-title-btn,
.meetings-page .inline-title-btn * {
    font-weight: 800 !important; /* Asegura que el + herede el peso */
}

.meetings-page .btn {
    font-weight: 800 !important; /* Reduce ligeramente la negrita de botones como + NOVA REUNIÓ */
}

/* =========================================================
   AGENDA - REDUCIR NEGRITA BOTONES SUPERIORES
========================================================= */

.agenda-page .btn,
.agenda-page button {
    font-weight: 800 !important;
}

/* Flechas anterior / siguiente */

.agenda-page .agenda-nav-btn,
.agenda-page .week-nav-btn,
.agenda-page .week-navigation button {
    font-weight: 800 !important;
}

/* Botón SEMANA ACTUAL */

.agenda-page .current-week-btn,
.agenda-page .today-week-btn {
    font-weight: 800 !important;
}

/* =========================================================
   AGENDA - SUBIR FLECHAS DE NAVEGACIÓN
========================================================= */

.agenda-title-nav .agenda-arrow-btn {
    display: inline-flex !important; /* Permite centrar el contenido del botón */
    align-items: center !important; /* Centra verticalmente la flecha */
    justify-content: center !important; /* Centra horizontalmente la flecha */
    line-height: 0 !important; /* Elimina el espacio vertical extra del carácter */
    padding-bottom: 5px !important; /* Sube visualmente la flecha dentro del recuadro */
}

/* =========================================================
   BOTÓN DESAR COMENTARI - VENTANA AMPLIADA IGUAL QUE PRINCIPAL
========================================================= */

.expanded-save-comment-btn {
    text-transform: uppercase !important; /* Convierte “Desar comentari” en “DESAR COMENTARI” */
    font-size: 13px !important; /* Iguala el tamaño visual al botón principal */
    font-weight: 900 !important; /* Iguala la negrita al botón principal */
    letter-spacing: 0.02em !important; /* Da el mismo espaciado visual que el botón principal */
}

.report-settings-modal-card { /* Hace más grande el modal de configuración del informe IA */
    max-width: 1280px; /* Incrementa el ancho máximo */
    width: min(1280px, 96vw); /* Aprovecha mejor pantallas grandes */
} /* Fin tamaño modal informe IA */

.report-settings-grid { /* Organiza prompt e instrucciones en dos columnas */
    display: grid; /* Activa distribución en cuadrícula */
    grid-template-columns: 1fr 1fr; /* Crea dos columnas iguales */
    gap: 16px; /* Añade separación entre columnas */
} /* Fin grid configuración informe */

.report-settings-field { /* Hace que cada columna use toda la altura disponible */
    min-width: 0; /* Evita que el contenido fuerce desbordamiento horizontal */
} /* Fin campo configuración informe */

.report-settings-textarea { /* Ajusta los textareas de configuración del informe */
    height: 550px !important; /* Fuerza una altura grande para ambos textareas */
} /* Fin textarea configuración informe */

@media (max-width: 900px) { /* Adapta el modal en pantallas pequeñas */
    .report-settings-grid { /* Cambia la distribución del grid en móvil */
        grid-template-columns: 1fr; /* Pone los campos uno debajo del otro */
    } /* Fin grid móvil */

    .report-settings-textarea { /* Ajusta altura de textareas en móvil */
        min-height: 260px; /* Reduce la altura para pantallas pequeñas */
        max-height: 260px; /* Mantiene altura controlada en móvil */
    } /* Fin textarea móvil */
} /* Fin responsive configuración informe */

.report-settings-modal-card .report-settings-textarea { /* Textareas del modal de configuración IA */
    height: 400px !important; /* Fuerza una altura grande para prompt e instrucciones */
    min-height: 400px !important; /* Mantiene altura mínima grande */
    max-height: 400px !important; /* Mantiene las dos cajas alineadas */
} /* Fin textareas configuración IA */

.justified-report-editor { /* Aplica justificado al editor visual del informe */
    text-align: justify; /* Justifica el texto antes de guardar el PDF */
    text-justify: inter-word; /* Reparte mejor los espacios entre palabras */
} /* Fin editor justificado */

.justified-report-editor p { /* Aplica justificado a los párrafos internos del informe */
    text-align: justify; /* Justifica cada párrafo dentro del editor */
    text-justify: inter-word; /* Mejora el justificado entre palabras */
} /* Fin párrafos justificados */

/* =========================================================
   CONFIGURACIÓN IA - OPCIONES VISUALES
========================================================= */

.report-options-grid { /* Organiza las opciones visuales del informe IA */
    display: grid; /* Activa cuadrícula */
    grid-template-columns: 1fr 1fr; /* Crea dos columnas */
    gap: 14px; /* Separa longitud y tono */
    margin-bottom: 16px; /* Separa opciones del bloque de prompts */
} /* Fin opciones visuales IA */

/* =========================================================
   CONFIGURACIÓN IA - SELECTORES MENOS NEGRITA
========================================================= */

#prettyReportLengthOption .pretty-select-button { /* Botón visual del selector de longitud */
    font-weight: 500 !important; /* Reduce la negrita del valor seleccionado */
} /* Fin selector longitud */

#prettyReportToneOption .pretty-select-button { /* Botón visual del selector de tono */
    font-weight: 500 !important; /* Reduce la negrita del valor seleccionado */
} /* Fin selector tono */

#prettyReportLengthOption .pretty-select-button span:first-child { /* Texto seleccionado de longitud */
    font-weight: 500 !important; /* Fuerza texto menos grueso */
} /* Fin texto longitud */

#prettyReportToneOption .pretty-select-button span:first-child { /* Texto seleccionado de tono */
    font-weight: 500 !important; /* Fuerza texto menos grueso */
} /* Fin texto tono */

#prettyReportLengthOption .pretty-select-option { /* Opciones desplegables de longitud */
    font-weight: 500 !important; /* Reduce la negrita de las opciones */
} /* Fin opciones longitud */

#prettyReportToneOption .pretty-select-option { /* Opciones desplegables de tono */
    font-weight: 500 !important; /* Reduce la negrita de las opciones */
} /* Fin opciones tono */

/* =========================================================
   HISTORIAL DE INFORMES IA
========================================================= */

.report-history-list { /* Lista de informes guardados */
    display: flex; /* Organiza informes en vertical */
    flex-direction: column; /* Coloca un informe debajo de otro */
    gap: 10px; /* Separa informes */
} /* Fin lista historial */

.report-history-item { /* Fila de informe guardado */
    display: flex; /* Coloca información y botones en horizontal */
    align-items: center; /* Centra verticalmente */
    justify-content: space-between; /* Separa texto y botones */
    gap: 12px; /* Añade separación */
    padding: 12px; /* Espacio interno */
    border: 1px solid var(--border); /* Borde suave */
    border-radius: 14px; /* Esquinas redondeadas */
    background: #f8fafc; /* Fondo claro */
} /* Fin fila historial */

.report-history-main { /* Zona de datos del informe */
    display: flex; /* Organiza textos */
    flex-direction: column; /* Nombre arriba y fecha abajo */
    gap: 4px; /* Separa líneas */
} /* Fin datos historial */

.report-history-main strong { /* Nombre del alumno */
    font-weight: 700; /* Destaca sin exceso */
} /* Fin nombre historial */

.report-history-main span { /* Fecha y trimestre */
    color: var(--muted); /* Texto secundario */
    font-size: 12px; /* Tamaño menor */
} /* Fin fecha historial */

.report-history-actions { /* Botones del informe */
    display: flex; /* Coloca botones en línea */
    align-items: center; /* Centra botones */
    gap: 8px; /* Separa botones */
} /* Fin botones historial */

/* =========================================================
   HISTORIAL DE INFORMES - BOTÓN ELIMINAR
========================================================= */

.report-history-actions .delete-btn { /* Botón eliminar del historial de informes */
    height: 37px !important; /* Iguala la altura del botón Abrir */
    min-width: 37px !important; /* Mantiene forma cuadrada */
    display: flex !important; /* Permite centrar el icono */
    align-items: center !important; /* Centra verticalmente la X */
    justify-content: center !important; /* Centra horizontalmente la X */
    padding: 0 !important; /* Evita desplazamientos internos */
} /* Fin botón eliminar historial */

/* =========================================================
   HISTORIAL DE INFORMES - SCROLL
========================================================= */

.report-history-list { /* Lista de informes guardados */
    max-height: 60vh; /* Nunca ocupa más del 60% de la altura de la ventana */
    overflow-y: auto; /* Muestra scroll vertical cuando sea necesario */
    padding-right: 6px; /* Evita que el scroll toque las tarjetas */
} /* Fin lista historial */

.report-history-list::-webkit-scrollbar { /* Barra de desplazamiento */
    width: 8px; /* Ancho del scroll */
} /* Fin scrollbar */

.report-history-list::-webkit-scrollbar-thumb { /* Parte móvil del scroll */
    background: #c7d2e5; /* Color acorde a la aplicación */
    border-radius: 999px; /* Bordes redondeados */
} /* Fin thumb scrollbar */

/* =========================================================
   HISTORIAL DE COMENTARIOS - FILTROS POR TRIMESTRE
========================================================= */

.comment-term-filter { /* Contenedor de filtros del historial */
    display: flex; /* Coloca los filtros en horizontal */
    flex-wrap: wrap; /* Permite salto de línea si hay muchos trimestres */
    gap: 6px; /* Separa los botones */
    margin-bottom: 8px; /* Separa filtros de los comentarios */
} /* Fin filtros historial */

.comment-term-filter-btn { /* Botón de filtro de trimestre */
    border: 1px solid var(--border); /* Borde suave */
    background: #f4f8fe; /* Fondo claro */
    color: #2f5f9f; /* Texto azul */
    border-radius: 8px; /* Forma de píldora */
    padding: 5px 10px; /* Espaciado interno */
    font-size: 11px; /* Texto pequeño */
    font-weight: 600; /* Negrita suave */
    cursor: pointer; /* Cursor de botón */
} /* Fin botón filtro */

.comment-term-filter-active { /* Filtro activo */
    background: #dbeafe; /* Fondo azul activo */
    border-color: #9bbce8; /* Borde activo */
    color: #183f72; /* Texto activo */
} /* Fin filtro activo */

.comment-term-tag { /* Etiqueta de trimestre dentro del comentario */
    display: inline-block; /* Permite estilo tipo etiqueta */
    margin: 0 6px; /* Separa fecha y comentario */
    padding: 2px 6px; /* Espaciado interno */
    border-radius: 8px; /* Forma píldora */
    background: #eef4ff; /* Fondo suave */
    color: #2f5f9f; /* Texto azul */
    font-size: 10px; /* Texto pequeño */
    font-weight: 600; /* Negrita suave */
} /* Fin etiqueta trimestre */

.comment-term-filter-active { /* Filtro de trimestre seleccionado */
    background: #eef4ff !important; /* Fondo azul muy suave */
    border-color: #bfd2ee !important; /* Borde ligeramente más visible */
    color: #2f5f9f !important; /* Azul habitual de la aplicación */
    font-weight: 600 !important; /* Un poco más destacado pero sin exagerar */
} /* Fin filtro activo */

.sub-modal-card.report-settings-modal-card { /* Modal de configuración IA abierto desde ventana ampliada */
    max-width: 1280px !important; /* Iguala el ancho máximo al modal principal */
    width: min(1280px, 96vw) !important; /* Iguala el ancho visible al modal principal */
} /* Fin modal configuración IA en submodal */

.sub-modal-card.report-settings-modal-card .report-settings-textarea { /* Textareas IA dentro del submodal */
    height: 400px !important; /* Iguala altura de los cuadros de texto */
    min-height: 400px !important; /* Mantiene altura mínima */
    max-height: 400px !important; /* Evita que crezcan diferente */
} /* Fin textareas IA en submodal */

/* ========================================================= */
/* RÚBRICA (subgrupo 3: submodal sobre tabla ampliada) — bloque único y consolidado */
/* Valores confirmados contra el estilo computado real antes de fusionar los dos bloques dispersos originales. */
/* ========================================================= */

.sub-modal-card.rubric-modal-card { /* Rúbrica abierta encima de la tabla ampliada */
    width: min(1620px, 96vw) !important; /* Usa casi todo el ancho disponible */
    max-width: 1620px !important; /* Igual que la rúbrica grande */
    max-height: 88vh !important; /* Evita que se salga de pantalla */
    height: auto !important; /* Permite que el modal mida solo lo necesario */
    min-height: 0 !important; /* Evita altura mínima excesiva */
} /* Fin tamaño rúbrica submodal */

.sub-modal-card.rubric-modal-card .sub-modal-body { /* Cuerpo de la rúbrica en submodal */
    min-height: 0 !important; /* Permite que el contenido se adapte */
    overflow: hidden !important; /* Evita doble scroll raro */
} /* Fin cuerpo rúbrica */

.sub-modal-card.rubric-modal-card .rubric-builder { /* Constructor de rúbrica en submodal */
    display: flex !important; /* Permite que tabla y botones se ordenen */
    flex-direction: column !important; /* Tabla arriba y botón abajo */
    height: auto !important; /* Elimina altura fija */
    min-height: 0 !important; /* Evita espacio vacío inferior */
} /* Fin constructor rúbrica */

.sub-modal-card.rubric-modal-card .rubric-table-wrap { /* Tabla de rúbrica dentro del submodal */
    flex: none !important; /* Evita que estire hasta ocupar todo el modal */
    height: auto !important; /* Se adapta al contenido */
    min-height: 0 !important; /* Quita altura mínima */
    max-height: 62vh !important; /* Si hay muchas filas, aparece scroll */
    overflow: auto !important; /* Activa scroll solo cuando haga falta */
} /* Fin tabla rúbrica */

/* =========================================================
   SELECTOR DE COMPETENCIAS EN SUBMODAL - SCROLL PROPIO
========================================================= */

.sub-modal-card.competencies-modal-card { /* Selector de competencias abierto encima de una actividad */
    width: min(1620px, 96vw) !important; /* Usa casi todo el ancho disponible */
    max-width: 1620px !important; /* Igual que otros submodales grandes */
    height: 88vh !important; /* Altura fija para que el reparto flex funcione */
    max-height: 88vh !important; /* Evita que se salga de pantalla */
    display: flex !important; /* La cabecera y el cuerpo se reparten la altura fija */
    flex-direction: column !important; /* Cabecera arriba, cuerpo abajo */
    overflow: hidden !important; /* El scroll vive dentro del cuerpo, no en la tarjeta */
}

.sub-modal-card.competencies-modal-card .modal-header { /* Cabecera con el título y la × */
    flex-shrink: 0 !important; /* Mantiene su altura natural */
}

.sub-modal-card.competencies-modal-card .sub-modal-body { /* Cuerpo del selector de competencias */
    flex: 1 !important; /* Ocupa toda la altura restante bajo la cabecera */
    display: flex !important; /* Apila columnas y botón inferior */
    flex-direction: column !important; /* Columnas arriba, botón abajo */
    min-height: 0 !important; /* Permite que el scroll interno funcione */
    overflow: hidden !important; /* El scroll vive dentro de cada columna, no aquí */
}

.sub-modal-card.competencies-modal-card .meetings-layout { /* Columnas de cursos, asignaturas y competencias */
    flex: 1 !important; /* Ocupa el espacio disponible antes del botón */
    min-height: 0 !important; /* Permite que las columnas recorten su propio contenido */
    overflow: hidden !important; /* Evita un scroll duplicado a nivel de columnas */
}

.sub-modal-card.competencies-modal-card .meetings-editor-panel,
.sub-modal-card.competencies-modal-card #pickerCompetenciesBox { /* Columna y caja de competencias */
    display: flex !important; /* Permite que el título quede fijo y la lista se desplace */
    flex-direction: column !important; /* Título arriba, lista abajo */
    min-height: 0 !important; /* Deja que la lista interior calcule su propio scroll */
}

.sub-modal-card.competencies-modal-card #pickerCompetenciesBox { /* Caja de competencias de la asignatura activa */
    flex: 1 !important; /* Ocupa todo el alto disponible de la columna */
}

.sub-modal-card.competencies-modal-card #pickerCompetenciesList { /* Lista de competencias marcables */
    flex: 1 !important; /* Ocupa el espacio restante bajo el título */
    overflow-y: auto !important; /* Activa el scroll cuando hay muchas competencias */
    min-height: 0 !important; /* Necesario para que el scroll funcione dentro de flex */
}

.sub-modal-card.competencies-modal-card .modal-actions { /* Botón Acceptar del selector */
    flex-shrink: 0 !important; /* Evita que el botón se encoja o desaparezca */
    margin-top: 10px !important; /* Separación respecto a las columnas */
}


.app-saved-notice { /* Aviso temporal general de la aplicación */
    position: fixed; /* Lo fija sobre toda la pantalla */
    left: 50%; /* Lo centra horizontalmente */
    top: 50%; /* Lo centra verticalmente */
    transform: translate(-50%, -50%); /* Centrado perfecto */
    z-index: 20000; /* Por encima de todos los modales */

    background: #eef8f3; /* Fondo verde suave */
    color: #10705a; /* Texto verde */

    border: 1px solid #b7decf; /* Borde suave */
    border-radius: 8px; /* Bordes redondeados */

    padding: 16px 24px; /* Espaciado interior */
    min-width: 260px; /* Ancho mínimo agradable */

    text-align: center; /* Centra el texto */
    font-size: 15px; /* Tamaño de texto */
    font-weight: 700; /* Texto destacado */

    box-shadow: 0 20px 50px rgba(15, 23, 42, 0.20); /* Sombra elegante */

    animation: appNoticeFade 1.6s ease forwards; /* Aparición y desaparición suave */
} /* Fin aviso */

@keyframes appNoticeFade {

    0% {
        opacity: 0;
        transform: translate(-50%, -45%);
    }

    10% {
        opacity: 1;
        transform: translate(-50%, -50%);
    }

    85% {
        opacity: 1;
        transform: translate(-50%, -50%);
    }

    100% {
        opacity: 0;
        transform: translate(-50%, -55%);
    }

}

/* =========================================================
   DUPLICAR ACTIVIDAD - SELECTORES MENOS NEGRITA
========================================================= */

#prettyDuplicateActivityClass,
#prettyDuplicateActivityClass *,
#prettyDuplicateActivityTerm,
#prettyDuplicateActivityTerm * { /* Todo el contenido de los selectores de duplicar actividad */
    font-weight: 500 !important; /* Reduce la negrita del texto */
} /* Fin selectores duplicar actividad */

.student-import-box { /* Caja para importar alumnos desde Excel o Google Sheets */
    border: 1px solid #e9edf4 !important; /* Borde suave */
    border-radius: 8px !important; /* Unifica redondeo */
    background: #f8fafc !important; /* Fondo gris muy suave */
    padding: 12px !important; /* Espaciado interior limpio */
} /* Fin caja importación alumnado */

.student-import-title { /* Título de importar alumnado */
    font-size: 13px; /* Tamaño cómodo */
    font-weight: 700; /* Negrita suave */
    color: var(--text); /* Color principal */
    margin-bottom: 4px; /* Separa del texto de ayuda */
} /* Fin título importar */

.student-import-help { /* Texto de ayuda de importación */
    font-size: 12px; /* Texto pequeño */
    color: var(--muted); /* Color secundario */
    margin-bottom: 8px; /* Separa del textarea */
} /* Fin ayuda importar */

.student-import-textarea { /* Área para pegar alumnado */
    min-height: 86px !important; /* Altura cómoda */
    max-height: 120px !important; /* Evita crecer demasiado */
    margin-bottom: 8px; /* Separa del botón */
} /* Fin textarea importar */

.student-import-btn { /* Botón importar alumnado */
    width: 100%;
    background: #e8f1ff !important; /* Un poco más azul */
    color: #2f5f9f !important;
    border: 1px solid #c9d8ee !important;
    font-weight: 900 !important;
}

.student-import-btn:hover {
    background: #ddeafb !important; /* Hover ligeramente más marcado */
    color: #234f86 !important;
    border-color: #a9c3e8 !important;
}

/* =========================================================
   TABLA IMPORTACIÓN ALUMNADO
========================================================= */

.bulk-students-row {

    display: grid;

    grid-template-columns: 1fr 1fr;
}

.bulk-student-name {

    border-top-right-radius: 0 !important;

    border-bottom-right-radius: 0 !important;
}

.bulk-student-condition {

    border-top-left-radius: 0 !important;

    border-bottom-left-radius: 0 !important;

    border-left: 1px solid var(--border-color);
}

/* =========================================================
   AGENDA OPCIÓN A: BLOQUES MODERNOS
========================================================= */

.agenda-page-card { /* Tarjeta principal de la agenda integrada */
    padding: 14px !important; /* Da más aire interior a la agenda */
    border-radius: 14px !important; /* Suaviza las esquinas de la tarjeta */
    background: #ffffff !important; /* Mantiene un fondo limpio */
} /* Fin tarjeta agenda */

.agenda-page-header { /* Cabecera superior de la agenda */
    margin-bottom: 10px !important; /* Separa la cabecera de la cuadrícula */
} /* Fin cabecera agenda */

.agenda-grid { /* Contenedor exterior de la agenda */
    border-radius: 14px !important; /* Redondea más el marco de la agenda */
    border: 1px solid #dbe6f3 !important; /* Aplica un borde más suave */
    background: #ffffff !important; /* Mantiene fondo blanco */
} /* Fin contenedor agenda */

.agenda-table { /* Cuadrícula interna de la agenda */
    grid-auto-rows: minmax(13px, 1fr) !important; /* Reduce cada franja para que quepa todo el horario completo */
    height: 100% !important; /* Hace que la agenda use toda la altura disponible */
    background: #ffffff !important; /* Asegura fondo blanco en toda la tabla */
} /* Fin cuadrícula agenda */

.agenda-head { /* Cabeceras de los días */
    height: 68px !important; /* Da más presencia a cada cabecera */
    background: linear-gradient(180deg, #f8fbff 0%, #ffffff 100%) !important; /* Crea un degradado muy suave */
    border-bottom: 1px solid #dbe6f3 !important; /* Marca separación inferior limpia */
} /* Fin cabecera día */

.agenda-head strong { /* Número del día */
    color: #2f5f9f !important; /* Mantiene el azul principal */
    font-size: 19px !important; /* Hace el número más visible */
    font-weight: 900 !important; /* Refuerza visualmente el número */
} /* Fin número día */

.agenda-cell { /* Celdas vacías del calendario */
    background: #ffffff !important; /* Fondo blanco limpio */
    border-right: 1px solid #edf3fa !important; /* Línea vertical más suave */
    border-bottom: 1px solid #edf3fa !important; /* Línea horizontal más suave */
} /* Fin celda agenda */

.agenda-cell:hover { /* Celda al pasar el ratón */
    background: #f8fbff !important; /* Resalta la celda de forma muy sutil */
} /* Fin hover celda */

.agenda-event { /* Bloque visual de actividad */
    margin: 3px 3px !important; /* Deja solo un pequeño aire, para acercar la actividad a los bordes de la columna */
    padding: 3px 8px !important; /* Reduce el espacio interior para dejar más sitio al texto */
    border-radius: 9px !important; /* Redondea las actividades estilo opción A */
    border-left-width: 0 !important; /* Elimina la barra lateral antigua */
    box-shadow: inset 0 0 0 1px rgba(47, 95, 159, 0.14) !important; /* Añade borde interno suave */
    font-weight: 500 !important; /* Reduce la negrita general del evento */
    display: flex !important; /* Convierte el evento en un contenedor flexible */
    flex-direction: column !important; /* Mantiene hora y título uno debajo del otro */
    justify-content: flex-start !important; /* Coloca el contenido del evento en la parte superior */
    min-height: 30px !important; /* Garantiza que siempre quepan la hora y el título, aunque la actividad dure poco y la fila de la cuadrícula sea muy baja */
}

.agenda-event:hover { /* Actividad al pasar el ratón */
    filter: brightness(0.98); /* Mantiene un ligero cambio visual al pasar el ratón */
    transform: none !important; /* Evita que la tarjeta se desplace al pasar el cursor */
} /* Fin hover actividad */

.agenda-event-time { /* Hora dentro del bloque de actividad */
    margin: 0 !important; /* Quita separación extra respecto al título */
    font-size: 11px !important; /* Ahora hay más sitio al haber quitado descripción y enlace de la cuadrícula */
    color: #243b5a !important; /* Usa texto oscuro legible */
    font-weight: 650 !important; /* Mantiene la hora visible sin verse tan pesada */
    line-height: 1.2 !important; /* Compacta la altura de la línea */
}

.agenda-event strong { /* Título de la actividad */
    font-size: 13px !important; /* Ahora hay más sitio al haber quitado descripción y enlace de la cuadrícula */
    line-height: 1.2 !important; /* Compacta la altura de la línea del título */
    color: #10233f !important; /* Usa un azul oscuro legible */
    font-weight: 700 !important; /* Refuerza el título ahora que es más grande */
    text-transform: none !important; /* Muestra el título tal cual se escribió al crear la actividad, sin forzar mayúsculas ni minúsculas */
    overflow: hidden !important; /* Recorta el título si no cabe entero */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos al título recortado */
    white-space: nowrap !important; /* Mantiene el título en una sola línea */
} /* Fin título actividad */

.agenda-event p, /* Descripción dentro del bloque */
.agenda-event a { /* Enlace dentro del bloque */
    display: none !important; /* En la cuadrícula solo se muestran hora y título; la descripción, enlaces y adjuntos se ven al pulsar la actividad */
} /* Fin ocultar descripción y enlace en la cuadrícula */

.agenda-event-blue { /* Actividad azul */
    background: #e7f2ff !important; /* Aplica azul pastel moderno */
} /* Fin azul */

.agenda-event-yellow { /* Actividad amarilla */
    background: #fff4cf !important; /* Aplica amarillo pastel moderno */
} /* Fin amarillo */

.agenda-event-red { /* Actividad roja */
    background: #ffe1e7 !important; /* Aplica rojo pastel moderno */
} /* Fin rojo */

.agenda-event-green { /* Actividad verde */
    background: #def8ed !important; /* Aplica verde pastel moderno */
} /* Fin verde */

.agenda-event-purple { /* Actividad lila */
    background: #eee5ff !important; /* Aplica lila pastel moderno */
} /* Fin lila */

.agenda-event-pink { /* Actividad rosa */
    background: #ffe4f1 !important; /* Aplica rosa pastel moderno */
} /* Fin rosa */

.agenda-event-orange { /* Actividad naranja */
    background: #ffe8d1 !important; /* Aplica naranja pastel moderno */
} /* Fin naranja */

.agenda-cell.agenda-cell-selected { /* Celda seleccionada al arrastrar en la agenda */
    background: rgba(47, 111, 237, 0.08) !important; /* Aplica un azul muy suave para no llamar demasiado la atención */
    box-shadow: inset 0 0 0 1px rgba(47, 111, 237, 0.25) !important; /* Añade un borde fino y poco invasivo */
} /* Fin celda seleccionada */

.agenda-cell.agenda-cell-selected:hover { /* Celda seleccionada cuando pasa el ratón */
    background: rgba(47, 111, 237, 0.12) !important; /* Mantiene la selección visible pero muy discreta */
} /* Fin hover de celda seleccionada */

.agenda-drag-tooltip { /* Indicador flotante con el horario mientras se arrastra en la agenda */
    position: absolute; /* Flota sobre la cuadrícula, igual que la línea de la hora actual */
    transform: translate(-50%, 6px); /* Centra el indicador y lo separa un poco de la última celda */
    background: #2f6fed; /* Azul principal de la app */
    color: #ffffff; /* Texto blanco para contraste */
    font-size: 12px; /* Tamaño discreto */
    font-weight: 700; /* Resalta el texto sin ser demasiado grande */
    padding: 3px 8px; /* Espacio interior del indicador */
    border-radius: 6px; /* Redondea el indicador */
    white-space: nowrap; /* Evita que el horario se parta en dos líneas */
    pointer-events: none; /* Evita que el indicador interfiera con el arrastre */
    z-index: 30; /* Queda por encima de las celdas y del evento que se está creando */
    box-shadow: 0 4px 10px rgba(15, 23, 42, .25); /* Le da un poco de profundidad */
} /* Fin indicador de arrastre */

/* =========================================================
   REUNIONES OPCIÓN A: TARJETAS MODERNAS
========================================================= */

.meeting-category-card-row { /* Fila moderna de categoría */
    display: block !important; /* Elimina la columna antigua de la X */
    padding-bottom: 0 !important; /* Quita espacio reservado para separador antiguo */
    margin-bottom: 10px !important; /* Separa las tarjetas de categorías */
} /* Fin fila moderna categoría */

.meeting-category-card-row::after { /* Separador antiguo de categorías */
    display: none !important; /* Oculta la línea separadora antigua */
} /* Fin separador antiguo */

.meeting-category-card { /* Tarjeta clicable de categoría */
    width: 100% !important; /* Ocupa todo el ancho de la columna */
    min-height: 52px !important; /* Da altura cómoda a la tarjeta */
    display: grid !important; /* Organiza icono, texto y contador */
    grid-template-columns: 28px 1fr auto !important; /* Icono fijo, nombre flexible y contador */
    align-items: center !important; /* Centra verticalmente el contenido */
    gap: 10px !important; /* Separa icono, nombre y contador */
    padding: 10px 12px !important; /* Añade aire interno */
    border-radius: 10px !important; /* Redondea como tarjetas modernas */
    text-align: left !important; /* Alinea texto a la izquierda */
    box-shadow: inset 0 0 0 1px rgba(47, 95, 159, 0.08) !important; /* Añade borde interno muy suave */
} /* Fin tarjeta categoría */

.meeting-category-icon { /* Icono de categoría */
    width: 28px !important; /* Da tamaño fijo al icono */
    height: 28px !important; /* Da tamaño fijo al icono */
    display: grid !important; /* Permite centrar el icono */
    place-items: center !important; /* Centra el icono dentro del círculo */
    border-radius: 8px !important; /* Redondea el fondo del icono */
    background: rgba(255, 255, 255, 0.55) !important; /* Crea una pastilla suave detrás del icono */
    font-size: 14px !important; /* Ajusta tamaño del icono */
    font-weight: 900 !important; /* Hace el icono visible */
} /* Fin icono categoría */

.meeting-category-name { /* Nombre de categoría */
    overflow: hidden !important; /* Evita que el nombre desborde */
    text-overflow: ellipsis !important; /* Muestra puntos suspensivos si es largo */
    white-space: nowrap !important; /* Mantiene el nombre en una línea */
    font-size: 13px !important; /* Ajusta tamaño del nombre */
    font-weight: 900 !important; /* Da presencia al nombre */
} /* Fin nombre categoría */

.meeting-category-count { /* Contador de reuniones */
    min-width: 28px !important; /* Mantiene ancho estable */
    height: 26px !important; /* Mantiene altura estable */
    display: grid !important; /* Centra el número */
    place-items: center !important; /* Centra el contador */
    border-radius: 8px !important; /* Redondea el contador */
    background: rgba(255, 255, 255, 0.65) !important; /* Fondo suave del contador */
    font-size: 12px !important; /* Tamaño del número */
    font-weight: 950 !important; /* Número destacado */
} /* Fin contador */

.meeting-category-active { /* Categoría seleccionada */
    transform: translateY(-1px) !important; /* Eleva ligeramente la tarjeta seleccionada */
    box-shadow: 0 4px 10px rgba(0,0,0,.06) !important; /* Añade una sombra suave sin cambiar el color */
} /* Fin categoría seleccionada */

.meetings-list { /* Lista central de reuniones */
    gap: 12px !important; /* Aumenta separación entre tarjetas */
} /* Fin lista reuniones */

.meeting-card { /* Tarjeta completa de reunión */
    width: 100% !important; /* Ocupa todo el ancho disponible */
    min-height: 94px !important; /* Da altura parecida a la maqueta */
    display: grid !important; /* Organiza fecha, contenido y etiqueta */
    grid-template-columns: 72px 1fr auto !important; /* Fecha fija, contenido flexible y badge */
    align-items: center !important; /* Centra verticalmente la tarjeta */
    gap: 14px !important; /* Separa columnas de la tarjeta */
    padding: 14px 16px !important; /* Añade aire interno */
    border: 1px solid #d9e5f3 !important; /* Borde suave */
    border-radius: 10px !important; /* Redondea la tarjeta */
    background: #ffffff !important; /* Fondo base limpio */
    cursor: pointer !important; /* Indica que es clicable */
    text-align: left !important; /* Alinea textos a la izquierda */
    transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease !important; /* Suaviza interacción */
} /* Fin tarjeta reunión */

.meeting-card:hover { /* Tarjeta de reunión al pasar el ratón */
    transform: translateY(-1px) !important; /* Eleva la tarjeta ligeramente */
    box-shadow: 0 8px 18px rgba(30, 64, 105, 0.08) !important; /* Añade sombra muy suave sin cambiar el color del borde */
} /* Fin hover reunión */

.meeting-card-active { /* Reunión seleccionada */
    border-color: #8bb4f5 !important; /* Marca borde activo */
    box-shadow: inset 0 0 0 1px rgba(47, 111, 237, 0.18) !important; /* Marca selección de forma limpia */
} /* Fin reunión activa */

.meeting-card-date { /* Bloque de fecha */
    display: grid !important; /* Coloca día y mes en vertical */
    justify-items: center !important; /* Centra fecha */
    align-content: center !important; /* Centra verticalmente */
    min-height: 66px !important; /* Da cuerpo al bloque fecha */
    border-radius: 10px !important; /* Redondea el bloque fecha */
    background: rgba(255, 255, 255, 0.55) !important; /* Fondo translúcido sobre el pastel */
} /* Fin fecha */

.meeting-card-date strong { /* Día grande */
    font-size: 30px !important; /* Hace el día protagonista */
    line-height: 1 !important; /* Compacta el número */
    font-weight: 950 !important; /* Hace el día muy visible */
} /* Fin día */

.meeting-card-date small { /* Mes corto */
    margin-top: 4px !important; /* Separa mes del día */
    font-size: 12px !important; /* Ajusta mes */
    font-weight: 950 !important; /* Destaca mes */
} /* Fin mes */

.meeting-card-main { /* Columna central */
    display: grid !important; /* Organiza título y metadatos en vertical */
    gap: 5px !important; /* Separa título, hora y participantes */
    min-width: 0 !important; /* Permite truncar textos largos */
} /* Fin columna central */

.meeting-card-main strong { /* Título de reunión */
    color: #10233f !important; /* Usa azul oscuro legible */
    font-size: 14px !important; /* Tamaño cómodo */
    font-weight: 950 !important; /* Título destacado */
    overflow: hidden !important; /* Evita desbordes */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos */
    white-space: nowrap !important; /* Mantiene una línea */
} /* Fin título reunión */

.meeting-card-meta { /* Hora y participantes */
    color: #304761 !important; /* Texto secundario legible */
    font-size: 12px !important; /* Tamaño secundario */
    font-weight: 700 !important; /* Da presencia sin pesar */
    overflow: hidden !important; /* Evita desbordes */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos */
    white-space: nowrap !important; /* Mantiene una línea */
} /* Fin metadatos */

.meeting-card-badge { /* Etiqueta de categoría */
    align-self: start !important; /* Coloca la etiqueta arriba */
    padding: 5px 9px !important; /* Da forma de chip */
    border-radius: 8px !important; /* Redondea el chip */
    font-size: 10px !important; /* Tamaño compacto */
    font-weight: 950 !important; /* Chip destacado */
    text-transform: uppercase !important; /* Mantiene estilo de etiqueta */
    white-space: nowrap !important; /* Evita salto de línea */
    background: rgba(255, 255, 255, 0.62) !important; /* Fondo translúcido del chip */
} /* Fin etiqueta */

.meeting-card-blue { /* Reunión azul */
    background: #eef6ff !important; /* Fondo azul pastel */
} /* Fin azul */

.meeting-card-yellow { /* Reunión amarilla */
    background: #fff8dd !important; /* Fondo amarillo pastel */
} /* Fin amarillo */

.meeting-card-red { /* Reunión roja */
    background: #fff0f2 !important; /* Fondo rojo pastel */
} /* Fin rojo */

.meeting-card-green { /* Reunión verde */
    background: #ecfbf4 !important; /* Fondo verde pastel */
} /* Fin verde */

.meeting-card-purple { /* Reunión lila */
    background: #f5efff !important; /* Fondo lila pastel */
} /* Fin lila */

.meeting-card-pink { /* Reunión rosa */
    background: #fff0f8 !important; /* Fondo rosa pastel */
} /* Fin rosa */

.meeting-card-orange { /* Reunión naranja */
    background: #fff3e7 !important; /* Fondo naranja pastel */
} /* Fin naranja */

.meeting-list-row { /* Fila antigua de reunión */
    display: none !important; /* Oculta cualquier fila antigua si queda renderizada por caché */
} /* Fin fila antigua */

.meeting-category-delete-btn, /* X antigua de categoría */
.meeting-list-delete-btn { /* X antigua de reunión */
    display: none !important; /* Oculta las X visibles del módulo de reuniones */
} /* Fin ocultar X reuniones */

/* =========================================================
   REUNIONES: MAQUETA FINAL TIPO TARJETAS
========================================================= */

.meetings-layout { /* Layout general de reuniones */
    grid-template-columns: 360px 450px 1fr !important; /* Iguala las proporciones de la maqueta */
    gap: 14px !important; /* Separa las tres columnas */
} /* Fin layout reuniones */

.meetings-sidebar, /* Columna izquierda */
.meetings-list-panel, /* Columna central */
.meetings-editor-panel { /* Columna derecha */
    border-radius: 8px !important; /* Redondeo limpio de paneles */
    background: #ffffff !important; /* Fondo blanco como la maqueta */
    border: 1px solid #d5e2f1 !important; /* Borde suave */
    padding: 18px !important; /* Más aire interior */
} /* Fin paneles reuniones */

.meeting-category-card-row { /* Fila de categoría */
    margin-bottom: 14px !important; /* Separa tarjetas de categoría */
} /* Fin fila categoría */

.meeting-category-card { /* Tarjeta categoría */
    min-height: 60px !important; /* Altura como la maqueta */
    grid-template-columns: 46px 1fr 38px !important; /* Icono, nombre y contador */
    padding: 14px 16px !important; /* Aire interno */
    border-radius: 8px !important; /* Esquinas suaves */
    border: 1px solid transparent !important; /* Borde base */
} /* Fin tarjeta categoría */

.meeting-category-modern-icon { /* Icono de categoría */
    width: 38px !important; /* Anchura del icono */
    height: 38px !important; /* Altura del icono */
    display: grid !important; /* Permite centrar */
    place-items: center !important; /* Centra el emoji */
    border-radius: 9px !important; /* Redondea fondo */
    background: rgba(255, 255, 255, 0.55) !important; /* Fondo suave */
    font-size: 20px !important; /* Tamaño de icono */
} /* Fin icono categoría */

.meeting-category-name { /* Nombre categoría */
    font-size: 15px !important; /* Tamaño más parecido a maqueta */
    font-weight: 800 !important; /* Texto fuerte */
} /* Fin nombre categoría */

.meeting-category-count { /* Contador */
    width: 34px !important; /* Anchura contador */
    height: 34px !important; /* Altura contador */
    border-radius: 8px !important; /* Redondeo contador */
    font-size: 15px !important; /* Tamaño número */
} /* Fin contador */

.meeting-category-card-red { /* Categoría roja */
    background: #ffe0e0 !important; /* Rojo pastel diferenciable del rosa */
    border-color: #f29a9a !important; /* Borde rojo suave */
} /* Fin categoría roja */

.meeting-category-card-orange { /* Categoría naranja */
    background: #ffe7cc !important; /* Naranja pastel claramente distinto del amarillo */
    border-color: #f3b562 !important; /* Borde naranja suave */
} /* Fin categoría naranja */

.meeting-category-card-green { /* Categoría verde */
    background: #ecfbf4 !important; /* Fondo verde pastel */
    border-color: #c7efd9 !important; /* Borde verde suave */
} /* Fin verde */

.meeting-category-card-purple { /* Categoría lila */
    background: #f6efff !important; /* Fondo lila pastel */
    border-color: #decdf7 !important; /* Borde lila suave */
} /* Fin lila */

.meeting-category-card-blue { /* Categoría azul */
    background: #eef6ff !important; /* Fondo azul pastel */
    border-color: #cfe2ff !important; /* Borde azul suave */
} /* Fin azul */

.meetings-list { /* Lista de reuniones */
    gap: 8px !important; /* Reduce la separación vertical entre tarjetas */
} /* Fin lista */

.meeting-card { /* Tarjeta reunión */
    min-height: 100px !important; /* Altura como la maqueta */
    grid-template-columns: 88px 1fr auto !important; /* Fecha, contenido y etiqueta */
    padding: 22px 24px !important; /* Más aire interno */
    border-radius: 8px !important; /* Esquinas de tarjeta */
    border: 1px solid #d8e4f2 !important; /* Borde suave */
} /* Fin tarjeta reunión */

.meeting-card-date strong { /* Día grande */
    font-size: 42px !important; /* Día mucho más grande */
    color: #155ec9 !important; /* Azul intenso por defecto */
} /* Fin día */

.meeting-card-date small { /* Mes */
    font-size: 15px !important; /* Mes más visible */
    color: #0b4aa2 !important; /* Azul del mes */
} /* Fin mes */

.meeting-card-main strong { /* Título reunión */
    font-size: 16px !important; /* Título más grande */
    margin-bottom: 4px !important; /* Separación bajo título */
} /* Fin título */

.meeting-card-meta { /* Datos reunión */
    font-size: 13px !important; /* Texto secundario cómodo */
    line-height: 1.45 !important; /* Mejora lectura */
} /* Fin metadatos */

.meeting-card-badge { /* Chip categoría */
    margin-top: 2px !important; /* Ajusta posición vertical */
    font-size: 11px !important; /* Tamaño chip */
    padding: 7px 12px !important; /* Aire chip */
    border-radius: 8px !important; /* Redondeo chip */
} /* Fin chip */

.meeting-card-red { /* Reunión roja */
    background: #fff7f8 !important; /* Mantiene el fondo rojo muy suave */
    border-color: #ffc9cf !important; /* Usa un borde rojo suave igual que la categoría */
} /* Fin reunión roja */

.meeting-card-orange { /* Reunión naranja */
    background: #fff5e9 !important; /* Mantiene el fondo naranja muy suave */
    border-color: #ffd7a8 !important; /* Usa un borde naranja suave igual que la categoría */
} /* Fin reunión naranja */

.meeting-card-green { /* Reunión verde */
    background: #f2fcf7 !important; /* Mantiene el fondo verde muy suave */
    border-color: #c7efd9 !important; /* Usa un borde verde suave igual que la categoría */
} /* Fin reunión verde */

.meeting-card-purple { /* Reunión lila */
    background: #faf5ff !important; /* Mantiene el fondo lila muy suave */
    border-color: #decdf7 !important; /* Usa un borde lila suave igual que la categoría */
} /* Fin reunión lila */

.meeting-card-blue { /* Reunión azul */
    background: #f3f8ff !important; /* Mantiene el fondo azul muy suave */
    border-color: #cfe2ff !important; /* Usa un borde azul suave igual que la categoría */
} /* Fin reunión azul */

.meeting-editor-panel { /* Panel derecho */
    padding: 24px !important; /* Más aire en el editor */
} /* Fin panel derecho */

.meeting-title-input { /* Título de reunión */
    border: none !important; /* Quita borde de input */
    padding: 0 !important; /* Quita padding de input */
    height: 44px !important; /* Altura de título */
    font-size: 28px !important; /* Título grande como maqueta */
    font-weight: 950 !important; /* Título muy marcado */
    color: #07182f !important; /* Azul oscuro */
    background: transparent !important; /* Fondo transparente */
} /* Fin título reunión */

.meeting-editor-fields { /* Campos fecha hora participantes */
    display: grid !important; /* Usa grid */
    grid-template-columns: 170px 170px 1fr !important; /* Fecha, hora y participantes */
    gap: 14px !important; /* Separación entre chips */
    margin-top: 14px !important; /* Separa del título */
    margin-bottom: 26px !important; /* Separa del editor */
} /* Fin campos editor */

#meetingDateInput, /* Fecha */
#meetingTimeInput, /* Hora */
#meetingParticipantsInput { /* Participantes */
    height: 52px !important; /* Altura tipo chip */
    border: 1px solid #d5e2f1 !important; /* Borde suave */
    border-radius: 9px !important; /* Redondeo chip */
    background: #ffffff !important; /* Fondo blanco */
    font-size: 14px !important; /* Texto legible */
    font-weight: 700 !important; /* Texto con presencia */
    color: #12243d !important; /* Texto oscuro */
} /* Fin inputs superiores */

.tox-tinymce { /* Caja TinyMCE */
    border-radius: 10px !important; /* Redondeo del editor */
    border-color: #d7e2f0 !important; /* Borde suave */
    overflow: hidden !important; /* Recorta esquinas */
} /* Fin TinyMCE */

/* =========================================================
   REUNIONES: AJUSTE COMPACTO Y ACCIONES
========================================================= */

.meetings-layout { /* Layout general de reuniones más compacto */
    grid-template-columns: 300px 360px 1fr !important; /* Reduce columnas izquierda y central */
    gap: 10px !important; /* Reduce separación entre columnas */
} /* Fin layout compacto */

.meetings-sidebar, /* Columna categorías */
.meetings-list-panel, /* Columna reuniones */
.meetings-editor-panel { /* Columna editor */
    padding: 14px !important; /* Reduce aire interior de los paneles */
} /* Fin paneles compactos */

.meeting-category-card { /* Tarjeta de categoría compacta */
    min-height: 58px !important; /* Reduce altura de categoría */
    grid-template-columns: 34px 1fr 30px 28px !important; /* Añade columna para botón de acciones */
    padding: 10px 12px !important; /* Reduce relleno interno */
} /* Fin categoría compacta */

.meeting-category-modern-icon { /* Icono de categoría compacto */
    width: 30px !important; /* Reduce anchura del icono */
    height: 30px !important; /* Reduce altura del icono */
    font-size: 16px !important; /* Reduce tamaño del icono */
} /* Fin icono compacto */

.meeting-category-name { /* Nombre de categoría compacto */
    font-size: 13px !important; /* Reduce tamaño del texto */
} /* Fin nombre compacto */

.meeting-category-count { /* Contador compacto */
    width: 28px !important; /* Reduce anchura */
    height: 28px !important; /* Reduce altura */
    font-size: 13px !important; /* Reduce número */
} /* Fin contador compacto */

.meeting-card { /* Tarjeta de reunión compacta */
    min-height: 92px !important; /* Reduce altura de reunión */
    grid-template-columns: 70px 1fr auto 28px !important; /* Añade columna de botón de acciones */
    padding: 14px 16px !important; /* Reduce relleno interno */
    gap: 12px !important; /* Reduce separación interna */
} /* Fin reunión compacta */

.meeting-card-date { /* Fecha compacta */
    min-height: 58px !important; /* Reduce bloque de fecha */
} /* Fin fecha compacta */

.meeting-card-date strong { /* Día compacto */
    font-size: 32px !important; /* Reduce tamaño del día */
} /* Fin día compacto */

.meeting-card-date small { /* Mes compacto */
    font-size: 12px !important; /* Reduce mes */
} /* Fin mes compacto */

.meeting-card-main strong { /* Título compacto */
    font-size: 14px !important; /* Reduce título */
} /* Fin título compacto */

.meeting-card-meta { /* Datos compactos */
    font-size: 12px !important; /* Reduce metadatos */
} /* Fin metadatos compactos */

.meeting-card-badge { /* Chip compacto */
    font-size: 10px !important; /* Reduce chip */
    padding: 5px 8px !important; /* Reduce relleno chip */
} /* Fin chip compacto */

.meeting-card-more { /* Botón de tres puntos */
    width: 28px !important; /* Anchura del botón */
    height: 28px !important; /* Altura del botón */
    display: grid !important; /* Permite centrar puntos */
    place-items: center !important; /* Centra los puntos */
    border-radius: 8px !important; /* Redondea el botón */
    border: none !important; /* Quita borde */
    background: rgba(255, 255, 255, 0.65) !important; /* Fondo blanco translúcido */
    color: #43566e !important; /* Color discreto */
    font-size: 18px !important; /* Tamaño de puntos */
    font-weight: 900 !important; /* Hace visibles los puntos */
    cursor: pointer !important; /* Cursor de botón */
} /* Fin botón tres puntos */

.meeting-card-more:hover { /* Botón de tres puntos al pasar el ratón */
    background: #fff1f1 !important; /* Fondo rojo suave para avisar eliminación */
    color: #b42318 !important; /* Texto rojo al pasar */
} /* Fin hover tres puntos */

.meeting-title-input { /* Título del editor menos gigante */
    height: 38px !important; /* Reduce altura */
    font-size: 22px !important; /* Reduce título */
} /* Fin título editor compacto */

.meeting-editor-fields { /* Campos superiores del editor */
    grid-template-columns: 150px 150px 1fr !important; /* Reduce fecha y hora */
    gap: 10px !important; /* Reduce separación */
    margin-top: 10px !important; /* Reduce margen superior */
    margin-bottom: 18px !important; /* Reduce margen inferior */
} /* Fin campos compactos */

#meetingDateInput, /* Campo fecha */
#meetingTimeInput, /* Campo hora */
#meetingParticipantsInput { /* Campo participantes */
    height: 42px !important; /* Reduce altura de campos */
    font-size: 13px !important; /* Reduce texto */
} /* Fin inputs compactos */

.meeting-editor-actions .btn { /* Botón guardar compacto */
    min-width: 170px !important; /* Reduce anchura */
    height: 44px !important; /* Reduce altura */
    font-size: 14px !important; /* Reduce texto */
} /* Fin botón guardar compacto */

/* =========================================================
   REUNIONES: VERSIÓN COMPACTA FINAL SIN ICONOS
========================================================= */

.meetings-layout { /* Layout general compacto */
    grid-template-columns: 320px 430px 1fr !important; /* Ajusta columnas sin hacerlas gigantes */
    gap: 10px !important; /* Reduce separación entre columnas */
} /* Fin layout */

.meeting-category-card { /* Tarjeta de categoría */
    min-height: 50px !important; /* Altura equilibrada */
    display: grid !important; /* Activa grid interno */
    grid-template-columns: 1fr 34px 30px !important; /* Nombre, contador y puntos */
    align-items: center !important; /* Centra contenido vertical */
    gap: 10px !important; /* Separación interna */
    padding: 14px 18px !important; /* Aire interno */
    margin-bottom: 8px !important; /* Separación entre categorías */
    border-radius: 8px !important; /* Bordes suaves */
    cursor: pointer !important; /* Cursor clicable */
} /* Fin categoría */

.meeting-category-modern-icon, /* Icono anterior */
.meeting-category-icon { /* Icono anterior */
    display: none !important; /* Oculta iconos de categorías */
} /* Fin ocultar iconos */

.meeting-category-name { /* Nombre de categoría */
    font-size: 15px !important; /* Tamaño limpio */
    font-weight: 800 !important; /* Texto fuerte */
} /* Fin nombre */

.meeting-category-count { /* Contador de categoría */
    width: 34px !important; /* Ancho contador */
    height: 34px !important; /* Alto contador */
    display: grid !important; /* Centra número */
    place-items: center !important; /* Centra número */
    border-radius: 8px !important; /* Redondea contador */
    background: rgba(255,255,255,.72) !important; /* Fondo suave */
    font-size: 15px !important; /* Tamaño número */
    font-weight: 800 !important; /* Número fuerte */
} /* Fin contador */

.meeting-card { /* Tarjeta reunión */
    min-height: 76px !important; /* Reduce la altura real de cada reunión */
    display: grid !important; /* Mantiene la estructura interna en columnas */
    grid-template-columns: 54px 1fr auto 28px !important; /* Reduce la columna de fecha y mantiene etiqueta y puntos */
    align-items: center !important; /* Centra el contenido verticalmente */
    gap: 10px !important; /* Reduce la separación interna entre bloques */
    padding: 10px 12px !important; /* Reduce el aire interior de la tarjeta */
    margin-bottom: 8px !important; /* Mantiene separación ligera entre reuniones */
    border-radius: 8px !important; /* Mantiene bordes suaves */
    cursor: pointer !important; /* Mantiene cursor de elemento clicable */
} /* Fin reunión */

.meeting-card-date { /* Bloque fecha */
    min-height: 52px !important; /* Hace la caja de fecha más pequeña */
    width: 52px !important; /* Fija una anchura compacta para la fecha */
    border-radius: 8px !important; /* Mantiene redondeo suave */
} /* Fin fecha */

.meeting-card-date strong { /* Día */
    font-size: 22px !important; /* Reduce el tamaño del número del día */
    color: #2b3a4f !important; /* Cambia el azul por gris oscuro elegante */
} /* Fin día */

.meeting-card-date small { /* Mes */
    font-size: 10px !important; /* Reduce el mes para que acompañe al día */
    color: #607086 !important; /* Cambia el azul por gris secundario */
} /* Fin mes */

.meeting-card-main strong { /* Título reunión */
    font-size: 12px !important; /* Mantiene el título compacto */
    color: #172334 !important; /* Usa el color principal de texto en vez de azul */
    font-weight: 800 !important; /* Mantiene el título claro sin exagerar */
} /* Fin título */

.meeting-card-meta { /* Metadatos */
    font-size: 11px !important; /* Hace hora y participantes más discretos */
    color: #607086 !important; /* Usa gris secundario para la información auxiliar */
    line-height: 1.35 !important; /* Compacta la altura entre líneas */
} /* Fin metadatos */

.meeting-card-badge { /* Etiqueta categoría */
    font-size: 10px !important; /* Chip pequeño */
    padding: 6px 10px !important; /* Aire del chip */
    border-radius: 8px !important; /* Redondeo chip */
} /* Fin etiqueta */

.meeting-card-more { /* Botón de tres puntos verticales de reuniones y categorías */
    width: 22px !important; /* Usa el mismo ancho que los otros botones de tres puntos */
    height: 26px !important; /* Usa la misma altura cómoda que los otros botones */
    display: grid !important; /* Permite centrar los puntos */
    place-items: center !important; /* Centra los puntos dentro del botón */
    border: none !important; /* Quita cualquier borde visible */
    border-radius: 7px !important; /* Mantiene el mismo redondeo que el menú de actividades */
    background: transparent !important; /* Elimina el fondo para que se vea limpio */
    color: #9aa8b8 !important; /* Usa el mismo gris sutil que los otros tres puntos */
    font-size: 20px !important; /* Mantiene el tamaño de los puntos verticales */
    font-weight: 900 !important; /* Hace visibles los puntos sin exagerarlos */
    line-height: 1 !important; /* Evita desajustes verticales */
    cursor: pointer !important; /* Muestra cursor de botón */
} /* Fin botón tres puntos reuniones */

.meeting-card-more:hover { /* Hover de tres puntos de reuniones y categorías */
    background: rgba(154,168,184,.12) !important; /* Usa hover gris suave como en actividades */
    color: #6b7280 !important; /* Oscurece ligeramente los puntos al pasar el ratón */
} /* Fin hover tres puntos reuniones */

.meeting-editor-panel { /* Panel derecho */
    padding: 20px !important; /* Aire cómodo */
} /* Fin editor */

.meeting-title-input { /* Título editor */
    font-size: 24px !important; /* Título grande pero controlado */
    height: 42px !important; /* Altura controlada */
} /* Fin título editor */

.meeting-category-card-red.meeting-category-active { /* Categoría roja seleccionada */
    border-color: #f4a8b4 !important; /* Usa un borde rojo pastel acorde a la tarjeta */
} /* Fin roja */

.meeting-category-card-orange.meeting-category-active { /* Categoría naranja seleccionada */
    border-color: #f3c27b !important; /* Usa un borde naranja pastel acorde a la tarjeta */
} /* Fin naranja */

.meeting-category-card-green.meeting-category-active { /* Categoría verde seleccionada */
    border-color: #9ed8ba !important; /* Usa un borde verde pastel acorde a la tarjeta */
} /* Fin verde */

.meeting-category-card-purple.meeting-category-active { /* Categoría lila seleccionada */
    border-color: #c8b0ef !important; /* Usa un borde lila pastel acorde a la tarjeta */
} /* Fin lila */

.meeting-category-card-blue.meeting-category-active { /* Categoría azul seleccionada */
    border-color: #a8c7ef !important; /* Usa un borde azul pastel acorde a la tarjeta */
} /* Fin azul */

/* =========================================================
   REUNIONES: CORRECCIÓN DE RECORTE SUPERIOR
========================================================= */

.meetings-sidebar, /* Panel de categorías */
.meetings-list-panel { /* Panel de reuniones */
    overflow: visible !important; /* Evita que se corten las tarjetas al subir ligeramente */
} /* Fin paneles */

#meetingCategoriesList, /* Lista de categorías */
#meetingsList { /* Lista de reuniones */
    padding-top: 4px !important; /* Añade aire arriba para que no se corte la primera tarjeta */
} /* Fin listas */

.meeting-category-active { /* Categoría activa */
    transform: none !important; /* Evita que la tarjeta activa suba y se corte */
} /* Fin categoría activa */

.meeting-card:hover { /* Reunión al pasar el ratón */
    transform: none !important; /* Evita que la tarjeta suba y se corte */
} /* Fin hover reunión */

/* =========================================================
   ACTIVIDADES: MENÚ DE TRES PUNTOS
========================================================= */

.activity-edit-btn, /* Botón antiguo editar */
.activity-delete-btn { /* Botón antiguo eliminar */
    display: none !important; /* Oculta los botones antiguos si siguen renderizados */
} /* Fin ocultar botones antiguos */

.activity-header-cell { /* Cabecera de actividad */
    position: relative !important; /* Permite colocar el menú dentro de la cabecera */
    padding-right: 24px !important; /* Deja espacio para los tres puntos */
} /* Fin cabecera actividad */

.activity-menu-wrap { /* Contenedor del menú */
    position: absolute !important; /* Posiciona el menú respecto a la cabecera */
    top: 50% !important; /* Lo centra verticalmente */
    right: 4px !important; /* Lo coloca a la derecha */
    transform: translateY(-50%) !important; /* Ajusta el centrado vertical */
    z-index: 20 !important; /* Lo coloca por encima de la tabla */
} /* Fin contenedor menú */

.activity-menu-btn { /* Botón de tres puntos verticales */
    width: 22px !important; /* Define ancho pequeño */
    height: 26px !important; /* Define alto cómodo */
    border: none !important; /* Quita borde */
    border-radius: 7px !important; /* Redondea el botón */
    background: transparent !important; /* Fondo invisible */
    color: #9aa8b8 !important; /* Gris sutil */
    font-size: 20px !important; /* Tamaño de puntos */
    font-weight: 900 !important; /* Hace visibles los puntos */
    line-height: 1 !important; /* Evita desajustes verticales */
    cursor: pointer !important; /* Cursor de botón */
} /* Fin botón puntos */

.activity-menu-btn:hover { /* Hover del botón */
    background: rgba(154,168,184,.12) !important; /* Fondo gris suave */
    color: #6b7280 !important; /* Gris algo más visible */
} /* Fin hover botón */

.activity-menu { /* Menú desplegable */
    position: absolute !important; /* Posiciona el desplegable */
    top: 28px !important; /* Lo sitúa debajo del botón */
    right: 0 !important; /* Lo alinea a la derecha */
    min-width: 120px !important; /* Anchura mínima del menú */
    padding: 6px !important; /* Espacio interno */
    border: 1px solid #d5e2f1 !important; /* Borde suave */
    border-radius: 10px !important; /* Bordes redondeados */
    background: #ffffff !important; /* Fondo blanco */
    box-shadow: 0 10px 24px rgba(15,23,42,.12) !important; /* Sombra ligera */
    z-index: 999 !important; /* Lo coloca sobre la tabla */
} /* Fin menú */

.activity-menu button { /* Botones internos del menú */
    width: 100% !important; /* Ocupan todo el ancho */
    height: 32px !important; /* Altura cómoda */
    border: none !important; /* Sin borde */
    border-radius: 7px !important; /* Redondeo interno */
    background: transparent !important; /* Fondo limpio */
    color: #172334 !important; /* Texto oscuro */
    font-size: 12px !important; /* Tamaño compacto */
    font-weight: 800 !important; /* Texto destacado */
    text-align: left !important; /* Texto alineado izquierda */
    cursor: pointer !important; /* Cursor de botón */
} /* Fin botones menú */

.activity-menu button:hover { /* Hover de opciones */
    background: #f4f8fe !important; /* Fondo azul muy claro */
} /* Fin hover opciones */

.activity-menu-danger { /* Opción eliminar */
    color: #b42318 !important; /* Texto rojo discreto */
} /* Fin opción eliminar */

.activity-menu-danger:hover { /* Hover eliminar */
    background: #fff1f1 !important; /* Fondo rojo suave */
} /* Fin hover eliminar */

/* =========================================================
   ACTIVIDADES: MENÚ FLOTANTE SOBRE TABLAS
========================================================= */

.activity-menu { /* Menú desplegable flotante de actividad */
    position: fixed !important; /* Hace que el menú flote por encima de la tabla */
    min-width: 120px !important; /* Mantiene el ancho del menú */
    z-index: 99999 !important; /* Coloca el menú por encima del modal ampliado */
} /* Fin menú flotante */

.expanded-grade-modal .table-wrap { /* Tabla dentro del modal ampliado */
    overflow: auto !important; /* Recupera el scroll interno de la tabla ampliada */
} /* Fin tabla ampliada */

.table-wrap { /* Tabla normal */
    overflow: auto !important; /* Recupera el comportamiento original de scroll */
} /* Fin tabla normal */

/* =========================================================
   ACTIVIDADES: MENÚ FLOTANTE GLOBAL
========================================================= */

.activity-action-menu { /* Menú flotante global de actividad */
    position: fixed !important; /* Flota por encima de tabla normal y ampliada */
    min-width: 130px !important; /* Da anchura suficiente al menú */
    padding: 6px !important; /* Añade aire interior */
    border: 1px solid #d5e2f1 !important; /* Borde suave */
    border-radius: 8px !important; /* Redondea el menú */
    background: #ffffff !important; /* Fondo blanco */
    box-shadow: 0 10px 24px rgba(15,23,42,.14) !important; /* Sombra ligera */
    z-index: 999999 !important; /* Lo pone por encima de cualquier modal */
} /* Fin menú flotante */

.activity-action-menu button { /* Botones internos del menú */
    width: 100% !important; /* Ocupan todo el ancho */
    height: 32px !important; /* Altura cómoda */
    border: none !important; /* Sin borde */
    border-radius: 8px !important; /* Redondeo interno */
    background: transparent !important; /* Fondo limpio */
    color: #172334 !important; /* Texto oscuro */
    font-size: 12px !important; /* Texto compacto */
    font-weight: 500 !important; /* Texto destacado */
    text-align: left !important; /* Texto alineado a la izquierda */
    cursor: pointer !important; /* Cursor de botón */
} /* Fin botones menú */

.activity-action-menu button:hover { /* Hover de opción */
    background: #f4f8fe !important; /* Fondo azul muy suave */
} /* Fin hover opción */

.activity-action-menu-danger { /* Botón eliminar */
    color: #b42318 !important; /* Texto rojo discreto */
} /* Fin botón eliminar */

.activity-action-menu-danger:hover { /* Hover eliminar */
    background: #fff1f1 !important; /* Fondo rojo suave */
} /* Fin hover eliminar */

/* =========================================================
   SEGUIMIENTO: MENÚ DE TRES PUNTOS EN OBJETIVOS Y COMENTARIOS
========================================================= */

.follow-menu-btn { /* Botón de tres puntos en objetivos y comentarios */
    width: 22px !important; /* Iguala la anchura al resto de botones de tres puntos de la app */
    height: 26px !important; /* Iguala la altura al resto de botones de tres puntos de la app */
    display: grid !important; /* Permite centrar los puntos */
    place-items: center !important; /* Centra los puntos dentro del botón */
    border: none !important; /* Quita borde del botón */
    border-radius: 7px !important; /* Redondea suavemente el botón */
    background: transparent !important; /* Mantiene fondo limpio */
    color: #9aa8b8 !important; /* Usa gris sutil */
    font-size: 20px !important; /* Tamaño de los puntos */
    font-weight: 900 !important; /* Iguala el grosor al resto de botones de tres puntos de la app */
    line-height: 1 !important; /* Evita desajustes verticales */
    cursor: pointer !important; /* Muestra cursor de botón */
} /* Fin botón tres puntos seguimiento */

.follow-menu-btn:hover { /* Hover del botón de tres puntos */
    background: rgba(154,168,184,.12) !important; /* Fondo gris muy suave al pasar */
    color: #6b7280 !important; /* Gris algo más visible al pasar */
} /* Fin hover botón seguimiento */

.objective-actions .follow-menu-btn { /* Gana a la regla antigua ".objective-actions button" que forzaba 28x28px */
    width: 22px !important; /* Iguala la anchura al resto de botones de tres puntos de la app */
    height: 26px !important; /* Iguala la altura al resto de botones de tres puntos de la app */
    min-width: 22px !important; /* Evita que la regla antigua vuelva a ensancharlo */
} /* Fin corrección tamaño tres puntos objetivo */

.objective-actions, /* Zona de acciones de objetivo */
.comment-actions { /* Zona de acciones de comentario */
    display: flex !important; /* Mantiene las acciones alineadas */
    align-items: center !important; /* Centra verticalmente el botón */
    justify-content: flex-end !important; /* Alinea el botón a la derecha */
} /* Fin acciones seguimiento */

.comment-edit-btn, /* Botón antiguo editar comentario */
.comment-delete-btn { /* Botón antiguo eliminar comentario */
    display: none !important; /* Oculta botones antiguos si quedara alguno renderizado */
} /* Fin ocultar botones antiguos */

/* =========================================================
   HISTORIAL DE INFORMES - SCROLL
========================================================= */

.report-history-action-menu { /* Menú desplegable específico del historial de informes */
    min-width: 130px; /* Mantiene una anchura cómoda para Abrir y Eliminar */
} /* Fin menú historial informes */

.report-history-actions .follow-menu-btn { /* Botón de tres puntos del historial de informes */
    width: 37px; /* Da el mismo tamaño que tenían los botones anteriores */
    height: 37px; /* Mantiene altura uniforme en cada fila */
    display: flex; /* Permite centrar los tres puntos */
    align-items: center; /* Centra verticalmente los tres puntos */
    justify-content: center; /* Centra horizontalmente los tres puntos */
} /* Fin botón tres puntos historial */

.agenda-detail-readonly { /* Caja de detalle del evento de agenda */
    position: relative; /* Permite colocar el botón de tres puntos dentro de la esquina superior */
} /* Fin caja detalle agenda */

.agenda-detail-menu-btn { /* Botón de tres puntos del detalle de agenda */
    position: absolute; /* Lo coloca en la esquina superior derecha */
    top: 8px; /* Lo acerca ligeramente al borde superior */
    right: 8px; /* Lo acerca ligeramente al borde derecho */
    border: none; /* Elimina el borde visible */
    background: transparent; /* Elimina el fondo */
    color: #8a97ab; /* Usa el mismo gris elegante que otros menús */
    font-size: 22px; /* Mantiene tamaño cómodo */
    font-weight: 700; /* Mantiene presencia sin verse pesado */
    cursor: pointer; /* Muestra cursor interactivo */
    padding: 4px; /* Amplía la zona clicable sin crear recuadro */
    line-height: 1; /* Evita desplazamientos verticales */
} /* Fin botón tres puntos detalle agenda */

.agenda-detail-menu-btn:hover { /* Efecto hover del botón */
    color: #5f6f86; /* Oscurece ligeramente los puntos al pasar el ratón */
} /* Fin hover botón detalle agenda */

.agenda-detail-action-menu { /* Menú desplegable del detalle de agenda */
    min-width: 130px; /* Mantiene ancho cómodo para la opción Edit */
} /* Fin menú detalle agenda */

#btnSaveMeeting { /* Fuerza que SAVE MEETING tenga el mismo aspecto final que SAVE COMMENT */
    margin-top: 0 !important; /* Elimina la separación superior igual que SAVE COMMENT dentro del panel */
    flex-shrink: 0 !important; /* Evita que el botón se comprima */
    width: 100% !important; /* Hace que ocupe todo el ancho disponible */
    min-height: 38px !important; /* Mantiene la misma altura */
    background: #e8f1ff !important; /* Usa el mismo azul visible que SAVE COMMENT en pantalla */
    color: #2f5f9f !important; /* Usa el mismo azul de texto */
    border: 1px solid #a9c3e8 !important; /* Usa el mismo borde azul más marcado */
    border-radius: 8px !important; /* Ajusta el redondeo para igualarlo visualmente */
    font-weight: 900 !important; /* Mantiene el texto destacado */
} /* Fin igualación SAVE MEETING */

#btnSaveMeeting:hover { /* Hover de SAVE MEETING */
    background: #e8f1ff !important; /* Mantiene el mismo fondo al pasar el ratón */
    color: #234f86 !important; /* Oscurece el texto al pasar el ratón */
    border-color: #a9c3e8 !important; /* Mantiene el borde igual */
} /* Fin hover SAVE MEETING */

.pretty-date-picker { /* Campo visual del selector de fecha */
    width: 100%; /* Ocupa todo el ancho del campo */
    height: 37px; /* Igual altura que los inputs */
    padding: 9px 34px 9px 10px; /* Añade espacio interior y zona para icono */
    border: 1px solid var(--border); /* Borde suave */
    border-radius: 8px; /* Redondeo igual que inputs */
    background: white; /* Fondo blanco */
    color: var(--text); /* Texto principal */
    font-size: 13px; /* Tamaño igual que inputs */
    cursor: pointer; /* Cursor de selector */
    position: relative; /* Permite colocar icono */
} /* Fin campo fecha bonito */

.pretty-date-picker::after { /* Icono del calendario */
    content: "▾"; /* Muestra la misma flecha que los selectores bonitos */
    position: absolute; /* Coloca el icono dentro del campo */
    right: 12px; /* Lo separa del borde derecho */
    top: 50%; /* Lo centra verticalmente */
    transform: translateY(-50%); /* Ajusta centrado exacto */
    color: var(--muted); /* Usa gris secundario */
    font-size: 13px; /* Tamaño discreto */
} /* Fin icono fecha */

.pretty-date-menu { /* Menú calendario personalizado */
    position: fixed; /* Flota sobre la app */
    z-index: 20000; /* Queda por encima de modales */
    width: 260px; /* Anchura cómoda */
    padding: 10px; /* Espacio interno */
    border: 1px solid #c9d8ee; /* Borde azul suave */
    border-radius: 8px; /* Bordes modernos */
    background: white; /* Fondo blanco */
    box-shadow: 0 18px 35px rgba(15, 23, 42, .16); /* Sombra moderna */
} /* Fin menú calendario */

.pretty-date-header { /* Cabecera del calendario */
    display: flex; /* Coloca flechas y mes en línea */
    align-items: center; /* Centra verticalmente */
    justify-content: space-between; /* Separa flechas */
    margin-bottom: 10px; /* Separa de la parrilla */
} /* Fin cabecera calendario */

.pretty-date-header strong { /* Texto mes y año */
    color: #172334; /* Color principal */
    font-size: 13px; /* Tamaño compacto */
    font-weight: 700; /* Texto destacado */
    text-transform: lowercase; /* Mantiene estilo natural del mes */
} /* Fin mes año */

.pretty-date-header button { /* Flechas de mes */
    width: 30px; /* Tamaño cuadrado */
    height: 30px; /* Tamaño cuadrado */
    border: none; /* Sin borde */
    border-radius: 8px; /* Redondeo suave */
    background: #f4f8fe; /* Fondo azul claro */
    color: #2f5f9f; /* Azul app */
    font-size: 20px; /* Flecha visible */
    cursor: pointer; /* Cursor de botón */
} /* Fin flechas */

.pretty-date-weekdays { /* Fila de días de semana */
    display: grid; /* Reparte días */
    grid-template-columns: repeat(7, 1fr); /* Siete columnas */
    margin-bottom: 6px; /* Separa de los números */
} /* Fin días semana */

.pretty-date-weekdays span { /* Día semana */
    text-align: center; /* Centra texto */
    color: var(--muted); /* Gris secundario */
    font-size: 11px; /* Tamaño pequeño */
    font-weight: 600; /* Visible */
} /* Fin día semana */

.pretty-date-grid { /* Parrilla de días */
    display: grid; /* Organiza calendario */
    grid-template-columns: repeat(7, 1fr); /* Siete columnas */
    gap: 4px; /* Separación entre días */
} /* Fin parrilla */

.pretty-date-grid button,
.pretty-date-grid span { /* Celdas del calendario */
    height: 30px; /* Altura de día */
    border-radius: 8px; /* Redondeo */
} /* Fin celdas */

.pretty-date-grid button { /* Botón día */
    border: none; /* Sin borde por defecto */
    background: transparent; /* Fondo limpio */
    color: #172334; /* Texto principal */
    font-size: 12px; /* Tamaño compacto */
    font-weight: 500; /* Peso medio */
    cursor: pointer; /* Cursor */
} /* Fin día */

.pretty-date-grid button:hover { /* Hover día */
    background: #eef5ff; /* Fondo azul suave */
    color: #234f86; /* Azul hover */
} /* Fin hover día */

.pretty-date-grid .pretty-date-active { /* Día seleccionado */
    background: #dfeafc !important; /* Fondo azul seleccionado */
    color: #174f9a !important; /* Texto azul seleccionado */
    font-weight: 600 !important; /* Destaca día activo */
    box-shadow: inset 0 0 0 1px #a9c3e8; /* Borde interno */
} /* Fin activo */

.pretty-date-footer { /* Pie calendario */
    display: flex; /* Alinea botón hoy */
    justify-content: flex-end; /* Lleva Hoy a la derecha */
    margin-top: 10px; /* Separa del calendario */
} /* Fin pie */

.pretty-date-footer button { /* Botón Hoy */
    border: none; /* Sin borde */
    background: transparent; /* Fondo limpio */
    color: #2f5f9f; /* Azul app */
    font-size: 12px; /* Texto compacto */
    font-weight: 600; /* Destaca */
    cursor: pointer; /* Cursor */
} /* Fin botón hoy */

.pretty-time-picker {
    width: 100%;
    height: 37px; /* misma altura que input/select */
    display: flex; /* centra verticalmente */
    align-items: center;
    padding: 0 34px 0 10px; /* deja espacio para la flecha */
    border: 1px solid var(--border);
    border-radius: 10px; /* igual que los inputs */
    background: white;
    font-size: 13px; /* mismo tamaño que input/select */
    font-family: inherit;
    color: var(--text);
    cursor: pointer;
    position: relative;
    line-height: 1;
}

.pretty-time-picker::after {
    content: "▾";
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 10px;
    color: var(--muted);
    pointer-events: none;
}

.pretty-time-menu { /* Menú de horas */
    position: fixed; /* Flotante */
    z-index: 20000; /* Encima de todo */
    width: 120px; /* Anchura */
    max-height: 280px; /* Altura máxima */
    overflow-y: auto; /* Scroll */
    background: white; /* Fondo */
    border: 1px solid #c9d8ee; /* Borde azul */
    border-radius: 8px; /* Igual calendario */
    box-shadow: 0 18px 35px rgba(15,23,42,.16); /* Sombra */
    padding: 4px; /* Espacio */
} /* Fin menú */

.pretty-time-menu button { /* Opción hora */
    width: 100%; /* Todo el ancho */
    height: 34px; /* Altura */
    border: none; /* Sin borde */
    border-radius: 8px; /* Redondeo */
    background: transparent; /* Fondo limpio */
    cursor: pointer; /* Mano */
    font-size: 13px; /* Tamaño */
    font-weight: 500; /* Sin negrita */
} /* Fin opción */

.pretty-time-menu button:hover { /* Hover */
    background: #eef5ff; /* Azul suave */
    color: #234f86; /* Azul texto */
} /* Fin hover */

.pretty-select-button, /* Selector bonito de categoría, clase, trimestre y ordenar */
.pretty-date-picker, /* Selector visual de fecha */
.pretty-time-picker { /* Selector visual de hora */
    height: 38px !important; /* Unifica la altura de todos los selectores con inputs y botones (antes 37px, 1px menos) */
    border-radius: 8px !important; /* Unifica el border radius a 8px */
    font-size: 13px !important; /* Unifica el tamaño del texto */
    font-weight: 500 !important; /* Quita exceso de negrita */
    font-family: inherit !important; /* Usa la fuente general de la app */
    color: var(--text) !important; /* Usa el color principal de texto */
    border: 1px solid var(--border) !important; /* Usa el mismo borde en todos */
    background: white !important; /* Mantiene fondo blanco uniforme */
} /* Fin unificación de selectores */

.pretty-select-button { /* Botón visible de los selectores bonitos */
    padding: 0 34px 0 10px !important; /* Deja espacio derecho para la flecha */
    position: relative !important; /* Permite posicionar la flecha igual que fecha y hora */
} /* Fin botón selector bonito */

.pretty-select-button span:first-child { /* Texto seleccionado dentro del selector bonito */
    font-size: 13px !important; /* Igual tamaño que fecha y hora */
    font-weight: 500 !important; /* Igual peso que fecha y hora */
} /* Fin texto selector bonito */

.pretty-select-arrow { /* Flecha de los selectores bonitos */
    position: absolute !important; /* Coloca la flecha en la misma posición que las demás */
    right: 12px !important; /* Igual separación derecha */
    top: 50% !important; /* Centra verticalmente */
    transform: translateY(-50%) !important; /* Ajusta centrado exacto */
    font-size: 10px !important; /* Igual tamaño que la flecha de hora */
    color: var(--muted) !important; /* Igual color gris que fecha y hora */
    line-height: 1 !important; /* Evita desajustes verticales */
    pointer-events: none !important; /* Evita interferir con el clic del selector */
} /* Fin flecha selector bonito */

.pretty-date-picker::after, /* Flecha del selector de fecha */
.pretty-time-picker::after { /* Flecha del selector de hora */
    content: "▾" !important; /* Usa exactamente la misma flecha en todos */
    right: 12px !important; /* Igual separación derecha */
    font-size: 10px !important; /* Igual tamaño en todos */
    color: var(--muted) !important; /* Igual color gris en todos */
    line-height: 1 !important; /* Evita desajustes verticales */
} /* Fin flechas fecha y hora */

.pretty-select-menu, /* Menú desplegable de selectores */
.pretty-date-menu, /* Menú desplegable de calendario */
.pretty-time-menu { /* Menú desplegable de hora */
    border-radius: 8px !important; /* Unifica el radio de todos los menús */
} /* Fin menús desplegables */

/* =========================================================
   UNIFICACIÓN MENÚS TRES PUNTOS
========================================================= */

.activity-menu-btn, /* Tres puntos de actividades */
.meeting-menu-btn, /* Tres puntos de reuniones */
.report-history-menu-btn, /* Tres puntos historial informes */
.agenda-event-menu-btn, /* Tres puntos agenda */
.event-details-menu-btn, /* Tres puntos detalle actividad */
.card-menu-btn, /* Menús genéricos */
.more-menu-btn { /* Menús genéricos futuros */

    font-size: 18px !important; /* Mantiene tamaño visible */
    font-weight: 500 !important; /* Reduce la negrita */
    color: #8fa1ba !important; /* Gris azulado suave */
    line-height: 1 !important; /* Centrado visual */
} /* Fin unificación tres puntos */

/* Algunos menús usan directamente el carácter ⋮ */
.activity-menu-btn:hover,
.meeting-menu-btn:hover,
.report-history-menu-btn:hover,
.agenda-event-menu-btn:hover,
.event-details-menu-btn:hover,
.card-menu-btn:hover,
.more-menu-btn:hover {

    color: #7f94b0 !important; /* Gris ligeramente más oscuro al pasar el ratón */
} /* Fin hover */

/* Seguridad: si algún botón usa un span interno */
.activity-menu-btn span,
.meeting-menu-btn span,
.report-history-menu-btn span,
.agenda-event-menu-btn span,
.event-details-menu-btn span,
.card-menu-btn span,
.more-menu-btn span {

    font-weight: 500 !important; /* Elimina exceso de grosor */
} /* Fin corrección spans */

/* =========================================================
   AJUSTE PARTICIPANTS REUNIONES
========================================================= */

#meetingParticipantsInput { /* Campo participantes dentro del editor de reuniones */
    height: 38px !important; /* Igual altura que fecha y hora */
    min-height: 38px !important; /* Evita que crezca */
    padding: 0 10px !important; /* Centra verticalmente el texto */
    font-size: 13px !important; /* Igual tamaño que los selectores */
    font-weight: 500 !important; /* Menos negrita */
    line-height: 38px !important; /* Centrado vertical perfecto */
} /* Fin campo participantes */

#meetingParticipantsInput::placeholder { /* Texto placeholder Participants */
    font-weight: 500 !important; /* Reduce negrita */
    color: var(--muted) !important; /* Gris elegante */
} /* Fin placeholder participantes */

.meeting-participants-title,
.participants-title,
.meeting-details-participants-title { /* Posibles títulos de participantes */
    font-weight: 600 !important; /* Menos agresivo */
} /* Fin títulos participantes */

.participants-section-title { /* Título Participants */
    font-size: 15px !important; /* Mantiene tamaño */
    font-weight: 400 !important; /* Menos negrita */
    color: var(--text) !important; /* Color principal */
} /* Fin título Participants */

.meeting-editor label { /* Etiquetas del editor de reuniones */
    font-weight: 600 !important; /* Reduce la negrita del título Participants */
} /* Fin etiquetas editor reuniones */

/* =========================================================
   REPORT HISTORY
========================================================= */

.report-history-item { /* Tarjeta individual del historial de informes */
    border-radius: 8px !important; /* Unifica el radio con el resto de la aplicación */
    overflow: hidden !important; /* Evita que el contenido sobresalga de las esquinas */
} /* Fin tarjeta historial */

.report-history-main { /* Zona izquierda de información */
    border-radius: 8px !important; /* Mantiene consistencia visual */
} /* Fin información informe */

.report-history-actions { /* Zona derecha de acciones */
    border-radius: 8px !important; /* Mantiene consistencia visual */
} /* Fin acciones informe */

/* =========================================================
   REUNIONES: REDISEÑO MASTER DETAIL MODERNO
========================================================= */

.meetings-layout { /* Layout principal de reuniones */
    grid-template-columns: 270px 360px minmax(0, 1fr) !important; /* Hace categorías y reuniones más compactas y da más espacio al editor */
    gap: 10px !important; /* Mantiene separación limpia entre columnas */
} /* Fin layout reuniones */

.meetings-card { /* Tarjeta contenedora de reuniones */
    background: #ffffff !important; /* Fondo blanco limpio */
    border-color: #e9edf4 !important; /* Borde más suave y moderno */
    border-radius: 12px !important; /* Redondeo más contenido */
} /* Fin tarjeta reuniones */

.meetings-sidebar,
.meetings-list-panel,
.meetings-editor-panel { /* Paneles internos de reuniones */
    background: #ffffff !important; /* Mantiene fondo limpio */
    border-color: #e9edf4 !important; /* Suaviza los bordes internos */
    border-radius: 8px !important; /* Unifica radio con el resto de selectores */
    padding: 12px !important; /* Reduce aire interior para ganar espacio */
} /* Fin paneles reuniones */

.meetings-title-row h3 { /* Títulos CATEGORIES y MEETINGS */
    font-size: 13px !important; /* Hace los títulos más discretos */
    font-weight: 700 !important; /* Reduce negrita sin perder jerarquía */
    letter-spacing: .01em !important; /* Mantiene aspecto ordenado */
} /* Fin títulos reuniones */

.meetings-list { /* Lista de reuniones */
    gap: 8px !important; /* Reduce separación vertical entre tarjetas */
} /* Fin lista reuniones */

.meeting-category-card { /* Tarjeta de categoría */
    min-height: 54px !important; /* Hace la categoría más compacta */
    padding: 9px 10px !important; /* Reduce relleno interior */
    border-radius: 8px !important; /* Unifica redondeo */
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04) !important; /* Añade profundidad muy suave */
} /* Fin categoría */

.meeting-category-name { /* Nombre de categoría */
    font-size: 13px !important; /* Mantiene texto legible */
    font-weight: 700 !important; /* Reduce un poco la fuerza visual */
} /* Fin nombre categoría */

.meeting-category-count { /* Contador de categoría */
    width: 28px !important; /* Mantiene tamaño compacto */
    height: 28px !important; /* Mantiene tamaño compacto */
    border-radius: 8px !important; /* Unifica redondeo */
    font-weight: 700 !important; /* Reduce negrita */
} /* Fin contador categoría */

.meeting-card { /* Tarjeta individual de reunión */
    min-height: 74px !important; /* Hace las reuniones bastante más compactas */
    grid-template-columns: 54px minmax(0, 1fr) auto 24px !important; /* Fecha compacta, contenido, etiqueta y puntos */
    gap: 10px !important; /* Reduce separación interna */
    padding: 10px 12px !important; /* Reduce altura visual */
    border-radius: 8px !important; /* Unifica redondeo */
    box-shadow: 0 1px 2px rgba(15, 23, 42, .04) !important; /* Sombra muy suave estilo tarjeta moderna */
    transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease !important; /* Anima hover y selección */
} /* Fin tarjeta reunión */

.meeting-card:hover { /* Reunión al pasar el ratón */
    transform: none !important; /* No mueve la tarjeta */
    box-shadow: none !important; /* No añade sombra */
}

.meeting-card-active { /* Reunión seleccionada */
    transform: none !important; /* No desplaza la tarjeta */
    box-shadow: none !important; /* No usa sombra para destacar */
}

.meeting-card-date { /* Caja de fecha dentro de reunión */
    width: 50px !important; /* Hace la fecha más compacta */
    min-height: 50px !important; /* Reduce altura del bloque fecha */
    border-radius: 8px !important; /* Unifica redondeo */
} /* Fin fecha reunión */

.meeting-card-date strong { /* Día de la reunión */
    font-size: 21px !important; /* Reduce tamaño del número */
    font-weight: 700 !important; /* Quita exceso de negrita */
    color: #26364d !important; /* Gris azulado elegante */
} /* Fin día reunión */

.meeting-card-date small { /* Mes de la reunión */
    font-size: 10px !important; /* Reduce mes */
    font-weight: 600 !important; /* Mantiene lectura sin verse pesado */
    color: #607086 !important; /* Gris secundario */
} /* Fin mes reunión */

.meeting-card-main { /* Zona central de la tarjeta */
    min-width: 0 !important; /* Permite cortar texto largo correctamente */
    gap: 2px !important; /* Compacta título y metadatos */
} /* Fin zona central reunión */

.meeting-card-main strong { /* Título de reunión */
    font-size: 13px !important; /* Tamaño compacto */
    font-weight: 700 !important; /* Menos negrita */
    color: #172334 !important; /* Texto principal */
    overflow: hidden !important; /* Oculta exceso de texto */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos */
    white-space: nowrap !important; /* Evita salto de línea */
} /* Fin título reunión */

.meeting-card-meta { /* Hora y participantes */
    font-size: 11px !important; /* Texto secundario más discreto */
    font-weight: 500 !important; /* Quita negrita */
    color: #607086 !important; /* Gris secundario */
    line-height: 1.25 !important; /* Compacta líneas */
    overflow: hidden !important; /* Oculta exceso */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos */
    white-space: nowrap !important; /* Mantiene una línea */
} /* Fin metadatos reunión */

.meeting-card-badge { /* Etiqueta de categoría en reunión */
    border-radius: 8px !important; /* Unifica redondeo */
    padding: 5px 8px !important; /* Hace el chip más fino */
    font-size: 9px !important; /* Reduce texto del chip */
    font-weight: 700 !important; /* Reduce peso */
    max-width: 78px !important; /* Evita que robe espacio al título */
    overflow: hidden !important; /* Oculta exceso */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos */
    white-space: nowrap !important; /* Evita salto */
} /* Fin badge reunión */

.meeting-card-more { /* Tres puntos de categorías y reuniones */
    width: 22px !important; /* Tamaño más discreto */
    height: 26px !important; /* Altura cómoda */
    font-size: 18px !important; /* Reduce tamaño visual */
    font-weight: 400 !important; /* Quita negrita */
    color: #8fa1ba !important; /* Gris azulado suave */
    border-radius: 8px !important; /* Unifica radio */
} /* Fin tres puntos reuniones */

.meeting-card-more:hover { /* Hover tres puntos */
    background: rgba(143, 161, 186, .12) !important; /* Hover gris suave */
    color: #6f829d !important; /* Oscurece ligeramente */
} /* Fin hover tres puntos */

.meeting-editor-panel { /* Panel del editor */
    padding: 16px !important; /* Da aire al editor sin hacerlo pesado */
} /* Fin panel editor */

.meeting-editor-box { /* Caja general del editor */
    border-color: #e9edf4 !important; /* Suaviza borde del editor */
    border-radius: 8px !important; /* Unifica redondeo */
    background: #ffffff !important; /* Fondo limpio */
} /* Fin caja editor */

.meeting-title-input { /* Título de la reunión abierta */
    height: 38px !important; /* Reduce altura del campo título */
    font-size: 22px !important; /* Título grande pero más elegante */
    font-weight: 700 !important; /* Quita negrita excesiva */
    color: #172334 !important; /* Texto principal */
} /* Fin título editor */

.meeting-editor-fields { /* Fila fecha, hora y participantes */
    grid-template-columns: 142px 142px minmax(0, 1fr) !important; /* Fecha y hora más compactas */
    gap: 10px !important; /* Reduce separación entre campos */
    margin-top: 10px !important; /* Acerca campos al título */
    margin-bottom: 16px !important; /* Reduce separación antes del editor */
} /* Fin campos editor */

#prettyMeetingDateInput,
#prettyMeetingTimeInput,
#meetingParticipantsInput { /* Campos superiores del editor */
    height: 38px !important; /* Igual altura que selectores modernos */
    min-height: 38px !important; /* Evita crecimiento accidental */
    border-radius: 8px !important; /* Unifica redondeo */
    font-size: 13px !important; /* Texto igual que selectores */
    font-weight: 500 !important; /* Quita negrita */
} /* Fin campos superiores */

#meetingParticipantsInput { /* Campo participantes */
    padding: 0 10px !important; /* Centra texto verticalmente */
    line-height: 38px !important; /* Centrado vertical */
} /* Fin participantes */

#meetingParticipantsInput::placeholder { /* Placeholder participantes */
    font-weight: 500 !important; /* Placeholder más fino */
    color: #607086 !important; /* Gris secundario */
} /* Fin placeholder participantes */

.tox-tinymce { /* Editor TinyMCE */
    border-radius: 8px !important; /* Unifica redondeo */
    border-color: #e3eaf4 !important; /* Borde más suave */
    box-shadow: inset 0 1px 0 rgba(15, 23, 42, .02) !important; /* Profundidad interna mínima */
} /* Fin TinyMCE */

.tox .tox-toolbar,
.tox .tox-toolbar__primary,
.tox .tox-edit-area__iframe { /* Partes internas TinyMCE */
    background: #ffffff !important; /* Fondo limpio */
} /* Fin partes TinyMCE */

#btnSaveMeeting { /* Botón guardar reunión */
    border-radius: 8px !important; /* Unifica redondeo */
    background: #e8f1ff !important; /* Mantiene botón principal suave */
    border-color: #a9c3e8 !important; /* Borde azul suave */
    font-weight: 700 !important; /* Reduce peso */
} /* Fin guardar reunión */

.meeting-card-active,
.meeting-category-card.active {
    border-width: 3px !important; /* Hace visible la selección */
    filter: saturate(1.08) !important; /* Intensifica ligeramente el color original */
}

/* =========================================================
   MODAL NUEVA REUNIÓN: SEPARADOR
========================================================= */

.new-meeting-separator { /* Línea separadora del modal de nueva reunión */
    width: 100% !important; /* Hace que la línea ocupe todo el ancho disponible */
    height: 1px !important; /* Define una línea fina */
    background: #e9edf4 !important; /* Usa un gris suave acorde a la app */
    margin: 18px 0 18px 0 !important; /* Separa la línea de los campos y del botón */
} /* Fin separador nueva reunión */

.new-meeting-actions { /* Zona inferior del modal de nueva reunión */
    margin-top: 2 !important; /* Evita doble separación porque ya existe la línea */
} /* Fin acciones nueva reunión */

/* =========================================================
   MODAL NUEVA REUNIÓN: SEPARADOR ENTRE BLOQUES
========================================================= */

.new-meeting-fields-separator { /* Línea entre Título/Categoría y Fecha/Hora */
    grid-column: 1 / -1; /* Hace que ocupe las dos columnas */
    height: 1px; /* Grosor */
    background: #e9edf4; /* Gris suave */
    margin: 12px 0; /* Misma separación arriba y abajo */
}

/* =========================================================
   MODAL AGENDA: SEPARADORES ENTRE BLOQUES
========================================================= */

.agenda-modal-separator { /* Separador visual agenda */
    height: 0 !important; /* Elimina altura ocupada por el separador */
    margin: 0 !important; /* Elimina márgenes verticales */
    padding: 0 !important; /* Elimina relleno */
    border: none !important; /* Elimina cualquier línea visible */
} /* Fin separador */

#agendaEventTitle, /* Campo nombre de la actividad */
#agendaEventDescription, /* Campo descripción */
#agendaEventLinks { /* Campo enlaces */
    margin-top: -2px !important; /* Separa el título del campo igual en todos los bloques */
} /* Fin separación título-campo agenda */

.agenda-color-options { /* Fila de colores */
    margin-top: 2px !important; /* Separa COLOR de los botones igual que los inputs */
    margin-bottom: 0px !important; /* Evita espacio extra debajo de los colores */
} /* Fin separación colores agenda */

.agenda-modal-separator + .field.field-top { /* Bloque que viene justo después de una línea */
    margin-top: 0 !important; /* Evita doble margen después del separador */
} /* Fin corrección después de separador */

/* =========================================================
   MODAL AÑADIR ALUMNADO: REDISEÑO SUAVE
========================================================= */

.bulk-students-section-title { /* Título de sección dentro del modal de alumnado */
    font-size: 13px !important; /* Tamaño discreto */
    font-weight: 700 !important; /* Menos negrita que un título principal */
    color: #172334 !important; /* Texto principal */
    margin: 0 0 10px 0 !important; /* Separa el título de la tabla */
} /* Fin título sección alumnado */

.bulk-students-separator { /* Separador entre tabla e importador */
    width: 100% !important; /* Ocupa todo el ancho */
    height: 1px !important; /* Línea fina */
    background: #e9edf4 !important; /* Gris suave */
    margin: 16px 0 14px 0 !important; /* Espaciado equilibrado */
} /* Fin separador alumnado */

.student-import-title { /* Título interno del bloque de importación */
    font-size: 13px !important; /* Tamaño compacto */
    font-weight: 600 !important; /* Reduce negrita */
    color: #172334 !important; /* Texto principal */
    margin-bottom: 6px !important; /* Separa del texto de ayuda */
} /* Fin título importación */

.student-import-help { /* Texto de ayuda del importador */
    font-size: 12px !important; /* Texto auxiliar */
    font-weight: 400 !important; /* Quita negrita */
    color: #607086 !important; /* Gris secundario */
    line-height: 1.35 !important; /* Mejora lectura */
    margin-bottom: 10px !important; /* Separa del textarea */
} /* Fin ayuda importación */

.student-import-textarea { /* Textarea para pegar alumnado */
    min-height: 82px !important; /* Altura cómoda */
    max-height: 82px !important; /* Mantiene altura estable */
    border-radius: 8px !important; /* Unifica redondeo */
    border-color: #dbe5f2 !important; /* Borde suave */
    background: #ffffff !important; /* Fondo blanco */
    font-weight: 500 !important; /* Texto menos pesado */
} /* Fin textarea importación */

.student-import-btn { /* Botón importar alumnado */
    width: 100% !important; /* Ocupa todo el ancho */
    min-height: 38px !important; /* Altura cómoda */
    border-radius: 8px !important; /* Unifica redondeo */
    background: #e8f1ff !important; /* Fondo azul suave */
    border: 1px solid #a9c3e8 !important; /* Borde azul suave */
    color: #2f5f9f !important; /* Texto azul */
    font-weight: 700 !important; /* Reduce negrita */
} /* Fin botón importar alumnado */

.bulk-student-condition::placeholder { /* Placeholder condición especial */
    color: #a8b4c4 !important; /* Placeholder más suave */
    font-weight: 400 !important; /* Quita negrita */
} /* Fin placeholder condición */

.student-import-mapping { /* Paso de asignación de columnas al importar alumnado */
    display: flex; /* Apila la introducción, las filas y los botones */
    flex-direction: column; /* Uno debajo de otro */
    gap: 10px; /* Separación entre bloques */
} /* Fin paso de asignación */

.student-import-mapping-intro { /* Texto que explica cuántas columnas se han detectado */
    font-size: 12px; /* Texto auxiliar, igual que la ayuda de importación */
    font-weight: 600; /* Algo de peso para que se note el aviso */
    color: #172334; /* Texto principal */
} /* Fin introducción de asignación */

.student-import-mapping-row { /* Fila con el número de columna y su selector de rol */
    display: flex; /* Alinea la etiqueta y el selector */
    align-items: center; /* Centra verticalmente */
    justify-content: space-between; /* Etiqueta a la izquierda, selector a la derecha */
    gap: 10px; /* Separación entre ambos */
} /* Fin fila de asignación */

.student-import-mapping-label { /* Número de columna detectada, ej. "Columna 1" */
    font-size: 13px; /* Tamaño legible */
    font-weight: 600; /* Algo de peso */
    color: #172334; /* Texto principal */
    flex-shrink: 0; /* No se encoge si el selector es ancho */
} /* Fin etiqueta de columna */

.student-import-mapping-row .pretty-select { /* Selector visual de rol para cada columna detectada */
    flex: 1; /* Ocupa el resto del ancho disponible */
    max-width: 220px; /* No se estira más de lo necesario */
} /* Fin selector de rol */

.student-import-mapping-row .pretty-select-button { /* La regla general ".pretty-select-button" lo dejaba en gris sin borde; debe quedar transparente (blanco) con el borde visible, como un campo activo normal */
    background: transparent !important;
    border: 1px solid var(--border) !important;
}

.student-import-mapping-row .pretty-select-button:hover { /* Mismo comportamiento que el resto de selectores bonitos de la app (Recursos, Nova reunió...) al pasar el ratón: fondo blanco y borde azulado #a9c3e8. Se fija el borde completo, no solo el color, para ganarle a la regla general ".pretty-select-button:hover" que pone "border: none" con la misma especificidad. */
    background: #ffffff !important;
    border: 1px solid #a9c3e8 !important;
}

.student-import-mapping-actions { /* Botones Cancel·lar / Confirmar del paso de asignación */
    display: flex; /* Coloca los botones en fila */
    gap: 10px; /* Separación entre botones */
    justify-content: flex-end; /* Alinea a la derecha, igual que el resto de acciones del modal */
} /* Fin botones de asignación */

/* =========================================================
   X DE CERRAR MODALES EN AZUL
========================================================= */

#modalClose, /* X principal para cerrar ventanas */
.sub-modal-card .modal-header button { /* X de subventanas informativas */
    background: transparent !important; /* Mantiene la X sin fondo */
    background-color: transparent !important; /* Refuerza que no tenga fondo */
    border: 1px solid #c9d8ee !important; /* Usa borde azul suave */
    color: #2f5f9f !important; /* Cambia la X a azul */
    border-radius: 8px !important; /* Mantiene el mismo redondeo */
    box-shadow: none !important; /* Evita sombras */
    transform: none !important; /* Evita movimientos */
} /* Fin X cerrar modales azul */

#modalClose:hover, /* Hover de la X principal */
.sub-modal-card .modal-header button:hover { /* Hover de la X de subventanas */
    background: #eef5ff !important; /* Fondo azul muy suave al pasar el ratón */
    background-color: #eef5ff !important; /* Refuerza el fondo azul suave */
    border-color: #a9c3e8 !important; /* Borde azul algo más marcado */
    color: #234f86 !important; /* Azul más intenso en hover */
    box-shadow: none !important; /* Mantiene limpio el hover */
    transform: none !important; /* Evita movimientos */
} /* Fin hover X cerrar modo noche */

#modalClose, /* Botón X principal de cerrar modal */
.sub-modal-card .modal-header button { /* Botón X de cerrar subventanas */
    display: flex !important; /* Centra el carácter × con flexbox, igual que los botones rojos de eliminar. */
    align-items: center !important; /* Centra verticalmente. */
    justify-content: center !important; /* Centra horizontalmente. */
    width: 34px !important; /* Fija el tamaño del botón sin depender del encogido de flexbox. */
    height: 34px !important; /* Fija el tamaño del botón sin depender del encogido de flexbox. */
    flex-shrink: 0 !important; /* Evita que el botón se encoja dentro de la cabecera flex del modal. */
    padding: 0 !important; /* Quita cualquier padding que pudiera descuadrar el centrado. */
    border-radius: 8px !important; /* Mismo redondeo que el resto de botones de la app. */
    font-size: 20px !important; /* Mismo tamaño de X que los botones rojos de eliminar. */
    font-weight: 900 !important; /* Misma X gruesa que los botones rojos de eliminar. */
    line-height: 1 !important; /* Evita que la línea de texto desplace nada. */
} /* Fin botón X de cerrar */

/* =========================================================
   SEGUIMIENTO ALUMNO: SECCIONES PLEGABLES
========================================================= */

.collapsible-follow-section { /* Sección plegable del seguimiento */
    border-top: 1px solid #e9edf4 !important; /* Separa visualmente cada bloque */
    padding-top: 12px !important; /* Da aire entre la línea y el título */
} /* Fin sección plegable */

.collapsible-section-header { /* Cabecera de sección plegable */
    cursor: pointer !important; /* Indica que la cabecera es interactiva */
} /* Fin cabecera plegable */

.collapsible-section-title { /* Botón que contiene flecha y título */
    display: flex !important; /* Coloca flecha y título en línea */
    align-items: center !important; /* Centra verticalmente flecha y texto */
    gap: 2px !important; /* Separa flecha y título */
    border: none !important; /* Quita borde de botón */
    background: transparent !important; /* Quita fondo de botón */
    padding: 0 !important; /* Evita desplazamientos */
    margin: 0 !important; /* Evita márgenes raros */
    color: var(--text) !important; /* Mantiene color principal */
    cursor: pointer !important; /* Cursor de interacción */
    font-family: inherit !important; /* Usa la fuente de la app */
} /* Fin botón título */

.collapsible-section-title h3 { /* Título dentro del botón plegable */
    margin: 0 !important; /* Quita margen por defecto */
    font-size: 14px !important; /* Mantiene tamaño de subtítulo */
    font-weight: 700 !important; /* Mantiene jerarquía visual */
    text-transform: uppercase !important; /* Conserva estilo actual */
    letter-spacing: .01em !important; /* Conserva espaciado */
} /* Fin título plegable */

.collapsible-section-arrow { /* Flecha de abrir/cerrar */
    width: 14px !important; /* Reserva ancho fijo */
    color: #8fa1ba !important; /* Gris azulado suave */
    font-size: 12px !important; /* Tamaño discreto */
    font-weight: 400 !important; /* Visible sin ser pesado */
    line-height: 1 !important; /* Evita descentrado vertical */
} /* Fin flecha */

.collapsible-section-content { /* Contenido que se pliega */
    overflow: hidden !important; /* Oculta contenido al cerrar */
    transition: opacity .15s ease !important; /* Suaviza aparición */
} /* Fin contenido plegable */

.student-follow-section-collapsed .collapsible-section-content { /* Contenido cuando la sección está cerrada */
    display: none !important; /* Oculta completamente el contenido */
} /* Fin contenido cerrado */

.student-follow-section-collapsed { /* Sección cerrada */
    flex: 0 0 auto !important; /* Evita que ocupe espacio extra */
    min-height: 0 !important; /* Permite compactar la sección */
} /* Fin sección cerrada */

.student-history-section.student-follow-section-collapsed { /* Historial cerrado */
    flex: 0 0 auto !important; /* Evita que el historial cerrado robe altura */
} /* Fin historial cerrado */

.student-chart-section.student-follow-section-collapsed,
.student-objectives-section.student-follow-section-collapsed { /* Gráfico u objetivos cerrados */
    flex: 0 0 auto !important; /* Compacta esas secciones al cerrarlas */
} /* Fin secciones cerradas */

.collapsible-section-title:hover .collapsible-section-arrow,
.collapsible-section-title:hover h3 { /* Hover del título plegable */
    color: #2f5f9f !important; /* Azul suave al pasar el ratón */
} /* Fin hover sección */

/* =========================================================
   FUENTE GLOBAL TAMBIÉN EN BOTONES Y CONTROLES
========================================================= */

button, /* Todos los botones */
input, /* Todos los inputs */
select, /* Selectores nativos */
textarea, /* Áreas de texto */
.pretty-select-button, /* Selectores bonitos */
.pretty-date-picker, /* Selector bonito de fecha */
.pretty-time-picker, /* Selector bonito de hora */
.tox, /* TinyMCE */
.tox * { /* Elementos internos de TinyMCE */
    font-family: var(--app-font) !important; /* Fuerza la fuente nueva en controles */
} /* Fin fuente global controles */

/* =========================================================
   AJUSTE GLOBAL PARA QUICKSAND
========================================================= */

body { /* Texto general de la aplicación */
    font-weight: 500 !important; /* Hace el texto ligeramente más sólido */
} /* Fin texto general */

select, /* Selectores nativos */
input, /* Inputs */
textarea, /* Áreas de texto */
.pretty-select, /* Selectores personalizados */
.pretty-select-button, /* Botón visible de selectores */
.student-dropdown-button, /* Selector de alumnado */
#selectedStudentName { /* Nombre del alumno seleccionado */
    font-weight: 700 !important; /* Da más presencia a los valores seleccionados */
} /* Fin controles */

button, /* Todos los botones */
.btn, /* Botones principales */
.icon-btn, /* Botones de iconos */
.btn-report, /* Botones de informes */
.btn-report-settings, /* Botón configuración informe */
.app-module-tab { /* Pestañas principales */
    font-weight: 800 !important; /* Hace los botones más legibles */
} /* Fin botones */

.card-header h2, /* Títulos principales de tarjetas */
.section-title-row h3, /* Títulos de secciones */
.modal-title, /* Títulos de ventanas */
#modalTitle { /* Título principal de modal */
    font-weight: 800 !important; /* Quicksand funciona muy bien con 700 */
} /* Fin títulos secundarios */

.brand-header h1, /* CUADERN DOCENT */
.hero h1, /* Título principal */
.brand-text h1 { /* Compatibilidad */
    font-weight: 900 !important; /* Mantiene fuerza visual en la cabecera */
    letter-spacing: 0.02em !important; /* Da un aspecto más premium */
} /* Fin título principal */

.small-muted, /* Textos auxiliares */
.brand-subtitle, /* Subtítulo de cabecera */
.field label { /* Etiquetas de formularios */
    font-weight: 700 !important; /* Evita que se vean demasiado finos */
} /* Fin textos auxiliares */

/* =========================================================
   QUICKSAND: FORZAR FUENTE EN CONTROLES QUE FALTABAN
========================================================= */

* { /* Todos los elementos de la app */
    font-family: var(--app-font) !important; /* Fuerza Quicksand en cualquier control que no lo haya heredado */
} /* Fin fuente global */

.pretty-select-button span, /* Texto dentro de selectores personalizados */
.pretty-select-value, /* Valor visible de selector personalizado */
.student-dropdown-button span, /* Texto del selector de estudiante */
#selectedStudentName, /* Nombre seleccionado del alumno */
#prettyClassSelect *, /* Selector de clase */
#prettyTermSelect *, /* Selector de trimestre */
#prettySortSelect *, /* Selector de ordenación */
#prettyMeetingCategorySelect *, /* Selector de categoría de reunión */
button span, /* Texto interno de botones */
.btn span { /* Texto interno de botones principales */
    font-family: var(--app-font) !important; /* Aplica Quicksand al texto interno */
    font-weight: 600 !important; /* Da un poco más de presencia */
} /* Fin textos internos controles */

.btn, /* Botones principales */
button, /* Todos los botones */
.icon-btn, /* Botones de icono */
.btn-calculate, /* Botón calcular */
.btn-report, /* Botones informe */
.btn-report-settings, /* Botón configuración */
.app-module-tab { /* Pestañas superiores */
    font-family: var(--app-font) !important; /* Aplica Quicksand a botones */
    font-weight: 700 !important; /* Botones más legibles con Quicksand */
} /* Fin botones Quicksand */

input::placeholder, /* Placeholder inputs */
textarea::placeholder { /* Placeholder textareas */
    font-family: var(--app-font) !important; /* Aplica Quicksand al placeholder */
    font-weight: 500 !important; /* Placeholder más fino que texto real */
} /* Fin placeholders */

/* =========================================================
   CENTRADO REAL SELECTOR ORDENAR
========================================================= */

#prettySortSelect .pretty-select-button { /* Botón visible del selector Ordenar */
    display: flex !important; /* Activa alineación flexible */
    align-items: center !important; /* Centra verticalmente el texto */
    height: 38px !important; /* Igual altura que los demás selectores */
    line-height: 1 !important; /* Evita que el texto caiga hacia abajo */
    padding-top: 0 !important; /* Quita desplazamiento superior */
    padding-bottom: 0 !important; /* Quita desplazamiento inferior */
} /* Fin botón selector ordenar */

#prettySortSelect .pretty-select-button span:first-child { /* Texto Alfabètic del selector Ordenar */
    display: flex !important; /* Permite centrar el texto */
    align-items: center !important; /* Centra verticalmente */
    height: 100% !important; /* Ocupa toda la altura del botón */
    line-height: 1 !important; /* Evita descentrado por línea */
    transform: translateY(-1px) !important; /* Ajuste óptico hacia arriba */
} /* Fin texto selector ordenar */

#prettySortSelect .pretty-select-arrow { /* Flecha del selector Ordenar */
    top: 50% !important; /* Centra la flecha */
    transform: translateY(-50%) !important; /* Ajuste vertical exacto */
} /* Fin flecha selector ordenar */

/* =========================================================
   QUICKSAND: PESO SELECTOR ALUMNO AMPLIADO
========================================================= */

.expanded-student-follow-modal-card #expandedPrettyStudentSelect .pretty-select-button,
.expanded-student-follow-modal-card #expandedPrettyStudentSelect .pretty-select-button *,
.expanded-student-follow-modal-card #expandedPrettyStudentSelect .pretty-select-display,
.expanded-student-follow-modal-card #expandedPrettyStudentSelect .pretty-select-display *,
.expanded-student-follow-modal-card #expandedPrettyStudentSelect span {
    font-family: var(--app-font) !important; /* Usa Quicksand */
    font-weight: 600 !important; /* Igual peso que el selector normal */
} /* Fin selector alumno ampliado */

.expanded-student-follow-modal-card #expandedStudentCondition {
    font-family: var(--app-font) !important; /* Usa Quicksand */
    font-weight: 500 !important; /* Mantiene la condición algo más suave */
} /* Fin condición ampliada */

/* =========================================================
   AGENDA: CABECERA COMO TABLA DE NOTAS
========================================================= */

.agenda-head { /* Cabecera de días en agenda */
    background: #f4f7fb !important; /* Usa el mismo fondo que la cabecera de la tabla de notas */
    background-image: none !important; /* Elimina cualquier degradado */
    color: var(--muted) !important; /* Usa el color gris azulado de cabeceras */
    border-right: 1px solid #e3ebf5 !important; /* Igual separador vertical que la tabla de notas */
    border-bottom: 1px solid var(--border) !important; /* Igual línea inferior que la tabla de notas */
    box-shadow: none !important; /* Elimina efectos visuales extra */
} /* Fin cabecera agenda */

.agenda-head span { /* Nombre del día */
    color: var(--text) !important; /* Texto principal */
    font-weight: 700 !important; /* Peso limpio con Quicksand */
} /* Fin nombre día */

.agenda-head strong { /* Número del día */
    color: #2f5f9f !important; /* Azul de la app */
    font-weight: 700 !important; /* Peso equilibrado */
} /* Fin número día */

.meeting-category-card-yellow { /* Categoría amarilla */
    background: #fff8cc !important; /* Amarillo más vivo y diferenciado */
    border-color: #f2d94e !important; /* Borde amarillo visible */
} /* Fin categoría amarilla */

.meeting-category-card-pink { /* Categoría rosa */
    background: #ffe3ee !important; /* Rosa pastel claro */
    border-color: #f4a8c7 !important; /* Borde rosa */
} /* Fin categoría rosa */

.student-history-section { /* Bloque completo de historial de comentarios */
    display: flex !important; /* Permite organizar título, filtros e historial en vertical */
    flex-direction: column !important; /* Coloca los elementos del historial uno debajo de otro */
    min-height: 0 !important; /* Permite que el scroll interno funcione dentro del panel */
} /* Fin bloque historial */

.student-history-section .collapsible-section-content { /* Contenido desplegable del historial */
    display: flex !important; /* Permite que el listado interno se ajuste al espacio */
    flex-direction: column !important; /* Coloca filtros e historial en vertical */
} /* Fin contenido historial */

.comment-history { /* Lista de comentarios del historial: ya no hace scroll propio, ahora es .student-follow-body quien hace scroll con todo el panel */
    padding-right: 0 !important; /* Ya no hace falta reservar espacio para una barra de scroll propia */
} /* Fin lista historial */

.student-dropdown-button #selectedStudentName { /* Nombre visible dentro del selector de alumno */
    font-weight: 500 !important; /* Quita la negrita extra solo del alumno seleccionado */
} /* Fin ajuste selector alumno */

.top-class-tools { /* Zona superior donde está el selector de clase activa */
    position: relative !important; /* Permite controlar la capa del selector */
    z-index: 9999 !important; /* Coloca el selector de clase por encima del contenido inferior */
} /* Fin zona selector clase */

.top-class-field { /* Campo completo de clase activa */
    position: relative !important; /* Permite que el desplegable use una capa superior */
    z-index: 9999 !important; /* Mantiene el desplegable por encima de tarjetas y gráficos */
} /* Fin campo clase activa */

.top-class-field .pretty-select { /* Selector bonito de clase activa */
    position: relative !important; /* Crea contexto de apilado para el menú */
    z-index: 9999 !important; /* Coloca el selector por encima del panel de seguimiento */
} /* Fin selector bonito clase */

.top-class-field .pretty-select-menu { /* Menú desplegable de clase activa */
    z-index: 10000 !important; /* Hace que la lista de clases quede por encima de asistencia y deberes */
} /* Fin menú clase activa */

.student-history-section.student-follow-section-collapsed .collapsible-section-content { /* Historial cerrado */
    display: none !important; /* Oculta el historial al minimizarlo */
} /* Fin historial cerrado */

.student-objectives-section.student-follow-section-collapsed .collapsible-section-content { /* Objetivos cerrado */
    display: none !important; /* Oculta los objetivos al minimizarlos */
} /* Fin objetivos cerrado */

.student-objectives-section { /* Bloque completo de objetivos: altura natural, ya no se comprime ni hace scroll propio */
    display: flex !important; /* Organiza objetivos en vertical */
    flex-direction: column !important; /* Coloca cabecera y lista uno debajo de otro */
} /* Fin bloque objetivos */

.student-objectives { /* Lista real de objetivos: ya no hace scroll propio, ahora es .student-follow-body quien hace scroll con todo el panel */
    padding-right: 0 !important; /* Ya no hace falta reservar espacio para una barra de scroll propia */
} /* Fin lista objetivos */

.student-history-section { /* Bloque completo del historial: altura natural, ya no se comprime ni hace scroll propio */
    display: flex !important; /* Organiza historial en vertical */
    flex-direction: column !important; /* Coloca filtros y comentarios en columna */
} /* Fin bloque historial */

.student-objectives-section .collapsible-section-header { /* Cabecera de objetivos */
    padding-top: 0px !important; /* Elimina espacio extra superior */
    margin-top: -6px !important; /* Sube ligeramente el título */
} /* Fin cabecera objetivos */

.student-history-section .collapsible-section-header { /* Cabecera del historial */
    padding-top: 0px !important; /* Elimina espacio extra superior */
    margin-top: -6px !important; /* Sube ligeramente el título */
} /* Fin cabecera historial */

.agenda-page-card .agenda-grid { /* Contenedor exterior de la agenda */
    overflow: hidden !important; /* Elimina el scroll interno de la agenda */
    height: calc(100vh - 235px) !important; /* Ajusta la agenda al alto visible de la pantalla */
    min-height: 0 !important; /* Permite que la agenda se comprima */
} /* Fin contenedor agenda */

.agenda-page-card .agenda-table { /* Cuadrícula interna de la agenda */
    height: 100% !important; /* Hace que todo el horario quepa dentro del contenedor */
    min-height: 0 !important; /* Evita que la tabla fuerce scroll */
    grid-auto-rows: minmax(0, 1fr) !important; /* Reparte las franjas horarias para ver todo sin scroll */
} /* Fin tabla agenda */

/* =========================================================
   AGENDA: LIMPIAR ESQUINA SUPERIOR DERECHA
========================================================= */

.agenda-page-card .agenda-grid { /* Contenedor exterior visible de la agenda */
    border-radius: 8px !important; /* Mantiene el redondeo exterior en 8px */
    overflow: hidden !important; /* Recorta cualquier línea interna que sobresalga */
} /* Fin contenedor exterior */

.agenda-page-card .agenda-table { /* Cuadrícula interna de la agenda */
    border-radius: 8px !important; /* Aplica el mismo redondeo a la cuadrícula */
    overflow: hidden !important; /* Recorta bordes internos de cabecera y celdas */
} /* Fin cuadrícula */

.agenda-page-card .agenda-head:nth-child(6) { /* Cabecera del viernes */
    border-right: 0 !important; /* Elimina la línea vertical que aparece en la esquina derecha */
    border-top-right-radius: 8px !important; /* Redondea la esquina superior derecha */
} /* Fin cabecera viernes */

.agenda-page-card .agenda-cell[data-day-index="4"] { /* Celdas de la columna viernes */
    border-right: 0 !important; /* Elimina la línea derecha de la última columna */
} /* Fin columna viernes */

@media (max-width: 1100px) { /* En pantalla estrecha la tabla de la agenda (min-width 840px) no cabe entera; el "overflow: hidden" de arriba (pensado solo para redondear la esquina en pantallas anchas) bloqueaba también el scroll horizontal que deja ver el resto de días. Se restaura aquí para pantallas estrechas. */
    .agenda-page-card .agenda-grid {
        overflow: auto !important;
    }
}

.agenda-file-dropzone { /* Zona para arrastrar archivos en eventos */
    border: 1px dashed #b9cdef; /* Borde discontinuo suave */
    border-radius: 14px; /* Redondea la caja */
    padding: 18px; /* Da espacio interior */
    text-align: center; /* Centra el texto */
    color: #607086; /* Usa texto gris suave */
    cursor: pointer; /* Muestra que se puede pulsar */
} /* Fin zona archivos */

.agenda-file-dropzone-active { /* Estado al arrastrar encima */
    background: #edf4ff; /* Resalta la zona */
    border-color: #2f5f9f; /* Marca borde azul */
} /* Fin estado activo */

.agenda-attachment-list { /* Lista de archivos adjuntos */
    display: grid; /* Coloca archivos en vertical */
    gap: 8px; /* Separa archivos */
    margin-top: 10px; /* Separa la lista de la zona */
} /* Fin lista adjuntos */

.agenda-attachment-item { /* Fila de un archivo adjunto */
    display: flex; /* Coloca enlace y botón en fila */
    justify-content: space-between; /* Separa nombre y borrar */
    align-items: center; /* Centra verticalmente */
    border: 1px solid #d3deec; /* Borde suave */
    border-radius: 12px; /* Redondea la fila */
    padding: 8px 10px; /* Espacio interior */
} /* Fin archivo adjunto */

.agenda-attachment-item button { /* Botón quitar archivo */
    border: none; /* Quita borde */
    background: transparent; /* Fondo transparente */
    color: #9f4b4b; /* Color rojo suave */
    font-weight: 900; /* Hace visible la X */
    cursor: pointer; /* Cursor mano */
} /* Fin botón quitar */

.agenda-form-modal-card { /* Modal de crear y editar actividades de agenda */
    max-height: 92vh !important; /* Permite que el modal use más alto de pantalla */
    overflow-y: auto !important; /* Activa scroll interno si en pantallas pequeñas no cabe todo */
    padding: 22px 28px !important; /* Reduce el espacio interior del modal */
} /* Fin modal agenda */

.agenda-form-modal-card .field { /* Campos del formulario de agenda */
    margin-bottom: 10px !important; /* Reduce separación vertical entre campos */
} /* Fin campos agenda */

.agenda-form-modal-card textarea { /* Textareas de descripción y enlaces */
    min-height: 82px !important; /* Reduce altura mínima para que quepa el bloque de archivos */
    max-height: 82px !important; /* Mantiene altura compacta */
} /* Fin textareas agenda */

.agenda-form-modal-card .agenda-file-dropzone { /* Zona de arrastrar archivos */
    padding: 12px 16px !important; /* Reduce altura interna de la zona */
    min-height: 58px !important; /* Hace la caja más baja */
    font-size: 15px !important; /* Reduce ligeramente el texto */
    display: flex !important; /* Permite centrar el texto */
    align-items: center !important; /* Centra verticalmente el texto */
    justify-content: center !important; /* Centra horizontalmente el texto */
} /* Fin zona archivos compacta */

.agenda-form-modal-card .modal-actions { /* Botonera inferior del formulario */
    margin-top: 10px !important; /* Reduce separación antes del botón guardar */
} /* Fin botonera agenda */

/* =========================================================
   AGENDA MODAL COMPACTO FINAL
========================================================= */

.agenda-form-modal-card { /* Modal de crear y editar actividades de agenda */
    width: min(700px, 96vw) !important; /* Hace el modal más ancho para ganar espacio horizontal */
    max-width: 700px !important; /* Limita el ancho máximo del modal */
    max-height: 96vh !important; /* Permite usar casi toda la altura visible */
    overflow: visible !important; /* Evita scroll interno del modal */
    padding: 20px 34px 16px 34px !important; /* Reduce aire interior del modal */
} /* Fin modal agenda */

.agenda-form-modal-card .modal-header { /* Cabecera con título y X */
    margin-bottom: 10px !important; /* Reduce distancia bajo el título */
} /* Fin cabecera */

.agenda-form-modal-card .modal-header h2 { /* Título NEW ACTIVITY */
    font-size: 24px !important; /* Reduce un poco el título para ganar altura */
    line-height: 1.1 !important; /* Compacta la altura del título */
} /* Fin título */

.agenda-form-modal-card .form-grid { /* Fila START / FINAL */
    margin-bottom: -6px !important; /* Reduce distancia entre horas y repeat */
    gap: 18px !important; /* Mantiene separación entre columnas */
} /* Fin fila horas */

.agenda-form-modal-card .field-top { /* Todos los bloques del formulario */
    margin-top: 4px !important; /* Recupera un poco de separación visual entre apartados */
    padding-top: 2px !important; /* Añade un pequeño aire superior */
    border-top: none !important; /* Mantiene eliminadas las líneas separadoras */
} /* Fin compactación equilibrada */

.agenda-form-modal-card .field { /* Campos del formulario agenda */
    margin-bottom: 6px !important; /* Recupera una separación visual más agradable */
} /* Fin campos agenda equilibrados */

.agenda-form-modal-card .form-grid + .field-top { /* Bloque Repeat weekly */
    border-top: 0 !important; /* Quita línea encima de Repeat weekly */
    padding-top: 0 !important; /* Quita aire superior de Repeat weekly */
    margin-top: 2px !important; /* Acerca Repeat weekly a las horas */
    margin-bottom: -2px !important; /* Reduce espacio debajo de Repeat weekly */
} /* Fin bloque Repeat weekly */

.agenda-form-modal-card .agenda-repeat-label { /* Fila Repeat weekly */
    display: flex !important; /* Pone checkbox y texto en la misma línea */
    align-items: center !important; /* Alinea checkbox y texto verticalmente */
    gap: 10px !important; /* Separa checkbox y texto */
    margin: 0 !important; /* Elimina márgenes heredados */
    padding: 0 !important; /* Elimina relleno heredado */
    text-transform: none !important; /* Mantiene texto normal */
} /* Fin fila Repeat weekly */

.agenda-form-modal-card .agenda-repeat-label input { /* Checkbox Repeat weekly */
    width: 22px !important; /* Reduce ligeramente el checkbox */
    height: 22px !important; /* Reduce ligeramente el checkbox */
    margin: 0 !important; /* Elimina margen del checkbox */
} /* Fin checkbox */

.agenda-form-modal-card label { /* Todos los títulos de campos */
    margin-bottom: 6px !important; /* Deja un poco más de aire entre etiqueta y campo */
    line-height: 1.05 !important; /* Mantiene buena legibilidad */
} /* Fin títulos equilibrados */

.agenda-form-modal-card input,
.agenda-form-modal-card select { /* Inputs y selects */
    height: 36px !important; /* Reduce altura de campos de texto y hora */
    min-height: 36px !important; /* Evita que otra regla los agrande */
    padding-top: 6px !important; /* Reduce aire interno superior */
    padding-bottom: 6px !important; /* Reduce aire interno inferior */
} /* Fin inputs */

.agenda-form-modal-card textarea { /* Description y Links */
    min-height: 78px !important; /* Aumenta la altura útil de los cuadros de texto */
    max-height: 78px !important; /* Mantiene una altura estable sin romper el modal */
    padding-top: 8px !important; /* Mantiene aire interno superior cómodo */
    padding-bottom: 8px !important; /* Mantiene aire interno inferior cómodo */
} /* Fin textareas */

.agenda-form-modal-card .agenda-event-description-input { /* Description */
    min-height: 96px !important; /* Da más espacio a la descripción */
    max-height: 96px !important; /* Mantiene la descripción dentro del modal */
} /* Fin descripción */

.agenda-form-modal-card .agenda-color-options { /* Fila de colores */
    gap: 10px !important; /* Reduce distancia entre colores */
    margin-top: 0 !important; /* Quita aire superior */
} /* Fin colores */

.agenda-form-modal-card .agenda-color-dot { /* Círculos de color */
    width: 34px !important; /* Reduce tamaño de círculos */
    height: 34px !important; /* Reduce tamaño de círculos */
} /* Fin círculos */

.agenda-form-modal-card .agenda-file-dropzone { /* Zona Fitxers */
    min-height: 42px !important; /* Reduce altura de zona de archivos */
    padding: 6px 12px !important; /* Reduce aire interno */
    display: flex !important; /* Centra contenido */
    align-items: center !important; /* Centra verticalmente */
    justify-content: center !important; /* Centra horizontalmente */
    font-size: 15px !important; /* Reduce texto */
} /* Fin zona archivos */

.agenda-form-modal-card .modal-actions { /* Botón Save */
    margin-top: 6px !important; /* Reduce separación antes del botón */
} /* Fin acciones */

/* =========================================================
   AJUSTE FINAL ESPACIADO MODAL NUEVA ACTIVIDAD
========================================================= */

.agenda-form-modal-card .field-top { /* Bloques del formulario de nueva actividad */
    margin-top: 12px !important; /* Añade un poco más de separación entre apartados */
    padding-top: 4px !important; /* Recupera aire superior sin volver al exceso inicial */
    border-top: none !important; /* Mantiene ocultas las líneas separadoras */
} /* Fin separación equilibrada */

.agenda-form-modal-card .field { /* Campos del formulario de nueva actividad */
    margin-bottom: 12px !important; /* Da algo más de descanso visual entre campos */
} /* Fin campos equilibrados */

.agenda-form-modal-card label { /* Títulos START, ACTIVITY, COLOR, DESCRIPTION, LINKS y FITXERS */
    margin-bottom: 12px !important; /* Separa un poco más cada título de su campo */
    line-height: 1.08 !important; /* Mejora la lectura sin ocupar demasiado */
} /* Fin títulos equilibrados */

.agenda-form-modal-card .form-grid + .field-top { /* Bloque Repeat weekly */
    margin-top: 4px !important; /* Baja un poco Repeat weekly respecto a las horas */
    margin-bottom: 4px !important; /* Separa Repeat weekly de Activity */
    padding-top: 2px !important; /* Añade un pequeño aire superior */
} /* Fin ajuste Repeat weekly */

/* =========================================================
   ICONOS COMPACTOS DE ARCHIVOS EN AGENDA
========================================================= */

.agenda-form-modal-card .agenda-attachment-list { /* Lista de archivos adjuntos del modal de agenda */
    display: flex !important; /* Coloca los archivos en una sola fila */
    flex-wrap: wrap !important; /* Permite varias líneas si hubiera varios archivos */
    gap: 6px !important; /* Separa ligeramente los iconos */
    margin-top: 10px !important; /* Baja los iconos para que no se corten con el borde del dropzone */
    min-height: 0 !important; /* No reserva altura extra que empuje el botón SAVE */
    max-height: 0 !important; /* Impide que la lista aumente la altura del modal */
    overflow: visible !important; /* Permite que la X y el icono se vean completos */
    position: relative !important; /* Permite posicionar los iconos sin afectar al layout */
    z-index: 5 !important; /* Coloca los iconos por encima del fondo del modal */
} /* Fin lista compacta de adjuntos */

.agenda-attachment-chip { /* Icono compacto de archivo adjunto */
    position: relative !important; /* Permite colocar la X encima */
    width: 30px !important; /* Mantiene el icono pequeño para no ocupar espacio */
	height: 24px !important; /* Reduce altura para que no empuje visualmente el modal */
    border-radius: 6px !important; /* Redondea ligeramente el icono */
    display: inline-flex !important; /* Centra el texto del tipo */
    align-items: center !important; /* Centra verticalmente */
    justify-content: center !important; /* Centra horizontalmente */
    font-size: 9px !important; /* Hace el texto del tipo pequeño */
    font-weight: 900 !important; /* Hace visible PDF, W, X, P */
    color: white !important; /* Texto blanco dentro del icono */
    flex-shrink: 0 !important; /* Evita que los iconos se deformen */
} /* Fin icono compacto */

.agenda-attachment-chip a { /* Texto del icono */
    color: inherit !important; /* Usa el color específico de cada tipo de archivo */
    text-decoration: none !important; /* Quita subrayado */
    width: 100% !important; /* Hace clicable todo el icono */
    height: 100% !important; /* Hace clicable toda la altura */
    display: flex !important; /* Permite centrar el texto */
    align-items: center !important; /* Centra verticalmente el texto */
    justify-content: center !important; /* Centra horizontalmente el texto */
} /* Fin enlace del icono */

.agenda-attachment-chip button { /* Botón X para quitar archivo */
    position: absolute !important; /* Coloca la X sobre el icono */
    top: -5px !important; /* Coloca la X sin que se corte */
	right: -5px !important; /* Coloca la X dentro del área visible */
    width: 15px !important; /* Define ancho pequeño */
    height: 15px !important; /* Define alto pequeño */
    min-height: 15px !important; /* Evita que herede altura de botón grande */
    border: 1px solid #ffffff !important; /* Añade borde blanco para separarla del icono */
    border-radius: 999px !important; /* Hace la X circular */
    background: #26364a !important; /* Fondo oscuro para la X */
    color: white !important; /* X blanca */
    font-size: 10px !important; /* Tamaño pequeño de la X */
    font-weight: 900 !important; /* Hace la X visible */
    line-height: 1 !important; /* Evita desalineación */
    padding: 0 !important; /* Quita padding heredado */
    cursor: pointer !important; /* Muestra cursor de botón */
} /* Fin botón quitar */

.agenda-attachment-pdf { background: #d92d20 !important; } /* PDF en rojo */
.agenda-attachment-word { background: #2f6fed !important; } /* Word en azul */
.agenda-attachment-excel { background: #119669 !important; } /* Excel o Calc en verde */
.agenda-attachment-powerpoint { background: #f97316 !important; } /* PowerPoint en naranja */
.agenda-attachment-image { background: #7c3aed !important; } /* Imagen en lila */
.agenda-attachment-zip { background: #64748b !important; } /* Comprimidos en gris */
.agenda-attachment-file { background: #52657d !important; } /* Otros archivos en gris azulado */

.agenda-attachment-chip.agenda-attachment-pdf { /* PDF */
    background: #f3caca !important; /* Rojo pastel igual que la paleta de actividades */
    color: #8f4444 !important; /* Texto más oscuro para mantener contraste */
} /* Fin PDF */

.agenda-attachment-chip.agenda-attachment-word { /* Word */
    background: #cfe0f4 !important; /* Azul pastel igual que la paleta de actividades */
    color: #476b95 !important; /* Texto azul oscuro suave */
} /* Fin Word */

.agenda-attachment-chip.agenda-attachment-excel { /* Excel o Calc */
    background: #cfe8d0 !important; /* Verde pastel igual que la paleta de actividades */
    color: #4d7c53 !important; /* Texto verde oscuro suave */
} /* Fin Excel */

.agenda-attachment-chip.agenda-attachment-powerpoint { /* PowerPoint */
    background: #f4dcc0 !important; /* Naranja pastel igual que la paleta de actividades */
    color: #9a6a2f !important; /* Texto naranja oscuro suave */
} /* Fin PowerPoint */

.agenda-attachment-chip.agenda-attachment-image { /* Imagen */
    background: #d9caef !important; /* Lila pastel igual que la paleta de actividades */
    color: #6b5a8d !important; /* Texto lila oscuro suave */
} /* Fin Imagen */

.agenda-attachment-chip.agenda-attachment-zip { /* Comprimidos */
    background: #e8d0e3 !important; /* Rosa pastel igual que la paleta de actividades */
    color: #8a5f7d !important; /* Texto rosa oscuro suave */
} /* Fin ZIP */

.agenda-attachment-chip.agenda-attachment-file { /* Otros archivos */
    background: #e7edf4 !important; /* Gris azulado pastel */
    color: #607086 !important; /* Texto gris oscuro */
} /* Fin archivo genérico */o */

.agenda-detail-attachment-list { /* Lista de archivos dentro del detalle de actividad */
    display: flex !important; /* Coloca los archivos en fila */
    flex-wrap: wrap !important; /* Permite varias líneas si hay muchos */
    column-gap: 14px !important; /* Separa horizontalmente los iconos */
    row-gap: 10px !important; /* Separa verticalmente si pasan a otra línea */
    margin-top: 10px !important; /* Separa los archivos del título */
} /* Fin lista archivos detalle */

.agenda-detail-attachment-chip { /* Icono de archivo en detalle */
    text-decoration: none !important; /* Quita subrayado del enlace */
    cursor: pointer !important; /* Indica que se puede abrir */
} /* Fin icono detalle */

.agenda-detail-attachment-list { /* Lista de archivos dentro del detalle de actividad */
    display: flex !important; /* Coloca archivos en horizontal */
    flex-wrap: wrap !important; /* Permite varias líneas */
    gap: 0 !important; /* Anula gaps anteriores que pueden no estar aplicando */
    margin-top: 12px !important; /* Separa la lista del título */
} /* Fin lista detalle archivos */

.agenda-detail-attachment-chip { /* Icono individual de archivo en el detalle */
    margin-right: 4px !important; /* Separa cada archivo del siguiente */
    margin-bottom: 10px !important; /* Separa si hay segunda línea */
} /* Fin separación iconos detalle */

.agenda-detail-attachment-chip:last-child { /* Último icono de archivo */
    margin-right: 0 !important; /* Evita margen extra al final */
} /* Fin último icono */

/* =========================================================
   REUNIONES: BORDE BASE DEL MISMO COLOR QUE LA TARJETA
========================================================= */

.meeting-card-yellow { /* Reunión amarilla no seleccionada */
    border-color: #fff3c8 !important; /* Borde amarillo muy suave */
} /* Fin amarillo */

.meeting-card-purple { /* Reunión lila no seleccionada */
    border-color: #eadfff !important; /* Borde lila muy suave */
} /* Fin lila */

.meeting-card-blue { /* Reunión azul no seleccionada */
    border-color: #dceeff !important; /* Borde azul muy suave */
} /* Fin azul */

.meeting-card-green { /* Reunión verde no seleccionada */
    border-color: #d9f4e8 !important; /* Borde verde muy suave */
} /* Fin verde */

.meeting-card-red { /* Reunión roja no seleccionada */
    border-color: #f7dfe2 !important; /* Borde rojo muy suave */
} /* Fin rojo */

.meeting-card-orange { /* Reunión naranja no seleccionada */
    border-color: #f8e5d1 !important; /* Borde naranja muy suave */
} /* Fin naranja */

.meeting-card-pink { /* Reunión rosa no seleccionada */
    border-color: #f5ddec !important; /* Borde rosa muy suave */
} /* Fin rosa */

.meeting-card-active.meeting-card-yellow { /* Reunión amarilla seleccionada */
    border-color: #e3d27a !important; /* Amarillo suave visible */
} /* Fin amarilla activa */

.meeting-card-active.meeting-card-purple { /* Reunión lila seleccionada */
    border-color: #d3c1ef !important; /* Lila suave visible */
} /* Fin lila activa */

.meeting-card-active.meeting-card-blue { /* Reunión azul seleccionada */
    border-color: #bfd5f3 !important; /* Azul suave visible */
} /* Fin azul activa */

.meeting-card-active.meeting-card-green { /* Reunión verde seleccionada */
    border-color: #bfe0c9 !important; /* Verde suave visible */
} /* Fin verde activa */

.meeting-card-active.meeting-card-red { /* Reunión roja seleccionada */
    border-color: #eac4c8 !important; /* Rojo suave visible */
} /* Fin roja activa */

.meeting-card-active.meeting-card-orange { /* Reunión naranja seleccionada */
    border-color: #eacfae !important; /* Naranja suave visible */
} /* Fin naranja activa */

.meeting-card-active.meeting-card-pink { /* Reunión rosa seleccionada */
    border-color: #e7c4d9 !important; /* Rosa suave visible */
} /* Fin rosa activa */

/* =========================================================
   REUNIONES: CATEGORÍAS ARRASTRABLES
========================================================= */

.meeting-category-card { /* Tarjeta de categoría */
    cursor: pointer !important; /* Mismo cursor que las reuniones */
} /* Fin tarjeta */

.meeting-category-card:active { /* Categoría mientras se pulsa */
    cursor: pointer !important; /* Mantiene el mismo cursor durante el arrastre */
} /* Fin categoría activa */

.attendance-homework-header-cell { /* Cabecera Homework con menú */
    display: inline-flex !important; /* Coloca título y tres puntos en línea */
    align-items: center !important; /* Centra verticalmente */
    justify-content: center !important; /* Centra el conjunto */
    gap: 8px !important; /* Separa texto y botón */
} /* Fin cabecera Homework */

.agenda-mini-calendar-shell { /* Contenedor agenda + pestaña lateral + calendario */
    display: grid !important; /* Organiza en columnas */
    grid-template-columns: minmax(0, 1fr) 18px 260px !important; /* Agenda, línea vertical y calendario */
    width: 100% !important; /* Ocupa todo el ancho */
    height: 100% !important; /* Ocupa toda la altura */
    min-height: 0 !important; /* Evita desbordes */
} /* Fin contenedor */

.agenda-mini-calendar-shell.agenda-mini-calendar-collapsed { /* Estado cerrado */
    grid-template-columns: minmax(0, 1fr) 18px 0 !important; /* Oculta solo el panel y deja la línea visible */
} /* Fin cerrado */

@media (max-width: 1100px) { /* En pantalla estrecha o dividida, el panel del mini calendario (260px fijos) deja la agenda semanal con solo unos 58px de ancho, mostrando prácticamente un solo día. Se cierra por defecto para que la agenda tenga todo el ancho; el usuario aún puede abrirlo con la pestaña lateral si le cabe. */
    .agenda-mini-calendar-shell {
        grid-template-columns: minmax(0, 1fr) 18px 0 !important;
    }

    .agenda-mini-calendar-panel {
        padding-left: 0 !important;
        padding-right: 0 !important;
        border-left: none !important;
    }
}

.agenda-mini-calendar-shell #agendaGrid { /* Agenda dentro del contenedor */
    min-width: 0 !important; /* Evita que se rompa el ancho */
    height: 100% !important; /* Mantiene la altura original */
} /* Fin agenda */

.agenda-mini-calendar-toggle { /* Línea vertical discreta estilo pestañas superiores */
    width: 4px !important; /* Línea más fina */
    height: 96px !important; /* Altura visible */
    align-self: center !important; /* Centra verticalmente */
    justify-self: center !important; /* Centra horizontalmente */
    border: none !important; /* Sin borde */
    border-radius: 999px !important; /* Completamente redondeada */
    background: rgba(180, 205, 245, 0.45) !important;
    color: transparent !important; /* Oculta texto */
    font-size: 0 !important; /* Oculta flecha */
    cursor: pointer !important; /* Cursor botón */
    padding: 0 !important; /* Sin padding */
    transition: all .20s ease !important; /* Animación suave */
} /* Fin línea lateral */

.agenda-mini-calendar-toggle:hover { /* Cuando el ratón pasa encima */
    background: rgba(150, 185, 240, 0.85) !important;
    width: 5px !important; /* Se ensancha ligeramente */
} /* Fin hover */

.agenda-mini-calendar-top-toggle { /* Botón superior antiguo */
    display: none !important; /* Lo oculta */
} /* Fin botón superior antiguo */

.agenda-mini-calendar-panel { /* Panel lateral */
    overflow: hidden !important; /* Oculta al cerrar */
    border-left: 1px solid #d7e3f3 !important; /* Separador suave */
    background: #f8fbff !important; /* Fondo claro */
    padding: 14px !important; /* Espacio interno */
    min-width: 0 !important; /* Permite cerrar */
} /* Fin panel */

.agenda-mini-calendar-collapsed .agenda-mini-calendar-panel { /* Panel cerrado */
    padding-left: 0 !important; /* Quita padding izquierdo */
    padding-right: 0 !important; /* Quita padding derecho */
    border-left: none !important; /* Quita borde */
} /* Fin panel cerrado */

.agenda-mini-calendar-top { /* Cabecera del calendario */
    display: grid !important; /* Organiza flechas y mes */
    grid-template-columns: 32px 1fr 32px !important; /* Flecha, título, flecha */
    align-items: center !important; /* Centra verticalmente */
    gap: 6px !important; /* Separa elementos */
    margin-bottom: 10px !important; /* Separa cabecera */
} /* Fin cabecera */

.agenda-mini-calendar-top strong { /* Mes y año */
    text-align: center !important; /* Centra texto */
    text-transform: uppercase !important; /* Mayúsculas */
    font-size: 13px !important; /* Tamaño compacto */
    color: #22334a !important; /* Texto oscuro */
    font-weight: 900 !important; /* Texto fuerte */
} /* Fin título */

.agenda-mini-calendar-top button { /* Botones de mes anterior y mes siguiente del mini calendario. */
    width: 30px !important; /* Mantiene el ancho cuadrado del botón. */
    height: 30px !important; /* Mantiene el alto cuadrado del botón. */
    padding: 0 !important; /* Elimina cualquier espacio interno del botón. */
    border: 1px solid #c7d8ef !important; /* Mantiene el borde azul suave. */
    border-radius: 8px !important; /* Mantiene las esquinas redondeadas. */
    background: white !important; /* Mantiene el fondo blanco. */
    cursor: pointer !important; /* Mantiene el cursor de botón. */
    position: relative !important; /* Permite colocar la flecha artificial dentro del botón. */
    display: block !important; /* Evita que el texto interno afecte al centrado. */
} /* Fin botones de mes del mini calendario. */

.agenda-mini-calendar-month-btn::before { /* Dibuja una flecha más pequeña y fina. */
    content: "" !important; /* Crea la flecha. */
    position: absolute !important; /* Permite centrarla. */
    left: 50% !important; /* Centro horizontal. */
    top: 50% !important; /* Centro vertical. */
    width: 4px !important; /* Reduce el tamaño horizontal. */
    height: 4px !important; /* Reduce el tamaño vertical. */
    border-top: 1px solid #2f5f9f !important; /* Reduce el grosor de la flecha. */
    border-right: 1px solid #2f5f9f !important; /* Reduce el grosor de la flecha. */
    transform-origin: center !important; /* Mantiene la rotación centrada. */
} /* Fin flecha pequeña. */

.agenda-mini-calendar-prev-btn::before { /* Flecha izquierda centrada. */
    transform: translate(-30%, -50%) rotate(-135deg) !important; /* Ajuste fino del centrado. */
} /* Fin flecha izquierda. */

.agenda-mini-calendar-next-btn::before { /* Flecha derecha centrada. */
    transform: translate(-70%, -50%) rotate(45deg) !important; /* Ajuste fino del centrado. */
} /* Fin flecha derecha. */

.agenda-mini-calendar-weekdays { /* Días semana */
    display: grid !important; /* Grid */
    grid-template-columns: repeat(5, 1fr) !important; /* Cinco días */
    gap: 6px !important; /* Separación */
    margin-bottom: 6px !important; /* Margen inferior */
} /* Fin días semana */

.agenda-mini-calendar-weekdays span { /* Nombre día */
    text-align: center !important; /* Centra texto */
    font-size: 8px !important; /* Más pequeño para idiomas largos */
    letter-spacing: -0.2px !important; /* Compacta ligeramente las letras */
    color: #607086 !important; /* Gris */
    font-weight: 800 !important; /* Un poco menos grueso */
    text-transform: uppercase !important; /* Mayúsculas */
    white-space: nowrap !important; /* Evita saltos de línea */
    overflow: hidden !important; /* Evita desbordes */
    text-overflow: ellipsis !important; /* Añade puntos suspensivos si hiciera falta */
} /* Fin nombre día */

.agenda-mini-calendar-days { /* Días */
    display: grid !important; /* Grid */
    grid-template-columns: repeat(5, 1fr) !important; /* Cinco columnas */
    gap: 6px !important; /* Separación */
} /* Fin días */

.agenda-mini-calendar-day { /* Botón día */
    height: 32px !important; /* Altura */
    border: 1px solid transparent !important; /* Borde invisible */
    border-radius: 10px !important; /* Redondeo */
    background: white !important; /* Fondo */
    color: #22334a !important; /* Texto */
    font-size: 13px !important; /* Tamaño */
    font-weight: 800 !important; /* Texto fuerte */
    cursor: pointer !important; /* Cursor botón */
    padding: 0 !important; /* Sin padding */
} /* Fin botón día */

.agenda-mini-calendar-other-month { /* Días de otro mes */
    opacity: .35 !important; /* Los hace secundarios */
} /* Fin otro mes */

.agenda-mini-calendar-day:hover { /* Hover día */
    background: #eef5ff !important; /* Azul muy suave */
    border-color: #c7d8ef !important; /* Borde suave */
} /* Fin hover */

.agenda-mini-calendar-week { /* Semana visible */
    background: #d9e8ff !important; /* Azul pastel */
    border-color: #adc8f0 !important; /* Borde azul */
    color: #2f5f9f !important; /* Texto azul */
} /* Fin semana visible */

.agenda-mini-calendar-today { /* Día actual */
    box-shadow: inset 0 0 0 2px #7fcfc3 !important; /* Marca hoy */
} /* Fin hoy */

.agenda-mini-calendar-today-btn { /* Botón semana actual */
    width: 100% !important; /* Ancho completo */
    margin-top: 12px !important; /* Separación */
    height: 34px !important; /* Altura */
    border: 1px solid #c7d8ef !important; /* Borde */
    border-radius: 12px !important; /* Redondeo */
    background: white !important; /* Fondo */
    color: #2f5f9f !important; /* Azul */
    font-weight: 900 !important; /* Texto fuerte */
    text-transform: uppercase !important; /* Mayúsculas */
    cursor: pointer !important; /* Cursor botón */
} /* Fin semana actual */

.resources-page { height: 100%; display: flex; flex-direction: column; min-height: 0; } /* Hace que Recursos ocupe toda la vista disponible */

.resources-card { flex: 1; min-height: 0; display: flex; flex-direction: column; } /* Permite que la tarjeta de Recursos crezca */

.resources-header { flex-shrink: 0; } /* Mantiene fija la cabecera de Recursos */

.resources-curriculum-selector { display: grid; grid-template-columns: repeat(5, minmax(130px, 1fr)) auto; gap: 10px; align-items: end; margin-bottom: 14px; flex-shrink: 0; } /* Organiza los filtros curriculares y el botón de descarga. */

.resource-download-btn { height: 37px; white-space: nowrap; } /* Ajusta el botón de descarga al alto de los selectores. */

.resources-curriculum-selector select { height: 37px; } /* Iguala la altura de los selectores curriculares. */

.resources-list { display: flex; flex-direction: column; gap: 10px; overflow-y: auto; min-height: 0; } /* Lista con scroll interno */

.resource-item { display: grid; grid-template-columns: 1fr auto; gap: 12px; padding: 14px; border: 1px solid var(--border); border-radius: 16px; background: #f8fafc; } /* Tarjeta de competencia */

.resource-item-main { display: flex; flex-direction: column; gap: 5px; min-width: 0; } /* Organiza el texto de cada competencia */

.resource-item-main strong { font-size: 15px; font-weight: 900; color: var(--text); } /* Estilo del título de competencia */

.resource-item-main span { font-size: 12px; font-weight: 800; color: var(--muted); } /* Estilo del origen y año */

.resource-item-main p { margin: 0; font-size: 13px; line-height: 1.4; color: var(--text); } /* Estilo de la descripción */

.resource-item-actions { display: flex; gap: 8px; align-items: center; } /* Coloca botones editar y eliminar */

#resourceCompetenciesBox { flex: 1; min-height: 0; display: flex; flex-direction: column; } /* Permite que el panel de competencias ocupe todo el espacio disponible */

#resourceCompetenciesBox.hidden { display: none; } /* Asegura que el panel se oculte realmente aunque el selector por ID tenga más especificidad que .hidden */

#resourceCompetenciesBox .card-header { flex-shrink: 0; } /* Mantiene fija la cabecera de la asignatura seleccionada */

#resourceCompetenciesList { flex: 1; } /* Hace que la lista de competencias ocupe el espacio restante con scroll interno */

.resources-toggle-label { display: flex; align-items: center; gap: 10px; text-transform: none; font-size: 14px; color: var(--text); } /* Fila del checkbox Recursos */

.resources-toggle-label input { width: 20px; height: 20px; padding: 0; } /* Tamaño del checkbox */

#tabResourcesPage.hidden { display: none !important; } /* Oculta la pestaña Recursos aunque los estilos de pestaña usen !important. */

#resourcesPageView.hidden { display: none !important; } /* Oculta la pantalla Recursos cuando no debe mostrarse. */

.app-icon-resources { /* Define el icono de portapapeles con check para Recursos. */
    background-color: #a855f7 !important; /* Aplica color lila pastel al icono de Recursos. */
    mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M9 2a1 1 0 0 0-1 1v1H6a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-2V3a1 1 0 0 0-1-1H9Zm0 2h6v2H9V4ZM6 6h1v2a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V6h1v13H6V6Zm9.7 4.29-4.2 4.2-1.7-1.7-1.42 1.42 3.12 3.12 5.62-5.62-1.42-1.42Z'/%3E%3C/svg%3E"); /* Dibuja un portapapeles con check mediante máscara SVG. */
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M9 2a1 1 0 0 0-1 1v1H6a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-2V3a1 1 0 0 0-1-1H9Zm0 2h6v2H9V4ZM6 6h1v2a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V6h1v13H6V6Zm9.7 4.29-4.2 4.2-1.7-1.7-1.42 1.42 3.12 3.12 5.62-5.62-1.42-1.42Z'/%3E%3C/svg%3E"); /* Asegura compatibilidad con navegadores WebKit. */
} /* Fin icono Recursos. */

.app-icon-resources {
    background-color: #d78ea5 !important;
}

.resources-tab {
    color: #c26f89 !important;
    justify-content: center !important;
}

.resources-tab span[data-i18n] { /* Recursos es la única pestaña con el texto dentro de un <span> (las demás lo tienen suelto); una regla genérica "button span" le bajaba el grosor a 600 en vez del 700 de las otras 3 pestañas. */
    font-weight: 700 !important;
}

.resources-tab::before { /* Recursos ya tiene su propio icono (span .app-svg-icon); el ::before genérico de .app-module-tab le añadía además un hueco invisible de 22px que descuadraba su alineación respecto a las otras pestañas. */
    content: none !important;
}

.resources-tab .app-svg-icon { /* El icono viaja dentro del flujo flex junto al texto, para que ambos se centren juntos como un solo bloque en el botón. */
    width: 25px !important; /* Define el ancho del icono. */
    height: 25px !important; /* Define la altura del icono. */
    flex-shrink: 0 !important; /* Evita que el icono se deforme. */
} /* Fin ajuste icono Recursos. */

.resources-header-actions { /* Agrupa los botones de la cabecera de Recursos. */
    display: flex; /* Coloca los botones en horizontal. */
    align-items: center; /* Centra verticalmente los botones. */
    gap: 10px; /* Separa los botones entre sí. */
} /* Fin acciones cabecera Recursos. */

.resource-download-modal { /* Modal de descarga de competencias. */
    display: flex; /* Organiza los campos en columna. */
    flex-direction: column; /* Coloca un selector debajo del otro. */
    gap: 2px; /* Mantiene separación controlada entre campos. */
} /* Fin modal descarga competencias. */

.resource-download-modal select { /* Selectores reales del modal de Recursos. */
    display: none !important; /* Oculta los selectores nativos para usar los bonitos de la app. */
} /* Fin ocultar selectores reales Recursos. */

.resource-download-modal .pretty-select-button { /* Botones visibles de los selectores de Recursos. */
    height: 44px !important; /* Da una altura cómoda como el selector de alumnado. */
    font-size: 16px !important; /* Hace el texto más legible. */
    border-radius: 8px !important; /* Igual estética redondeada de la app. */
} /* Fin selector bonito Recursos. */

.resource-download-modal .pretty-select-menu { /* Menú desplegable bonito de Recursos. */
    z-index: 10020 !important; /* Asegura que el desplegable salga por encima del modal. */
} /* Fin menú Recursos. */

.resource-download-modal .field-top { /* Separación entre campos del modal de descarga. */
    margin-top: 22px !important; /* Aumenta el hueco entre campos para que cada etiqueta se agrupe claramente con su propio selector, no con el de arriba. */
} /* Fin separación entre campos Recursos. */

/* ========================================================= */ /* Separador visual */
/* VINCULAR COMPETENCIES A UNA ACTIVITAT */ /* Título del ajuste */
/* ========================================================= */ /* Separador visual */

.activity-competency-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; } /* Fila de etiquetas de competencias ya vinculadas */

.activity-competency-chip { display: inline-flex; align-items: center; gap: 6px; background: #eef5ff; color: #2f5f9f; border-radius: 999px; padding: 4px 6px 4px 10px; font-size: 12px; font-weight: 700; } /* Etiqueta de una competencia vinculada */

.activity-competency-chip button { background: transparent; border: none; color: #2f5f9f; font-size: 14px; line-height: 1; padding: 0 2px; cursor: pointer; } /* Botón para desvincular la competencia */

.activity-competency-chip button:hover { color: #b42318; } /* Resalta en rojo el botón de desvincular al pasar el ratón */

.activity-competency-summary-empty { margin: 0 0 8px; } /* Ajusta el aviso cuando no hay competencias vinculadas */

.activity-link-competencies-btn { width: 100%; } /* Hace que el botón de vincular competencias ocupe todo el ancho del campo */

.resource-item-pickable { grid-template-columns: auto 1fr; align-items: start; cursor: pointer; } /* Adapta la tarjeta de competencia para incluir un checkbox */

.resource-item-pickable input[type="checkbox"] { width: 18px; height: 18px; margin-top: 2px; flex-shrink: 0; } /* Tamaño del checkbox de competencia marcable */

/* ========================================================= */ /* Separador visual */
/* SEGUIMENT AMPLIADO: ALINEAR OBJECTIUS Y NOU COMENTARI */ /* Título del ajuste */
/* ========================================================= */ /* Separador visual */

.expanded-student-follow-left { /* Columna izquierda del seguimiento ampliado */
    display: grid !important; /* Cambia la columna izquierda a una rejilla vertical */
    grid-template-rows: auto 1fr auto !important; /* Deja datos arriba, gráfica en medio y objetivos abajo */
    gap: 12px !important; /* Mantiene la misma separación entre bloques */
    min-height: 0 !important; /* Permite que la columna se ajuste dentro del modal */
} /* Fin columna izquierda */

.expanded-student-follow-right { /* Columna derecha del seguimiento ampliado */
    display: grid !important; /* Cambia la columna derecha a una rejilla vertical */
    grid-template-rows: 1fr auto !important; /* Deja historial arriba y nuevo comentario abajo */
    gap: 12px !important; /* Mantiene la misma separación entre bloques */
    min-height: 0 !important; /* Permite que la columna se ajuste dentro del modal */
} /* Fin columna derecha */

.expanded-student-chart-section { /* Caja de la gráfica del seguimiento ampliado */
    min-height: 0 !important; /* Permite que la gráfica se adapte sin salirse */
    overflow: hidden !important; /* Evita que la gráfica sobresalga del box */
} /* Fin caja gráfica */

.expanded-student-chart-section .chart { /* Gráfica dentro del seguimiento ampliado */
    height: 100% !important; /* Hace que la gráfica use solo el alto disponible */
    max-height: 100% !important; /* Impide que la gráfica crezca más que su caja */
    overflow: hidden !important; /* Evita que el contenido visual salga fuera */
} /* Fin gráfica ampliada */

.expanded-objectives-section { /* Caja de Objectius en el seguimiento ampliado */
    min-height: 220px !important; /* Da una altura mínima cómoda al bloque de objetivos */
    max-height: 220px !important; /* Evita que objetivos empuje la gráfica fuera */
    overflow: hidden !important; /* Mantiene el contenido dentro del box */
} /* Fin caja Objectius */

.expanded-new-comment-section { /* Caja de Nou comentari */
    min-height: 220px !important; /* Aumenta ligeramente la altura total del bloque */
    max-height: 220px !important; /* Mantiene una altura fija y equilibrada */
} /* Fin caja Nou comentari */

.expanded-new-comment-section h2,
.expanded-new-comment-section .card-header h2 { /* Título Nou comentari */
    font-size: 14px !important; /* Iguala el tamaño al resto de títulos del modal */
    line-height: 1.2 !important; /* Mantiene la misma altura visual */
    font-weight: 900 !important; /* Conserva el grosor del resto de secciones */
} /* Fin título Nou comentari */

#expandedStudentObjectives { /* Lista interna de objetivos dentro del modal ampliado */
    max-height: 150px !important; /* Limita la lista para que no agrande la caja */
    overflow-y: auto !important; /* Añade scroll si hay muchos objetivos */
    overflow-x: hidden !important; /* Evita scroll horizontal */
} /* Fin lista objetivos ampliada */

/* ========================================================= */ /* Separador visual */
/* SEGUIMENT AMPLIADO: AJUSTAR ALTURA INTERNA DE LA GRÁFICA */ /* Título del ajuste */
/* ========================================================= */ /* Separador visual */

.expanded-student-follow-left > .expanded-student-section:not(.expanded-objectives-section) { /* Caja Evolució individual dentro del modal ampliado. Antes usaba ":first-of-type", que en CSS compara por etiqueta (div) y no por clase: como ".expanded-student-info-card" también es un div y va justo antes, ":first-of-type" no coincidía nunca con esta caja y la regla no llegaba a aplicarse. */
    display: flex !important; /* Permite controlar la cabecera y la gráfica por separado */
    flex-direction: column !important; /* Coloca el título arriba y la gráfica debajo */
    flex: 1 !important; /* Ocupa el espacio real disponible en la columna izquierda, en vez de asumir una altura fija */
    min-height: 0 !important; /* Permite que la caja se ajuste (y encoja) al espacio real disponible */
} /* Fin caja Evolució individual (overflow se queda visible: lo necesita el desplegable del selector de modo para no recortarse) */

.expanded-student-chart { /* Contenedor de la gráfica ampliada */
    height: 288px !important; /* Reduce la gráfica para que quepa dentro de Evolució individual */
    max-height: 288px !important; /* Impide que la gráfica vuelva a crecer por estilos anteriores */
    min-height: 0 !important; /* Permite que el navegador reduzca la gráfica si falta espacio */
    overflow: hidden !important; /* Oculta cualquier sobrante interno de la gráfica */
} /* Fin contenedor gráfica ampliada */

.expanded-student-chart .chart { /* Gráfica dibujada dentro del contenedor ampliado */
    height: 288px !important; /* Igual altura que su contenedor para evitar desbordes */
    max-height: 288px !important; /* Bloquea la altura máxima de la gráfica interna */
    min-height: 0 !important; /* Permite ajustar la gráfica sin forzar el box */
    overflow: hidden !important; /* Evita que las etiquetas salgan fuera */
} /* Fin gráfica interna ampliada */

#resourceCompetenciesBox .inline-title-btn { width: 32px !important; /* Iguala el ancho del botón + de competencias al botón + de Cursos */ }
#resourceCompetenciesBox .inline-title-btn { height: 32px !important; /* Iguala la altura del botón + de competencias al botón + de Cursos */ }
#resourceCompetenciesBox .inline-title-btn { min-width: 32px !important; /* Evita que el botón de competencias se ensanche por otras reglas */ }
#resourceCompetenciesBox .inline-title-btn { min-height: 32px !important; /* Evita que el botón de competencias herede la altura de .card-header .icon-btn */ }
#resourceCompetenciesBox .inline-title-btn { border-radius: 8px !important; /* Iguala el redondeo al botón + de Cursos */ }
#resourceCompetenciesBox .inline-title-btn { padding: 0 !important; /* Elimina relleno interno que pueda cambiar la medida visual */ }

.resource-subject-checklist { display: grid; /* Organiza las asignaturas marcables en vertical */ }
.resource-subject-checklist { gap: 8px; /* Añade separación entre asignaturas */ }
.resource-subject-checklist { max-height: 220px; /* Limita la altura de la lista */ }
.resource-subject-checklist { overflow-y: auto; /* Permite scroll si hay muchas asignaturas */ }
.resource-subject-checklist { border: 1px solid #c9d8ee; /* Añade borde como los selectores */ }
.resource-subject-checklist { border-radius: 8px; /* Redondea el contenedor */ }
.resource-subject-checklist { padding: 10px; /* Añade espacio interior */ }
.resource-subject-checklist { background: white; /* Mantiene fondo blanco */ }

.resource-subject-check-item { display: flex; /* Coloca checkbox y texto en una fila */ }
.resource-subject-check-item { align-items: center; /* Centra verticalmente checkbox y texto */ }
.resource-subject-check-item { gap: 10px; /* Separa checkbox y nombre */ }
.resource-subject-check-item { padding: 8px 10px; /* Da aire a cada asignatura */ }
.resource-subject-check-item { border-radius: 8px; /* Redondea cada fila */ }
.resource-subject-check-item { cursor: pointer; /* Permite pulsar toda la fila */ }
.resource-subject-check-item { font-weight: 400 !important; /* Mantiene el texto visible */ }

.resource-subject-check-item:hover { background: #eef5ff; /* Resalta la asignatura al pasar el ratón */ }

.resource-subject-check { width: 18px; /* Ajusta el ancho del checkbox */ }
.resource-subject-check { height: 18px; /* Ajusta la altura del checkbox */ }
.resource-subject-check { accent-color: #2f6fed; /* Usa el azul principal de la app */ }

.resource-multi-wrap { position: relative; /* Permite colocar el desplegable debajo del botón */ }

.resource-multi-button { width: 100%; /* Ocupa todo el ancho como un selector */ }
.resource-multi-button { height: 44px; /* Iguala la altura de los selectores */ }
.resource-multi-button { border: 1px solid #c9d8ee; /* Usa borde azul suave */ }
.resource-multi-button { border-radius: 8px; /* Redondea como los selectores */ }
.resource-multi-button { background: white; /* Fondo blanco */ }
.resource-multi-button { color: var(--text); /* Usa color principal */ }
.resource-multi-button { text-align: left; /* Alinea el texto a la izquierda */ }
.resource-multi-button { padding: 0 12px; /* Añade espacio interior */ }
.resource-multi-button { font-family: var(--app-font); /* Usa fuente global */ }
.resource-multi-button { font-size: 13px; /* Iguala tamaño de selectores */ }
.resource-multi-button { font-weight: 400 !important; /* Iguala el grosor del texto al de los selectores normales */ }
.resource-multi-button { cursor: pointer; /* Muestra cursor de botón */ }

.resource-multi-menu { position: absolute; /* Flota sobre el resto del modal en vez de empujar el contenido hacia abajo */ }
.resource-multi-menu { top: calc(100% + 6px); /* Lo coloca justo debajo del botón */ }
.resource-multi-menu { left: 0; right: 0; /* Ocupa el mismo ancho que el botón */ }
.resource-multi-menu { z-index: 90; /* Queda por encima del resto del contenido del modal */ }
.resource-multi-menu { border: 1px solid #c9d8ee; /* Borde igual al filtro de alumnos */ }
.resource-multi-menu { border-radius: 8px; /* Redondea el menú */ }
.resource-multi-menu { background: white; /* Fondo blanco */ }
.resource-multi-menu { box-shadow: 0 18px 35px rgba(15, 23, 42, .18); /* Sombra para distinguirlo del contenido de debajo */ }
.resource-multi-menu { padding: 8px; /* Espacio interior */ }
.resource-multi-menu { max-height: 260px; /* Limita altura */ }
.resource-multi-menu { overflow-y: auto; /* Activa scroll interno */ }

.resource-multi-menu.resource-multi-menu-upward { top: auto !important; /* Cancela la posición debajo del botón */ }
.resource-multi-menu.resource-multi-menu-upward { bottom: calc(100% + 6px) !important; /* Lo coloca justo encima del botón cuando no cabe hacia abajo */ }

.resource-multi-search { width: 100%; /* Ocupa todo el ancho */ }
.resource-multi-search { height: 36px; /* Altura compacta */ }
.resource-multi-search { margin-bottom: 8px; /* Separa buscador de botones */ }

.resource-multi-options {
    display: flex; /* Mantiene las asignaturas en columna */
    flex-direction: column; /* Una debajo de otra */
    gap: 0; /* Elimina separación entre asignaturas */
}

.resource-multi-option { display: flex !important; /* Coloca checkbox y texto en la misma fila */ }
.resource-multi-option { align-items: center !important; /* Centra checkbox y texto */ }
.resource-multi-option { justify-content: flex-start !important; /* Alinea todo a la izquierda */ }
.resource-multi-option { gap: 10px; /* Separa checkbox y texto */ }
.resource-multi-option { padding: 5px 8px; /* Da aire a cada asignatura */ }
.resource-multi-option { border-radius: 8px; /* Redondea cada fila */ }
.resource-multi-option { cursor: pointer; /* Permite pulsar toda la fila */ }
.resource-multi-option { font-size: 13px; /* Tamaño normal */ }
.resource-multi-option { font-weight: 400 !important; /* Reduce la negrita de las asignaturas del desplegable */ }
.resource-multi-option { text-transform: none; /* Evita forzar mayúsculas desde label */ }
.resource-multi-option { color: var(--text); /* Usa color principal */ }

.resource-multi-option:hover { background: #eef5ff; /* Resalta al pasar el ratón */ }

.resource-multi-option input[type="checkbox"] { width: 18px !important; /* Corrige el ancho heredado del input global */ }
.resource-multi-option input[type="checkbox"] { height: 18px !important; /* Corrige la altura heredada del input global */ }
.resource-multi-option input[type="checkbox"] { min-width: 18px !important; /* Evita que se estire */ }
.resource-multi-option input[type="checkbox"] { padding: 0 !important; /* Elimina padding del input global */ }
.resource-multi-option input[type="checkbox"] { margin: 0 !important; /* Elimina márgenes raros */ }
.resource-multi-option input[type="checkbox"] { accent-color: #2f6fed; /* Usa azul principal */ }

.resource-multi-option span { flex: 1; /* Hace que el texto ocupe el espacio restante */ }
.resource-multi-option span { text-align: left; /* Alinea el texto a la izquierda */ }

.resource-criteria-block { margin-top: 12px; display: grid; gap: 8px; } /* Separa el bloque de criterios dentro de cada competencia. */
.resource-criteria-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-weight: 900; text-transform: uppercase; color: var(--muted); } /* Cabecera de criterios con botón a la derecha. */
.resource-criteria-list { display: grid; gap: 6px; } /* Lista vertical de criterios. */
.resource-criterion-item { display: grid; grid-template-columns: 56px 1fr auto; gap: 8px; align-items: center; padding: 8px; border: 1px solid var(--border); border-radius: 12px; background: #f8fafc; } /* Fila visual de cada criterio. */
.resource-criterion-delete { width: 28px; height: 28px; font-size: 16px; } /* Hace más pequeño el botón de eliminar criterio. */
.resource-small-btn { min-height: 30px; padding: 6px 10px; font-size: 11px; } /* Botón pequeño para añadir criterio. */
.resource-competency-card { align-items: flex-start; } /* Evita que la tarjeta centre verticalmente el contenido largo. */

.picker-competency-card { align-items: flex-start !important; } /* Alinea arriba el checkbox y el contenido largo. */
.picker-competency-card .resource-item-main strong,
.picker-competency-card .resource-item-main p,
.picker-competency-card .picker-criterion-item strong,
.picker-competency-card .picker-criterion-item span { text-transform: none; } /* Evita que la etiqueta <label> ponga en mayúsculas el título, la descripción y los criterios; se mantiene igual que en Recursos. */
.picker-criteria-block { margin-top: 10px; display: grid; gap: 6px; } /* Separa los criterios de la descripción de la competencia. */
.picker-criteria-title { font-size: 11px; font-weight: 900; color: var(--muted); text-transform: uppercase; } /* Título pequeño del bloque de criterios. */
.picker-criteria-list { display: grid; gap: 5px; } /* Lista vertical de criterios. */
.picker-criterion-item { display: grid; grid-template-columns: 48px 1fr; gap: 8px; align-items: center; padding: 7px 8px; border: 1px solid var(--border); border-radius: 10px; background: #f8fafc; font-size: 12px; } /* Caja visual de cada criterio centrando verticalmente el código y el texto. */
.picker-criterion-item span { display: flex; align-items: center; min-height: 100%; } /* Centra verticalmente el texto del criterio dentro de su celda. */
.picker-criterion-item strong { display: flex; align-items: center; justify-content: center; min-height: 100%; color: #2f5f9f; } /* Centra también el código del criterio y mantiene el color azul. */

/* =========================================================
   PÁGINAS LEGALES (privacitat, termes, encàrrec de tractament)
========================================================= */

body.legal-page { overflow-y: auto; overflow-x: hidden; background: linear-gradient(180deg, var(--bg-2) 0%, var(--bg) 100%); } /* Fondo oscuro si el usuario tenía el modo noche activado. */

.legal-shell { display: flex; justify-content: center; padding: 40px 20px 80px; } /* Centra la tarjeta legal con margen para poder hacer scroll cómodamente. */
.legal-card { width: 100%; max-width: 780px; background: var(--panel); border: 1px solid var(--border); border-radius: 20px; padding: 36px 40px; } /* Tarjeta oscura en modo noche. */

.legal-draft-banner { background: var(--danger-bg); color: var(--danger-text); border: 1px solid #f3b4ae; border-radius: 12px; padding: 12px 16px; font-weight: 700; font-size: 14px; margin-bottom: 24px; } /* Aviso destacado de que el documento es un borrador pendiente de revisión legal. */

.legal-card h1 { font-size: 26px; margin: 0 0 6px 0; } /* Título principal del documento legal. */
.legal-card .legal-updated { color: var(--muted); font-size: 13px; margin: 0 0 28px 0; } /* Fecha de última actualización del documento. */
.legal-card h2 { font-size: 18px; margin: 28px 0 10px 0; color: var(--primary); } /* Títulos de cada apartado. */
.legal-card p { line-height: 1.6; margin: 0 0 12px 0; } /* Párrafos legibles con interlineado amplio. */
.legal-card ul { margin: 0 0 12px 0; padding-left: 22px; line-height: 1.6; } /* Listas dentro del texto legal. */
.legal-card li { margin-bottom: 6px; } /* Separación entre puntos de una lista. */
.legal-card a { color: var(--primary); } /* Enlaces dentro del texto legal. */
.legal-card strong { color: var(--text); } /* Mantiene el contraste de los términos resaltados en modo noche. */

.legal-back-link { display: inline-block; margin-top: 30px; color: var(--primary); font-weight: 700; text-decoration: none; } /* Enlace para volver atrás al final del documento. */
.legal-back-link:hover { text-decoration: underline; } /* Subraya el enlace de volver al pasar el ratón. */

#legalPageContent, #legalPageContent * { font-family: 'Inter', system-ui, sans-serif !important; } /* Usa una tipografía más neutra y formal para el texto legal, distinta de la redondeada Quicksand del resto de la app. */
#legalPageContent h1 { font-weight: 800 !important; } /* Título principal con más peso en Inter. */
#legalPageContent h2 { font-weight: 700 !important; } /* Apartados con peso intermedio en Inter. */
#legalPageContent strong { font-weight: 700 !important; } /* Mantiene el énfasis visual de los términos clave en Inter. */

.legal-footer-links { text-align: center; padding: 4px 0 0 0; font-size: 13px; } /* Fila de enlaces a Privacitat/Termes, justo debajo del último botón del formulario de login/registro. */
.legal-footer-links a { color: var(--muted); text-decoration: none; margin: 0 8px; } /* Enlaces discretos en gris. */
.legal-footer-links a:hover { color: var(--primary); text-decoration: underline; } /* Enlaces del pie legibles en modo noche. */

.legal-accept-checkbox { display: flex; align-items: center; gap: 8px; text-align: left; font-size: 12.5px; line-height: 1.4; color: var(--muted); margin: 4px 0 10px 0; text-transform: none; font-weight: 500; } /* Fila de la casilla de aceptación legal en el registro. */
.legal-accept-checkbox input[type="checkbox"] { width: 18px !important; height: 18px !important; min-width: 18px !important; flex-shrink: 0 !important; margin: 0 !important; padding: 0 !important; } /* Evita que la casilla herede el ancho completo de los inputs de texto del formulario; centrada verticalmente respecto al texto (incluso si este ocupa dos líneas). */
.legal-accept-checkbox span { flex: 1; } /* Deja que el texto ocupe el resto del ancho disponible. */
.legal-accept-checkbox a { color: var(--primary); } /* Resalta los enlaces a Privacitat/Termes dentro del registro. */

.picker-criterion-item strong { color: #2f5f9f; } /* Destaca el código del criterio. */

.field-hint { display: block; margin-top: 4px; font-size: 11px; color: var(--muted); font-weight: 500; text-transform: none; } /* Texto de ayuda pequeño bajo un campo, como los requisitos de la contraseña. */
.picker-criteria-empty { font-size: 12px; color: var(--muted); padding: 6px 0; } /* Mensaje cuando no hay criterios. */

/* ========================================================= */
/* RÚBRICA (subgrupo 1: modal, constructor, tabla, botón de nota) — bloque único y consolidado */
/* Valores confirmados contra el estilo computado real en el navegador antes de retirar los bloques dispersos originales. */
/* ========================================================= */

.rubric-modal-card { width: 96vw !important; max-width: 96vw !important; height: auto !important; max-height: 88vh !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; } /* Modal casi a pantalla completa con alto adaptable. */
.rubric-modal-card #modalBody { flex: 1 1 auto !important; min-height: 0 !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; } /* Cuerpo del modal, permite que la tabla haga scroll interno. */
.rubric-builder { flex: 1 1 auto !important; min-height: 0 !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; } /* Contenedor de tabla + botón inferior. */
.rubric-table-wrap { flex: 1 1 auto !important; min-height: 0 !important; max-height: none !important; overflow: auto !important; border: 1px solid #d3deec !important; border-radius: 12px !important; } /* Zona desplazable de la tabla. */
.rubric-builder .modal-actions { flex-shrink: 0 !important; margin-top: 12px !important; } /* Botón inferior Crear/Guardar rúbrica. */

.rubric-table { width: 100% !important; border-collapse: collapse !important; background: white; border-radius: 0 !important; border: none !important; table-layout: fixed !important; } /* Tabla principal de rúbrica (siempre dentro del modal, sin borde propio para no duplicar el del contenedor). */
.rubric-table th, .rubric-table td { border: 1px solid var(--border); padding: 8px; vertical-align: middle; border-left: none !important; } /* Celdas, sin borde izquierdo para no duplicar el vertical entre columnas. */
.rubric-table th { background: #f4f7fb; border-top: none !important; }
.rubric-table thead th { vertical-align: middle !important; text-align: center !important; }
.rubric-table th:first-child, .rubric-table td:first-child { width: 13% !important; } /* Columna de criterios. */
.rubric-table th:nth-child(2), .rubric-table td:nth-child(2) { width: 5% !important; } /* Columna de porcentaje. */
.rubric-table th:nth-child(3), .rubric-table td:nth-child(3),
.rubric-table th:nth-child(4), .rubric-table td:nth-child(4),
.rubric-table th:nth-child(5), .rubric-table td:nth-child(5),
.rubric-table th:nth-child(6), .rubric-table td:nth-child(6) { width: 20% !important; } /* Las 4 columnas de niveles a partes iguales. */
.rubric-table th:nth-child(7), .rubric-table td:nth-child(7) { width: 4% !important; } /* Columna de borrar fila. */

.rubric-table thead th:nth-child(2) { background: #f3f6fb !important; } /* Cabecera de porcentaje. */
.rubric-table thead th:nth-child(3) { background: #cfe8c3 !important; } /* Cabecera Excelente. */
.rubric-table thead th:nth-child(4) { background: #ffe6a6 !important; } /* Cabecera Bien. */
.rubric-table thead th:nth-child(5) { background: #f7c58f !important; } /* Cabecera Regular. */
.rubric-table thead th:nth-child(6) { background: #f77b93 !important; } /* Cabecera Mal. */

.rubric-table tbody td { height: auto !important; vertical-align: top !important; } /* Deja crecer la fila según el texto. */
.rubric-table td:first-child { vertical-align: middle !important; text-align: left !important; } /* El criterio se mantiene centrado verticalmente. */
.rubric-table tbody td:nth-child(2) { vertical-align: middle !important; } /* El porcentaje se centra verticalmente aunque la fila crezca por el texto de las otras columnas. */
.rubric-table tbody td:last-child { vertical-align: middle !important; text-align: center !important; } /* El botó d'esborrar fila queda enganxat a dalt per la regla general de td:top; el centrem tant vertical com horitzontalment. */
.rubric-table td:last-child, .rubric-table th:last-child { border-right: none !important; } /* Evita la vora doble (cel·la + contenidor) al lateral dret. */
.rubric-table tbody tr:last-child td { border-bottom: none !important; } /* Evita la vora doble (cel·la + contenidor) a la part inferior. */
.rubric-table tbody tr:nth-child(2n+1) td:first-child { background: #dbe6f8 !important; } /* Criterios en filas impares. */
.rubric-table tbody tr:nth-child(2n) td:first-child { background: #c6d7f3 !important; } /* Criterios en filas pares. */
.rubric-table tbody tr:nth-child(2n+1) td:not(:first-child):not(:last-child) { background: white !important; } /* Celdas descriptivas impares. */
.rubric-table tbody tr:nth-child(2n) td:not(:first-child):not(:last-child) { background: #fbfcff !important; } /* Celdas descriptivas pares. */

.rubric-empty-header { width: 70px !important; text-align: center !important; vertical-align: middle !important; } /* Primera celda superior izquierda (botón +). */
.rubric-action-header { background: #f3f6fb !important; } /* Cabecera vacía de la columna de borrar. */
.rubric-weight-header { font-weight: 900 !important; } /* El ancho y el fondo ya los da la columna nth-child(2). */

.rubric-table textarea, .rubric-table input { width: 100%; border: 1px solid #d3deec; border-radius: 8px; padding: 8px; font-family: inherit; }
.rubric-table textarea { min-height: 44px !important; max-height: none !important; height: auto !important; overflow: hidden !important; resize: none !important; line-height: 1.35 !important; white-space: pre-wrap !important; background: transparent !important; border: none !important; box-shadow: none !important; } /* Se integra con el color de fondo de la celda y crece con el texto. */
.rubric-table input { background: rgba(255,255,255,.65) !important; } /* Deja ver el color de la cabecera detrás. */

.rubric-weight-input { width: 40px !important; max-width: 40px !important; height: 40px !important; margin: 0 auto !important; display: block !important; text-align: center !important; padding: 0 !important; font-weight: 500 !important; } /* Input del porcentaje de cada criterio. */
.rubric-level-input { height: 52px !important; text-align: center !important; font-size: 17px !important; font-weight: 700 !important; border: none !important; background: transparent !important; box-shadow: none !important; padding: 0 !important; white-space: normal !important; overflow-wrap: anywhere !important; } /* Título editable de cada nivel. */

.rubric-add-row-btn { width: 34px !important; height: 34px !important; min-width: 34px !important; min-height: 34px !important; padding: 0 !important; display: inline-flex !important; align-items: center !important; justify-content: center !important; font-size: 22px !important; } /* Botón + de añadir criterio. */
.rubric-add-row-btn:hover { background: #dfeaf9; transform: scale(1.05); }

.rubric-delete-btn { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; margin: auto; cursor: pointer; } /* El color/borde rojo los da la convención global de botones de eliminar. */

.rubric-grade-btn { background: transparent !important; border: 1px solid transparent !important; box-shadow: none !important; color: #2f4968 !important; font-size: 15px !important; font-weight: 700 !important; padding: 0 !important; cursor: pointer !important; } /* Botón de nota cuando la actividad es de rúbrica. */
.rubric-grade-btn span { color: #2f4968 !important; font-weight: 700 !important; }
.grades-table .rubric-grade-btn { width: 100% !important; max-width: 68px !important; min-width: 0 !important; height: 36px !important; min-height: 36px !important; margin: 0 auto !important; display: flex !important; align-items: center !important; justify-content: center !important; border-radius: 8px !important; line-height: 36px !important; box-sizing: border-box !important; } /* Iguala el tamaño al resto de notas de la tabla, pero se encoge en vez de desbordar cuando la columna es más estrecha que 68px (muchas actividades a la vez). */
.grades-table .rubric-grade-btn span { color: #2f4968 !important; font-size: 15px !important; font-weight: 700 !important; line-height: 36px !important; }
.grades-table .rubric-grade-btn:hover { background: #f8fbff !important; border-color: #d7e4f4 !important; }
.grades-table .rubric-grade-btn:focus, .grades-table .rubric-grade-btn:focus-visible, .grades-table .rubric-grade-btn:active { background: #ffffff !important; border-color: #9fbde6 !important; outline: none !important; box-shadow: none !important; }

/* ========================================================= */
/* RÚBRICA (subgrupo 2: wizard de evaluación) — bloque único y consolidado */
/* Valores confirmados contra el estilo computado real en el navegador antes de retirar los bloques dispersos originales. */
/* ========================================================= */

.rubric-wizard { display: flex !important; flex-direction: column !important; gap: 10px !important; height: 100%; flex: 1 1 auto !important; min-height: 0 !important; } /* Contenedor principal de evaluar rúbrica. */
.rubric-wizard-header { padding: 10px 14px !important; border: 1px solid var(--border); background: #f4f8fe; border-radius: 8px !important; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-shrink: 0 !important; min-height: 52px !important; } /* Cabecera del alumno o grupo. */
.rubric-wizard-student { font-size: 22px; font-weight: 900; color: var(--text); text-transform: uppercase; display: flex !important; align-items: center !important; gap: 10px !important; }
.rubric-wizard-icon { width: 20px !important; height: 20px !important; display: inline-block !important; background: #5b2a86 !important; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M12 12c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5Zm0 2c-3.33 0-10 1.67-10 5v3h20v-3c0-3.33-6.67-5-10-5Z'/%3E%3C/svg%3E") center / contain no-repeat !important; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M12 12c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5Zm0 2c-3.33 0-10 1.67-10 5v3h20v-3c0-3.33-6.67-5-10-5Z'/%3E%3C/svg%3E") center / contain no-repeat !important; } /* Icono del alumno. */
.rubric-wizard-group-icon { width: 20px !important; height: 20px !important; display: inline-block !important; flex-shrink: 0 !important; background: #5b2a86 !important; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M16 11c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3Zm-8 0c1.66 0 3-1.34 3-3S9.66 5 8 5 5 6.34 5 8s1.34 3 3 3Zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5C15 14.17 10.33 13 8 13Zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.96 1.97 3.45V19h6v-2.5C23 14.17 18.33 13 16 13Z'/%3E%3C/svg%3E") center / contain no-repeat !important; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M16 11c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3Zm-8 0c1.66 0 3-1.34 3-3S9.66 5 8 5 5 6.34 5 8s1.34 3 3 3Zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5C15 14.17 10.33 13 8 13Zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.96 1.97 3.45V19h6v-2.5C23 14.17 18.33 13 16 13Z'/%3E%3C/svg%3E") center / contain no-repeat !important; } /* Icono de grupo. */

.rubric-wizard-list { display: flex; flex-direction: column; gap: 18px; flex: 1 1 auto !important; min-height: 0 !important; overflow-y: auto !important; overflow-x: hidden !important; padding-right: 8px !important; } /* Lista de criterios. */
.rubric-wizard-criterion { border-top: 1px solid #d8e2ef; padding-top: 16px; margin-bottom: 3px !important; padding-bottom: 3px !important; } /* Bloque de cada criterio. */
.rubric-wizard-criterion-title { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px !important; font-size: 14px !important; }
.rubric-wizard-criterion-title span { font-size: 18px; font-weight: 700 !important; color: var(--text); } /* Nombre del criterio. */
.rubric-wizard-criterion-title strong { font-size: 14px; font-weight: 700 !important; color: #2f5f9f; background: #eef5ff; border: 1px solid #c9d8ee; border-radius: 999px; padding: 5px 10px; } /* Porcentaje del criterio. */

.rubric-wizard-options { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px !important; align-items: stretch !important; } /* Fila de opciones Excelente/Bien/Regular/Mal. */
.rubric-wizard-option { min-height: auto !important; height: auto !important; padding: 14px 18px !important; border-radius: 8px !important; display: flex !important; flex-direction: column !important; justify-content: flex-start !important; gap: 6px !important; border: 2px solid transparent; text-align: left; cursor: pointer; position: relative; transition: all .15s ease; color: var(--text); font-family: inherit; } /* Tarjeta de cada opción. */
.rubric-wizard-option:hover { transform: translateY(-2px); box-shadow: 0 8px 18px rgba(15, 23, 42, .10); }
.rubric-wizard-option-title { margin: 0 !important; font-size: 14px !important; font-weight: 900; line-height: 1.15 !important; } /* Título del nivel. */
.rubric-wizard-option-text { margin: 0 !important; font-size: 13px !important; line-height: 1.35 !important; font-weight: 400; } /* Descripción del nivel. */

.rubric-wizard-option.rubric-wizard-color-0 { background: #d9f4df !important; } /* Excelente. */
.rubric-wizard-option.rubric-wizard-color-1 { background: #fff3c8 !important; } /* Bien. */
.rubric-wizard-option.rubric-wizard-color-2 { background: #fde2c4 !important; } /* Regular. */
.rubric-wizard-option.rubric-wizard-color-3 { background: #ffd1dc !important; } /* Mal. */

.rubric-wizard-option.rubric-wizard-color-0.rubric-cell-selected { background: #c9efcf !important; border-color: #2f9e44 !important; box-shadow: inset 0 0 0 2px #2f9e44 !important; } /* Excelente seleccionado. */
.rubric-wizard-option.rubric-wizard-color-1.rubric-cell-selected { background: #ffeaa3 !important; border-color: #d6a800 !important; box-shadow: inset 0 0 0 2px #d6a800 !important; } /* Bien seleccionado. */
.rubric-wizard-option.rubric-wizard-color-2.rubric-cell-selected { background: #ffd1a3 !important; border-color: #e67700 !important; box-shadow: inset 0 0 0 2px #e67700 !important; } /* Regular seleccionado. */
.rubric-wizard-option.rubric-wizard-color-3.rubric-cell-selected { background: #ffb8c8 !important; border-color: #d6336c !important; box-shadow: inset 0 0 0 2px #d6336c !important; } /* Mal seleccionado. */
.rubric-wizard-option.rubric-cell-selected::after { content: "✔"; position: absolute; top: 10px; right: 12px; font-size: 20px; font-weight: 900; color: #172334 !important; } /* Check de selección. */

/* ========================================================= */
/* CHECKLIST — bloque único y consolidado (no esparcir en más sitios) */
/* ========================================================= */

.checklist-modal-card { max-width: 640px !important; width: min(640px, 92vw) !important; max-height: 86vh !important; height: auto !important; display: flex !important; flex-direction: column !important; } /* Modal de tamaño normal, mucho más estrecho que el de rúbrica porque no necesita columnas de niveles. */
.checklist-modal-card #modalBody { flex: 1 !important; min-height: 0 !important; display: flex !important; flex-direction: column !important; overflow-y: auto !important; } /* Permite que constructor o wizard hagan scroll interno. */
.checklist-modal-card .modal-actions { flex-shrink: 0 !important; margin-top: 8px !important; } /* Mantiene el botón inferior siempre visible. */

.checklist-builder { display: flex; flex-direction: column; gap: 12px; flex: 1; min-height: 0; } /* Contenedor general del constructor de checklist. */

.checklist-table-wrap { flex: 1; min-height: 0; overflow-y: auto; } /* Zona desplazable de la lista editable. */

.checklist-builder-list { display: flex; flex-direction: column; gap: 10px; } /* Lista de ítems editables, mismo formato visual que la evaluación. */

.checklist-builder-row { display: flex; align-items: center; gap: 10px; border: 1px solid var(--border); border-radius: 8px; padding: 12px 14px; background: #f8fbff; } /* Fila de ítem editable. */

.checklist-builder-row-body { flex: 1; min-width: 0; } /* Contenedor del título y la descripción editables. */
.checklist-builder-row-body .checklist-item-input { font-size: 16px; font-weight: 800; color: var(--text); } /* Nombre del ítem, mismo peso visual que en la evaluación. */

.checklist-builder-row-side { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } /* Agrupa porcentaje y borrar, centrados y a la misma altura. */

.checklist-add-row-btn { width: 100%; } /* Botón para añadir un nuevo ítem, dentro de la lista con la misma separación que entre ítems. */

.checklist-editable { overflow: visible !important; white-space: pre-wrap !important; word-break: break-word !important; line-height: 1.35 !important; padding: 6px 8px !important; outline: none !important; border-radius: 8px; } /* Caja editable de nombre o descripción. */
.checklist-builder-row-body .checklist-description-input { margin-top: 2px; font-size: 13px; color: var(--muted); } /* Descripción opcional, discreta como en la evaluación. */
.checklist-description-input:empty::before { content: attr(data-placeholder); color: var(--muted); opacity: .7; } /* Placeholder del campo de descripción vacío. */

.checklist-weight-input { width: 64px !important; height: 38px !important; box-sizing: border-box !important; flex-shrink: 0; border: 1px solid #d3deec; border-radius: 8px; padding: 0 6px; font-family: inherit; font-weight: 900; font-size: 15px; color: #2f5f9f; background: #eef5ff; text-align: center; } /* Input numérico del porcentaje, misma altura que el botón de borrar. */

.checklist-delete-btn { flex-shrink: 0; border: 1px solid #f2b8b5; background: #fff7f7; color: #c5342d; border-radius: 8px; font-weight: 900; font-size: 16px; cursor: pointer; width: 38px; height: 38px; } /* Botón X para borrar un ítem. */
.checklist-delete-btn:hover { background: #ffeceb; } /* Hover del botón de borrar. */

.checklist-wizard { flex: 1 !important; min-height: 0 !important; display: flex !important; flex-direction: column !important; gap: 10px !important; } /* Contenedor principal de evaluar checklist. */

.checklist-live-grade, .rubric-live-grade { flex-shrink: 0; text-align: center; font-size: 26px; font-weight: 900; color: #2f5f9f; background: #eef5ff; border: 1px solid #c9d8ee; border-radius: 8px; padding: 10px; } /* Nota calculada en tiempo real, se actualiza en cada marca o selección. Compartida entre checklist y rúbrica. */
.checklist-live-grade:empty, .rubric-live-grade:empty { display: none; } /* Oculta la caja mientras no hay nota calculada. */

.checklist-wizard-list { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; padding-right: 6px; display: flex; flex-direction: column; gap: 10px; } /* Lista de ítems, con scroll si hay muchos. */

.checklist-wizard-item { display: flex; align-items: flex-start; gap: 14px; border: 1px solid var(--border); border-radius: 8px; padding: 14px 16px; cursor: pointer; background: #f8fbff; transition: all .15s ease; } /* Fila de ítem, toda clicable. */
.checklist-wizard-item:hover { background: #f4f9ff; } /* Hover de la fila, azul más clarito que la caja de nota en vivo para no confundirlas (sin transform: el translateY hacía desaparecer el borde superior por un problema de renderizado con el borde de 1px). */
.checklist-wizard-item-checked { background: #e5f6e3 !important; border-color: #6fae5a !important; box-shadow: inset 0 0 0 2px #6fae5a; } /* Fila marcada como hecha. */

.checklist-wizard-toggle { flex-shrink: 0; width: 26px; height: 26px; margin-top: 2px; border: 2px solid #9fbde6; border-radius: 8px; background: white; position: relative; } /* Casilla visual grande. */
.checklist-wizard-item-checked .checklist-wizard-toggle { background: #6fae5a; border-color: #6fae5a; } /* Casilla rellena al marcar. */
.checklist-wizard-item-checked .checklist-wizard-toggle::after { content: "✔"; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: white; font-size: 15px; font-weight: 900; } /* Check dentro de la casilla marcada. */

.checklist-wizard-item-body { flex: 1; min-width: 0; } /* Contenedor de texto del ítem. */
.checklist-wizard-item-title { display: flex; justify-content: space-between; align-items: center; gap: 12px; } /* Fila con nombre y porcentaje. */
.checklist-wizard-item-title span { font-size: 16px; font-weight: 800; color: var(--text); } /* Nombre del ítem. */
.checklist-wizard-item-title strong { font-size: 13px; font-weight: 900; color: #2f5f9f; background: #eef5ff; border: 1px solid #c9d8ee; border-radius: 8px; padding: 4px 9px; flex-shrink: 0; } /* Porcentaje del ítem. */
.checklist-wizard-item-description { margin-top: 6px; font-size: 13px; line-height: 1.35; color: var(--muted); } /* Descripción opcional del ítem. */

.checklist-grade-btn { background: transparent !important; border: 1px solid transparent !important; box-shadow: none !important; color: #2f4968 !important; font-size: 15px !important; font-weight: 700 !important; padding: 0 !important; cursor: pointer !important; } /* Botón de nota cuando la actividad es checklist, igual estilo que el de rúbrica. */
.checklist-grade-btn span { color: #2f4968 !important; font-weight: 700 !important; } /* Número interno del botón. */
.grades-table .checklist-grade-btn { width: 100% !important; max-width: 68px !important; min-width: 0 !important; height: 36px !important; min-height: 36px !important; margin: 0 auto !important; display: flex !important; align-items: center !important; justify-content: center !important; border-radius: 8px !important; line-height: 36px !important; box-sizing: border-box !important; } /* Iguala el tamaño al resto de notas de la tabla, pero se encoge en vez de desbordar cuando la columna es más estrecha que 68px (muchas actividades a la vez). */
.grades-table .checklist-grade-btn:hover { background: #f8fbff !important; border-color: #d7e4f4 !important; } /* Hover igual que el resto de notas. */

@media (max-height: 700px) { /* Encoge al máximo la tarjeta de login/registro en pantallas muy bajas (móviles), para que quepa entera sin necesitar scroll. */
    body.login-page .login-card { padding: 12px !important; } /* Reduce el espacio interior de la tarjeta. */
    body.login-page .login-title { font-size: 18px !important; } /* Título más pequeño. */
    body.login-page .login-subtitle { margin: 2px 0 6px 0 !important; font-size: 12px !important; } /* Subtítulo más compacto. */
    body.login-page .login-success,
    body.login-page .login-error { margin-bottom: 4px !important; padding: 4px 6px !important; font-size: 11px !important; } /* Avisos más compactos. */
    body.login-page #registerBox form.login-form { margin-top: 4px !important; } /* Iguala la separación antes de NOMBRE con la de arriba. */
    body.login-page .login-form { gap: 4px !important; } /* Menos separación entre campos. */
    body.login-page .field-top { margin-top: 2px !important; } /* Menos separación superior de campos. */
    body.login-page label { margin-bottom: 1px !important; font-size: 10.5px !important; } /* Etiquetas más pequeñas. */
    body.login-page input,
    body.login-page select { padding: 5px 8px !important; } /* Campos más compactos. */
    body.login-page .field-hint { margin-top: 1px !important; font-size: 9.5px !important; } /* Ayuda de contraseña más pequeña. */
    body.login-page .legal-accept-checkbox { margin: 2px 0 2px 0 !important; font-size: 11px !important; } /* Casilla legal más compacta. */
    body.login-page .btn { min-height: 30px !important; padding: 5px 10px !important; } /* Botones más bajos. */
    body.login-page .login-language-switcher { margin-top: 4px !important; gap: 6px !important; } /* Selector de idioma más pegado. */
    body.login-page .login-language-switcher button { padding: 3px 8px !important; font-size: 11px !important; } /* Botones de idioma más pequeños. */
    body.login-page .login-card .register-top-btn { margin: 4px auto 0 auto !important; } /* Menos separación antes de Crear usuari. */
    body.login-page .register-back-btn { margin-top: 2px !important; } /* Menos separación antes de Tornar a inici sessió. */
    body.login-page .legal-footer-links { padding-top: 1px !important; font-size: 11px !important; } /* Enlaces legales más compactos. */
} /* Fin adaptación login/registro en pantallas muy bajas (móvil). */

@media (min-height: 701px) and (max-height: 1000px) { /* Ventanas de PC con poca altura (barra de navegador, pestañas, etc. quitan espacio): usa tamaños intermedios entre el móvil y el tamaño normal, en vez de saltar directamente al más pequeño. Por encima de 1000px se usa el tamaño normal, ya comprobado que cabe sin scroll. */
    body.login-page .login-card { padding: 19px !important; }
    body.login-page .login-title { font-size: 22px !important; }
    body.login-page .login-subtitle { margin: 4px 0 12px 0 !important; font-size: 13px !important; }
    body.login-page .login-success,
    body.login-page .login-error { margin-bottom: 9px !important; padding: 7px 9px !important; font-size: 12px !important; }
    body.login-page #registerBox form.login-form { margin-top: 9px !important; } /* Iguala la separación antes de NOMBRE con la de arriba. */
    body.login-page .login-form { gap: 8px !important; }
    body.login-page .field-top { margin-top: 6px !important; }
    body.login-page label { margin-bottom: 3px !important; font-size: 12px !important; }
    body.login-page input,
    body.login-page select { padding: 7px 9px !important; }
    body.login-page .field-hint { margin-top: 3px !important; font-size: 10.5px !important; }
    body.login-page .legal-accept-checkbox { margin: 3px 0 6px 0 !important; font-size: 12px !important; }
    body.login-page .btn { min-height: 34px !important; padding: 7px 11px !important; }
    body.login-page .login-language-switcher { margin-top: 11px !important; gap: 8px !important; }
    body.login-page .login-language-switcher button { padding: 5px 10px !important; font-size: 12px !important; }
    body.login-page .login-card .register-top-btn { margin: 8px auto 0 auto !important; }
    body.login-page .register-back-btn { margin-top: 2px !important; }
    body.login-page .legal-footer-links { padding-top: 3px !important; font-size: 12px !important; }
} /* Fin adaptación intermedia login/registro para ventanas de PC bajas. */

@media (max-width: 1100px) { /* Cabecera en pantalla estrecha o dividida: hay muchas reglas antiguas sin @media que fuerzan "display:flex" y "position:absolute" en .compact-hero/.top-login-tools a cualquier ancho; estas reglas, al usar .app-shell como prefijo, tienen más especificidad y ganan siempre, apilando la cabecera en una sola columna para que nada quede fuera de la pantalla. */

    .app-shell .compact-hero {
        display: grid !important;
        position: static !important;
        grid-template-columns: minmax(0, 1fr) !important;
        grid-template-areas:
            "title"
            "login"
            "class" !important;
        height: auto !important;
        min-height: auto !important;
        align-items: stretch !important;
        padding: 10px 14px !important;
        gap: 8px !important;
    }

    .app-shell .brand-header {
        position: static !important;
        left: auto !important;
        top: auto !important;
        transform: none !important;
        grid-area: title !important;
        order: 0 !important;
        justify-self: center !important;
        width: auto !important;
        max-width: 100% !important;
        margin: 0 !important;
    }

    .app-shell .top-login-tools {
        position: static !important;
        grid-area: login !important;
        order: 1 !important;
        justify-self: stretch !important;
        align-self: start !important;
        width: auto !important;
        margin: 0 !important;
        flex: initial !important;
        right: auto !important;
        top: auto !important;
    }

    /* #headerClassInfo (pila "classe activa" + botó Assistència) fa de box propi, separat de la resta,
       just davall de la capçalera (títol + Preferències/Guardar/Importar/Tancar sessió) */
    .app-shell #headerClassInfo {
        position: static !important;
        grid-area: class !important;
        order: 2 !important;
        justify-self: stretch !important;
        align-self: start !important;
        transform: none !important;
        width: auto !important;
        min-width: 0 !important;
        margin: 0 !important;
        left: auto !important;
        top: auto !important;
        background: #ffffff !important;
        border-radius: 14px !important;
        box-shadow: 0 1px 3px rgba(23, 35, 52, .09), 0 4px 12px rgba(23, 35, 52, .06) !important;
        padding: 10px 12px !important;
    }

    .app-shell .session-box {
        width: auto !important;
        flex-wrap: wrap !important;
        justify-content: flex-end !important;
    }
} /* Fin arreglo cabecera pantalla estrecha */

@media (max-width: 1100px) { /* El layout de Reunions y Recursos (.meetings-layout) usa 3 columnas de ancho fijo (categories/lista + editor); en pantalla estrecha o dividida el editor quedaba comprimido a unos pocos px y era imposible de ver. Se apilan verticalmente. */

    .meetings-layout {
        grid-template-columns: 1fr !important;
        grid-auto-rows: auto !important;
        height: auto !important;
    }

    .meetings-sidebar,
    .meetings-list-panel,
    .meetings-editor-panel {
        width: 100% !important;
        min-width: 0 !important;
        height: auto !important;
    }
} /* Fin arreglo columnas Reunions/Recursos en pantalla estrecha */

@media (max-width: 1100px) { /* La tarjeta "Seguiment de l'alumne/a" (que contiene el Historial de comentaris al final) tiene su propia altura fija al 100% de la columna y overflow:hidden, independiente del scroll de la página que ya se arregló en html/body. Aunque la página pudiera hacer scroll, esta tarjeta recortaba su propio contenido antes de llegar a Comentaris. */
    .student-follow-panel {
        height: auto !important;
        overflow: visible !important;
    }

    /* El Historial de comentaris usa "flex: 1 1 0" para repartirse el espacio restante dentro de una tarjeta de altura fija; al volver la tarjeta "height: auto" arriba, ese 0 de base ya no tiene espacio que repartir y toda la sección se queda con una altura de unos pocos píxeles (por eso no se veían los comentarios aunque la página pudiera hacer scroll). Se le da altura natural en vez de depender del espacio sobrante. */
    .student-history-section {
        flex: none !important;
        height: auto !important;
        overflow: visible !important;
    }

    .student-history-section .collapsible-section-content {
        height: auto !important;
        overflow: visible !important;
    }

    #commentHistory {
        flex: none !important;
        height: auto !important;
    }
} /* Fin arreglo altura de la tarjeta de seguiment en pantalla estrecha */

@media (max-width: 1100px) { /* La barra de pestañas (Quadern docent/Agenda/Reunions/Recursos) tiene un min-width de 190px por pestaña y va centrada con overflow:hidden; en pantalla estrecha esto recorta invisiblemente la primera y la última pestaña (Recursos quedaba prácticamente invisible). El scroll horizontal tampoco dejaba verlas completas de un vistazo, así que se envuelven en dos filas de 2 pestañas en vez de una sola fila con scroll. */
    .app-module-tabs {
        justify-content: center !important;
        flex-wrap: wrap !important;
        row-gap: 4px !important;
        overflow: visible !important;
        height: auto !important;
        min-height: 38px !important;
        padding: 6px 14px !important;
    }

    .app-module-tab {
        flex: 0 1 45% !important; /* Sin flex-grow: las 4 pestañas miden siempre lo mismo, no crecen según lo larga que sea la palabra */
        width: 45% !important;
        min-width: 150px !important;
        /* justify-content se queda en "center" (regla base): cada pestaña centrada individualmente, en vez de alinear los iconos en columna exacta (decisión del usuario, ver commit). */
    }

    .resources-tab .app-svg-icon { /* Recursos usa un <span> en vez de ::before, así que no heredaba la reducción de icono de las otras 3 pestañas y quedaba descentrado. */
        width: 22px !important;
        height: 22px !important;
    }
} /* Fin arreglo barra de pestañas en pantalla estrecha */

.student-dropdown-arrow { /* Flecha del selector de alumne/a: heredaba el tamaño de letra del botón (13px), mucho más grande que la flecha de 10px del resto de selectores bonitos (trimestre, classe...) */
    font-size: 10px !important; /* Iguala el tamaño con .pretty-select-arrow */
} /* Fin flecha selector alumne/a */

/* =========================================================
   GRÀFICA D'EVOLUCIÓ INDIVIDUAL: SELECTOR DE MODE (Activitats/Assignatura/Trimestre/Total)
========================================================= */

.student-chart:not(.expanded-student-chart):not(.solo-student-chart) { /* Caja completa del gráfico individual (vista normal): gana altura para dejar sitio al selector de modo abajo */
    height: 268px !important; /* Antes 240px; los 28px extra los reserva .student-full-body para la nueva fila */
    overflow: visible !important; /* Sin esto, el desplegable del selector de modo quedaba recortado e invisible */
}

.expanded-student-chart { /* Caja de la gráfica dentro del seguiment ampliat. Ahora que ".expanded-student-section:not(.expanded-objectives-section)" es flex de verdad (se arregló el selector ":first-of-type", que no coincidía con el DOM real), esta caja puede ocupar el espacio real disponible en vez de asumir una altura fija (~390px), que en modales o pantallas más bajas de lo previsto se salía de su caja e invadía las secciones de debajo. */
    flex: 1 !important; /* Ocupa el espacio real que le da su contenedor, se adapta a cualquier alto de modal */
    height: auto !important; /* Anula la altura fija anterior */
    max-height: none !important; /* Anula el máximo fijo anterior */
    min-height: 0 !important; /* Permite que se ajuste (y encoja) al espacio real disponible */
    overflow: visible !important; /* Sin esto, el desplegable del selector de modo quedaba recortado e invisible */
}

.solo-student-chart { /* Caja de la gràfica en su propio modal exclusivo (botón ⤢ del propio gràfic): ocupa todo el alto real del modal, que ahora es fijo (92vh) como el seguiment ampliat */
    flex: 1 !important; /* Ocupa el espacio real que le da el modal, en vez de una altura fija propia */
    height: auto !important; /* Anula cualquier altura fija anterior */
    max-height: none !important; /* Anula el máximo fijo anterior */
    min-height: 0 !important; /* Permite que se ajuste al espacio real disponible */
    overflow: visible !important; /* Sin esto, el desplegable del selector de modo quedaba recortado e invisible */
}

.solo-student-chart .student-full-body { /* Con la gràfica tan grande, la columna del eje Y necesita más ancho para números más grandes */
    grid-template-columns: 44px 1fr !important; /* Antes 34px, se queda corta con los números ampliados */
}

.solo-student-chart .student-y-label { /* Números del eje Y: hay espacio de sobra en el modal exclusivo, así que se agrandan */
    font-size: 15px !important; /* Antes 9px */
}

.solo-student-chart .student-full-area,
.solo-student-chart .student-full-y-axis { /* Con las etiquetas inferiores más grandes, reserva más espacio debajo de las barras para que no se solapen */
    height: calc(100% - 90px) !important;
}

.solo-student-chart .student-full-grade { /* Nota numérica bajo cada barra */
    bottom: -36px !important; /* Antes ~-22px: con letra más grande necesita más margen respecto al eje */
    font-size: 32px !important; /* Antes 18px */
}

.solo-student-chart .student-full-name { /* Nombre de la actividad/assignatura/trimestre bajo cada barra (o de la asignatura en modo Total) */
    bottom: -62px !important; /* Antes ~-38px: se aleja para no solaparse con la nota o, en modo Total, con el nombre de trimestre */
    font-size: 15px !important; /* Antes 9px */
}

.solo-student-chart .student-full-group-grade { /* Nota de cada minibarra en modo Total */
    bottom: -20px !important; /* Antes -15px */
    font-size: 14px !important; /* Antes 10px */
}

.solo-student-chart .student-full-group-term { /* Nombre del trimestre de cada minibarra en modo Total */
    bottom: -42px !important; /* Antes -29px: deja hueco antes del nombre de la asignatura */
    font-size: 11px !important; /* Antes 8px */
}

.student-full-body { /* Cuerpo del gráfico (eje + área de barras) */
    height: calc(100% - 18px) !important; /* Deja sitio al final de .student-full-chart para el selector de modo, pegado a las etiquetas del eje X */
}

.student-chart-mode-row { /* Fila del selector de modo: en la esquina inferior izquierda del gráfico, misma distancia al borde izquierdo que el botón de ampliar tiene al derecho */
    position: absolute; /* Se coloca en la esquina de .student-chart, igual que el botón de ampliar */
    left: 8px; /* Misma distancia que abajo */
    bottom: 8px; /* Misma distancia que a la izquierda */
    display: flex; /* Alinea el selector */
    align-items: center; /* Centra verticalmente */
}

.student-chart-mode-row .pretty-select { /* Contenedor del selector visual de modo: se adapta al contenido en vez de tener un ancho fijo */
    width: auto; /* Antes 150px fijos, dejaba mucho hueco vacío con textos cortos como "Total" */
}

.student-chart-mode-row .pretty-select-button { /* Botón visible del selector de modo: también se adapta al texto, en vez de estirarse al 100% del contenedor */
    display: inline-flex !important; /* Permite que el ancho dependa del contenido */
    width: auto !important; /* Anula el 100% del selector bonito genérico */
    gap: 10px; /* Separa el texto de la flecha ahora que no hay espacio automático de sobra */
}

.student-chart-expand-btn { /* Botón para ampliar la gràfica en una finestra gran: solo la flecha, sin fondo ni borde, en la esquina inferior derecha */
    position: absolute; /* Se coloca en la esquina de .student-chart, no dentro de la fila del selector */
    right: 8px; /* Misma distancia que abajo, para quedar centrado en la esquina */
    bottom: 8px; /* Misma distancia que a la derecha */
    width: 20px; /* Área pulsable cómoda aunque solo se vea el icono */
    height: 20px; /* Idem */
    display: flex; /* Centra el icono */
    align-items: center; /* Centra verticalmente */
    justify-content: center; /* Centra horizontalmente */
    border: none; /* Sin borde, solo la flecha */
    background: transparent; /* Sin fondo */
    color: #6b8cb8; /* Azul apagado, discreto */
    font-size: 15px; /* Tamaño del icono */
    line-height: 1; /* Evita que el icono quede desplazado verticalmente */
    cursor: pointer; /* Indica que es pulsable */
}

.student-chart-expand-btn:hover { /* Botón de ampliar gráfica al pasar el ratón */
    color: #2f5f9f; /* Azul más intenso, único cambio visual al pasar el ratón */
}

.student-chart-mode-row .pretty-select-menu { /* Desplegable del selector de modo: siempre hacia arriba para no invadir Objectius, debajo de la gráfica */
    top: auto !important; /* Anula la posición hacia abajo calculada automáticamente */
    bottom: calc(100% + 6px) !important; /* Ancla el desplegable justo encima del botón */
    left: 0 !important; /* Alinea el desplegable con el botón, aunque ahora el botón se ajuste al contenido */
    right: auto !important; /* Anula el ancho automático que antes coincidía con el botón */
    min-width: 130px !important; /* El menú necesita más ancho que el botón cuando este es tan estrecho como "Total" */
}

.student-chart-mode-row .pretty-select-button { /* Botón visible del selector de modo */
    height: 24px !important; /* Más bajo que el estándar, para caber en la fila reservada */
    font-size: 10px !important; /* Texto compacto, antes 11px */
    font-weight: 700 !important; /* Igual de legible con menos tamaño */
    padding: 0 8px !important; /* Espacio interior reducido */
    border-radius: 8px !important; /* Bordes a juego con las barras del gráfico */
}

.student-chart-mode-row .pretty-select-arrow { /* Flecha del selector de modo: la regla general la posiciona en absoluto a la derecha del botón, pero como el botón ahora se ajusta al contenido (width:auto), un elemento absoluto no cuenta para ese ancho y la flecha quedaba fuera de la caja visible o tapada. Se convierte en un elemento normal dentro del flex del botón. */
    position: static !important; /* Anula el posicionamiento absoluto general */
    top: auto !important; /* Ya no hace falta centrar por posición absoluta */
    right: auto !important; /* Ya no hace falta separación desde la derecha */
    transform: none !important; /* Ya no hace falta compensar el centrado absoluto */
    font-size: 9px !important; /* Flecha pequeña a juego con el botón compacto */
}

.student-chart-empty { /* Mensaje cuando el modo elegido no tiene nada que dibujar */
    flex: 1; /* Ocupa el espacio libre entre las insígnies de nota final y el selector de modo */
    display: flex; /* Centra el mensaje */
    align-items: center; /* Centra verticalmente */
    justify-content: center; /* Centra horizontalmente */
    text-align: center; /* Por si el texto ocupa más de una línea */
    color: #8a97ab; /* Gris apagado, igual que otros textos auxiliares del gráfico */
    font-size: 12px; /* Tamaño discreto */
    font-weight: 600; /* Algo de peso para que se lea bien */
    padding: 4px 20px; /* Espacio interior */
}

/* Modo Total: una columna por asignatura con una minibarra por trimestre dentro */

.student-full-group-column { /* Columna de una asignatura en modo Total */
    display: flex; /* Encaja la fila de minibarras dentro de la columna */
    flex-direction: column; /* Una sola fila de minibarras */
    justify-content: flex-end; /* Las minibarras crecen desde abajo */
    height: 100%; /* Ocupa toda la altura disponible de la columna */
}

.student-full-group-bars { /* Fila de minibarras, una por trimestre, dentro de la columna de la asignatura */
    display: flex; /* Coloca las minibarras en fila */
    align-items: flex-end; /* Todas nacen desde abajo */
    justify-content: center; /* Centradas dentro de la columna */
    gap: 6px; /* Separación entre trimestres */
    height: 100%; /* Ocupa toda la altura disponible */
}

.student-full-group-item { /* Minicolumna de un trimestre dentro de la asignatura */
    position: relative; /* Permite posicionar la nota y el nombre del trimestre debajo */
    height: 100%; /* Ocupa toda la altura disponible */
    width: 22px; /* Ancho fijo y estrecho para caber varias por asignatura */
    flex-shrink: 0; /* No se encoge si faltara espacio */
}

.student-full-group-plot { /* Zona vertical de dibujo de la minibarra */
    position: relative; /* Permite colocar la línea de mediana encima */
    height: 100%; /* Ocupa toda la altura de la minicolumna */
    display: flex; /* Alinea la minibarra desde abajo */
    align-items: flex-end; /* La minibarra crece desde abajo */
    justify-content: center; /* Centrada en la minicolumna */
}

.student-full-group-bar { /* Minibarra azul de un trimestre en modo Total */
    width: 100%; /* Ocupa todo el ancho de su minicolumna, en vez del 72% pensado para columnas anchas */
}

.student-full-group-plot .student-full-average { /* Línea verde de mediana dentro de una minibarra: la versión general es fija a 70px, demasiado ancha para esta minicolumna estrecha */
    width: auto !important; /* Anula el ancho fijo de 70px */
    max-width: none !important; /* Anula el máximo fijo de 70px */
    left: 2% !important; /* Vuelve a ajustarse al ancho real de la minicolumna */
    right: 2% !important; /* Idem por el otro lado */
    transform: translateY(50%) !important; /* Ya no hace falta centrar desde el 50% del ancho, solo mantener la altura */
}

.student-full-group-grade { /* Nota del trimestre dentro de la minicolumna */
    position: absolute; /* Se coloca justo debajo de la minibarra */
    left: 0; /* Ocupa todo el ancho de la minicolumna */
    right: 0; /* Idem */
    bottom: -15px; /* Justo debajo del eje de la minibarra */
    text-align: center; /* Centrada */
    font-size: 10px; /* Texto pequeño, hay varias por columna */
    font-weight: 900; /* Bien visible pese al tamaño */
    color: #26364a; /* Mismo color que el resto de notas del gráfico */
}

.student-full-group-term { /* Nombre del trimestre dentro de la minicolumna */
    position: absolute; /* Debajo de la nota */
    left: -6px; /* Puede sobresalir un poco de su minicolumna sin problema, hay separación entre columnas */
    right: -6px; /* Idem */
    bottom: -29px; /* Debajo de la nota del trimestre */
    text-align: center; /* Centrado */
    font-size: 8px; /* Muy pequeño, es solo una referencia (T1, T2...) */
    font-weight: 700; /* Algo de peso para que se lea */
    color: #8a97ab; /* Gris apagado, igual que otros textos auxiliares */
    text-transform: uppercase; /* Igual que el resto de nombres del gráfico */
    white-space: nowrap; /* No se parte en dos líneas */
    overflow: hidden; /* Recorta si el nombre del trimestre es largo */
    text-overflow: ellipsis; /* Indica visualmente que se ha recortado */
}

.sub-modal-card.expanded-chart-modal-card { /* Gràfica ampliada abierta ENCIMA del seguiment ampliat: sin esto, heredaría el tamaño pequeño de un submodal normal (760px) */
    width: 96vw !important; /* Igual de ancho que si se abre sola, sin el seguiment ampliat detrás */
    max-width: 96vw !important; /* Anula el máximo de 760px de los submodales normales */
    height: 92vh !important; /* Altura fija en vez de "auto" (heredado del submodal normal), necesaria para que .solo-student-chart (flex:1) tenga un espacio real que ocupar */
    max-height: 92vh !important; /* Igual de alta */
}

.sub-modal-card.expanded-chart-modal-card .sub-modal-body { /* Cuerpo del submodal de la gràfica: sin esto no era un contenedor flex, así que el flex:1 de .solo-student-chart no tenía ningún efecto (el flex solo funciona si el padre directo es flex) y la gràfica se quedaba con su alto natural en vez de ocupar los 92vh reales de la tarjeta */
    flex: 1 !important; /* Ocupa el espacio real que le da la tarjeta */
    display: flex !important; /* Convierte el cuerpo en un contenedor flex de verdad */
    flex-direction: column !important; /* Coloca la gràfica en vertical, igual que el resto del modal */
    min-height: 0 !important; /* Permite que se ajuste al espacio real disponible */
}

/* =========================================================
   ESTÈTICA MODERNA: ombra suau tipus Apple a les caixes
   principals, i botons d'icona (editar/ampliar/afegir en blau,
   eliminar en roig) amb fons de color en lloc de contorn
========================================================= */

.card,
.side-panel,
.session-box { /* Ombra suau de dues capes tipus iOS/Material, tintada amb el mateix blau fosc del text (--text: #172334) en lloc de negre pur */
    box-shadow: 0 1px 3px rgba(23, 35, 52, 0.09), 0 4px 12px rgba(23, 35, 52, 0.06) !important;
}

.icon-btn.secondary-icon-btn,
.expand-table-btn,
#btnEditStudent,
#btnEditTerm,
#btnEditClass,
#btnNewClass { /* Editar (✎), ampliar (⤢) i afegir (+): mateix blau que la resta de botons principals (#eef5ff), sense contorn */
    background: #eef5ff !important;
    color: #245a9f !important;
    border: none !important;
    box-shadow: 0 1px 3px rgba(23, 35, 52, 0.09), 0 4px 12px rgba(23, 35, 52, 0.06) !important;
}

.icon-btn.secondary-icon-btn:hover,
.expand-table-btn:hover,
#btnEditStudent:hover,
#btnEditTerm:hover,
#btnEditClass:hover,
#btnNewClass:hover { /* Mateixos botons en passar el ratolí */
    background: #e4efff !important;
    color: #1f4f8c !important;
    border: none !important;
}

.icon-btn.danger-icon-btn,
button.rubric-delete-btn,
button.checklist-delete-btn,
#btnDeleteStudent,
#btnDeleteTerm,
#btnDeleteClass { /* Eliminar (×): fons roig pàl·lid, sense contorn */
    background: #fff5f5 !important;
    color: #c5342d !important;
    border: none !important;
    box-shadow: 0 1px 3px rgba(23, 35, 52, 0.09), 0 4px 12px rgba(23, 35, 52, 0.06) !important;
}

.icon-btn.danger-icon-btn:hover,
button.rubric-delete-btn:hover,
button.checklist-delete-btn:hover,
#btnDeleteStudent:hover,
#btnDeleteTerm:hover,
#btnDeleteClass:hover { /* Mateixos botons d'eliminar en passar el ratolí */
    background: #ffe3e1 !important;
    color: #a82a20 !important;
    border: none !important;
}

.login-card .register-top-btn,
#registerSubmitBtn,
#loginSubmitBtn { /* Botons CREAR USUARI i ENTRAR del login: sense contorn, fons blau */
    border: none !important;
    background: #f4f8fe !important;
    color: #2f5f9f !important;
}

.login-card .register-top-btn:hover,
#registerSubmitBtn:hover,
#loginSubmitBtn:hover {
    border: none !important;
    background: #e8f1ff !important;
    color: #234f86 !important;
}

.login-language-switcher button,
.login-page .login-language-switcher button[data-language-option] { /* Idiomes del login: contorn fix, igual actiu que inactiu */
    border: 1px solid #c9d8ee !important;
}

.login-language-switcher button.language-option-active,
.login-page .login-language-switcher button[data-language-option].language-option-active { /* Idioma seleccionat: només canvia el fons, mai el contorn */
    border: 1px solid #c9d8ee !important;
    box-shadow: none !important;
}

.grades-table .checklist-grade-btn:focus, .grades-table .checklist-grade-btn:focus-visible, .grades-table .checklist-grade-btn:active { background: #ffffff !important; border-color: #9fbde6 !important; outline: none !important; box-shadow: none !important; } /* Foco igual que el resto de notas. */

/* =========================================================
   MÉS ESTÈTICA MODERNA: files de Grups sense contorn, capçalera
   de classe activa en gris clar, i Reunions/Recursos sense contorn
========================================================= */

.class-picker-item { /* Files de Curs/Grup/Matèries: fons blau pàl·lid en lloc de blanc amb contorn */
    border: none !important;
    background: #f4f8fe !important;
    box-shadow: 0 1px 3px rgba(23, 35, 52, 0.09), 0 4px 12px rgba(23, 35, 52, 0.06) !important;
}

.class-picker-item-active { /* Element seleccionat: fons una mica més marcat, sense contorn */
    background: #dfeeff !important;
}

.header-class-label { /* Capçalera "Curs Grup - Matèria": gris clar en lloc de blanc amb contorn */
    border: none !important;
    background: #f1f3f6 !important;
}

.meeting-category-card,
.meeting-card { /* Categories de Reunions i targetes de Recursos: sense contorn, ombra suau en lloc del contorn de color */
    border: none !important;
    box-shadow: 0 1px 3px rgba(23, 35, 52, 0.09), 0 4px 12px rgba(23, 35, 52, 0.06) !important;
}

.meeting-category-active,
.meeting-card-active { /* Element seleccionat (Reunions i Recursos comparteixen el mateix component): enfosqueix el fons pastel de la seua categoria perquè es note quin està actiu */
    filter: saturate(1.6) brightness(0.94) !important;
}

/* =========================================================
   MÉS AJUSTOS: cap ombra als botons (només als boxes), sense
   contorn i en minúscula per a tots els botons "Crear/Guardar/
   Calcular" de dins dels modals, Agenda, i caixes de Recursos
========================================================= */

.icon-btn.secondary-icon-btn,
.icon-btn.danger-icon-btn,
.expand-table-btn,
#btnEditStudent,
#btnEditTerm,
#btnEditClass,
#btnNewClass,
#btnDeleteStudent,
#btnDeleteTerm,
#btnDeleteClass,
button.rubric-delete-btn,
button.checklist-delete-btn { /* Cap ombra als botons: només la porten les caixes */
    box-shadow: none !important;
}

.btn-calculate,
.expanded-calculate-btn,
.expanded-new-activity-btn,
.backup-file-label,
#installAppBtn,
#openSuggestionsBtn { /* Tots els botons "Crear/Guardar/Calcular" dels modals: mateix blau exacte que #btnAttendance i la resta de botons principals (#eef5ff/#245a9f), no el #f4f8fe més pàl·lid que feia servir abans i que es notava diferent */
    text-transform: none !important;
    border: none !important;
    box-shadow: none !important;
    background: #eef5ff !important;
    color: #245a9f !important;
}

.btn-calculate:hover,
.expanded-calculate-btn:hover,
.expanded-new-activity-btn:hover,
.backup-file-label:hover,
#installAppBtn:hover,
#openSuggestionsBtn:hover {
    background: #e4efff !important;
    color: #1f4f8c !important;
    border: none !important;
    box-shadow: none !important;
}

.backup-file-label, /* Mantiene el texto en mayúsculas propio de estos botones, que la regla compartida de arriba desactiva */
#installAppBtn,
#saveAccountSettingsBtn,
#manageSubscriptionBtn,
#subscribeNowAnnualBtn,
#subscribeNowMonthlyBtn {
    text-transform: uppercase !important;
}

.modal-actions { position: relative; } /* Punto de referencia para centrar #installAppBtn de forma absoluta, independiente de Veure la guia y Guardar canvis */

#installAppBtn { /* Lo centra de verdad en el pie del modal, alineado con la línea separadora de arriba, en vez de quedar a mitad de camino entre Veure la guia y Guardar canvis */
    position: absolute !important;
    left: 50% !important;
    top: 50% !important;
    transform: translate(-50%, -50%) !important;
    margin: 0 !important;
}

.modal-card:has(.settings-columns) .legal-footer-links { margin-top: 20px !important; } /* Más aire respecto al botón Instal·lar l'aplicació, que ahora queda centrado justo encima */

.agenda-nav-btn { /* Navegació d'Agenda (fletxes/Setmana actual): mateix blau que la resta de botons principals */
    text-transform: none !important;
    border: none !important;
    box-shadow: none !important;
    background: #eef5ff !important;
    color: #245a9f !important;
}

.agenda-nav-btn:hover {
    background: #e4efff !important;
    color: #1f4f8c !important;
    border: none !important;
}

.btn.agenda-delete-btn,
button.agenda-delete-btn { /* Esborrar agenda: en minúscula, sense contorn ni ombra, amb fons roig (button.agenda-delete-btn té més especificitat que la classe sola, cal igualar-la) */
    text-transform: none !important;
    border: none !important;
    box-shadow: none !important;
    background: #fff5f5 !important;
    color: #c5342d !important;
}

.btn.agenda-delete-btn:hover,
button.agenda-delete-btn:hover {
    background: #ffe3e1 !important;
    color: #a82a20 !important;
    border: none !important;
}

.resource-item,
.resource-criterion-item { /* Caixes de Recursos (competències i criteris): sense contorn */
    border: none !important;
}

.resource-item { /* Només la targeta principal porta ombra, no cada fila de criteri a dins */
    box-shadow: 0 1px 3px rgba(23, 35, 52, 0.09), 0 4px 12px rgba(23, 35, 52, 0.06) !important;
}

.card,
.side-panel,
.session-box { /* Trau el contorn residual que quedava sota l'ombra i feia un "cantó" visible a les cantonades */
    border: none !important;
}

.student-chart { /* Caixa del gràfic d'Evolució individual: sense contorn */
    border: none !important;
}

.btn-report,
.comment-term-filter-btn { /* Generar informe, Historial, i els filtres Tots/T1 de l'historial: sense contorn */
    border: none !important;
}

.session-client-button { /* Nom de l'usuari (p. ex. ALBERT SOTO): mateix gris clar que la classe activa, sense contorn */
    border: none !important;
    background: #f1f3f6 !important;
    box-shadow: none !important;
}

.session-logout { /* Tancar sessió: sense contorn */
    border: none !important;
}

.pastel-save { /* Guardar còpia de seguretat: sense contorn, fons lila clar */
    border: none !important;
    background: #f4efff !important;
}

.pastel-import,
#btnImportBackup { /* Importar còpia de seguretat: sense contorn, fons groc clar. #btnImportBackup és un ID amb el seu propi border/background transparent que guanyava sempre a .pastel-import, calia igualar l'especificitat */
    border: none !important;
    background: #fff3df !important;
}

#btnImportBackup:hover,
button#btnImportBackup.session-backup.backup-icon-btn:hover { /* Hi havia també una regla element+ID+2 classes que posava fons blanc en hover, encara més específica; calia igualar-la també */
    background: #fff3df !important;
    border: none !important;
}

#btnSaveMeeting { /* Guardar reunió: #btnSaveMeeting tenia una regla pròpia amb border-color que guanyava a .btn-calculate per especificitat, cal igualar-la explícitament */
    border: none !important;
}

.meetings-list-header .btn { /* + Nova reunió: aquest selector (2 classes) té més especificitat que .btn-calculate sol, calia repetir el fons ací perquè no es perdés. Mateix blau que la resta (#eef5ff), no el #f4f8fe que es notava més pàl·lid */
    background: #eef5ff !important;
    color: #245a9f !important;
    border: none !important;
}

.resource-small-btn { /* + Criteri, dins de Recursos: majúscules com abans, però amb fons més intens perquè es vegi bé */
    text-transform: uppercase !important;
    border: none !important;
    background: #dbe9fc !important;
    color: #1f4f8c !important;
    box-shadow: none !important;
}

.login-success { /* Avís "Gratuït durant la fase beta..." sota el registre: sense contorn */
    border: none !important;
}

/* =========================================================
   MÉS AJUSTOS: alguns botons tenien el fons definit sense
   !important, així que la regla general de "tots els botons
   transparents" (button { background: transparent !important })
   guanyava igualment. Cal repetir el fons amb !important.
========================================================= */

.btn-report,
.comment-term-filter-btn { /* Generar informe, Historial, filtres Tots/T1: recupera el fons que la regla de transparència tapava */
    background: #f4f8fe !important;
    box-shadow: none !important;
}

.btn-report-settings { /* Botó d'ajustos (la rodeta ⚙): sense contorn, amb fons */
    border: none !important;
    background: #f4f8fe !important;
    box-shadow: none !important;
}

.pastel-save,
.pastel-import,
.session-client-button,
.session-logout { /* Reforça sense ombra els botons de la zona d'usuari */
    box-shadow: none !important;
}

.resource-criterion-item { /* Fila de criteri dins la competència: un to una mica més fosc que la targeta que l'envolta perquè es distingeixi */
    background: #eef2f8 !important;
}

.session-box { /* L'usuari veu l'ombra com un contorn: es lleva del tot en aquesta caixa concreta */
    box-shadow: none !important;
}

.student-dropdown-button,
#studentConditionInput,
.pretty-select-button,
.history-item,
.objective-item { /* Selector d'alumne/a, condició, trimestre, ordenar, comentaris i objectius: sense contorn, gris encara més clar que la classe activa (#f1f3f6) */
    border: none !important;
    background: #f8f9fb !important;
}

.student-dropdown-button:hover,
.pretty-select-button:hover,
#prettyTermSelect .pretty-select-button:hover,
#prettySortSelect .pretty-select-button:hover,
#prettyClassSelect .pretty-select-button:hover,
#studentDropdownButton:hover { /* Aquests 4 selectors amb #id tenien una regla que els posava blancs en hover, més específica que la meua d'abans; calia igualar-la */
    background: #eef0f3 !important;
    border: none !important;
}

.session-client-button,
#studentDropdownButton { /* Assegura el centrat vertical exacte del text (el nom es veia més amunt del compte) */
    display: inline-flex !important;
    align-items: center !important;
    line-height: 1 !important;
}

.session-client-button:hover,
.session-client-button:focus,
.session-client-button:active { /* Abans açò tornava a posar un contorn i un fons gairebé blanc: ara es comporta com Tancar sessió (només s'atenua una mica). Calia repetir-ho també en :focus i :active perquè una regla més antiga (que posava background:transparent) seguia guanyant en aquests dos estats concrets, i el fons desapareixia en clicar el botó */
    background: #f1f3f6 !important;
    border: none !important;
    box-shadow: none !important;
    opacity: 0.72 !important;
}

.pastel-save:hover,
.pastel-import:hover { /* El fons #f7faff d'una regla anterior era gairebé blanc i feia que el color quasi no es veiés; es manté el mateix fons que en repòs i és l'opacitat (ja aplicada per .backup-icon-btn:hover) qui s'encarrega d'atenuar-lo, igual que a Tancar sessió */
    border: none !important;
}

.pastel-save:hover {
    background: #f4efff !important;
}

.pastel-import:hover {
    background: #fff3df !important;
}

#modalClose,
.sub-modal-card .modal-header button { /* X de tancar modal: sense contorn, fons transparent, i una mica més cap a la cantonada */
    border: none !important;
    background: transparent !important;
    margin: -6px -6px 0 0 !important;
}

#modalClose:hover,
.sub-modal-card .modal-header button:hover {
    border: none !important;
    background: #f1f3f6 !important;
}

.icon-btn.student-follow-expand-btn { /* Ampliar Seguiment de l'alumne/a: sense fons blau, transparent */
    background: transparent !important;
    box-shadow: none !important;
}

.icon-btn.student-follow-expand-btn:hover {
    background: #f1f3f6 !important;
}

header.hero.compact-hero { /* Barra superior: sense contorn, igual que el nou disseny */
    border: none !important;
}

.app-module-tabs { /* Barra de pestanyes (QUADERN DOCENT/AGENDA/REUNIONS/RECURSOS): sense contorn */
    border: none !important;
}

.student-import-btn { /* Importar alumnat: sense contorn, com la resta de botons principals */
    border: none !important;
}

/* =========================================================
   X DE TANCAR MODAL: SEMPRE A LA MATEIXA DISTÀNCIA DE LA
   CANTONADA. Cada variant de modal (agenda, informe, rúbrica...)
   té el seu propi padding !important, així que un marge negatiu
   sobre el botó (basat en el flux normal del .modal-header) queda
   a una distància diferent segons el padding de cada variant.
   Posicionant-lo en absolut respecte a .modal-card es garanteix
   la mateixa distància per dalt i per la dreta sempre.
========================================================= */

.modal-card,
.sub-modal-card { /* Cal position:relative perquè el fill absolut s'ancori a la targeta, no a un avantpassat */
    position: relative !important;
}

#modalClose,
.sub-modal-card .modal-header button {
    position: absolute !important;
    top: 14px !important;
    right: 14px !important;
    margin: 0 !important;
}

.modal-header,
.sub-modal-card .modal-header {
    padding-right: 44px !important; /* Reserva espai perquè el títol no quedi per sota de la X */
}

.new-group-add-subject-btn,
#addEditClassSubjectBtn { /* + Afegir matèria: fa servir .btn-secondary (contorn), com la resta de botons d'acció ha de quedar sense contorn i amb fons blau */
    text-transform: none !important;
    border: none !important;
    background: #eef5ff !important;
    color: #245a9f !important;
}

.new-group-add-subject-btn:hover,
#addEditClassSubjectBtn:hover {
    background: #e4efff !important;
    color: #1f4f8c !important;
    border: none !important;
}

.expanded-student-readonly { /* Condició dins del Seguiment ampliat: sense contorn, gris clar */
    border: none !important;
    background: #f8f9fb !important;
}

.expanded-save-comment-btn { /* Guardar comentari dins del Seguiment ampliat: sense contorn */
    text-transform: none !important;
    border: none !important;
    background: #eef5ff !important;
    color: #245a9f !important;
}

.expanded-save-comment-btn:hover {
    background: #e4efff !important;
    color: #1f4f8c !important;
    border-color: transparent !important;
}

.student-chart-mode-row .pretty-select-button { /* Selector "Activitats" del gràfic: gris més fort, com la classe activa */
    background: #f1f3f6 !important;
}

.danger-confirm-btn,
button.danger-confirm-btn { /* Botó ELIMINAR de les finestres de confirmació: sense contorn, fons roig (button.danger-confirm-btn té més especificitat que la classe sola) */
    border: none !important;
    background: #fff5f5 !important;
    color: #c5342d !important;
}

.danger-confirm-btn:hover,
button.danger-confirm-btn:hover {
    background: #ffe3e1 !important;
    color: #a82a20 !important;
    border: none !important;
}

.activity-link-competencies-btn,
#btnDuplicateActivity,
#btnEditActivityRubric,
#btnEditActivityChecklist { /* Vincular competències, Duplicar activitat, Editar rúbrica i Editar checklist: fan servir .btn-secondary (contorn), com la resta de botons d'acció han de quedar sense contorn i amb fons blau */
    text-transform: none !important;
    border: none !important;
    background: #eef5ff !important;
    color: #245a9f !important;
}

.activity-link-competencies-btn:hover,
#btnDuplicateActivity:hover,
#btnEditActivityRubric:hover,
#btnEditActivityChecklist:hover {
    background: #e4efff !important;
    color: #1f4f8c !important;
    border: none !important;
}

.checklist-add-row-btn { /* + Afegir ítem del checklist: mateix fons blau sense contorn que la resta de botons d'acció, però mantenint les majúscules (a diferència d'Editar checklist) */
    border: none !important;
    background: #eef5ff !important;
    color: #245a9f !important;
}

.checklist-add-row-btn:hover {
    background: #e4efff !important;
    color: #1f4f8c !important;
    border: none !important;
}

.activity-competency-chip { /* Etiqueta de competència vinculada: gris clar en lloc de blau */
    background: #f1f3f6 !important;
    color: #3a4556 !important;
}

.activity-competency-chip button {
    color: #3a4556 !important;
}

/* =========================================================
   ALGUNS SELECTORS "BONICS" HAN DE QUEDAR-SE COM ABANS (fons
   blanc, contorn normal): Tipus de qualificació, Categoria de
   Nova reunió, i els selectors de Descarregar competències. No
   són com Trimestre/Ordenar/Alumne/a: aquí el contorn ajuda a
   veure que és un desplegable real dins d'un formulari.
========================================================= */

#newActivityTypeButton,
#editActivityTypeButton,
#prettyNewMeetingCategory .pretty-select-button,
#prettyResourceCountrySelect .pretty-select-button,
#prettyResourceRegionSelect .pretty-select-button,
#prettyResourceStageSelect .pretty-select-button,
#prettyResourceGradeSelect .pretty-select-button,
#prettyAgendaReminderMinutesSelect .pretty-select-button {
    background: #ffffff !important;
    border: 1px solid var(--border) !important;
}

#newActivityTypeButton:hover,
#editActivityTypeButton:hover,
#prettyNewMeetingCategory .pretty-select-button:hover,
#prettyResourceCountrySelect .pretty-select-button:hover,
#prettyResourceRegionSelect .pretty-select-button:hover,
#prettyResourceStageSelect .pretty-select-button:hover,
#prettyResourceGradeSelect .pretty-select-button:hover,
#prettyAgendaReminderMinutesSelect .pretty-select-button:hover {
    background: #ffffff !important;
    border: 1px solid #a9c3e8 !important; /* Antes solo border-color: dependía de que otra regla sin :hover rellenara el estilo/grosor del borde, algo frágil. Se fija el borde completo para que no dependa de eso. */
}

.meeting-category-card-red.meeting-category-active,
.meeting-card-red.meeting-card-active { /* Vermell seleccionat: encara més suau que la versió anterior */
    background: #ffdada !important;
}

.meeting-category-card-orange.meeting-category-active,
.meeting-card-orange.meeting-card-active { /* Taronja seleccionat */
    background: #ffe2c1 !important;
}

.meeting-category-card-green.meeting-category-active,
.meeting-card-green.meeting-card-active { /* Verd seleccionat */
    background: #e3f8ed !important;
}

.meeting-category-card-purple.meeting-category-active,
.meeting-card-purple.meeting-card-active { /* Lila seleccionat */
    background: #f1e7fe !important;
}

.meeting-category-card-blue.meeting-category-active,
.meeting-card-blue.meeting-card-active { /* Blau seleccionat */
    background: #e6f1ff !important;
}

.meeting-category-card-yellow.meeting-category-active,
.meeting-card-yellow.meeting-card-active { /* Groc seleccionat */
    background: #fff4bb !important;
}

.meeting-category-card-pink.meeting-category-active,
.meeting-card-pink.meeting-card-active { /* Rosa seleccionat */
    background: #ffd9e9 !important;
}

.meeting-category-card:hover,
.meeting-card:hover { /* En passar el cursor, igual que Guardar/Importar: es torna més clar */
    opacity: .72 !important;
}

#prettyAgendaReminderMinutesSelect .pretty-select-menu { /* El z-index base (80) quedava per davall del modal (9999) i el desplegable es veia tallat */
    z-index: 10020 !important;
}

#modalBody:has(#agendaReminderMinutesField) { /* Hi havia una regla anterior (#modalBody:has(.settings-columns)) que forçava overflow-y:auto en tot Personalització; això feia que el desplegable, en obrir-se, allargués el cos del modal i aparegués un scroll general en lloc de flotar per sobre. Com que .settings-columns també conté #agendaReminderMinutesField, aquesta regla més específica guanya i recupera l'overflow visible només per a aquest cas. */
    overflow: visible !important;
}

.agenda-mobile-notice { /* Avís que substitueix el calendari horari en pantalles petites */
    display: none;
    text-align: center;
    color: var(--muted);
    font-size: 13px;
    line-height: 1.5;
    padding: 24px 16px;
}

@media (max-width: 1100px) { /* El calendari per hores no cap ni és usable en pantalla estreta: s'amaga i es mostra un avís en el seu lloc */
    .agenda-grid {
        display: none !important;
    }

    .agenda-mobile-notice {
        display: block;
    }
}

#prettyNewMeetingCategory .pretty-select-button,
#prettyNewMeetingCategory .pretty-select-button span:first-child,
#prettyNewMeetingCategory .pretty-select-option { /* Hi havia una regla antiga que llevava la negrita només ací; ara amb la mateixa negreta real (500) que Trimestre i Ordenar */
    font-weight: 500 !important;
}

#prettyResourceCountrySelect .pretty-select-button,
#prettyResourceRegionSelect .pretty-select-button,
#prettyResourceStageSelect .pretty-select-button,
#prettyResourceGradeSelect .pretty-select-button { /* Selectors de Descarregar competències: mateixa negreta real (500) que la resta de selectors */
    font-weight: 500 !important;
}

@media (max-width: 1100px) { /* En pantalla estreta el desplegable de Matèries (últim camp del modal, prop del final) sol quedar molt a prop de la vora inferior */
    .resource-multi-menu {
        top: auto !important;
        bottom: calc(100% + 6px) !important;
    }
}

.pretty-select-option { /* Les opcions del desplegable (Alfabètic, Nota final...) es veien més fines que el text mostrat al botó; ara la mateixa negreta real (500) que fan servir els botons */
    font-weight: 500 !important;
}

#prettySortSelect .pretty-select-option,
#prettyTermSelect .pretty-select-option { /* Hi havia una regla antiga (#prettySortSelect *, #prettyTermSelect *) que pujava la negreta de les opcions a 600 només ací */
    font-weight: 500 !important;
}

#expandedPrettyStudentSelect .pretty-select-option { /* Seguiment ampliat: mateixa negreta (600) que el nom de l'alumne al botó, un cas ja consolidat i diferent de la resta */
    font-weight: 600 !important;
}

.meetings-sidebar,
.meetings-list-panel,
.meetings-editor-panel { /* Categories/Reunions/Editor a Reunions, i Cursos/Matèries/Competències a Recursos: cada columna com un box separat, igual que les caixes de la pantalla principal */
    border: none !important;
    box-shadow: 0 1px 3px rgba(23, 35, 52, .09), 0 4px 12px rgba(23, 35, 52, .06) !important;
}

.meetings-card,
.resources-card { /* La capa blanca que embolicava els tres boxes ja no fa falta: ara floten directament sobre el fons blau, igual que a QUADERN DOCENT */
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
}

.meeting-category-card,
.meeting-card,
.resource-item { /* Les targetes individuals (categories, reunions, cursos, matèries, competències) no han de portar ombra pròpia; només la caixa exterior que les conté */
    box-shadow: none !important;
}

#deleteAccountBtn { /* Botó Eliminar el compte: mateix estil borderless que la resta de botons "perillosos" (danger-confirm-btn) */
    border: none !important;
    background: #fff5f5 !important;
    color: #c5342d !important;
}

#deleteAccountBtn:hover {
    background: #ffe3e1 !important;
    color: #a82a20 !important;
    border: none !important;
}

.appearance-option-active { /* Dia/Nit i Idioma: igual que al login, l'opció activa es pinta amb un fons, no amb un contorn de color diferent */
    border-color: #c9d8ee !important;
    background: #eef5ff !important;
    color: #234f86 !important;
}

.grades-table tbody tr:last-child td { /* La fila última ja no suma el seu propi border-bottom al de la capsa exterior (es veia el doble de gruixut) */
    border-bottom: none !important;
}

.attendance-table tbody tr:last-child td { /* Mateix motiu que la taula de notes: la fila última ja no suma el seu propi border-bottom al de la capsa exterior (.attendance-table-wrap) */
    border-bottom: none !important;
}

.agenda-cell-last-row { /* Mateix motiu que la taula de notes: la fila d'hora final ja no suma el seu propi border-bottom al del contenidor de l'agenda */
    border-bottom: none !important;
}

.meetings-sidebar,
.meetings-list-panel { /* Una regla antiga deixava overflow:visible per a un efecte d'elevació en hover que ja no existeix; això feia que el contingut de dins (targetes, files) sobreïxi per la cantonada arrodonida i tape la corba de l'ombra */
    overflow: hidden !important;
}

.card { /* Al projecte de referència (selector-valvulas-industriales) .card mai té overflow:hidden, ni a la base ni a la versió moderna amb shadow. Afegir-lo ací aquesta sessió és probablement l'origen de tot el problema del tall a la cantonada */
    overflow: visible !important;
}

.card,
.meetings-sidebar,
.meetings-list-panel { /* El vertader problema era el contenidor pare (.dashboard-column/.meetings-card) tallant l'ombra, no aquest element; ara que això està arreglat, tornem al box-shadow normal (igual que AGENDA i la capçalera), perquè filter:drop-shadow() es veia massa marcat */
    box-shadow: 0 1px 3px rgba(23, 35, 52, .09), 0 4px 12px rgba(23, 35, 52, .06) !important;
    filter: none !important;
}

header.hero.compact-hero { /* La barra superior va perdre el contorn en un canvi anterior d'aquesta sessió però mai va rebre la mateixa ombra que la resta de caixes */
    box-shadow: 0 1px 3px rgba(23, 35, 52, .09), 0 4px 12px rgba(23, 35, 52, .06) !important;
}

.dashboard-columns,
.dashboard-column,
.meetings-layout { /* Mateixa raó que el padding de .main: l'ombra (difuminat 12px) necessita 12px per esvair-se sencera entre dues caixes veïnes; amb el gap just a 12px encara es notava un pèl. 16px dona el mateix marge de 4px */
    gap: 16px !important;
}

.dashboard-column { /* Trobat inspeccionant l'element real: el tall no era de la targeta, sinó del CONTENIDOR (.dashboard-column), que té overflow:hidden i zero espai horitzontal amb la targeta de dins (la targeta ocupa el 100% de l'ample). L'ombra necessita uns quants px en diagonal a cada cantonada, i el contenidor la tallava en sec en lloc de deixar-la difuminar */
    overflow: visible !important;
}

.meetings-card,
.resources-card { /* Mateix motiu: comparteixen la classe .card, que té overflow:hidden per retallar les targetes de dins de GRUPS; però .meetings-card/.resources-card no en necessiten, i eixe overflow:hidden tallava en sec l'ombra dels panells (Categories/Reunions/Cursos/Matèries) que hi ha dins */
    overflow: visible !important;
}

.main { /* Ara que .card ja no es retalla a si mateix, .main SÍ que necessita prou espai perquè l'ombra (difuminat de 12px sense desplaçament horitzontal) es vegi sencera als costats esquerre/dret abans que .main la talle; amb 12px just just s'hi arribava */
    padding: 16px !important;
    background: transparent !important; /* .main tenia un fons propi (#f5f6f8) lleugerament diferent del fons real de la pàgina (body, #f5f8fc) */
}

.card,
.meetings-sidebar,
.meetings-list-panel,
.meetings-editor-panel,
header.hero.compact-hero { /* Sense ombra: estètica plana consolidada per a targetes, panells de reunions i capçalera */
    box-shadow: none !important;
}

#expandedCommentText { /* Nou comentari dins la finestra ampliada de Seguiment de l'alumne: li faltava el mateix fons blau clar que ja tenia el textarea de la pantalla normal (.comment-write-card textarea), perquè és un textarea diferent fora d'eixa targeta */
    background: #fbfdff !important;
    border: 1px solid #d9e4f2 !important;
    box-shadow: inset 0 1px 3px rgba(31, 58, 92, 0.04) !important;
}

.class-picker-item { /* Sense ombra: estètica plana consolidada per a les files de Curs/Grup/Matèries */
    box-shadow: none !important;
}

.grades-table .column-filter-btn:hover, /* Filtres ALUMNE/A i CONDICIÓ de la taula de notes. Cal repetir ".grades-table" perquè ".grades-table button:hover" (amb un selector d'element addicional) té més especificitat que ".column-filter-btn:hover" sol i li guanyava la vora. */
.grades-table .column-filter-btn:focus,
.grades-table .column-filter-btn:active,
.grades-table .activity-menu-btn:hover, /* Tres punts d'activitat de la taula de notes, mateix motiu */
.grades-table .activity-menu-btn:focus,
.grades-table .activity-menu-btn:active { /* Manté el fons que ja apareixia en passar el cursor, però sense la vora que es marcava de més */
    border-color: transparent !important;
    outline: none !important;
    box-shadow: none !important;
}

.column-filter-btn { /* Iguala la mida de la fletxa amb .student-dropdown-arrow (10px): amb 12px es veia una mica tallada per baix dins la caixa de 24px */
    font-size: 10px !important;
}

#prettyReportLengthOption .pretty-select-button, /* Selectors de LONGITUD i TO dins Configuració de l'informe IA: la regla general ".pretty-select-button" els deixava en gris sense vora; aquests dos han de quedar transparents amb la vora visible, com un camp actiu normal */
#prettyReportToneOption .pretty-select-button {
    background: transparent !important;
    border: 1px solid var(--border) !important;
}

#prettyReportLengthOption .pretty-select-button:hover,
#prettyReportToneOption .pretty-select-button:hover {
    background: transparent !important;
    border-color: var(--primary) !important;
}

/* =========================================================
   TOUR GUIAT DE BENVINGUDA (primer inici de sessió)
========================================================= */

#onboardingOverlay { /* Contenedor de todo el tour: no ocupa espacio propio, cada hijo es fixed */
    position: fixed;
    inset: 0;
    z-index: 2100000;
}

.onboarding-click-blocker { /* Capa invisible que evita interactuar con la app mientras dura el tour */
    position: fixed;
    inset: 0;
    z-index: 2100000;
    background: transparent;
    cursor: default;
}

.onboarding-spotlight { /* Marco que ilumina el elemento señalado, oscureciendo el resto de la pantalla */
    position: fixed;
    z-index: 2100001;
    border-radius: 8px;
    box-shadow: 0 0 0 9999px rgba(10, 20, 35, 0.6);
    border: 2px solid #ffffff;
    pointer-events: none;
    transition: top 0.25s ease, left 0.25s ease, width 0.25s ease, height 0.25s ease, opacity 0.15s ease;
}

.onboarding-spotlight.hidden { /* Se oculta en los pasos de bienvenida/cierre, que no señalan nada */
    box-shadow: 0 0 0 9999px rgba(10, 20, 35, 0.6);
    border: none;
    width: 0;
    height: 0;
    top: 50%;
    left: 50%;
}

.onboarding-spotlight.onboarding-spotlight-fading { /* Oculta el marco mientras se reposiciona al cambiar de paso, para que desaparezca y reaparezca en vez de deslizarse por la pantalla */
    opacity: 0;
}

.onboarding-tooltip { /* Tarjeta con el texto del paso actual y los botones de navegación */
    position: fixed;
    z-index: 2100002;
    width: 300px;
    max-width: calc(100vw - 32px);
    background: var(--panel);
    border: 1px solid var(--border);
    border-radius: 14px;
    padding: 18px;
    box-shadow: 0 12px 32px rgba(15, 30, 55, 0.28);
    font-family: var(--app-font);
    transition: top 0.25s ease, left 0.25s ease, opacity 0.15s ease;
}

.onboarding-tooltip.onboarding-tooltip-hidden { /* Oculta la tarjeta mientras se reposiciona al cambiar de paso, para que texto y marco se muevan a la vez */
    opacity: 0;
    pointer-events: none;
}

.onboarding-tooltip.onboarding-tooltip-centered { /* Pasos sin elemento señalado: tarjeta centrada como un modal */
    top: 50% !important;
    left: 50% !important;
    transform: translate(-50%, -50%);
    width: 340px;
}

.onboarding-tooltip-step { /* "Pas 2 de 5" */
    font-size: 12px;
    font-weight: 700;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 6px;
}

.onboarding-tooltip-title { /* Título del paso */
    margin: 0 0 8px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--text);
}

.onboarding-tooltip-text { /* Texto explicativo del paso */
    margin: 0 0 16px 0;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--text);
}

.onboarding-tooltip-actions { /* Fila inferior: Saltar a la izquierda, Anterior/Siguiente a la derecha */
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

.onboarding-skip-btn { /* Enlace discreto para saltar el tour entero */
    background: transparent !important;
    border: none !important;
    color: var(--muted) !important;
    font-size: 12.5px !important;
    font-weight: 600 !important;
    text-transform: none !important;
    padding: 0 !important;
    min-height: auto !important;
    cursor: pointer;
}

.onboarding-skip-btn:hover {
    color: var(--text) !important;
    text-decoration: underline;
}

.onboarding-tooltip-nav { /* Agrupa Anterior y Siguiente/Finalizar */
    display: flex;
    gap: 8px;
}

.onboarding-tooltip-nav .btn { /* Botones más compactos que el tamaño estándar de la app */
    min-height: 34px !important;
    padding: 6px 14px !important;
    font-size: 12.5px !important;
    width: auto !important;
    border-radius: 8px !important; /* Menos redondeado que el estándar de la app (14px) */
}

.onboarding-prev-btn.hidden { /* Oculto en el primer paso, no hay a dónde volver */
    display: none !important;
}

.onboarding-replay-btn { /* "Veure la guia" dentro de Personalització: separado a la esquina inferior izquierda, lejos de Guardar canvis */
    margin-right: auto !important;
    border-radius: 8px !important; /* Mismo redondeado que Anterior/Siguiente del tour */
}

