:root{
    --bg:#f4f7fb;
    --panel:#fff;
    --text:#182230;
    --muted:#6b7280;
    --border:#e5e7eb;
    --accent:#1f4d7a;
    --danger:#a72a2a
}

/* CampusVicenta V16: Mi día, pendientes y Agenda 2.0 */
.v16-page-head h2{margin:.2rem 0}.v16-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:0 0 16px}.v16-summary-grid .card{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;align-items:center;text-decoration:none;color:inherit;border-left:4px solid #4f8cff}.v16-summary-grid .card.warning{border-left-color:#f59e0b}.v16-summary-grid .card.danger{border-left-color:#dc2626}.v16-summary-grid span{font-size:1.6rem;grid-row:1/3}.v16-summary-grid strong{font-size:1.8rem;line-height:1}.v16-summary-grid small{color:var(--muted,#64748b)}
.v16-filters{display:flex;align-items:end;gap:12px;margin-bottom:16px}.v16-filters label{min-width:190px}.v16-pending-list{display:grid;gap:12px}.v16-pending-item{display:flex;align-items:center;gap:14px;border-left:4px solid #60a5fa}.v16-pending-item.warning{border-left-color:#f59e0b}.v16-pending-item.danger{border-left-color:#dc2626}.v16-pending-icon{font-size:1.65rem}.v16-pending-body{flex:1;min-width:0}.v16-pending-body h3,.v16-pending-body p{margin:.15rem 0}.v16-pending-body>small,.v16-pending-body time{display:block;font-size:.75rem;color:#64748b}.v16-count{background:#eef2ff;border-radius:999px;min-width:32px;padding:7px;text-align:center}
.v16-schedule-form{margin-bottom:18px}.v16-schedule-form>summary{cursor:pointer;display:flex;justify-content:space-between;gap:12px}.v16-schedule-form form{margin-top:18px}.v16-week-grid{display:grid;grid-template-columns:repeat(7,minmax(180px,1fr));gap:12px;overflow-x:auto;padding-bottom:8px}.v16-day-column{padding:14px}.v16-day-column.today{outline:2px solid #4f8cff}.v16-day-column>header{display:flex;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:10px;margin-bottom:10px}.v16-class-slot{display:flex;flex-direction:column;gap:3px;border-left:3px solid #22c55e;background:#f8fafc;border-radius:8px;padding:10px;margin:8px 0}.v16-class-slot time{font-size:.75rem;color:#166534}.v16-class-slot form{margin-top:4px}
.v16-agenda-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.v16-view-tabs,.v16-range-nav{display:flex;align-items:center;gap:6px}.v16-range-nav strong{min-width:160px;text-align:center}.v16-agenda-list{display:grid;gap:14px}.v16-agenda-day{padding:0;overflow:hidden}.v16-agenda-day>header{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:#f8fafc}.v16-agenda-day>header div{display:flex;gap:8px;align-items:baseline}.v16-agenda-day.today>header{background:#eff6ff;color:#1d4ed8}.v16-agenda-item{display:grid;grid-template-columns:32px 55px 1fr auto;align-items:center;gap:10px;padding:13px 18px;border-top:1px solid #e2e8f0;color:inherit;text-decoration:none}.v16-agenda-item:hover{background:#f8fafc}.v16-agenda-item div{display:flex;flex-direction:column}.v16-agenda-item small{color:#64748b}.v16-month-grid{display:grid;grid-template-columns:repeat(7,minmax(120px,1fr));gap:2px;background:#cbd5e1;border:1px solid #cbd5e1;border-radius:12px;overflow:auto}.v16-month-name{background:#f1f5f9;padding:10px;text-align:center;font-weight:700}.v16-month-cell{min-height:118px;background:#fff;padding:9px;display:flex;flex-direction:column;gap:5px;color:inherit;text-decoration:none}.v16-month-cell.today{box-shadow:inset 0 0 0 3px #4f8cff}.v16-month-cell.empty{background:#f8fafc}.v16-month-cell small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.72rem}.v16-month-cell em{font-size:.72rem;color:#64748b}
.v16-dashboard-pending{display:grid;gap:7px;margin-top:14px}.v16-dashboard-pending a{display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:8px;padding:10px 12px;border:1px solid #e2e8f0;border-radius:10px;text-decoration:none;color:inherit}.v16-dashboard-pending a.warning{border-left:4px solid #f59e0b}.v16-dashboard-pending a.danger{border-left:4px solid #dc2626}.v16-dashboard-pending a div{display:flex;flex-direction:column}.v16-dashboard-pending a small{color:#64748b}
@media(max-width:900px){.v16-summary-grid{grid-template-columns:1fr}.v16-filters,.v16-agenda-controls{align-items:stretch;flex-direction:column}.v16-filters label{min-width:0}.v16-week-grid{grid-template-columns:repeat(7,minmax(230px,1fr))}.v16-month-grid{grid-template-columns:repeat(7,minmax(105px,1fr))}.v16-pending-item{align-items:flex-start;flex-wrap:wrap}.v16-pending-item .btn{margin-left:46px}.v16-agenda-item{grid-template-columns:28px 50px 1fr}}

*{
    box-sizing:border-box
}
body{
    margin:0;
    font-family:Inter,system-ui,Arial,sans-serif;
    background:var(--bg);
    color:var(--text)
}
a{
    text-decoration:none;
    color:inherit
}
.app-shell{
    display:flex;
    min-height:100vh
}
.sidebar{
    width:250px;
    background:#14283d;
    color:#fff;
    padding:22px 16px;
    position:fixed;
    inset:0 auto 0 0
}
.brand{
    font-size:22px;
    font-weight:800;
    margin:4px 8px 28px
}
.sidebar nav{
    display:grid;
    gap:7px
}
.sidebar a{
    padding:11px 12px;
    border-radius:10px
}
.sidebar a:hover{
    background:#ffffff14
}
.main{
    margin-left:250px;
    width:calc(100% - 250px)
}
.topbar{
    height:72px;
    background:#fff;
    border-bottom:1px solid var(--border);
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:0 24px;
    position:sticky;
    top:0;
    z-index:5
}
.content{
    padding:26px
}
.muted{
    color:var(--muted);
    font-size:13px
}
.top-actions{
    display:flex;
    align-items:center;
    gap:12px
}
.chip{
    background:#eef4fb;
    border:1px solid #d7e4f1;
    padding:8px 10px;
    border-radius:999px;
    font-size:13px
}
.bell{
    font-size:16px
}
.grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
    gap:16px
}
.card{
    background:var(--panel);
    border:1px solid var(--border);
    border-radius:16px;
    padding:18px;
    box-shadow:0 4px 16px #00000008
}
.card h3{
    margin-top:0
}
.metric{
    font-size:30px;
    font-weight:800
}
.btn{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    padding:10px 14px;
    border-radius:10px;
    border:1px solid var(--border);
    background:#fff;
    cursor:pointer
}
.btn.primary{
    background:var(--accent);
    color:#fff;
    border-color:var(--accent)
}
.btn.danger{
    background:var(--danger);
    color:#fff
}
.form{
    max-width:760px;
    display:grid;
    gap:14px
}
.form label{
    display:grid;
    gap:6px;
    font-weight:600
}
.form input,.form select{
    padding:11px;
    border:1px solid var(--border);
    border-radius:10px;
    font:inherit
}
.alert{
    padding:12px 14px;
    border-radius:10px;
    margin:12px 0;
    background:#eef6ff;
    border:1px solid #cfe5ff
}
.alert.error{
    background:#fff1f1;
    border-color:#f4c5c5
}
.table-wrap{
    overflow:auto;
    background:#fff;
    border:1px solid var(--border);
    border-radius:14px
}
table{
    width:100%;
    border-collapse:collapse;
    min-width:800px
}
th,td{
    padding:12px 14px;
    border-bottom:1px solid var(--border);
    text-align:left
}
th{
    background:#f8fafc
}
.status{
    font-size:12px;
    padding:4px 8px;
    border-radius:99px;
    background:#e9f7ed
}
.hamb{
    display:none;
    background:transparent;
    border:0;
    font-size:24px
}
.timeout-modal{
    display:none;
    position:fixed;
    inset:0;
    background:#0007;
    align-items:center;
    justify-content:center;
    z-index:99
}
.timeout-modal.show{
    display:flex
}
.modal-card{
    background:#fff;
    border-radius:16px;
    padding:24px;
    max-width:460px;
    width:92%
}
.row{
    display:flex;
    gap:10px;
    flex-wrap:wrap
}
@media(max-width:850px){
    .sidebar{
        transform:translateX(-100%);
        transition:.2s;
        z-index:20
    }
    .sidebar.open{
        transform:none
    }
    .main{
        margin-left:0;
        width:100%
    }
    .hamb{
        display:block
    }
    .topbar{
        padding:0 14px
    }
    .content{
        padding:18px
    }
    
}

.toolbar{
    display:flex;
    justify-content:space-between;
    gap:12px;
    align-items:center;
    margin:0 0 16px
}
.search{
    min-width:min(460px,100%);
    padding:11px 13px;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff
}
.btn.small{
    padding:7px 9px;
    font-size:12px
}
.alert.success{
    background:#eef9f1;
    border-color:#cdebd5
}
.form-grid{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:14px
}
.span-2{
    grid-column:1/-1
}
.assignment-row,.inline-form{
    display:flex;
    gap:10px;
    flex-wrap:wrap;
    align-items:center;
    margin:8px 0
}
.assignment-row select,.inline-form select,.inline-form input{
    padding:10px;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff
}
.detail-head{
    display:flex;
    justify-content:space-between;
    gap:16px;
    align-items:flex-start
}
.detail-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
    gap:14px;
    margin:18px 0
}
.detail-grid>div{
    display:grid;
    gap:4px;
    padding:12px;
    background:#f8fafc;
    border-radius:10px
}
.tabs-placeholder{
    margin-top:18px;
    padding:14px;
    border:1px dashed var(--border);
    border-radius:12px;
    color:var(--muted)
}
.status.inactivo,.status.bloqueado{
    background:#feecec
}
.inline-form{
    margin:0
}
.inline-form>*{
    flex:1 1 140px
}
.inline-form .btn{
    flex:0 0 auto
}
@media(max-width:650px){
    .toolbar{
        align-items:stretch;
        flex-direction:column
    }
    .search{
        min-width:0;
        width:100%
    }
    .form-grid{
        grid-template-columns:1fr
    }
    .span-2{
        grid-column:auto
    }
    .detail-head{
        flex-direction:column
    }
    
}

textarea{
    padding:11px;
    border:1px solid var(--border);
    border-radius:10px;
    font:inherit;
    resize:vertical;
    min-height:110px
}
.bell-link{
    padding:7px 10px;
    border-radius:999px;
    background:#f8fafc;
    border:1px solid var(--border)
}
.badge{
    display:inline-flex;
    align-items:center;
    gap:5px;
    padding:4px 8px;
    border-radius:999px;
    font-size:12px;
    font-weight:700;
    background:#edf2f7
}
.badge.new{
    background:#e4efff;
    color:#164d89
}
.badge.draft{
    background:#fff5d9;
    color:#7a5500
}
.badge.published{
    background:#e9f7ed;
    color:#176333
}
.badge.programmed{
    background:#eef1ff;
    color:#343b82
}
.badge.hidden{
    background:#f3f4f6;
    color:#6b7280
}
.badge.danger{
    background:#feecec;
    color:#8e2222
}
.cards-list{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(270px,1fr));
    gap:16px
}
.material-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:16px;
    overflow:hidden;
    display:flex;
    flex-direction:column
}
.material-card .thumb{
    aspect-ratio:16/9;
    background:#eef3f8;
    display:flex;
    align-items:center;
    justify-content:center;
    font-size:42px;
    overflow:hidden
}
.material-card .thumb img{
    width:100%;
    height:100%;
    object-fit:cover
}
.material-card .body{
    padding:16px;
    display:grid;
    gap:9px
}
.material-card h3{
    margin:0
}
.material-card .actions{
    display:flex;
    gap:8px;
    flex-wrap:wrap;
    margin-top:auto
}
.filterbar{
    display:flex;
    gap:10px;
    flex-wrap:wrap;
    margin-bottom:16px
}
.filterbar .search,.filterbar select{
    min-width:180px;
    padding:10px 12px;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff
}
.preview-image{
    max-width:min(720px,100%);
    max-height:520px;
    border-radius:12px;
    border:1px solid var(--border)
}
.youtube-frame{
    width:min(900px,100%);
    aspect-ratio:16/9;
    border:0;
    border-radius:14px
}
.progress{
    height:9px;
    background:#edf1f5;
    border-radius:999px;
    overflow:hidden
}
.progress>span{
    display:block;
    height:100%;
    background:#5d7794
}
.stats-line{
    display:flex;
    gap:12px;
    flex-wrap:wrap
}
.stats-line span{
    padding:7px 9px;
    border-radius:9px;
    background:#f8fafc
}
.form-help{
    font-size:12px;
    color:var(--muted);
    font-weight:400
}
.checkbox-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
    gap:8px
}
.checkbox-item{
    display:flex!important;
    grid-template-columns:none!important;
    align-items:center;
    gap:8px!important;
    padding:9px 10px;
    border:1px solid var(--border);
    border-radius:10px;
    font-weight:500!important
}
.checkbox-item input{
    width:auto
}
.empty{
    padding:32px;
    text-align:center;
    color:var(--muted)
}
@media(max-width:650px){
    .cards-list{
        grid-template-columns:1fr
    }
    
}


.communication-message{
    padding:16px 0;
    line-height:1.6;
    white-space:normal
}
.thread{
    display:grid;
    gap:12px
}
.thread-msg{
    max-width:min(760px,92%);
    padding:14px 16px;
    border-radius:16px;
    border:1px solid var(--border);
    background:#fff;
    display:grid;
    gap:7px
}
.thread-msg.family{
    margin-left:auto;
    background:#eef6ff
}
.thread-msg.staff{
    margin-right:auto
}
.thread-msg small{
    color:var(--muted)
}


/* ===== CampusVicenta V5.1 - Navegación compacta y tema por rol ===== */
:root{
    --sidebar-bg:#14283d;
    --sidebar-bg-2:#102336;
    --sidebar-accent:#4f7599;
    --sidebar-text:#fff;
    --sidebar-soft:#ffffff16;
    --topbar-accent:#14283d
}

body.role-admin{
    --sidebar-bg:#a92f28;
    --sidebar-bg-2:#8f241f;
    --sidebar-accent:#e2574c;
    --topbar-accent:#b83a31
}

body.role-staff{
    --sidebar-bg:#177fa8;
    --sidebar-bg-2:#126b8e;
    --sidebar-accent:#52b8df;
    --topbar-accent:#1683ad
}

body.role-student{
    --sidebar-bg:#2e7d45;
    --sidebar-bg-2:#25693a;
    --sidebar-accent:#65b77c;
    --topbar-accent:#2e7d45
}

.sidebar{
    background:linear-gradient(180deg,var(--sidebar-bg),var(--sidebar-bg-2));
    padding:0;
    display:flex;
    flex-direction:column;
    height:100vh;
    overflow:hidden;
    box-shadow:4px 0 18px #00000012
}

.sidebar-head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:22px 20px 14px;
    flex:0 0 auto
}
.brand{
    margin:0;
    font-size:21px
}
.sidebar-close{
    display:none;
    border:0;
    background:transparent;
    color:#fff;
    font-size:28px;
    line-height:1;
    cursor:pointer
}
.sidebar-nav{
    display:flex!important;
    flex-direction:column;
    gap:4px!important;
    padding:4px 12px 18px;
    overflow-y:auto;
    overscroll-behavior:contain;
    scrollbar-width:thin;
    scrollbar-color:#ffffff45 transparent
}
.sidebar-nav::-webkit-scrollbar{
    width:6px
}
.sidebar-nav::-webkit-scrollbar-thumb{
    background:#ffffff45;
    border-radius:99px
}
.nav-link{
    display:flex;
    align-items:center;
    gap:10px;
    padding:9px 11px!important;
    border-radius:10px;
    color:#fff;
    transition:.15s
}
.nav-link:hover{
    background:var(--sidebar-soft)!important
}
.nav-link.active{
    background:#fff!important;
    color:var(--sidebar-bg);
    font-weight:800;
    box-shadow:0 4px 14px #0002
}
.nav-icon{
    width:20px;
    display:inline-flex;
    justify-content:center;
    flex:0 0 20px
}
.nav-group{
    border-radius:11px
}
.nav-group summary{
    list-style:none;
    display:flex;
    align-items:center;
    justify-content:space-between;
    padding:10px 11px;
    color:#ffffffbf;
    font-size:12px;
    font-weight:800;
    text-transform:uppercase;
    letter-spacing:.055em;
    cursor:pointer;
    border-radius:10px
}
.nav-group summary::-webkit-details-marker{
    display:none
}
.nav-group summary:hover{
    background:#ffffff0c;
    color:#fff
}
.nav-group .chevron{
    font-size:15px;
    transition:transform .18s
}
.nav-group[open] .chevron{
    transform:rotate(180deg)
}
.nav-group-items{
    display:grid;
    gap:3px;
    padding:2px 0 7px 5px
}
.sidebar-context{
    flex:0 0 auto;
    margin-top:auto;
    padding:14px 18px;
    border-top:1px solid #ffffff20;
    display:flex;
    gap:10px;
    align-items:center;
    background:#00000010
}
.sidebar-context .context-dot{
    width:9px;
    height:9px;
    background:#fff;
    border-radius:50%;
    box-shadow:0 0 0 4px #ffffff1c
}
.sidebar-context div{
    display:grid;
    min-width:0
}
.sidebar-context strong{
    font-size:12px;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap
}
.sidebar-context small{
    font-size:11px;
    color:#ffffffb5;
    margin-top:2px
}
.topbar{
    min-height:72px;
    height:auto;
    padding:10px 24px
}
.topbar-left{
    display:flex;
    align-items:center;
    gap:14px
}
.page-context{
    display:grid;
    gap:2px
}
.page-context>strong{
    font-size:14px
}
.user-menu{
    position:relative
}
.user-menu-trigger{
    border:0;
    background:transparent;
    display:flex;
    align-items:center;
    gap:9px;
    padding:5px 7px;
    border-radius:12px;
    cursor:pointer;
    color:var(--text)
}
.user-menu-trigger:hover,.user-menu.open .user-menu-trigger{
    background:#f3f6f9
}
.user-avatar{
    width:38px;
    height:38px;
    border-radius:50%;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    background:var(--topbar-accent);
    color:#fff;
    font-size:12px;
    font-weight:900;
    letter-spacing:.02em
}
.user-menu-text{
    display:grid;
    text-align:left;
    max-width:220px
}
.user-menu-text strong{
    font-size:13px;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis
}
.user-menu-text small{
    font-size:11px;
    color:var(--muted);
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis
}
.user-menu-caret{
    color:var(--muted);
    font-size:13px
}
.user-dropdown{
    display:none;
    position:absolute;
    right:0;
    top:calc(100% + 9px);
    width:270px;
    background:#fff;
    border:1px solid var(--border);
    border-radius:14px;
    box-shadow:0 18px 42px #0f172a24;
    padding:7px;
    z-index:50
}
.user-menu.open .user-dropdown{
    display:block
}
.user-dropdown-head{
    display:grid;
    gap:3px;
    padding:10px 11px 12px;
    border-bottom:1px solid var(--border);
    margin-bottom:5px
}
.user-dropdown-head strong{
    font-size:13px
}
.user-dropdown-head span{
    font-size:12px;
    color:var(--muted)
}
.user-dropdown>a{
    display:flex;
    align-items:center;
    gap:9px;
    padding:10px 11px;
    border-radius:9px;
    font-size:13px
}
.user-dropdown>a:hover{
    background:#f5f7fa
}
.user-dropdown .logout-link{
    color:#a72a2a;
    font-weight:700
}
.dropdown-separator{
    height:1px;
    background:var(--border);
    margin:5px 4px
}
.bell-link{
    min-width:42px;
    text-align:center
}
.sidebar-overlay{
    display:none
}

@media(max-width:850px){
    .sidebar{
        width:min(300px,86vw);
        z-index:40
    }
    .sidebar-close{
        display:block
    }
    .sidebar.open+.main{
        
    }
    .sidebar-overlay{
        position:fixed;
        inset:0;
        background:#0f172a73;
        z-index:30
    }
    .sidebar.open~.sidebar-overlay{
        display:block
    }
    .user-menu-text{
        display:none
    }
    .user-dropdown{
        position:fixed;
        right:12px;
        left:12px;
        top:72px;
        width:auto
    }
    .page-context .muted{
        display:none
    }
    .topbar{
        padding:9px 12px
    }
    .content{
        padding:18px
    }
    .sidebar-context{
        padding-bottom:max(14px,env(safe-area-inset-bottom))
    }
    
}

@media(max-width:430px){
    .page-context>strong{
        max-width:155px;
        white-space:nowrap;
        overflow:hidden;
        text-overflow:ellipsis
    }
    .top-actions{
        gap:5px
    }
    .bell-link{
        padding:7px 8px
    }
    
}


/* ===== CampusVicenta V5.2 - Dropdown robusto + tablas globalmente ordenables ===== */
details.user-menu{
    position:relative;
    margin:0;
    padding:0
}

details.user-menu>summary{
    list-style:none
}

details.user-menu>summary::-webkit-details-marker{
    display:none
}

