/*
 * Tema del panel del entrenador (/trainer) — Fittrena.
 *
 * Traducción a Filament 3.3 del design system del prototipo
 * (docs/prototipo-panel/styles.css + SPEC.md §1). Va como CSS plano por
 * render hook, no como tema compilado: el repo usa Tailwind v4 y el tema
 * oficial de Filament exige la toolchain v3 (misma decisión que
 * resources/views/filament/estilos-marca.blade.php).
 *
 * Estrategia en tres capas:
 *   1. Tokens del prototipo (:root) + REDEFINICIÓN de la escala --gray-*
 *      que Filament inyecta en <head> (assets.blade.php): casi todo el
 *      panel se pinta con rgba(var(--gray-N)), así que remapear la escala
 *      al grafito re-viste tablas, formularios y modales de golpe.
 *   2. Overrides fi-* puntuales (cada selector copiado del markup real de
 *      vendor/filament 3.3, no adivinado): tipografía display, radios,
 *      sidebar, topbar, badges.
 *   3. Clases propias .ft-* para las pantallas custom (dashboard, drawer,
 *      editor de plan), traducidas de los componentes del prototipo.
 *
 * El panel fuerza modo oscuro (darkMode isForced en el provider): aquí no
 * hay variantes claras.
 */

/* ---------- 1. Tokens de marca (compartidos con la web pública) */
@import url('/css/tokens.css');

/*
 * Remapeo de la escala gray de Filament (assets.blade.php la define antes
 * en el <head>; este archivo carga en HEAD_END y la pisa). Tripletas RGB:
 * las utilidades compiladas hacen rgba(var(--gray-N), alpha).
 * En dark Filament usa: 950 fondo de página · 900 tarjetas/topbar/sidebar ·
 * 800 hover/bordes · 500-400 texto secundario.
 */
:root {
    --gray-950: 11, 11, 13;    /* --graphite  */
    --gray-900: 19, 20, 23;    /* --carbon    */
    --gray-800: 28, 30, 34;    /* --slate     */
    --gray-700: 40, 43, 48;
    --gray-600: 58, 61, 68;
    --gray-500: 122, 124, 130; /* texto muted */
    --gray-400: 152, 154, 160;
    --gray-300: 190, 191, 196;
    --gray-200: 217, 218, 222;
    --gray-100: 236, 236, 239;
    --gray-50: 240, 240, 240;  /* --white     */
}

/* ---------- 2. Overrides de Filament ---------- */

/* Base de página */
.fi-body {
    background-color: var(--bg-page);
    color: var(--text-body);
    font-family: var(--font-body);
    -webkit-font-smoothing: antialiased;
}

.fi-body ::selection {
    background: var(--lime);
    color: var(--text-on-accent);
}

.fi-body ::-webkit-scrollbar {
    width: 10px;
    height: 10px;
}

.fi-body ::-webkit-scrollbar-thumb {
    background: var(--white-a10);
    border-radius: 8px;
}

.fi-body ::-webkit-scrollbar-track {
    background: transparent;
}

/* --- Sidebar (components/sidebar/index|group|item.blade.php) --- */
.fi-sidebar {
    background-color: var(--bg-page);
    border-inline-end: 1px solid var(--border-hairline);
}

.fi-sidebar-header {
    background-color: var(--bg-page) !important;
    box-shadow: none !important;
}

/* Cabeceras de grupo: uppercase faint como el prototipo */
.fi-sidebar-group-label {
    font-family: var(--font-body);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--text-faint);
}

.fi-sidebar-item-button {
    border-radius: var(--radius-sm);
    transition: background-color var(--dur-fast) var(--ease-ui);
}

.fi-sidebar-item-label {
    font-family: var(--font-display);
    font-size: 13.5px;
    font-weight: 500;
    color: var(--white-a75);
}

.fi-sidebar-item-icon {
    color: var(--white-a45);
}

.fi-sidebar-item:not(.fi-sidebar-item-active) .fi-sidebar-item-button:hover {
    background-color: var(--surface-card);
}

/* Ítem activo: fondo raised + texto lima 700 (SPEC §2) */
.fi-sidebar-item-active .fi-sidebar-item-button {
    background-color: var(--surface-raised) !important;
}

.fi-sidebar-item-active .fi-sidebar-item-label {
    color: var(--lime) !important;
    font-weight: 700;
}

.fi-sidebar-item-active .fi-sidebar-item-icon {
    color: var(--lime) !important;
}

/* --- Topbar (components/topbar/index.blade.php: el hijo directo lleva
       las utilidades bg-white/dark:bg-gray-900 + shadow) --- */
.fi-topbar > div {
    background-color: rgba(11, 11, 13, .78) !important;
    -webkit-backdrop-filter: var(--blur-nav);
    backdrop-filter: var(--blur-nav);
    box-shadow: none !important;
    border-bottom: 1px solid var(--border-hairline);
    --tw-ring-color: transparent;
}

/* --- Cabecera de página (components/header/index.blade.php) --- */
.fi-header-heading {
    font-family: var(--font-display) !important;
    font-weight: 900 !important;
    font-size: 30px !important;
    letter-spacing: -.03em;
    color: var(--text-body);
}

.fi-header-subheading {
    font-size: 13.5px !important;
    color: var(--text-muted) !important;
    max-width: 620px;
}

.fi-breadcrumbs-item-label {
    font-size: 12px;
    color: var(--text-faint);
}

/* --- Secciones / tarjetas (support section.blade.php) --- */
.fi-section {
    background-color: var(--surface-card) !important;
    border: 1px solid var(--border-card);
    border-radius: var(--radius-xl) !important;
    box-shadow: none !important;
    --tw-ring-color: transparent;
}

.fi-section-header-heading {
    font-family: var(--font-display) !important;
    font-weight: 900 !important;
    letter-spacing: -.02em;
}

.fi-section-header-description {
    color: var(--text-muted) !important;
    font-size: 12.5px;
}

/* --- Tablas (tables/index.blade.php) --- */
.fi-ta-ctn {
    background-color: var(--surface-card) !important;
    border: 1px solid var(--border-card);
    border-radius: var(--radius-xl) !important;
    box-shadow: none !important;
    --tw-ring-color: transparent;
}

.fi-ta-header-cell-label {
    font-family: var(--font-body);
    font-size: 11px !important;
    font-weight: 600 !important;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--text-faint) !important;
}

.fi-ta-row {
    transition: background-color var(--dur-fast) var(--ease-ui);
}

.fi-ta-row:hover {
    background-color: var(--surface-raised) !important;
}

.fi-ta-cell,
.fi-ta-text {
    color: var(--text-body);
}

