/* Inicio de estilos generales */
*:not(:where(.ed-docx-render-wrapper, .ed-docx-render-wrapper *, .sw-docx-render-wrapper, .sw-docx-render-wrapper *)){
    margin:0;
    padding:0;
    box-sizing:border-box;
}
/* El documento de docx-preview comparte el DOM con la plataforma. No se debe
   asignar una fuente directamente a sus nodos: sus spans necesitan heredar la
   tipografía que la librería genera para cada párrafo o estilo del DOCX. */
*:not(:where(.ed-docx-render-wrapper, .ed-docx-render-wrapper *, .sw-docx-render-wrapper, .sw-docx-render-wrapper *)){
    font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
}
.ed-docx-render-wrapper,
.sw-docx-render-wrapper{
    font-family:initial;
}
:root{
    --app-root-font-size:clamp(16px,calc(12.8px + .24vw),19px);
    --font-xs:clamp(11px,calc(7.8px + .24vw),13.5px);
    --font-sm:clamp(12px,calc(8.6px + .28vw),15.5px);
    --font-md:clamp(13px,calc(9.6px + .32vw),17px);
    --font-lg:clamp(15px,calc(10.8px + .38vw),20.5px);
    --font-xl:clamp(19px,calc(11.6px + .55vw),26px);
    --font-2xl:clamp(30px,calc(19.5px + .75vw),39px);
    --space-sm:clamp(10px,calc(7.2px + .2vw),12px);
    --space-md:clamp(15px,calc(10.8px + .3vw),18px);
    --space-lg:clamp(18px,calc(12.4px + .4vw),22px);
    --control-height:clamp(40px,calc(34.4px + .4vw),46px);
    --app-sidebar-width:280px;
    --app-shell-gutter:0px;
    --app-frame-padding:30px;
    --app-page-max-width:1880px;
    --app-page-inline-breathing:clamp(0px,calc(16vw - 230.4px),160px);
    --primary:#0f3d91;
    --primary-dark:#0d2f70;
    --accent:#10b981;
    --accent-dark:#0da271;
    --blue:#2563eb;
    --blue-dark:#1d4ed8;
    --danger:#ef4444;
    --warning:#f59e0b;
    --success:#10b981;
    --surface-elevated:#ffffff;
    --focus-ring:rgba(37,99,235,.28);
    --project-thesis:37,99,235;
    --project-profile:139,92,246;
    --project-practices:244,99,90;
    --project-pis:16,185,129;
    --project-linkage:245,158,11;
    --bg:#f4f7fb;
    --surface:#ffffff;
    --surface-soft:#f8fafc;
    --blue-soft:color-mix(in srgb,var(--blue) 10%,var(--surface-soft));
    --primary-soft:color-mix(in srgb,var(--primary) 8%,var(--surface));
    --text:#0f172a;
    --muted:#64748b;
    --line:#e2e8f0;
    --shadow:0 12px 30px rgba(15,23,42,.07);
    --shadow-soft:var(--shadow);
    --radius:18px;
    --scrollbar-track:color-mix(in srgb,var(--surface-soft) 82%,var(--line));
    --scrollbar-thumb:color-mix(in srgb,var(--muted) 58%,transparent);
    --scrollbar-thumb-hover:color-mix(in srgb,var(--blue) 58%,var(--muted));
    --scrollbar-corner:var(--scrollbar-track);
    --scrollbar-size:10px;
}
html.dashboard-root{
    font-size:var(--app-root-font-size);
    min-height:100%;
}
body{
    background:linear-gradient(90deg, #143E83 0 var(--app-shell-gutter), var(--bg) var(--app-shell-gutter) 100%);
    color:var(--text);
    display:flex;
    min-height:100dvh;
    overflow-x:hidden;
}
body.app-shell{
    max-width:none;
    margin:0;
    padding:0;
}
html.theme-dark,
body.dark-mode{
    --bg:#0b1220;
    --surface:#111c2f;
    --surface-soft:#192b45;
    --surface-elevated:#203653;
    --primary:#4f83e8;
    --blue:#60a5fa;
    --blue-dark:#93c5fd;
    --success:#6ee7b7;
    --text:#f8fafc;
    --muted:#cbd5e1;
    --line:#334966;
    --focus-ring:rgba(96,165,250,.38);
    --shadow:0 14px 35px rgba(0,0,0,.3);
}
html.auth-root,
body.auth-page{
    color-scheme:light;
    --bg:#f4f7fb;
    --surface:#ffffff;
    --surface-soft:#f8fafc;
    --surface-elevated:#ffffff;
    --primary:#0f3d91;
    --primary-dark:#0d2f70;
    --accent:#10b981;
    --accent-dark:#0da271;
    --blue:#2563eb;
    --blue-dark:#1d4ed8;
    --danger:#ef4444;
    --warning:#f59e0b;
    --success:#10b981;
    --text:#0f172a;
    --muted:#64748b;
    --line:#e2e8f0;
    --focus-ring:rgba(37,99,235,.28);
    --shadow:0 12px 30px rgba(15,23,42,.07);
}
button,
input,
optgroup,
select,
textarea{
    font-family:inherit;
    font-size:100%;
    line-height:1.15;
    margin:0;
    border:none;
}
a{
    color:inherit;
    text-decoration:none;
}
/* Final de estilos generales */

/* Inicio de sidebar */
.sidebar{
    width:var(--app-sidebar-width);
    background:linear-gradient(180deg,var(--primary) 0%,var(--primary-dark) 100%);
    color:white;
    padding:25px;
    display:flex;
    flex-direction:column;
    justify-content:flex-start;
    gap:24px;
    position:fixed;
    inset:0 auto 0 0;
    height:100dvh;
    overflow-y:auto;
    z-index:40;
    box-shadow:4px 0 20px rgba(0,0,0,.08);
    transition:transform .32s ease;
}
.sidebar-overlay{
    position:fixed;
    inset:0;
    background:rgba(15,23,42,.46);
    opacity:0;
    visibility:hidden;
    z-index:30;
    transition:.28s ease;
}
.sidebar-overlay.show{
    opacity:1;
    visibility:visible;
}
.logo-area{
    text-align:center;
    margin-bottom:36px;
}
.logo-area img{
    width:108px;
    margin-bottom:14px;
}
.logo-area h1{
    font-size:18px;
    line-height:1.3;
}
.logo-area p{
    margin-top:10px;
    font-size:var(--font-sm);
    line-height:1.5;
    opacity:.82;
}
.menu{
    display:flex;
    flex-direction:column;
    gap:12px;
}
.menu-item{
    background:rgba(255,255,255,.08);
    border-radius:15px;
    padding:15px 16px;
    cursor:pointer;
    display:flex;
    align-items:center;
    gap:13px;
    transition:.25s ease;
}
.menu-item:hover,
.menu-item.active{
    background:var(--accent);
    transform:translateX(5px);
}
.menu-icon{
    width:24px;
    display:inline-flex;
    justify-content:center;
    align-items:center;
}
.sidebar-footer{
    background:rgba(255,255,255,.08);
    padding:16px;
    border-radius:18px;
    margin-top:auto;
    flex-shrink:0;
}
.close-btn{
    width:100%;
    background:var(--danger);
    color:white;
    padding:14px 18px;
    border-radius:15px;
    cursor:pointer;
    font-weight:700;
    transition:.25s ease;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:10px;
}
.close-btn:hover{
    background:#dc2626;
    transform:translateY(-2px);
}
/* Final de sidebar */

/* Inicio de contenido principal y topbar */
.main{
    box-sizing:border-box;
    margin-left:var(--app-sidebar-width);
    width:calc(100% - var(--app-sidebar-width));
    padding:var(--app-frame-padding);
    min-width:0;
}
.main > :is(.topbar,.app-page-content){
    box-sizing:border-box;
    width:min(calc(100% - var(--app-page-inline-breathing)),var(--app-page-max-width));
    max-width:100%;
    margin-inline:auto;
}
.main > .app-page-content{
    min-width:0;
    padding:0!important;
}
.main > .app-page-content > *{
    margin-inline:auto;
}
/* Algunos wrappers raíz conservaban un segundo límite de 1360–1600px que
   impedía aprovechar el crecimiento fluido del contenedor compartido. */
.main > .app-page-content > :is(
    .student-dashboard,
    .teacher-dashboard,
    .admin-dashboard-v4,
    .projects-page,
    .assigned-projects-shell,
    .notifications-shell,
    .notifications-preloader
){
    width:100%;
    max-width:none;
}
.topbar{
    background:var(--surface);
    border:1px solid rgba(226,232,240,.75);
    border-radius:24px;
    padding:22px 24px;
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:20px;
    flex-wrap:wrap;
    box-shadow:var(--shadow);
    margin-bottom:28px;
}
.hamburger-btn{
    display:none;
    width:46px;
    height:46px;
    border-radius:14px;
    background:var(--primary);
    color:white;
    cursor:pointer;
    font-size:24px;
    line-height:1;
    flex:0 0 auto;
}
.welcome{
    flex:1;
    min-width:220px;
}
.welcome h2{
    font-size:28px;
    color:var(--text);
    margin-bottom:6px;
    letter-spacing:0;
}
.welcome h2 i{
    color:var(--accent);
    font-size:24px;
}
.welcome p{
    color:var(--muted);
}
.topbar-right{
    display:flex;
    align-items:center;
    gap:14px;
    flex:0 0 auto;
}
.topbar-mode-toggle-form{
    display:inline-flex;
    align-items:center;
    margin:0;
}
.topbar-mode-pill{
    display:inline-flex;
    align-items:center;
    gap:8px;
    height:42px;
    padding:0 14px;
    border-radius:12px;
    font-size:var(--font-md);
    font-weight:700;
    cursor:pointer;
    border:1px solid var(--line,#e2e8f0);
    background:var(--surface,#ffffff);
    color:var(--text-main,#1e293b);
    transition:all 0.2s ease;
    box-shadow:0 1px 3px rgba(0,0,0,0.05);
    white-space:nowrap;
}
.topbar-mode-pill.is-teacher{
    border-color:rgba(37,99,235,0.28);
    background:linear-gradient(135deg,rgba(239,246,255,0.95),rgba(240,253,244,0.95));
    color:#1e40af;
}
.topbar-mode-pill.is-teacher:hover{
    border-color:rgba(37,99,235,0.5);
    box-shadow:0 2px 8px rgba(37,99,235,0.18);
    transform:translateY(-1px);
}
.topbar-mode-pill.is-admin{
    border-color:rgba(225,29,72,0.28);
    background:linear-gradient(135deg,rgba(255,241,242,0.95),rgba(254,242,242,0.95));
    color:#9f1239;
}
.topbar-mode-pill.is-admin:hover{
    border-color:rgba(225,29,72,0.5);
    box-shadow:0 2px 8px rgba(225,29,72,0.18);
    transform:translateY(-1px);
}
.mode-pill-badge{
    display:inline-flex;
    align-items:center;
    gap:6px;
}
.mode-pill-switch-icon{
    font-size:0.75rem;
    opacity:0.65;
    transition:transform 0.25s ease,opacity 0.2s ease;
}
.topbar-mode-pill:hover .mode-pill-switch-icon{
    opacity:1;
    transform:rotate(180deg);
}
.topbar-action-btn{
    min-height:46px;
    background:var(--accent);
    color:white;
    border-radius:14px;
    padding:0 16px;
    cursor:pointer;
    font-weight:800;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:9px;
    white-space:nowrap;
    transition:.25s ease;
}
.topbar-action-btn:hover{
    background:var(--accent-dark);
    transform:translateY(-2px);
}
.icon-btn,
.notification-icon{
    position:relative;
    width:46px;
    height:46px;
    border-radius:14px;
    background:var(--surface-soft);
    color:var(--text);
    display:flex;
    justify-content:center;
    align-items:center;
    cursor:pointer;
    font-size:21px;
    border:1px solid var(--line);
    transition:.25s ease;
}
.icon-btn:hover,
.notification-icon:hover{
    transform:translateY(-2px);
    box-shadow:0 10px 22px rgba(15,23,42,.08);
}
.notification-count{
    position:absolute;
    top:-6px;
    right:-6px;
    min-width:20px;
    height:20px;
    padding:0 5px;
    border-radius:999px;
    background:var(--danger);
    color:white;
    font-size:var(--font-sm);
    display:flex;
    justify-content:center;
    align-items:center;
    border:2px solid var(--surface);
}
.notification-count[hidden]{display:none!important;}
.avatar-menu{
    position:relative;
}
.user-avatar{
    width:50px;
    height:50px;
    border-radius:50%;
    background:linear-gradient(135deg,var(--blue),var(--accent));
    color:white;
    display:flex;
    justify-content:center;
    align-items:center;
    font-weight:800;
    cursor:pointer;
    transition:.25s ease;
}
.user-avatar:hover{
    transform:scale(1.05);
    box-shadow:0 10px 25px rgba(0,0,0,.15);
}
.user-avatar img{width:100%;height:100%;object-fit:cover;border-radius:inherit}
.avatar-dropdown{
    position:absolute;
    top:calc(100% + 12px);
    right:0;
    width:235px;
    background:var(--surface);
    border:1px solid var(--line);
    border-radius:16px;
    box-shadow:0 18px 40px rgba(15,23,42,.16);
    padding:8px;
    opacity:0;
    visibility:hidden;
    transform:translateY(-6px);
    transition:.2s ease;
    z-index:20;
}
.avatar-dropdown.show{
    opacity:1;
    visibility:visible;
    transform:translateY(0);
}
.avatar-dropdown button,.avatar-dropdown>a{
    width:100%;
    background:transparent;
    color:var(--text);
    text-align:left;
    padding:12px;
    border-radius:11px;
    cursor:pointer;
    transition:.2s ease;
    display:block;
    text-decoration:none;
}
.avatar-dropdown button:hover,.avatar-dropdown>a:hover{
    background:var(--surface-soft);
}
.avatar-dropdown-identity{padding:10px 12px 12px;border-bottom:1px solid var(--line);margin-bottom:5px}.avatar-dropdown-identity strong,.avatar-dropdown-identity small{display:block;overflow:hidden;text-overflow:ellipsis}.avatar-dropdown-identity small{color:var(--muted);margin-top:3px}.password-warning-banner{position:fixed;top:calc(30px + 90px + 12px);left:calc(280px + var(--app-shell-gutter) + ((100% - 280px - var(--app-shell-gutter) - var(--app-shell-gutter)) / 2));transform:translateX(-50%);z-index:400;display:flex;align-items:center;gap:12px;width:min(calc(100vw - 32px), 720px);margin:0;padding:10px 16px;border:1px solid rgba(245,158,11,.45);border-radius:12px;background:rgba(255,251,235,.98);color:var(--text);box-shadow:0 10px 28px rgba(15,23,42,.12);backdrop-filter:blur(8px);transition:top .2s ease, transform .2s ease}.theme-dark .password-warning-banner{background:rgba(30,27,75,.96);border-color:rgba(245,158,11,.5);color:#f8fafc}.password-warning-banner>i{color:#d97706;font-size:1rem;flex-shrink:0}.password-warning-banner>div:first-of-type{display:grid;gap:1px;flex:1;min-width:0}.password-warning-banner strong{font-size:var(--font-md);font-weight:800}.password-warning-banner span{color:var(--muted);font-size:var(--font-sm);line-height:1.3}.theme-dark .password-warning-banner span{color:#cbd5e1}.password-warning-actions{display:flex;align-items:center;gap:12px;flex-shrink:0}.password-warning-actions a{color:var(--blue);font-size:var(--font-md);font-weight:800;white-space:nowrap}.password-warning-actions button,.password-warning-close{border:0;background:transparent;color:var(--muted);font:inherit;cursor:pointer}.password-warning-actions button{font-size:var(--font-sm);text-decoration:underline;text-underline-offset:3px;white-space:nowrap}.password-warning-actions button:hover,.password-warning-close:hover{color:var(--text)}.password-warning-close{position:absolute;top:50%;right:12px;display:grid;place-items:center;width:28px;height:28px;border-radius:8px;transform:translateY(-50%)}.password-warning-close:hover{background:rgba(15,23,42,.07)}.sidebar>div:first-child{min-height:0;overflow-y:auto;scrollbar-width:thin}@media(max-width:992px){.password-warning-banner{left:50%;top:calc(20px + 90px + 10px)}}@media(max-width:650px){.password-warning-banner{top:calc(16px + 110px + 8px);width:calc(100vw - 24px);padding:10px 12px;align-items:flex-start;flex-direction:column;gap:6px}.password-warning-actions{width:100%;justify-content:flex-end;gap:14px;padding-top:4px;border-top:1px solid rgba(245,158,11,.2)}}
.avatar-dropdown .danger-option{
    color:var(--danger);
    font-weight:700;
}
/* Final de contenido principal y topbar */

/* Inicio de modal de cierre de sesion */
body.modal-open{
    overflow:hidden;
}
.logout-modal-overlay{
    position:fixed;
    inset:0;
    z-index:500;
    background:rgba(15,23,42,.58);
    display:flex;
    align-items:center;
    justify-content:center;
    padding:20px;
    opacity:0;
    visibility:hidden;
    transition:.22s ease;
}
.logout-modal-overlay[hidden]{
    display:none;
}
.logout-modal-overlay.show{
    opacity:1;
    visibility:visible;
}
.logout-modal{
    width:min(100%,390px);
    background:var(--surface);
    border:1px solid var(--line);
    border-radius:22px;
    box-shadow:0 26px 65px rgba(15,23,42,.26);
    padding:26px;
    text-align:center;
    transform:translateY(14px) scale(.98);
    transition:.22s ease;
}
.logout-modal-overlay.show .logout-modal{
    transform:translateY(0) scale(1);
}
.logout-modal-icon{
    width:54px;
    height:54px;
    border-radius:18px;
    background:rgba(239,68,68,.12);
    color:var(--danger);
    display:inline-flex;
    align-items:center;
    justify-content:center;
    font-size:22px;
    margin-bottom:16px;
}
.logout-modal h2{
    color:var(--text);
    font-size:24px;
    margin-bottom:10px;
    letter-spacing:0;
}
.logout-modal p{
    color:var(--muted);
    font-size:15px;
    line-height:1.55;
}
.logout-modal-actions{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:12px;
    margin-top:22px;
}
.logout-modal-actions form{margin:0}
.logout-modal-actions form .modal-accept-btn{width:100%}
.modal-cancel-btn,
.modal-accept-btn{
    min-height:46px;
    border-radius:14px;
    cursor:pointer;
    font-weight:800;
    transition:.22s ease;
}
.modal-cancel-btn{
    background:var(--surface-soft);
    color:var(--text);
    border:1px solid var(--line);
}
.modal-cancel-btn:hover{
    border-color:rgba(37,99,235,.3);
    color:var(--blue);
}
.modal-accept-btn{
    background:var(--danger);
    color:white;
}
.modal-accept-btn:hover{
    background:#dc2626;
    transform:translateY(-2px);
}
/* Final de modal de cierre de sesion */

/* Inicio de botones */
.upload-btn{
    background:var(--accent);
    color:white;
    padding:13px 20px;
    border-radius:14px;
    font-weight:700;
    cursor:pointer;
    transition:.25s ease;
    white-space:nowrap;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:9px;
}
.upload-btn:hover{
    background:var(--accent-dark);
    transform:translateY(-2px);
}
.open-btn{
    background:var(--blue);
    color:white;
    padding:12px 16px;
    border-radius:14px;
    cursor:pointer;
    font-weight:700;
    transition:.25s ease;
    white-space:nowrap;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:9px;
}
.open-btn:hover{
    background:var(--blue-dark);
    transform:translateY(-2px);
}
.ghost-btn{
    width:100%;
    background:rgba(37,99,235,.1);
    color:var(--blue);
}
.ghost-btn:hover{
    background:var(--blue);
    color:white;
}
/* Final de botones */

/* Inicio de tarjetas superiores */
.status-section{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
    gap:20px;
    margin-bottom:28px;
}
.status-card{
    background:var(--surface);
    border-radius:22px;
    padding:22px;
    box-shadow:var(--shadow);
    border:1px solid rgba(226,232,240,.75);
    transition:.35s ease;
    min-height:190px;
    display:flex;
    flex-direction:column;
    justify-content:space-between;
    overflow:hidden;
    position:relative;
}
.status-card::after{
    content:"";
    position:absolute;
    width:92px;
    height:92px;
    right:-28px;
    top:-28px;
    border-radius:50%;
    background:rgba(37,99,235,.08);
}
.status-card:hover{
    transform:translateY(-5px);
    box-shadow:0 18px 35px rgba(15,23,42,.1);
}
.status-card-header{
    display:flex;
    justify-content:space-between;
    align-items:center;
    margin-bottom:18px;
    position:relative;
    z-index:1;
}
.icon{
    width:44px;
    height:44px;
    border-radius:14px;
    display:flex;
    align-items:center;
    justify-content:center;
    background:var(--surface-soft);
    font-size:24px;
}
.status-label{
    color:var(--muted);
    font-size:var(--font-sm);
    font-weight:700;
    text-transform:uppercase;
}
.status-card h3{
    font-size:18px;
    margin-bottom:10px;
    color:var(--text);
}
.status-card p{
    color:var(--muted);
    font-size:var(--font-md);
    line-height:1.55;
    margin-bottom:18px;
}
.status-meta{
    display:inline-flex;
    color:var(--text);
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:999px;
    padding:8px 12px;
    font-size:var(--font-md);
    font-weight:700;
    width:max-content;
    max-width:100%;
    white-space:normal;
    line-height:1.35;
}
.approved-card{
    border-top:5px solid var(--accent);
}
.review-card{
    border-top:5px solid var(--warning);
}
.action-card{
    border-top:5px solid var(--danger);
}
.documents-card{
    border-top:5px solid var(--blue);
}
/* Final de tarjetas superiores */

/* Inicio de dashboard */
.dashboard-container{
    display:grid;
    grid-template-columns:1fr;
    gap:24px;
    align-items:start;
}
.dashboard-top-grid{
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(290px,340px);
    gap:24px;
    align-items:stretch;
    position:relative;
    z-index:10;
}
.dashboard-follow-grid{
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(290px,340px);
    gap:24px;
    align-items:stretch;
    position:relative;
    z-index:1;
}
.left-column{
    display:flex;
    flex-direction:column;
    min-width:0;
}
.current-report{
    background:var(--surface);
    border:1px solid rgba(226,232,240,.75);
    border-radius:24px;
    box-shadow:var(--shadow);
    padding:26px;
    display:grid;
    grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr);
    gap:24px;
    height:100%;
    overflow:visible;
    position:relative;
    z-index:15;
    opacity:0;
    transform:translateY(18px);
    transition:opacity .5s ease,transform .5s ease,box-shadow .25s ease;
}
.report-main{
    min-width:0;
    display:flex;
    flex-direction:column;
    align-self:stretch;
}
.report-heading{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:14px;
    flex-wrap:wrap;
    margin-bottom:16px;
}
.current-report h2{
    color:var(--text);
    font-size:30px;
    line-height:1.2;
    letter-spacing:0;
    margin-bottom:12px;
}
.current-report p{
    color:var(--muted);
    line-height:1.65;
    max-width:680px;
}
.report-actions{
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    gap:12px;
    flex:1;
    padding-top:24px;
}
.report-actions .upload-btn,
.report-actions .open-btn{
    width:min(100%,320px);
}
.report-side{
    display:grid;
    gap:16px;
    min-width:0;
}
.report-version{
    background:linear-gradient(135deg,rgba(37,99,235,.1),rgba(16,185,129,.12));
    border:1px solid rgba(37,99,235,.16);
    border-radius:18px;
    padding:18px;
    display:grid;
    gap:7px;
}
.report-version span,
.report-meta-grid span,
.process-dates span{
    color:var(--muted);
    font-size:var(--font-sm);
    font-weight:800;
    text-transform:uppercase;
}
.report-version strong{
    display:block;
    max-width:100%;
    color:var(--text);
    font-size:17px;
    line-height:1.35;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}
.report-version small{
    color:var(--muted);
    font-size:var(--font-md);
    line-height:1.4;
}
.report-meta-grid{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:12px;
}
.report-meta-grid div{
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:16px;
    padding:14px;
    display:grid;
    gap:7px;
}
.report-meta-grid strong{
    color:var(--text);
    font-size:var(--font-md);
    line-height:1.35;
}
.report-extra-row{
    grid-column:1 / -1;
    display:grid;
    grid-template-columns:minmax(0,1fr) auto;
    gap:16px;
    align-items:center;
    border-top:1px solid var(--line);
    padding-top:18px;
}
.report-quick-actions{
    display:flex;
    flex-wrap:wrap;
    gap:10px;
    min-width:0;
}
.report-quick-actions button,
.report-quick-actions a{
    background:var(--surface-soft);
    color:var(--text);
    border:1px solid var(--line);
    border-radius:14px;
    padding:11px 14px;
    cursor:pointer;
    font-weight:800;
    display:inline-flex;
    align-items:center;
    gap:9px;
    transition:.25s ease;
}
.report-quick-actions button:hover,
.report-quick-actions a:hover{
    color:var(--blue);
    border-color:rgba(37,99,235,.28);
    transform:translateY(-2px);
}
.report-team{
    position:relative;
    z-index:30;
}
.team-toggle{
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:16px;
    padding:12px 14px;
    cursor:pointer;
    display:grid;
    grid-template-columns:auto auto auto auto;
    align-items:center;
    gap:10px;
    width:100%;
    color:inherit;
    transition:.25s ease;
}
.team-toggle.multiple-members{
    grid-template-columns:auto auto auto;
}
.team-toggle.single-member{
    grid-template-columns:auto auto auto auto;
}
.team-toggle:hover,
.team-toggle[aria-expanded="true"]{
    border-color:rgba(37,99,235,.32);
    box-shadow:0 10px 22px rgba(15,23,42,.08);
}
.team-toggle > span:first-child{
    color:var(--muted);
    font-size:var(--font-sm);
    font-weight:800;
    text-transform:uppercase;
}
.team-toggle strong{
    color:var(--text);
    font-size:var(--font-lg);
    font-weight:800;
    white-space:nowrap;
}
.team-toggle i{
    color:var(--muted);
    font-size:12px;
    transition:.2s ease;
}
.team-toggle[aria-expanded="true"] i{
    transform:rotate(180deg);
}
.team-stack{
    display:flex;
    align-items:center;
}
.team-avatar{
    width:32px;
    height:32px;
    border-radius:50%;
    background:linear-gradient(135deg,var(--blue),var(--accent));
    color:white;
    border:2px solid var(--surface-soft);
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:var(--font-sm);
    font-weight:900;
    margin-left:-8px;
}
.team-avatar:first-child{
    margin-left:0;
}
.team-dropdown{
    position:absolute;
    top:calc(100% + 10px);
    right:0;
    width:min(240px,calc(100vw - 48px));
    background:var(--surface);
    border:1px solid var(--line);
    border-radius:16px;
    box-shadow:0 18px 40px rgba(15,23,42,.16);
    padding:10px;
    opacity:0;
    visibility:hidden;
    transform:translateY(-6px);
    transition:.2s ease;
    z-index:200;
}
.team-dropdown.show{
    opacity:1;
    visibility:visible;
    transform:translateY(0);
}
.team-member{
    display:grid;
    grid-template-columns:34px 1fr;
    gap:10px;
    align-items:center;
    padding:10px;
    border-radius:12px;
}
.team-member:hover{
    background:var(--surface-soft);
}
.team-member .team-avatar{
    margin-left:0;
}
.team-member strong{
    display:block;
    color:var(--text);
    font-size:var(--font-md);
    line-height:1.3;
}
.team-member small{
    color:var(--muted);
    font-size:var(--font-sm);
    font-weight:700;
}
.report-insight-grid{
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(260px,300px);
    gap:24px;
    margin-bottom:24px;
}
.observations-preview,
.activity-summary,
.process-dates{
    background:var(--surface);
    border:1px solid rgba(226,232,240,.75);
    border-radius:24px;
    box-shadow:var(--shadow);
    padding:24px;
    opacity:0;
    transform:translateY(18px);
    transition:opacity .5s ease,transform .5s ease,box-shadow .25s ease;
}
.dashboard-follow-grid .observations-preview,
.dashboard-follow-grid .reminders-panel{
    height:100%;
}
.compact-heading{
    display:grid;
    grid-template-columns:minmax(0,1fr) auto;
    align-items:start;
    margin-bottom:18px;
}
.compact-heading > div{
    min-width:0;
}
.compact-action{
    width:auto;
    min-width:max-content;
    padding:10px 14px;
    flex-shrink:0;
}
.observation-card{
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-left:5px solid var(--warning);
    border-radius:17px;
    padding:16px;
    margin-bottom:14px;
}
.observation-top{
    display:flex;
    justify-content:space-between;
    align-items:flex-start;
    gap:12px;
    margin-bottom:9px;
}
.observation-card strong,
.activity-item strong{
    color:var(--text);
}
.observation-card p,
.activity-item p{
    color:var(--muted);
    font-size:var(--font-md);
    line-height:1.55;
}
.observation-card small,
.activity-item small{
    color:var(--muted);
    display:block;
    font-size:var(--font-sm);
    font-weight:700;
    margin-top:9px;
}
.observation-status{
    border-radius:999px;
    padding:6px 10px;
    font-size:var(--font-sm);
    font-weight:800;
    white-space:nowrap;
}
.observation-status.pending{
    background:rgba(245,158,11,.16);
    color:var(--warning);
}
.next-action-buttons{
    display:grid;
    gap:12px;
}
.secondary-action{
    background:rgba(37,99,235,.1);
    color:var(--blue);
}
.secondary-action:hover{
    background:var(--blue);
    color:white;
}
.activity-summary{
    margin-bottom:0;
}
.dashboard-wide-section{
    grid-column:1 / -1;
}
.activity-list{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:14px;
}
.activity-item{
    display:grid;
    grid-template-columns:46px 1fr;
    gap:14px;
    align-items:start;
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:17px;
    padding:16px;
}
.activity-icon{
    width:46px;
    height:46px;
    border-radius:15px;
    display:flex;
    align-items:center;
    justify-content:center;
    background:rgba(37,99,235,.11);
    color:var(--blue);
    font-size:18px;
}
.process-dates{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:14px;
}
.process-dates article{
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:17px;
    padding:16px;
    display:grid;
    gap:8px;
}
.process-dates strong{
    color:var(--text);
    font-size:16px;
    line-height:1.35;
}
.section-heading{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:18px;
    margin-bottom:22px;
    min-width:0;
}
.section-eyebrow{
    color:var(--accent);
    font-size:var(--font-md);
    font-weight:800;
    text-transform:uppercase;
}
.section-title{
    font-size:25px;
    color:var(--text);
    letter-spacing:0;
}
.projects-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));
    gap:24px;
}
.project-card{
    background:var(--surface);
    border-radius:24px;
    padding:24px;
    position:relative;
    overflow:hidden;
    box-shadow:var(--shadow);
    border:1px solid rgba(226,232,240,.75);
    transition:.35s ease;
}
.project-card::before{
    content:"";
    position:absolute;
    top:0;
    left:0;
    width:100%;
    height:5px;
    background:linear-gradient(90deg,var(--blue),var(--accent));
}
.project-card:hover{
    transform:translateY(-5px);
    box-shadow:0 20px 40px rgba(15,23,42,.1);
}
.project-card-top{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:12px;
    margin-bottom:16px;
}
.project-status{
    display:inline-flex;
    padding:8px 13px;
    border-radius:999px;
    font-size:var(--font-md);
    font-weight:800;
    white-space:nowrap;
}

/* Mantiene las insignias y contadores anclados a la derecha en cualquier ancho. */
.project-status,
.observation-status,
.repository-count,
.status-label,
.panel-heading > span{
    flex:0 0 auto;
    margin-left:auto;
    text-align:right;
}
.status-card-header,
.project-card-top,
.report-heading,
.timeline-card-header,
.observation-top,
.panel-heading,
.repository-results-heading,
.repository-card-top{
    flex-direction:row;
    flex-wrap:nowrap;
}
.status-card-header > :first-child,
.project-card-top > :first-child,
.report-heading > :first-child,
.timeline-card-header > :first-child,
.observation-top > :first-child,
.panel-heading > :first-child,
.repository-results-heading > :first-child,
.repository-card-top > :first-child,
.version-info{
    min-width:0;
}
.approved{
    background:rgba(16,185,129,.15);
    color:var(--accent);
}
.revision{
    background:rgba(245,158,11,.16);
    color:var(--warning);
}
.changes{
    background:rgba(239,68,68,.14);
    color:var(--danger);
}
.project-card h3{
    color:var(--text);
    font-size:20px;
    margin-bottom:12px;
}
.project-card p{
    color:var(--muted);
    line-height:1.65;
    font-size:var(--font-md);
    margin-bottom:18px;
}
.project-details{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:10px 14px;
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:16px;
    padding:13px;
    color:var(--muted);
    font-size:var(--font-md);
    margin-bottom:20px;
}
.project-details span{
    line-height:1.35;
}
.project-details span:last-child{
    grid-column:1 / -1;
}
.more-projects-btn{
    margin-top:18px;
}
.project-footer{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:16px;
    flex-wrap:wrap;
}
.date{
    font-size:13px;
    color:var(--muted);
    line-height:1.35;
}

/* Inicio de calendario académico */
.calendar-summary{
    background:var(--surface);
    border:1px solid rgba(226,232,240,.75);
    border-radius:24px;
    box-shadow:var(--shadow);
    margin-top:28px;
    padding:24px;
    opacity:0;
    transform:translateY(18px);
    transition:opacity .5s ease,transform .5s ease,box-shadow .25s ease;
}
.calendar-heading{
    margin-bottom:20px;
}
.calendar-action{
    width:auto;
}
.calendar-content{
    display:block;
}
.calendar-month{
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:18px;
    padding:18px;
}
.calendar-title{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:14px;
    margin-bottom:16px;
}
.calendar-title strong{
    color:var(--text);
    font-size:18px;
}
.calendar-title span{
    color:var(--muted);
    font-size:var(--font-md);
    font-weight:700;
}
.calendar-grid{
    display:grid;
    grid-template-columns:repeat(7,minmax(0,1fr));
    gap:8px;
}
.calendar-day-name{
    color:var(--muted);
    font-size:var(--font-sm);
    font-weight:800;
    text-align:center;
    padding:6px 0;
}
.calendar-day{
    min-height:42px;
    border-radius:12px;
    background:var(--surface);
    border:1px solid var(--line);
    color:var(--text);
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:var(--font-md);
    font-weight:700;
    position:relative;
}
.calendar-day.muted-day{
    color:#94a3b8;
    opacity:.72;
}
.calendar-day.current-day{
    background:rgba(37,99,235,.12);
    border-color:rgba(37,99,235,.32);
    color:var(--blue);
}
.calendar-day.reminder-day{
    background:rgba(16,185,129,.14);
    border-color:rgba(16,185,129,.32);
    color:var(--accent);
}
.calendar-day.reminder-day::after{
    content:"";
    width:6px;
    height:6px;
    border-radius:50%;
    background:var(--accent);
    position:absolute;
    bottom:7px;
}
/* Final de calendario académico */
/* Inicio de pantalla de calendario */
.calendar-page .main{padding-bottom:48px}
.calendar-hero{margin-top:26px;padding:28px 30px;border-radius:26px;background:linear-gradient(125deg,#0f3d91 0%,#1555b8 58%,#0f766e 135%);color:#fff;display:flex;align-items:center;justify-content:space-between;gap:24px;box-shadow:0 18px 42px rgba(15,61,145,.2);overflow:hidden;position:relative}
.calendar-load-error{display:flex;align-items:flex-start;gap:12px;margin-top:18px;padding:14px 16px;border:1px solid color-mix(in srgb,#b45309 28%,var(--line));border-radius:14px;background:color-mix(in srgb,#f59e0b 8%,var(--surface));color:var(--text)}.calendar-load-error>i{margin-top:2px;color:#b45309}.calendar-load-error strong{display:block}.calendar-load-error p{margin:3px 0 0;color:var(--muted);font-size:var(--font-sm)}
.calendar-hero::after{content:"";position:absolute;width:230px;height:230px;border:42px solid rgba(255,255,255,.08);border-radius:50%;right:-60px;top:-110px}.calendar-hero>div{position:relative;z-index:1}
.calendar-kicker{display:inline-flex;align-items:center;gap:8px;color:var(--blue);font-size:var(--font-sm);font-weight:800;letter-spacing:.07em;text-transform:uppercase}.calendar-hero .calendar-kicker{color:#a7f3d0}.calendar-hero h1{font-size:clamp(26px,3vw,38px);line-height:1.15;margin:10px 0 8px;letter-spacing:-.03em}.calendar-hero p{opacity:.84;line-height:1.55;max-width:650px}
.calendar-primary-btn{background:#fff;color:var(--primary);padding:13px 18px;border-radius:14px;font-weight:800;cursor:pointer;display:inline-flex;align-items:center;gap:9px;white-space:nowrap;box-shadow:0 8px 20px rgba(15,23,42,.14);transition:.2s ease}.calendar-primary-btn:hover{transform:translateY(-2px)}
.calendar-hero-actions{display:flex;align-items:center;gap:10px;flex-shrink:0}.calendar-secondary-btn{padding:12px 15px;border-radius:14px;border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.12);color:#fff;font-weight:800;cursor:pointer;display:inline-flex;align-items:center;gap:8px;white-space:nowrap;transition:.2s}.calendar-secondary-btn:hover{background:rgba(255,255,255,.2)}
.calendar-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:18px 0}.calendar-stats article{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:17px 18px;display:flex;align-items:center;gap:13px;box-shadow:0 8px 22px rgba(15,23,42,.04)}.calendar-stats article div{display:flex;flex-direction:column;gap:2px}.calendar-stats strong{font-size:23px}.calendar-stats article div span{font-size:var(--font-md);color:var(--muted);font-weight:600}
.calendar-stat-icon{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;font-size:18px}.calendar-stat-icon.blue{color:#2563eb;background:#dbeafe}.calendar-stat-icon.orange{color:#ea580c;background:#ffedd5}.calendar-stat-icon.green{color:#059669;background:#d1fae5}
.calendar-workspace{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:18px;align-items:start}.calendar-board,.calendar-agenda{background:var(--surface);border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow)}.calendar-board{padding:22px;min-width:0}
.calendar-toolbar{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:20px}.calendar-navigation{display:flex;align-items:center;gap:9px}.calendar-navigation h2{font-size:22px;min-width:185px;margin-left:5px;text-transform:capitalize}.calendar-icon-btn{width:38px;height:38px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);color:var(--text);cursor:pointer;transition:.2s}.calendar-icon-btn:hover{color:var(--blue);border-color:var(--blue)}
.calendar-filters{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}.calendar-filter{padding:8px 11px;border-radius:10px;background:transparent;color:var(--muted);font-size:var(--font-sm);font-weight:700;cursor:pointer;border:1px solid transparent;display:flex;align-items:center;gap:6px}.calendar-filter:hover,.calendar-filter.active{background:var(--surface-soft);border-color:var(--line);color:var(--text)}.filter-dot{width:7px;height:7px;border-radius:50%}.filter-dot.delivery,.calendar-legend i.delivery{background:#2563eb}.filter-dot.meeting,.calendar-legend i.meeting{background:#8b5cf6}.filter-dot.review,.calendar-legend i.review{background:#10b981}.filter-dot.deadline,.calendar-legend i.deadline{background:#f97316}
.calendar-weekdays,.calendar-days-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.calendar-weekdays{border-bottom:1px solid var(--line)}.calendar-weekdays span{text-align:center;padding:8px 4px 12px;color:var(--muted);font-size:var(--font-xs);font-weight:800;text-transform:uppercase;letter-spacing:.04em}.calendar-days-grid{border-left:1px solid var(--line)}
.calendar-cell{min-width:0;min-height:102px;padding:9px;background:var(--surface);color:var(--text);border-radius:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:left;display:flex;flex-direction:column;gap:7px;cursor:pointer;transition:.18s}.calendar-cell:hover{background:var(--surface-soft)}.calendar-cell.outside{opacity:.38}.calendar-cell.selected{background:rgba(37,99,235,.055);box-shadow:inset 0 0 0 2px rgba(37,99,235,.3)}.calendar-number{width:26px;height:26px;display:grid;place-items:center;border-radius:50%;font-size:var(--font-sm);font-weight:800}.calendar-cell.today .calendar-number{background:var(--blue);color:#fff}
.calendar-cell-events{display:flex;flex-direction:column;gap:4px;min-width:0}.calendar-cell-events small{font-size:var(--font-xs);color:var(--muted);padding-left:5px}.calendar-event-chip{display:block;border-radius:5px;padding:4px 5px;font-size:var(--font-xs);line-height:1.15;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-left:3px solid}.calendar-event-chip.delivery{color:#1d4ed8;background:#dbeafe;border-color:#2563eb}.calendar-event-chip.meeting{color:#6d28d9;background:#ede9fe;border-color:#8b5cf6}.calendar-event-chip.review{color:#047857;background:#d1fae5;border-color:#10b981}.calendar-event-chip.deadline{color:#c2410c;background:#ffedd5;border-color:#f97316}
.calendar-agenda{padding:22px;position:sticky;top:30px}.calendar-agenda>header{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;padding-bottom:17px;border-bottom:1px solid var(--line)}.calendar-agenda h2{font-size:21px;margin-top:5px}.calendar-agenda-date{background:var(--primary);color:#fff;border-radius:11px;padding:8px 10px;font-size:var(--font-sm);font-weight:800;text-transform:capitalize}.calendar-agenda-list{display:flex;flex-direction:column;gap:12px;padding:17px 0}
.calendar-agenda-close{display:none}
.calendar-agenda-controls{display:flex;align-items:center;gap:8px}
.calendar-agenda-item{display:grid;grid-template-columns:4px 1fr;gap:12px;padding:13px;border:1px solid var(--line);border-radius:15px;background:var(--surface-soft)}.agenda-accent{width:4px;border-radius:8px}.agenda-accent.delivery{background:#2563eb}.agenda-accent.meeting{background:#8b5cf6}.agenda-accent.review{background:#10b981}.agenda-accent.deadline{background:#f97316}.agenda-content{min-width:0}.agenda-meta{display:flex;gap:7px;align-items:center;color:var(--muted);font-size:var(--font-xs);text-transform:uppercase;font-weight:700;letter-spacing:.03em}.agenda-meta b{color:var(--text)}.agenda-content h3{font-size:var(--font-md);margin:7px 0 4px}.agenda-content p{font-size:var(--font-sm);color:var(--muted);line-height:1.45}
.calendar-empty{text-align:center;color:var(--muted);padding:30px 10px}.calendar-empty>i{font-size:28px;margin-bottom:10px}.calendar-empty strong{display:block;color:var(--text);margin-bottom:5px}.calendar-empty p{font-size:var(--font-sm)}.calendar-empty-add{margin-top:15px;padding:9px 12px;border-radius:10px;background:rgba(37,99,235,.1);color:var(--blue);font-size:var(--font-sm);font-weight:800;cursor:pointer}.calendar-empty-add i{margin-right:5px}.agenda-actions{display:flex;gap:7px;margin-top:11px}.agenda-actions button{padding:6px 8px;border-radius:8px;background:var(--surface);border:1px solid var(--line);color:var(--muted);font-size:var(--font-xs);font-weight:800;cursor:pointer}.agenda-actions button:hover{color:var(--blue);border-color:rgba(37,99,235,.35)}.agenda-actions button.danger:hover{color:var(--danger);border-color:rgba(239,68,68,.35)}.calendar-legend{border-top:1px solid var(--line);padding-top:16px;display:flex;gap:10px 14px;flex-wrap:wrap}.calendar-legend strong{width:100%;font-size:var(--font-sm)}.calendar-legend span{font-size:var(--font-xs);color:var(--muted);display:flex;align-items:center;gap:5px}.calendar-legend i{width:7px;height:7px;border-radius:50%}
.calendar-modal-overlay{position:fixed;inset:0;z-index:110;background:rgba(15,23,42,.58);display:grid;place-items:center;padding:20px;backdrop-filter:blur(4px)}.calendar-modal-overlay[hidden]{display:none}.calendar-modal{width:min(560px,100%);max-height:calc(100vh - 40px);overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:24px;box-shadow:0 26px 70px rgba(15,23,42,.3);padding:24px}.calendar-modal>header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:22px}.calendar-modal h2{font-size:23px;margin-top:5px}.calendar-modal-close{width:38px;height:38px;border-radius:11px;background:var(--surface-soft);border:1px solid var(--line);color:var(--muted);cursor:pointer}.calendar-modal form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.calendar-form-field{display:flex;flex-direction:column;gap:7px}.calendar-form-field>span{font-size:var(--font-sm);font-weight:800;color:var(--text)}.calendar-form-field input,.calendar-form-field select,.calendar-form-field textarea{width:100%;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);color:var(--text);padding:11px 12px;outline:none;font:inherit;font-size:var(--font-md)}.calendar-form-field textarea{resize:vertical;min-height:96px}.calendar-form-field input:focus,.calendar-form-field select:focus,.calendar-form-field textarea:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.1)}.calendar-form-wide{grid-column:1/-1}.calendar-modal-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:5px}.calendar-cancel-btn,.calendar-save-btn{padding:11px 15px;border-radius:11px;font-weight:800;cursor:pointer}.calendar-cancel-btn{background:var(--surface-soft);border:1px solid var(--line);color:var(--muted)}.calendar-save-btn{background:var(--primary);color:#fff}.calendar-save-btn i{margin-right:6px}
@media(max-width:1180px){.calendar-workspace{grid-template-columns:1fr}.calendar-toolbar{align-items:flex-start;flex-direction:column}.calendar-filters{justify-content:flex-start}.calendar-navigation{width:100%}.calendar-agenda{position:static;top:auto;width:auto;height:auto;min-height:0;max-height:none;margin:0;overflow:visible;border-radius:24px;box-shadow:var(--shadow)}}
@media(max-width:1180px){.calendar-page .calendar-agenda-modal-overlay{position:fixed;inset:0;z-index:110;padding:20px;background:rgba(15,23,42,.58);display:grid;place-items:center;backdrop-filter:blur(4px)}.calendar-page .calendar-agenda-modal-overlay[hidden]{display:none!important}.calendar-page .calendar-agenda{display:none;position:fixed;z-index:111;top:50%;left:50%;box-sizing:border-box;width:min(560px,calc(100vw - 40px));max-height:calc(100dvh - 40px);margin:0;overflow-y:auto;overscroll-behavior:contain;padding:24px;border-radius:24px;box-shadow:0 26px 70px rgba(15,23,42,.3);transform:translate(-50%,-50%)}.calendar-page .calendar-agenda.is-modal-open{display:block}.calendar-page .calendar-agenda-close{display:grid;place-items:center;width:38px;height:38px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);color:var(--muted);cursor:pointer;flex:0 0 auto}.calendar-page .calendar-agenda-close:hover{border-color:rgba(37,99,235,.35);color:var(--blue)}}
@media(max-width:700px){.calendar-hero{align-items:flex-start;flex-direction:column;padding:24px}.calendar-hero-actions{width:100%;display:grid;grid-template-columns:1fr}.calendar-primary-btn,.calendar-secondary-btn{width:100%;justify-content:center}.calendar-stats{grid-template-columns:1fr}.calendar-board{padding:14px}.calendar-navigation{flex-wrap:wrap}.calendar-navigation h2{font-size:18px;min-width:0}.calendar-filters{display:grid;grid-template-columns:repeat(2,1fr);width:100%}.calendar-filter{justify-content:center}.calendar-cell{min-height:64px;padding:5px}.calendar-event-chip{font-size:0;width:7px;height:7px;padding:0;border:0;border-radius:50%}.calendar-cell-events{flex-direction:row;flex-wrap:wrap}.calendar-weekdays span{font-size:var(--font-xs)}.calendar-number{width:23px;height:23px}.calendar-modal{padding:20px}.calendar-modal form{grid-template-columns:1fr}.calendar-form-field{grid-column:1}.calendar-modal-actions{flex-direction:column-reverse}.calendar-modal-actions button{width:100%}}
/* Final de pantalla de calendario */

/* Calendario académico 2.0 */
.calendar-page .calendar-hero{background:linear-gradient(125deg,#0b2f6b 0%,#1658be 55%,#0f766e 125%)}
.calendar-page .calendar-hero-actions{flex-wrap:wrap;justify-content:flex-end}.calendar-page .calendar-stats article{transition:transform .2s ease,box-shadow .2s ease}.calendar-page .calendar-stats article:hover{transform:translateY(-2px);box-shadow:0 13px 30px rgba(15,23,42,.08)}
.calendar-page .calendar-toolbar{margin-bottom:12px}.calendar-search{height:40px;min-width:220px;border:1px solid var(--line);background:var(--surface-soft);border-radius:12px;padding:0 12px;display:flex;align-items:center;gap:9px;color:var(--muted)}.calendar-search:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.1)}.calendar-search input{border:0;outline:0;background:transparent;color:var(--text);width:100%;font:inherit;font-size:var(--font-md)}
.calendar-page .calendar-filters{justify-content:flex-start;border-bottom:1px solid var(--line);padding-bottom:14px;margin-bottom:4px}.calendar-page .calendar-filter.active{background:var(--primary);border-color:var(--primary);color:#fff}.calendar-page .calendar-filter.active .filter-dot{background:#fff}
.calendar-page .calendar-cell{min-height:112px}.calendar-page .calendar-cell:focus-visible{outline:3px solid rgba(37,99,235,.35);outline-offset:-3px}.calendar-event-chip.completed{text-decoration:line-through;opacity:.52}.calendar-page .calendar-cell.selected{background:rgba(37,99,235,.07);box-shadow:inset 0 0 0 2px var(--blue)}
.calendar-page .calendar-agenda>header{position:relative}.calendar-page .calendar-agenda-date{display:block;background:transparent;color:var(--muted);padding:3px 0 0;font-weight:600;text-transform:capitalize}.calendar-agenda-add{width:100%;margin:16px 0 0;padding:10px 12px;border:1px dashed rgba(37,99,235,.45);border-radius:11px;background:rgba(37,99,235,.06);color:var(--blue);font-size:var(--font-sm);font-weight:800;cursor:pointer}.calendar-agenda-add:hover{background:rgba(37,99,235,.12)}
.calendar-agenda-item{transition:transform .18s ease,border-color .18s ease}.calendar-agenda-item:hover{transform:translateY(-1px);border-color:rgba(37,99,235,.3)}.calendar-agenda-item.is-completed{opacity:.62}.calendar-agenda-item.is-completed h3{text-decoration:line-through}.agenda-topline{display:flex;align-items:center;justify-content:space-between;gap:8px}.priority-badge{font-size:var(--font-xs);font-weight:800;text-transform:uppercase;padding:4px 6px;border-radius:6px}.priority-badge.low{background:#e2e8f0;color:#475569}.priority-badge.medium{background:#fef3c7;color:#b45309}.priority-badge.high{background:#fee2e2;color:#b91c1c}.agenda-location{font-size:var(--font-xs);color:var(--muted);margin-top:7px;display:flex;gap:5px;align-items:center}.agenda-location:empty{display:none}.calendar-page .agenda-actions{flex-wrap:wrap}.calendar-page .agenda-actions button:first-child{color:#047857;border-color:rgba(16,185,129,.25)}
.calendar-form-field small{color:var(--muted);font-size:var(--font-xs);text-align:right}.calendar-save-btn:disabled{opacity:.6;cursor:wait}
@media(max-width:1180px){.calendar-page .calendar-toolbar{flex-direction:row;align-items:center}.calendar-search{margin-left:auto}.calendar-page .calendar-agenda{padding-top:26px}}
@media(max-width:700px){.calendar-page .calendar-hero-actions{grid-template-columns:1fr 1fr}.calendar-page .calendar-primary-btn{grid-column:1/-1}.calendar-page .calendar-toolbar{align-items:stretch;flex-direction:column}.calendar-search{width:100%;margin:0}.calendar-page .calendar-filters{display:flex;overflow-x:auto;flex-wrap:nowrap;padding-bottom:12px}.calendar-page .calendar-filter{flex:0 0 auto}.calendar-page .calendar-cell{min-height:68px}}
@media(max-width:420px){.calendar-page .calendar-hero-actions{grid-template-columns:1fr}.calendar-page .calendar-primary-btn{grid-column:auto}}

/* Vistas y productividad del calendario */
.calendar-viewbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:2px 0 14px}.calendar-view-switcher{display:inline-flex;padding:4px;border:1px solid var(--line);border-radius:12px;background:var(--surface-soft)}.calendar-view-switcher button{padding:8px 12px;border-radius:8px;background:transparent;color:var(--muted);font-size:var(--font-xs);font-weight:800;cursor:pointer}.calendar-view-switcher button i{margin-right:6px}.calendar-view-switcher button.active{background:var(--surface);color:var(--blue);box-shadow:0 2px 8px rgba(15,23,42,.08)}
.calendar-filter-status{display:flex;align-items:center;gap:8px;padding:7px 9px 7px 11px;border-radius:10px;background:#eff6ff;color:#1d4ed8;font-size:var(--font-xs);font-weight:700}.calendar-filter-status[hidden]{display:none}.calendar-filter-status button{padding:5px 8px;border-radius:7px;background:#dbeafe;color:#1d4ed8;font-size:var(--font-xs);font-weight:800;cursor:pointer}.calendar-filter-status button:hover{background:#bfdbfe}
.calendar-event-chip{cursor:grab}.calendar-event-chip:active{cursor:grabbing}.calendar-event-chip.is-dragging{opacity:.35}.calendar-cell.drag-over,.calendar-week-column.drag-over{background:rgba(37,99,235,.13)!important;box-shadow:inset 0 0 0 2px var(--blue)}
.calendar-week-view{display:grid;grid-template-columns:repeat(7,minmax(120px,1fr));min-height:510px;border:1px solid var(--line);border-radius:16px;overflow-x:auto}.calendar-week-view[hidden],.calendar-list-view[hidden]{display:none}.calendar-week-column{min-width:120px;border-right:1px solid var(--line);background:var(--surface);transition:.18s}.calendar-week-column:last-child{border-right:0}.calendar-week-column.today{background:rgba(37,99,235,.035)}.calendar-week-heading{width:100%;padding:13px 8px;border-bottom:1px solid var(--line);background:var(--surface-soft);color:var(--text);display:flex;align-items:center;justify-content:center;gap:7px;text-transform:capitalize;cursor:pointer}.calendar-week-heading span{font-size:var(--font-xs);color:var(--muted);font-weight:800}.calendar-week-heading strong{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:var(--font-md)}.calendar-week-column.today .calendar-week-heading strong{background:var(--blue);color:#fff}.calendar-week-events{padding:8px;display:flex;flex-direction:column;gap:7px;min-height:450px}.week-empty{font-size:var(--font-xs);color:var(--muted);text-align:center;padding:16px 4px}.calendar-week-card{width:100%;padding:9px;border-radius:9px;border-left:3px solid;text-align:left;cursor:grab;display:flex;flex-direction:column;gap:3px}.calendar-week-card time,.calendar-week-card small{font-size:var(--font-xs);font-weight:700;opacity:.78}.calendar-week-card strong{font-size:var(--font-xs);line-height:1.3}.calendar-week-card.delivery{background:#dbeafe;color:#1d4ed8;border-color:#2563eb}.calendar-week-card.meeting{background:#ede9fe;color:#6d28d9;border-color:#8b5cf6}.calendar-week-card.review{background:#d1fae5;color:#047857;border-color:#10b981}.calendar-week-card.deadline{background:#ffedd5;color:#c2410c;border-color:#f97316}.calendar-week-card.completed{text-decoration:line-through;opacity:.52}
.calendar-list-view{display:flex;flex-direction:column;gap:10px;max-width:860px;margin:0 auto;padding:8px 0}.calendar-list-date{font-size:var(--font-md);text-transform:capitalize;color:var(--muted);padding:16px 3px 4px;border-bottom:1px solid var(--line)}.calendar-agenda-item.list{grid-template-columns:5px 1fr;padding:16px}.calendar-agenda-item.list .agenda-content h3{font-size:var(--font-lg)}.calendar-agenda-item.list .agenda-actions{justify-content:flex-end}
.calendar-upcoming{border-top:1px solid var(--line);margin-top:6px;padding-top:18px}.calendar-upcoming>header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.calendar-upcoming h3{font-size:var(--font-lg);margin-top:3px}.calendar-upcoming>header>span{min-width:26px;height:26px;padding:0 7px;border-radius:9px;background:#eff6ff;color:var(--blue);display:grid;place-items:center;font-size:var(--font-xs);font-weight:900}.calendar-upcoming-item{width:100%;display:grid;grid-template-columns:40px 1fr;align-items:center;gap:10px;text-align:left;padding:9px 4px;border-bottom:1px solid var(--line);background:transparent;color:var(--text);cursor:pointer}.calendar-upcoming-item:hover{background:var(--surface-soft)}.upcoming-date{border-radius:9px;background:var(--surface-soft);padding:5px 3px;text-align:center;color:var(--muted);font-size:var(--font-xs);text-transform:uppercase}.upcoming-date strong{display:block;color:var(--blue);font-size:var(--font-lg)}.calendar-upcoming-item>span:last-child{min-width:0}.calendar-upcoming-item>span:last-child strong{display:block;font-size:var(--font-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.calendar-upcoming-item small{font-size:var(--font-xs);color:var(--muted)}.upcoming-empty{padding:15px 5px;color:var(--muted);font-size:var(--font-xs);text-align:center}
.calendar-empty-guided{border:1px dashed var(--line);border-radius:14px;background:var(--surface-soft);margin:3px 0}.calendar-list-view>.calendar-empty-guided{margin:35px auto;width:min(480px,100%);padding:50px 24px}.calendar-list-view>.calendar-empty-guided>i{font-size:36px;color:#94a3b8}
.calendar-all-day{justify-content:center}.calendar-check{min-height:42px;display:flex;align-items:center;gap:9px;padding:9px 11px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);font-size:var(--font-sm);font-weight:700;color:var(--muted)}.calendar-check input{width:16px!important;height:16px;padding:0!important;accent-color:var(--blue)}.calendar-form-field[hidden]{display:none}
.calendar-confirm-modal{width:min(430px,100%);background:var(--surface);border:1px solid var(--line);border-radius:24px;padding:30px;text-align:center;box-shadow:0 26px 70px rgba(15,23,42,.3)}.calendar-confirm-icon{width:58px;height:58px;margin:0 auto 16px;border-radius:18px;display:grid;place-items:center;background:#fee2e2;color:#dc2626;font-size:22px}.calendar-confirm-modal h2{font-size:22px;margin-bottom:8px}.calendar-confirm-modal p{color:var(--muted);font-size:var(--font-md);line-height:1.55}.calendar-confirm-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:24px}.calendar-delete-btn{padding:11px 15px;border-radius:11px;background:#dc2626;color:#fff;font-weight:800;cursor:pointer}.calendar-delete-btn:disabled{opacity:.6;cursor:wait}
@media(max-width:700px){.calendar-viewbar{align-items:stretch;flex-direction:column}.calendar-view-switcher{display:grid;grid-template-columns:repeat(3,1fr)}.calendar-view-switcher button{padding:9px 6px}.calendar-filter-status{justify-content:space-between}.calendar-week-view{grid-template-columns:repeat(7,minmax(145px,1fr))}.calendar-list-view{padding:0}.calendar-confirm-actions{grid-template-columns:1fr}.calendar-confirm-modal{padding:24px}.calendar-form-field.calendar-all-day{grid-column:1}}

/* Ajustes de legibilidad y ergonomía */
.calendar-stat-detail{display:block;margin-top:2px;color:var(--muted);font-size:var(--font-xs);font-weight:700}.calendar-page .calendar-cell{min-height:122px}.calendar-page .calendar-cell-events{gap:5px}.calendar-page .calendar-event-chip{min-height:25px;padding:6px 7px;border-left-width:4px;border-radius:7px;font-size:var(--font-xs);line-height:1.2;font-weight:800;letter-spacing:.005em;box-shadow:0 1px 2px rgba(15,23,42,.05)}.calendar-page .agenda-actions{gap:8px}.calendar-page .agenda-actions button{min-height:38px;padding:9px 11px;border-radius:9px;font-size:var(--font-xs);display:inline-flex;align-items:center;justify-content:center;gap:5px}
@media(max-width:390px){.calendar-page .agenda-actions{grid-template-columns:1fr}.calendar-page .agenda-actions button{width:100%}}
/* Final de dashboard */

/* Inicio de panel derecho */
.right-column{
    display:flex;
    flex-direction:column;
    gap:24px;
    min-width:0;
    margin-top:0;
}
.notifications-panel,
.reminders-panel{
    background:var(--surface);
    padding:24px;
    border-radius:24px;
    box-shadow:var(--shadow);
    border:1px solid rgba(226,232,240,.75);
}
.panel-heading{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:14px;
    margin-bottom:18px;
}
.panel-heading h2{
    color:var(--text);
    font-size:21px;
    display:flex;
    align-items:center;
    gap:9px;
}
.panel-heading h2 i{
    color:var(--blue);
    font-size:18px;
}
.panel-heading span{
    color:var(--muted);
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:999px;
    padding:7px 10px;
    font-size:var(--font-sm);
    font-weight:800;
}
.notification-card,
.reminder-card{
    background:var(--surface-soft);
    border:1px solid var(--line);
    padding:16px;
    border-radius:17px;
    margin-bottom:14px;
    transition:.25s ease;
}
.notification-card{
    border-left:5px solid var(--blue);
}
.notification-card:hover,
.reminder-card:hover{
    transform:translateY(-2px);
    box-shadow:0 10px 20px rgba(15,23,42,.06);
}
.notification-card strong,
.reminder-card strong{
    color:var(--text);
    display:block;
    margin-bottom:7px;
}
.notification-card p,
.reminder-card p{
    color:var(--muted);
    font-size:var(--font-md);
    line-height:1.45;
}
.notification-card span{
    display:block;
    margin-top:10px;
    color:var(--muted);
    font-size:var(--font-sm);
    font-weight:700;
}
.reminder-card{
    display:grid;
    grid-template-columns:62px 1fr;
    gap:13px;
    align-items:center;
}
.reminder-date{
    background:rgba(16,185,129,.14);
    color:var(--accent);
    border:1px solid rgba(16,185,129,.25);
    border-radius:14px;
    padding:10px 8px;
    text-align:center;
    font-size:var(--font-md);
    font-weight:800;
}
/* Final de panel derecho */

/* Inicio de skeleton loader */
.skeleton-loader{
    margin-bottom:28px;
}
.skeleton-loader[hidden]{
    display:none;
}
.skeleton-status-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
    gap:20px;
    margin-bottom:28px;
}
.skeleton-dashboard-grid{
    display:grid;
    grid-template-columns:minmax(0,1fr) minmax(290px,340px);
    gap:24px;
}
.skeleton-card{
    background:var(--surface);
    border:1px solid rgba(226,232,240,.75);
    border-radius:24px;
    box-shadow:var(--shadow);
    padding:24px;
    min-height:190px;
    display:flex;
    flex-direction:column;
    gap:14px;
}
.skeleton-card.large{
    min-height:320px;
}
.skeleton-card.side{
    min-height:260px;
}
.skeleton-line,
.skeleton-pill{
    display:block;
    border-radius:999px;
    position:relative;
    overflow:hidden;
}
.skeleton-line{
    width:100%;
    height:14px;
}
.skeleton-line.title{
    width:72%;
    height:24px;
}
.skeleton-line.medium{
    width:58%;
}
.skeleton-line.short{
    width:36%;
}
.skeleton-pill{
    width:128px;
    height:34px;
    margin-top:auto;
}
/* Final de skeleton loader */

/* Inicio de animaciones */
.status-card,
.project-card,
.notification-card,
.reminder-card,
.calendar-summary,
.current-report,
.observations-preview,
.activity-summary,
.process-dates{
    opacity:0;
    transform:translateY(18px);
    transition:opacity .5s ease,transform .5s ease,box-shadow .25s ease;
}
.show{
    opacity:1;
    transform:translateY(0);
}
.current-report.show{
    z-index:15;
}
.ring{
    animation:ring .45s ease;
}
@keyframes ring{
    0%,100%{transform:rotate(0);}
    25%{transform:rotate(12deg);}
    50%{transform:rotate(-10deg);}
    75%{transform:rotate(6deg);}
}
/* Final de animaciones */

/* Inicio de responsive */
@media(max-width:1200px){
    .dashboard-container,
    .dashboard-top-grid{
        grid-template-columns:1fr;
    }
    .right-column{
        display:block;
        margin-top:0;
    }
    .skeleton-dashboard-grid{
        grid-template-columns:1fr;
    }
}
@media(max-width:1280px){
    .report-insight-grid{
        grid-template-columns:1fr;
    }
    .next-action-buttons{
        grid-template-columns:repeat(2,minmax(0,1fr));
    }
}
@media(max-width:1120px){
    .current-report{
        grid-template-columns:1fr;
    }
    .report-extra-row{
        grid-template-columns:1fr;
    }
    .report-team{
        width:max-content;
        max-width:100%;
    }
    .activity-list{
        grid-template-columns:1fr;
    }
}
@media(max-width:1100px){
    .status-section{
        grid-template-columns:repeat(2,minmax(0,1fr));
    }
    .dashboard-follow-grid{
        grid-template-columns:1fr;
    }
}
@media(max-width:1000px){
    :root{
        --app-frame-padding:22px;
        --app-page-inline-breathing:0px;
    }
    body{
        display:block;
    }
    .sidebar{
        transform:translateX(-105%);
    }
    .sidebar.open{
        transform:translateX(0);
    }
    .main{
        width:100%;
        margin-left:0;
        padding:var(--app-frame-padding);
    }
    .hamburger-btn{
        display:flex;
        align-items:center;
        justify-content:center;
    }
    .topbar{
        align-items:flex-start;
    }
    .right-column{
        grid-template-columns:1fr;
    }
}
@media(max-width:760px){
    :root{
        --app-frame-padding:16px;
    }
    .main{
        padding:var(--app-frame-padding);
    }
    .topbar{
        border-radius:20px;
        padding:18px;
        display:grid;
        grid-template-columns:auto 1fr;
    }
    .welcome h2{
        font-size:22px;
    }
    .welcome p{
        font-size:var(--font-md);
    }
    .topbar-right{
        grid-column:1 / -1;
        width:100%;
        justify-content:flex-end;
        flex-wrap:wrap;
    }
    .topbar-action-btn{
        width:100%;
    }
    .status-section{
        grid-template-columns:1fr;
    }
    .section-heading{
        align-items:flex-start;
        flex-direction:column;
    }
    .repository-results-heading{
        align-items:center;
        flex-direction:row;
    }
    .report-insight-grid,
    .process-dates{
        grid-template-columns:1fr;
    }
    .report-quick-actions{
        display:grid;
        grid-template-columns:1fr;
    }
    .report-quick-actions button{
        justify-content:center;
    }
    .report-team{
        width:100%;
    }
    .team-toggle{
        grid-template-columns:1fr auto;
        justify-items:start;
    }
    .team-toggle.multiple-members,
    .team-toggle.single-member{
        grid-template-columns:1fr auto;
    }
    .team-toggle .team-stack,
    .team-toggle strong{
        justify-self:start;
    }
    .next-action-buttons{
        grid-template-columns:1fr;
    }
    .upload-btn{
        width:100%;
    }
    .projects-grid{
        grid-template-columns:1fr;
    }
    .project-footer{
        flex-direction:column;
        align-items:flex-start;
    }
    .open-btn{
        width:100%;
    }
    .compact-heading{
        grid-template-columns:1fr;
    }
    .compact-action{
        width:100%;
        min-width:0;
    }
    .panel-heading{
        align-items:center;
        flex-direction:row;
    }
    .calendar-summary{
        padding:20px;
    }
    .calendar-heading{
        align-items:flex-start;
        flex-direction:column;
    }
    .calendar-action{
        width:100%;
    }
    .calendar-title{
        align-items:flex-start;
        flex-direction:column;
    }
    .calendar-day{
        min-height:38px;
        border-radius:10px;
    }
}
@media(max-width:480px){
    .sidebar{
        width:min(86vw,300px);
        padding:20px;
    }
    .status-card,
    .project-card,
    .calendar-summary,
    .notifications-panel,
    .reminders-panel,
    .current-report,
    .observations-preview,
    .activity-summary,
    .process-dates{
        padding:20px;
        border-radius:20px;
    }
    .current-report h2{
        font-size:24px;
    }
    .report-meta-grid{
        grid-template-columns:1fr;
    }
    .observation-top{
        align-items:flex-start;
        flex-direction:row;
    }
    .activity-item{
        grid-template-columns:1fr;
    }
    .project-card-top{
        align-items:flex-start;
        flex-direction:row;
    }
    .avatar-dropdown{
        right:-4px;
        width:min(235px,calc(100vw - 32px));
    }
    .reminder-card{
        grid-template-columns:1fr;
    }
    .reminder-date{
        width:max-content;
    }
    .project-details{
        grid-template-columns:1fr;
    }
    .calendar-month{
        padding:14px;
    }
    .calendar-grid{
        gap:6px;
    }
    .calendar-day{
        min-height:34px;
        font-size:var(--font-sm);
    }
}
/* Final de responsive */

/* Inicio de pantalla de inicio de sesion */
body.login-page{
    display:block;
    margin:0;
    width:100%;
    min-height:0;
    overflow-x:hidden;
    overflow-y:auto;
    background:
        linear-gradient(135deg,rgba(15,61,145,.94),rgba(13,47,112,.92)),
        var(--primary-dark);
    color:var(--text);
}
html.login-root{
    margin:0;
    width:100%;
    background:
        linear-gradient(135deg,rgba(15,61,145,.94),rgba(13,47,112,.92)),
        var(--primary-dark);
    min-height:100%;
}
.login-shell{
    min-height:100vh;
    min-height:100dvh;
    display:grid;
    grid-template-columns:minmax(320px,1fr) minmax(360px,480px);
    align-items:center;
    gap:44px;
    width:min(1180px,100%);
    margin:0 auto;
    padding:42px 28px;
}
.login-primary-shell{
    padding-block:clamp(28px,3.5vh,42px);
}
.login-intro{
    color:white;
    max-width:620px;
}
.institution-brand{
    display:flex;
    align-items:center;
    gap:16px;
    margin-bottom:36px;
}
.institution-brand img{
    width:82px;
    height:82px;
    object-fit:contain;
    background:white;
    border-radius:18px;
    padding:10px;
    box-shadow:0 18px 35px rgba(0,0,0,.14);
}
.institution-brand span{
    display:block;
    font-size:var(--font-md);
    line-height:1.4;
    opacity:.82;
    font-weight:700;
    text-transform:uppercase;
}
.institution-brand strong{
    display:block;
    margin-top:4px;
    font-size:20px;
    line-height:1.25;
}
.login-intro h1{
    max-width:580px;
    font-size:clamp(34px,5vw,58px);
    line-height:1.03;
    letter-spacing:0;
    margin-bottom:18px;
}
.login-intro p{
    max-width:540px;
    color:rgba(255,255,255,.84);
    font-size:18px;
    line-height:1.7;
}
.role-list{
    display:flex;
    flex-wrap:wrap;
    gap:12px;
    margin-top:28px;
}
.role-list span{
    display:inline-flex;
    align-items:center;
    gap:8px;
    background:rgba(255,255,255,.11);
    border:1px solid rgba(255,255,255,.18);
    border-radius:999px;
    padding:10px 14px;
    color:white;
    font-size:var(--font-md);
    font-weight:700;
}
.role-list i{
    color:var(--accent);
}
.login-panel{
    width:100%;
    max-width:480px;
    justify-self:center;
    align-self:center;
    background:var(--surface);
    border:1px solid rgba(255,255,255,.58);
    border-radius:24px;
    padding:34px;
    box-shadow:0 28px 65px rgba(0,0,0,.22);
}
.login-panel-header{
    margin-bottom:26px;
}
.login-panel-header span{
    color:var(--accent);
    font-size:13px;
    font-weight:800;
    text-transform:uppercase;
}
.login-panel-header h2{
    color:var(--text);
    font-size:30px;
    margin-top:7px;
    letter-spacing:0;
}
.login-panel-header p{
    color:var(--muted);
    line-height:1.55;
    margin-top:10px;
}
.login-alert{
    display:none;
    align-items:flex-start;
    gap:10px;
    background:rgba(239,68,68,.1);
    border:1px solid rgba(239,68,68,.25);
    border-radius:14px;
    color:#b91c1c;
    padding:12px 14px;
    font-size:14px;
    font-weight:700;
    line-height:1.4;
    margin-bottom:18px;
}
.login-alert.show{
    display:flex;
}
.login-alert-success{
    background:rgba(16,185,129,.11);
    border-color:rgba(16,185,129,.24);
    color:#047857;
}
.login-alert-success i{
    color:var(--accent);
}
.login-form{
    display:grid;
    gap:18px;
}
.form-group{
    display:grid;
    gap:8px;
}
.form-group label{
    color:var(--text);
    font-size:14px;
    font-weight:800;
}
.input-wrap{
    display:flex;
    align-items:center;
    gap:12px;
    background:var(--surface-soft);
    border:1px solid var(--line);
    border-radius:16px;
    padding:0 15px;
    transition:.2s ease;
}
.input-wrap:focus-within{
    border-color:var(--blue);
    box-shadow:0 0 0 4px rgba(37,99,235,.12);
    background:var(--surface);
}
.input-wrap i{
    width:18px;
    color:var(--primary);
    text-align:center;
}
.input-wrap input{
    width:100%;
    min-height:50px;
    border:0;
    outline:0;
    background:transparent;
    color:var(--text);
    font:inherit;
}
.input-wrap input::placeholder{
    color:#94a3b8;
}
.login-primary-shell #user:placeholder-shown{
    overflow:hidden;
    text-overflow:ellipsis;
}
.password-toggle{
    flex:0 0 38px;
    width:38px;
    height:38px;
    margin-right:-8px;
    display:grid;
    place-items:center;
    border:0;
    border-radius:10px;
    background:transparent;
    color:var(--muted);
    cursor:pointer;
    transition:background .18s ease,color .18s ease;
}
.password-toggle:hover{
    background:rgba(37,99,235,.1);
    color:var(--blue);
}
.password-toggle:focus-visible,
.login-submit:focus-visible,
.forgot-link:focus-visible{
    outline:3px solid rgba(37,99,235,.3);
    outline-offset:3px;
}
.password-toggle i{
    width:auto;
    color:inherit;
    pointer-events:none;
}
.form-group.invalid .input-wrap{
    border-color:var(--danger);
    box-shadow:0 0 0 4px rgba(239,68,68,.1);
}
.field-error{
    display:none;
    color:var(--danger);
    font-size:13px;
    font-weight:700;
}
.form-group.invalid .field-error{
    display:block;
}
.form-options{
    display:flex;
    justify-content:flex-end;
    align-items:center;
    margin-top:-2px;
}
.forgot-link{
    color:var(--blue);
    font-size:14px;
    font-weight:800;
    transition:.2s ease;
}
.forgot-link:hover{
    color:var(--accent);
}
.login-submit{
    width:100%;
    min-height:52px;
    background:linear-gradient(135deg,var(--primary),var(--blue));
    color:white;
    border-radius:16px;
    cursor:pointer;
    font-weight:800;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:10px;
    transition:.25s ease;
}
.login-submit:hover{
    transform:translateY(-2px);
    box-shadow:0 16px 28px rgba(37,99,235,.26);
}
.login-submit:active{
    transform:translateY(0);
}
.access-note{
    margin-top:20px;
    display:flex;
    align-items:flex-start;
    gap:10px;
    background:rgba(16,185,129,.11);
    border:1px solid rgba(16,185,129,.24);
    color:var(--muted);
    border-radius:16px;
    padding:13px 14px;
    font-size:13px;
    line-height:1.45;
}
.access-note i{
    color:var(--accent);
    margin-top:2px;
}
@media(max-width:900px){
    .login-shell{
        grid-template-columns:1fr;
        gap:30px;
        padding:32px 22px;
    }
    .login-intro{
        max-width:760px;
    }
    .login-primary-shell .login-intro p{
        width:100%;
        max-width:760px;
    }
    .login-intro p{
        font-size:16px;
    }
    .login-panel{
        width:100%;
        max-width:560px;
        justify-self:center;
    }
}
@media(max-width:560px){
    .login-shell{
        padding:22px 14px;
    }
    .institution-brand{
        align-items:flex-start;
        margin-bottom:26px;
    }
    .institution-brand img{
        width:68px;
        height:68px;
        border-radius:16px;
    }
    .institution-brand strong{
        font-size:17px;
    }
    .login-intro h1{
        font-size:32px;
    }
    .role-list{
        gap:9px;
    }
    .role-list span{
        width:100%;
        justify-content:flex-start;
    }
    .login-panel{
        border-radius:20px;
        padding:24px 18px;
    }
    .login-panel-header h2{
        font-size:25px;
    }
}
@media(max-height:820px) and (min-width:901px){
    .login-primary-shell{
        gap:32px;
        padding-block:24px;
    }
    .login-primary-shell .institution-brand{
        margin-bottom:24px;
    }
    .login-primary-shell .role-list{
        gap:10px;
        margin-top:20px;
    }
    .login-primary-shell .role-list span{
        padding-block:8px;
    }
    .login-primary-shell .login-panel{
        padding:26px 30px;
    }
    .login-primary-shell .login-panel-header{
        margin-bottom:20px;
    }
    .login-primary-shell .login-alert{
        padding-block:10px;
        margin-bottom:14px;
    }
    .login-primary-shell .login-form{
        gap:14px;
    }
    .login-primary-shell .form-group{
        gap:6px;
    }
    .login-primary-shell .input-wrap input{
        min-height:46px;
    }
    .login-primary-shell .form-options{
        margin-top:-4px;
    }
    .login-primary-shell .login-submit{
        min-height:48px;
    }
    .login-primary-shell .access-note{
        margin-top:16px;
        padding-block:10px;
    }
}
/* Final de pantalla de inicio de sesion */

/* Inicio de scroll */
html.dashboard-root::-webkit-scrollbar,
body.dashboard-page::-webkit-scrollbar{
    width:10px;
    background:transparent;
}

html.dashboard-root::-webkit-scrollbar-track,
body.dashboard-page::-webkit-scrollbar-track{
    background:transparent;
}

html.dashboard-root::-webkit-scrollbar-thumb,
body.dashboard-page::-webkit-scrollbar-thumb{
    background:rgba(15,61,145,.35);
    border-radius:20px;
}

html.dashboard-root::-webkit-scrollbar-thumb:hover,
body.dashboard-page::-webkit-scrollbar-thumb:hover{
    background:rgba(16,185,129,.65);
}

html.dashboard-root::-webkit-scrollbar-corner,
body.dashboard-page::-webkit-scrollbar-corner{
    background:transparent;
}

html.login-root::-webkit-scrollbar,
body.login-page::-webkit-scrollbar{
    width:10px;
    background:var(--primary-dark);
}

html.login-root::-webkit-scrollbar-track,
body.login-page::-webkit-scrollbar-track{
    background:var(--primary-dark);
}

html.login-root::-webkit-scrollbar-thumb,
body.login-page::-webkit-scrollbar-thumb{
    background:rgba(15,61,145,.35);
    border-radius:20px;
}

html.login-root::-webkit-scrollbar-thumb:hover,
body.login-page::-webkit-scrollbar-thumb:hover{
    background:rgba(16,185,129,.65);
}

html.login-root::-webkit-scrollbar-corner,
body.login-page::-webkit-scrollbar-corner{
    background:var(--primary-dark);
}

html.login-root,
body.login-page{
    scrollbar-color:rgba(15,61,145,.35) var(--primary-dark);
}

html.dashboard-root,
body.dashboard-page{
    scrollbar-color:rgba(15,61,145,.35) transparent;
}

html.dashboard-root,
body.dashboard-page,
html.login-root,
body.login-page{
    scrollbar-width:auto;
}
/* Final de scroll*/

/* Inicio de estilos de proyectos */
#repositoryContent { opacity: 1; transform: none; }
.repository-page-header {
    margin-top: 16px;
    margin-bottom: 20px;
}
.repository-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--muted);
    font-size:var(--font-xs);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .06em;
}
.repository-page-header h1 {
    margin: 4px 0 6px;
    color: var(--text);
    font-size: clamp(22px, 2.8vw, 30px);
    font-weight: 800;
    line-height: 1.25;
}
.repository-page-header p {
    color: var(--muted);
    font-size:var(--font-md);
    line-height: 1.5;
    max-width: 720px;
}

/* La vista completa de materiales conserva el hero y buscador previos. */
.support-materials-page .repository-hero {
    margin-top: 24px;
    padding: 28px 30px;
    border-radius: 24px;
    color: #fff;
    background: linear-gradient(135deg, var(--primary-dark), var(--primary) 60%, var(--blue));
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    box-shadow: var(--shadow);
}
.support-materials-page .repository-hero .section-eyebrow { color: rgba(255,255,255,.72); }
.support-materials-page .repository-hero h2 { margin: 7px 0 8px; font-size: clamp(24px,3vw,34px); }
.support-materials-page .repository-hero p { max-width: 680px; color: rgba(255,255,255,.82); line-height: 1.6; }
.support-materials-page .repository-hero-icon { width: 82px; height: 82px; border-radius: 22px; display: grid; place-items: center; flex-shrink: 0; background: rgba(255,255,255,.14); font-size: 34px; }
.support-materials-page .repository-search {
    min-height: 52px;
    padding: 0 16px;
    border: 1px solid var(--line);
    border-radius: 15px;
    background: var(--surface-soft);
    display: flex;
    align-items: center;
    gap: 12px;
}
.support-materials-page .repository-search i { color: var(--primary); }
.support-materials-page .repository-search input { width: 100%; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; }

/* Shell unificado del repositorio */
.repository-shell {
    padding: 24px;
    border: 1px solid var(--line);
    border-radius: 20px;
    background: var(--surface);
    box-shadow: var(--shadow-soft);
    display: grid;
    gap: 20px;
}

/* Pestañas unificadas */
.repository-tabs-nav {
    display: flex;
    align-items: center;
    gap: 8px;
    border-bottom: 1px solid var(--line);
    padding-bottom: 12px;
}
.repository-tab-btn {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    padding: 10px 18px;
    border: 1px solid transparent;
    border-radius: 12px;
    background: transparent;
    color: var(--muted);
    font: inherit;
    font-size:var(--font-md);
    font-weight: 650;
    cursor: pointer;
    transition: all .2s ease;
}
.repository-tab-btn:hover {
    color: var(--text);
    background: var(--surface-soft);
}
.repository-tab-btn.is-active {
    color: var(--primary);
    background: var(--primary-soft);
    border-color: rgba(37, 99, 235, .2);
    font-weight: 800;
}
.repository-tab-badge {
    padding: 2px 8px;
    border-radius: 999px;
    background: var(--surface-soft);
    color: var(--muted);
    font-size:var(--font-xs);
    font-weight: 800;
}
.repository-tab-btn.is-active .repository-tab-badge {
    background: rgba(37, 99, 235, .15);
    color: var(--primary);
}

/* Toolbar integrada */
.repository-toolbar-integrated {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    padding: 14px;
    border: 1px solid var(--line);
    border-radius: 16px;
    background: var(--surface-soft);
}
.repository-shell .repository-search {
    flex: 1 1 280px;
    min-height: 44px;
    padding: 0 14px;
    border: 1px solid var(--line);
    border-radius: 12px;
    background: var(--surface);
    display: flex;
    align-items: center;
    gap: 10px;
    transition: border-color .18s ease, box-shadow .18s ease;
}
.repository-shell .repository-search:focus-within {
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, .14);
}
.repository-shell .repository-search i { color: var(--muted); font-size: 14px; }
.repository-shell .repository-search input {
    width: 100%;
    border: 0;
    outline: 0;
    background: transparent;
    color: var(--text);
    font: inherit;
    font-size:var(--font-md);
}
.repository-filters-group {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}
.repository-filter-item {
    display: flex;
    align-items: center;
    gap: 6px;
}
.repository-filter-item > span {
    color: var(--muted);
    font-size:var(--font-xs);
    font-weight: 800;
    text-transform: uppercase;
}
.repository-toolbar-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-left: auto;
}
.repository-catalog-subheading {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-top: 8px;
}
.repository-section-subhead {
    margin: 0;
    color: var(--text);
    font-size:var(--font-lg);
    font-weight: 800;
}
.repository-shell .repository-dropdown-trigger {
    width: 100%;
    min-height: 44px;
    padding: 0 34px 0 12px;
    border: 1px solid var(--line);
    border-radius: 12px;
    outline: 0;
    background-color: var(--surface);
    color: var(--text);
    font: inherit;
    font-size:var(--font-md);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    cursor: pointer;
    transition: border-color .18s ease, box-shadow .18s ease;
}
.repository-shell .repository-dropdown-trigger:hover {
    border-color: rgba(53, 110, 255, .35);
    background-color: color-mix(in srgb, var(--surface-soft) 88%, white 12%);
}
.repository-shell .repository-dropdown-trigger:focus,
.repository-shell .repository-dropdown-trigger:focus-visible {
    border-color: rgba(53, 110, 255, .65);
    box-shadow: 0 0 0 4px rgba(53, 110, 255, .12);
    background-color: var(--surface);
}
.repository-dropdown-trigger i {
    color: var(--muted);
    transition: transform .2s ease;
}
.repository-dropdown.is-open .repository-dropdown-trigger i {
    transform: rotate(180deg);
}
.repository-dropdown-menu {
    position: absolute;
    left: 0;
    right: 0;
    top: calc(100% + 8px);
    z-index: 20;
    padding: 8px;
    border: 1px solid var(--line);
    border-radius: 16px;
    background: var(--surface);
    box-shadow: 0 18px 38px rgba(15, 23, 42, .12);
    display: grid;
    gap: 4px;
    max-height: 350px;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: rgba(53, 110, 255, .38) transparent;
    overscroll-behavior: contain;
}
.repository-dropdown-menu[hidden] {
    display: none;
}
.repository-dropdown-menu::-webkit-scrollbar {
    width: 8px;
}
.repository-dropdown-menu::-webkit-scrollbar-track {
    background: transparent;
}
.repository-dropdown-menu::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, rgba(53, 110, 255, .38), rgba(53, 110, 255, .18));
    border-radius: 999px;
    border: 2px solid transparent;
    background-clip: padding-box;
}
.repository-dropdown-menu::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(180deg, rgba(53, 110, 255, .58), rgba(53, 110, 255, .28));
    border: 2px solid transparent;
    background-clip: padding-box;
}
.repository-dropdown-option {
    width: 100%;
    padding: 11px 12px;
    border: 0;
    border-radius: 12px;
    background: transparent;
    color: var(--text);
    text-align: left;
    font: inherit;
    font-weight: 600;
    cursor: pointer;
    transition: background-color .18s ease, color .18s ease;
}
.repository-dropdown-option:hover,
.repository-dropdown-option:focus-visible {
    background: var(--primary-soft);
    color: var(--primary-dark);
}
.repository-dropdown-option.is-selected {
    background: linear-gradient(135deg, rgba(53, 110, 255, .14), rgba(53, 110, 255, .08));
    color: var(--primary-dark);
    font-weight: 800;
}
.repository-dropdown-option:focus {
    outline: 0;
}
.repository-fixed-career { display: grid; gap: 6px; }
.repository-fixed-career strong { min-height: 52px; padding: 0 16px; border: 1px solid var(--line); border-radius: 15px; background: var(--surface-soft); color: var(--text); display: flex; align-items: center; gap: 9px; font-size:var(--font-md); }
.repository-fixed-career i { color: var(--primary); }
.repository-results { margin-top: 28px; }
.repository-results-heading { margin-bottom: 20px; }
.repository-count { padding: 7px 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size:var(--font-md); font-weight: 800; }
.repository-catalog-summary { display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; }
.repository-favorites-filter,
.repository-clear-filters {
    min-height: 38px;
    padding: 0 13px;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--surface);
    color: var(--muted);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    font-size:var(--font-sm);
    font-weight: 800;
    cursor: pointer;
    transition: border-color .2s ease, background-color .2s ease, color .2s ease, transform .2s ease;
}
.repository-favorites-filter:hover,
.repository-clear-filters:hover { border-color: rgba(37,99,235,.4); color: var(--primary); transform: translateY(-1px); }
.repository-favorites-filter.is-active { border-color: rgba(239,68,68,.35); background: rgba(239,68,68,.1); color: #dc2626; }
.repository-filter-actions { margin-top: 12px; display: flex; justify-content: flex-end; }
.repository-grid { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 20px; }
#repositoryGrid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    grid-auto-flow: row;
    align-items: stretch;
}
.repository-card {
    --repository-accent: 37, 99, 235;
    padding: 22px;
    border: 1px solid rgba(var(--repository-accent),.28);
    border-top: 4px solid rgb(var(--repository-accent));
    border-radius: 22px;
    background: var(--surface);
    box-shadow: var(--shadow), 0 8px 22px rgba(var(--repository-accent),.06);
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
    transition: transform .35s ease, box-shadow .35s ease, border-color .35s ease;
}
.repository-card::after {
    content: "";
    position: absolute;
    width: 92px;
    height: 92px;
    right: -28px;
    top: -28px;
    border-radius: 50%;
    background: rgba(var(--repository-accent),.09);
    pointer-events: none;
}
.repository-card > * { position: relative; z-index: 1; }
.repository-card:hover {
    transform: translateY(-5px);
    border-color: rgba(var(--repository-accent),.48);
    border-top-color: rgb(var(--repository-accent));
    box-shadow: 0 18px 35px rgba(15,23,42,.1), 0 10px 26px rgba(var(--repository-accent),.12);
}
.repository-support-grid .repository-card:nth-child(4n + 2) { --repository-accent: 16, 185, 129; }
.repository-support-grid .repository-card:nth-child(4n + 3) { --repository-accent: 245, 158, 11; }
.repository-support-grid .repository-card:nth-child(4n + 4) { --repository-accent: 139, 92, 246; }
.repository-card[hidden] { display: none; }
.repository-card-top { display: flex; align-items: center; justify-content: space-between; }
.repository-project-card { cursor: pointer; }
.repository-project-card:focus-visible { outline: 3px solid rgba(var(--repository-accent),.3); outline-offset: 4px; }
.repository-project-card--tesis { --repository-accent: var(--project-thesis); }
.repository-project-card--perfil-tesis { --repository-accent: var(--project-profile); }
.repository-project-card--practicas-preprofesionales { --repository-accent: var(--project-practices); }
.repository-project-card--proyecto-pis { --repository-accent: var(--project-pis); }
.repository-project-card--vinculacion { --repository-accent: var(--project-linkage); }
.repository-project-card .repository-document-icon,
.repository-project-card .repository-type,
.repository-project-card .repository-meta i { color: rgb(var(--repository-accent)); }
.repository-card-top-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; }
.repository-favorite-btn {
    width: 38px;
    height: 38px;
    flex: 0 0 auto;
    border: 1px solid var(--line);
    border-radius: 12px;
    background: var(--surface-soft);
    color: var(--muted);
    display: grid;
    place-items: center;
    cursor: pointer;
    font-size:var(--font-lg);
    transition: transform .2s ease, color .2s ease, border-color .2s ease, background-color .2s ease;
}
.repository-favorite-btn:hover { transform: scale(1.06); border-color: rgba(239,68,68,.32); color: #ef4444; }
.repository-favorite-btn.is-favorite { border-color: rgba(239,68,68,.3); background: rgba(239,68,68,.1); color: #ef4444; }
.repository-favorite-btn:disabled { cursor: wait; opacity: .62; transform: none; }
.repository-document-icon { width: 46px; height: 46px; border-radius: 14px; display: grid; place-items: center; color: var(--primary); background: var(--surface-soft); font-size: 20px; }
.repository-type { margin-top: 18px; color: var(--primary); font-size:var(--font-xs); font-weight: 900; text-transform: uppercase; letter-spacing: .05em; }
.repository-card h3 { margin: 7px 0 9px; color: var(--text); font-size: 18px; line-height: 1.35; }
.repository-card > p { color: var(--muted); line-height: 1.6; font-size:var(--font-md); }
.repository-meta { margin-top: 17px; padding-top: 16px; border-top: 1px solid var(--line); display: grid; gap: 9px; }
.repository-meta span { color: var(--muted); font-size:var(--font-sm); display: flex; align-items: center; gap: 8px; }
.repository-meta i { width: 15px; color: var(--primary); }
.repository-keywords { margin: 16px 0; display: flex; flex-wrap: wrap; gap: 7px; }
.repository-keywords span { padding: 5px 9px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size:var(--font-xs); font-weight: 700; }
.repository-technologies { margin-top: 16px; display: flex; flex-wrap: wrap; gap: 7px; }
.repository-technologies span {
    padding: 5px 9px;
    border: 1px solid rgba(var(--repository-accent),.2);
    border-radius: 999px;
    background: rgba(var(--repository-accent),.08);
    color: rgb(var(--repository-accent));
    font-size:var(--font-xs);
    font-weight: 800;
}
.repository-technologies .repository-technologies-more { border-style: dashed; }
.repository-downloads {
    margin-top: 15px;
    color: var(--muted);
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size:var(--font-sm);
    font-weight: 700;
}
.repository-downloads i { color: rgb(var(--repository-accent)); }
.repository-highlight {
    padding: 0;
    margin: 0;
    border: 0;
    background: transparent;
    color: inherit;
    box-shadow: none;
    text-decoration: none;
    border-bottom: 2px solid rgba(255, 214, 102, .9);
    display: inline;
    white-space: inherit;
    font: inherit;
    line-height: inherit;
}
.repository-card-actions { margin-top: auto; padding-top: 24px; }
.repository-open-btn { margin-top: 0; width: 100%; justify-content: center; }
.repository-empty { padding: 54px 20px; border: 1px dashed var(--line); border-radius: 22px; background: var(--surface); text-align: center; color: var(--muted); }
.repository-empty i { margin-bottom: 12px; color: var(--primary); font-size: 34px; }
.repository-empty h3 { margin-bottom: 6px; color: var(--text); }
.repository-empty-action {
    margin: 18px auto 0;
    min-height: 42px;
    padding: 0 16px;
    border-radius: 999px;
    background: var(--primary);
    color: #fff;
    font-weight: 800;
    cursor: pointer;
}
.repository-empty-action[hidden] { display: none; }
/* Inicio de detalle del repositorio */
.repository-detail-skeleton {
    margin-top: 24px;
    display: grid;
    grid-template-columns: minmax(280px,.3fr) minmax(0,.7fr);
    gap: 24px;
}
.repository-detail {
    --repository-accent: var(--project-thesis);
    margin-top: 24px;
    opacity: 0;
    transform: translateY(10px);
}
.repository-detail.is-loaded { opacity: 1; transform: translateY(0); transition: opacity .35s ease, transform .35s ease; }
.repository-detail-breadcrumb,
.repository-explorer-breadcrumb {
    display: flex;
    align-items: center;
    gap: 9px;
    color: var(--muted);
    font-size:var(--font-md);
    min-width: 0;
}
.repository-detail-breadcrumb a { color: var(--primary); font-weight: 800; }
.repository-detail-breadcrumb span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-detail-breadcrumb i { font-size: 10px; }
.repository-detail-back { margin-top: 16px; color: var(--primary); display: inline-flex; align-items: center; gap: 8px; font-size:var(--font-md); font-weight: 800; }
.repository-detail-header {
    margin: 18px 0 24px;
    padding: 26px;
    border: 1px solid rgba(var(--repository-accent),.26);
    border-top: 5px solid rgb(var(--repository-accent));
    border-radius: 24px;
    background: var(--surface);
    box-shadow: var(--shadow), 0 8px 24px rgba(var(--repository-accent),.08);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}
.repository-detail-header .repository-type { margin-top: 0; color: rgb(var(--repository-accent)); }
.repository-detail-header h1 { margin: 8px 0; color: var(--text); font-size: clamp(24px,3vw,36px); line-height: 1.15; }
.repository-detail-header p { color: var(--muted); font-size:var(--font-md); }
.repository-detail-favorite {
    min-height: 44px;
    padding: 0 16px;
    flex: 0 0 auto;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--surface-soft);
    color: var(--muted);
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-weight: 800;
    cursor: pointer;
}
.repository-detail-favorite.is-favorite { border-color: rgba(239,68,68,.3); background: rgba(239,68,68,.1); color: #ef4444; }
.repository-detail-favorite:disabled { cursor: wait; opacity: .65; }
.repository-detail-layout { display: grid; grid-template-columns: minmax(280px,.3fr) minmax(0,.7fr); gap: 24px; align-items: start; }
.repository-detail-info { position: static; display: grid; gap: 16px; }
.repository-detail-panel,
.repository-explorer {
    border: 1px solid var(--line);
    border-radius: 22px;
    background: var(--surface);
    box-shadow: var(--shadow);
}
.repository-detail-panel { padding: 20px; }
.repository-detail-panel h2 { color: var(--text); font-size: 17px; }
.repository-detail-panel-heading { margin-bottom: 16px; display: flex; align-items: center; gap: 9px; }
.repository-detail-panel-heading i { color: rgb(var(--repository-accent)); }
.repository-detail-data { display: grid; gap: 11px; }
.repository-detail-data > div { padding-bottom: 10px; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; gap: 14px; }
.repository-detail-data > div:last-child { padding-bottom: 0; border-bottom: 0; }
.repository-detail-data dt { color: var(--muted); font-size:var(--font-sm); }
.repository-detail-data dd { margin: 0; color: var(--text); font-size:var(--font-sm); font-weight: 800; text-align: right; }
.repository-detail-authors { margin-top: 14px; display: grid; gap: 9px; list-style: none; }
.repository-detail-authors li { color: var(--text); display: flex; align-items: center; gap: 9px; font-size:var(--font-md); font-weight: 700; }
.repository-detail-authors i { color: rgb(var(--repository-accent)); }
.repository-detail-tutor { margin-top: 17px; padding-top: 15px; border-top: 1px solid var(--line); display: grid; gap: 5px; }
.repository-detail-tutor span { color: var(--muted); font-size:var(--font-xs); font-weight: 800; text-transform: uppercase; }
.repository-detail-tutor strong { color: var(--text); font-size:var(--font-md); }
.repository-detail-summary { margin-top: 12px; color: var(--muted); font-size:var(--font-md); line-height: 1.7; }
.repository-detail-tags { margin-top: 13px; }
.repository-detail-keywords-title { margin-top: 20px; }
.repository-detail-keywords { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 7px; }
.repository-detail-keywords span { padding: 6px 9px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size:var(--font-xs); font-weight: 700; }
.repository-detail-download { width: 100%; justify-content: center; }
.repository-explorer { min-width: 0; overflow: hidden; }
.repository-explorer-header { padding: 22px; border-bottom: 1px solid var(--line); display: flex; align-items: center; justify-content: space-between; gap: 18px; }
.repository-explorer-header h2 { margin: 6px 0; color: var(--text); font-size: 22px; overflow-wrap: anywhere; }
.repository-explorer-header p { color: var(--muted); font-size:var(--font-sm); }
.repository-explorer-breadcrumb { padding: 14px 20px; border-bottom: 1px solid var(--line); overflow-x: auto; }
.repository-explorer-breadcrumb button { padding: 5px 7px; border-radius: 9px; background: transparent; color: var(--text); display: inline-flex; align-items: center; gap: 8px; font-weight: 800; white-space: nowrap; cursor: pointer; }
.repository-explorer-breadcrumb button:hover { background: var(--surface-soft); color: var(--primary); }
.repository-explorer-breadcrumb button[aria-current="page"] { background: var(--surface-soft); cursor: default; }
.repository-explorer-breadcrumb i { color: rgb(var(--repository-accent)); }
.repository-explorer-notice { margin: 16px 20px; padding: 12px 14px; border: 1px solid rgba(37,99,235,.18); border-radius: 14px; background: rgba(37,99,235,.07); color: var(--muted); display: flex; align-items: flex-start; gap: 9px; font-size:var(--font-sm); line-height: 1.5; }
.repository-explorer-notice i { margin-top: 2px; color: var(--blue); }
.repository-file-list { padding: 0 20px 20px; }
.repository-file-list[hidden] { display: none; }
.repository-explorer-state { min-height: 220px; padding: 36px 20px; color: var(--muted); display: grid; place-items: center; align-content: center; gap: 12px; text-align: center; }
.repository-explorer-state[hidden] { display: none; }
.repository-explorer-state i { color: rgb(var(--repository-accent)); font-size: 34px; }
.repository-explorer-state p { max-width: 480px; line-height: 1.6; }
.repository-file-row { min-height: 54px; padding: 10px 12px; border-bottom: 1px solid var(--line); display: grid; grid-template-columns: minmax(0,1.6fr) minmax(120px,.7fr) minmax(80px,.35fr) 58px; gap: 14px; align-items: center; color: var(--muted); font-size:var(--font-sm); }
.repository-file-row:last-child { border-bottom: 0; }
.repository-file-head { min-height: 38px; color: var(--muted); font-size:var(--font-xs); font-weight: 900; text-transform: uppercase; letter-spacing: .06em; }
.repository-file-name { min-width: 0; color: var(--text); display: flex; align-items: center; gap: 10px; }
.repository-file-entry { width: 100%; padding: 7px 8px; border-radius: 10px; background: transparent; text-align: left; cursor: pointer; }
.repository-file-entry:hover { background: var(--surface-soft); color: var(--primary); }
.repository-file-name strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-file-name i { width: 18px; color: var(--primary); font-size: 17px; text-align: center; }
.repository-file-name .repository-file-icon--folder { color: #f59e0b; }
.repository-file-action { min-height: 34px; display: flex; align-items: center; justify-content: flex-end; gap: 6px; }
.repository-file-action a,
.repository-file-action button { width: 34px; height: 34px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface-soft); color: var(--primary); display: grid; place-items: center; cursor: pointer; }
.repository-file-action a:hover,
.repository-file-action button:hover { border-color: rgba(37,99,235,.35); background: var(--primary); color: #fff; }
.repository-preview { padding: 0 20px 20px; }
.repository-preview[hidden],
.repository-preview-state[hidden],
.repository-preview-message[hidden],
.repository-preview-pdf[hidden],
.repository-preview-image-shell[hidden],
.repository-preview-text[hidden],
.repository-preview-code[hidden] { display: none; }
.repository-preview-docx[hidden] { display: none; }
.repository-preview-back { margin-bottom: 14px; padding: 8px 10px; border-radius: 10px; background: transparent; color: var(--muted); display: inline-flex; align-items: center; gap: 8px; font-size:var(--font-sm); font-weight: 800; cursor: pointer; }
.repository-preview-back:hover { background: var(--surface-soft); color: var(--primary); }
.repository-preview-header { margin-bottom: 14px; padding: 18px; border: 1px solid var(--line); border-top: 3px solid rgb(var(--repository-accent)); border-radius: 16px; background: var(--surface-soft); display: flex; align-items: center; justify-content: space-between; gap: 18px; }
.repository-preview-header h3 { margin: 5px 0; color: var(--text); font-size: 19px; overflow-wrap: anywhere; }
.repository-preview-header p { color: var(--muted); font-size:var(--font-sm); }
.repository-preview-actions { display: flex; align-items: center; gap: 9px; }
.repository-preview-expand { min-height: 40px; padding: 0 14px; border: 1px solid var(--line); border-radius: 11px; background: var(--surface); color: var(--text); display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size:var(--font-sm); font-weight: 800; cursor: pointer; }
.repository-preview-expand:hover { border-color: rgba(37,99,235,.35); color: var(--primary); }
.repository-preview-expand:disabled { opacity: .45; cursor: not-allowed; }
.repository-preview-modal { position: fixed; inset: 0; z-index: 9999; padding: 24px; background: rgba(15,23,42,.58); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); display: grid; place-items: center; }
.repository-preview-modal[hidden] { display: none; }
.repository-preview-modal-dialog { width: min(1080px,92vw); height: 86vh; overflow: hidden; border: .5px solid rgba(255,255,255,.1); border-radius: 22px; background: var(--surface); box-shadow: 0 30px 100px rgba(2,6,23,.58); display: grid; grid-template-rows: 68px minmax(0,1fr); animation: repository-modal-in 220ms cubic-bezier(.2,.8,.2,1); }
.repository-preview-modal--pdf .repository-preview-modal-dialog { width: min(1140px,92vw); height: 89vh; }
.repository-preview-modal-header { padding: 0 16px 0 22px; border-bottom: 1px solid var(--line); background: var(--surface); display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.repository-preview-modal-heading { min-width: 0; display: grid; gap: 3px; }
.repository-preview-modal-heading > span { color: var(--muted); font-size:var(--font-xs); font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.repository-preview-modal-header h3 { margin: 0; color: var(--text); font-size:var(--font-lg); font-weight: 800; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.repository-preview-modal-close { width: 40px; height: 40px; flex: 0 0 auto; border: 1px solid var(--line); border-radius: 50%; background: var(--surface-soft); color: var(--text); display: grid; place-items: center; font-size: 17px; cursor: pointer; }
.repository-preview-modal-close:hover { border-color: rgba(239,68,68,.35); color: #ef4444; }
.repository-preview-modal-body { min-height: 0; padding: 18px; overflow: auto; background: var(--surface-soft); }
.repository-preview-modal-body > * { width: 100%; margin: 0; }
.repository-preview-modal--pdf .repository-preview-modal-body { padding: 12px; overflow: hidden; background: #252525; }
.repository-preview-modal-body .repository-preview-pdf { height: 100%; min-height: 0; border: 0; border-radius: 12px; }
.repository-preview-modal-body .repository-preview-image-shell { height: 100%; }
.repository-preview-modal-body .repository-preview-image-canvas { min-height: calc(86vh - 150px); max-height: none; }
.repository-preview-modal-body .repository-preview-text,
.repository-preview-modal-body .repository-preview-code,
.repository-preview-modal-body .repository-preview-docx { max-height: none; min-height: 100%; }
body.repository-preview-modal-open { overflow: hidden; }
@keyframes repository-modal-in {
    from { opacity: 0; transform: scale(.982); }
    to { opacity: 1; transform: scale(1); }
}
.repository-preview-message { margin-bottom: 14px; padding: 11px 13px; border: 1px solid rgba(245,158,11,.28); border-radius: 12px; background: rgba(245,158,11,.09); color: var(--muted); font-size:var(--font-sm); line-height: 1.5; }
.repository-preview-state { min-height: 300px; padding: 36px 20px; border: 1px dashed var(--line); border-radius: 16px; background: var(--surface-soft); color: var(--muted); display: grid; place-items: center; align-content: center; gap: 13px; text-align: center; }
.repository-preview-state i { color: rgb(var(--repository-accent)); font-size: 35px; }
.repository-preview-state p { max-width: 460px; line-height: 1.6; }
.repository-preview-pdf { width: 100%; min-height: 680px; border: 1px solid var(--line); border-radius: 16px; background: #fff; }
.repository-preview-image-shell { overflow: hidden; border: 1px solid var(--line); border-radius: 16px; background: var(--surface-soft); }
.repository-preview-image-tools { padding: 10px 12px; border-bottom: 1px solid var(--line); display: flex; justify-content: center; gap: 7px; }
.repository-preview-image-tools button { min-width: 38px; height: 34px; padding: 0 10px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); color: var(--text); font-size:var(--font-sm); font-weight: 800; cursor: pointer; }
.repository-preview-image-tools button:hover { border-color: rgba(37,99,235,.35); color: var(--primary); }
.repository-preview-image-tools button:disabled { opacity: .45; cursor: not-allowed; }
.repository-preview-image-canvas { min-height: 420px; max-height: 680px; padding: 28px; overflow: auto; display: grid; place-items: center; }
.repository-preview-image-canvas img { max-width: 100%; height: auto; transform-origin: center; transition: transform .18s ease; }
.repository-preview-text { max-height: 680px; margin: 0; padding: 22px; overflow: auto; border: 1px solid var(--line); border-radius: 16px; background: var(--surface-soft); color: var(--text); font: 13px/1.7 Consolas, "Courier New", monospace; white-space: pre-wrap; overflow-wrap: anywhere; tab-size: 4; }
.repository-preview-code { max-height: 680px; padding: 14px 0; overflow: auto; border: 1px solid var(--line); border-radius: 16px; background: #0f172a; color: #e2e8f0; font: 13px/1.65 Consolas, "Courier New", monospace; tab-size: 4; }
.repository-code-line { min-width: max-content; display: grid; grid-template-columns: 56px auto; }
.repository-code-line:hover { background: rgba(148,163,184,.08); }
.repository-code-number { padding-right: 14px; color: #64748b; text-align: right; user-select: none; }
.repository-code-line code { padding-right: 22px; color: inherit; white-space: pre; }
.repository-code-token--keyword { color: #c084fc; }
.repository-code-token--string { color: #86efac; }
.repository-code-token--comment { color: #64748b; font-style: italic; }
.repository-code-token--number { color: #fbbf24; }
.repository-preview-docx { max-height: 720px; padding: clamp(24px,5vw,58px); overflow: auto; border: 1px solid var(--line); border-radius: 16px; background: var(--surface); color: var(--text); box-shadow: inset 0 0 0 1px rgba(148,163,184,.06); }
.repository-preview-docx h2,
.repository-preview-docx h3,
.repository-preview-docx h4,
.repository-preview-docx h5,
.repository-preview-docx h6 { margin: 1.35em 0 .55em; color: var(--text); line-height: 1.3; }
.repository-preview-docx h2:first-child,
.repository-preview-docx h3:first-child { margin-top: 0; }
.repository-preview-docx p { margin: 0 0 1em; color: var(--text); font-size:var(--font-md); line-height: 1.75; white-space: pre-wrap; }
.repository-docx-list-item { padding-left: 24px; position: relative; }
.repository-docx-list-item::before { content: "•"; position: absolute; left: 7px; color: rgb(var(--repository-accent)); font-weight: 900; }
.repository-docx-table-shell { margin: 20px 0; overflow-x: auto; }
.repository-docx-table-shell table { width: 100%; border-collapse: collapse; font-size:var(--font-md); }
.repository-docx-table-shell th,
.repository-docx-table-shell td { padding: 10px 12px; border: 1px solid var(--line); color: var(--text); text-align: left; }
.repository-docx-table-shell th { background: var(--surface-soft); font-weight: 900; }
.repository-detail-not-found { margin-top: 24px; padding: 60px 24px; border: 1px dashed var(--line); border-radius: 24px; background: var(--surface); color: var(--muted); text-align: center; }
.repository-detail-not-found > i { margin-bottom: 14px; color: var(--primary); font-size: 40px; }
.repository-detail-not-found h1 { margin-bottom: 8px; color: var(--text); }
.repository-detail-not-found .open-btn { margin-top: 20px; display: inline-flex; }
.repository-pagination { margin-top: 26px; padding-top: 20px; border-top: 1px solid var(--line); display: flex; align-items: center; justify-content: center; gap: 14px; }
.repository-pagination[hidden] { display: none; }
.repository-pagination button { min-height: 40px; padding: 0 15px; border: 1px solid var(--line); border-radius: 11px; background: var(--surface); color: var(--text); display: inline-flex; align-items: center; justify-content: center; gap: 8px; font-size:var(--font-sm); font-weight: 800; cursor: pointer; }
.repository-pagination button:hover:not(:disabled) { border-color: rgba(37,99,235,.35); background: var(--primary); color: #fff; }
.repository-pagination button:disabled { opacity: .42; cursor: not-allowed; }
.repository-pagination span { min-width: 112px; color: var(--muted); font-size:var(--font-sm); font-weight: 800; text-align: center; }
.support-materials-page { padding-bottom: 40px; }
.support-material-detail { --repository-accent: var(--project-thesis); }
.support-materials-hero { margin-top: 18px; }
.support-materials-tools { margin: 24px 0; grid-template-columns: minmax(0,1fr) minmax(220px,300px); align-items: end; }
.support-materials-filter { display: grid; gap: 7px; }
.support-materials-filter > span { color: var(--muted); font-size:var(--font-xs); font-weight: 800; text-transform: uppercase; letter-spacing: .04em; }
.support-materials-filter select { width: 100%; height: 46px; padding: 0 40px 0 13px; border: 1px solid var(--line); border-radius: 13px; background: var(--surface); color: var(--text); font-size:var(--font-md); cursor: pointer; }
.support-materials-heading { margin: 28px 0 18px; }
.support-materials-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
.support-materials-grid .repository-card { min-width: 0; }
.support-materials-grid .repository-meta { margin-top: 16px; }
.support-material-header .project-status { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 7px; }
.support-material-description { white-space: normal; }
.support-material-detail .repository-preview-header > div:first-child { min-width: 0; flex: 1 1 auto; }
.support-material-detail .repository-preview-header h3 { max-width: 100%; overflow: hidden; overflow-wrap: normal; text-overflow: ellipsis; white-space: nowrap; }
.support-material-detail .repository-detail-info { gap: 20px; }
.support-material-detail .repository-detail-panel { transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease; }
.support-material-detail .repository-detail-panel:hover { border-color: rgba(var(--repository-accent),.22); box-shadow: 0 12px 28px rgba(15,23,42,.06); }
.support-material-detail .repository-detail-data dt { display: inline-flex; align-items: center; gap: 6px; }
.support-material-detail .repository-detail-data dt i { width: 13px; color: rgb(var(--repository-accent)); font-size: 10px; text-align: center; }
.support-material-publisher { display: flex; align-items: center; gap: 13px; }
.support-material-publisher-icon { width: 42px; height: 42px; flex: 0 0 auto; border-radius: 12px; background: rgba(var(--repository-accent),.1); color: rgb(var(--repository-accent)); display: grid; place-items: center; }
.support-material-publisher > div { min-width: 0; display: grid; gap: 4px; }
.support-material-publisher > div > span { color: var(--muted); font-size:var(--font-xs); font-weight: 900; letter-spacing: .06em; text-transform: uppercase; }
.support-material-publisher strong { color: var(--text); font-size:var(--font-md); line-height: 1.45; }
.support-material-description-panel .repository-detail-panel-heading,
.support-material-keywords-panel .repository-detail-panel-heading { margin-bottom: 12px; }
.support-material-keywords-panel .repository-detail-keywords { margin-top: 0; }
.support-material-files .repository-explorer-header { border-bottom: 0; }
.support-material-main-file { justify-content: flex-start; }
.support-material-main-icon { width: 68px; height: 68px; flex: 0 0 auto; border: 1px solid rgba(var(--repository-accent),.24); border-radius: 19px; background: linear-gradient(145deg,rgba(var(--repository-accent),.14),rgba(var(--repository-accent),.05)); color: rgb(var(--repository-accent)); display: grid; place-items: center; position: relative; font-size: 34px; box-shadow: 0 10px 25px rgba(var(--repository-accent),.13); }
.support-material-main-icon i { transform: translateY(-5px); }
.support-material-main-icon small { min-width: 30px; padding: 3px 5px; border: 2px solid var(--surface); border-radius: 6px; background: rgb(var(--repository-accent)); color: #fff; position: absolute; left: 50%; bottom: 8px; transform: translateX(-50%); font-size: 9px; font-weight: 900; line-height: 1; letter-spacing: .02em; text-align: center; box-shadow: 0 3px 8px rgba(var(--repository-accent),.24); }
.support-material-main-file > div { min-width: 0; flex: 1 1 auto; }
.support-material-main-file h2 { max-width: 100%; font-size: clamp(16px,2vw,22px); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.support-material-files .repository-file-row { grid-template-columns: minmax(0,1.6fr) minmax(90px,.55fr) minmax(70px,.3fr) 82px; }
.support-material-file-list { padding-top: 4px; }
.support-material-file-list .repository-file-row { transition: border-color .18s ease, background .18s ease, transform .18s ease; }
.support-material-file-list .repository-file-row:hover { background: var(--surface-soft); }
.support-material-primary-file { border: 1px solid rgba(var(--repository-accent),.24); border-radius: 14px; background: rgba(var(--repository-accent),.04); }
.support-material-additional-title { margin: 30px 4px 12px; padding-top: 22px; border-top: 1px solid var(--line); color: var(--text); font-size:var(--font-lg); }
.support-material-additional-file { margin-bottom: 8px; border: 1px solid var(--line); border-radius: 13px; background: var(--surface); }
.support-material-additional-file:last-child { margin-bottom: 0; border-bottom: 1px solid var(--line); }
.support-material-additional-file:hover { border-color: rgba(var(--repository-accent),.24); transform: translateY(-1px); box-shadow: 0 8px 18px rgba(15,23,42,.05); }
.support-material-file-copy { min-width: 0; display: grid; gap: 4px; }
.support-material-additional-file .support-material-file-copy strong { display: -webkit-box; overflow: hidden; color: var(--text); font-size:var(--font-sm); line-height: 1.35; white-space: normal; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; }
.support-material-file-copy small { color: var(--muted); font-size:var(--font-xs); font-weight: 700; }
.support-material-extension-chip { width: fit-content; padding: 4px 7px; border: 1px solid rgba(var(--repository-accent),.16); border-radius: 7px; background: rgba(var(--repository-accent),.07); color: rgb(var(--repository-accent)); font-size:var(--font-xs); font-weight: 900; }
.support-material-file-size { color: var(--muted); font-variant-numeric: tabular-nums; }
.support-material-file-type { display: grid; gap: 3px; }
.support-material-file-type strong { color: var(--text); font-size:var(--font-xs); }
.support-material-file-type small { color: var(--muted); font-size:var(--font-xs); }
.support-material-file-icon { width: 28px; height: 30px; flex: 0 0 auto; color: rgb(var(--repository-accent)); display: grid; place-items: center; position: relative; font-size: 21px; }
.support-material-file-icon i { transform: translateY(-3px); }
.support-material-file-icon small { min-width: 20px; padding: 2px 3px; border: 1px solid var(--surface); border-radius: 4px; background: rgb(var(--repository-accent)); color: #fff; position: absolute; left: 50%; bottom: 1px; transform: translateX(-50%); font-size: 6px; font-weight: 900; line-height: 1; text-align: center; }
.repository-complete-download { min-height: 46px; padding: 11px 14px; border: 1px solid var(--line); border-radius: 13px; background: var(--surface); color: var(--text); display: flex; align-items: center; justify-content: center; gap: 9px; font-size:var(--font-sm); font-weight: 800; text-align: center; transition: border-color .2s ease, background .2s ease, color .2s ease, transform .2s ease, box-shadow .2s ease; }
.repository-complete-download i { color: rgb(var(--repository-accent)); }
.repository-complete-download small { color: var(--muted); font-size:var(--font-xs); }
.repository-complete-download:hover { border-color: rgba(var(--repository-accent),.35); background: var(--surface-soft); transform: translateY(-1px); box-shadow: 0 9px 20px rgba(15,23,42,.08); }
.support-material-detail .open-btn,
.support-material-detail .repository-file-action a,
.support-material-detail .repository-file-action button,
.support-material-detail .repository-file-entry { transition: color .18s ease, background .18s ease, border-color .18s ease, transform .18s ease, box-shadow .18s ease; }
body.dark-mode .support-materials-filter select,
body.dark-mode .support-material-primary-file { background: var(--surface-soft); border-color: var(--line); }
/* Final de detalle del repositorio */
@media(min-width:1200px) and (min-height:1000px) {
    .repository-detail-info { position: sticky; top: 24px; }
}
.repository-support { margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--line); }
.repository-section-divider {
    height: 1px;
    margin: 18px 0;
    background: linear-gradient(90deg, transparent, rgba(53, 110, 255, .22), transparent);
}
.repository-support-tools {
    display: grid;
    gap: 10px;
}
.repository-filter-row {
    grid-template-columns: minmax(220px, 1.3fr) minmax(0, 4fr);
    align-items: end;
    gap: 16px;
}
.repository-filters-inline {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
}
.repository-support-row {
    grid-template-columns: minmax(0,1fr) minmax(240px,320px);
    align-items: end;
    gap: 16px;
}
.repository-support-category {
    display: block;
}
.repository-support-category .repository-filter {
    gap: 6px;
}
.repository-section-label {
    color: var(--muted);
    font-size:var(--font-xs);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .08em;
}
.repository-support .repository-search-support {
    margin: 0;
}
.repository-tools {
    margin-top: 24px;
    padding-top: 24px;
}
.repository-results { margin-top: 28px; }
.repository-support-grid { grid-template-columns: repeat(4,minmax(0,1fr)); }
.repository-support-card { border-top-color: rgb(var(--repository-accent)); }
.repository-more-card {
    --repository-accent: 37, 99, 235;
    justify-content: center;
    text-align: center;
    background: linear-gradient(145deg, var(--surface), var(--surface-soft));
    border-style: dashed;
}
.repository-more-card-icon {
    width: 62px;
    height: 62px;
    margin: 0 auto 16px;
    border-radius: 20px;
    display: grid;
    place-items: center;
    color: var(--primary);
    background: rgba(37,99,235,.12);
    font-size: 26px;
}
.repository-more-card .repository-type { margin-top: 0; }
.repository-more-card h3 { margin-top: 10px; }
.repository-carousel-stage { position: relative; }
.repository-carousel-topbar {
    display: flex;
    align-items: center;
    justify-content: flex-end;
}
.repository-carousel-btn {
    position: absolute;
    top: 50%;
    z-index: 5;
    width: 42px;
    height: 42px;
    border: 1px solid var(--line);
    border-radius: 50%;
    background: var(--surface);
    color: var(--primary);
    cursor: pointer;
    transform: translateY(-50%);
    box-shadow: 0 8px 22px rgba(15,23,42,.16);
    transition: background-color .2s ease, color .2s ease, opacity .2s ease;
}
.repository-carousel-prev { left: -21px; }
.repository-carousel-next { right: -21px; }
.repository-carousel-btn:hover:not(:disabled) { background: var(--primary); color: #fff; }
.repository-carousel-btn:disabled { opacity: .38; cursor: not-allowed; }
.repository-carousel-btn[hidden] { display: none; }
.repository-carousel-more {
    min-height: 42px;
    padding: 0 16px;
    border-radius: 999px;
    background: var(--primary);
    color: #fff;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-weight: 800;
    cursor: pointer;
}
.repository-carousel-more[hidden] { display: none; }

body.dark-mode .repository-hero {
    background: linear-gradient(135deg, #0b1f47, #123985 62%, #1d4ed8);
}
body.dark-mode .repository-hero .section-eyebrow,
body.dark-mode .repository-hero p,
body.dark-mode .repository-results .section-eyebrow,
body.dark-mode .repository-support .section-eyebrow,
body.dark-mode .repository-section-label,
body.dark-mode .repository-filter > span,
body.dark-mode .repository-count,
body.dark-mode .repository-dropdown-trigger,
body.dark-mode .repository-dropdown-trigger i,
body.dark-mode .repository-dropdown-option,
body.dark-mode .repository-empty,
body.dark-mode .repository-empty h3,
body.dark-mode .repository-search input {
    color: #f8fafc;
}
body.dark-mode .repository-count,
body.dark-mode .repository-search,
body.dark-mode .repository-tools,
body.dark-mode .repository-support,
body.dark-mode .repository-card,
body.dark-mode .repository-support-card,
body.dark-mode .repository-dropdown-trigger {
    background: var(--surface);
    border-color: var(--line);
}
body.dark-mode .repository-card {
    border-color: rgba(var(--repository-accent),.42);
    border-top-color: rgb(var(--repository-accent));
    box-shadow: var(--shadow), 0 8px 24px rgba(var(--repository-accent),.1);
}
body.dark-mode .repository-card::after {
    background: rgba(var(--repository-accent),.15);
}
body.dark-mode .repository-card:hover {
    border-color: rgba(var(--repository-accent),.68);
    border-top-color: rgb(var(--repository-accent));
    box-shadow: 0 18px 35px rgba(0,0,0,.3), 0 10px 28px rgba(var(--repository-accent),.16);
}
body.dark-mode .repository-card h3,
body.dark-mode .repository-support-card h3 {
    color: var(--text);
}
body.dark-mode .repository-card > p,
body.dark-mode .repository-support-card > p,
body.dark-mode .repository-meta span,
body.dark-mode .repository-keywords span {
    color: var(--muted);
}
body.dark-mode .repository-favorites-filter,
body.dark-mode .repository-clear-filters,
body.dark-mode .repository-favorite-btn {
    background: var(--surface-soft);
    border-color: var(--line);
    color: var(--muted);
}
body.dark-mode .repository-favorites-filter.is-active,
body.dark-mode .repository-favorite-btn.is-favorite { background: rgba(239,68,68,.14); color: #fb7185; border-color: rgba(251,113,133,.34); }
body.dark-mode .repository-project-card .repository-type,
body.dark-mode .repository-project-card .repository-document-icon,
body.dark-mode .repository-project-card .repository-meta i { color: rgb(var(--repository-accent)); }
body.dark-mode .repository-technologies span { color: #f8fafc; background: rgba(var(--repository-accent),.16); border-color: rgba(var(--repository-accent),.32); }
body.dark-mode .repository-downloads { color: var(--muted); }
body.dark-mode .repository-detail-header,
body.dark-mode .repository-detail-panel,
body.dark-mode .repository-explorer,
body.dark-mode .repository-detail-not-found { background: var(--surface); border-color: var(--line); }
body.dark-mode .repository-detail-header { border-top-color: rgb(var(--repository-accent)); }
body.dark-mode .repository-detail-favorite { background: var(--surface-soft); border-color: var(--line); color: var(--muted); }
body.dark-mode .repository-detail-favorite.is-favorite { background: rgba(239,68,68,.14); color: #fb7185; border-color: rgba(251,113,133,.34); }
body.dark-mode .repository-explorer-notice { background: rgba(37,99,235,.12); border-color: rgba(96,165,250,.24); }
body.dark-mode .repository-search i,
body.dark-mode .repository-document-icon,
body.dark-mode .repository-meta i,
body.dark-mode .repository-empty i {
    color: var(--primary);
}
body.dark-mode .repository-type {
    color: #e2e8f0;
}
body.dark-mode .repository-keywords span {
    background: var(--surface-soft);
    border-color: var(--line);
}
body.dark-mode .repository-dropdown-menu {
    background: #12203a;
    border-color: #2b3b57;
}
body.dark-mode .repository-dropdown-option:hover,
body.dark-mode .repository-dropdown-option:focus-visible {
    background: rgba(255,255,255,.08);
    color: #ffffff;
}
body.dark-mode .repository-dropdown-option.is-selected {
    background: rgba(255,255,255,.12);
    color: #ffffff;
}
body.dark-mode .repository-highlight {
    border-bottom-color: rgba(255, 214, 102, .95);
}

/* Responsive exclusivo del panel principal rediseñado. */
@media(max-width:900px) {
    #repositoryContent .repository-shell { padding: 20px; }
    #repositoryContent .repository-toolbar-integrated { align-items: stretch; }
    #repositoryContent .repository-toolbar-integrated > .repository-search { flex-basis: 100%; }
    #repositoryContent .repository-filters-group { flex: 1 1 100%; }
}
@media(max-width:600px) {
    #repositoryContent .repository-shell { padding: 16px; border-radius: 18px; gap: 16px; }
    #repositoryContent .repository-tabs-nav { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    #repositoryContent .repository-tab-btn { min-width: 0; justify-content: center; padding: 10px; text-align: center; }
    #repositoryContent .repository-toolbar-integrated { padding: 12px; }
    #repositoryContent .repository-filters-group { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
    #repositoryContent .repository-filter-item { min-width: 0; flex-direction: column; align-items: stretch; }
    #repositoryContent .repository-toolbar-actions { width: 100%; margin-left: 0; justify-content: space-between; }
    #repositoryContent .repository-catalog-subheading { align-items: flex-start; flex-direction: column; }
    #repositoryContent .repository-catalog-subheading .repository-count { text-align: left; }
}
@media(max-width:380px) {
    #repositoryContent .repository-tabs-nav { grid-template-columns: 1fr; }
    #repositoryContent .repository-filters-group,
    #repositoryContent .repository-toolbar-actions { grid-template-columns: 1fr; }
    #repositoryContent .repository-toolbar-actions { display: grid; }
    #repositoryContent .repository-favorites-filter,
    #repositoryContent .repository-clear-filters { width: 100%; }
}

/* Fase 2: catálogo público de materiales. No afecta el listado principal ni administración. */
.support-materials-page { padding-bottom: 44px; }
.support-materials-page-header { margin: 16px 0 20px; }
.support-materials-eyebrow { display: inline-flex; align-items: center; gap: 8px; color: var(--muted); font-size:var(--font-xs); font-weight: 800; letter-spacing: .06em; text-transform: uppercase; }
.support-materials-page-header h1 { margin: 4px 0 6px; color: var(--text); font-size: clamp(22px,2.8vw,30px); line-height: 1.25; }
.support-materials-page-header p { max-width: 720px; color: var(--muted); font-size:var(--font-md); line-height: 1.5; }
.support-materials-shell { display: grid; gap: 20px; padding: 24px; border: 1px solid var(--line); border-radius: 20px; background: var(--surface); box-shadow: var(--shadow-soft); }
.support-materials-toolbar { display: flex; align-items: end; gap: 12px; flex-wrap: wrap; padding: 14px; border: 1px solid var(--line); border-radius: 16px; background: var(--surface-soft); }
.support-materials-search { min-height: 44px; flex: 1 1 280px; padding: 0 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); display: flex; align-items: center; gap: 10px; transition: border-color .18s ease,box-shadow .18s ease; }
.support-materials-search:focus-within { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37,99,235,.14); }
.support-materials-search i { color: var(--muted); font-size: 14px; }
.support-materials-search input { width: 100%; min-width: 0; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; font-size:var(--font-md); }
.support-materials-filter { min-width: 210px; display: grid; gap: 6px; }
.support-materials-filter > span { color: var(--muted); font-size:var(--font-xs); font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
.support-materials-filter select { min-height: 44px; height: auto; border-radius: 12px; background: var(--surface); }
.support-materials-catalog-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.support-materials-catalog-heading h2 { margin: 0; color: var(--text); font-size:var(--font-lg); font-weight: 800; }
.support-materials-grid { margin: 0; grid-template-columns: repeat(3,minmax(0,1fr)); }
.support-materials-card { min-width: 0; padding: 20px; border-radius: 18px; box-shadow: 0 8px 20px rgba(15,23,42,.05); }
.support-materials-card:hover { transform: translateY(-3px); box-shadow: 0 15px 30px rgba(15,23,42,.09); }
.support-materials-card .repository-meta { margin-top: 16px; }
.support-materials-empty { margin: 0 auto; }
body.dark-mode .support-materials-shell { background: var(--surface); border-color: var(--line); }
body.dark-mode .support-materials-toolbar { background: var(--surface-soft); border-color: var(--line); }
body.dark-mode .support-materials-search,
body.dark-mode .support-materials-filter select { background: var(--surface); border-color: var(--line); color: var(--text); }

@media(max-width:760px) {
    .support-materials-shell { padding: 20px; }
    .support-materials-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
}
@media(max-width:600px) {
    .support-materials-shell { gap: 16px; padding: 16px; border-radius: 18px; }
    .support-materials-toolbar { align-items: stretch; padding: 12px; }
    .support-materials-search,
    .support-materials-filter { flex-basis: 100%; min-width: 0; width: 100%; }
    .support-materials-catalog-heading { align-items: flex-start; flex-direction: column; }
    .support-materials-catalog-heading .repository-count { text-align: left; }
}
@media(max-width:480px) {
    .support-materials-grid { grid-template-columns: 1fr; }
    .support-materials-page-header h1 { font-size: 24px; }
}

/* Fase 3: pulido final del repositorio de consulta. */
#repositoryContent .repository-page-header { margin: 22px 2px 18px; max-width: 860px; }
#repositoryContent .repository-eyebrow { gap: 9px; color: var(--primary); font-size:var(--font-xs); letter-spacing: .1em; }
#repositoryContent .repository-eyebrow i { width: 22px; height: 22px; border-radius: 7px; background: var(--primary-soft); display: grid; place-items: center; font-size: 11px; }
#repositoryContent .repository-page-header h1 { margin: 7px 0 8px; font-size: clamp(26px,3vw,34px); letter-spacing: -.025em; }
#repositoryContent .repository-page-header p { max-width: 760px; font-size:var(--font-md); line-height: 1.65; }
#repositoryContent .repository-shell { gap: 18px; padding: 22px; border-color: color-mix(in srgb,var(--line) 82%,var(--primary) 18%); border-radius: 18px; box-shadow: 0 12px 30px rgba(15,23,42,.055); }
#repositoryContent .repository-tabs-nav { gap: 4px; padding: 0 2px 10px; }
#repositoryContent .repository-tab-btn { position: relative; min-height: 42px; padding: 8px 14px; border-radius: 9px; font-size:var(--font-md); font-weight: 700; }
#repositoryContent .repository-tab-btn::after { position: absolute; right: 12px; bottom: -11px; left: 12px; height: 3px; border-radius: 3px 3px 0 0; background: transparent; content: ""; transition: background .18s ease; }
#repositoryContent .repository-tab-btn:hover { background: color-mix(in srgb,var(--primary-soft) 58%,var(--surface)); color: var(--text); }
#repositoryContent .repository-tab-btn:focus-visible { outline: 3px solid color-mix(in srgb,var(--primary) 26%,transparent); outline-offset: 2px; }
#repositoryContent .repository-tab-btn.is-active { border-color: transparent; background: transparent; color: var(--primary); box-shadow: none; }
#repositoryContent .repository-tab-btn.is-active::after { background: var(--primary); }
#repositoryContent .repository-tab-badge { min-width: 22px; padding: 3px 7px; text-align: center; font-variant-numeric: tabular-nums; }
#repositoryContent .repository-toolbar-integrated { gap: 10px 14px; padding: 12px; border-radius: 14px; background: color-mix(in srgb,var(--surface-soft) 82%,var(--surface)); }
#repositoryContent .repository-shell .repository-search { min-height: 46px; border-radius: 11px; background: var(--surface); }
#repositoryContent .repository-filters-group { gap: 8px; }
#repositoryContent .repository-filter-item { gap: 5px; }
#repositoryContent .repository-filter-item > span { font-size:var(--font-xs); letter-spacing: .045em; }
#repositoryContent .repository-shell .repository-dropdown-trigger { min-height: 42px; border-radius: 10px; background: var(--surface); font-size:var(--font-sm); }
#repositoryContent .repository-toolbar-actions { gap: 6px; }
#repositoryContent .repository-favorites-filter,#repositoryContent .repository-clear-filters { min-height: 36px; padding: 0 11px; border-radius: 9px; background: transparent; font-size:var(--font-xs); }
#repositoryContent .repository-favorites-filter:hover,#repositoryContent .repository-clear-filters:hover { background: var(--surface); }
#repositoryContent .repository-favorites-filter:focus-visible,#repositoryContent .repository-clear-filters:focus-visible { outline: 3px solid color-mix(in srgb,var(--primary) 24%,transparent); outline-offset: 2px; }
#repositoryContent .repository-catalog-subheading { margin-top: 4px; padding: 2px 2px 0; }
#repositoryContent .repository-catalog-kicker,.support-materials-catalog-kicker { display: block; margin-bottom: 3px; color: var(--muted); font-size:var(--font-xs); font-weight: 850; letter-spacing: .075em; text-transform: uppercase; }
#repositoryContent .repository-section-subhead { font-size: 17px; letter-spacing: -.01em; }
#repositoryContent .repository-count,.support-materials-page .repository-count { border-color: color-mix(in srgb,var(--line) 80%,var(--primary) 20%); background: var(--surface-soft); font-size:var(--font-xs); font-variant-numeric: tabular-nums; }
#repositoryContent .repository-project-card { border-radius: 18px; box-shadow: 0 7px 20px rgba(15,23,42,.05); }
#repositoryContent .repository-project-card:hover { transform: translateY(-4px); box-shadow: 0 16px 34px rgba(15,23,42,.09),0 9px 22px rgba(var(--repository-accent),.09); }
#repositoryContent .repository-card h3 { font-size: 17px; line-height: 1.38; }
#repositoryContent .repository-card-actions { padding-top: 20px; }
#repositoryContent .repository-empty { border-radius: 18px; background: var(--surface-soft); }
#repositoryContent .repository-skeleton { margin-top: 22px; }
body.dark-mode #repositoryContent .repository-shell { border-color: color-mix(in srgb,var(--line) 72%,#60a5fa 28%); box-shadow: 0 13px 32px rgba(0,0,0,.18); }
body.dark-mode #repositoryContent .repository-toolbar-integrated { background: color-mix(in srgb,var(--surface-soft) 82%,var(--surface)); }
body.dark-mode #repositoryContent .repository-tab-btn:hover { background: rgba(96,165,250,.1); }

.support-materials-page-header { margin: 22px 2px 18px; max-width: 860px; }
.support-materials-eyebrow { color: var(--primary); font-size:var(--font-xs); letter-spacing: .1em; }
.support-materials-eyebrow i { width: 22px; height: 22px; border-radius: 7px; background: var(--primary-soft); display: grid; place-items: center; font-size: 11px; }
.support-materials-page-header h1 { margin: 7px 0 8px; font-size: clamp(26px,3vw,34px); letter-spacing: -.025em; }
.support-materials-page-header p { max-width: 760px; line-height: 1.65; }
.support-materials-shell { gap: 18px; padding: 22px; border-color: color-mix(in srgb,var(--line) 82%,var(--primary) 18%); border-radius: 18px; box-shadow: 0 12px 30px rgba(15,23,42,.055); }
.support-materials-toolbar { gap: 10px 14px; padding: 12px; border-radius: 14px; background: color-mix(in srgb,var(--surface-soft) 82%,var(--surface)); }
.support-materials-search { min-height: 46px; border-radius: 11px; }
.support-materials-filter > span { font-size:var(--font-xs); letter-spacing: .045em; }
.support-materials-filter select { min-height: 42px; border-radius: 10px; font-size:var(--font-sm); }
.support-materials-catalog-heading { padding: 2px 2px 0; }
.support-materials-catalog-heading h2 { font-size: 17px; letter-spacing: -.01em; }
.support-materials-card { border-radius: 18px; box-shadow: 0 7px 20px rgba(15,23,42,.05); }
.support-materials-card:hover { transform: translateY(-4px); box-shadow: 0 16px 34px rgba(15,23,42,.09),0 9px 22px rgba(var(--repository-accent),.09); }
body.dark-mode .support-materials-shell { border-color: color-mix(in srgb,var(--line) 72%,#60a5fa 28%); box-shadow: 0 13px 32px rgba(0,0,0,.18); }
body.dark-mode .support-materials-toolbar { background: color-mix(in srgb,var(--surface-soft) 82%,var(--surface)); }

@media(max-width:600px) {
    #repositoryContent .repository-page-header,.support-materials-page-header { margin-top: 16px; }
    #repositoryContent .repository-page-header h1,.support-materials-page-header h1 { font-size: 26px; }
    #repositoryContent .repository-shell,.support-materials-shell { padding: 16px; }
    #repositoryContent .repository-tabs-nav { padding-bottom: 8px; }
    #repositoryContent .repository-tab-btn::after { bottom: -9px; }
}

/* Adaptación directa del patrón administrativo para la consulta (sin acciones Admin). */
#repositoryContent .reader-repository-stats { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px; }
#repositoryContent .reader-repository-stats .ar-stat { --card-accent:var(--status-published);min-width:0;min-height:78px;padding:16px 18px;border:1px solid rgba(var(--card-accent),.32);border-top:3px solid rgb(var(--card-accent));border-radius:15px;background:var(--surface);box-sizing:border-box;display:flex;align-items:center;gap:14px; }
#repositoryContent .reader-repository-stats .ar-stat-materials { --card-accent:var(--status-completed); }
#repositoryContent .reader-repository-stats .ar-stat-icon { width:40px;height:40px;margin:0;border-radius:12px;background:rgba(var(--card-accent),.1);color:rgb(var(--card-accent));box-sizing:border-box;display:flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1; }
#repositoryContent .reader-repository-stats .ar-stat>div { min-width:0;display:flex;flex-direction:column;justify-content:center; }
#repositoryContent .reader-repository-stats .ar-stat strong { display:block;font-size:var(--font-2xl);line-height:1.1; }
#repositoryContent .reader-repository-stats .ar-stat div span { display:block;margin-top:3px;color:var(--muted);font-size:var(--font-md);line-height:1.3; }
#repositoryContent .reader-repository-head,.reader-materials-head { display:flex;align-items:flex-start;justify-content:space-between;gap:24px; }
#repositoryContent .reader-repository-head .repository-eyebrow,.reader-materials-head .support-materials-eyebrow { color:var(--blue);font-size:var(--font-xs);font-weight:850;letter-spacing:.075em;text-transform:uppercase; }
#repositoryContent .reader-repository-head h1,.reader-materials-head h1 { margin:5px 0 7px;font-size:clamp(1.65rem,3vw,2rem);line-height:1.15;letter-spacing:normal; }
#repositoryContent .reader-repository-head p,.reader-materials-head p { margin:0;color:var(--muted);line-height:1.55; }
#repositoryContent .reader-repository-catalog,.reader-materials-catalog { min-width:0;padding:0;border:1px solid var(--line);border-radius:18px;background:var(--surface);box-shadow:none;overflow:visible; }
#repositoryContent .reader-repository-catalog .ar-tabs { padding:0 18px;border-bottom:1px solid var(--line);display:flex;gap:8px;overflow:auto; }
#repositoryContent .reader-repository-catalog .ar-tabs .repository-tab-btn { min-height:54px;padding:0 13px;border:0;border-bottom:3px solid transparent;border-radius:0;background:transparent;color:var(--muted);font-weight:800;display:flex;align-items:center;gap:8px;white-space:nowrap; }
#repositoryContent .reader-repository-catalog .ar-tabs .repository-tab-btn::after { display:none; }
#repositoryContent .reader-repository-catalog .ar-tabs .repository-tab-btn.is-active { border-bottom-color:var(--blue);background:transparent;color:var(--blue); }
#repositoryContent .reader-repository-catalog .ar-tabs .repository-tab-btn:hover { background:transparent;color:var(--text); }
#repositoryContent .reader-repository-catalog .ar-tabs .repository-tab-badge { min-width:22px;height:22px;padding:0 6px;border-radius:999px;background:var(--surface-soft);color:inherit;font-size:var(--font-xs);display:inline-grid;place-items:center; }
#repositoryContent .reader-repository-catalog .ar-panel { padding:18px; }
#repositoryContent .reader-repository-catalog .ar-panel>.reader-repository-tools { margin:-18px -18px 0; }
#repositoryContent .reader-repository-catalog .ar-panel>.ar-section-head { margin:0 -18px 16px; }
#repositoryContent .reader-repository-catalog .ar-panel>.ar-grid { padding:0; }
#repositoryContent .reader-repository-catalog .reader-repository-tools,.reader-materials-catalog .reader-materials-tools { padding:15px 18px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;display:grid;grid-template-columns:minmax(240px,1fr) repeat(5,minmax(135px,180px)) auto;gap:10px;align-items:end; }
#repositoryContent .reader-repository-catalog .repository-shell .repository-search,#repositoryContent .reader-repository-catalog .repository-search { min-height:44px;height:44px;padding:0 13px;border-radius:12px;background:var(--surface-soft); }
#repositoryContent .reader-repository-catalog .repository-filter-item { display:grid;gap:5px; }
#repositoryContent .reader-repository-catalog .repository-filter-item>span { padding-left:2px;font-size:var(--font-xs);font-weight:800;text-transform:uppercase; }
#repositoryContent .reader-repository-catalog .repository-shell .repository-dropdown-trigger,#repositoryContent .reader-repository-catalog .repository-dropdown-trigger { height:44px;min-height:44px;border-radius:12px;background:var(--surface-soft);font-size:var(--font-md); }
#repositoryContent .reader-repository-catalog .repository-toolbar-actions { margin-left:0;align-self:end; }
#repositoryContent .reader-repository-catalog .repository-favorites-filter,#repositoryContent .reader-repository-catalog .repository-clear-filters { min-height:38px;border-radius:9px;background:var(--surface); }
#repositoryContent .reader-repository-catalog .ar-section-head,.reader-materials-catalog .ar-section-head { margin:0;padding:18px 18px 16px;display:flex;align-items:end;justify-content:space-between;gap:18px; }
#repositoryContent .reader-repository-catalog .repository-catalog-kicker,.reader-materials-catalog .support-materials-catalog-kicker { color:var(--blue);font-size:var(--font-xs);font-weight:850;letter-spacing:.075em;text-transform:uppercase; }
#repositoryContent .reader-repository-catalog .repository-section-subhead,.reader-materials-catalog .support-materials-catalog-heading h2 { margin:3px 0 0;font-size:var(--font-xl);letter-spacing:normal; }
#repositoryContent .reader-repository-catalog .repository-count,.reader-materials-catalog .repository-count { padding:0;border:0;border-radius:0;background:transparent;color:var(--muted);font-size:var(--font-sm); }
#repositoryContent .reader-repository-catalog .ar-grid,.reader-materials-catalog .ar-grid { padding:0 18px 18px;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px; }
#repositoryContent .reader-repository-catalog .ar-project-card,#repositoryContent .reader-repository-catalog .ar-material-card,.reader-materials-catalog .ar-material-card { min-width:0;padding:0;border-radius:15px;box-shadow:none;overflow:hidden; }
#repositoryContent .reader-repository-catalog .ar-project-card::after,#repositoryContent .reader-repository-catalog .ar-material-card::after,.reader-materials-catalog .ar-material-card::after { display:none; }
#repositoryContent .reader-repository-catalog .repository-support-card,.reader-materials-catalog .support-materials-card { --repository-accent:var(--status-completed); }
#repositoryContent .reader-repository-catalog .repository-support-card[data-support-category="tesis"],.reader-materials-catalog .support-materials-card[data-category="tesis"] { --repository-accent:var(--project-thesis); }
#repositoryContent .reader-repository-catalog .repository-support-card[data-support-category="practicas"],.reader-materials-catalog .support-materials-card[data-category="practicas"] { --repository-accent:var(--project-practices); }
#repositoryContent .reader-repository-catalog .repository-support-card[data-support-category="proyecto-pis"],.reader-materials-catalog .support-materials-card[data-category="proyecto-pis"] { --repository-accent:var(--project-pis); }
#repositoryContent .reader-repository-catalog .repository-support-card[data-support-category="vinculacion"],.reader-materials-catalog .support-materials-card[data-category="vinculacion"] { --repository-accent:var(--project-linkage); }
#repositoryContent .reader-repository-catalog .ar-project-card:hover,#repositoryContent .reader-repository-catalog .ar-material-card:hover,.reader-materials-catalog .ar-material-card:hover { transform:translateY(-1px);box-shadow:0 10px 25px rgba(15,23,42,.07); }
#repositoryContent .reader-repository-catalog .repository-card-top,.reader-materials-catalog .repository-card-top { padding:15px 16px 0; }
#repositoryContent .reader-repository-catalog .repository-document-icon,.reader-materials-catalog .repository-document-icon { width:38px;height:38px;border-radius:11px;background:rgba(var(--repository-accent),.1);color:rgb(var(--repository-accent));font-size:16px; }
#repositoryContent .reader-repository-catalog .repository-type,.reader-materials-catalog .repository-type { margin:0;padding:8px 16px 0;color:rgb(var(--repository-accent));font-size:var(--font-xs);letter-spacing:.04em; }
#repositoryContent .reader-repository-catalog .repository-card h3,.reader-materials-catalog .repository-card h3 { margin:12px 16px 9px;font-size:var(--font-lg);line-height:1.38;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2; }
#repositoryContent .reader-repository-catalog .repository-card>p,.reader-materials-catalog .repository-card>p { margin:0 16px;overflow:hidden;font-size:var(--font-sm);line-height:1.55;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2; }
#repositoryContent .reader-repository-catalog .repository-card h3+#dummy,.reader-materials-catalog .repository-card h3+#dummy { display:none; }
#repositoryContent .reader-repository-catalog .repository-card>.repository-meta,.reader-materials-catalog .repository-card>.repository-meta { margin-top:auto;padding:11px 16px;border-top:1px solid var(--line);background:var(--surface-soft);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:7px 10px; }
#repositoryContent .reader-repository-catalog .repository-meta span,.reader-materials-catalog .repository-meta span { min-width:0;font-size:var(--font-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
#repositoryContent .reader-repository-catalog .repository-technologies,.reader-materials-catalog .repository-technologies { margin:12px 16px 0; }
#repositoryContent .reader-repository-catalog .repository-downloads,.reader-materials-catalog .repository-downloads { margin:12px 16px 0; }
#repositoryContent .reader-repository-catalog .repository-card-actions,.reader-materials-catalog .repository-card-actions { padding:12px 16px;border-top:1px solid var(--line); }
#repositoryContent .reader-repository-catalog .repository-open-btn,.reader-materials-catalog .repository-open-btn { width:auto;min-height:34px;padding:0 11px;border-radius:9px;background:var(--blue);color:#fff;font-size:var(--font-sm); }
#repositoryContent .reader-repository-catalog .repository-favorite-btn { width:34px;height:34px;border-radius:9px;background:var(--surface); }
.reader-materials-catalog .reader-materials-tools { grid-template-columns:minmax(240px,1fr) minmax(160px,200px); }
.reader-materials-catalog .support-materials-search { min-height:44px;height:44px;padding:0 13px;border-radius:12px;background:var(--surface-soft); }
.reader-materials-catalog .support-materials-filter { min-width:0; }
.reader-materials-catalog .support-materials-filter>span { padding-left:2px;font-size:var(--font-xs);font-weight:800;text-transform:uppercase; }
.reader-materials-catalog .support-materials-filter select { height:44px;min-height:44px;border-radius:12px;background:var(--surface-soft);font-size:var(--font-md); }
.reader-materials-catalog .ar-grid { padding:0 18px 18px;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px; }
.reader-materials-catalog .repository-card-top { padding:15px 16px 0; }
.reader-materials-catalog .repository-type { margin:0;padding:8px 16px 0;font-size:var(--font-xs); }
.reader-materials-catalog .repository-card h3,.reader-materials-catalog .repository-card>p { margin-right:16px;margin-left:16px; }
body.dark-mode #repositoryContent .reader-repository-catalog,body.dark-mode .reader-materials-catalog { border-color:var(--line);box-shadow:none; }

@media(max-width:1200px) {
    #repositoryContent .reader-repository-catalog .reader-repository-tools { grid-template-columns:minmax(260px,1fr) repeat(3,minmax(140px,1fr)); }
    #repositoryContent .reader-repository-catalog .repository-toolbar-actions { grid-column:1/-1;justify-content:flex-end; }
}
@media(max-width:760px) {
    #repositoryContent .reader-repository-catalog .reader-repository-tools { grid-template-columns:repeat(2,minmax(0,1fr)); }
    #repositoryContent .reader-repository-catalog .repository-search { grid-column:1/-1; }
    #repositoryContent .reader-repository-catalog .repository-toolbar-actions { grid-column:1/-1;justify-content:flex-start; }
    #repositoryContent .reader-repository-catalog .ar-grid,.reader-materials-catalog .ar-grid { grid-template-columns:1fr; }
}
@media(max-width:480px) {
    #repositoryContent .reader-repository-catalog .ar-tabs { padding:0 12px; }
    #repositoryContent .reader-repository-catalog .reader-repository-tools,.reader-materials-catalog .reader-materials-tools { padding:14px 12px;grid-template-columns:1fr; }
    #repositoryContent .reader-repository-catalog .repository-search,#repositoryContent .reader-repository-catalog .repository-toolbar-actions { grid-column:auto; }
    #repositoryContent .reader-repository-catalog .ar-section-head,.reader-materials-catalog .ar-section-head { padding:16px 12px;align-items:flex-start;flex-direction:column; }
    #repositoryContent .reader-repository-catalog .ar-grid,.reader-materials-catalog .ar-grid { padding:0 12px 12px; }
    #repositoryContent .reader-repository-catalog .repository-card>.repository-meta,.reader-materials-catalog .repository-card>.repository-meta { grid-template-columns:1fr; }
}

@media(max-width:900px) {
    .repository-detail-skeleton,
    .repository-detail-layout { grid-template-columns: 1fr; }
    .repository-detail-info { position: static; }
    .support-material-detail .repository-detail-layout { display: flex; flex-direction: column; gap: 18px; }
    .support-material-detail .repository-detail-info { display: contents; }
    .support-material-detail .repository-detail-info > .repository-detail-panel:first-child { order: 1; }
    .support-material-detail .support-material-files { order: 2; }
    .support-material-detail .support-material-publisher { order: 3; }
    .support-material-detail .support-material-description-panel { order: 4; }
    .support-material-detail .support-material-keywords-panel { order: 5; }
    .support-material-detail .repository-detail-download { order: 6; }
    .support-material-detail .repository-complete-download { order: 7; }
    .repository-skeleton-grid { grid-template-columns: 1fr; }
    .repository-filters { grid-template-columns: repeat(2,minmax(0,1fr)); }
    .repository-grid { grid-template-columns: 1fr; }
    #repositoryGrid { grid-template-columns: repeat(2,minmax(0,1fr)); }
    .repository-support-grid { grid-template-columns: 1fr; }
    .support-materials-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
    .repository-carousel-prev { left: 10px; }
    .repository-carousel-next { right: 10px; }
    .repository-card,
    .repository-support-card {
        padding: 20px;
    }
}
@media(max-width:600px) {
    .repository-detail-header,
    .repository-explorer-header { align-items: flex-start; flex-direction: column; }
    .support-material-main-file > div { width: 100%; }
    .repository-detail-favorite,
    .repository-explorer-header .open-btn { width: 100%; justify-content: center; }
    .repository-detail-header { padding: 21px 18px; }
    .repository-file-list { padding: 0 14px 14px; }
    .repository-preview { padding: 0 14px 14px; }
    .repository-preview-header { align-items: flex-start; flex-direction: column; }
    .support-material-detail .repository-preview-header > div:first-child { width: 100%; }
    .repository-preview-actions { width: 100%; flex-direction: column; }
    .repository-preview-header .open-btn,
    .repository-preview-expand { width: 100%; justify-content: center; }
    .repository-preview-modal { padding: 10px; }
    .repository-preview-modal-dialog { width: 100%; height: 92vh; border-radius: 16px; grid-template-rows: 58px minmax(0,1fr); }
    .repository-preview-modal-header { padding: 0 10px 0 16px; }
    .repository-preview-modal-body { padding: 10px; }
    .repository-preview-pdf { min-height: 560px; }
    .repository-preview-image-canvas { min-height: 300px; padding: 16px; }
    .repository-file-head { display: none; }
    .repository-file-row { margin-bottom: 8px; padding: 13px; border: 1px solid var(--line); border-radius: 14px; grid-template-columns: 1fr auto; gap: 7px 12px; }
    .support-material-files .repository-file-row { grid-template-columns: 1fr auto; }
    .repository-file-row > :nth-child(2) { grid-column: 1; grid-row: 2; }
    .repository-file-row > :nth-child(3) { grid-column: 2; grid-row: 2; }
    .repository-file-row > :nth-child(4) { grid-column: 2; grid-row: 1; }
    .repository-skeleton-toolbar { grid-template-columns: 1fr; }
    .repository-hero { padding: 23px 20px; }
    .repository-hero-icon { display: none; }
    .repository-support { margin-top: 28px; padding-top: 18px; }
    .repository-section-divider { margin: 14px 0; }
    .repository-tools { margin-top: 20px; }
    .repository-support-row {
        grid-template-columns: 1fr;
    }
    .support-materials-tools { grid-template-columns: 1fr; }
    .support-materials-grid { grid-template-columns: 1fr; }
    .repository-filter-row {
        grid-template-columns: 1fr;
    }
    .repository-filters-inline {
        grid-template-columns: 1fr;
    }
    .repository-filters { display: grid; grid-template-columns: 1fr; }
    .repository-dropdown-menu { position: static; margin-top: 8px; }
    .repository-grid { grid-template-columns: 1fr; }
    #repositoryGrid { grid-template-columns: 1fr; }
    .repository-support-grid { grid-template-columns: 1fr; }
    .repository-catalog-summary { max-width: 52%; }
    .repository-count { white-space: normal; text-align: right; }
    .repository-favorites-filter { margin-left: auto; }
    .repository-card-top-actions { gap: 6px; }
    .repository-favorite-btn { width: 36px; height: 36px; }
    .repository-tools {
        padding: 16px;
        border-radius: 18px;
    }
    .repository-card,
    .repository-support-card {
        padding: 18px;
        border-radius: 18px;
    }
    .repository-card h3 {
        font-size: 17px;
    }
    .repository-card > p {
        font-size:var(--font-sm);
    }
    .repository-meta span {
        font-size:var(--font-xs);
    }
    .repository-keywords span {
        font-size:var(--font-xs);
    }
}
@media(max-width:480px) {
    .repository-pagination { gap: 8px; }
    .repository-pagination button { min-width: 42px; padding: 0 10px; font-size: 0; }
    .repository-pagination button i { font-size: 12px; }
}

@media(prefers-reduced-motion: reduce) {
    .repository-content,
    .repository-detail,
    .repository-card,
    .repository-preview-image-canvas img,
    .repository-preview-modal-dialog { scroll-behavior: auto; transition: none !important; animation: none !important; }
}

.active-project-card {
    border-top: 5px solid var(--primary);
}
.timeline-section {
    display: block;
}

@media(max-width:760px) {
    .projects-container .projects-main-column,
    .projects-container .projects-side-column {
        display: contents;
    }

    .projects-container .active-project-card {
        order: 1;
    }

    .projects-container .upload-version-panel {
        order: 4;
    }

    .projects-container .projects-stats-panel {
        order: 2;
    }

    .projects-container .timeline-section {
        order: 3;
    }
}
.document-timeline {
    display: flex;
    flex-direction: column;
    gap: 20px;
    position: relative;
    padding-left: 10px;
}
.timeline-card-wrapper {
    display: flex;
    gap: 20px;
    position: relative;
}
.timeline-indicator {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 24px;
    flex-shrink: 0;
}
.timeline-dot {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--surface-soft);
    border: 2px solid var(--line);
    color: var(--muted);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    z-index: 2;
    transition: all .25s ease;
}
.timeline-dot.active {
    background: rgba(37,99,235,.12);
    border-color: var(--blue);
    color: var(--blue);
    font-size: 12px;
}
.timeline-line {
    width: 2px;
    background: var(--line);
    flex-grow: 1;
    margin-top: 6px;
    margin-bottom: -26px;
}
.timeline-card-wrapper:last-child .timeline-line {
    display: none;
}
.timeline-card {
    background: var(--surface);
    border: 1px solid rgba(226,232,240,.75);
    border-radius: 20px;
    box-shadow: var(--shadow);
    padding: 22px;
    flex-grow: 1;
    display: flex;
    flex-direction: column;
    gap: 14px;
    transition: all .35s ease;
}
.timeline-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 16px 32px rgba(15,23,42,.08);
}
.timeline-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    flex-wrap: nowrap;
}
.version-info {
    display: flex;
    align-items: center;
    gap: 10px;
}
.version-badge {
    background: var(--primary);
    color: white;
    font-size:var(--font-sm);
    font-weight: 800;
    padding: 4px 10px;
    border-radius: 999px;
    line-height: 1;
}
body.dark-mode .version-badge {
    background: var(--blue);
}
.phase-title {
    font-size: 18px;
    color: var(--text);
    margin: 0;
}
.file-delivery-info {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 14px;
    background: var(--surface-soft);
    border: 1px solid var(--line);
    padding: 14px 16px;
    border-radius: 16px;
}
.file-details {
    display: flex;
    align-items: center;
    gap: 12px;
}
.pdf-icon {
    font-size: 28px;
    color: var(--danger);
}
.file-download-link {
    color: var(--text);
    transition: color .2s ease;
}
.file-download-link:hover {
    color: var(--blue);
}
.file-download-link strong {
    display: block;
    max-width: 100%;
    font-size:var(--font-md);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.file-download-link + small {
    display: block;
    font-size:var(--font-sm);
    color: var(--muted);
    margin-top: 2px;
}
.delivery-time {
    font-size:var(--font-md);
    color: var(--muted);
    font-weight: 700;
}
.delivery-time i {
    margin-right: 4px;
}
.tutor-feedback-block {
    border-left: 3px solid var(--blue);
    padding-left: 14px;
    display: grid;
    gap: 6px;
}
.tutor-feedback-block strong {
    color: var(--text);
    font-size:var(--font-md);
}
.tutor-feedback-block p {
    color: var(--muted);
    font-size:var(--font-md);
    line-height: 1.55;
    margin: 0;
}
.timeline-observations-box {
    display: block;
}
.toggle-observations-btn {
    width: 100%;
    background: var(--surface-soft);
    border: 1px solid var(--line);
    color: var(--text);
    padding: 12px 16px;
    border-radius: 14px;
    cursor: pointer;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size:var(--font-md);
    transition: all .2s ease;
}
.toggle-observations-btn:hover {
    background: var(--line);
    border-color: rgba(37,99,235,.2);
}
.toggle-observations-btn i.fa-chevron-down {
    transition: transform .25s ease;
}
.toggle-observations-btn[aria-expanded="true"] i.fa-chevron-down {
    transform: rotate(180deg);
}
.toggle-observations-btn i.fa-list-check {
    color: var(--warning);
    margin-right: 6px;
}
.file-drag-zone {
    border: 2px dashed var(--line);
    border-radius: 18px;
    padding: 24px;
    text-align: center;
    background: var(--surface-soft);
    cursor: pointer;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    transition: all .25s ease;
}
.file-drag-zone:hover,
.file-drag-zone.dragover {
    border-color: var(--blue);
    background: rgba(37,99,235,.03);
}
.file-drag-zone .upload-icon {
    font-size: 32px;
    color: var(--blue);
    margin-bottom: 4px;
}
.file-drag-zone strong {
    font-size:var(--font-md);
    color: var(--text);
}
.file-drag-zone span {
    font-size:var(--font-md);
    color: var(--muted);
}
.file-drag-zone small {
    font-size:var(--font-xs);
    color: var(--muted);
    margin-top: 4px;
}
.select-wrap select {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
}
.select-wrap {
    position: relative;
}
.select-wrap::after {
    content: "\f078";
    font-family: "Font Awesome 6 Free";
    font-weight: 900;
    position: absolute;
    right: 15px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--muted);
    font-size: 12px;
    pointer-events: none;
}
.upload-alert.success {
    background: rgba(16,185,129,.1);
    border: 1px solid rgba(16,185,129,.25);
    color: #047857;
}
body.dark-mode .upload-alert.success {
    color: var(--accent);
}
.upload-alert.error {
    background: rgba(239,68,68,.1);
    border: 1px solid rgba(239,68,68,.25);
    color: #b91c1c;
}
body.dark-mode .upload-alert.error {
    color: var(--danger);
}
/* Final de estilos de proyectos */
/* Inicio de panel de notificaciones de la barra superior */
.topbar-notifications{
    position:relative;
}
.topbar-notifications-panel{
    position:absolute;
    z-index:95;
    top:calc(100% + 12px);
    right:0;
    width:min(390px,calc(100vw - 32px));
    overflow:hidden;
    background:var(--surface);
    border:1px solid var(--line);
    border-radius:20px;
    box-shadow:0 24px 55px rgba(15,23,42,.2);
}
.topbar-notifications-panel[hidden]{
    display:none;
}
.topbar-notifications-panel header{
    padding:17px 18px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    border-bottom:1px solid var(--line);
    background:linear-gradient(135deg,rgba(37,99,235,.08),rgba(16,185,129,.06));
}
.topbar-notifications-panel header span{
    color:var(--blue);
    font-size:var(--font-xs);
    font-weight:800;
    letter-spacing:.08em;
    text-transform:uppercase;
}
.topbar-notifications-panel header h2{
    margin-top:2px;
    font-size:18px;
}
.topbar-notifications-panel header>i{
    color:var(--blue);
    font-size:20px;
}
.topbar-notifications-list{
    max-height:344px;
    overflow-y:auto;
    overscroll-behavior:contain;
    scrollbar-width:thin;
    scrollbar-color:rgba(100,116,139,.32) transparent;
}
.topbar-notifications-list::-webkit-scrollbar{
    width:5px;
}
.topbar-notifications-list::-webkit-scrollbar-track{
    background:transparent;
}
.topbar-notifications-list::-webkit-scrollbar-thumb{
    background:rgba(100,116,139,.28);
    border-radius:999px;
}
.topbar-notifications-section-title{
    position:sticky;
    top:0;
    z-index:2;
    padding:7px 16px;
    background:color-mix(in srgb,var(--surface) 94%,var(--surface-soft));
    border-bottom:1px solid var(--line);
    color:var(--muted);
    font-size:var(--font-xs);
    font-weight:800;
    letter-spacing:.08em;
    text-transform:uppercase;
}
.topbar-notification-item{
    position:relative;
    min-height:86px;
    padding:13px 16px;
    display:grid;
    grid-template-columns:40px minmax(0,1fr) 8px;
    align-items:center;
    gap:11px;
    border-bottom:1px solid var(--line);
    cursor:pointer;
    transition:background-color .18s ease;
}
.topbar-notification-item:hover,
.topbar-notification-item:focus-visible{
    background:var(--surface-soft);
    outline:none;
}
.topbar-notification-item.is-read{
    opacity:.72;
    grid-template-columns:40px minmax(0,1fr);
}
.topbar-notification-icon{
    width:40px;
    height:40px;
    display:grid;
    place-items:center;
    border-radius:12px;
    background:rgba(37,99,235,.1);
    color:var(--blue);
}
.topbar-notification-item strong{
    display:block;
    overflow:hidden;
    color:var(--text);
    font-size:var(--font-md);
    white-space:nowrap;
    text-overflow:ellipsis;
}
.topbar-notification-item p{
    margin:4px 0;
    overflow:hidden;
    color:var(--muted);
    font-size:var(--font-sm);
    white-space:nowrap;
    text-overflow:ellipsis;
}
.topbar-notification-item small{
    color:var(--muted);
    font-size:var(--font-xs);
}
.topbar-notification-dot{
    width:7px;
    height:7px;
    border-radius:50%;
    background:var(--blue);
    box-shadow:0 0 0 4px rgba(37,99,235,.1);
}
.topbar-notifications-loading,
.topbar-notifications-empty{
    min-height:100px;
    padding:20px;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:9px;
    color:var(--muted);
    font-size:var(--font-md);
    text-align:center;
}
.topbar-notifications-panel footer{
    padding:11px;
    border-top:1px solid var(--line);
    background:var(--surface);
}
.topbar-notifications-panel footer a{
    min-height:42px;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:9px;
    border-radius:12px;
    background:var(--primary);
    color:white;
    font-size:var(--font-md);
    font-weight:800;
    transition:.2s ease;
}
.topbar-notifications-panel footer a:hover{
    background:var(--blue-dark);
}
html.theme-dark .topbar-notifications-list{
    scrollbar-color:rgba(148,163,184,.4) transparent;
}
@media(max-width:600px){
    .topbar-notifications-panel{
        position:fixed;
        top:76px;
        right:16px;
        left:16px;
        width:auto;
    }
}
/* Final de panel de notificaciones de la barra superior */
/* Navegación contextual desde los recordatorios */
.calendar-page .agenda-actions .agenda-go-link{min-height:34px;padding:7px 8px;border-radius:9px;background:#eff6ff;border:1px solid #bfdbfe;color:#2563eb;font-size:var(--font-xs);font-weight:800;display:inline-flex;align-items:center;justify-content:center;gap:5px}.calendar-page .agenda-actions .agenda-go-link:hover{background:#dbeafe;border-color:#93c5fd}.project-target-highlight{animation:projectTargetPulse 2.2s ease}@keyframes projectTargetPulse{0%,100%{box-shadow:var(--shadow)}25%,70%{box-shadow:0 0 0 4px rgba(37,99,235,.2),0 18px 45px rgba(37,99,235,.16)}}
@media(max-width:1180px){.calendar-page .agenda-actions .agenda-go-link{min-height:40px;padding:8px 10px;font-size:var(--font-xs)}}
@media(max-width:700px){.calendar-page .agenda-actions{grid-template-columns:repeat(2,1fr)}.calendar-page .agenda-actions .agenda-go-link{min-height:44px;font-size:var(--font-xs)}}

/* Ficha completa del recordatorio */
.calendar-detail-modal{width:min(540px,100%);max-height:calc(100vh - 40px);overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:24px;padding:24px;box-shadow:0 26px 70px rgba(15,23,42,.3)}.calendar-detail-modal>header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.calendar-detail-modal h2{margin-top:8px;font-size:23px;line-height:1.25}.calendar-detail-type{display:inline-flex;padding:5px 8px;border-radius:7px;font-size:var(--font-xs);font-weight:900;text-transform:uppercase;letter-spacing:.04em}.calendar-detail-type.delivery{background:#dbeafe;color:#1d4ed8}.calendar-detail-type.meeting{background:#ede9fe;color:#6d28d9}.calendar-detail-type.review{background:#d1fae5;color:#047857}.calendar-detail-type.deadline{background:#ffedd5;color:#c2410c}.calendar-detail-summary{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:8px;margin:20px 0}.calendar-detail-summary span{min-width:0;padding:11px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);display:flex;align-items:center;gap:8px;color:var(--muted)}.calendar-detail-summary i{color:var(--blue)}.calendar-detail-summary strong{font-size:var(--font-xs);line-height:1.35;color:var(--text);text-transform:capitalize}.calendar-detail-description{padding:14px;border:1px solid var(--line);border-radius:13px}.calendar-detail-description>span,.calendar-detail-project span{display:block;margin-bottom:5px;color:var(--muted);font-size:var(--font-xs);font-weight:800;text-transform:uppercase;letter-spacing:.04em}.calendar-detail-description p{font-size:var(--font-md);line-height:1.55;color:var(--text)}.calendar-detail-project{display:flex;align-items:center;gap:11px;margin-top:12px;padding:13px;border-radius:13px;background:#eff6ff;border:1px solid #bfdbfe}.calendar-detail-project[hidden],.calendar-project-btn[hidden]{display:none}.calendar-detail-project>i{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:#dbeafe;color:#2563eb}.calendar-detail-project strong{font-size:var(--font-sm);color:#1e3a8a}.calendar-detail-actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:20px}.calendar-detail-actions button,.calendar-project-btn{min-height:40px;padding:10px 12px;border-radius:10px;font-size:var(--font-xs);font-weight:800;display:inline-flex;align-items:center;justify-content:center;gap:6px}.calendar-project-btn{background:var(--primary);color:#fff}.calendar-project-btn:hover{background:var(--blue)}.calendar-agenda-item{cursor:pointer}

/* Categori­a Personal y controles nativos de fecha/hora del calendario. */
.filter-dot.personal,.calendar-legend i.personal{background:#64748b}.calendar-event-chip.personal{color:#334155;background:#e2e8f0;border-color:#64748b}.agenda-accent.personal{background:#64748b}.calendar-week-card.personal{background:#e2e8f0;color:#334155;border-color:#64748b}.calendar-detail-type.personal{background:#e2e8f0;color:#334155}.calendar-select-wrap[data-select="type"][data-value="personal"]{--select-accent:#64748b}.calendar-select-wrap[data-select="type"] .calendar-select-option[data-value="personal"]{--option-color:#64748b}
.calendar-page .calendar-form-field input:is([type="date"],[type="time"]){box-sizing:border-box;min-height:45px;padding:0 12px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);color:var(--text);font:inherit;font-size:var(--font-md);font-weight:700;line-height:1;cursor:pointer;accent-color:var(--blue);transition:border-color .2s,box-shadow .2s,background-color .2s}.calendar-page .calendar-form-field input:is([type="date"],[type="time"]):hover{border-color:rgba(37,99,235,.4);background:var(--surface)}.calendar-page .calendar-form-field input:is([type="date"],[type="time"]):focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12);background:var(--surface)}.calendar-page .calendar-form-field input:is([type="date"],[type="time"])::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.72}.calendar-page .calendar-form-field input:is([type="date"],[type="time"]):hover::-webkit-calendar-picker-indicator{opacity:1}
.calendar-date-time-control{position:relative}.calendar-date-time-trigger{width:100%;min-height:45px;padding:0 12px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);color:var(--text);display:flex;align-items:center;justify-content:space-between;gap:10px;font:inherit;font-size:var(--font-md);font-weight:700;text-align:left;cursor:pointer;transition:border-color .2s,box-shadow .2s,background .2s}.calendar-date-time-trigger:hover{border-color:rgba(37,99,235,.4);background:var(--surface)}.calendar-date-time-trigger:focus-visible,.calendar-date-time-trigger[aria-expanded="true"]{outline:0;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12);background:var(--surface)}.calendar-date-time-trigger i{color:var(--blue);font-size:14px}.calendar-date-picker,.calendar-time-picker{position:absolute;z-index:50;top:calc(100% + 8px);left:0;box-sizing:border-box;width:286px;padding:14px;border:1px solid var(--line);border-radius:16px;background:var(--surface);box-shadow:0 20px 48px rgba(15,23,42,.22)}.calendar-date-picker[hidden],.calendar-time-picker[hidden]{display:none!important}.calendar-date-picker header{display:grid;grid-template-columns:34px 1fr 34px;align-items:center;gap:8px;margin-bottom:12px}.calendar-date-picker header strong{text-align:center;text-transform:capitalize;font-size:var(--font-md)}.calendar-date-picker header button,.calendar-time-picker header button{display:grid;place-items:center;width:34px;height:34px;padding:0;border:0;border-radius:9px;background:var(--surface-soft);color:var(--text);cursor:pointer}.calendar-date-picker header button:hover,.calendar-time-picker header button:hover{background:rgba(37,99,235,.1);color:var(--blue)}.calendar-date-weekdays,.calendar-date-days{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.calendar-date-weekdays{margin-bottom:5px}.calendar-date-weekdays span{padding:4px 0;color:var(--muted);font-size:var(--font-xs);font-weight:850;text-align:center;text-transform:uppercase}.calendar-date-days button{display:grid;place-items:center;aspect-ratio:1;padding:0;border:0;border-radius:9px;background:transparent;color:var(--text);font:inherit;font-size:var(--font-sm);cursor:pointer}.calendar-date-days button:hover{background:rgba(37,99,235,.1);color:var(--blue)}.calendar-date-days button.is-outside{color:var(--muted);opacity:.55}.calendar-date-days button.is-selected{background:var(--blue)!important;color:#fff!important;font-weight:850}.calendar-date-days button.is-today:not(.is-selected){box-shadow:inset 0 0 0 1px rgba(37,99,235,.45);color:var(--blue);font-weight:800}.calendar-date-picker footer,.calendar-time-picker footer{display:flex;justify-content:space-between;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}.calendar-date-picker footer button,.calendar-time-picker footer button{padding:6px 8px;border:0;border-radius:8px;background:transparent;color:var(--blue);font:inherit;font-size:var(--font-xs);font-weight:800;cursor:pointer}.calendar-date-picker footer button:hover,.calendar-time-picker footer button:hover{background:rgba(37,99,235,.08)}.calendar-time-picker{width:270px}.calendar-time-picker header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px}.calendar-time-picker header strong{font-size:var(--font-md)}.calendar-time-options{display:grid;grid-template-columns:1fr 1fr;gap:12px}.calendar-time-options section{min-width:0}.calendar-time-options section>strong{display:block;margin:0 0 6px;color:var(--muted);font-size:var(--font-xs);font-weight:850;text-transform:uppercase;letter-spacing:.04em}.calendar-time-options section>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;max-height:184px;padding-right:3px;overflow-y:auto}.calendar-time-options button{min-height:31px;padding:4px;border:1px solid transparent;border-radius:8px;background:var(--surface-soft);color:var(--text);font:inherit;font-size:var(--font-sm);font-weight:750;cursor:pointer}.calendar-time-options button:hover{border-color:rgba(37,99,235,.32);color:var(--blue)}.calendar-time-options button.is-selected{border-color:var(--blue);background:var(--blue);color:#fff}@media(max-width:520px){.calendar-date-picker,.calendar-time-picker{left:50%;width:min(286px,calc(100vw - 56px));transform:translateX(-50%)}}
@media(max-width:600px){.calendar-detail-modal{padding:20px}.calendar-detail-summary{grid-template-columns:1fr}.calendar-detail-actions{display:grid;grid-template-columns:1fr}.calendar-detail-actions button,.calendar-project-btn{width:100%;min-height:44px}}

/* Las vistas del calendario se reemplazan dentro del mismo escenario */
.calendar-view-stage{position:relative;min-width:0}.calendar-view-panel[hidden]{display:none!important}.calendar-view-panel:not(.active){display:none!important}.calendar-view-panel.active{animation:calendarViewIn .2s ease}@keyframes calendarViewIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}

/* Calendario compacto: información esencial */
.calendar-page .calendar-workspace{grid-template-columns:minmax(0,1fr) 350px}.calendar-page .calendar-event-chip{align-self:flex-start;width:auto;max-width:100%;min-height:23px;padding:5px 7px;font-size:var(--font-xs);border-left-width:3px;border-radius:6px}.calendar-page .calendar-cell{min-height:112px}.calendar-page .calendar-agenda{padding:18px}.calendar-page .calendar-agenda>header{padding-bottom:13px}.calendar-page .calendar-agenda h2{font-size:19px}.calendar-page .calendar-agenda-add{margin-top:12px;padding:9px 10px}.calendar-page .calendar-agenda-list{gap:9px;padding:12px 0}.calendar-page .calendar-agenda-item{grid-template-columns:3px 1fr;gap:9px;padding:11px;border-radius:12px}.calendar-page .agenda-content h3{margin:5px 0 3px;font-size:var(--font-md)}.calendar-page .agenda-content p{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-xs);line-height:1.4}.calendar-page .agenda-topline{align-items:center}.calendar-page .priority-badge{padding:3px 5px;font-size:var(--font-xs)}.calendar-page .agenda-actions{gap:5px;margin-top:8px}.calendar-page .agenda-actions button{min-height:34px;padding:7px 8px;font-size:var(--font-xs)}.calendar-page .calendar-upcoming{margin-top:3px;padding-top:14px}.calendar-page .calendar-upcoming-item{padding:7px 3px}.calendar-page .calendar-legend{padding-top:12px}.calendar-page .calendar-modal{width:min(480px,100%);padding:22px}.calendar-page .calendar-modal form{gap:13px}.calendar-page .calendar-form-field textarea{min-height:82px}.calendar-page .calendar-modal-actions{margin-top:2px}
@media(max-width:1180px){.calendar-page .calendar-workspace{grid-template-columns:1fr}.calendar-page .calendar-agenda{padding:20px}.calendar-page .calendar-agenda-item{padding:13px}.calendar-page .agenda-actions button{min-height:40px;padding:8px 10px;font-size:var(--font-xs)}}

/* Acciones del recordatorio en una sola fila */
.calendar-page .agenda-actions{display:grid;grid-template-columns:max-content max-content max-content minmax(38px,1fr);gap:4px;width:100%;flex-wrap:nowrap}.calendar-page .agenda-actions button,.calendar-page .agenda-actions .agenda-go-link{min-width:0;min-height:34px;padding:7px 6px;font-size:var(--font-xs);white-space:nowrap}.calendar-page .agenda-actions .agenda-go-link{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 4px 10px rgba(15,61,145,.18)}.calendar-page .agenda-actions .agenda-go-link:hover{background:var(--blue);border-color:var(--blue);color:#fff;transform:translateY(-1px)}
@media(max-width:1180px){.calendar-page .agenda-actions{grid-template-columns:max-content max-content max-content minmax(44px,1fr);gap:6px}.calendar-page .agenda-actions button,.calendar-page .agenda-actions .agenda-go-link{min-height:40px;padding:8px 9px;font-size:var(--font-xs)}}
@media(max-width:700px){.calendar-page .agenda-actions{grid-template-columns:max-content max-content max-content minmax(48px,1fr)}.calendar-page .agenda-actions button,.calendar-page .agenda-actions .agenda-go-link{min-height:44px;font-size:var(--font-xs)}}

/* Desplegables visuales del formulario de calendario */
.calendar-select-wrap{--select-accent:#2563eb;position:relative;min-height:45px;border:1px solid var(--line);border-radius:12px;background:linear-gradient(180deg,var(--surface) 0%,var(--surface-soft) 100%);display:flex;align-items:center;overflow:hidden;transition:border-color .2s,box-shadow .2s,transform .2s}.calendar-select-wrap:hover{border-color:color-mix(in srgb,var(--select-accent) 45%,var(--line));transform:translateY(-1px)}.calendar-select-wrap:focus-within{border-color:var(--select-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--select-accent) 14%,transparent);transform:none}.calendar-select-wrap .calendar-select-leading{width:38px;height:31px;margin-left:6px;border-radius:9px;background:color-mix(in srgb,var(--select-accent) 12%,transparent);color:var(--select-accent);display:grid;place-items:center;font-size:var(--font-md);pointer-events:none;transition:.2s}.calendar-select-wrap select{appearance:none;-webkit-appearance:none;width:100%;min-height:43px!important;padding:0 36px 0 10px!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;color:var(--text);font-size:var(--font-md)!important;font-weight:750;cursor:pointer;outline:0}.calendar-select-wrap select option{background:var(--surface);color:var(--text);font-weight:600}.calendar-select-chevron{position:absolute;right:12px;color:var(--select-accent);font-size:10px;pointer-events:none;transition:transform .2s}.calendar-select-wrap:focus-within .calendar-select-chevron{transform:rotate(180deg)}
.calendar-select-wrap[data-select="type"][data-value="delivery"]{--select-accent:#2563eb}.calendar-select-wrap[data-select="type"][data-value="meeting"]{--select-accent:#8b5cf6}.calendar-select-wrap[data-select="type"][data-value="review"]{--select-accent:#059669}.calendar-select-wrap[data-select="type"][data-value="deadline"]{--select-accent:#ea580c}.calendar-select-wrap[data-select="priority"][data-value="low"]{--select-accent:#64748b}.calendar-select-wrap[data-select="priority"][data-value="medium"]{--select-accent:#d97706}.calendar-select-wrap[data-select="priority"][data-value="high"]{--select-accent:#dc2626}
body.dark-mode .calendar-select-wrap{background:linear-gradient(180deg,var(--surface) 0%,rgba(255,255,255,.025) 100%)}

/* Acciones principales del calendario siempre en una fila */
.calendar-page .calendar-hero-actions{display:grid;grid-template-columns:repeat(2,max-content);gap:10px}.calendar-page .calendar-hero-actions .calendar-primary-btn,.calendar-page .calendar-hero-actions .calendar-secondary-btn{width:auto;justify-content:center}
@media(max-width:700px){.calendar-page .calendar-hero-actions{width:100%;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.calendar-page .calendar-hero-actions .calendar-primary-btn,.calendar-page .calendar-hero-actions .calendar-secondary-btn{width:100%;min-width:0;padding:12px 10px;font-size:var(--font-sm);grid-column:auto}}
@media(max-width:360px){.calendar-page .calendar-hero-actions .calendar-primary-btn,.calendar-page .calendar-hero-actions .calendar-secondary-btn{padding:11px 7px;font-size:var(--font-xs)}}

/* Menú desplegable personalizado */
.calendar-select-wrap.enhanced{overflow:visible}.calendar-select-wrap.enhanced>select{position:absolute!important;width:1px!important;height:1px!important;min-height:1px!important;opacity:0;pointer-events:none;padding:0!important}.calendar-select-trigger{flex:1;align-self:stretch;min-width:0;padding:0 38px 0 10px;background:transparent;color:var(--text);font:inherit;font-size:var(--font-md);font-weight:750;text-align:left;cursor:pointer}.calendar-select-wrap.is-open{z-index:25;border-color:var(--select-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--select-accent) 14%,transparent)}.calendar-select-wrap.is-open .calendar-select-chevron{transform:rotate(180deg)}.calendar-select-menu{position:absolute;z-index:30;top:calc(100% + 8px);left:0;width:100%;padding:7px;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:0 18px 42px rgba(15,23,42,.18);animation:calendarSelectIn .16s ease}.calendar-select-menu[hidden]{display:none}.calendar-select-option{--option-color:var(--blue);width:100%;min-height:39px;padding:8px 9px;border-radius:9px;background:transparent;color:var(--text);display:grid;grid-template-columns:10px 1fr 16px;align-items:center;gap:9px;text-align:left;font:inherit;font-size:var(--font-sm);font-weight:700;cursor:pointer;transition:background .15s,color .15s,transform .15s}.calendar-select-option:hover,.calendar-select-option:focus-visible{outline:0;background:color-mix(in srgb,var(--option-color) 10%,var(--surface));color:var(--option-color);transform:translateX(2px)}.calendar-select-option.selected{background:color-mix(in srgb,var(--option-color) 12%,var(--surface));color:var(--option-color)}.calendar-option-dot{width:8px;height:8px;border-radius:50%;background:var(--option-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--option-color) 12%,transparent)}.calendar-option-check{justify-self:end;opacity:0;color:var(--option-color);font-size:var(--font-xs)}.calendar-select-option.selected .calendar-option-check{opacity:1}.calendar-select-wrap[data-select="type"] .calendar-select-option[data-value="delivery"]{--option-color:#2563eb}.calendar-select-wrap[data-select="type"] .calendar-select-option[data-value="meeting"]{--option-color:#8b5cf6}.calendar-select-wrap[data-select="type"] .calendar-select-option[data-value="review"]{--option-color:#059669}.calendar-select-wrap[data-select="type"] .calendar-select-option[data-value="deadline"]{--option-color:#ea580c}.calendar-select-wrap[data-select="priority"] .calendar-select-option[data-value="low"]{--option-color:#64748b}.calendar-select-wrap[data-select="priority"] .calendar-select-option[data-value="medium"]{--option-color:#d97706}.calendar-select-wrap[data-select="priority"] .calendar-select-option[data-value="high"]{--option-color:#dc2626}@keyframes calendarSelectIn{from{opacity:0;transform:translateY(-5px) scale(.98)}to{opacity:1;transform:none}}
body.dark-mode .calendar-select-menu{box-shadow:0 20px 45px rgba(0,0,0,.4)}

/* Indicadores interactivos del calendario */
.calendar-stats article{padding:0;overflow:hidden}.calendar-stat-action{width:100%;min-height:78px;padding:17px 18px;border-radius:17px;background:transparent;color:var(--text);display:grid;grid-template-columns:44px 1fr 20px;align-items:center;gap:13px;text-align:left;cursor:pointer;transition:background .2s,transform .2s}.calendar-stat-action>div{min-width:0}.calendar-stat-arrow{justify-self:end;color:var(--muted);font-size:11px;opacity:.55;transition:transform .2s,color .2s,opacity .2s}.calendar-stat-action:hover{background:var(--surface-soft)}.calendar-stat-action:hover .calendar-stat-arrow{transform:translateX(3px);color:var(--blue);opacity:1}.calendar-stat-action:focus-visible{outline:3px solid rgba(37,99,235,.25);outline-offset:-3px}.calendar-stat-action.active{background:rgba(37,99,235,.07)}.calendar-stat-action.active .calendar-stat-arrow{color:var(--blue);opacity:1;transform:rotate(90deg)}.calendar-stats article:has(.calendar-stat-action.active){border-color:rgba(37,99,235,.4);box-shadow:0 10px 28px rgba(37,99,235,.1)}
.calendar-page .calendar-icon-btn[hidden]{display:none}
@media(max-width:700px){.calendar-stat-action{min-height:84px;grid-template-columns:44px 1fr 18px;padding:17px}}

/* Barra superior compacta y horizontal en móvil */
.topbar-action-label-short{display:none}
@media(max-width:760px){.topbar-right{display:grid;grid-template-columns:minmax(0,1fr) 46px 50px;align-items:center;gap:9px;flex-wrap:nowrap}.app-teacher-layout .topbar-right{grid-template-columns:46px 50px;justify-content:end}.topbar-right .topbar-action-btn{width:100%;min-width:0;padding:0 12px}.topbar-right .notification-icon{width:46px;height:46px}.topbar-right .user-avatar{width:50px;height:50px}.topbar-right .avatar-menu{width:50px}.topbar-right .avatar-dropdown{right:0}}
@media(max-width:420px){.topbar-right{grid-template-columns:minmax(0,1fr) 42px 44px;gap:7px}.app-teacher-layout .topbar-right{grid-template-columns:42px 44px}.topbar-right .notification-icon{width:42px;height:42px;border-radius:12px;font-size:18px}.topbar-right .user-avatar{width:44px;height:44px}.topbar-right .avatar-menu{width:44px}.topbar-right .topbar-action-btn{min-height:42px;padding:0 9px;font-size:var(--font-sm);gap:6px}.topbar-mode-pill{padding-inline:7px;gap:4px;font-size:var(--font-xs)}.mode-pill-badge{min-width:0;gap:4px}.mode-pill-text{min-width:0;overflow:hidden;text-overflow:ellipsis}}
@media(max-width:350px){.topbar-action-label{display:none}.topbar-action-label-short{display:inline}.topbar-right{grid-template-columns:minmax(0,1fr) 40px 42px;gap:5px}.app-teacher-layout .topbar-right{grid-template-columns:40px 42px}.topbar-right .notification-icon{width:40px;height:40px}.topbar-right .user-avatar,.topbar-right .avatar-menu{width:42px;height:42px}}
@media(max-width:330px){.main{padding:10px}.topbar{padding:14px;column-gap:10px;row-gap:14px}.topbar .welcome{min-width:0}.topbar-right{min-width:0}}

/* Header compartido: composición deliberada en dos niveles para móviles estrechos. */
@media(max-width:760px){
    .topbar{grid-template-columns:auto minmax(0,1fr);min-width:0;align-items:center}
    .topbar .welcome{min-width:0;overflow:hidden}
    .topbar .welcome h2{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .topbar-right{min-width:0;width:100%;grid-column:1/-1}
    .topbar-mode-toggle-form{min-width:0;width:100%}
    .topbar-mode-pill{box-sizing:border-box;width:100%;min-width:0;justify-content:center}
    .mode-pill-text{white-space:nowrap}
}
@media(max-width:360px){
    .topbar .welcome p{display:none}
    .topbar .welcome h2{font-size:20px}
}
@media(max-width:330px){
    .topbar-right{grid-template-columns:minmax(0,1fr) 38px 40px;gap:2px}
    .app-teacher-layout .topbar-right{grid-template-columns:38px 40px}
    .topbar-right .notification-icon{width:38px;height:38px;font-size:17px}
    .topbar-right .user-avatar,.topbar-right .avatar-menu{width:40px;height:40px}
    .topbar-mode-pill{gap:3px;padding-inline:4px;font-size:var(--font-xs)}
    .mode-pill-badge{gap:3px;min-width:0}
    .mode-pill-switch-icon{display:none}
}

/* Header Admin: dos filas compactas en móvil sin alterar Student/Teacher. */
@media(max-width:760px){
    .app-admin-layout .topbar{
        display:grid;
        grid-template-columns:auto minmax(0,1fr) auto auto;
        grid-template-areas:
            "hamburger welcome notifications avatar"
            "mode mode mode mode";
        align-items:center;
        column-gap:10px;
        row-gap:8px;
        padding:16px;
    }
    .app-admin-layout .topbar .hamburger-btn{grid-area:hamburger}
    .app-admin-layout .topbar .welcome{
        grid-area:welcome;
        align-self:center;
        min-width:0;
        width:auto;
    }
    .app-admin-layout .topbar .topbar-right{display:contents}
    .app-admin-layout .topbar .topbar-mode-toggle-form{
        grid-area:mode;
        width:max-content;
        max-width:100%;
        min-width:0;
    }
    .app-admin-layout .topbar .topbar-mode-pill{
        width:auto;
        max-width:100%;
    }
    .app-admin-layout .topbar .topbar-notifications{grid-area:notifications}
    .app-admin-layout .topbar .avatar-menu{
        grid-area:avatar;
        justify-self:end;
    }
}

/* Header Admin: en móviles pequeños el saludo ocupa una fila completa. */
@media(max-width:480px){
    .app-admin-layout .topbar{
        display:flex;
        flex-wrap:wrap;
        align-items:center;
        justify-content:flex-start;
        column-gap:8px;
        row-gap:8px;
        padding:14px;
    }
    .app-admin-layout .topbar .hamburger-btn{
        order:1;
        flex:0 0 auto;
    }
    .app-admin-layout .topbar .topbar-notifications{
        order:2;
        margin-left:auto;
    }
    .app-admin-layout .topbar .avatar-menu{order:3}
    .app-admin-layout .topbar .welcome{
        order:5;
        flex:0 0 100%;
        width:100%;
        overflow:visible;
    }
    .app-admin-layout .topbar .welcome h2{
        margin:0;
        overflow:visible;
        text-overflow:clip;
        white-space:normal;
        line-height:1.2;
    }
    .app-admin-layout .topbar .welcome p{
        display:block;
        margin:4px 0 0;
        overflow:visible;
        white-space:normal;
        line-height:1.35;
    }
    .app-admin-layout .topbar .topbar-mode-toggle-form{
        order:6;
        flex:0 0 100%;
        width:max-content;
        max-width:100%;
    }
}

/* Header Admin: tablet y móvil ancho en una sola fila compacta. */
@media(min-width:481px) and (max-width:767px){
    .app-admin-layout .topbar{
        display:flex;
        flex-wrap:nowrap;
        align-items:center;
        justify-content:flex-start;
        gap:12px;
        padding:14px 16px;
    }
    .app-admin-layout .topbar .hamburger-btn{flex:0 0 auto}
    .app-admin-layout .topbar .welcome{
        flex:1 1 auto;
        width:auto;
        min-width:0;
        overflow:visible;
    }
    .app-admin-layout .topbar .welcome h2{
        margin:0 0 4px;
        overflow:visible;
        text-overflow:clip;
        white-space:normal;
        line-height:1.2;
    }
    .app-admin-layout .topbar .welcome p{
        margin:0;
        overflow:visible;
        white-space:normal;
        line-height:1.35;
    }
    .app-admin-layout .topbar .topbar-right{
        display:flex;
        align-items:center;
        flex:0 0 auto;
        width:auto;
        min-width:0;
        gap:9px;
        grid-column:auto;
        grid-template-columns:none;
        flex-wrap:nowrap;
    }
    .app-admin-layout .topbar .topbar-right .topbar-action-btn{width:auto}
}

/* Productividad y seguimiento del calendario */
.calendar-progress-track{display:block;width:min(150px,100%);height:6px;margin-top:8px;border-radius:999px;background:var(--line);overflow:hidden}.calendar-progress-track>i{display:block;width:0;height:100%;border-radius:inherit;background:linear-gradient(90deg,#10b981,#22c55e);transition:width .35s ease}.calendar-list-tools[hidden]{display:none!important}.calendar-list-tools{display:flex;align-items:center;margin-left:auto}.calendar-sort-wrap{width:230px;min-height:40px}.calendar-sort-wrap .calendar-select-leading{height:28px}.calendar-priority-divider{width:1px;height:25px;margin:0 3px;background:var(--line);flex:0 0 auto}.calendar-priority-filter i{font-size:10px}.calendar-priority-filter[data-priority="high"].active{border-color:#ef4444;background:#fef2f2;color:#b91c1c}.calendar-priority-filter[data-priority="medium"].active{border-color:#f59e0b;background:#fffbeb;color:#b45309}.calendar-priority-filter[data-priority="low"].active{border-color:#64748b;background:#f8fafc;color:#475569}.agenda-badges{display:flex;align-items:center;justify-content:flex-end;gap:5px}.overdue-badge{padding:3px 6px;border-radius:6px;background:#fee2e2;color:#b91c1c;font-size:8px;font-weight:900;text-transform:uppercase;letter-spacing:.03em}.overdue-badge[hidden]{display:none!important}.calendar-agenda-item.is-overdue{border-color:rgba(239,68,68,.28)}.calendar-event-chip.overdue{box-shadow:inset 0 0 0 1px rgba(220,38,38,.35)}.calendar-event-chip.overdue::after{content:"";width:5px;height:5px;margin-left:3px;border-radius:50%;background:#dc2626;flex:0 0 auto}.calendar-week-event.overdue{border-color:rgba(220,38,38,.4)}.calendar-view-stage{touch-action:pan-y}
body.dark-mode .calendar-priority-filter[data-priority="high"].active{background:rgba(239,68,68,.14);color:#fca5a5}body.dark-mode .calendar-priority-filter[data-priority="medium"].active{background:rgba(245,158,11,.14);color:#fcd34d}body.dark-mode .calendar-priority-filter[data-priority="low"].active{background:rgba(100,116,139,.18);color:#cbd5e1}
@media(max-width:900px){.calendar-list-tools{width:100%;margin-left:0}.calendar-sort-wrap{width:100%}}
@media(max-width:700px){.calendar-progress-track{width:120px}.calendar-priority-divider{height:22px}.calendar-event-chip.overdue::after{display:none}}
.calendar-week-card.overdue{border-color:rgba(220,38,38,.55)}
.repository-file-action{display:flex;align-items:center;justify-content:flex-end;gap:6px}.repository-file-preview-action{min-height:32px;padding:0 10px;border:1px solid var(--line);border-radius:9px;background:var(--surface-soft);color:var(--primary);display:inline-flex;align-items:center;gap:6px;font-size:var(--font-xs);font-weight:800;cursor:pointer}.repository-file-preview-action:hover{border-color:#60a5fa;background:#eff6ff}

/* Sistema global de skeletons: todos los componentes async comparten esta
   geometría visual y una única animación canónica. */
:root{
    --skeleton-base:color-mix(in srgb,var(--surface-soft) 78%,var(--line));
    --skeleton-highlight:color-mix(in srgb,var(--surface-elevated) 86%,white);
    --skeleton-gradient:linear-gradient(105deg,var(--skeleton-base) 0%,var(--skeleton-base) 38%,var(--skeleton-highlight) 50%,var(--skeleton-base) 62%,var(--skeleton-base) 100%);
    --skeleton-radius:8px;
    --skeleton-speed:1.5s;
}
.skeleton,
.skeleton-block,
.skeleton-line,
.skeleton-title,
.skeleton-text,
.skeleton-pill,
.skeleton-avatar,
.skeleton-icon,
.skeleton-button-shape,
.skeleton-table-cell,
.skeleton-image,
.notification-skeleton,
.app-skeleton-block,
.is-media-loading{
    position:relative;
    overflow:hidden;
    background:var(--skeleton-gradient);
    background-size:220% 100%;
    animation:skeletonShimmer var(--skeleton-speed) ease-in-out infinite;
}
body:not(.auth-page):not(.login-page) :is(
    .project-skeleton-line,
    .project-skeleton-button,
    .project-skeleton-tabs span,
    .project-skeleton-content section,
    .project-skeleton-content aside,
    .tm-proposal-loading > span
) {
    position:relative;
    overflow:hidden;
    background:var(--skeleton-gradient);
    background-size:220% 100%;
    animation:skeletonShimmer var(--skeleton-speed) ease-in-out infinite;
}
.skeleton{display:block;min-height:12px;border-radius:var(--skeleton-radius)}
.skeleton-block{display:block;min-height:12px;border-radius:var(--skeleton-radius)}
.skeleton-line,.skeleton-title,.skeleton-text{display:block;min-height:12px;border-radius:var(--skeleton-radius)}
.skeleton-title{width:min(360px,72%);height:28px}
.skeleton-text{width:100%;height:13px}
.skeleton-text.short{width:42%}
.skeleton-text.medium{width:68%}
.skeleton-avatar{display:block;width:44px;height:44px;flex:0 0 auto;border-radius:50%}
.skeleton-icon{display:block;width:42px;height:42px;border-radius:12px}
.skeleton-button-shape{display:block;width:132px;height:42px;border-radius:11px}
.skeleton-card{background:var(--surface);border:1px solid var(--line);border-radius:18px}
.skeleton-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(100px,.7fr) 90px;align-items:center;gap:14px;min-height:60px;padding:12px;border-bottom:1px solid var(--line)}
.skeleton-table-cell{height:14px;border-radius:6px}
.skeleton-image{display:block;width:100%;min-height:180px;border-radius:14px}
.ed-viewer-loading-skeleton{display:grid;justify-items:center;gap:12px;min-width:min(360px,100%);padding:24px 20px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}
.ed-viewer-loading-skeleton .skeleton-title{width:min(250px,78%);height:22px}
.ed-viewer-loading-skeleton .skeleton-text{height:12px}
.ed-history-skeleton{display:block;width:34px;height:34px;border-radius:10px}
.is-media-loading{background:var(--skeleton-gradient)!important}
.is-media-loading>img{opacity:0;transition:opacity .16s ease}
.is-media-loading>img{min-height:inherit}
.app-skeleton{display:grid;gap:0;width:100%;border:1px solid var(--line);border-radius:14px;background:var(--surface);overflow:hidden}
.app-skeleton.is-leaving{opacity:0;transition:opacity 160ms ease}
.app-skeleton .skeleton-row:last-child{border-bottom:0}
.app-skeleton-table{border-radius:0}
.app-skeleton-cards{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;border:0;background:transparent;overflow:visible}
.app-skeleton-card{display:grid;align-content:start;gap:12px;min-height:260px;padding:18px;background:var(--surface);border:1px solid var(--line);border-radius:18px}
.app-skeleton-card .skeleton-title{width:76%;height:22px;margin-top:5px}
.skeleton-table-cell.medium{width:68%}
.skeleton-table-cell.short{width:42%}
@keyframes skeletonShimmer{from{background-position:100% 0}to{background-position:-100% 0}}
@media(prefers-reduced-motion:reduce){
    .skeleton,.skeleton-block,.skeleton-line,.skeleton-title,.skeleton-text,.skeleton-pill,.skeleton-avatar,.skeleton-icon,.skeleton-button-shape,.skeleton-table-cell,.skeleton-image,.notification-skeleton,.app-skeleton-block,.is-media-loading{animation:none}
    body:not(.auth-page):not(.login-page) :is(.project-skeleton-line,.project-skeleton-button,.project-skeleton-tabs span,.project-skeleton-content section,.project-skeleton-content aside,.tm-proposal-loading > span){animation:none}
    .app-skeleton.is-leaving{transition:none}
    .is-media-loading>img{transition:none}
}

/* Scrollbar global: colores compartidos para pagina, paneles y overlays.
   Los carruseles que ocultan intencionalmente su barra conservan su display. */
html:not(.auth-root):not(.login-root),
body:not(.auth-page):not(.login-page),
body:not(.auth-page):not(.login-page) * {
    scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track);
}

html:not(.auth-root):not(.login-root),
body:not(.auth-page):not(.login-page) {
    scrollbar-width:auto;
}

html:not(.auth-root):not(.login-root)::-webkit-scrollbar,
body:not(.auth-page):not(.login-page)::-webkit-scrollbar,
body:not(.auth-page):not(.login-page) *::-webkit-scrollbar {
    width:var(--scrollbar-size);
    height:var(--scrollbar-size);
    background:var(--scrollbar-track);
}

html:not(.auth-root):not(.login-root)::-webkit-scrollbar-track,
body:not(.auth-page):not(.login-page)::-webkit-scrollbar-track,
body:not(.auth-page):not(.login-page) *::-webkit-scrollbar-track {
    background:var(--scrollbar-track);
}

html:not(.auth-root):not(.login-root)::-webkit-scrollbar-thumb,
body:not(.auth-page):not(.login-page)::-webkit-scrollbar-thumb,
body:not(.auth-page):not(.login-page) *::-webkit-scrollbar-thumb {
    background:var(--scrollbar-thumb);
    border:2px solid var(--scrollbar-track);
    border-radius:999px;
    background-clip:padding-box;
}

html:not(.auth-root):not(.login-root)::-webkit-scrollbar-thumb:hover,
body:not(.auth-page):not(.login-page)::-webkit-scrollbar-thumb:hover,
body:not(.auth-page):not(.login-page) *::-webkit-scrollbar-thumb:hover {
    background:var(--scrollbar-thumb-hover);
}

html:not(.auth-root):not(.login-root)::-webkit-scrollbar-corner,
body:not(.auth-page):not(.login-page)::-webkit-scrollbar-corner,
body:not(.auth-page):not(.login-page) *::-webkit-scrollbar-corner {
    background:var(--scrollbar-corner);
}

/* La navegacion lateral conserva el desplazamiento, pero no muestra su barra.
   Las restricciones de ancho evitan que se convierta en un scroll horizontal. */
.sidebar,
.sidebar > div:first-child {
    max-width:100%;
    min-width:0;
    box-sizing:border-box;
    overflow-x:hidden;
    overflow-y:auto;
    scrollbar-width:none;
}
.sidebar > div:first-child {
    width:100%;
}
body:not(.auth-page):not(.login-page) .sidebar::-webkit-scrollbar,
body:not(.auth-page):not(.login-page) .sidebar > div:first-child::-webkit-scrollbar {
    display:none;
    width:0;
    height:0;
}
.sidebar :is(.logo-area,.menu,.menu-item,.sidebar-footer,.close-btn) {
    width:100%;
    max-width:100%;
    min-width:0;
    box-sizing:border-box;
}
.sidebar .menu-item {
    width:calc(100% - 5px);
    margin-inline-end:5px;
}
.sidebar .logo-area img {
    max-width:100%;
    height:auto;
    object-fit:contain;
}
.sidebar .logo-area :is(h1,p),
.sidebar .menu-item > span:last-child {
    max-width:100%;
    min-width:0;
    overflow-wrap:anywhere;
}
.sidebar .menu-item .menu-icon {
    flex:0 0 24px;
}

/* Selectores consistentes: el panel se monta fuera de cards y modales para evitar recortes. */
.custom-select{position:relative;display:inline-flex;min-width:0;flex:1}.custom-select-native{position:absolute!important;width:1px!important;height:1px!important;min-height:0!important;padding:0!important;opacity:0!important;pointer-events:none!important}.custom-select-trigger{display:flex;align-items:center;justify-content:space-between;gap:14px;width:100%;min-width:0;min-height:44px;padding:0 13px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft);color:var(--text);font:inherit;font-weight:650;text-align:left;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background .18s ease}.custom-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-select-trigger i{flex:0 0 auto;color:var(--muted);font-size:.72rem;transition:transform .18s ease,color .18s ease}.custom-select-trigger.is-placeholder{color:var(--muted);font-weight:550}.custom-select-trigger:hover{border-color:#7aa2f7;background:var(--surface)}.custom-select-trigger:focus-visible,.custom-select.is-open .custom-select-trigger{outline:0;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.14);background:var(--surface)}.custom-select.is-open .custom-select-trigger i{color:var(--blue);transform:rotate(180deg)}.custom-select-trigger:disabled{opacity:.55;cursor:not-allowed}.custom-select-panel{position:fixed;z-index:2200;display:grid;gap:3px;padding:6px;overflow:auto;border:1px solid var(--line);border-radius:13px;background:var(--surface);box-shadow:0 18px 48px rgba(15,23,42,.2);scrollbar-width:thin;animation:customSelectIn .14s ease-out}.custom-select-option{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:39px;padding:8px 10px;border:0;border-radius:9px;background:transparent;color:var(--text);font:inherit;font-size:var(--font-md);text-align:left;cursor:pointer}.custom-select-option span{overflow:hidden;text-overflow:ellipsis;white-space:normal}.custom-select-option i{visibility:hidden;color:var(--blue);font-size:.75rem}.custom-select-option:hover,.custom-select-option:focus-visible{outline:0;background:var(--surface-soft)}.custom-select-option[aria-selected=true]{background:rgba(37,99,235,.1);color:var(--blue);font-weight:750}.custom-select-option[aria-selected=true] i{visibility:visible}.custom-select-option:disabled{opacity:.45;cursor:not-allowed}@keyframes customSelectIn{from{opacity:0;transform:translateY(-4px) scale(.985)}to{opacity:1;transform:none}}@media(max-width:600px){.custom-select-panel{max-width:calc(100vw - 16px)}.custom-select-trigger{min-height:46px}}
.login-user-clear{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;margin-right:-6px;padding:0;border:0;border-radius:9px;background:transparent;color:var(--muted);cursor:pointer}.login-user-clear i{width:auto;color:inherit;pointer-events:none}.login-user-clear:hover{background:rgba(37,99,235,.1);color:var(--blue)}.login-user-clear:focus-visible{outline:3px solid rgba(37,99,235,.3);outline-offset:2px}.login-user-clear[hidden]{display:none}

/* Texto adaptable: no se parten palabras y los controles compactos terminan en puntos suspensivos. */
.app-shell :is(h1,h2,h3,h4,h5,h6,p,dt,dd,span,strong,small,label,a,button,th,td):not(:where(.ed-docx-render-wrapper *, .sw-docx-render-wrapper *)){
    word-break:normal;
    hyphens:none;
}
.app-shell :is(
    .custom-select-trigger > span,
    .notification-filter-trigger > span,
    .repository-dropdown-trigger > span,
    .detail-dropdown-trigger > span,
    .projects-dropdown-trigger > span,
    .ap-quick-trigger > span,
    .avatar-dropdown-identity strong,
    .avatar-dropdown-identity small
){
    min-width:0;
    max-width:100%;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}
.app-shell :is(
    .user-cell,
    .academic-cell,
    .project-card-tutor,
    .repository-file-name,
    .notification-copy,
    .workspace-heading,
    .detail-hero-main
) > :is(div,span){
    min-width:0;
}
.app-shell :is(
    .user-cell strong,
    .user-cell small,
    .academic-cell strong,
    .academic-cell small,
    .project-card-tutor strong,
    .project-card-tutor small,
    .repository-file-name strong
){
    display:block;
    max-width:100%;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}
.app-shell :is(.projects-card-title h2,.notification-copy h3){
    overflow-wrap:normal;
    word-break:normal;
}
.app-shell :is(
    .repository-explorer-header h2,
    .repository-preview-header h3,
    .support-material-additional-file .support-material-file-copy strong
){
    display:block;
    max-width:100%;
    overflow:hidden;
    overflow-wrap:normal;
    text-overflow:ellipsis;
    white-space:nowrap;
}
.app-shell input[type="search"],
.app-shell :is(.ap-filters,.users-filters) input[name="search"]{
    min-width:0;
    max-width:100%;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}

/* Escala tipográfica institucional para módulos que aún conservan texto en px. */
body.app-shell .projects-page :is(
    .projects-eyebrow,.projects-type,.projects-status,
    .projects-core dt,.projects-context dt
){font-size:var(--font-xs)}
body.app-shell .projects-page :is(
    .projects-filter-status,.projects-card-title p,
    .projects-core dd,.projects-context dd,.projects-progress>div,
    .projects-breadcrumb
){font-size:var(--font-sm)}
body.app-shell .projects-page .projects-card-title h2{font-size:var(--font-lg);line-height:1.3}
body.app-shell .projects-page :is(.projects-card footer a,.projects-empty a,.projects-empty button){font-size:var(--font-md)}

body.app-shell #repositoryContent :is(
    .repository-eyebrow,.repository-catalog-kicker,
    .repository-type,.repository-meta span
){font-size:var(--font-xs)}
body.app-shell #repositoryContent :is(
    .repository-page-header p,.reader-repository-head p,
    .repository-card>p
){font-size:var(--font-sm)}
body.app-shell #repositoryContent .repository-card h3{font-size:var(--font-lg);line-height:1.38}

body.app-shell.calendar-page :is(.calendar-kicker,.calendar-filter,.calendar-view-switcher button){font-size:var(--font-xs)}
body.app-shell.calendar-page :is(.calendar-hero p,.calendar-agenda-item p,.calendar-agenda-item time){font-size:var(--font-sm)}
body.app-shell.calendar-page :is(.calendar-agenda-item h3,.calendar-board h2){font-size:var(--font-lg)}

/* Selectores compactos del modal de calendario. */
.calendar-date-picker{width:252px;padding:11px;border-radius:14px}.calendar-date-picker header{margin-bottom:8px}.calendar-date-picker header button{width:30px;height:30px}.calendar-date-picker header strong{font-size:var(--font-sm)}.calendar-date-weekdays,.calendar-date-days{gap:3px}.calendar-date-weekdays span{font-size:var(--font-xs)}.calendar-date-days button{font-size:var(--font-xs);border-radius:7px}.calendar-date-picker footer{margin-top:8px;padding-top:7px}.calendar-date-picker footer button{font-size:var(--font-xs)}.calendar-time-picker{width:230px;padding:12px;border-radius:14px}.calendar-time-picker header{margin-bottom:9px}.calendar-time-picker header strong{font-size:var(--font-sm)}.calendar-time-picker header button{width:30px;height:30px}.calendar-time-inputs{display:grid;grid-template-columns:1fr 12px 1fr;align-items:end;gap:6px}.calendar-time-inputs label{display:grid;gap:5px;color:var(--muted);font-size:var(--font-xs);font-weight:800;text-transform:uppercase;letter-spacing:.03em}.calendar-time-inputs b{padding:0 0 10px;color:var(--muted);font-size:var(--font-lg);text-align:center}.calendar-time-inputs input{box-sizing:border-box;width:100%;min-height:38px;padding:7px 8px;border:1px solid var(--line);border-radius:9px;background:var(--surface-soft);color:var(--text);font:inherit;font-size:var(--font-md);font-weight:800;text-align:center}.calendar-time-inputs input:focus{outline:0;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12)}.calendar-time-picker>small{display:block;margin-top:8px;color:var(--muted);font-size:var(--font-xs)}.calendar-time-picker footer{margin-top:9px;padding-top:8px}.calendar-time-picker footer button:last-child{background:var(--primary);color:#fff}.calendar-time-picker footer button:last-child:hover{background:var(--blue)}@media(max-width:520px){.calendar-date-picker{width:min(252px,calc(100vw - 56px))}.calendar-time-picker{width:min(230px,calc(100vw - 56px))}}

/* Calendario móvil: patrón de una columna y modal estándar del sistema. */
@media(max-width:700px){
    .calendar-page .calendar-workspace{display:block;min-width:0}.calendar-page .calendar-board,.calendar-page .calendar-view-stage,.calendar-page .calendar-view-panel{min-width:0;min-height:0;height:auto}
    .calendar-page .calendar-board{padding:16px;border-radius:18px}.calendar-page .calendar-agenda{padding:18px 16px}.calendar-page .calendar-agenda>header{position:relative;margin:0;padding:0 0 13px;background:transparent}.calendar-page .agenda-content h3,.calendar-page .agenda-content p{overflow-wrap:anywhere;white-space:normal}.calendar-page .agenda-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.calendar-page .agenda-actions button,.calendar-page .agenda-actions .agenda-go-link{width:100%;min-height:44px;white-space:normal}
    .calendar-page .calendar-modal-overlay:not([hidden]){display:grid;place-items:center;padding:16px;overflow:hidden}.calendar-page .calendar-modal,.calendar-page .calendar-detail-modal,.calendar-page .calendar-confirm-modal{box-sizing:border-box;width:min(520px,100%);max-height:calc(100dvh - 32px);margin:0;overflow-y:auto;overscroll-behavior:contain}.calendar-page .calendar-modal{padding:18px;border-radius:20px}.calendar-page .calendar-modal>header{position:relative;margin:0 0 14px;padding:0;background:transparent}.calendar-page .calendar-modal form{gap:12px}.calendar-page .calendar-modal-actions{position:relative;margin:4px 0 0;padding:0;background:transparent;border:0}.calendar-page .calendar-modal-close{min-width:42px;min-height:42px}
    .calendar-page .calendar-date-picker,.calendar-page .calendar-time-picker{position:fixed;z-index:120;top:50%;left:50%;max-height:calc(100dvh - 32px);overflow-y:auto;transform:translate(-50%,-50%)}.calendar-page .calendar-date-picker{width:min(230px,calc(100vw - 32px));padding:8px}.calendar-page .calendar-date-picker header{grid-template-columns:28px 1fr 28px;gap:5px;margin-bottom:5px}.calendar-page .calendar-date-picker header button{width:28px;height:28px}.calendar-page .calendar-date-weekdays,.calendar-page .calendar-date-days{gap:2px}.calendar-page .calendar-date-weekdays{margin-bottom:2px}.calendar-page .calendar-date-weekdays span{padding:2px 0;font-size:var(--font-xs)}.calendar-page .calendar-date-days button{font-size:var(--font-xs);border-radius:6px}.calendar-page .calendar-date-picker footer{margin-top:5px;padding-top:5px}.calendar-page .calendar-time-picker{width:min(220px,calc(100vw - 32px));padding:10px}
    .calendar-page .calendar-filters{display:flex;flex-wrap:nowrap;justify-content:flex-start;width:100%;overflow-x:auto;overflow-y:hidden;padding-bottom:10px;white-space:nowrap}.calendar-page .calendar-filter{flex:0 0 auto;min-width:max-content;white-space:nowrap}
    .calendar-page .calendar-cell-events{display:flex;flex-direction:column;gap:2px}.calendar-page .calendar-event-chip{display:block;width:100%;max-width:100%;height:auto;min-height:18px;padding:3px 4px;border-left-width:2px;border-radius:4px;font-size:var(--font-xs);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:none}.calendar-page .calendar-week-view{min-height:0;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain}
}
@media(max-width:420px){.calendar-page .calendar-board{padding:12px}.calendar-page .calendar-modal-overlay{padding:12px}.calendar-page .calendar-modal{padding:14px}.calendar-page .calendar-modal h2{font-size:20px}.calendar-page .calendar-form-field textarea{min-height:60px}.calendar-page .calendar-cell{min-height:58px}.calendar-page .calendar-event-chip{min-height:16px;padding:2px 3px;font-size:var(--font-xs)}.calendar-page .calendar-view-switcher button{min-width:0;font-size:var(--font-xs)}.calendar-page .calendar-hero{padding:20px 16px;border-radius:19px}.calendar-page .calendar-stats{gap:10px}}
@media(max-height:540px) and (orientation:landscape){.calendar-page .calendar-modal-overlay{place-items:start;overflow-y:auto;padding:8px}.calendar-page .calendar-modal,.calendar-page .calendar-detail-modal,.calendar-page .calendar-confirm-modal{max-height:calc(100dvh - 16px)}}
.login-session-modal-overlay{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;padding:20px;background:rgba(15,23,42,.6);backdrop-filter:blur(4px)}.login-session-modal{width:min(440px,100%);box-sizing:border-box;padding:26px;border:1px solid var(--line);border-radius:20px;background:var(--surface);box-shadow:0 28px 72px rgba(15,23,42,.35)}.login-session-modal-icon{width:48px;height:48px;display:grid;place-items:center;border-radius:14px;background:rgba(37,99,235,.12);color:var(--blue);font-size:20px}.login-session-modal h2{margin:15px 0 8px;font-size:1.25rem}.login-session-modal p{margin:0;color:var(--muted);line-height:1.55}.login-session-modal small{display:block;margin-top:14px;color:var(--muted);font-weight:700}.login-session-modal-actions{display:grid;grid-template-columns:1fr 1.45fr;gap:10px;margin-top:24px}.login-session-modal-actions form{min-width:0}.login-session-modal-actions button{width:100%;min-height:44px;border-radius:10px;font:inherit;font-weight:800;cursor:pointer}.login-session-cancel{border:1px solid var(--line);background:var(--surface-soft);color:var(--text)}.login-session-confirm{border:1px solid var(--blue);background:var(--blue);color:#fff;display:inline-flex;align-items:center;justify-content:center;gap:8px}.login-session-confirm:disabled{opacity:.65;cursor:wait}@media(max-width:420px){.login-session-modal-overlay{padding:14px}.login-session-modal{padding:20px}.login-session-modal-actions{grid-template-columns:1fr}.login-session-modal-actions form:first-child{order:2}}

/* Normalización cromática del tema oscuro. Conserva la geometría y el contrato
   de los componentes; sólo separa superficies y refuerza estados legibles. */
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) .login-panel {
    border-color:var(--line);
    box-shadow:0 28px 65px rgba(0,0,0,.34);
}
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) .institution-brand img { background:var(--surface-elevated); }
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) .login-alert-success {
    background:rgba(16,185,129,.16);
    border-color:rgba(110,231,183,.34);
    color:#a7f3d0;
}
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) .login-alert-success i { color:var(--success); }
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) .login-alert:not(.login-alert-success) { color:#fca5a5; }
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) .input-wrap:focus-within { box-shadow:0 0 0 4px var(--focus-ring); }
:is(html.theme-dark:not(.auth-root),body.dark-mode:not(.auth-page)) :is(.logout-modal,.calendar-modal,.calendar-confirm-modal,.calendar-detail-modal,.login-session-modal,.custom-select-panel,.calendar-select-menu) {
    background:var(--surface-elevated);
    border-color:var(--line);
}
:is(html.theme-dark,body.dark-mode) :is(.custom-select-option:hover,.custom-select-option:focus-visible,.calendar-select-option:hover,.calendar-select-option:focus-visible) {
    background:color-mix(in srgb,var(--blue) 14%,var(--surface-elevated));
}
:is(html.theme-dark,body.dark-mode) :is(.custom-select-option[aria-selected=true],.calendar-select-option.selected) {
    background:color-mix(in srgb,var(--blue) 22%,var(--surface-elevated));
}
:is(html.theme-dark,body.dark-mode) .repository-preview-modal-dialog {
    background:var(--surface-elevated);
    border-color:var(--line);
}
:is(html.theme-dark,body.dark-mode) .repository-preview-modal-header { background:var(--surface-elevated); }
:is(html.theme-dark,body.dark-mode) .repository-preview-modal-body { background:var(--surface-soft); }
:is(html.theme-dark,body.dark-mode) :is(.calendar-modal-close,.repository-preview-modal-close) {
    background:var(--surface-soft);
    border-color:var(--line);
    color:var(--text);
}
:is(html.theme-dark,body.dark-mode) :is(.calendar-form-field input,.calendar-form-field select,.calendar-form-field textarea,.calendar-time-inputs input) {
    background:var(--surface-soft);
    border-color:var(--line);
    color:var(--text);
}
:is(html.theme-dark,body.dark-mode) .calendar-detail-project {
    background:color-mix(in srgb,var(--blue) 18%,var(--surface-elevated));
    border-color:color-mix(in srgb,var(--blue) 45%,var(--line));
}
:is(html.theme-dark,body.dark-mode) .calendar-detail-project strong { color:#bfdbfe; }
:is(html.theme-dark,body.dark-mode) .calendar-detail-project>i { background:var(--blue-soft); color:var(--blue); }

/* Notificaciones globales: Toastify las monta directamente en body y fuera del flujo. */
.toastify.app-notification {
    display: flex;
    align-items: center;
    width: min(390px, calc(100vw - 32px));
    max-width: min(390px, calc(100vw - 32px));
    box-sizing: border-box;
    padding: 12px 15px;
    border: 1px solid rgba(16, 185, 129, .3);
    border-radius: 13px;
    background: #ecfdf5;
    color: #047857;
    box-shadow: 0 16px 40px rgba(15, 23, 42, .18);
    font-size: var(--font-md);
    font-weight: 850;
    line-height: 1.4;
    overflow-wrap: anywhere;
    cursor: default;
    z-index: 2147483000;
}

.app-notification-content {
    display: flex;
    align-items: center;
    gap: 9px;
    min-width: 0;
    width: 100%;
}
.app-notification-content > i { flex: 0 0 auto; }
.app-notification-copy { min-width: 0; flex: 1; }
.app-notification-action {
    flex: 0 0 auto;
    min-height: 36px;
    padding: 6px 10px;
    border: 1px solid currentColor;
    border-radius: 8px;
    background: transparent;
    color: inherit;
    font: inherit;
    font-size: var(--font-xs);
    font-weight: 850;
    cursor: pointer;
}
.app-notification-action:hover { background: color-mix(in srgb, currentColor 10%, transparent); }
.app-notification-action:focus-visible { outline: 3px solid currentColor; outline-offset: 2px; }
.app-notification-action:disabled { opacity: .6; cursor: wait; }
.toastify.app-notification .toast-close {
    flex: 0 0 36px;
    width: 36px;
    min-height: 36px;
    margin: -4px -6px -4px 2px;
    padding: 0;
    border-radius: 8px;
    font-size: 20px;
    line-height: 1;
    opacity: .72;
}
.toastify.app-notification .toast-close:hover { background: color-mix(in srgb, currentColor 10%, transparent); opacity: 1; }
.toastify.app-notification .toast-close:focus-visible { outline: 3px solid currentColor; outline-offset: 1px; }
.toastify.app-notification-error { border-color: rgba(220, 38, 38, .3); background: #fef2f2; color: #b42318; }
.toastify.app-notification-warning { border-color: rgba(217, 119, 6, .32); background: #fffbeb; color: #b45309; }
.toastify.app-notification-info { border-color: rgba(37, 99, 235, .3); background: #eff6ff; color: #1d4ed8; }

:is(html.theme-dark, body.dark-mode) .toastify.app-notification-success { border-color: rgba(52, 211, 153, .3); background: #102d27; color: #6ee7b7; }
:is(html.theme-dark, body.dark-mode) .toastify.app-notification-error { border-color: rgba(251, 113, 133, .35); background: #3a2028; color: #fda4af; }
:is(html.theme-dark, body.dark-mode) .toastify.app-notification-warning { border-color: rgba(251, 191, 36, .35); background: #3a2d16; color: #fcd34d; }
:is(html.theme-dark, body.dark-mode) .toastify.app-notification-info { border-color: rgba(96, 165, 250, .35); background: #172a46; color: #93c5fd; }

@media (max-width: 600px) {
    .toastify.app-notification {
        right: max(14px, env(safe-area-inset-right)) !important;
        left: max(14px, env(safe-area-inset-left)) !important;
        width: auto;
        max-width: none;
    }
}

@media (prefers-reduced-motion: reduce) {
    .toastify.app-notification { transition: none; }
}
.calendar-page .calendar-list-date.is-today{color:var(--blue);font-weight:800}