details.user-menu[open] .user-menu-trigger{
    background:#f3f6f9
}

details.user-menu[open] .user-menu-caret{
    transform:rotate(180deg)
}

.user-menu-caret{
    transition:transform .16s ease
}

.user-dropdown{
    display:none
}

details.user-menu[open]>.user-dropdown{
    display:block
}


table thead th.sortable{
    cursor:pointer;
    user-select:none;
    position:relative;
    padding-right:28px!important;
    transition:background .12s ease
}

table thead th.sortable:hover{
    background:#f2f6fa
}

table thead th.sortable::after{
    content:'↕';
    position:absolute;
    right:9px;
    top:50%;
    transform:translateY(-50%);
    font-size:12px;
    color:#94a3b8;
    font-weight:700
}

table thead th.sortable.sorted-asc::after{
    content:'↑';
    color:var(--topbar-accent)
}

table thead th.sortable.sorted-desc::after{
    content:'↓';
    color:var(--topbar-accent)
}

table thead th.sortable.sorted-asc,table thead th.sortable.sorted-desc{
    background:#f2f6fa
}

table thead th.sortable:focus-visible{
    outline:2px solid var(--topbar-accent);
    outline-offset:-2px
}


/* CampusVicenta V6 - Calificaciones */
.grade-select{
    min-width:82px;
    padding:8px 10px;
    border:1px solid #d6dbe3;
    border-radius:8px;
    background:#fff;
    font-weight:700
}

.grade-select:disabled{
    background:#f3f4f6;
    color:#666
}

.academic-alert{
    border-left:4px solid currentColor;
    padding-left:12px
}


/* ===== CampusVicenta V6.3 - estados, diálogos y acciones ===== */
.access-badge{
    display:inline-flex;
    align-items:center;
    gap:6px;
    padding:5px 9px;
    border-radius:999px;
    font-size:12px;
    font-weight:800;
    white-space:nowrap
}

.access-badge::before{
    content:'';
    width:7px;
    height:7px;
    border-radius:50%;
    background:currentColor
}

.access-badge.access-active{
    background:#e9f7ed;
    color:#176333
}

.access-badge.access-disabled{
    background:#feecec;
    color:#8e2222
}

.student-state{
    display:inline-flex;
    padding:5px 9px;
    border-radius:999px;
    font-size:12px;
    font-weight:800;
    background:#eef2f7
}

.student-state.baja{
    background:#fff0e6;
    color:#914b15
}

.student-state.egresado{
    background:#e9f7ed;
    color:#176333
}

.student-state.pendientes{
    background:#fff5d9;
    color:#7a5500
}

.stat-grid{
    display:grid;
    grid-template-columns:repeat(4,minmax(150px,1fr));
    gap:12px;
    margin-bottom:16px
}

.stat-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:14px;
    padding:15px
}
.stat-card strong{
    display:block;
    font-size:25px;
    margin-top:4px
}
.stat-card span{
    font-size:12px;
    color:var(--muted)
}

.subnav{
    display:flex;
    gap:8px;
    flex-wrap:wrap;
    margin:0 0 16px
}
.subnav a{
    padding:8px 11px;
    border-radius:9px;
    border:1px solid var(--border);
    background:#fff;
    font-size:13px
}
.subnav a.active{
    background:var(--topbar-accent);
    border-color:var(--topbar-accent);
    color:#fff;
    font-weight:800
}

dialog.cv-dialog{
    border:0;
    border-radius:16px;
    padding:0;
    width:min(620px,calc(100% - 28px));
    box-shadow:0 24px 70px #0f172a55;
    color:var(--text)
}
dialog.cv-dialog::backdrop{
    background:#0f172a8c
}
.cv-dialog-card{
    padding:22px
}
.cv-dialog-card h3{
    margin-top:0
}
.dialog-actions{
    display:flex;
    gap:10px;
    justify-content:flex-end;
    flex-wrap:wrap;
    margin-top:18px
}
.danger-text{
    color:var(--danger)
}

.course-checklist{
    display:grid;
    gap:8px;
    max-height:360px;
    overflow:auto;
    padding:4px
}
.course-checklist .checkbox-item{
    background:#fff
}
.course-group-label{
    font-size:12px;
    text-transform:uppercase;
    letter-spacing:.04em;
    color:var(--muted);
    font-weight:800;
    margin:9px 0 2px
}

.actions-wrap{
    display:flex;
    gap:6px;
    flex-wrap:wrap;
    align-items:center
}

@media(max-width:850px){
    .stat-grid{
        grid-template-columns:repeat(2,minmax(0,1fr))
    }
    
}

@media(max-width:520px){
    .stat-grid{
        grid-template-columns:1fr 1fr
    }
    .stat-card{
        padding:12px
    }
    .stat-card strong{
        font-size:21px
    }
    .actions-wrap{
        min-width:220px
    }
    
}



/* ===== CampusVicenta V6.3.1 - simplificación de tablas ===== */
.contact-stack{
    display:grid;
    gap:3px;
    line-height:1.25;
    min-width:125px
}

.contact-stack span{
    display:block;
    overflow-wrap:anywhere
}


/* El estado de acceso es el propio control AJAX. */
button.access-badge{
    border:0;
    font:inherit
}

.access-toggle{
    cursor:pointer;
    transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease
}

.access-toggle:hover{
    transform:translateY(-1px);
    box-shadow:0 3px 10px #0f172a18
}

.access-toggle:focus-visible{
    outline:2px solid currentColor;
    outline-offset:2px
}

.access-toggle[aria-busy="true"]{
    opacity:.65;
    cursor:wait;
    transform:none
}


/* Paleta semántica global para botones de ACCIONES dentro de tablas. */
table .btn.info{
    background:#1686b7;
    color:#fff;
    border-color:#1686b7
}

table .btn.warning{
    background:#f59e0b;
    color:#fff;
    border-color:#f59e0b
}

table .btn.success{
    background:#29965f;
    color:#fff;
    border-color:#29965f
}

table .btn.danger{
    background:#c5332f;
    color:#fff;
    border-color:#c5332f
}

table .btn.info:hover{
    background:#11759f;
    border-color:#11759f
}

table .btn.warning:hover{
    background:#dd8c08;
    border-color:#dd8c08
}

table .btn.success:hover{
    background:#238553;
    border-color:#238553
}

table .btn.danger:hover{
    background:#ad2b28;
    border-color:#ad2b28
}

table .btn.info:focus-visible,table .btn.warning:focus-visible,table .btn.success:focus-visible,table .btn.danger:focus-visible{
    outline:2px solid #0f172a;
    outline-offset:2px
}


/* ===== CampusVicenta V6.4 - experiencia simple de Calificaciones ===== */
.calificaciones-hero{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:18px;
    margin-bottom:18px;
    background:linear-gradient(135deg,#fff,#f7faff)
}

.calificaciones-hero h2{
    margin:4px 0 6px;
    font-size:28px
}
.calificaciones-hero p{
    margin:0;
    color:var(--muted)
}

.level-choice-grid{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:18px
}

.level-choice-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:18px;
    padding:24px;
    display:grid;
    gap:9px;
    min-height:210px;
    box-shadow:0 6px 22px #0f172a0a;
    transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease
}

.level-choice-card:hover{
    transform:translateY(-3px);
    box-shadow:0 12px 28px #0f172a15;
    border-color:#c7d7e7
}
.level-choice-icon{
    font-size:44px
}
.level-choice-card strong{
    font-size:22px
}
.level-choice-card>span:not(.level-choice-icon){
    color:var(--muted);
    line-height:1.4
}
.level-choice-card em{
    font-style:normal;
    font-weight:800;
    color:var(--topbar-accent);
    margin-top:auto
}

.teacher-workspace-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(310px,1fr));
    gap:16px
}
.teacher-workspace-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:16px;
    padding:18px;
    display:grid;
    gap:15px
}
.teacher-workspace-card h3{
    margin:0
}
.workspace-head{
    display:flex;
    gap:12px;
    align-items:center
}
.workspace-icon{
    font-size:30px
}
.workspace-head>div{
    display:grid
}
.workspace-head strong{
    font-size:17px
}
.workspace-head span{
    font-size:12px;
    color:var(--muted)
}

.quick-action-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
    gap:14px
}
.quick-action-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:16px;
    padding:18px;
    display:grid;
    grid-template-columns:auto 1fr;
    column-gap:12px;
    row-gap:3px;
    align-items:center;
    transition:.14s
}
.quick-action-card:hover{
    transform:translateY(-2px);
    box-shadow:0 8px 22px #0f172a12
}
.quick-action-card>span{
    font-size:27px;
    grid-row:1/3
}
.quick-action-card strong{
    font-size:16px
}
.quick-action-card small{
    color:var(--muted);
    line-height:1.35
}

.btn:disabled{
    opacity:.5;
    cursor:not-allowed;
    transform:none!important
}

@media(max-width:900px){
    .level-choice-grid{
        grid-template-columns:1fr
    }
    .level-choice-card{
        min-height:auto
    }
    .calificaciones-hero h2{
        font-size:24px
    }
    
}


/* ===== CampusVicenta V6.4.2 - contadores de notificaciones en sidebar ===== */
.nav-link .nav-label{
    min-width:0;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap
}

.nav-notification-badge{
    
    margin-left:auto;
    
    min-width:23px;
    
    height:23px;
    
    padding:0 7px;
    
    border-radius:999px;
    
    display:inline-flex;
    
    align-items:center;
    
    justify-content:center;
    
    flex:0 0 auto;
    
    background:#dc2626;
    
    color:#fff;
    
    font-size:11px;
    
    line-height:1;
    
    font-weight:900;
    
    box-shadow:0 2px 7px #00000028;
    
}

.nav-link.active .nav-notification-badge{
    background:#dc2626;
    color:#fff
}


/* ===== CampusVicenta V7 - Asistencias ===== */
.attendance-value{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-width:42px;
    padding:6px 10px;
    border-radius:10px;
    background:#eef4fb;
    color:#173f66;
    font-weight:900
}

.badge.warning{
    background:#fff5d9;
    color:#7a5500
}
.badge.success{
    background:#e9f7ed;
    color:#176333
}
.badge.info{
    background:#e4efff;
    color:#164d89
}

#massAttendance input[type="checkbox"]{
    width:18px;
    height:18px;
    cursor:pointer
}
#massAttendance td select,#massAttendance td input[type="text"],#massAttendance td input:not([type]){
    padding:8px;
    border:1px solid var(--border);
    border-radius:8px;
    background:#fff
}

@media(max-width:650px){
    .attendance-value{
        min-width:36px;
        padding:5px 8px
    }
    
}


/* ===== CampusVicenta V8 - Matrícula, Vacantes e Inscripciones ===== */
.capacity-control{
    border:1px dashed var(--border);
    background:#fff;
    border-radius:8px;
    padding:6px 9px;
    font:inherit;
    font-weight:800;
    cursor:pointer;
    min-width:64px
}

.capacity-control:hover{
    border-color:var(--topbar-accent);
    background:#f8fafc
}

.badge.occupancy-success{
    background:#e9f7ed;
    color:#176333
}
.badge.occupancy-warning{
    background:#fff5d9;
    color:#7a5500
}
.badge.occupancy-danger{
    background:#feecec;
    color:#8e2222
}
.badge.occupancy-neutral{
    background:#f3f4f6;
    color:#6b7280
}

.row-attention>td{
    background:#fffaf0
}
.row-attention>td:first-child{
    box-shadow:inset 4px 0 0 #f59e0b
}

table select.continuity-status,table select.continuity-course{
    padding:8px 9px;
    border:1px solid var(--border);
    border-radius:9px;
    background:#fff;
    max-width:260px
}

.public-wrap .form{
    max-width:none
}

@media(max-width:650px){
    table select.continuity-course{
        max-width:190px
    }
    
}


/* ===== CampusVicenta V9 - Aranceles, Cobranzas y Bonificaciones ===== */
.billing-period-cell{
    min-width:86px;
    text-align:center;
    transition:background-color .18s ease,color .18s ease
}
.billing-period-cell small{
    display:block;
    margin-top:4px;
    color:var(--muted);
    font-size:10px;
    white-space:nowrap
}

.billing-state{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    border-radius:999px;
    padding:5px 8px;
    font-size:11px;
    font-weight:900;
    white-space:nowrap;
    background:#f3f4f6;
    color:#4b5563
}

.billing-state.paid,.billing-state.pagado{
    background:#e9f7ed;
    color:#176333
}
.billing-state.partial,.billing-state.parcial{
    background:#fff5d9;
    color:#7a5500
}
.billing-state.pending,.billing-state.pendiente{
    background:#f3f4f6;
    color:#4b5563
}
.billing-state.overdue{
    background:#feecec;
    color:#8e2222
}
.billing-state.bonus,.billing-state.bonificado{
    background:#e4efff;
    color:#164d89
}
.billing-state.exento{
    background:#e4efff;
    color:#164d89
}
.billing-state.anulado{
    background:#feecec;
    color:#8e2222
}

.billing-period-cell.is-paid{
    background:#138a2e !important;
    color:#fff !important
}
.billing-period-cell.is-paid strong{
    color:#fff;
    font-size:13px
}
.billing-period-cell.is-partial{
    background:#facc15 !important;
    color:#4b3900 !important
}
.billing-period-cell.is-partial strong,
.billing-period-cell.is-partial small{
    color:#4b3900 !important
}
.billing-period-cell.is-pending{
    background:#fff !important
}
.billing-period-cell.is-bonified{
    background:#dbeafe !important;
    color:#164d89 !important
}

.billing-information-card{
    margin:16px 0 20px;
    padding:18px;
    border:1px solid var(--border);
    border-radius:16px;
    background:#fff;
    box-shadow:var(--shadow)
}
.billing-information-head{
    display:flex;
    align-items:flex-start;
    justify-content:space-between;
    gap:16px;
    margin-bottom:14px
}
.billing-information-head h3{
    margin:0 0 4px
}
.billing-information-head p{
    margin:0;
    color:var(--muted)
}
.billing-information-table-wrap{
    margin:0
}
.billing-information-table{
    min-width:1080px
}
.billing-information-table th,
.billing-information-table td{
    text-align:center;
    vertical-align:middle;
    font-weight:800
}
.billing-information-table thead th:first-child,
.billing-information-table tbody th{
    min-width:190px;
    text-align:left
}
.billing-information-table tbody tr:not(.arrears)>th{
    background:#147d2b;
    color:#fff
}
.billing-information-table tbody tr.arrears>th{
    background:#d52f2f;
    color:#fff
}
.billing-information-table td.good{
    background:#138a2e;
    color:#fff
}
.billing-information-table td.warning{
    background:#facc15;
    color:#423400
}
.billing-information-table td.danger{
    background:#ef2d2d;
    color:#fff
}
.billing-information-note{
    margin:12px 0 0
}

@media(max-width:700px){
    .billing-information-card{
        padding:14px
    }
    .billing-information-head{
        align-items:flex-start;
        flex-direction:column
    }
}

.billing-two-col{
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:16px
}
.billing-value-input{
    width:94px;
    min-width:80px;
    padding:7px;
    border:1px solid var(--border);
    border-radius:8px;
    text-align:right
}
.billing-pct-input{
    width:100px;
    padding:7px;
    border:1px solid var(--border);
    border-radius:8px
}

@media(max-width:900px){
    .billing-two-col{
        grid-template-columns:1fr
    }
    .billing-value-input{
        width:88px
    }
    
}