.fi-ta-text-item-label {
    font-size: 13.5px;
}

.fi-ta-empty-state-heading {
    font-family: var(--font-display) !important;
    font-weight: 900 !important;
}

.fi-ta-empty-state-icon-ctn {
    background-color: var(--lime-a14) !important;
    border-radius: var(--radius-pill);
}

.fi-ta-empty-state-icon-ctn .fi-icon {
    color: var(--lime);
}

/* --- Botones (support button/index.blade.php) --- */
.fi-btn {
    font-family: var(--font-display);
    font-weight: 700;
    border-radius: var(--radius-sm) !important;
    box-shadow: none !important;
    transition: transform var(--dur-fast) var(--ease-ui),
        background-color var(--dur-fast) var(--ease-ui),
        color var(--dur-fast) var(--ease-ui);
}

.fi-btn:active {
    transform: scale(.97);
}

/* Secundario (color gray): borde fuerte sobre transparente, como el
   `secondary` del prototipo */
.fi-btn.fi-color-gray {
    background-color: transparent !important;
    border: 1px solid var(--border-strong);
    color: var(--text-body) !important;
    --tw-ring-color: transparent;
}

.fi-btn.fi-color-gray:hover {
    background-color: var(--surface-raised) !important;
}

/* Peligro: coral del SPEC */
.fi-btn.fi-color-danger:not(.fi-btn-outlined) {
    background-color: var(--coral) !important;
    color: var(--graphite) !important;
}

/* --- Badges (support badge.blade.php): CUADRADOS como el design system
       del prototipo — uppercase con tracking y radio pequeño. Las píldoras
       (punto + label) quedan solo para estados (.ft-pill). --- */
.fi-badge {
    font-family: var(--font-body);
    font-size: 10px !important;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    border-radius: 7px !important;
    padding: 4px 9px !important;
    box-shadow: none !important;
    --tw-ring-color: transparent;
}

.fi-badge.fi-color-success {
    background-color: var(--lime-a14) !important;
    color: var(--lime) !important;
}

.fi-badge.fi-color-info,
.fi-badge.fi-color-primary {
    background-color: var(--lavender-a16) !important;
    color: var(--lavender) !important;
}

.fi-badge.fi-color-danger,
.fi-badge.fi-color-warning {
    background-color: var(--coral-a14) !important;
    color: var(--coral) !important;
}

.fi-badge.fi-color-gray {
    background-color: var(--white-a08) !important;
    color: var(--white-a75) !important;
}

/* --- Formularios --- */
.fi-fo-field-wrp-label .fi-fo-field-wrp-label-text,
.fi-fo-field-wrp-label span {
    font-family: var(--font-body);
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.fi-fo-field-wrp-helper-text,
.fi-fo-field-wrp-hint-label {
    color: var(--text-faint) !important;
    font-size: 11.5px;
}

/* Los campos van con borde propio: el ring de Filament es una utilidad
   inline que no se deja pisar por variable, y sin borde el input se
   camufla con la tarjeta (mismo fondo). */
.fi-input-wrp {
    background-color: var(--surface-raised) !important;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm) !important;
    box-shadow: none !important;
    --tw-ring-color: transparent !important;
}

.fi-input-wrp:focus-within {
    border-color: var(--lime);
}

.fi-input {
    color: var(--text-body) !important;
    font-size: 13.5px;
}

.fi-input::placeholder {
    color: var(--text-faint);
}

.fi-checkbox-input,
.fi-radio-input {
    border-color: var(--border-strong);
    background-color: var(--surface-card);
}

/* Ver estilos-marca.blade.php: el tick negro sobre lima ya viene de allí */

/* --- Dropdowns / menú de usuario --- */
.fi-dropdown-panel {
    background-color: var(--surface-raised) !important;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-lg) !important;
    box-shadow: var(--shadow-lift) !important;
    --tw-ring-color: transparent;
}

.fi-dropdown-list-item-label {
    color: var(--text-body);
    font-size: 13px;
}

.fi-dropdown-list-item:hover {
    background-color: var(--white-a08) !important;
}

/* «Cerrar sesión» en coral: es el único ítem danger del menú de usuario */
.fi-dropdown-list-item.fi-color-danger .fi-dropdown-list-item-label,
.fi-dropdown-list-item.fi-color-danger .fi-dropdown-list-item-icon {
    color: var(--coral) !important;
}

/* --- Modales --- */
.fi-modal-window {
    background-color: var(--surface-card) !important;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-xl) !important;
    box-shadow: var(--shadow-lift) !important;
}

.fi-modal-heading {
    font-family: var(--font-display) !important;
    font-weight: 900 !important;
    letter-spacing: -.02em;
}

.fi-modal-close-overlay {
    background-color: rgba(11, 11, 13, .66) !important;
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
}

/* --- Tabs de listado (fi-tabs, usadas por getTabs()) → píldoras --- */
.fi-tabs {
    background-color: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    --tw-ring-color: transparent;
    gap: 8px;
}

.fi-tabs-item {
    border-radius: var(--radius-pill) !important;
    border: 1px solid var(--border-strong);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12.5px;
    color: var(--white-a75);
}

.fi-tabs-item.fi-active,
.fi-tabs-item-active {
    background-color: var(--lime) !important;
    border-color: var(--lime);
    color: var(--text-on-accent) !important;
}

.fi-tabs-item.fi-active .fi-tabs-item-label,
.fi-tabs-item-active .fi-tabs-item-label {
    color: var(--text-on-accent) !important;
}

/* --- Widgets de stats (mientras existan) --- */
.fi-wi-stats-overview-stat {
    background-color: var(--surface-card) !important;
    border: 1px solid var(--border-card);
    border-radius: var(--radius-xl) !important;
    box-shadow: none !important;
    --tw-ring-color: transparent;
}

.fi-wi-stats-overview-stat-value {
    font-family: var(--font-display) !important;
    font-weight: 900 !important;
    letter-spacing: -.02em;
}

/* --- Notificaciones (toasts) --- */
.fi-no-notification {
    background-color: var(--surface-raised) !important;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-lg) !important;
    box-shadow: var(--shadow-lift) !important;
    --tw-ring-color: transparent;
}

/* --- Paginación / toolbar de tabla --- */
.fi-ta-search-field .fi-input-wrp {
    border-radius: var(--radius-pill) !important;
}

.fi-pagination-item {
    border-radius: var(--radius-sm);
}

/* ---------- 3. Componentes propios (.ft-*) ---------- */

/* Tarjeta base */
.ft-card {
    background: var(--surface-card);
    border: 1px solid var(--border-card);
    border-radius: var(--radius-xl);
    padding: 22px;
}

.ft-card--raised {
    background: var(--surface-raised);
}

.ft-card--coach {
    border-color: var(--lavender-a35);
    background: linear-gradient(160deg, var(--lavender-a16), var(--surface-card) 55%);
}

/* StatTile: cifra GRANDE arriba, label uppercase y meta debajo (prototipo) */
.ft-stat {
    background: var(--surface-card);
    border: 1px solid var(--border-card);
    border-radius: var(--radius-xl);
    padding: 20px 22px;
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.ft-stat__label {
    font-family: var(--font-body);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--white-a75);
}

.ft-stat__value {
    font-family: var(--font-display);
    font-size: 38px;
    font-weight: 900;
    letter-spacing: -.03em;
    line-height: 1;
    color: var(--text-body);
}

.ft-stat__value--lime { color: var(--lime); }
.ft-stat__value--lavender { color: var(--lavender); }
.ft-stat__value--coral { color: var(--coral); }

.ft-stat__meta {
    font-size: 11.5px;
    color: var(--text-muted);
}

/* Badge cuadrado propio (labels tipo «TU CÓDIGO», «PLAN FREE», «PASO 1 DE 4») */
.ft-badge {
    display: inline-flex;
    align-items: center;
    border-radius: 7px;
    background: var(--white-a08);
    padding: 4px 9px;
    font-family: var(--font-body);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--white-a75);
}

.ft-badge--lima { background: var(--lime-a14); color: var(--lime); }
.ft-badge--lavanda { background: var(--lavender-a16); color: var(--lavender); }
.ft-badge--coral { background: var(--coral-a14); color: var(--coral); }

/* Píldora de estado: punto 6px + label (SPEC §3.2) */
.ft-pill {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border-radius: var(--radius-pill);
    border: 1px solid var(--border-hairline);
    background: var(--white-a08);
    padding: 4px 11px;
    font-family: var(--font-display);
    font-size: 11.5px;
    font-weight: 700;
    color: var(--white-a75);
}

.ft-pill::before {
    content: '';
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: currentColor;
}

.ft-pill--lime { color: var(--lime); background: var(--lime-a14); border-color: transparent; }
.ft-pill--lavender { color: var(--lavender); background: var(--lavender-a16); border-color: transparent; }
.ft-pill--coral { color: var(--coral); background: var(--coral-a14); border-color: transparent; }

/* Barra de progreso (vale en div o span: siempre bloque) */
.ft-progress {
    display: block;
    height: 6px;
    border-radius: var(--radius-pill);
    background: var(--white-a08);
    overflow: hidden;
}

.ft-progress__bar {
    display: block;
    height: 100%;
    border-radius: var(--radius-pill);
    background: var(--lime);
    transition: width var(--dur-fast) var(--ease-ui);
}

.ft-progress__bar--lavender { background: var(--lavender); }
.ft-progress__bar--coral { background: var(--coral); }

/* Avatar con iniciales */
.ft-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--lime-a14);
    color: var(--lime);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13px;
    flex: none;
}

.ft-avatar--coral { background: var(--coral-a14); color: var(--coral); }
.ft-avatar--lavender { background: var(--lavender-a16); color: var(--lavender); }
.ft-avatar--gray { background: var(--white-a08); color: var(--white-a75); }

/* Chips grises (columna «Comparte») */
.ft-chip {
    display: inline-flex;
    align-items: center;
    border-radius: var(--radius-pill);
    background: var(--white-a08);
    padding: 2.5px 9px;
    font-size: 10.5px;
    font-weight: 600;
    color: var(--text-muted);
}

/* Título display reutilizable */
.ft-display {
    font-family: var(--font-display);
    font-weight: 900;
    letter-spacing: -.03em;
    line-height: 1.05;
    color: var(--text-body);
}

/* Código del entrenador en mono-display */
.ft-codigo {
    font-family: var(--font-display);
    font-weight: 900;
    font-size: 26px;
    letter-spacing: .12em;
    color: var(--lavender);
}

/* --- Drawer de alumno (SPEC §3.3) --- */
.ft-drawer__overlay {
    position: fixed;
    inset: 0;
    z-index: 60;
    background: rgba(11, 11, 13, .66);
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    display: flex;
    justify-content: flex-end;
}

.ft-drawer {
    width: min(620px, 100vw);
    height: 100%;
    background: var(--bg-page);
    border-inline-start: 1px solid var(--border-strong);
    display: flex;
    flex-direction: column;
    animation: ft-drawer-entra var(--dur-fast) var(--ease-ui);
}

@keyframes ft-drawer-entra {
    from { transform: translateX(24px); opacity: 0; }
    to { transform: translateX(0); opacity: 1; }
}

.ft-drawer__header {
    position: sticky;
    top: 0;
    padding: 22px 26px 0;
    background: var(--bg-page);
    border-bottom: 1px solid var(--border-hairline);
}

.ft-drawer__cerrar {
    margin-left: auto;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--white-a75);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 11.5px;
    padding: 4px 12px;
    cursor: pointer;
}

.ft-drawer__cerrar:hover {
    background: var(--surface-raised);
}

.ft-drawer__tabs {
    display: flex;
    gap: 4px;
    margin-top: 16px;
    overflow-x: auto;
}

.ft-drawer__tab {
    border: 0;
    background: transparent;
    color: var(--white-a60);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12.5px;
    padding: 10px 12px;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    white-space: nowrap;
}

.ft-drawer__tab--activa {
    color: var(--lime);
    border-bottom-color: var(--lime);
}

.ft-drawer__body {
    flex: 1;
    overflow-y: auto;
    padding: 20px 26px;
}

.ft-drawer__stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.ft-drawer__stats .ft-stat__value {
    font-size: 24px;
}

.ft-drawer__nota {
    margin-top: 14px;
    font-size: 13px;
    color: var(--text-muted);
}

.ft-drawer__seccion {
    font-family: var(--font-body);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--text-faint);
    margin: 0 0 10px;
}

.ft-drawer__fila {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 0;
    border-bottom: 1px solid var(--border-hairline);
}

.ft-drawer__fila:last-child {
    border-bottom: 0;
}

.ft-drawer__fila > .ft-pill {
    margin-left: auto;
}

.ft-drawer__barras {
    display: flex;
    gap: 8px;
    align-items: flex-end;
    height: 140px;
}

.ft-drawer__barra-col {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
    height: 100%;
}

.ft-drawer__barra-col > span {
    font-size: 9.5px;
    color: var(--text-faint);
}

.ft-drawer__barra {
    width: 100%;
    max-width: 34px;
    border-radius: 6px 6px 2px 2px;
    background: var(--white-a15);
}