/* ===== CampusVicenta V10 - Comunidad Vicenta ===== */
.community-hero{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:18px;
    margin-bottom:18px;
    background:linear-gradient(135deg,#fff,#f7fbf8)
}

.community-hero>div:first-child{
    display:flex;
    align-items:center;
    gap:15px
}
.community-hero-icon{
    font-size:42px
}
.community-hero h2{
    margin:0 0 4px
}
.community-hero p{
    margin:0;
    color:var(--muted);
    max-width:760px
}

.community-grid{
    display:grid;
    grid-template-columns:repeat(auto-fill,minmax(275px,1fr));
    gap:16px
}
.community-card{
    background:#fff;
    border:1px solid var(--border);
    border-radius:17px;
    overflow:hidden;
    display:flex;
    flex-direction:column;
    box-shadow:0 5px 18px #0f172a0a;
    transition:transform .15s ease,box-shadow .15s ease
}
.community-card:hover{
    transform:translateY(-2px);
    box-shadow:0 10px 26px #0f172a13
}
.community-image{
    height:180px;
    background:#eef3f8;
    overflow:hidden;
    display:flex;
    align-items:center;
    justify-content:center
}
.community-image img{
    width:100%;
    height:100%;
    object-fit:cover
}
.community-image-placeholder{
    font-size:56px;
    background:linear-gradient(135deg,#eef6f0,#f6f8fb)
}
.community-card-body{
    padding:16px;
    display:grid;
    gap:9px;
    height:100%
}
.community-card-body h3{
    margin:0;
    font-size:18px
}
.community-card-body p{
    margin:0;
    color:#475569;
    line-height:1.45
}
.community-card-body small{
    color:var(--muted)
}
.community-card-top{
    align-items:center
}
.community-actions{
    margin-top:auto;
    padding-top:5px
}

.community-detail{
    display:grid;
    grid-template-columns:minmax(0,2fr) minmax(270px,1fr);
    gap:16px
}
.community-detail-image{
    width:100%;
    max-height:520px;
    object-fit:contain;
    background:#f8fafc;
    border:1px solid var(--border);
    border-radius:13px;
    margin-bottom:16px
}
.community-description{
    line-height:1.65
}
.community-contact{
    align-self:start;
    position:sticky;
    top:90px
}
.community-contact-link{
    display:flex;
    align-items:center;
    gap:8px;
    padding:10px 11px;
    border:1px solid var(--border);
    border-radius:10px;
    margin:8px 0;
    background:#fff;
    overflow-wrap:anywhere
}
.community-contact-link:hover{
    background:#f8fafc;
    border-color:#cbd5e1
}

@media(max-width:850px){
    .community-hero{
        align-items:flex-start;
        flex-direction:column
    }
    .community-detail{
        grid-template-columns:1fr
    }
    .community-contact{
        position:static
    }
    .community-grid{
        grid-template-columns:repeat(auto-fill,minmax(235px,1fr))
    }
    
}

@media(max-width:520px){
    .community-grid{
        grid-template-columns:1fr
    }
    .community-image{
        height:190px
    }
    
}



/* ===== CampusVicenta V11 · Consolidación integral ===== */
.dashboard-hero{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
    margin-bottom:16px;
    background:linear-gradient(135deg,rgba(255,255,255,.98),rgba(248,250,252,.94))
}
.dashboard-hero h2{
    margin:3px 0 5px;
    font-size:28px
}
.eyebrow{
    font-size:12px;
    text-transform:uppercase;
    letter-spacing:.1em;
    font-weight:800;
    color:var(--muted)
}
.dashboard-stats{
    margin-bottom:16px
}
.dashboard-stat{
    text-decoration:none;
    color:inherit;
    transition:transform .15s ease,box-shadow .15s ease
}
.dashboard-stat:hover{
    transform:translateY(-2px);
    box-shadow:0 10px 26px rgba(15,23,42,.08)
}
.dashboard-stat.warning{
    border-left:4px solid #f59e0b
}
.dashboard-stat.danger{
    border-left:4px solid #dc2626
}
.dashboard-columns{
    display:grid;
    grid-template-columns:minmax(0,2fr) minmax(260px,1fr);
    gap:16px;
    margin-top:16px
}
.notification-compact{
    display:grid;
    gap:8px
}
.notification-compact a{
    display:grid;
    gap:3px;
    padding:10px 0;
    border-bottom:1px solid var(--border);
    text-decoration:none;
    color:inherit
}
.notification-compact a:last-child{
    border-bottom:0
}
.notification-compact span,.notification-compact small{
    color:var(--muted)
}
.priority-panel{
    margin-top:16px
}
.section-title{
    display:flex;
    align-items:flex-start;
    justify-content:space-between;
    gap:12px
}
.section-title h2,.section-title h3{
    margin-top:0
}
.priority-list{
    display:grid;
    gap:9px
}
.priority-item{
    display:grid;
    grid-template-columns:34px 1fr auto;
    align-items:center;
    gap:10px;
    border:1px solid var(--border);
    border-left:4px solid #f59e0b;
    border-radius:12px;
    padding:12px;
    text-decoration:none;
    color:inherit;
    background:#fff
}
.priority-item.danger{
    border-left-color:#dc2626
}
.priority-item small{
    display:block;
    color:var(--muted);
    margin-top:2px
}
.priority-item b{
    font-size:22px
}
.quick-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
    gap:12px
}
.contact-grid{
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
    gap:16px
}
.contact-card h3{
    margin-top:0
}
.contact-row{
    display:flex;
    justify-content:space-between;
    gap:16px;
    padding:10px 0;
    border-bottom:1px solid var(--border)
}
.contact-row:last-child{
    border-bottom:0
}
.contact-row span{
    color:var(--muted)
}
.audit-json{
    max-width:650px
}
.audit-json pre{
    white-space:pre-wrap;
    word-break:break-word;
    max-height:220px;
    overflow:auto;
    background:#f8fafc;
    padding:10px;
    border-radius:8px;
    font-size:11px
}
.ua-cell{
    max-width:280px;
    white-space:normal;
    word-break:break-word;
    font-size:12px
}
.permission-matrix{
    max-height:70vh
}
.permission-matrix thead th{
    position:sticky;
    top:0;
    z-index:2;
    background:#fff
}
.permission-cell{
    text-align:center
}
.toggle-line{
    display:grid!important;
    grid-template-columns:auto 1fr!important;
    align-items:start!important;
    gap:12px!important
}
.toggle-line input{
    margin-top:4px
}
.toggle-line small{
    display:block;
    color:var(--muted);
    margin-top:3px
}

@media(max-width:900px){
    .dashboard-columns{
        grid-template-columns:1fr
    }
    .dashboard-hero{
        align-items:flex-start;
        flex-direction:column
    }
    .contact-row{
        flex-direction:column;
        gap:3px
    }
    .permission-matrix{
        font-size:12px
    }
    
}



/* ===== CampusVicenta V11.3 · Rendimiento y tablas AJAX ===== */
.cv-remote-toolbar{
    display:flex;
    align-items:center;
    justify-content:space-between;
    flex-wrap:wrap;
    gap:12px;
    margin:12px 0;
}
.cv-remote-meta{
    display:flex;
    align-items:center;
    gap:10px;
    color:var(--muted);
    font-size:13px;
}
.cv-remote-meta select{
    width:auto;
    min-width:72px;
}
.cv-pagination{
    display:flex;
    justify-content:center;
    align-items:center;
    flex-wrap:wrap;
    gap:5px;
    padding:14px 4px 4px;
}
.cv-page-btn{
    min-width:36px;
    height:36px;
    padding:0 9px;
    border:1px solid var(--border);
    border-radius:8px;
    background:#fff;
    color:var(--text);
    cursor:pointer;
    font-weight:700;
}
.cv-page-btn:hover:not(:disabled){
    border-color:#94a3b8;
    background:#f8fafc;
}
.cv-page-btn.active{
    background:var(--accent);
    border-color:var(--accent);
    color:#fff;
    box-shadow:0 0 0 2px rgba(31,77,122,.10);
}
.cv-page-btn:disabled{
    opacity:.4;
    cursor:not-allowed;
}
.cv-page-dots{
    padding:0 3px;
    color:var(--muted);
}
.table-wrap.cv-remote-loading,
.cv-remote-loading{
    position:relative;
}
.table-wrap.cv-remote-loading::after,
.cv-remote-loading::after{
    content:'Cargando…';
    position:absolute;
    inset:0;
    display:flex;
    align-items:center;
    justify-content:center;
    min-height:90px;
    background:rgba(255,255,255,.76);
    color:var(--muted);
    font-weight:800;
    z-index:5;
    backdrop-filter:blur(1px);
}
table[data-server-table="1"] thead th[data-sort-key]{
    cursor:pointer;
    user-select:none;
}

@media(max-width:700px){
    .cv-remote-toolbar{
        align-items:stretch;
        flex-direction:column;
    }
    .cv-remote-meta{
        justify-content:space-between;
    }
}


/* ===== CampusVicenta V11.3.3 · Numeración global de tablas ===== */
.cv-row-number-header,
.cv-row-number-cell {
    width: 52px;
    min-width: 52px;
    max-width: 52px;
    text-align: center !important;
    white-space: nowrap;
}

.cv-row-number-header {
    color: var(--muted);
    font-variant-numeric: tabular-nums;
}

.cv-row-number-cell {
    color: var(--muted);
    font-size: 13px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

@media(max-width:700px) {
    .cv-row-number-header,
    .cv-row-number-cell {
        width: 42px;
        min-width: 42px;
        max-width: 42px;
    }
}


/* ============================================================
   CampusVicenta V14.3 · Dashboard Inteligente
   ============================================================ */

.dashboard-v143{
    display:grid;
    gap:20px;
}

.dashboard-widget-block{
    min-width:0;
}

div.dashboard-widget-block{
    display:grid;
    gap:20px;
}

.dashboard-welcome{
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:18px;
    padding:4px 2px 2px;
}

.dashboard-welcome h1{
    margin:4px 0 5px;
    font-size:clamp(26px,3vw,38px);
    line-height:1.05;
    letter-spacing:-.03em;
}

.dashboard-welcome p{
    margin:0;
    color:var(--muted);
    font-size:15px;
}

.dashboard-kicker,
.eyebrow{
    display:block;
    color:var(--muted);
    font-size:11px;
    font-weight:800;
    letter-spacing:.08em;
    text-transform:uppercase;
}

.dashboard-date{
    display:grid;
    text-align:right;
    gap:2px;
}

.dashboard-date strong{
    font-size:16px;
}

.dashboard-date span{
    color:var(--muted);
    font-size:13px;
}

.dashboard-quick-grid{
    display:grid;
    grid-template-columns:repeat(4,minmax(0,1fr));
    gap:14px;
}

.dashboard-quick-card{
    position:relative;
    min-height:142px;
    overflow:hidden;
    display:flex;
    flex-direction:column;
    border-radius:15px;
    color:#fff;
    box-shadow:0 8px 20px rgba(15,23,42,.10);
    transition:transform .16s ease,box-shadow .16s ease;
}

.dashboard-quick-card:hover{
    transform:translateY(-2px);
    box-shadow:0 12px 26px rgba(15,23,42,.15);
}

.dashboard-quick-icon{
    position:absolute;
    top:12px;
    right:15px;
    font-size:54px;
    opacity:.18;
    line-height:1;
    transform:rotate(-4deg);
}

.dashboard-quick-content{
    display:grid;
    gap:4px;
    padding:20px 18px 13px;
    min-height:100px;
    position:relative;
    z-index:1;
}

.dashboard-quick-content strong{
    font-size:22px;
    line-height:1.08;
}

.dashboard-quick-content span{
    font-size:13px;
    opacity:.93;
}

.dashboard-quick-more{
    margin-top:auto;
    text-align:center;
    padding:8px 12px;
    font-size:12px;
    font-weight:800;
    background:rgba(0,0,0,.12);
    position:relative;
    z-index:1;
}

.dashboard-quick-badge{
    position:absolute;
    top:10px;
    left:12px;
    min-width:25px;
    height:25px;
    padding:0 7px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:999px;
    background:#fff;
    color:#172033;
    font-size:11px;
    font-weight:900;
    z-index:3;
    box-shadow:0 3px 9px rgba(0,0,0,.15);
}

.dashboard-quick-card.tone-blue{background:linear-gradient(135deg,#2563eb,#1d4ed8)}
.dashboard-quick-card.tone-cyan{background:linear-gradient(135deg,#06b6d4,#0891b2)}
.dashboard-quick-card.tone-green{background:linear-gradient(135deg,#16a34a,#15803d)}
.dashboard-quick-card.tone-orange{background:linear-gradient(135deg,#f59e0b,#d97706)}
.dashboard-quick-card.tone-amber{background:linear-gradient(135deg,#eab308,#ca8a04)}
.dashboard-quick-card.tone-red{background:linear-gradient(135deg,#ef4444,#dc2626)}
.dashboard-quick-card.tone-purple{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}
.dashboard-quick-card.tone-slate{background:linear-gradient(135deg,#475569,#334155)}

.dashboard-main-grid{
    display:grid;
    grid-template-columns:minmax(0,2fr) minmax(300px,1fr);
    gap:18px;
    align-items:stretch;
}

.dashboard-feature,
.dashboard-agenda{
    min-width:0;
}

.dashboard-card-head{
    display:flex;
    align-items:flex-start;
    justify-content:space-between;
    gap:14px;
    margin-bottom:14px;
}

.dashboard-card-head h2,
.dashboard-card-head h3{
    margin:3px 0 0;
}

.dashboard-feature{
    padding:15px;
}

.dashboard-banner{
    overflow:hidden;
    border-radius:13px;
    background:#e8edf3;
    aspect-ratio:16/7;
}

.dashboard-banner img{
    width:100%;
    height:100%;
    display:block;
    object-fit:cover;
}

.dashboard-video{
    overflow:hidden;
    border-radius:13px;
    background:#111827;
    aspect-ratio:16/7;
}

.dashboard-video iframe{
    width:100%;
    height:100%;
    border:0;
    display:block;
}

.dashboard-feature-caption{
    margin:12px 3px 0;
    color:#475569;
    line-height:1.5;
}

.dashboard-empty-banner{
    min-height:280px;
    border-radius:13px;
    display:flex;
    align-items:center;
    justify-content:center;
    gap:18px;
    text-align:left;
    padding:28px;
    background:
        radial-gradient(circle at 85% 15%,rgba(31,77,122,.16),transparent 28%),
        linear-gradient(135deg,#edf4fb,#f8fafc);
    border:1px dashed #b9c9dc;
}

.dashboard-empty-banner strong,
.dashboard-empty-banner span{
    display:block;
}

.dashboard-empty-banner strong{
    font-size:24px;
}

.dashboard-empty-banner span{
    margin-top:5px;
    color:var(--muted);
    max-width:520px;
}

.dashboard-empty-icon{
    font-size:58px;
}

.dashboard-agenda{
    display:flex;
    flex-direction:column;
}

.dashboard-event-list{
    display:grid;
}

.dashboard-event{
    display:grid;
    grid-template-columns:54px 1fr;
    gap:12px;
    padding:12px 0;
    border-bottom:1px solid var(--border);
    color:inherit;
}

.dashboard-event:hover strong{
    color:var(--accent);
}

.dashboard-event-date{
    width:50px;
    height:58px;
    border-radius:12px;
    display:grid;
    align-content:center;
    text-align:center;
    background:#eef4fb;
    color:var(--accent);
}

.dashboard-event-date strong{
    font-size:21px;
    line-height:1;
}

.dashboard-event-date span{
    margin-top:3px;
    font-size:9px;
    font-weight:900;
    letter-spacing:.06em;
}

.dashboard-event-body{
    display:grid;
    align-content:center;
    gap:3px;
    min-width:0;
}

.dashboard-event-body strong{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}

.dashboard-event-body span,
.dashboard-event-body small{
    color:var(--muted);
    font-size:11px;
}

.dashboard-section-link{
    display:inline-flex;
    margin-top:auto;
    padding-top:13px;
    color:var(--accent);
    font-weight:800;
    font-size:13px;
}

.dashboard-section-heading{
    display:flex;
    justify-content:space-between;
    align-items:flex-end;
    gap:14px;
    margin-top:3px;
}

.dashboard-section-heading h2{
    margin:3px 0 0;
}

.dashboard-kpi-grid{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:14px;
}

.dashboard-kpi{
    position:relative;
    overflow:hidden;
    background:#fff;
    border:1px solid var(--border);
    border-left:4px solid var(--accent);
    border-radius:14px;
    padding:16px;
    box-shadow:0 4px 15px rgba(15,23,42,.05);
}

.dashboard-kpi > div{
    display:flex;
    align-items:center;
    gap:8px;
}

.dashboard-kpi > div > span{
    font-size:22px;
}

.dashboard-kpi small{
    color:var(--muted);
    font-weight:800;
}

.dashboard-kpi > strong{
    display:block;
    margin-top:10px;
    font-size:32px;
    letter-spacing:-.03em;
}

.dashboard-kpi p{
    margin:3px 0 0;
    color:var(--muted);
    font-size:12px;
}

.dashboard-kpi.warning{border-left-color:#f59e0b}
.dashboard-kpi.danger{border-left-color:#dc2626}

.dashboard-analytics-grid{
    display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:18px;
}

.dashboard-analytics-card{
    min-width:0;
}

.dashboard-bar-chart{
    height:220px;
    display:grid;
    grid-template-columns:repeat(7,minmax(0,1fr));
    align-items:end;
    gap:8px;
    padding:12px 2px 0;
}

.dashboard-bar-item{
    height:100%;
    min-width:0;
    display:grid;
    grid-template-rows:22px 1fr 22px;
    align-items:end;
    text-align:center;
}

.dashboard-bar-value{
    font-size:10px;
    font-weight:800;
    color:#475569;
}

.dashboard-bar-track{
    height:100%;
    width:min(32px,80%);
    margin:auto;
    display:flex;
    align-items:flex-end;
    overflow:hidden;
    border-radius:8px 8px 4px 4px;
    background:#eef2f7;
}

.dashboard-bar-fill{
    width:100%;
    min-height:4px;
    border-radius:8px 8px 4px 4px;
    background:linear-gradient(180deg,#3b82f6,#1d4ed8);
}

.dashboard-bar-item > span{
    font-size:10px;
    color:var(--muted);
}

.dashboard-progress-list{
    display:grid;
    gap:14px;
}

.dashboard-progress-row{
    display:grid;
    gap:6px;
}

.dashboard-progress-row > div:first-child{
    display:flex;
    justify-content:space-between;
    gap:10px;
    font-size:12px;
}

.dashboard-progress-row > div:first-child span{
    color:var(--muted);
}

.dashboard-progress-track{
    height:9px;
    overflow:hidden;
    border-radius:99px;
    background:#edf1f5;
}

.dashboard-progress-fill{
    height:100%;
    border-radius:99px;
    background:linear-gradient(90deg,#16a34a,#22c55e);
}

.dashboard-contract-total{
    display:grid;
    margin:12px 0 15px;
}

.dashboard-contract-total strong{
    font-size:34px;
}

.dashboard-contract-total span{
    color:var(--muted);
    font-size:12px;
}

.dashboard-stacked-progress{
    display:flex;
    height:13px;
    overflow:hidden;
    border-radius:99px;
    background:#e5e7eb;
}

.dashboard-stacked-progress span{
    display:block;
    height:100%;
}

.dashboard-stacked-progress .continua{background:#16a34a}
.dashboard-stacked-progress .libera{background:#ef4444}
.dashboard-stacked-progress .pendiente{background:#f59e0b}

.dashboard-contract-legend{
    display:grid;
    gap:9px;
    margin-top:15px;
}

.dashboard-contract-legend > div{
    display:grid;
    grid-template-columns:12px 1fr auto;
    align-items:center;
    gap:8px;
    font-size:12px;
}

.dashboard-contract-legend i{
    width:10px;
    height:10px;
    border-radius:50%;
}

.dashboard-contract-legend i.continua{background:#16a34a}
.dashboard-contract-legend i.libera{background:#ef4444}
.dashboard-contract-legend i.pendiente{background:#f59e0b}

.dashboard-lower-grid{
    display:grid;
    grid-template-columns:1.15fr .85fr;
    gap:18px;
}

.dashboard-notification-list{
    display:grid;
}

.dashboard-notification-list > a{
    display:grid;
    grid-template-columns:10px 1fr;
    gap:9px;
    padding:11px 0;
    border-bottom:1px solid var(--border);
}

.dashboard-notification-list > a:last-child{
    border-bottom:0;
}

.dashboard-notification-dot{
    width:8px;
    height:8px;
    margin-top:6px;
    border-radius:50%;
    background:#cbd5e1;
}

.dashboard-notification-list > a.unread .dashboard-notification-dot{
    background:#2563eb;
    box-shadow:0 0 0 4px rgba(37,99,235,.10);
}

.dashboard-notification-list strong{
    display:block;
    font-size:13px;
}

.dashboard-notification-list p{
    margin:3px 0;
    color:#475569;
    font-size:12px;
    line-height:1.45;
}

.dashboard-notification-list small{
    color:var(--muted);
    font-size:10px;
}

.dashboard-empty-state{
    min-height:135px;
    display:grid;
    place-items:center;
    align-content:center;
    text-align:center;
    color:var(--muted);
}

.dashboard-empty-state > span{
    font-size:34px;
}

.dashboard-empty-state p{
    margin:7px 0 0;
}

.dashboard-empty-state.success > span{
    color:#16a34a;
}

.agenda-page-list{
    display:grid;
    gap:12px;
}

.agenda-page-event{
    display:grid;
    grid-template-columns:76px 1fr;
    gap:17px;
    padding:15px;
}

.agenda-page-event.past{
    opacity:.65;
}

.agenda-page-date{
    min-height:88px;
    border-radius:13px;
    display:grid;
    place-items:center;
    align-content:center;
    background:#eef4fb;
    color:var(--accent);
}

.agenda-page-date strong{
    font-size:28px;
    line-height:1;
}

.agenda-page-date span{
    margin-top:4px;
    font-size:11px;
    font-weight:900;
}

.agenda-page-date small{
    margin-top:2px;
    font-size:10px;
}

.agenda-page-title-row{
    display:flex;
    justify-content:space-between;
    gap:14px;
}

.agenda-page-title-row h3{
    margin:0;
}

.agenda-page-title-row p{
    margin:5px 0 0;
    color:var(--muted);
    font-size:12px;
}

.agenda-page-body > p{
    line-height:1.55;
}

@media(max-width:1250px){
    .dashboard-quick-grid{
        grid-template-columns:repeat(2,minmax(0,1fr));
    }

    .dashboard-analytics-grid{
        grid-template-columns:repeat(2,minmax(0,1fr));
    }
}

@media(max-width:980px){
    .dashboard-main-grid,
    .dashboard-lower-grid{
        grid-template-columns:1fr;
    }

    .dashboard-kpi-grid{
        grid-template-columns:repeat(2,minmax(0,1fr));
    }
}

@media(max-width:700px){
    .dashboard-welcome{
        align-items:flex-start;
        flex-direction:column;
    }

    .dashboard-date{
        text-align:left;
    }

    .dashboard-quick-grid,
    .dashboard-kpi-grid,
    .dashboard-analytics-grid{
        grid-template-columns:1fr;
    }

    .dashboard-quick-card{
        min-height:126px;
    }

    .dashboard-feature,
    .dashboard-agenda{
        padding:13px;
    }

    .dashboard-card-head{
        flex-direction:column;
    }

    .dashboard-banner,
    .dashboard-video{
        aspect-ratio:16/9;
    }

    .dashboard-empty-banner{
        min-height:210px;
        flex-direction:column;
        text-align:center;
    }

    .agenda-page-event{
        grid-template-columns:58px 1fr;
        gap:11px;
    }

    .agenda-page-date{
        min-height:72px;
    }

    .agenda-page-title-row{
        flex-direction:column;
    }
}


/* ============================================================
   CampusVicenta V14.3.3 · Login moderno
   ============================================================ */

body.login-v1433{
    min-height:100vh;
    margin:0;
    background:#f4f7fb;
    color:#172033;
}

.login-v1433 *{
    box-sizing:border-box;
}

.login-page{
    min-height:100vh;
    display:grid;
    grid-template-columns:minmax(520px,1.08fr) minmax(440px,.92fr);
}

/* ------------------------------------------------------------
   Panel institucional
   ------------------------------------------------------------ */

.login-brand-panel{
    position:relative;
    overflow:hidden;
    min-height:100vh;
    padding:42px 54px 34px;
    display:flex;
    flex-direction:column;
    color:#fff;
    background:
        radial-gradient(circle at 82% 18%,rgba(78,177,218,.40),transparent 30%),
        radial-gradient(circle at 18% 78%,rgba(64,132,184,.30),transparent 35%),
        linear-gradient(145deg,#0d2944 0%,#123b60 47%,#17678b 100%);
}

.login-brand-panel::after{
    content:"";
    position:absolute;
    inset:0;
    pointer-events:none;
    background-image:
        linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
        linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);
    background-size:42px 42px;
    mask-image:linear-gradient(to bottom,rgba(0,0,0,.8),transparent 86%);
}

.login-decoration{
    position:absolute;
    border-radius:50%;
    border:1px solid rgba(255,255,255,.11);
    pointer-events:none;
}

.login-decoration-one{
    width:410px;
    height:410px;
    top:-180px;
    right:-120px;
}

.login-decoration-two{
    width:230px;
    height:230px;
    right:54px;
    bottom:108px;
}

.login-decoration-three{
    width:105px;
    height:105px;
    right:190px;
    bottom:248px;
    background:rgba(255,255,255,.035);
}

.login-brand-top,
.login-brand-content,
.login-brand-footer{
    position:relative;
    z-index:2;
}

.login-brand-top{
    display:flex;
    align-items:center;
    gap:13px;
}

.login-brand-mark{
    width:49px;
    height:49px;
    border-radius:15px;
    display:flex;
    align-items:center;
    justify-content:center;
    flex:0 0 auto;
    font-size:17px;
    font-weight:900;
    letter-spacing:-.04em;
    color:#123252;
    background:#fff;
    box-shadow:0 12px 32px rgba(0,0,0,.16);
}

.login-brand-top > div:last-child,
.login-mobile-brand > div:last-child{
    display:grid;
    gap:1px;
}

.login-brand-top strong{
    font-size:19px;
}

.login-brand-top span{
    color:rgba(255,255,255,.72);
    font-size:11px;
}

.login-brand-content{
    width:min(680px,100%);
    margin:auto 0;
    padding:70px 0 58px;
}

.login-brand-eyebrow{
    display:inline-flex;
    padding:7px 11px;
    margin-bottom:19px;
    border:1px solid rgba(255,255,255,.16);
    border-radius:999px;
    color:#d9eef9;
    background:rgba(255,255,255,.08);
    font-size:10px;
    font-weight:800;
    letter-spacing:.1em;
    text-transform:uppercase;
    backdrop-filter:blur(8px);
}

.login-brand-content h1{
    margin:0;
    font-size:clamp(46px,5vw,73px);
    line-height:.98;
    letter-spacing:-.055em;
    color:#fff;
}

.login-brand-content h1 span{
    color:#8ed8f4;
}

.login-brand-content > p{
    width:min(590px,100%);
    margin:24px 0 0;
    color:rgba(255,255,255,.77);
    font-size:16px;
    line-height:1.65;
}

.login-feature-grid{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:11px;
    margin-top:35px;
    width:min(590px,100%);
}

.login-feature-card{
    min-width:0;
    padding:13px 14px;
    display:grid;
    grid-template-columns:34px 1fr;
    align-items:center;
    gap:10px;
    border:1px solid rgba(255,255,255,.10);
    border-radius:13px;
    background:rgba(255,255,255,.07);
    box-shadow:inset 0 1px rgba(255,255,255,.04);
    backdrop-filter:blur(10px);
}

.login-feature-card > span{
    width:34px;
    height:34px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:9px;
    background:rgba(255,255,255,.10);
    font-size:17px;
}

.login-feature-card div{
    min-width:0;
}

.login-feature-card strong,
.login-feature-card small{
    display:block;
}

.login-feature-card strong{
    margin-bottom:2px;
    font-size:12px;
}

.login-feature-card small{
    overflow:hidden;
    color:rgba(255,255,255,.61);
    font-size:10px;
    text-overflow:ellipsis;
    white-space:nowrap;
}

.login-brand-footer{
    display:flex;
    align-items:center;
    gap:10px;
    color:rgba(255,255,255,.52);
    font-size:10px;
    font-weight:700;
    letter-spacing:.07em;
    text-transform:uppercase;
}

.login-brand-footer i{
    width:3px;
    height:3px;
    border-radius:50%;
    background:#8ed8f4;
}

/* ------------------------------------------------------------
   Panel formulario
   ------------------------------------------------------------ */

.login-form-panel{
    min-height:100vh;
    padding:44px 44px 32px;
    display:flex;
    align-items:center;
    justify-content:center;
    background:
        radial-gradient(circle at 100% 0%,rgba(37,99,235,.055),transparent 30%),
        #f8fafc;
}

.login-form-wrap{
    width:min(440px,100%);
}

.login-public-link{
    display:inline-flex;
    align-items:center;
    margin-bottom:54px;
    color:#64748b;
    font-size:12px;
    font-weight:700;
    transition:color .15s ease,transform .15s ease;
}

.login-public-link:hover{
    color:#1f4d7a;
    transform:translateX(-2px);
}

.login-mobile-brand{
    display:none;
}

.login-form-heading{
    margin-bottom:27px;
}

.login-form-kicker{
    display:block;
    margin-bottom:8px;
    color:#1f4d7a;
    font-size:10px;
    font-weight:900;
    letter-spacing:.1em;
    text-transform:uppercase;
}

.login-form-heading h2{
    margin:0;
    color:#152236;
    font-size:36px;
    line-height:1.1;
    letter-spacing:-.035em;
}

.login-form-heading p{
    margin:8px 0 0;
    color:#64748b;
    font-size:13px;
}

.login-alert{
    display:grid;
    grid-template-columns:34px 1fr;
    align-items:flex-start;
    gap:11px;
    margin-bottom:18px;
    padding:12px 13px;
    border-radius:12px;
    font-size:12px;
}

.login-alert > span{
    width:30px;
    height:30px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:9px;
    font-weight:900;
}

.login-alert strong{
    display:block;
    margin-bottom:2px;
}

.login-alert p{
    margin:0;
    line-height:1.45;
}

.login-alert.error{
    color:#8f1c1c;
    border:1px solid #f4c7c7;
    background:#fff1f1;
}

.login-alert.error > span{
    color:#fff;
    background:#c93737;
}

.login-alert.warning{
    color:#875a0a;
    border:1px solid #f1dba7;
    background:#fff9e9;
}

.login-alert.warning > span{
    background:#ffefbd;
}

.login-form{
    display:grid;
    gap:18px;
}

.login-field{
    display:grid;
    gap:7px;
}

.login-field > span{
    color:#26364c;
    font-size:12px;
    font-weight:800;
}

.login-field > small{
    color:#8290a3;
    font-size:10px;
}

.login-input-wrap{
    min-height:51px;
    display:flex;
    align-items:center;
    border:1px solid #dbe2ea;
    border-radius:12px;
    background:#fff;
    box-shadow:0 2px 5px rgba(15,23,42,.025);
    transition:border-color .15s ease,box-shadow .15s ease;
}

.login-input-wrap:focus-within{
    border-color:#4d8ec4;
    box-shadow:0 0 0 4px rgba(31,77,122,.09);
}

.login-input-icon{
    width:47px;
    flex:0 0 47px;
    display:flex;
    justify-content:center;
    opacity:.60;
    font-size:15px;
}

.login-input-wrap input{
    width:100%;
    min-width:0;
    height:49px;
    padding:0 8px 0 0;
    border:0;
    outline:0;
    color:#152236;
    background:transparent;
    font:inherit;
    font-size:13px;
}

.login-input-wrap input::placeholder{
    color:#a0acbb;
}

.login-password-toggle{
    width:43px;
    height:49px;
    flex:0 0 43px;
    border:0;
    outline:0;
    cursor:pointer;
    opacity:.60;
    background:transparent;
    border-radius:10px;
    transition:background .15s ease,opacity .15s ease;
}

.login-password-toggle:hover{
    opacity:1;
    background:#f3f6f9;
}

.login-submit{
    min-height:52px;
    margin-top:4px;
    padding:0 18px;
    border:0;
    border-radius:12px;
    display:flex;
    justify-content:space-between;
    align-items:center;
    cursor:pointer;
    color:#fff;
    background:linear-gradient(135deg,#1b527e,#16769a);
    box-shadow:0 11px 25px rgba(19,77,118,.18);
    font-weight:800;
    transition:transform .15s ease,box-shadow .15s ease;
}

.login-submit:hover{
    transform:translateY(-1px);
    box-shadow:0 14px 28px rgba(19,77,118,.23);
}

.login-submit:active{
    transform:translateY(0);
}

.login-submit b{
    font-size:18px;
}

.login-help{
    margin-top:28px;
    padding:13px;
    display:grid;
    grid-template-columns:34px 1fr;
    gap:11px;
    border:1px solid #e6ebf1;
    border-radius:12px;
    background:#fff;
}

.login-help-icon{
    width:32px;
    height:32px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:9px;
    color:#1f4d7a;
    background:#eaf2f9;
    font-weight:900;
}

.login-help strong{
    display:block;
    color:#26364c;
    font-size:11px;
}

.login-help p{
    margin:3px 0 0;
    color:#7a8799;
    font-size:10px;
    line-height:1.45;
}

.login-form-footer{
    margin-top:25px;
    padding-top:17px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
    border-top:1px solid #e9edf2;
    color:#96a1b0;
    font-size:9px;
}

.login-secure{
    white-space:nowrap;
}

/* ------------------------------------------------------------
   Responsive
   ------------------------------------------------------------ */

@media(max-width:1080px){
    .login-page{
        grid-template-columns:minmax(420px,.95fr) minmax(410px,1.05fr);
    }

    .login-brand-panel{
        padding:36px 39px 30px;
    }

    .login-brand-content h1{
        font-size:50px;
    }
}

@media(max-width:850px){
    .login-page{
        display:block;
        min-height:100vh;
    }

    .login-brand-panel{
        min-height:auto;
        padding:22px 24px 70px;
        border-radius:0 0 28px 28px;
    }

    .login-brand-top{
        justify-content:center;
    }

    .login-brand-content,
    .login-brand-footer{
        display:none;
    }

    .login-brand-panel .login-decoration{
        opacity:.55;
    }

    .login-form-panel{
        min-height:auto;
        margin-top:-38px;
        padding:0 20px 28px;
        align-items:flex-start;
        background:transparent;
        position:relative;
        z-index:4;
    }

    .login-form-wrap{
        width:min(500px,100%);
        padding:28px 24px 20px;
        border:1px solid #e2e8ef;
        border-radius:19px;
        background:#fff;
        box-shadow:0 16px 45px rgba(15,23,42,.11);
    }

    .login-public-link{
        margin-bottom:31px;
    }

    .login-form-heading h2{
        font-size:31px;
    }

    body.login-v1433{
        background:#f3f6fa;
    }
}

@media(max-width:520px){
    .login-brand-panel{
        padding:20px 18px 64px;
    }

    .login-brand-top .login-brand-mark{
        width:44px;
        height:44px;
        border-radius:13px;
    }

    .login-brand-top strong{
        font-size:17px;
    }

    .login-form-panel{
        padding:0 12px 18px;
    }

    .login-form-wrap{
        padding:24px 17px 18px;
        border-radius:17px;
    }

    .login-public-link{
        margin-bottom:27px;
    }

    .login-form-footer{
        align-items:flex-start;
        flex-direction:column;
    }
}

@media(prefers-reduced-motion:reduce){
    .login-public-link,
    .login-submit,
    .login-input-wrap,
    .login-password-toggle{
        transition:none;
    }
}

/* V17 · Aula Virtual 2.0 */
.aula-v17-head{align-items:flex-start;margin-bottom:18px}.aula-subject-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px}.aula-subject-card{display:grid;grid-template-columns:auto 1fr auto;gap:12px;text-decoration:none;color:inherit;transition:transform .18s ease,box-shadow .18s ease}.aula-subject-card:hover{transform:translateY(-2px);box-shadow:0 12px 30px rgba(15,23,42,.12)}.aula-subject-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#dbeafe,#ecfeff);font-size:24px}.aula-subject-copy h3{margin:2px 0 4px}.aula-subject-copy p{margin:0;color:var(--muted)}.aula-subject-counts{grid-column:1/-1;display:flex;gap:16px;padding-top:10px;border-top:1px solid var(--border);color:var(--muted);font-size:.9rem}.aula-subject-open{grid-column:1/-1;color:var(--primary);font-weight:700}.aula-tabs{position:sticky;top:8px;z-index:4;display:flex;gap:8px;overflow:auto;margin:0 0 16px;padding:8px;background:rgba(255,255,255,.94);border:1px solid var(--border);border-radius:14px;backdrop-filter:blur(8px)}.aula-tabs a{white-space:nowrap;text-decoration:none;color:inherit;padding:9px 12px;border-radius:9px}.aula-tabs a:hover{background:var(--surface-2)}.aula-section{scroll-margin-top:90px;margin-bottom:16px}.aula-section>h3{margin-top:0}.aula-item-list{display:grid;gap:4px}.aula-item{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 4px;border-bottom:1px solid var(--border)}.aula-item:last-child{border-bottom:0}.aula-item p{margin:5px 0}.aula-activity-detail,.aula-submit-card{margin-bottom:16px}.aula-delivery-list{display:grid;gap:14px}.aula-delivery .form{margin-top:16px}.prose{white-space:normal;line-height:1.65;margin-bottom:14px}
@media(max-width:700px){.aula-create-actions{width:100%;display:grid;grid-template-columns:1fr 1fr}.aula-create-actions .btn{justify-content:center}.aula-tabs{margin-inline:-8px}.aula-item{align-items:flex-start}.aula-subject-grid{grid-template-columns:1fr}}

/* ===== Vista previa segura de roles para ADMIN_GENERAL ===== */
.user-dropdown form{margin:0}
.user-dropdown form button{display:flex;align-items:center;gap:9px;width:100%;padding:10px 11px;border:0;border-radius:9px;background:transparent;color:#8d271f;font:inherit;font-size:13px;font-weight:800;text-align:left;cursor:pointer}
.user-dropdown form button:hover{background:#fff1f0}
.role-preview-banner{position:sticky;top:72px;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 24px;background:#fff7d6;border-bottom:1px solid #e8cf68;box-shadow:0 5px 14px #6b520012}
.role-preview-banner>div{display:grid;gap:2px}
.role-preview-banner strong{font-size:13px;color:#694f00}
.role-preview-banner span{font-size:12px;color:#7b650f}
.role-preview-banner form{margin:0}
.role-preview-banner .btn{background:#fff;border-color:#d7b93d;color:#654c00;font-weight:800}
.role-preview-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,380px);gap:22px;align-items:center;margin-bottom:16px}
.role-preview-intro h2{margin:10px 0 7px}
.role-preview-intro p{margin:0;color:var(--muted)}
.role-preview-readonly-note{display:grid;gap:5px;padding:14px;border:1px solid #d7b93d;border-radius:12px;background:#fffbea}
.role-preview-readonly-note strong{color:#694f00}
.role-preview-readonly-note span{font-size:13px;color:#7b650f}
.role-preview-role-tabs{margin-bottom:16px}
.cv-role-preview-active form[method="post"] button[type="submit"],
.cv-role-preview-active form[method="post"] button:not([type]){cursor:not-allowed}
.cv-role-preview-active form[data-role-preview-exit] button{cursor:pointer}

@media(max-width:850px){
    .role-preview-banner{top:72px;padding:10px 12px;align-items:flex-start}
    .role-preview-banner span{display:none}
    .role-preview-banner .btn{padding:8px 10px;font-size:12px}
    .role-preview-intro{grid-template-columns:1fr}
}

/* ===== Cuentas demo para familias ingresantes ===== */
.demo-mode-banner{position:sticky;top:72px;z-index:4;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 24px;background:#e8f6ff;border-bottom:1px solid #8bc8eb;box-shadow:0 5px 14px #16476512}
.role-preview-banner+.demo-mode-banner{top:124px}
.demo-mode-banner>div{display:grid;gap:2px}
.demo-mode-banner strong{font-size:13px;color:#0d4f75}
.demo-mode-banner span{font-size:12px;color:#36708f}
.demo-mode-banner .btn{background:#fff;border-color:#8bc8eb;color:#0d4f75;font-weight:800}
.demo-account-menu-note{padding:10px 11px;color:#0d4f75;font-size:13px;font-weight:800;line-height:1.45}
.demo-account-menu-note small{color:var(--muted);font-weight:600}
.cv-demo-active form[method="post"] button{cursor:not-allowed}
.demo-admin-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,380px);gap:22px;align-items:center;margin-bottom:16px}
.demo-admin-intro h2{margin:10px 0 7px}.demo-admin-intro p{margin:0;color:var(--muted)}
.demo-account-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:16px}
.demo-account-card{display:grid;gap:13px}.demo-account-icon{display:grid;place-items:center;width:52px;height:52px;border-radius:16px;background:#edf7ff;font-size:26px}
.demo-account-card h3{margin:3px 0 0}.demo-account-card dl{display:grid;gap:8px;margin:0}.demo-account-card dl div{display:flex;justify-content:space-between;gap:12px;padding-top:8px;border-top:1px solid var(--border)}
.demo-account-card dt{color:var(--muted);font-size:12px}.demo-account-card dd{margin:0;font-size:13px;font-weight:800;text-align:right}
.demo-reset-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,360px) auto;gap:18px;align-items:end}.demo-reset-form h3{margin:0 0 5px}.demo-reset-form p{margin:0}.demo-reset-form label{margin:0}
.demo-credentials-card{margin-bottom:16px;border-color:#89cda0;background:#f4fff7}.demo-credentials-card h3{margin-top:0}.demo-credentials-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.demo-credentials-grid>div{display:grid;gap:5px;padding:12px;border:1px solid #bce0c7;border-radius:11px;background:#fff}.demo-credentials-grid span{font-size:12px;color:var(--muted)}.demo-credentials-grid strong{color:#174b2a}.demo-credentials-grid code{font-size:12px;word-break:break-all}
.demo-showcase{display:grid;gap:16px}.demo-showcase-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px 24px;border-radius:18px;background:linear-gradient(135deg,#123252,#1a5a83);color:#fff}.demo-showcase-head h1{margin:4px 0;font-size:30px}.demo-showcase-head p{margin:0;color:#d9edf9}.demo-fiction-badge{padding:8px 11px;border:1px solid #ffffff66;border-radius:999px;background:#ffffff18;font-size:11px;font-weight:900;letter-spacing:.08em;white-space:nowrap}
.demo-section-tabs{display:flex;gap:7px;overflow-x:auto;padding:4px 2px 8px;scrollbar-width:thin}.demo-section-tabs a{flex:0 0 auto;padding:9px 12px;border:1px solid var(--border);border-radius:999px;background:#fff;color:var(--text);font-size:12px;font-weight:800;text-decoration:none}.demo-section-tabs a.active{background:#123252;border-color:#123252;color:#fff}
.demo-welcome{margin:0}.demo-quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.demo-quick-card{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--text);transition:transform .18s ease,box-shadow .18s ease}.demo-quick-card:hover{transform:translateY(-2px);box-shadow:0 12px 28px #183b5b18}.demo-quick-card>span{display:grid;place-items:center;width:43px;height:43px;border-radius:13px;background:#edf7ff;font-size:21px}.demo-quick-card>div{display:grid;gap:2px;min-width:0}.demo-quick-card small{color:var(--muted)}.demo-quick-card>b{margin-left:auto;color:#1a5a83}
.demo-two-columns{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(300px,.7fr);gap:16px}.demo-highlight-visual{display:grid;place-items:center;min-height:190px;margin:14px 0;border-radius:14px;background:linear-gradient(135deg,#dff5ff,#e9f7e8);font-size:70px}.demo-highlight h2{margin-bottom:5px}.demo-highlight p{margin:0;color:var(--muted);line-height:1.6}
.demo-list{display:grid}.demo-list>div{display:flex;gap:12px;padding:13px 0;border-top:1px solid var(--border)}.demo-list time{display:grid;place-items:center;align-self:start;min-width:52px;padding:8px;border-radius:10px;background:#edf7ff;color:#15547a;font-size:11px;font-weight:900}.demo-list p{display:grid;gap:3px;margin:0}.demo-list span{font-size:12px;color:var(--muted)}
.demo-section-intro{display:flex;align-items:center;justify-content:space-between;gap:18px}.demo-section-intro h2{margin:5px 0}.demo-section-intro p{margin:0;color:var(--muted);max-width:760px}.demo-big-icon{font-size:48px}.stat-value{font-size:46px;font-weight:900;color:#1a5a83}
.demo-content-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.demo-material-card{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.demo-material-card h3{margin:0}.demo-material-card p{margin:0 0 8px;color:var(--muted)}.demo-material-card .btn{margin-top:auto}.demo-material-icon{display:grid;place-items:center;width:100%;height:120px;border-radius:13px;background:#eef7fc;font-size:42px}
.demo-evaluation-list,.demo-document-list{display:grid;gap:12px}.demo-evaluation-list article,.demo-document-list article{display:flex;align-items:center;justify-content:space-between;gap:20px}.demo-evaluation-list h3,.demo-document-list h3{margin:7px 0 4px}.demo-evaluation-list p,.demo-document-list p{margin:0;color:var(--muted)}.demo-evaluation-list article>div:last-child{display:grid;justify-items:end;gap:10px;white-space:nowrap}
.demo-report-card{display:flex;flex-direction:column;align-items:flex-start}.demo-report-card h3{margin:12px 0 6px}.demo-report-card p{color:var(--muted);line-height:1.55}.demo-report-card .btn{margin-top:auto}
.demo-progress-list{display:grid;gap:15px}.demo-progress-list>div{display:grid;grid-template-columns:180px minmax(150px,1fr) 100px;gap:14px;align-items:center;font-size:13px}.demo-progress-list>div>div{height:9px;overflow:hidden;border-radius:999px;background:#e4edf3}.demo-progress-list i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#24a06b,#79c963)}.demo-progress-list strong{text-align:right;color:#28784f;font-size:12px}
.demo-timeline{display:grid;gap:10px}.demo-timeline>div{display:grid;grid-template-columns:70px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px;border-left:4px solid #67afd7;background:#f5faff;border-radius:0 10px 10px 0}
.demo-stat-grid{margin:0}.demo-messages-layout{display:grid;grid-template-columns:minmax(290px,.8fr) minmax(0,1.2fr);gap:16px}.demo-inbox{padding:12px}.demo-inbox h2{padding:0 8px}.demo-message{display:flex;gap:11px;padding:14px 10px;border-top:1px solid var(--border);border-radius:9px;color:var(--text);text-decoration:none}.demo-message:hover{background:#f5faff}.demo-message.unread{background:#edf7ff}.demo-message>div{display:grid;gap:4px}.demo-message small{color:var(--muted)}.demo-message-detail p{line-height:1.6}
.demo-post-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.demo-post-image{display:grid;place-items:center;height:200px;margin:-18px -18px 16px;border-radius:14px 14px 0 0;background:linear-gradient(135deg,#daf2df,#f2f8d6);font-size:68px}.demo-post-image.tone-blue{background:linear-gradient(135deg,#dcefff,#eee7ff)}.demo-post h3{margin:12px 0 5px}.demo-post p{color:var(--muted);line-height:1.55}.demo-post small{color:var(--muted)}
.demo-calendar-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.demo-calendar-event{display:flex;align-items:center;gap:16px}.demo-calendar-event time{display:grid;place-items:center;min-width:70px;min-height:70px;border-radius:14px;background:#123252;color:#fff}.demo-calendar-event time strong{font-size:24px;line-height:1}.demo-calendar-event time span{font-size:11px;font-weight:900}.demo-calendar-event h3{margin:6px 0}.demo-calendar-event p{margin:0;color:var(--muted)}
.demo-doc-icon{display:grid;place-items:center;flex:0 0 52px;width:52px;height:52px;border-radius:14px;background:#edf7ff;font-size:25px}.demo-document-list article>div{margin-right:auto}.demo-contact-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.demo-contact-grid article{display:flex;flex-direction:column;align-items:flex-start}.demo-contact-grid article>span{font-size:34px}.demo-contact-grid h3{margin:12px 0 5px}.demo-contact-grid p{color:var(--muted)}.demo-contact-grid small{margin-bottom:14px;color:var(--muted)}.demo-contact-grid .btn{margin-top:auto}
.demo-notification-list{display:grid}.demo-notification-list>a{display:flex;gap:14px;padding:15px 10px;border-top:1px solid var(--border);border-radius:9px;color:var(--text);text-decoration:none}.demo-notification-list>a.unread{background:#edf7ff}.demo-notification-list>a>span{font-size:23px}.demo-notification-list div{display:grid;gap:3px}.demo-notification-list p{margin:0;color:var(--muted)}.demo-notification-list small{color:var(--muted)}

@media(max-width:1000px){
    .demo-account-grid,.demo-content-grid,.demo-credentials-grid,.demo-quick-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
    .demo-reset-form{grid-template-columns:1fr 1fr}.demo-reset-form>button{grid-column:1/-1;justify-self:start}
}
@media(max-width:700px){
    .demo-mode-banner{top:64px;padding:9px 12px}.role-preview-banner+.demo-mode-banner{top:113px}.demo-mode-banner span{display:none}.demo-mode-banner .btn{padding:7px 9px;font-size:11px}
    .demo-admin-intro,.demo-account-grid,.demo-content-grid,.demo-credentials-grid,.demo-quick-grid,.demo-two-columns,.demo-messages-layout,.demo-post-grid,.demo-calendar-grid,.demo-contact-grid,.demo-reset-form{grid-template-columns:1fr}
    .demo-showcase-head{align-items:flex-start;padding:18px}.demo-showcase-head h1{font-size:24px}.demo-fiction-badge{font-size:9px}
    .demo-section-intro,.demo-evaluation-list article,.demo-document-list article{align-items:flex-start;flex-direction:column}.demo-evaluation-list article>div:last-child{justify-items:start}.demo-document-list article>div{margin:0}
    .demo-progress-list>div{grid-template-columns:1fr}.demo-progress-list strong{text-align:left}.demo-calendar-event{align-items:flex-start}.demo-reset-form>button{grid-column:auto}
}

/* ============================================================
   CampusVicenta V15.5-D · Experiencia de uso simplificada
   ============================================================ */

.top-search-btn{
    display:flex;
    align-items:center;
    gap:7px;
    border:1px solid var(--border);
    background:#fff;
    color:var(--text);
    border-radius:10px;
    min-height:38px;
    padding:0 12px;
    cursor:pointer;
    font:inherit;
}
.top-search-btn:hover{border-color:var(--accent);color:var(--accent)}
.top-search-btn b{font-size:13px}
.top-icon-btn{
    display:grid;
    place-items:center;
    width:38px;
    height:38px;
    padding:0;
    border:1px solid var(--border);
    border-radius:10px;
    background:#fff;
    color:var(--text);
    cursor:pointer;
}
.top-icon-btn:hover{border-color:var(--accent);color:var(--accent)}
.fullscreen-icon{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.fullscreen-compress{display:none}
.top-fullscreen-btn.is-fullscreen .fullscreen-expand{display:none}
.top-fullscreen-btn.is-fullscreen .fullscreen-compress{display:block}

.cv-global-search,
.cv-confirm-dialog{
    border:0;
    padding:0;
    background:transparent;
    width:min(680px,calc(100vw - 28px));
    max-width:none;
}
.cv-global-search::backdrop,
.cv-confirm-dialog::backdrop{background:rgba(15,23,42,.62);backdrop-filter:blur(3px)}
.cv-global-search-card,
.cv-confirm-card{
    background:#fff;
    border-radius:18px;
    box-shadow:0 24px 80px rgba(15,23,42,.3);
    padding:20px;
}
.cv-global-search-head{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:14px}
.cv-global-search-head strong{display:block;font-size:20px}
.cv-global-search-head small{display:block;color:var(--muted);margin-top:3px}
.cv-global-search-head button{border:0;background:#eef2f7;border-radius:50%;width:36px;height:36px;font-size:24px;cursor:pointer}
#globalSearchInput{width:100%;font-size:17px;padding:13px 15px;border:2px solid var(--border);border-radius:12px}
#globalSearchInput:focus{border-color:var(--accent);outline:0;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
.cv-global-search-results{display:grid;gap:7px;margin-top:12px;max-height:min(520px,60vh);overflow:auto}
.cv-global-search-results>a{display:grid;grid-template-columns:36px 1fr auto;align-items:center;gap:10px;padding:10px 12px;border-radius:11px;color:var(--text);text-decoration:none}
.cv-global-search-results>a:hover{background:#f1f5f9}
.cv-global-search-results>a>span{font-size:20px;text-align:center}
.cv-global-search-results strong,.cv-global-search-results small{display:block}
.cv-global-search-results small{color:var(--muted);margin-top:2px}

.cv-confirm-dialog{width:min(430px,calc(100vw - 28px))}
.cv-confirm-card{text-align:center;display:grid;justify-items:center;gap:11px}
.cv-confirm-card h3,.cv-confirm-card p{margin:0}
.cv-confirm-card p{color:var(--muted);line-height:1.5}
.cv-confirm-icon{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:#fee2e2;color:#b91c1c;font-size:28px;font-weight:900}
.cv-confirm-card .row{justify-content:center;margin-top:7px}

.cv-alert-dialog{border:0;padding:0;background:transparent;width:min(470px,calc(100vw - 28px));max-width:none;overflow:visible}
.cv-alert-dialog::backdrop{background:rgba(15,23,42,.62);backdrop-filter:blur(3px)}
.cv-alert-dialog[open]{animation:cv-alert-in .2s ease-out}
.cv-alert-card{display:grid;justify-items:center;gap:14px;padding:34px 30px 28px;background:#fff;border-radius:18px;box-shadow:0 26px 90px rgba(15,23,42,.35);text-align:center}
.cv-alert-card h3{margin:2px 0 0;font-size:25px;color:#1e293b}.cv-alert-card p{margin:0;max-width:380px;color:#64748b;line-height:1.55;font-size:15px;white-space:pre-line}.cv-alert-card .btn{min-width:108px;margin-top:7px;justify-content:center}
.cv-alert-symbol{position:relative;width:82px;height:82px;border:4px solid #bfdbfe;border-radius:50%;color:#2563eb}
.cv-alert-symbol span:before,.cv-alert-symbol span:after{content:'';position:absolute;display:block}
.cv-alert-dialog.success .cv-alert-symbol{border-color:#bbf7d0;color:#22c55e}.cv-alert-dialog.success .cv-alert-symbol span:before{content:'✓';inset:0;display:grid;place-items:center;font-size:52px;font-weight:400}.cv-alert-dialog.success .cv-alert-symbol span:after{display:none}
.cv-alert-dialog.error .cv-alert-symbol{border-color:#fecaca;color:#ef4444}.cv-alert-dialog.error .cv-alert-symbol span:before,.cv-alert-dialog.error .cv-alert-symbol span:after{left:20px;top:37px;width:38px;height:5px;border-radius:4px;background:currentColor}.cv-alert-dialog.error .cv-alert-symbol span:before{transform:rotate(45deg)}.cv-alert-dialog.error .cv-alert-symbol span:after{transform:rotate(-45deg)}
.cv-alert-dialog.warning .cv-alert-symbol{border-color:#fde68a;color:#f59e0b}.cv-alert-dialog.warning .cv-alert-symbol span:before{left:36px;top:17px;width:6px;height:34px;border-radius:4px;background:currentColor}.cv-alert-dialog.warning .cv-alert-symbol span:after{left:36px;top:58px;width:6px;height:6px;border-radius:50%;background:currentColor}
.cv-alert-dialog.info .cv-alert-symbol span:before{content:'i';inset:0;display:grid;place-items:center;font-size:48px;font-weight:800;font-family:Georgia,serif}
.cv-alert-dialog.success .btn{background:#22c55e;border-color:#22c55e}.cv-alert-dialog.error .btn{background:#ef4444;border-color:#ef4444}.cv-alert-dialog.warning .btn{background:#f59e0b;border-color:#f59e0b}
.cv-alert-modalized{display:none!important}
@keyframes cv-alert-in{from{opacity:0;transform:translateY(-12px) scale(.96)}to{opacity:1;transform:none}}

.cv-loading{position:fixed;inset:0;z-index:10040;background:rgba(248,250,252,.76);backdrop-filter:blur(2px);display:grid;place-content:center;justify-items:center;gap:12px}
.cv-loading[hidden]{display:none}
.cv-loading span{width:46px;height:46px;border:5px solid #dbeafe;border-top-color:var(--accent);border-radius:50%;animation:cv-spin .75s linear infinite}
.cv-loading strong{color:#334155}
@keyframes cv-spin{to{transform:rotate(360deg)}}

.cv-more-actions{position:relative;display:inline-block;margin-left:6px}
.cv-more-actions summary{list-style:none;cursor:pointer;border:1px solid var(--border);border-radius:8px;padding:7px 10px;background:#fff;font-size:12px;font-weight:800;white-space:nowrap}
.cv-more-actions summary::-webkit-details-marker{display:none}
.cv-more-actions>div{position:absolute;z-index:80;right:0;top:calc(100% + 5px);min-width:190px;display:grid;gap:5px;padding:8px;background:#fff;border:1px solid var(--border);border-radius:11px;box-shadow:0 14px 38px rgba(15,23,42,.2)}
.cv-more-actions:not([open])>div{display:none}
.cv-more-actions>div .btn,.cv-more-actions>div form{width:100%;margin:0}
.cv-more-actions>div .btn{display:block;text-align:left}
.cv-toolbar-more{margin-left:0}
.cv-toolbar-more summary{padding:10px 14px}

.actions-wrap{min-width:0!important;gap:5px;align-items:center;flex-wrap:wrap}
.actions-wrap form{display:inline-flex;margin:0}
.cv-icon-action{display:inline-grid!important;place-items:center;width:34px!important;height:34px!important;min-width:34px!important;padding:0!important;border-radius:7px!important;color:#fff!important;border:0!important;box-shadow:0 2px 5px rgba(15,23,42,.12)}
.cv-icon-action svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
.cv-icon-action.cv-action-view{background:#1685ba!important}.cv-icon-action.cv-action-edit{background:#f59e0b!important}.cv-icon-action.cv-action-delete{background:#dc3545!important}.cv-icon-action.cv-action-deactivate{background:#d97706!important}.cv-icon-action.cv-action-restore{background:#16a34a!important}.cv-icon-action.cv-action-complete{background:#0f9f6e!important}.cv-icon-action.cv-action-document{background:#6366f1!important}.cv-icon-action.cv-action-download{background:#475569!important}.cv-icon-action.cv-action-reply{background:#0ea5e9!important}
.cv-icon-action:hover{filter:brightness(.92);transform:translateY(-1px)}.cv-icon-action:focus-visible{outline:3px solid color-mix(in srgb,var(--accent) 28%,transparent);outline-offset:2px}

.cv-table-quick-search{position:sticky;left:0;display:flex;align-items:center;gap:8px;width:min(420px,100%);margin:0 0 12px;padding:0 11px;border:1px solid var(--border);border-radius:10px;background:#fff}
.cv-table-quick-search input{width:100%;border:0;outline:0;padding:10px 0;background:transparent;font:inherit}
.cv-table-quick-search button{border:0;background:transparent;color:var(--muted);font-size:19px;cursor:pointer}

.cv-config-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:18px;align-items:start}
.cv-config-preview{position:sticky;top:82px;padding:16px}
.cv-config-preview h3{margin:4px 0 14px}
.cv-preview-sidebar{overflow:hidden;border-radius:14px;background:linear-gradient(180deg,var(--sidebar-bg),var(--sidebar-bg-2));color:#fff;min-height:440px;padding:15px}
.cv-preview-brand{font-size:18px;font-weight:900;padding:6px 5px 15px;border-bottom:1px solid rgba(255,255,255,.18)}
.cv-config-preview section>small{display:block;margin:14px 4px 5px;color:inherit;opacity:.7;text-transform:uppercase;font-weight:800;font-size:9px;letter-spacing:.08em}
.cv-preview-items{display:grid;gap:6px}
.cv-preview-items span{display:block;padding:8px 9px;border-radius:8px;background:rgba(255,255,255,.1);font-size:11px;font-weight:700}
.cv-preview-screen{min-height:440px;border:1px solid var(--border);border-radius:14px;background:#f1f5f9;padding:12px}
.cv-preview-screen .cv-preview-welcome{background:#fff;border-radius:10px;padding:13px;font-weight:900;margin-bottom:10px}
.cv-preview-screen section>small{color:#64748b}
.cv-preview-screen .cv-preview-items{grid-template-columns:repeat(2,minmax(0,1fr))}
.cv-preview-screen .cv-preview-items span{background:#fff;color:#334155;box-shadow:0 2px 8px rgba(15,23,42,.07)}
.cv-preview-screen .cv-preview-items .kind-block{grid-column:1/-1;min-height:44px}
.cv-drag-cell{white-space:nowrap}
.cv-drag-handle,.cv-move-up,.cv-move-down{border:0;background:#eef2f7;color:#475569;border-radius:7px;min-width:30px;height:30px;cursor:pointer;font-weight:900}
.cv-drag-handle{cursor:grab;font-size:17px}.cv-drag-handle:active{cursor:grabbing}
[data-cv-sort-item].is-dragging{opacity:.4;background:#eff6ff}
.cv-config-table .cv-row-number-header,.cv-config-table .cv-row-number-cell{display:none}

.dashboard-my-day{padding:16px}
.dashboard-my-day-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.dashboard-my-day-grid>a,.dashboard-my-day-grid>div{display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:9px;padding:13px;border:1px solid var(--border);border-radius:12px;background:#f8fafc;color:var(--text);text-decoration:none}
.dashboard-my-day-grid span{font-size:22px}.dashboard-my-day-grid strong{font-size:25px}.dashboard-my-day-grid small{color:var(--muted)}
.dashboard-my-day-birthday{margin:0 0 13px;padding:10px 12px;border-radius:10px;background:#fff7ed;color:#9a3412;font-weight:800}

@media(max-width:1050px){
    .cv-config-layout{grid-template-columns:1fr}
    .cv-config-preview{position:static}
}

@media(max-width:700px){
    .top-search-btn b{display:none}
    .top-search-btn{padding:0;width:38px;justify-content:center}
    .cv-alert-card{padding:28px 20px 22px}.cv-alert-symbol{width:72px;height:72px;transform:scale(.9)}
    .dashboard-my-day-grid{grid-template-columns:1fr}
    .dashboard-my-day-grid>a,.dashboard-my-day-grid>div{grid-template-columns:34px 42px 1fr}
    .cv-drag-handle{display:none}
    .cv-config-table{min-width:720px}

    /* V17.7.6.4: ninguna columna se oculta. Todas quedan accesibles por scroll/drag horizontal. */

    .cv-more-actions>div{position:fixed;left:14px;right:14px;bottom:14px;top:auto;max-height:55vh;overflow:auto}
}


/* ============================================================
   CampusVicenta V14.3.4 · Cumpleaños animado de pantalla completa
   ============================================================ */

.birthday-celebration{
    position:fixed;
    inset:0;
    z-index:99999;
    overflow:hidden;
    pointer-events:none;
    opacity:0;
    transition:opacity .35s ease;
}

.birthday-celebration.is-active{
    opacity:1;
}

.birthday-celebration.is-leaving{
    opacity:0;
    transition-duration:1.4s;
}

.birthday-confetti-layer,
.birthday-balloon-layer,
.birthday-spark-layer,
.birthday-burst{
    position:absolute;
    inset:0;
    overflow:hidden;
    pointer-events:none;
}

.birthday-confetti{
    position:absolute;
    top:-25px;
    left:var(--x);
    width:var(--size);
    height:calc(var(--size) * .52);
    display:block;
    opacity:var(--opacity);
    background:var(--color);
    border-radius:2px;
    box-shadow:0 1px 2px rgba(0,0,0,.08);
    transform-origin:center;
    animation:
        cv-birthday-confetti-fall
        var(--duration)
        cubic-bezier(.15,.58,.36,.99)
        var(--delay)
        both;
}

.birthday-confetti-shape-1{
    width:calc(var(--size) * .58);
    height:var(--size);
    border-radius:50% 10% 50% 10%;
}

.birthday-confetti-shape-2{
    width:calc(var(--size) * .55);
    height:calc(var(--size) * .55);
    border-radius:50%;
}

.birthday-confetti-shape-3{
    height:calc(var(--size) * .24);
    border-radius:999px;
}

.birthday-confetti-shape-4{
    width:calc(var(--size) * .68);
    height:calc(var(--size) * .68);
    transform:rotate(45deg);
}

@keyframes cv-birthday-confetti-fall{
    0%{
        transform:
            translate3d(0,-6vh,0)
            rotate(0deg)
            scale(.9);
    }

    18%{
        transform:
            translate3d(calc(var(--drift) * .15),17vh,0)
            rotate(calc(var(--spin) * .2))
            scale(1.06);
    }

    48%{
        transform:
            translate3d(calc(var(--drift) * .65),52vh,0)
            rotate(calc(var(--spin) * .55))
            scale(.95);
    }

    100%{
        transform:
            translate3d(var(--drift),112vh,0)
            rotate(var(--spin))
            scale(.84);
    }
}

.birthday-confetti.is-burst{
    top:var(--start-y);
    left:50%;
    animation:
        cv-birthday-confetti-burst
        var(--duration)
        cubic-bezier(.16,.82,.34,1)
        var(--delay)
        both;
}

@keyframes cv-birthday-confetti-burst{
    0%{
        opacity:0;
        transform:
            translate3d(0,0,0)
            rotate(0)
            scale(.45);
    }

    8%{
        opacity:1;
    }

    48%{
        transform:
            translate3d(var(--burst-x),var(--burst-y),0)
            rotate(calc(var(--spin) * .45))
            scale(1.15);
    }

    100%{
        opacity:0;
        transform:
            translate3d(
                calc(var(--burst-x) * 1.45),
                70vh,
                0
            )
            rotate(var(--spin))
            scale(.65);
    }
}

/* Globos grandes subiendo desde abajo */
.birthday-balloon{
    position:absolute;
    left:var(--balloon-left);
    bottom:calc(var(--balloon-size) * -1.9);
    width:var(--balloon-size);
    height:calc(var(--balloon-size) * 1.18);
    opacity:0;
    animation:
        cv-birthday-balloon-rise
        var(--balloon-duration)
        cubic-bezier(.15,.55,.35,1)
        var(--balloon-delay)
        both;
}

.birthday-balloon > span{
    position:absolute;
    inset:0;
    border-radius:52% 48% 50% 50% / 44% 44% 56% 56%;
    background:
        radial-gradient(
            circle at 30% 23%,
            rgba(255,255,255,.72) 0 5%,
            rgba(255,255,255,.22) 6% 14%,
            transparent 15%
        ),
        var(--balloon-color);
    box-shadow:
        inset -8px -10px 16px rgba(0,0,0,.14),
        0 7px 16px rgba(15,23,42,.13);
}

.birthday-balloon > span::after{
    content:"";
    position:absolute;
    left:50%;
    bottom:-8px;
    width:0;
    height:0;
    border-left:7px solid transparent;
    border-right:7px solid transparent;
    border-top:11px solid var(--balloon-color);
    transform:translateX(-50%);
}

.birthday-balloon > i{
    position:absolute;
    left:50%;
    top:calc(100% + 8px);
    width:1px;
    height:calc(var(--balloon-size) * 1.35);
    background:rgba(70,79,92,.35);
    transform-origin:top;
}

@keyframes cv-birthday-balloon-rise{
    0%{
        opacity:0;
        transform:
            translate3d(-50%,0,0)
            rotate(var(--balloon-rotate));
    }

    8%{
        opacity:.95;
    }

    35%{
        transform:
            translate3d(
                calc(-50% + var(--balloon-sway)),
                -48vh,
                0
            )
            rotate(calc(var(--balloon-rotate) * -1));
    }

    67%{
        transform:
            translate3d(
                calc(-50% - var(--balloon-sway) * .45),
                -92vh,
                0
            )
            rotate(var(--balloon-rotate));
    }

    100%{
        opacity:.92;
        transform:
            translate3d(
                calc(-50% + var(--balloon-sway) * .2),
                -145vh,
                0
            )
            rotate(calc(var(--balloon-rotate) * -.65));
    }
}

/* Chispas radiales */
.birthday-spark{
    position:absolute;
    left:var(--spark-x);
    top:var(--spark-y);
    width:8px;
    height:8px;
    display:block;
    border-radius:50%;
    background:var(--spark-color);
    box-shadow:
        0 0 8px var(--spark-color),
        0 0 15px rgba(255,255,255,.55);
    animation:
        cv-birthday-spark
        1.35s
        cubic-bezier(.15,.76,.27,1)
        var(--spark-delay)
        both;
}

@keyframes cv-birthday-spark{
    0%{
        opacity:0;
        transform:translate3d(0,0,0) scale(.25);
    }

    12%{
        opacity:1;
    }

    100%{
        opacity:0;
        transform:
            translate3d(var(--spark-tx),var(--spark-ty),0)
            scale(.05);
    }
}

/* Destellos ambientales grandes */
.birthday-burst::before,
.birthday-burst::after{
    content:"";
    position:absolute;
    width:180px;
    height:180px;
    border-radius:50%;
    opacity:0;
    background:
        radial-gradient(
            circle,
            rgba(255,255,255,.75) 0 3%,
            rgba(255,204,0,.33) 4% 12%,
            transparent 45%
        );
    animation:cv-birthday-glow 1.4s ease-out .15s both;
}

.birthday-burst-left::before{
    left:4%;
    top:18%;
}

.birthday-burst-left::after{
    left:14%;
    bottom:18%;
    animation-delay:.55s;
}

.birthday-burst-right::before{
    right:5%;
    top:13%;
    animation-delay:.35s;
}

.birthday-burst-right::after{
    right:15%;
    bottom:15%;
    animation-delay:.75s;
}

@keyframes cv-birthday-glow{
    0%{
        opacity:0;
        transform:scale(.15);
    }

    30%{
        opacity:.95;
    }

    100%{
        opacity:0;
        transform:scale(2.5);
    }
}

@media(max-width:700px){
    .birthday-balloon{
        --balloon-size:72px;
    }

    .birthday-spark{
        width:6px;
        height:6px;
    }
}

@media(prefers-reduced-motion:reduce){
    .birthday-confetti,
    .birthday-balloon,
    .birthday-spark,
    .birthday-burst::before,
    .birthday-burst::after{
        animation-duration:5.5s !important;
        animation-iteration-count:1 !important;
    }
}


/* CampusVicenta V17.5 - Mis aranceles del alumno */
.billing-state.no-pagado{
    background:#feecec;
    color:#8e2222
}
.billing-state.sin-cargo{
    background:#f3f4f6;
    color:#6b7280
}
.student-billing-head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:18px
}
.student-billing-privacy{
    max-width:420px;
    padding:10px 12px;
    border-radius:12px;
    background:#eef7f0;
    color:#245c35;
    font-weight:700;
    font-size:13px
}
.student-billing-table td,.student-billing-table th{
    vertical-align:middle
}
@media (max-width:720px){
    .student-billing-head{align-items:flex-start;flex-direction:column}
    .student-billing-privacy{max-width:none;width:100%}
    .student-billing-table{min-width:880px}
}


/* ===== CampusVicenta V17.5.4 - Cobranzas: pendientes, reserva y desplazamiento horizontal ===== */
.billing-period-cell.is-pending{
    background:#facc15 !important;
    color:#4b3900 !important
}
.billing-period-cell.is-pending strong,
.billing-period-cell.is-pending small{
    color:#4b3900 !important
}
.billing-period-cell.is-not-applicable{
    background:#fde68a !important;
    color:#6b4f00 !important
}
.billing-period-cell.is-not-applicable strong{
    color:#6b4f00 !important;
    font-size:15px
}
.billing-state.no-aplica{
    background:#fde68a;
    color:#6b4f00
}

.billing-total-payment-card{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:18px;
    border:1px solid #b9d4ff;
    background:linear-gradient(135deg,#f8fbff,#eef6ff);
}
.billing-state.creada,.billing-state.pendiente{
    background:#fff5cc;
    color:#775b00;
}
.billing-state.aprobada{
    background:#dcfce7;
    color:#166534;
}
.billing-state.rechazada,.billing-state.cancelada,.billing-state.expirada,.billing-state.error,.billing-state.contracargo{
    background:#fee2e2;
    color:#991b1b;
}
.billing-state.revisar{
    background:#ffedd5;
    color:#9a3412;
}
.billing-state.reembolsada{
    background:#dbeafe;
    color:#1e40af;
}
@media(max-width:760px){
    .billing-total-payment-card{align-items:stretch;flex-direction:column}
    .billing-total-payment-card .btn{width:100%}
}
.main,.content{min-width:0}
.billing-family-table-wrap{
    width:100%;
    max-width:100%;
    overflow-x:auto !important;
    overflow-y:visible;
    -webkit-overflow-scrolling:touch;
    scrollbar-gutter:stable;
    overscroll-behavior-x:contain
}
.billing-family-table{
    width:max-content !important;
    min-width:1580px !important
}
.billing-family-table th,
.billing-family-table td{
    white-space:nowrap
}
.billing-family-table td:nth-child(1),
.billing-family-table td:nth-child(2){
    white-space:normal;
    min-width:190px
}
.billing-family-table td:nth-child(2){min-width:220px}
.billing-student-stack span,
.billing-course-stack span{min-height:20px}
.billing-family-table .actions-wrap{
    flex-wrap:nowrap
}

@media(max-width:700px){
    .table-wrap .billing-family-table>thead>tr>th,
    .table-wrap .billing-family-table>tbody>tr>td{
        display:table-cell !important
    }
}

/* ===== CampusVicenta V17.5.7 - Cobranzas: tabla compacta + arrastre horizontal ===== */
/* ===== CampusVicenta V17.7.6.4 - drag horizontal GLOBAL para todas las tablas ===== */
.table-wrap[data-drag-scroll="x"]{
    overflow-x:auto;
    max-width:100%;
    -webkit-overflow-scrolling:touch;
    overscroll-behavior-x:contain;
    touch-action:pan-x pan-y;
    position:relative;
}
/* V17.7.6.5: el cursor permanece normal al pasar sobre una tabla.
   La mano aparece únicamente cuando el usuario ya inició un arrastre real. */
.table-wrap[data-drag-scroll="x"].cv-drag-scrollable{
    cursor:auto;
}
.table-wrap[data-drag-scroll="x"].is-dragging{
    cursor:grabbing;
    user-select:none;
    -webkit-user-select:none;
}
.table-wrap[data-drag-scroll="x"] a,
.table-wrap[data-drag-scroll="x"] button,
.table-wrap[data-drag-scroll="x"] input,
.table-wrap[data-drag-scroll="x"] select,
.table-wrap[data-drag-scroll="x"] textarea,
.table-wrap[data-drag-scroll="x"] label,
.table-wrap[data-drag-scroll="x"] summary{
    cursor:auto;
}
.billing-family-table{
    min-width:0 !important;
}
.billing-family-table .cv-row-number-header,
.billing-family-table .cv-row-number-cell{
    width:36px !important;
    min-width:36px !important;
    max-width:36px !important;
    padding-left:5px !important;
    padding-right:5px !important;
}
.billing-family-table .billing-col-student{
    width:210px;
    min-width:210px !important;
    max-width:230px;
    white-space:normal !important;
}
.billing-family-table .billing-col-course{
    width:185px;
    min-width:185px !important;
    max-width:205px;
    white-space:normal !important;
}
.billing-family-table th[data-sort-key^="period_"],
.billing-family-table .billing-period-cell{
    width:70px;
    min-width:70px !important;
    max-width:76px;
    padding-left:6px;
    padding-right:6px;
}
.billing-family-table .billing-col-balance,
.billing-family-table .billing-col-overdue{
    width:96px;
    min-width:96px;
    max-width:108px;
    white-space:nowrap !important;
}
.billing-family-table .billing-col-actions{
    width:86px;
    min-width:86px;
    white-space:nowrap !important;
}
.billing-family-table .billing-col-actions .actions-wrap{
    min-width:0 !important;
    flex-wrap:nowrap;
}
@media(max-width:700px){
    .billing-family-table .cv-row-number-header,
    .billing-family-table .cv-row-number-cell{
        width:34px !important;
        min-width:34px !important;
        max-width:34px !important;
    }
    .billing-family-table .billing-col-student{
        width:190px;
        min-width:190px !important;
    }
    .billing-family-table .billing-col-course{
        width:165px;
        min-width:165px !important;
    }
}

/* ===== CampusVicenta V17.5.8 - filtros de deuda, contactos opcionales y orden financiero ===== */
.billing-filter-group{
    display:flex;
    align-items:center;
    gap:10px;
    flex-wrap:wrap;
}
.billing-filter-group #familySearch{
    min-width:320px;
}
.billing-debt-filter{
    min-width:190px;
}
.billing-contact-toggle{
    white-space:nowrap;
}
.billing-family-table .billing-email-col,
.billing-family-table .billing-phone-col{
    display:none !important;
}
.billing-family-table.show-emails .billing-email-col{
    display:table-cell !important;
}
.billing-family-table.show-phones .billing-phone-col{
    display:table-cell !important;
}
.billing-family-table .billing-col-email{
    width:205px;
    min-width:205px !important;
    max-width:235px;
    white-space:normal !important;
}
.billing-family-table .billing-col-phone{
    width:145px;
    min-width:145px !important;
    max-width:170px;
    white-space:normal !important;
}
.billing-contact-stack span{
    min-height:20px;
    overflow-wrap:anywhere;
}
.billing-family-table .billing-col-balance.sortable,
.billing-family-table .billing-col-overdue.sortable{
    cursor:pointer;
}
@media(max-width:700px){
    .billing-filter-group{
        width:100%;
        align-items:stretch;
    }
    .billing-filter-group #familySearch,
    .billing-debt-filter,
    .billing-contact-toggle{
        width:100%;
        min-width:0;
    }
    .billing-family-table .billing-col-email{
        width:190px;
        min-width:190px !important;
    }
    .billing-family-table .billing-col-phone{
        width:135px;
        min-width:135px !important;
    }
}


/* ===== CampusVicenta V17.5.11 - Cobranzas: mails operativos ===== */
.billing-copy-emails{white-space:nowrap}
.billing-family-table .billing-col-email{line-height:1.35}
@media(max-width:700px){
  .billing-copy-emails{width:100%}
}


/* ===== CampusVicenta V17.5.12 - contactos separados + click de orden confiable ===== */
.billing-family-table .billing-col-email{width:185px;min-width:185px !important;max-width:210px}
.billing-family-table .billing-col-phone{width:125px;min-width:125px !important;max-width:145px}
@media(max-width:700px){
  .billing-family-table .billing-col-email{width:175px;min-width:175px !important}
  .billing-family-table .billing-col-phone{width:120px;min-width:120px !important}
}


/* ===== CampusVicenta V17.5.15 - Pago rápido modal de Cobranzas ===== */
dialog.billing-payment-dialog{width:min(640px,calc(100vw - 28px))}
.billing-payment-dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.billing-payment-dialog-head h3{margin:0 0 4px}
.billing-payment-dialog-head p{margin:0}
.billing-payment-balance{margin:14px 0 18px;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:#f8fafc}
.billing-payment-balance strong{font-size:18px}
.billing-family-table .billing-col-actions{min-width:94px}
.billing-family-table .billing-col-actions .btn.icon{width:36px;height:36px;padding:0;display:inline-grid;place-items:center}


/* ===== CampusVicenta V17.5.17 - Modal de pago con deuda visible ===== */
.billing-payment-dialog-title{min-width:0}
.billing-payment-kicker{display:block;margin-bottom:3px;font-size:12px;font-weight:800;letter-spacing:.045em;text-transform:uppercase;color:var(--muted)}
.billing-payment-dialog-head #billingPaymentFamily{margin:0;font-size:24px;line-height:1.15;font-weight:850;color:var(--text);overflow-wrap:anywhere}
.billing-payment-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:16px 0 20px}
.billing-payment-metric{padding:13px 14px;border:1px solid var(--border);border-radius:12px;background:#f8fafc}
.billing-payment-metric span{display:block;margin-bottom:4px;font-size:12px;font-weight:750;color:var(--muted)}
.billing-payment-metric strong{display:block;font-size:20px;line-height:1.15;color:var(--text)}
.billing-payment-metric.is-overdue{background:#fff7f7;border-color:#fecaca}
.billing-payment-metric.is-overdue strong{color:#b42318}
@media(max-width:560px){
  .billing-payment-dialog-head #billingPaymentFamily{font-size:20px}
  .billing-payment-summary{grid-template-columns:1fr}
}


/* ===== CampusVicenta V17.5.19 - Sidebar reducible en escritorio ===== */
:root{
    --cv-sidebar-expanded:250px;
    --cv-sidebar-collapsed:76px;
}
.sidebar{
    width:var(--cv-sidebar-expanded);
    transition:width .2s ease,transform .2s ease;
}
.main{
    margin-left:var(--cv-sidebar-expanded);
    width:calc(100% - var(--cv-sidebar-expanded));
    transition:margin-left .2s ease,width .2s ease;
}
.sidebar-head-actions{display:flex;align-items:center;gap:4px}
.sidebar-collapse{
    width:32px;
    height:32px;
    display:inline-grid;
    place-items:center;
    border:1px solid #ffffff2e;
    border-radius:9px;
    background:#ffffff0f;
    color:#fff;
    font:800 24px/1 system-ui,sans-serif;
    cursor:pointer;
    transition:background .15s ease,transform .2s ease;
}
.sidebar-collapse:hover{background:#ffffff20}
.brand-mini{display:none}

@media(min-width:851px){
    html.cv-sidebar-collapsed .sidebar{width:var(--cv-sidebar-collapsed)}
    html.cv-sidebar-collapsed .main{
        margin-left:var(--cv-sidebar-collapsed);
        width:calc(100% - var(--cv-sidebar-collapsed));
    }
    html.cv-sidebar-collapsed .sidebar-head{padding:18px 8px 12px;gap:4px}
    html.cv-sidebar-collapsed .brand{font-size:14px;letter-spacing:.03em;min-width:0}
    html.cv-sidebar-collapsed .brand-full{display:none}
    html.cv-sidebar-collapsed .brand-mini{display:inline}
    html.cv-sidebar-collapsed .sidebar-collapse{width:28px;height:28px;font-size:22px}
    html.cv-sidebar-collapsed .sidebar-nav{padding:4px 8px 18px}
    html.cv-sidebar-collapsed .nav-link{
        position:relative;
        justify-content:center;
        gap:0;
        min-height:42px;
        padding:9px!important;
    }
    html.cv-sidebar-collapsed .nav-label{display:none}
    html.cv-sidebar-collapsed .nav-icon{width:24px;flex:0 0 24px;font-size:16px}
    html.cv-sidebar-collapsed .nav-notification-badge{
        position:absolute;
        top:3px;
        right:2px;
        min-width:17px;
        height:17px;
        padding:0 4px;
        font-size:9px;
        display:grid;
        place-items:center;
    }
    html.cv-sidebar-collapsed .nav-group{border-top:1px solid #ffffff12;border-radius:0;padding-top:3px}
    html.cv-sidebar-collapsed .nav-group>summary{display:none}
    html.cv-sidebar-collapsed .nav-group:not([open])>.nav-group-items{display:grid!important}
    html.cv-sidebar-collapsed .nav-group-items{padding:2px 0 5px;gap:3px}
    html.cv-sidebar-collapsed .sidebar-context{justify-content:center;padding:14px 0}
    html.cv-sidebar-collapsed .sidebar-context>div{display:none}
}

@media(max-width:850px){
    .sidebar-collapse{display:none}
    .brand-full{display:inline}
    .brand-mini{display:none!important}
}


/* ===== CampusVicenta V17.5.23 - resumen de cobranzas y dos placas ===== */
.billing-summary-scope-card{
    display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:12px
}
.billing-summary-filter-form{min-width:min(100%,330px)}
.billing-summary-filter-form label{display:grid;gap:6px;font-weight:700;font-size:13px}
.billing-summary-filter-form select{width:100%;min-height:42px;border:1px solid var(--border);border-radius:10px;background:#fff;padding:8px 10px;color:var(--text)}
.billing-summary-note{margin:-4px 0 14px 2px;font-size:12px}
.billing-banner-admin-grid,.billing-family-banners-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.billing-banner-admin-card{border:1px solid var(--border);border-radius:14px;padding:14px;background:#fbfdff}
.billing-banner-admin-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}
.billing-banner-admin-head strong{display:block;font-size:16px}.billing-banner-admin-head small{display:block;color:var(--muted);margin-top:3px}
.billing-family-banner{width:100%;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:#f5f7fa;display:flex;align-items:center;justify-content:center}
.billing-family-banner img{display:block;width:100%;height:auto;max-height:520px;object-fit:contain;background:#fff}
.billing-banner-empty{min-height:150px;border:1px dashed var(--border);border-radius:12px;display:flex;align-items:center;justify-content:center;color:var(--muted);background:#fff;padding:18px;text-align:center}
.billing-banner-form{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-top:12px}.billing-banner-form label{flex:1;min-width:220px;font-weight:700;font-size:13px}.billing-banner-form input[type=file]{display:block;width:100%;margin-top:6px}
.billing-family-banner-card{min-width:0}.billing-family-banner-card .billing-family-banner{margin-top:10px}
@media(max-width:900px){.billing-summary-scope-card{align-items:stretch;flex-direction:column}.billing-summary-filter-form{min-width:0}.billing-banner-admin-grid,.billing-family-banners-grid{grid-template-columns:1fr}}

/* ===== CampusVicenta V17.7.6.7 - Mi Perfil y personalización ===== */
.user-avatar.has-image{padding:0;overflow:hidden;background:#fff}
.user-avatar.has-image img{display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit}

.profile-v17767{display:grid;gap:16px}
.profile-identity-card{display:flex;align-items:center;gap:18px}
.profile-current-avatar{width:86px;height:86px;flex:0 0 86px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:linear-gradient(135deg,#dce8f3,#eef5fb);border:4px solid #fff;box-shadow:0 6px 20px #0f172a1a;color:#24445f;font-size:26px;font-weight:900}
.profile-current-avatar img{width:100%;height:100%;object-fit:cover}
.profile-kicker{display:block;text-transform:uppercase;letter-spacing:.08em;font-size:11px;font-weight:900;color:var(--muted)}
.profile-identity-card h2,.profile-section h3{margin:.25rem 0}
.profile-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.profile-subsection{padding-top:18px;margin-top:18px;border-top:1px solid var(--border)}
.profile-subsection h4{margin:0 0 4px}
.avatar-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:10px;margin-top:14px}
.avatar-option{position:relative;display:grid;justify-items:center;gap:6px;padding:9px;border:2px solid transparent;border-radius:15px;background:var(--panel);cursor:pointer;transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease}
.avatar-option:hover{transform:translateY(-1px);box-shadow:0 6px 16px #0f172a12}
.avatar-option input{position:absolute;opacity:0;pointer-events:none}
.avatar-option img,.avatar-placeholder{width:70px;height:70px;border-radius:50%;display:grid;place-items:center;background:#e8eef5;font-weight:900;color:#35506a}
.avatar-option input:checked~img,.avatar-option input:checked~.avatar-placeholder{outline:4px solid color-mix(in srgb,var(--topbar-accent) 65%,white);outline-offset:2px}
.avatar-option:has(input:checked){border-color:color-mix(in srgb,var(--topbar-accent) 55%,white);background:color-mix(in srgb,var(--topbar-accent) 6%,var(--panel))}
.avatar-option small{font-size:11px;color:var(--muted)}
.profile-preference-grid,.profile-locked-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-top:18px}
.profile-preference-grid label,.profile-locked-grid label{display:grid;gap:6px;font-weight:700;font-size:13px}
.favorite-shortcuts{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 7px}
.favorite-shortcuts label{display:flex;align-items:center;gap:7px;padding:9px 12px;border:1px solid var(--border);border-radius:999px;background:var(--panel);cursor:pointer;font-size:13px;font-weight:700}
.favorite-shortcuts label:has(input:checked){border-color:#e3b341;background:#fff9df;color:#6f5512}
.favorite-shortcuts input{accent-color:#d69b0b}
.profile-toggle{display:flex;gap:12px;align-items:flex-start;cursor:pointer}
.profile-toggle>input{margin-top:4px;transform:scale(1.15)}
.profile-toggle>span{display:grid;gap:3px}.profile-toggle small{color:var(--muted);font-weight:400}
.profile-data-form{margin-top:16px}.profile-data-form label{position:relative}
.profile-pending-note{display:block;margin-top:5px;padding:7px 9px;border-radius:8px;background:#fff8dd;color:#70560a}
.profile-request-actions{min-width:270px;display:grid;gap:8px}.profile-request-actions input{min-width:220px}
.badge.warning{background:#fff3cd;color:#725509}.badge.success{background:#e8f7ed;color:#21643a}
.status.pendiente{background:#fff3cd;color:#725509}.status.aprobada{background:#e8f7ed;color:#21643a}.status.rechazada{background:#feecec;color:#8b2525}

/* Tamaño de interfaz personal. */
body.cv-ui-large{font-size:17px}
body.cv-ui-large .btn,body.cv-ui-large input,body.cv-ui-large select,body.cv-ui-large textarea{font-size:1rem}
body.cv-ui-large .muted{font-size:14px}

/* Densidad personal de tablas; no cambia contenido ni permisos. */
body.cv-table-compact th,body.cv-table-compact td{padding:7px 9px}
body.cv-table-compact .table-wrap .btn{padding:7px 9px}

/* Preferencia explícita de movimiento reducido, adicional a la del sistema. */
body.cv-motion-reduced *,body.cv-motion-reduced *::before,body.cv-motion-reduced *::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}

/* Tema oscuro. Se conserva el color institucional del rol en el sidebar. */
body.cv-theme-dark{
    --bg:#111827;--panel:#182230;--text:#eef4fb;--muted:#aab7c7;--border:#334155;--accent:#5b91c4;
}
body.cv-theme-dark .topbar,body.cv-theme-dark .card,body.cv-theme-dark .table-wrap,body.cv-theme-dark .user-dropdown,body.cv-theme-dark dialog,body.cv-theme-dark input,body.cv-theme-dark select,body.cv-theme-dark textarea{background:#182230;color:#eef4fb;border-color:#334155}
body.cv-theme-dark th{background:#202c3b}body.cv-theme-dark td{background:#182230}
body.cv-theme-dark .muted,body.cv-theme-dark small{color:#aab7c7}
body.cv-theme-dark .alert{background:#1b3144;border-color:#31516b;color:#e7f2fb}
body.cv-theme-dark .alert.error{background:#3b2024;border-color:#6e353b}
body.cv-theme-dark .favorite-shortcuts label{background:#182230}
body.cv-theme-dark .favorite-shortcuts label:has(input:checked){background:#3a321c;color:#f8d97a;border-color:#806d2e}
body.cv-theme-dark .profile-pending-note{background:#3a321c;color:#f8d97a}
body.cv-theme-dark .chip,body.cv-theme-dark .status{border-color:#405069}
body.cv-theme-dark .quick-link,body.cv-theme-dark .dashboard-card,body.cv-theme-dark .metric-card{background:#182230!important;color:#eef4fb}

@media(prefers-color-scheme:dark){
    body.cv-theme-auto{
        --bg:#111827;--panel:#182230;--text:#eef4fb;--muted:#aab7c7;--border:#334155;--accent:#5b91c4;
    }
    body.cv-theme-auto .topbar,body.cv-theme-auto .card,body.cv-theme-auto .table-wrap,body.cv-theme-auto .user-dropdown,body.cv-theme-auto dialog,body.cv-theme-auto input,body.cv-theme-auto select,body.cv-theme-auto textarea{background:#182230;color:#eef4fb;border-color:#334155}
    body.cv-theme-auto th{background:#202c3b}body.cv-theme-auto td{background:#182230}
    body.cv-theme-auto .muted,body.cv-theme-auto small{color:#aab7c7}
    body.cv-theme-auto .alert{background:#1b3144;border-color:#31516b;color:#e7f2fb}
    body.cv-theme-auto .alert.error{background:#3b2024;border-color:#6e353b}
    body.cv-theme-auto .favorite-shortcuts label{background:#182230}
    body.cv-theme-auto .favorite-shortcuts label:has(input:checked){background:#3a321c;color:#f8d97a;border-color:#806d2e}
    body.cv-theme-auto .profile-pending-note{background:#3a321c;color:#f8d97a}
}

@media(max-width:700px){
    .profile-identity-card{align-items:flex-start}.profile-current-avatar{width:68px;height:68px;flex-basis:68px}
    .profile-section-head{flex-direction:column}.avatar-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
    .avatar-option img,.avatar-placeholder{width:62px;height:62px}.profile-request-actions{min-width:230px}
}

/* ===== CampusVicenta V17.7.6.8 - Perfil desplegable, preview UX y dark mode ===== */

/* El menú de usuario funciona como una pequeña tarjeta de perfil: avatar grande arriba,
   acciones debajo. No cambia ninguna regla de seguridad ni de sesión. */
.user-dropdown{
    width:330px;
    padding:0;
    overflow:hidden;
}
.user-dropdown-profile{
    display:grid;
    justify-items:center;
    gap:6px;
    padding:20px 18px 18px;
    text-align:center;
    background:linear-gradient(145deg,var(--topbar-accent),color-mix(in srgb,var(--topbar-accent) 76%,#17324d));
    color:#fff;
}
.user-dropdown-profile strong{
    max-width:285px;
    font-size:16px;
    line-height:1.25;
    overflow-wrap:anywhere;
}
.user-dropdown-profile>span:not(.user-dropdown-avatar){font-size:12px;color:#eef7ff}
.user-dropdown-avatar{
    width:94px;
    height:94px;
    margin-bottom:4px;
    border-radius:50%;
    display:grid;
    place-items:center;
    overflow:hidden;
    background:#fff;
    color:#24445f;
    border:4px solid #fff;
    box-shadow:0 8px 24px #0f172a38;
    font-size:28px;
    font-weight:900;
}
.user-dropdown-avatar img{display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit}
.user-dropdown-actions{display:grid;padding:8px;background:var(--panel)}
.user-dropdown-actions>a,
.user-dropdown-actions>form button{
    width:100%;
    min-height:42px;
    display:flex;
    align-items:center;
    gap:9px;
    padding:10px 11px;
    border-radius:9px;
    font-size:13px;
    text-align:left;
}
.user-dropdown-actions>a:hover{background:#f5f7fa}
.user-dropdown-actions .dropdown-separator{margin:5px 4px}
.user-dropdown-actions .demo-account-menu-note{margin:2px 3px}

/* Vista previa de preferencias. Los controles sólo manipulan clases del DOM;
   la persistencia continúa ocurriendo exclusivamente con el submit del formulario. */
.profile-live-preview{
    margin-top:18px;
    padding:16px;
    border:1px solid var(--border);
    border-radius:15px;
    background:color-mix(in srgb,var(--panel) 94%,var(--topbar-accent) 6%);
}
.profile-live-preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}
.profile-live-preview-head strong{display:block;margin:3px 0 2px}
.profile-preview-state{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border-radius:999px;background:#e8f7ed;color:#21643a;font-size:11px;font-weight:800;white-space:nowrap}
.profile-preview-state.is-dirty{background:#fff3cd;color:#725509}
.profile-live-preview-body{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(300px,1.2fr);gap:14px;align-items:center}
.profile-preview-user{display:flex;align-items:center;gap:11px;min-width:0}
.profile-preview-user>div{display:grid;gap:2px;min-width:0}
.profile-preview-avatar{width:56px;height:56px;flex:0 0 56px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:#e8eef5;color:#35506a;font-weight:900;border:3px solid var(--panel);box-shadow:0 3px 10px #0f172a15}
.profile-preview-avatar img{width:100%;height:100%;object-fit:cover}
.profile-preview-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.profile-preview-table{grid-column:1/-1;overflow:auto;border:1px solid var(--border);border-radius:11px}
.profile-preview-table table{width:100%;border-collapse:collapse}
.profile-preview-table th,.profile-preview-table td{border-bottom:1px solid var(--border)}
.profile-preview-table tbody tr:last-child td{border-bottom:0}
.profile-preview-favorites{grid-column:1/-1;display:flex;gap:7px;flex-wrap:wrap;min-height:28px;align-items:center}
.profile-preview-favorite{display:inline-flex;align-items:center;padding:6px 9px;border:1px solid #e3b341;border-radius:999px;background:#fff9df;color:#6f5512;font-size:11px;font-weight:800}
.profile-preview-meta{grid-column:1/-1;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;color:var(--muted)}
.profile-live-preview>#profilePreviewReset{margin-top:12px}

/* Paleta semántica de botones también fuera de las tablas. */
.btn.info{background:#1686b7;color:#fff;border-color:#1686b7}
.btn.warning{background:#f59e0b;color:#fff;border-color:#f59e0b}
.btn.success{background:#29965f;color:#fff;border-color:#29965f}
.btn.info:hover{background:#11759f;border-color:#11759f}
.btn.warning:hover{background:#dd8c08;border-color:#dd8c08}
.btn.success:hover{background:#238553;border-color:#238553}

/* Corrección integral de controles con fondo fijo claro en tema oscuro. */
body.cv-theme-dark .btn{
    background:#182230;
    color:#eef4fb;
    border-color:#475569;
}
body.cv-theme-dark .btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
body.cv-theme-dark .btn.danger{background:#c5332f;color:#fff;border-color:#c5332f}
body.cv-theme-dark .btn.info{background:#1686b7;color:#fff;border-color:#1686b7}
body.cv-theme-dark .btn.warning{background:#f59e0b;color:#fff;border-color:#f59e0b}
body.cv-theme-dark .btn.success{background:#29965f;color:#fff;border-color:#29965f}
body.cv-theme-dark .cv-more-actions summary,
body.cv-theme-dark .cv-more-actions>div,
body.cv-theme-dark .cv-table-quick-search,
body.cv-theme-dark .top-search-btn,
body.cv-theme-dark .top-icon-btn,
body.cv-theme-dark .bell-link,
body.cv-theme-dark .cv-global-search-card,
body.cv-theme-dark .cv-confirm-card{
    background:#182230;
    color:#eef4fb;
    border-color:#334155;
}
body.cv-theme-dark .cv-more-actions summary:hover,
body.cv-theme-dark .user-dropdown-actions>a:hover,
body.cv-theme-dark .user-menu-trigger:hover,
body.cv-theme-dark .user-menu[open] .user-menu-trigger,
body.cv-theme-dark .cv-global-search-results>a:hover{background:#243247;color:#fff}
body.cv-theme-dark .user-dropdown-actions{background:#182230}
body.cv-theme-dark .profile-live-preview{background:#152131}
body.cv-theme-dark .profile-preview-state{background:#183b2a;color:#a7f3c4}
body.cv-theme-dark .profile-preview-state.is-dirty{background:#3a321c;color:#f8d97a}
body.cv-theme-dark .profile-preview-favorite{background:#3a321c;color:#f8d97a;border-color:#806d2e}
body.cv-theme-dark .profile-preview-avatar{border-color:#182230;background:#26374a;color:#e8f0f7}

@media(prefers-color-scheme:dark){
    body.cv-theme-auto .btn{background:#182230;color:#eef4fb;border-color:#475569}
    body.cv-theme-auto .btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
    body.cv-theme-auto .btn.danger{background:#c5332f;color:#fff;border-color:#c5332f}
    body.cv-theme-auto .btn.info{background:#1686b7;color:#fff;border-color:#1686b7}
    body.cv-theme-auto .btn.warning{background:#f59e0b;color:#fff;border-color:#f59e0b}
    body.cv-theme-auto .btn.success{background:#29965f;color:#fff;border-color:#29965f}
    body.cv-theme-auto .cv-more-actions summary,
    body.cv-theme-auto .cv-more-actions>div,
    body.cv-theme-auto .cv-table-quick-search,
    body.cv-theme-auto .top-search-btn,
    body.cv-theme-auto .top-icon-btn,
    body.cv-theme-auto .bell-link,
    body.cv-theme-auto .cv-global-search-card,
    body.cv-theme-auto .cv-confirm-card{background:#182230;color:#eef4fb;border-color:#334155}
    body.cv-theme-auto .cv-more-actions summary:hover,
    body.cv-theme-auto .user-dropdown-actions>a:hover,
    body.cv-theme-auto .user-menu-trigger:hover,
    body.cv-theme-auto .user-menu[open] .user-menu-trigger,
    body.cv-theme-auto .cv-global-search-results>a:hover{background:#243247;color:#fff}
    body.cv-theme-auto .user-dropdown-actions{background:#182230}
    body.cv-theme-auto .profile-live-preview{background:#152131}
    body.cv-theme-auto .profile-preview-state{background:#183b2a;color:#a7f3c4}
    body.cv-theme-auto .profile-preview-state.is-dirty{background:#3a321c;color:#f8d97a}
    body.cv-theme-auto .profile-preview-favorite{background:#3a321c;color:#f8d97a;border-color:#806d2e}
    body.cv-theme-auto .profile-preview-avatar{border-color:#182230;background:#26374a;color:#e8f0f7}
}

@media(max-width:700px){
    .user-dropdown{width:min(330px,calc(100vw - 24px))}
    .user-dropdown-avatar{width:82px;height:82px}
    .profile-live-preview-head{flex-direction:column}
    .profile-live-preview-body{grid-template-columns:1fr}
    .profile-preview-actions{justify-content:flex-start}
}

/* ===== CampusVicenta V17.7.6.9 - Mi Perfil simple + búsqueda global ===== */
.profile-save-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px}
.profile-save-actions .profile-preview-state{margin-left:auto}
@media(max-width:700px){.profile-save-actions .profile-preview-state{margin-left:0;width:100%;justify-content:center}}


/* ===== CampusVicenta V17.7.6.10 - sidebar activo único + fullscreen ===== */
.nav-link.active{position:relative}
.top-fullscreen-btn[hidden]{display:none!important}

/* ============================================================
   CampusVicenta V17.7.6.11 · Login institucional con fotos rotativas
   ============================================================ */

body.login-v177611{
    min-height:100vh;
    margin:0;
    overflow-x:hidden;
    background:#f5f8fc;
    color:#132238;
}

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

.login-institutional-page{
    min-height:100vh;
    display:grid;
    grid-template-columns:minmax(560px,1.08fr) minmax(440px,.92fr);
}

/* ------------------------------------------------------------
   Panel fotográfico / institucional
   ------------------------------------------------------------ */

.login-institutional-hero{
    position:relative;
    min-height:100vh;
    overflow:hidden;
    isolation:isolate;
    color:#fff;
    background:#0a3157;
}

.login-photo-slider,
.login-photo-slide,
.login-photo-slide img,
.login-hero-overlay,
.login-hero-grid{
    position:absolute;
    inset:0;
}

.login-photo-slide{
    opacity:0;
    transform:scale(1.015);
    transition:opacity .9s ease,transform 7.2s ease;
    pointer-events:none;
}

.login-photo-slide.is-active{
    opacity:1;
    transform:scale(1.045);
}

.login-photo-slide img{
    width:100%;
    height:100%;
    object-fit:cover;
    object-position:center 57%;
}

.login-photo-slide:nth-child(2) img{
    object-position:center center;
}

.login-photo-slide:nth-child(3) img{
    object-position:center 58%;
}

.login-photo-slide:nth-child(4) img{
    object-position:center 50%;
}

.login-photo-slide:nth-child(5) img{
    object-position:center 59%;
}

.login-hero-overlay{
    z-index:1;
    background:
        linear-gradient(90deg,rgba(3,28,55,.96) 0%,rgba(6,43,76,.89) 37%,rgba(7,54,92,.57) 68%,rgba(5,38,68,.20) 100%),
        linear-gradient(0deg,rgba(4,30,55,.77) 0%,transparent 44%,rgba(3,34,65,.18) 100%);
}

.login-hero-grid{
    z-index:2;
    opacity:.42;
    pointer-events:none;
    background-image:
        linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px),
        linear-gradient(90deg,rgba(255,255,255,.035) 1px,transparent 1px);
    background-size:46px 46px;
    mask-image:linear-gradient(90deg,#000,rgba(0,0,0,.65) 52%,transparent 88%);
}

.login-hero-inner{
    position:relative;
    z-index:4;
    width:100%;
    min-height:100vh;
    padding:34px 52px 32px;
    display:flex;
    flex-direction:column;
}

.login-institutional-brand{
    display:flex;
    align-items:center;
    gap:17px;
}

.login-school-crests{
    display:flex;
    align-items:center;
    gap:8px;
}

.login-school-crests img{
    width:58px;
    height:58px;
    object-fit:contain;
    filter:drop-shadow(0 8px 18px rgba(0,0,0,.20));
}

.login-school-crests img:last-child{
    width:55px;
    height:55px;
}

.login-brand-copy{
    display:grid;
    gap:2px;
}

.login-brand-copy strong{
    color:#fff;
    font-size:24px;
    line-height:1;
    letter-spacing:-.035em;
}

.login-brand-copy strong span,
.login-mobile-identity strong span{
    color:#f5aa18;
}

.login-brand-copy small{
    color:rgba(255,255,255,.72);
    font-size:11px;
}

.login-hero-copy{
    width:min(690px,100%);
    margin:auto 0;
    padding:56px 0 44px;
}

.login-levels{
    display:flex;
    align-items:center;
    gap:10px;
    margin-bottom:18px;
    font-size:11px;
    font-weight:900;
    letter-spacing:.08em;
    text-transform:uppercase;
}

.login-levels i{
    width:4px;
    height:4px;
    border-radius:50%;
    background:rgba(255,255,255,.34);
}

.login-levels .is-inicial{color:#59d17a}
.login-levels .is-primario{color:#ffc62e}
.login-levels .is-secundario{color:#59baff}

.login-hero-copy h1{
    max-width:620px;
    margin:0;
    color:#fff;
    font-size:clamp(50px,5.1vw,78px);
    line-height:.98;
    letter-spacing:-.058em;
    text-shadow:0 6px 24px rgba(0,0,0,.16);
}

.login-hero-copy h1 span{
    color:#7fd5f5;
}

.login-hero-copy > p{
    width:min(600px,100%);
    margin:24px 0 0;
    padding-left:17px;
    border-left:3px solid #59d17a;
    color:rgba(255,255,255,.88);
    font-size:15px;
    line-height:1.62;
    text-shadow:0 2px 12px rgba(0,0,0,.16);
}

.login-institutional-features{
    width:min(650px,100%);
    margin-top:32px;
    display:grid;
    grid-template-columns:repeat(4,minmax(0,1fr));
    gap:10px;
}

.login-institutional-feature{
    min-width:0;
    min-height:99px;
    padding:13px 12px 12px;
    display:flex;
    flex-direction:column;
    justify-content:center;
    gap:8px;
    border:1px solid rgba(255,255,255,.17);
    border-radius:14px;
    background:rgba(7,43,76,.52);
    box-shadow:inset 0 1px rgba(255,255,255,.06),0 10px 30px rgba(0,0,0,.08);
    backdrop-filter:blur(9px);
}

.login-feature-symbol{
    width:33px;
    height:33px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:10px;
    color:#fff;
    background:rgba(255,255,255,.11);
    font-size:19px;
    font-weight:900;
}

.login-institutional-feature strong,
.login-institutional-feature small{
    display:block;
}

.login-institutional-feature strong{
    margin-bottom:2px;
    font-size:11px;
}

.login-institutional-feature small{
    color:rgba(255,255,255,.64);
    font-size:9px;
    line-height:1.35;
}

.login-institutional-feature.is-green .login-feature-symbol{color:#72ea90;background:rgba(44,188,93,.17)}
.login-institutional-feature.is-yellow .login-feature-symbol{color:#ffd84f;background:rgba(235,171,19,.17)}
.login-institutional-feature.is-red .login-feature-symbol{color:#ff7676;background:rgba(229,68,68,.17)}
.login-institutional-feature.is-blue .login-feature-symbol{color:#64c5ff;background:rgba(41,148,218,.18)}

.login-hero-bottom{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
}

.login-photo-dots{
    display:flex;
    align-items:center;
    gap:7px;
}

.login-photo-dot{
    width:8px;
    height:8px;
    padding:0;
    border:1px solid rgba(255,255,255,.65);
    border-radius:999px;
    cursor:pointer;
    background:rgba(255,255,255,.15);
    transition:width .18s ease,background .18s ease,border-color .18s ease;
}

.login-photo-dot:hover{
    background:rgba(255,255,255,.58);
}

.login-photo-dot.is-active{
    width:26px;
    border-color:#fff;
    background:#fff;
}

.login-institutional-motto{
    display:flex;
    align-items:center;
    gap:9px;
    color:rgba(255,255,255,.64);
    font-size:9px;
    font-weight:800;
    letter-spacing:.09em;
    text-transform:uppercase;
}

.login-institutional-motto i{
    width:3px;
    height:3px;
    border-radius:50%;
    background:#7fd5f5;
}

.login-color-stripe{
    position:absolute;
    z-index:6;
    left:0;
    right:0;
    bottom:0;
    height:5px;
    display:grid;
    grid-template-columns:repeat(4,1fr);
}

.login-color-stripe i:nth-child(1){background:#3da85b}
.login-color-stripe i:nth-child(2){background:#f3c72c}
.login-color-stripe i:nth-child(3){background:#e83f3f}
.login-color-stripe i:nth-child(4){background:#318fd0}

/* ------------------------------------------------------------
   Panel de acceso
   ------------------------------------------------------------ */

.login-access-panel{
    min-height:100vh;
    padding:35px 42px 28px;
    display:flex;
    align-items:center;
    justify-content:center;
    background:
        radial-gradient(circle at 100% 0%,rgba(61,124,197,.08),transparent 30%),
        radial-gradient(circle at 7% 100%,rgba(50,137,197,.045),transparent 27%),
        #f8fafc;
}

.login-access-wrap{
    width:min(485px,100%);
}

.login-site-link{
    display:inline-flex;
    align-items:center;
    gap:7px;
    margin:0 0 22px 4px;
    color:#365f89;
    font-size:12px;
    font-weight:800;
    text-decoration:none;
    transition:transform .15s ease,color .15s ease;
}

.login-site-link:hover{
    color:#123f6b;
    transform:translateX(-2px);
}

.login-access-card{
    padding:34px 32px 31px;
    border:1px solid #e2e8f0;
    border-radius:20px;
    background:#fff;
    box-shadow:0 16px 48px rgba(15,39,68,.085);
}

.login-mobile-identity{
    display:none;
}

.login-access-heading{
    margin-bottom:27px;
    text-align:center;
}

.login-security-mark{
    width:54px;
    height:54px;
    margin:0 auto 17px;
    display:flex;
    align-items:center;
    justify-content:center;
    border:1px solid #e4edf5;
    border-radius:50%;
    color:#23639a;
    background:#eff6fc;
    font-size:21px;
    font-weight:900;
}

.login-access-heading > span{
    display:block;
    margin-bottom:8px;
    color:#175891;
    font-size:10px;
    font-weight:900;
    letter-spacing:.13em;
    text-transform:uppercase;
}

.login-access-heading h2{
    margin:0;
    color:#14233a;
    font-size:39px;
    line-height:1;
    letter-spacing:-.045em;
}

.login-access-heading p{
    margin:10px 0 0;
    color:#708097;
    font-size:13px;
}

.login-access-form{
    display:grid;
    gap:18px;
}

.login-access-field{
    display:grid;
    gap:7px;
}

.login-access-field > span{
    color:#21324a;
    font-size:12px;
    font-weight:850;
}

.login-access-field > small{
    color:#8290a3;
    font-size:9.5px;
}

.login-access-input{
    min-height:54px;
    display:flex;
    align-items:center;
    overflow:hidden;
    border:1px solid #d5dee8;
    border-radius:12px;
    background:#fff;
    box-shadow:0 2px 6px rgba(15,23,42,.035);
    transition:border-color .15s ease,box-shadow .15s ease;
}

.login-access-input:focus-within{
    border-color:#3b84bd;
    box-shadow:0 0 0 4px rgba(31,98,151,.10);
}

.login-input-glyph{
    width:50px;
    flex:0 0 50px;
    display:flex;
    align-items:center;
    justify-content:center;
    color:#7b8ea4;
    font-size:17px;
}

.login-access-input input{
    width:100%;
    min-width:0;
    height:52px;
    padding:0 8px 0 0;
    border:0;
    outline:0;
    color:#18273c;
    background:transparent;
    font:inherit;
    font-size:13px;
}

.login-access-input input::placeholder{
    color:#9da9b8;
}

.login-access-input .login-password-toggle{
    width:47px;
    height:52px;
    flex:0 0 47px;
    border:0;
    border-radius:9px;
    background:transparent;
}

.login-access-submit{
    min-height:55px;
    margin-top:5px;
    padding:0 19px;
    border:0;
    border-radius:12px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    cursor:pointer;
    color:#fff;
    background:linear-gradient(135deg,#0e4e8d,#147ca1);
    box-shadow:0 12px 25px rgba(14,78,141,.18);
    font-size:13px;
    font-weight:850;
    transition:transform .15s ease,box-shadow .15s ease,filter .15s ease;
}

.login-access-submit:hover{
    transform:translateY(-1px);
    box-shadow:0 15px 29px rgba(14,78,141,.23);
    filter:saturate(1.04);
}

.login-access-submit:active{
    transform:translateY(0);
}

.login-access-submit b{
    font-size:20px;
    line-height:1;
}

.login-access-help{
    margin-top:14px;
    padding:14px 15px;
    display:grid;
    grid-template-columns:38px 1fr;
    align-items:center;
    gap:12px;
    border:1px solid #e1e7ee;
    border-radius:14px;
    background:rgba(255,255,255,.82);
}

.login-access-help-icon{
    width:38px;
    height:38px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:11px;
    color:#1d5c94;
    background:#edf4fa;
    font-weight:900;
}

.login-access-help strong{
    display:block;
    color:#26374d;
    font-size:11px;
}

.login-access-help p{
    margin:3px 0 0;
    color:#7a8899;
    font-size:9.5px;
    line-height:1.4;
}

.login-access-footer{
    margin-top:18px;
    padding:0 3px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:14px;
    color:#8d99a9;
    font-size:9px;
}

/* ------------------------------------------------------------
   Responsive del nuevo login
   ------------------------------------------------------------ */

@media(max-width:1180px){
    .login-institutional-page{
        grid-template-columns:minmax(490px,1fr) minmax(420px,.9fr);
    }

    .login-hero-inner{
        padding-left:38px;
        padding-right:38px;
    }

    .login-institutional-features{
        grid-template-columns:repeat(2,minmax(0,1fr));
        width:min(500px,100%);
    }

    .login-institutional-feature{
        min-height:76px;
        flex-direction:row;
        align-items:center;
    }
}

@media(max-width:900px){
    body.login-v177611{
        background:#f3f6fa;
    }

    .login-institutional-page{
        display:block;
    }

    .login-institutional-hero{
        min-height:245px;
    }

    .login-hero-inner{
        min-height:245px;
        padding:24px 24px 74px;
    }

    .login-institutional-brand{
        justify-content:center;
    }

    .login-school-crests img{
        width:48px;
        height:48px;
    }

    .login-school-crests img:last-child{
        width:46px;
        height:46px;
    }

    .login-brand-copy strong{
        font-size:21px;
    }

    .login-hero-copy{
        display:none;
    }

    .login-hero-bottom{
        margin-top:auto;
    }

    .login-institutional-motto{
        display:none;
    }

    .login-photo-slide img{
        object-position:center 60%;
    }

    .login-hero-overlay{
        background:linear-gradient(90deg,rgba(4,37,69,.88),rgba(5,56,94,.48)),linear-gradient(0deg,rgba(3,30,56,.72),transparent 70%);
    }

    .login-access-panel{
        min-height:auto;
        margin-top:-45px;
        padding:0 18px 24px;
        position:relative;
        z-index:8;
        background:transparent;
    }

    .login-access-wrap{
        width:min(540px,100%);
    }

    .login-site-link{
        display:none;
    }

    .login-access-card{
        padding:29px 25px 25px;
        border-radius:20px;
        box-shadow:0 18px 48px rgba(15,39,68,.13);
    }

    .login-mobile-identity{
        display:none;
    }

    .login-access-heading h2{
        font-size:34px;
    }
}

@media(max-width:540px){
    .login-institutional-hero{
        min-height:205px;
    }

    .login-hero-inner{
        min-height:205px;
        padding:17px 16px 61px;
    }

    .login-school-crests{
        gap:5px;
    }

    .login-school-crests img{
        width:41px;
        height:41px;
    }

    .login-school-crests img:last-child{
        width:39px;
        height:39px;
    }

    .login-brand-copy strong{
        font-size:18px;
    }

    .login-brand-copy small{
        font-size:9px;
    }

    .login-photo-dot{
        width:7px;
        height:7px;
    }

    .login-photo-dot.is-active{
        width:22px;
    }

    .login-access-panel{
        padding:0 10px 17px;
    }

    .login-access-card{
        padding:25px 17px 21px;
        border-radius:17px;
    }

    .login-security-mark{
        width:47px;
        height:47px;
        margin-bottom:14px;
    }

    .login-access-heading{
        margin-bottom:23px;
    }

    .login-access-heading h2{
        font-size:31px;
    }

    .login-access-heading p{
        font-size:12px;
    }

    .login-access-footer{
        align-items:flex-start;
        flex-direction:column;
        gap:5px;
    }
}

@media(prefers-reduced-motion:reduce){
    .login-photo-slide,
    .login-access-submit,
    .login-site-link{
        transition:none!important;
    }
}


/* ============================================================
   CampusVicenta V17.7.7 · Nuevo Inicio funcional e institucional
   Mantiene todos los bloques configurables existentes y sólo moderniza
   la jerarquía visual del Dashboard.
   ============================================================ */
.dashboard-home-hero{
    min-height:188px;
    display:grid;
    grid-template-columns:minmax(0,1.45fr) minmax(330px,.8fr);
    overflow:hidden;
    border:1px solid #cddced;
    border-radius:20px;
    background:linear-gradient(135deg,#0d3154 0%,#174f78 58%,#1b6d91 100%);
    color:#fff;
    box-shadow:0 12px 34px rgba(15,49,84,.14);
}
.dashboard-home-hero-copy{
    position:relative;
    z-index:2;
    display:flex;
    flex-direction:column;
    justify-content:center;
    padding:24px 28px;
    min-width:0;
}
.dashboard-home-brandline{
    display:flex;
    align-items:center;
    gap:10px;
    margin-bottom:8px;
    color:#d7ebfa;
    font-size:11px;
    font-weight:850;
    letter-spacing:.08em;
    text-transform:uppercase;
}
.dashboard-home-brandline img{
    width:28px;
    height:28px;
    object-fit:contain;
    filter:drop-shadow(0 2px 5px rgba(0,0,0,.18));
}
.dashboard-home-hero h1{
    margin:0;
    font-size:clamp(27px,3vw,40px);
    line-height:1.03;
    letter-spacing:-.035em;
}
.dashboard-home-hero-copy>p{
    max-width:760px;
    margin:9px 0 0;
    color:#eaf5fb;
    line-height:1.48;
    font-size:14px;
}
.dashboard-home-context{
    display:flex;
    align-items:center;
    flex-wrap:wrap;
    gap:7px;
    margin-top:15px;
}
.dashboard-home-context span{
    display:inline-flex;
    align-items:center;
    min-height:30px;
    padding:6px 10px;
    border:1px solid rgba(255,255,255,.17);
    border-radius:999px;
    background:rgba(3,28,50,.23);
    color:#f7fbff;
    font-size:11px;
    font-weight:720;
    backdrop-filter:blur(5px);
}
.dashboard-home-hero-photo{
    position:relative;
    min-height:188px;
    overflow:hidden;
}
.dashboard-home-hero-photo>img{
    width:100%;
    height:100%;
    display:block;
    object-fit:cover;
    object-position:center 43%;
}
.dashboard-home-photo-shade{
    position:absolute;
    inset:0;
    background:linear-gradient(90deg,#174f78 0%,rgba(23,79,120,.36) 22%,rgba(3,22,40,.08) 64%,rgba(3,22,40,.20) 100%);
}
.dashboard-home-crests{
    position:absolute;
    right:16px;
    top:15px;
    display:flex;
    align-items:center;
    gap:8px;
}
.dashboard-home-crests img{
    width:54px;
    height:54px;
    padding:4px;
    object-fit:contain;
    border-radius:14px;
    background:rgba(255,255,255,.92);
    box-shadow:0 7px 18px rgba(0,0,0,.17);
}
.dashboard-quick-heading{
    grid-column:1/-1;
    display:flex;
    align-items:flex-end;
    justify-content:space-between;
    gap:16px;
    margin-bottom:-2px;
}
.dashboard-quick-heading h2{
    margin:3px 0 0;
    font-size:19px;
}
.dashboard-quick-heading>a{
    color:var(--accent);
    font-size:12px;
    font-weight:800;
}
.dashboard-quick-card{
    min-height:104px;
    display:grid;
    grid-template-columns:54px minmax(0,1fr) auto;
    grid-template-rows:1fr;
    align-items:center;
    padding:14px 13px;
    border-radius:16px;
    border:1px solid color-mix(in srgb,currentColor 17%,transparent);
    box-shadow:0 7px 18px rgba(15,23,42,.09);
}
.dashboard-quick-icon{
    position:static;
    grid-column:1;
    width:44px;
    height:44px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:13px;
    background:rgba(255,255,255,.17);
    font-size:25px;
    opacity:1;
    transform:none;
}
.dashboard-quick-content{
    grid-column:2;
    padding:0;
    min-height:0;
    gap:3px;
}
.dashboard-quick-content strong{
    font-size:16px;
    line-height:1.15;
}
.dashboard-quick-content span{
    font-size:11.5px;
    line-height:1.3;
}
.dashboard-quick-more{
    grid-column:3;
    margin:0;
    padding:7px 8px;
    border-radius:10px;
    background:rgba(255,255,255,.13);
    font-size:0;
}
.dashboard-quick-more span{
    font-size:18px;
}
.dashboard-quick-badge{
    top:7px;
    left:7px;
}
.dashboard-main-grid,
.dashboard-lower-grid,
.dashboard-analytics-grid{
    gap:16px;
}
.dashboard-feature,
.dashboard-agenda,
.dashboard-my-day,
.dashboard-analytics-card,
.dashboard-lower-grid>.card{
    box-shadow:0 7px 22px rgba(15,23,42,.06);
}
body.cv-theme-dark .dashboard-home-hero{
    border-color:#35516c;
    background:linear-gradient(135deg,#071b2e 0%,#0d3454 58%,#15577b 100%);
    box-shadow:0 12px 34px rgba(0,0,0,.23);
}
body.cv-theme-dark .dashboard-home-photo-shade{
    background:linear-gradient(90deg,#0d3454 0%,rgba(13,52,84,.46) 25%,rgba(5,17,29,.10) 66%,rgba(5,17,29,.28) 100%);
}
body.cv-theme-dark .dashboard-quick-heading>a{color:#8ac9ff}
@media(min-width:1450px){
    .dashboard-quick-grid{grid-template-columns:repeat(4,minmax(0,1fr));}
}
@media(max-width:980px){
    .dashboard-home-hero{grid-template-columns:1fr minmax(230px,.52fr);}
    .dashboard-home-hero-copy{padding:21px 22px;}
    .dashboard-home-crests img{width:46px;height:46px;}
}
@media(max-width:760px){
    .dashboard-home-hero{grid-template-columns:1fr;}
    .dashboard-home-hero-copy{padding:19px 18px;}
    .dashboard-home-hero-photo{min-height:105px;max-height:130px;}
    .dashboard-home-photo-shade{background:linear-gradient(180deg,#174f78 0%,rgba(23,79,120,.05) 38%,rgba(3,22,40,.15) 100%);}
    .dashboard-home-crests{right:12px;top:10px;}
    .dashboard-home-crests img{width:42px;height:42px;border-radius:11px;}
    .dashboard-home-context{margin-top:12px;}
    .dashboard-quick-heading{align-items:flex-start;flex-direction:column;gap:5px;}
}
@media(max-width:520px){
    .dashboard-home-hero-photo{display:none;}
    .dashboard-home-hero-copy>p{font-size:13px;}
    .dashboard-home-context span{font-size:10.5px;}
    .dashboard-quick-card{min-height:92px;grid-template-columns:48px minmax(0,1fr) auto;padding:12px;}
    .dashboard-quick-icon{width:40px;height:40px;font-size:22px;}
}

/* ============================================================
   CampusVicenta V17.7.7.1 · Corrección Inicio compacto
   Evita que la fila del banner institucional se estire hasta ocupar
   el alto disponible del viewport dentro del grid del Dashboard.
   ============================================================ */
.dashboard-v143{
    align-content:start;
    grid-auto-rows:max-content;
}
.dashboard-home-hero{
    height:210px;
    min-height:210px;
    max-height:210px;
    align-self:start;
}
.dashboard-home-hero-photo{
    height:100%;
    min-height:0;
}
@media(max-width:980px){
    .dashboard-home-hero{
        height:200px;
        min-height:200px;
        max-height:200px;
    }
}
@media(max-width:760px){
    .dashboard-home-hero{
        height:auto;
        min-height:0;
        max-height:none;
    }
    .dashboard-home-hero-photo{
        height:120px;
        min-height:120px;
        max-height:120px;
    }
}
@media(max-width:520px){
    .dashboard-home-hero-photo{
        display:none;
        height:auto;
        min-height:0;
        max-height:none;
    }
}


/* ============================================================
   CampusVicenta V17.7.7.2 · Responsive móvil global
   Corrige la regla de sidebar reducible que, por orden de CSS, volvía a
   reservar 250px aun con el menú lateral oculto en pantallas <= 850px.
   ============================================================ */
@media(max-width:850px){
    .app-shell{
        display:block;
        width:100%;
        min-width:0;
    }
    .main,
    html.cv-sidebar-collapsed .main{
        margin-left:0!important;
        width:100%!important;
        max-width:100%!important;
        min-width:0!important;
    }
    .topbar{
        width:100%;
        min-width:0;
    }
    .content{
        width:100%;
        min-width:0;
        overflow-x:hidden;
    }
    .dashboard-v143,
    .dashboard-widget-block,
    .dashboard-home-hero,
    .dashboard-quick-grid,
    .dashboard-main-grid,
    .dashboard-lower-grid,
    .dashboard-analytics-grid{
        width:100%;
        max-width:100%;
        min-width:0;
    }
}

@media(max-width:520px){
    .topbar{
        min-height:62px;
        padding:8px 10px;
        gap:6px;
    }
    .topbar-left{
        min-width:0;
        gap:6px;
    }
    .page-context{
        display:none;
    }
    .top-actions{
        margin-left:auto;
        gap:5px;
        min-width:0;
    }
    .hamb,
    .top-search-btn,
    .top-icon-btn,
    .bell-link{
        flex:0 0 38px;
        width:38px;
        min-width:38px;
        height:38px;
        min-height:38px;
        padding:0;
        display:grid;
        place-items:center;
    }
    .user-menu-trigger{
        padding:3px;
    }
    .user-avatar{
        width:38px;
        height:38px;
    }
    .content{
        padding:12px;
    }
    .dashboard-v143{
        gap:14px;
    }
    .dashboard-home-hero{
        border-radius:15px;
    }
    .dashboard-home-hero-copy{
        padding:17px 15px;
    }
    .dashboard-home-hero h1{
        font-size:26px;
        line-height:1.06;
    }
    .dashboard-home-brandline{
        font-size:10px;
        gap:7px;
    }
    .dashboard-home-brandline img{
        width:24px;
        height:24px;
    }
    .dashboard-home-context{
        align-items:stretch;
        gap:6px;
    }
    .dashboard-home-context span{
        width:100%;
        min-height:0;
        padding:7px 9px;
        white-space:normal;
        overflow-wrap:anywhere;
    }
    .dashboard-quick-heading{
        width:100%;
        margin-bottom:0;
    }
    .dashboard-quick-heading h2{
        font-size:20px;
    }
    .dashboard-quick-card{
        width:100%;
        min-height:86px;
        grid-template-columns:48px minmax(0,1fr) 36px;
        padding:11px 10px;
        border-radius:14px;
    }
    .dashboard-quick-content strong{
        font-size:15px;
        overflow-wrap:anywhere;
    }
    .dashboard-quick-content span{
        font-size:11px;
        overflow-wrap:anywhere;
    }
    .dashboard-quick-more{
        width:32px;
        height:32px;
        padding:0;
        display:grid;
        place-items:center;
    }
    .dashboard-card-head{
        gap:9px;
    }
}

@media(max-width:360px){
    .content{padding:10px;}
    .topbar{padding-inline:8px;}
    .top-actions{gap:3px;}
    .hamb,
    .top-search-btn,
    .top-icon-btn,
    .bell-link{
        flex-basis:36px;
        width:36px;
        min-width:36px;
        height:36px;
        min-height:36px;
    }
    .user-avatar{width:36px;height:36px;}
    .dashboard-home-hero h1{font-size:24px;}
}

/* ============================================================
   CampusVicenta V17.7.7.3 · Inicio con galería rotativa + marca institucional en sidebar
   ============================================================ */
.dashboard-home-photo-slides{
    position:absolute;
    inset:0;
}
.dashboard-home-photo-slide{
    position:absolute;
    inset:0;
    width:100%;
    height:100%;
    display:block;
    object-fit:cover;
    object-position:center 43%;
    opacity:0;
    transform:scale(1.018);
    transition:opacity .85s ease,transform 6.5s ease;
    pointer-events:none;
}
.dashboard-home-photo-slide.is-active{
    opacity:1;
    transform:scale(1);
}
.dashboard-home-photo-dots{
    position:absolute;
    left:50%;
    bottom:12px;
    z-index:5;
    display:flex;
    align-items:center;
    gap:6px;
    transform:translateX(-50%);
    padding:5px 8px;
    border-radius:999px;
    background:rgba(4,25,43,.35);
    backdrop-filter:blur(5px);
}
.dashboard-home-photo-dot{
    width:7px;
    height:7px;
    padding:0;
    border:0;
    border-radius:50%;
    background:rgba(255,255,255,.55);
    cursor:pointer;
    transition:width .18s ease,background .18s ease;
}
.dashboard-home-photo-dot.is-active{
    width:19px;
    border-radius:999px;
    background:#fff;
}
.dashboard-home-photo-dot:focus-visible{
    outline:2px solid #fff;
    outline-offset:2px;
}

.sidebar-head{
    gap:10px;
}
.sidebar-brand{
    min-width:0;
    flex:1 1 auto;
    margin:0;
}
.sidebar-brand-full{
    display:flex;
    align-items:center;
    gap:9px;
    min-width:0;
}
.sidebar-brand-logos{
    display:flex;
    align-items:center;
    flex:0 0 auto;
}
.sidebar-brand-logos img{
    width:36px;
    height:36px;
    object-fit:contain;
    filter:drop-shadow(0 2px 4px rgba(0,0,0,.18));
}
.sidebar-brand-logos img+img{
    margin-left:-5px;
}
.sidebar-brand-copy{
    display:grid;
    min-width:0;
    line-height:1.05;
}
.sidebar-brand-copy strong{
    color:#fff;
    font-size:17px;
    font-weight:850;
    letter-spacing:-.025em;
    white-space:nowrap;
}
.sidebar-brand-copy strong em{
    color:#ffb000;
    font-style:normal;
}
.sidebar-brand-copy small{
    margin-top:4px;
    color:rgba(255,255,255,.73);
    font-size:9px;
    font-weight:600;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
}
.sidebar-brand-mini img{
    width:25px;
    height:25px;
    display:block;
    object-fit:contain;
}
@media(min-width:851px){
    html.cv-sidebar-collapsed .sidebar-brand{display:flex;justify-content:center;align-items:center;}
    html.cv-sidebar-collapsed .sidebar-brand-mini{display:inline-flex;align-items:center;justify-content:center;}
}
@media(max-width:850px){
    .sidebar-head{padding:16px 15px 12px;}
    .sidebar-brand-logos img{width:34px;height:34px;}
    .sidebar-brand-copy strong{font-size:16px;}
}
@media(max-width:520px){
    .sidebar-brand-logos img{width:31px;height:31px;}
    .sidebar-brand-copy strong{font-size:15px;}
    .sidebar-brand-copy small{font-size:8.5px;}
    .dashboard-home-photo-dots{display:none;}
}
@media(prefers-reduced-motion:reduce){
    .dashboard-home-photo-slide{transition:none!important;transform:none!important;}
}