.ft-drawer__barra--coral { background: var(--coral); }
.ft-drawer__barra--lima { background: var(--lime); }

.ft-drawer__footer {
    display: flex;
    gap: 10px;
    padding: 16px 26px;
    border-top: 1px solid var(--border-hairline);
    background: var(--bg-page);
}

/* --- Escritorio: cabecera, stats, bandeja + «Vas al día» (SPEC §3.1) --- */
.ft-escritorio__cabecera {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}

.ft-escritorio__stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
}

.ft-escritorio__columnas {
    display: grid;
    grid-template-columns: 1.35fr 1fr;
    gap: 16px;
    align-items: start;
}

@media (max-width: 1024px) {
    .ft-escritorio__columnas {
        grid-template-columns: 1fr !important;
    }
}

.ft-escritorio__contador {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 24px;
    height: 22px;
    padding: 0 7px;
    border-radius: 6px;
    background: var(--coral-a14);
    color: var(--coral);
    font-size: 12px;
    font-weight: 700;
}

/* Botón primario lima y botón coach lavanda (prototipo) */
.ft-btn-lima {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 9px 18px;
    border: 0;
    border-radius: var(--radius-sm);
    background: var(--lime);
    color: var(--graphite);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13px;
    cursor: pointer;
}

.ft-btn-lima:hover {
    color: var(--graphite);
    filter: brightness(1.05);
}

.ft-btn-coach {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    padding: 10px 18px;
    border: 0;
    border-radius: var(--radius-sm);
    background: var(--lavender);
    color: var(--graphite);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13px;
    cursor: pointer;
}

.ft-btn-coach:hover {
    color: var(--graphite);
    filter: brightness(1.05);
}

/* Buscador global de la topbar (SPEC §2 — decorativo en esta fase) */
.ft-topbar-buscador {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    max-width: 420px;
    background: var(--surface-card);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-pill);
    padding: 8px 14px;
    color: var(--text-faint);
    font-size: 12.5px;
}

.ft-topbar-buscador input {
    flex: 1;
    background: transparent;
    border: 0;
    color: var(--text-body);
    font-size: 12.5px;
}

.ft-topbar-buscador input:focus {
    outline: none;
}

.ft-topbar-buscador kbd {
    font-family: var(--font-body);
    font-size: 10px;
    color: var(--text-faint);
    border: 1px solid var(--border-strong);
    border-radius: 5px;
    padding: 1px 5px;
}

.ft-aviso {
    display: flex;
    align-items: center;
    gap: 13px;
    padding: 14px 22px;
    border-bottom: 1px solid var(--border-hairline);
}

.ft-aviso:last-child {
    border-bottom: 0;
}

.ft-aviso__icono {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius-sm);
    flex: none;
}

.ft-aviso__icono--coral { background: var(--coral-a14); color: var(--coral); }
.ft-aviso__icono--lavanda { background: var(--lavender-a16); color: var(--lavender); }
.ft-aviso__icono--lima { background: var(--lime-a14); color: var(--lime); }

.ft-aviso__accion {
    padding: 6px 13px !important;
    font-size: 12px !important;
    flex: none;
    white-space: nowrap;
}

.ft-aviso__descartar {
    border: 0;
    background: transparent;
    color: var(--text-faint);
    cursor: pointer;
    padding: 6px;
    border-radius: var(--radius-pill);
    flex: none;
}

.ft-aviso__descartar:hover {
    color: var(--text-body);
    background: var(--white-a08);
}

.ft-aldia {
    position: relative;
    text-align: center;
    padding: 54px 30px 48px;
    overflow: hidden;
}

.ft-aldia__glow {
    position: absolute;
    top: -40px;
    left: 50%;
    transform: translateX(-50%);
    width: 260px;
    height: 260px;
    border-radius: 50%;
    background: var(--lime);
    opacity: .10;
    filter: blur(80px);
    pointer-events: none;
}

.ft-aldia__check {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 64px;
    height: 64px;
    border-radius: 50%;
    background: var(--lime);
    color: var(--graphite);
    margin-bottom: 16px;
}

/* --- Editor de plan (SPEC §3.5, pantalla completa) --- */
.ft-editor {
    min-height: 100vh;
    background: var(--bg-page);
    color: var(--text-body);
    display: flex;
    flex-direction: column;
}

.ft-editor__header {
    position: sticky;
    top: 0;
    z-index: 30;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 22px;
    background: rgba(11, 11, 13, .82);
    -webkit-backdrop-filter: var(--blur-nav);
    backdrop-filter: var(--blur-nav);
    border-bottom: 1px solid var(--border-hairline);
}

.ft-editor__cuerpo {
    display: flex;
    flex: 1;
    min-height: 0;
}

.ft-editor__biblioteca {
    width: 280px;
    flex: none;
    padding: 20px 18px;
    border-inline-end: 1px solid var(--border-hairline);
    overflow-y: auto;
}

.ft-editor__sesion {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 10px 12px;
    margin-bottom: 8px;
    background: var(--surface-card);
    border: 1px solid var(--border-card);
    border-radius: var(--radius-sm);
    cursor: grab;
}

.ft-editor__sesion:active {
    cursor: grabbing;
}

.ft-editor__alta {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--border-hairline);
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.ft-editor__alta input,
.ft-editor__alta select {
    background: var(--surface-card);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    color: var(--text-body);
    font-size: 12.5px;
    padding: 8px 10px;
    width: 100%;
}

.ft-editor__alta input:focus,
.ft-editor__alta select:focus {
    outline: none;
    border-color: var(--lime);
}

.ft-editor__main {
    flex: 1;
    min-width: 0;
    padding: 20px 22px 40px;
    overflow-x: auto;
}

.ft-editor__semanas {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.ft-tag {
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-pill);
    background: transparent;
    color: var(--white-a75);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12px;
    padding: 6px 14px;
    cursor: pointer;
}

.ft-tag--activa {
    background: var(--lime);
    border-color: var(--lime);
    color: var(--text-on-accent);
}

.ft-editor__tablero {
    display: grid;
    grid-template-columns: repeat(7, minmax(128px, 1fr));
    gap: 10px;
}

.ft-editor__dia {
    min-height: 260px;
    background: var(--surface-card);
    border: 1px dashed var(--border-strong);
    border-radius: var(--radius-lg);
    padding: 10px;
    display: flex;
    flex-direction: column;
    gap: 8px; /* las sesiones se apilan */
    transition: background-color var(--dur-fast) var(--ease-ui),
        border-color var(--dur-fast) var(--ease-ui);
}

.ft-editor__dia--sobre {
    background: var(--lime-a14);
    border-color: var(--lime);
    border-style: solid;
}

.ft-editor__dia > header {
    display: flex;
    justify-content: space-between;
    font-family: var(--font-body);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--text-faint);
    margin-bottom: 10px;
}

.ft-editor__descanso {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11.5px;
    color: var(--text-faint);
}

.ft-editor__tarjeta {
    position: relative;
    background: var(--surface-raised);
    border: 1px solid var(--border-card);
    border-radius: var(--radius-sm);
    padding: 12px 11px;
    cursor: grab;
}

.ft-editor__tarjeta:active {
    cursor: grabbing;
}

.ft-editor__tarjeta--cardio {
    background: var(--lavender-a16);
    border-color: var(--lavender-a35);
}

.ft-editor__tarjeta > strong {
    display: block;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12.5px;
    line-height: 1.3;
    padding-right: 16px;
}

.ft-editor__tarjeta > span {
    display: block;
    margin-top: 4px;
    font-size: 10.5px;
    color: var(--text-muted);
}

.ft-editor__tarjeta-quitar {
    position: absolute;
    top: 6px;
    right: 6px;
    border: 0;
    background: transparent;
    color: var(--text-faint);
    cursor: pointer;
    padding: 3px;
    border-radius: var(--radius-pill);
}

.ft-editor__tarjeta-quitar:hover {
    color: var(--coral);
    background: var(--white-a08);
}

/* --- Biblioteca de ejercicios (SPEC §3.7) --- */
.ft-biblioteca__buscador {
    margin-left: auto;
    min-width: 220px;
    background: var(--surface-card);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-pill);
    color: var(--text-body);
    font-size: 12.5px;
    padding: 8px 16px;
}

.ft-biblioteca__buscador:focus {
    outline: none;
    border-color: var(--lime);
}

.ft-biblioteca__grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: 12px;
}

.ft-biblioteca__tarjeta {
    text-align: left;
    background: var(--surface-card);
    border: 1px solid var(--border-card);
    border-radius: var(--radius-lg);
    padding: 12px;
    cursor: pointer;
    transition: border-color var(--dur-fast) var(--ease-ui);
    color: var(--text-body);
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.ft-biblioteca__tarjeta:hover {
    border-color: var(--lime-a40);
}

.ft-biblioteca__tarjeta > strong {
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13.5px;
}

.ft-biblioteca__tarjeta > span:last-child {
    font-size: 11px;
    color: var(--text-faint);
}

.ft-biblioteca__thumb {
    position: relative;
    height: 96px;
    border-radius: var(--radius-sm);
    background: var(--surface-raised);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    margin-bottom: 6px;
}

.ft-biblioteca__thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.ft-biblioteca__badge-video {
    position: absolute;
    top: 7px;
    right: 7px;
}

.ft-ficha {
    width: min(560px, calc(100vw - 32px));
    max-height: calc(100vh - 60px);
    overflow-y: auto;
    background: var(--surface-card);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-xl);
    box-shadow: var(--shadow-lift);
    padding: 24px;
}

.ft-ficha__media {
    position: relative;
    min-height: 180px;
    border-radius: var(--radius-lg);
    background: var(--surface-raised);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    margin: 14px 0;
}

.ft-ficha__media img,
.ft-ficha__media video,
.ft-ficha__media iframe {
    width: 100%;
    height: 100%;
    min-height: 180px;
    object-fit: cover;
    border: 0;
}

.ft-ficha__subida {
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px solid var(--border-hairline);
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.ft-ficha__subida input[type="text"] {
    background: var(--surface-raised);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    color: var(--text-body);
    font-size: 12.5px;
    padding: 8px 10px;
}

.ft-ficha__subida input[type="file"] {
    font-size: 12px;
    color: var(--text-muted);
}

/* --- Mi marca: vista previa en vivo (SPEC §3.8) --- */
.ft-marca__columnas {
    display: grid;
    grid-template-columns: 1.4fr 1fr;
    gap: 20px;
    align-items: start;
}

@media (max-width: 1024px) {
    .ft-marca__columnas {
        grid-template-columns: 1fr;
    }
}

.ft-marca__lateral {
    position: sticky;
    top: 84px;
}

.ft-marca__preview {
    background: var(--lime);
    color: var(--graphite);
    border-radius: var(--radius-xl);
    padding: 20px;
}

.ft-marca__preview-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: rgba(11, 11, 13, .14);
    font-family: var(--font-display);
    font-weight: 900;
    font-size: 16px;
    flex: none;
}

/* --- Suscripción: tarjetas de tramo (SPEC §3.9) --- */
/* La sección va en una tarjeta propia y cada tramo sube un nivel
   (surface-raised + borde fuerte): sobre el fondo grafito, carbón con
   borde al 8 % no se distinguía de la página y no se veía que era
   la selección de planes */
.ft-card--tramos {
    background: transparent;
    border-color: var(--border-strong);
}

.ft-tramos {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
}

.ft-tramo {
    background: var(--surface-raised);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-xl);
    padding: 20px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    align-items: flex-start;
    transition: border-color var(--dur-fast) var(--ease-ui),
        transform var(--dur-fast) var(--ease-ui);
}

.ft-tramo:has(.ft-btn-lima):hover {
    border-color: var(--lime-a40);
    transform: translateY(-2px);
}

.ft-tramo--actual {
    border-color: var(--lavender);
    background: linear-gradient(160deg, var(--lavender-a16), var(--surface-raised) 60%);
}

.ft-tramo--pronto {
    background: var(--surface-card);
    border-style: dashed;
}

.ft-tramo--pronto > strong,
.ft-tramo--pronto .ft-tramo__precio {
    color: var(--text-muted);
}

.ft-tramo > strong {
    font-family: var(--font-display);
    font-weight: 900;
    font-size: 18px;
    letter-spacing: -.02em;
    color: var(--text-body);
}

.ft-tramo__cupos {
    font-size: 12px;
    color: var(--text-muted);
}

.ft-tramo__precio {
    font-family: var(--font-display);
    font-weight: 800;
    font-size: 22px;
    letter-spacing: -.02em;
    color: var(--text-body);
    margin: 6px 0 2px;
}

.ft-tramo__cta {
    margin-top: 12px;
    align-self: stretch;
    justify-content: center;
    min-height: 42px; /* mismo alto que el botón: badge "Tu tramo" incluido */
    box-sizing: border-box;
}

.ft-tramo .fi-btn.ft-tramo__cta {
    width: 100%;
    display: inline-flex;
}

.ft-aviso--baja {
    margin-top: 16px;
    padding: 14px 16px;
    border: 1px solid var(--coral-a35);
    border-radius: var(--radius-lg);
    background: var(--coral-a14);
}

.ft-tramo .ft-btn-lima.ft-tramo__cta {
    width: 100%;
    padding: 11px 16px;
    font-size: 13.5px;
}

/* Vuelta de Stripe Checkout: confirmando (lima tenue, punto latiendo) y
   confirmado (borde lima). Tienen que verse a la primera: es el momento
   en que el entrenador acaba de pagar */
.ft-card--pago-espera {
    border-color: var(--lime-a40);
    background: linear-gradient(160deg, var(--lime-a14), var(--surface-card) 55%);
}

.ft-card--pago-ok {
    border-color: var(--lime);
    background: linear-gradient(160deg, var(--lime-a14), var(--surface-card) 55%);
}

.ft-card--pago-ok .ft-aviso__icono--lima {
    background: var(--lime);
    color: var(--graphite);
    font-weight: 900;
}

.ft-aviso__accion.ft-btn-lima {
    padding: 8px 16px;
    font-size: 12.5px;
}

/* --- Onboarding del entrenador (SPEC §3.11) --- */
.ft-onboarding {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 32px 16px;
    background:
        linear-gradient(rgba(240, 240, 240, .045) 1px, transparent 1px),
        linear-gradient(90deg, rgba(240, 240, 240, .045) 1px, transparent 1px),
        var(--bg-page);
    background-size: 110px 110px, 110px 110px, auto;
    position: relative;
    overflow: hidden;
}

.ft-onboarding__blob {
    position: absolute;
    top: -120px;
    right: -80px;
    width: 340px;
    height: 340px;
    border-radius: 50%;
    background: var(--lime);
    opacity: .12;
    filter: blur(120px);
    pointer-events: none;
}

.ft-onboarding__card {
    position: relative;
    width: min(560px, 100%);
    background: var(--surface-card);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-xl);
    padding: 30px 32px;
}

.ft-onboarding__ayuda {
    margin: 8px 0 18px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--text-muted);
}

.ft-onboarding__input {
    width: 100%;
    background: var(--surface-raised);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    color: var(--text-body);
    font-size: 14px;
    padding: 12px 14px;
}

.ft-onboarding__input:focus {
    outline: none;
    border-color: var(--lime);
}

.ft-onboarding__opcion {
    display: flex;
    flex-direction: column;
    gap: 3px;
    width: 100%;
    text-align: left;
    background: var(--surface-raised);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-md);
    padding: 13px 15px;
    margin-bottom: 8px;
    color: var(--text-body);
    cursor: pointer;
}

.ft-onboarding__opcion--activa {
    border-color: var(--lime);
    background: var(--lime-a14);
}

.ft-onboarding__opcion strong {
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13.5px;
}

.ft-onboarding__opcion span {
    font-size: 12px;
    color: var(--text-muted);
}

.ft-onboarding__codigo {
    display: flex;
    flex-direction: column;
    gap: 6px;
    align-items: center;
    text-align: center;
    background: var(--lime);
    color: var(--graphite);
    border-radius: var(--radius-lg);
    padding: 26px 20px;
}

.ft-onboarding__continuar {
    margin-left: auto;
    border: 0;
    border-radius: var(--radius-sm);
    background: var(--lime);
    color: var(--graphite);
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13px;
    padding: 10px 22px;
    cursor: pointer;
}

.ft-onboarding__continuar:disabled {
    opacity: .35;
    cursor: not-allowed;
}

/* --- El oso que espera contigo (2026-08-27) ---
   Cartoon CSS puro: cero peticiones, cero JS. Repintado con la paleta
   del design system (blanco roto + grafito + lavanda pálido) — el
   blanco/celeste original desentonaba sobre el grafito. */
.ft-oso {
    --oso-piel: var(--white);
    --oso-tinta: var(--graphite);
    --oso-hocico: #DCD3F5;      /* lavender-pale del prototipo */
    --u: .5px;                   /* escala: el original va a 1px */

    position: relative;
    flex: none;
    width: calc(160 * var(--u));
    height: calc(185 * var(--u));
    background: var(--oso-piel);
    border-radius: calc(100 * var(--u)) calc(100 * var(--u)) 0 0;
    /* Apoyado en el borde inferior del panel: asomarse queda mejor que
       flotar recortado por arriba y por abajo */
    align-self: flex-end;
    margin-bottom: -18px;
}

/* Cara: ojos, nariz, boca y el hocico lavanda */
.ft-oso::after {
    content: '';
    position: absolute;
    width: calc(100 * var(--u));
    height: calc(125 * var(--u));
    left: 50%;
    top: calc(25 * var(--u));
    transform: translateX(-50%);
    background-image:
        radial-gradient(circle, var(--oso-tinta) 48%, transparent 55%),
        radial-gradient(circle, var(--oso-tinta) 48%, transparent 55%),
        radial-gradient(circle, var(--oso-piel) 30%, transparent 45%),
        radial-gradient(circle, var(--oso-tinta) 48%, transparent 51%),
        linear-gradient(var(--oso-tinta) calc(20 * var(--u)), transparent 0),
        linear-gradient(var(--oso-hocico) calc(60 * var(--u)), transparent 0),
        radial-gradient(circle, var(--oso-hocico) 50%, transparent 51%),
        radial-gradient(circle, var(--oso-hocico) 50%, transparent 51%);
    background-repeat: no-repeat;
    background-size:
        calc(16 * var(--u)) calc(16 * var(--u)),
        calc(16 * var(--u)) calc(16 * var(--u)),
        calc(10 * var(--u)) calc(10 * var(--u)),
        calc(42 * var(--u)) calc(42 * var(--u)),
        calc(12 * var(--u)) calc(3 * var(--u)),
        calc(50 * var(--u)) calc(25 * var(--u)),
        calc(70 * var(--u)) calc(70 * var(--u)),
        calc(70 * var(--u)) calc(70 * var(--u));
    background-position:
        calc(25 * var(--u)) calc(10 * var(--u)),
        calc(55 * var(--u)) calc(10 * var(--u)),
        calc(36 * var(--u)) calc(44 * var(--u)),
        50% calc(30 * var(--u)),
        50% calc(85 * var(--u)),
        50% calc(50 * var(--u)),
        50% calc(22 * var(--u)),
        50% calc(45 * var(--u));
    animation: ft-oso-cara 3s linear infinite alternate;
}

/* Orejas */
.ft-oso::before {
    content: '';
    position: absolute;
    width: 140%;
    height: calc(125 * var(--u));
    left: -20%;
    top: 0;
    background-image:
        radial-gradient(circle, var(--oso-piel) 48%, transparent 50%),
        radial-gradient(circle, var(--oso-piel) 48%, transparent 50%);
    background-repeat: no-repeat;
    background-size: calc(65 * var(--u)) calc(65 * var(--u));
    background-position:
        0 calc(12 * var(--u)),
        calc(145 * var(--u)) calc(12 * var(--u));
    animation: ft-oso-orejas 3s linear infinite alternate;
}

@keyframes ft-oso-cara {
    0% { transform: translateX(-60%); }
    100% { transform: translateX(-30%); }
}

@keyframes ft-oso-orejas {
    0% { transform: translateX(calc(10 * var(--u))); }
    100% { transform: translateX(0); }
}

/* Quien pide menos movimiento, menos movimiento: el oso se queda quieto */
@media (prefers-reduced-motion: reduce) {
    .ft-oso::after,
    .ft-oso::before,
    .ft-espera__punto {
        animation: none;
    }
    .ft-oso::after { transform: translateX(-45%); }
}

/* --- Espera de la IA: 40 s sin señales parecen un cuelgue --- */
.ft-espera {
    display: none; /* wire:loading.flex lo enciende */
    align-items: center;
    gap: 20px;
    background: var(--surface-card);
    border: 1px solid var(--lime-a40);
    border-radius: var(--radius-xl);
    padding: 18px 22px;
    overflow: hidden; /* el oso se apoya en el borde inferior */
}

.ft-espera__texto {
    display: flex;
    flex-direction: column;
    gap: 10px;
    flex: 1;
    min-width: 0;
}

.ft-espera__cabecera {
    display: flex;
    align-items: center;
    gap: 10px;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13.5px;
}

.ft-espera__punto {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: var(--lime);
    flex: none;
    animation: ft-latido 1.4s var(--ease-ui) infinite;
}

@keyframes ft-latido {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: .35; transform: scale(.75); }
}

.ft-espera__reloj {
    margin-left: auto;
    font-family: var(--font-body);
    font-weight: 500;
    font-size: 11.5px;
    color: var(--text-faint);
    font-variant-numeric: tabular-nums;
}

.ft-espera__nota {
    display: block;
    margin: 0;
    font-size: 11.5px;
    color: var(--text-faint);
}

/* --- Rejilla de días del plan / plantilla --- */
.ft-rejilla {
    padding: 20px 22px;
}

/* La leyenda vive ARRIBA, junto al título: pegada bajo los días se leía
   como una nota huérfana del último chip */
.ft-rejilla__cabecera {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    padding-bottom: 14px;
    margin-bottom: 18px;
    border-bottom: 1px solid var(--border-hairline);
}

.ft-rejilla__leyenda {
    display: flex;
    gap: 14px;
    flex-wrap: wrap;
    margin: 0;
    font-size: 11.5px;
    color: var(--text-faint);
}

.ft-rejilla__clave {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}

.ft-rejilla__semana {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
    padding: 10px 0;
    border-bottom: 1px solid var(--border-hairline);
}

.ft-rejilla__semana:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}

.ft-rejilla__etiqueta {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 116px;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12.5px;
    color: var(--white-a75);
}

.ft-rejilla__etiqueta > small {
    font-family: var(--font-body);
    font-weight: 500;
    font-size: 10.5px;
    color: var(--text-faint);
}

.ft-rejilla__dias {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.ft-rejilla__dia {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    background: var(--surface-raised);
    padding: 7px 12px;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12px;
    color: var(--white-a60);
    transition: border-color var(--dur-fast) var(--ease-ui),
        color var(--dur-fast) var(--ease-ui);
}

.ft-rejilla__dia:hover {
    border-color: var(--lime);
    color: var(--lime);
}

.ft-rejilla__dia--lleno {
    background: var(--lime-a14);
    border-color: transparent;
    color: var(--lime);
}

.ft-rejilla__dia--vacio {
    border-color: var(--lime-a40);
    color: var(--lime);
}

.ft-rejilla__dia--pasado {
    opacity: .45;
}

.ft-rejilla__dia--hoy {
    box-shadow: inset 0 0 0 1px var(--lavender);
}

.ft-rejilla__punto {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    border: 1px solid currentColor;
    flex: none;
}

.ft-rejilla__punto--lleno {
    background: currentColor;
}

/* --- Importar «tu Excel»: pasos y previsualización (2026-08-27) --- */
.ft-pasos {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
    list-style: none;
    margin: 0 0 4px;
    padding: 0;
}

.ft-paso {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-pill);
    padding: 6px 14px 6px 6px;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12.5px;
    color: var(--white-a60);
}

.ft-paso > span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--white-a08);
    font-size: 11px;
}

.ft-paso--activo {
    border-color: var(--lime);
    color: var(--lime);
}

.ft-paso--activo > span {
    background: var(--lime);
    color: var(--graphite);
}

.ft-preview__dias {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
    gap: 12px;
}

.ft-preview__dia {
    background: var(--surface-raised);
    border: 1px solid var(--border-card);
    border-radius: var(--radius-lg);
    padding: 12px 14px;
}

.ft-preview__dia > header {
    font-family: var(--font-body);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--text-faint);
    margin-bottom: 8px;
}

.ft-preview__bloque {
    margin: 10px 0 4px;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 12px;
    color: var(--lime);
}

.ft-preview__bloque > span {
    color: var(--text-faint);
    font-weight: 500;
    font-size: 10.5px;
    margin-left: 6px;
}

.ft-preview__ejercicio {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 10px;
    width: 100%;
    margin: 0;
    padding: 4px 6px;
    font-size: 12px;
    text-align: left;
    color: var(--text-body);
    background: transparent;
    border: 0;
    border-bottom: 1px solid var(--border-hairline);
    border-radius: 6px;
    cursor: pointer;
    transition: background-color var(--dur-fast) var(--ease-ui);
}

.ft-preview__ejercicio:hover {
    background: var(--white-a08);
}

.ft-preview__ejercicio > span:last-child {
    color: var(--text-muted);
    text-align: right;
    flex: none;
}

.ft-preview__dia > header {
    display: flex;
    align-items: center;
    gap: 8px;
}

.ft-preview__lapiz {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    background: transparent;
    color: var(--text-faint);
    padding: 3px;
    border-radius: 5px;
    cursor: pointer;
    flex: none;
}

.ft-preview__lapiz:hover {
    color: var(--lime);
    background: var(--white-a08);
}

/* Campos del editor de detalle */
.ft-campo {
    display: block;
    margin-bottom: 12px;
}

.ft-campo > span {
    display: block;
    margin-bottom: 5px;
    font-family: var(--font-body);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.ft-campo input {
    width: 100%;
    background: var(--surface-raised);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm);
    color: var(--text-body);
    font-size: 13px;
    padding: 9px 11px;
}

.ft-campo input:focus {
    outline: none;
    border-color: var(--lime);
}

.ft-campo__fila {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.ft-preview__nota {
    margin: 2px 0 6px;
    font-size: 10.5px;
    color: var(--text-faint);
}

/* Switch solo-lectura (Datos compartidos: los interruptores son del alumno) */
.ft-switch {
    margin-left: auto;
    width: 36px;
    height: 20px;
    border-radius: var(--radius-pill);
    background: var(--white-a15);
    position: relative;
    flex: none;
    opacity: .75;
}

.ft-switch::after {
    content: '';
    position: absolute;
    top: 2px;
    left: 2px;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: var(--white-a60);
    transition: transform var(--dur-fast) var(--ease-ui);
}

.ft-switch--on {
    background: var(--lime-a40);
}

.ft-switch--on::after {
    background: var(--lime);
    transform: translateX(16px);
}

/* ── Calendario (DatePicker no nativo) ─────────────────────────────────
   El nativo salía con el azul del sistema y los meses en el idioma del
   navegador; este es del panel y habla el mismo español que el resto. */
.fi-fo-date-time-picker-panel {
    background-color: var(--surface-raised) !important;
    border: 1px solid var(--border-strong) !important;
    border-radius: var(--radius-card, 14px) !important;
    box-shadow: 0 18px 40px rgba(0, 0, 0, .45) !important;
    padding: 12px !important;
}

/* Mes y año: cabecera, no dos campos de formulario. Sin caja, con la
   misma tipografía del panel y un fondo sutil solo al pasar por encima. */
.fi-fo-date-time-picker-panel select,
.fi-fo-date-time-picker-panel input[type="number"] {
    appearance: none;
    -webkit-appearance: none;
    background-color: transparent !important;
    border: 1px solid transparent !important;
    border-radius: 8px !important;
    color: var(--text-strong, #fff) !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    padding: 4px 8px !important;
    cursor: pointer;
    transition: background-color var(--dur-fast, .12s) var(--ease-ui, ease);
}

.fi-fo-date-time-picker-panel select {
    /* Flecha propia: la del sistema desentona con el panel */
    background-image: linear-gradient(45deg, transparent 50%, var(--text-faint) 50%),
                      linear-gradient(135deg, var(--text-faint) 50%, transparent 50%) !important;
    background-position: right 12px center, right 7px center !important;
    background-size: 5px 5px, 5px 5px !important;
    background-repeat: no-repeat !important;
    padding-right: 26px !important;
    margin-inline-start: -8px;
}

.fi-fo-date-time-picker-panel select option {
    background-color: var(--surface-raised);
    color: var(--text-strong, #fff);
    font-weight: 400;
}

.fi-fo-date-time-picker-panel input[type="number"] {
    width: 74px !important;
    text-align: right;
    margin-inline-end: -8px;
}

/* Sin las flechitas del input numérico: el año se teclea o se deja */
.fi-fo-date-time-picker-panel input[type="number"]::-webkit-inner-spin-button,
.fi-fo-date-time-picker-panel input[type="number"]::-webkit-outer-spin-button {
    appearance: none;
    margin: 0;
}

.fi-fo-date-time-picker-panel select:hover,
.fi-fo-date-time-picker-panel input[type="number"]:hover {
    background-color: var(--white-a08) !important;
}

.fi-fo-date-time-picker-panel select:focus,
.fi-fo-date-time-picker-panel input[type="number"]:focus {
    border-color: var(--lime-a40) !important;
    outline: none;
    box-shadow: none !important;
}

/* La cabecera, separada de la rejilla de días */
.fi-fo-date-time-picker-panel .flex.items-center.justify-between {
    padding-bottom: 10px;
    border-bottom: 1px solid var(--border-hairline);
}

/* Cabecera de días (LUN MAR MIÉ…): la fila de 7 columnas SIN números */
.fi-fo-date-time-picker-panel .grid-cols-7 > div {
    color: var(--text-faint) !important;
    font-size: 10.5px !important;
    letter-spacing: .04em;
    text-transform: uppercase;
}

/* Los días: el seleccionado en lima, hoy con un anillo, el resto llano.
   Filament no les pone role, solo aria-selected/aria-disabled. */
.fi-fo-date-time-picker-panel [aria-selected],
.fi-fo-date-time-picker-panel [aria-disabled] {
    border-radius: 9px !important;
    font-size: 12.5px !important;
    color: var(--text-strong, #fff) !important;
    background-color: transparent !important;
    transition: background-color var(--dur-fast, .12s) var(--ease-ui, ease);
}

.fi-fo-date-time-picker-panel [aria-selected]:hover {
    background-color: var(--white-a08) !important;
}

.fi-fo-date-time-picker-panel [aria-selected="true"] {
    background-color: var(--lime) !important;
    color: var(--graphite) !important;
    font-weight: 600 !important;
}

.fi-fo-date-time-picker-panel [aria-disabled="true"] {
    color: var(--white-a25, rgba(255, 255, 255, .25)) !important;
    cursor: default;
}

/* ── Elegir qué hacer al asignar: tarjetas, no radios sueltos ─────────
   Filament no marca cada opción con una clase propia: la tarjeta se
   pinta sobre el <label> que envuelve el radio y su descripción. */
.fi-fo-radio > div > label {
    border: 1px solid var(--border-card);
    border-radius: 12px;
    padding: 12px 14px;
    background-color: var(--surface-card);
    cursor: pointer;
    transition: border-color var(--dur-fast, .12s) var(--ease-ui, ease),
                background-color var(--dur-fast, .12s) var(--ease-ui, ease);
}

.fi-fo-radio > div > label:hover {
    border-color: var(--border-strong);
}

.fi-fo-radio > div > label:has(input:checked) {
    border-color: var(--lime-a40);
    background-color: var(--lime-a14);
}

.fi-fo-radio > div > label .fi-fo-radio-option-label {
    font-weight: 600;
    font-size: 13px;
}

.fi-fo-radio > div > label .fi-fo-radio-option-description {
    font-size: 11.5px;
    color: var(--text-faint);
    line-height: 1.55;
}

/* El punto del radio, en lima como todo lo activo */
.fi-radio-input:checked {
    background-color: var(--lime) !important;
    border-color: var(--lime) !important;
    --tw-ring-color: var(--lime) !important;
}

/* Nota al pie de un diálogo: contexto, no ruido */
.ft-nota {
    display: block;
    font-size: 11.5px;
    line-height: 1.5;
    color: var(--text-faint);
    border-left: 2px solid var(--border-strong);
    padding-left: 10px;
}
