/* EduVirtual V2 Integral — módulos avanzados */
:root{
  --surface-2:#eef4f8;--surface-3:#e4edf3;--shadow-soft:0 12px 34px rgba(10,37,64,.08);
  --success-soft:#e7f7f1;--warning-soft:#fff5df;--danger-soft:#fff0f1;--violet-soft:#f0ecff;
}
body.theme-dark{color-scheme:dark;--ink:#e8f0f7;--muted:#9fb1c1;--line:#263b4d;--page:#07131d;--white:#0d1d29;--surface-2:#102431;--surface-3:#17303f;--navy-950:#020b11;--navy-900:#061726;--navy-800:#0b304d}
body.theme-dark .panel,body.theme-dark .stat-card,body.theme-dark .admin-card,body.theme-dark .table-wrap,body.theme-dark .resource-card,body.theme-dark .subject-card{box-shadow:none}
body.theme-dark input,body.theme-dark select,body.theme-dark textarea{color:var(--ink);background:#0b1c28;border-color:var(--line)}
body.theme-dark .btn-white{background:#102431;color:var(--ink);border-color:var(--line)}
body.compact-mode .content{padding-top:20px}.compact-mode .panel-pad,.compact-mode .form-section{padding:18px}.compact-mode .table td,.compact-mode .table th{padding-top:10px;padding-bottom:10px}

.v2-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 9px;border-radius:999px;background:color-mix(in srgb,var(--blue) 11%,transparent);color:var(--blue);font-size:.7rem;font-weight:900;letter-spacing:.04em;text-transform:uppercase}
.v2-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:18px}.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-7{grid-column:span 7}.span-6{grid-column:span 6}.span-5{grid-column:span 5}.span-4{grid-column:span 4}.span-3{grid-column:span 3}
.metric-card{position:relative;overflow:hidden;padding:22px;border:1px solid var(--line);border-radius:20px;background:var(--white);box-shadow:var(--shadow-soft)}
.metric-card:after{content:"";position:absolute;width:86px;height:86px;right:-25px;bottom:-33px;border-radius:50%;background:color-mix(in srgb,var(--metric,var(--blue)) 12%,transparent)}
.metric-card .metric-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:color-mix(in srgb,var(--metric,var(--blue)) 13%,transparent);color:var(--metric,var(--blue));margin-bottom:18px}.metric-card strong{display:block;font-size:2rem;line-height:1;letter-spacing:-.04em}.metric-card>span{display:block;margin-top:8px;color:var(--muted);font-size:.82rem}.metric-card small{display:block;margin-top:10px;color:var(--metric,var(--blue));font-weight:800}
.quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.quick-card{padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--white);text-align:left;color:var(--ink);transition:.18s transform,.18s border-color}.quick-card:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--blue) 45%,var(--line))}.quick-card .stat-icon{margin-bottom:12px}.quick-card strong{display:block}.quick-card span{display:block;color:var(--muted);font-size:.78rem;margin-top:5px}
.progress-ring{--value:0;--ring:var(--blue);width:112px;height:112px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--ring) calc(var(--value)*1%),var(--surface-3) 0);position:relative}.progress-ring:after{content:"";width:82px;height:82px;border-radius:50%;background:var(--white);position:absolute}.progress-ring strong{z-index:1;font-size:1.35rem}.progress-ring small{z-index:1;position:absolute;top:64px;color:var(--muted);font-size:.62rem}
.subject-progress{display:grid;grid-template-columns:minmax(130px,1fr) 2fr 55px;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.subject-progress:last-child{border-bottom:0}.bar{height:9px;border-radius:999px;background:var(--surface-3);overflow:hidden}.bar>span{display:block;height:100%;width:var(--value);background:var(--bar,var(--blue));border-radius:inherit}.bar.danger>span{background:var(--red)}.bar.warning>span{background:var(--orange)}
.chart-bars{display:flex;align-items:flex-end;gap:10px;height:210px;padding:18px 4px 30px;border-bottom:1px solid var(--line)}.chart-bar{flex:1;min-width:18px;height:var(--height);max-height:100%;position:relative;border-radius:8px 8px 2px 2px;background:linear-gradient(180deg,var(--blue-2),var(--blue));opacity:.88}.chart-bar:hover{opacity:1}.chart-bar span{position:absolute;bottom:-25px;left:50%;transform:translateX(-50%);font-size:.62rem;color:var(--muted);white-space:nowrap}.chart-bar strong{position:absolute;top:-21px;left:50%;transform:translateX(-50%);font-size:.66rem}

.tabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:18px}.tab-btn{border:1px solid var(--line);border-radius:999px;background:var(--white);color:var(--muted);font-weight:800;font-size:.76rem;padding:9px 13px}.tab-btn.active{background:var(--navy-900);border-color:var(--navy-900);color:#fff}
.empty-v2{padding:34px;border:1px dashed var(--line);border-radius:18px;text-align:center;color:var(--muted);background:color-mix(in srgb,var(--white) 70%,transparent)}.empty-v2 .stat-icon{margin:0 auto 12px}.empty-v2 h3{margin:0 0 7px;color:var(--ink)}.empty-v2 p{max-width:560px;margin:0 auto 16px}

.gradebook{overflow:auto}.gradebook table{min-width:760px}.gradebook .score-input{width:76px;padding:8px;border:1px solid var(--line);border-radius:9px;background:var(--white);color:var(--ink)}
.weight-row{display:grid;grid-template-columns:minmax(140px,1fr) 2fr 85px 70px;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.weight-row:last-child{border-bottom:0}.weight-chip{padding:5px 9px;border-radius:999px;font-size:.7rem;font-weight:900;color:var(--category,var(--blue));background:color-mix(in srgb,var(--category,var(--blue)) 12%,transparent)}
.rubric-card{border:1px solid var(--line);border-radius:18px;background:var(--white);overflow:hidden}.rubric-card header{padding:17px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:14px;align-items:center}.rubric-card .rubric-body{padding:0 18px}.criterion-row{display:grid;grid-template-columns:minmax(0,1fr) 85px auto;gap:12px;padding:13px 0;border-bottom:1px solid var(--line);align-items:center}.criterion-row:last-child{border-bottom:0}

.calendar-agenda{display:grid;gap:10px}.agenda-item{display:grid;grid-template-columns:68px minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:15px;background:var(--white)}.agenda-date{border-radius:12px;padding:8px;text-align:center;background:var(--surface-2)}.agenda-date strong{display:block;font-size:1.1rem}.agenda-date span{font-size:.62rem;font-weight:900;color:var(--muted);text-transform:uppercase}.agenda-type{width:9px;height:9px;display:inline-block;border-radius:50%;margin-right:6px;background:var(--event,var(--blue))}

.exam-card{padding:19px;border:1px solid var(--line);border-radius:18px;background:var(--white)}.exam-card header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.exam-card h3{margin:0 0 7px}.exam-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}.exam-question{padding:20px;border:1px solid var(--line);border-radius:18px;background:var(--white);margin-bottom:14px}.exam-question h3{font-size:1rem;margin:0 0 14px}.exam-option{display:flex;gap:10px;align-items:flex-start;padding:11px 12px;border:1px solid var(--line);border-radius:12px;margin:8px 0}.exam-option:hover{border-color:var(--blue)}.exam-timer{position:sticky;top:78px;z-index:5;display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border:1px solid var(--line);border-radius:14px;background:color-mix(in srgb,var(--white) 92%,transparent);backdrop-filter:blur(12px);margin-bottom:16px}

.family-child{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:16px;align-items:center;padding:18px;border:1px solid var(--line);border-radius:18px;background:var(--white)}.family-child .avatar{width:54px;height:54px}.family-stats{display:flex;gap:9px;flex-wrap:wrap;margin-top:8px}.family-stat{font-size:.7rem;font-weight:800;padding:5px 9px;background:var(--surface-2);border-radius:999px}
.dossier-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:18px;align-items:center}.dossier-head .avatar{width:72px;height:72px;font-size:1.25rem}.timeline{position:relative;padding-left:24px}.timeline:before{content:"";position:absolute;left:7px;top:8px;bottom:8px;width:2px;background:var(--line)}.timeline-item{position:relative;padding:0 0 22px}.timeline-item:before{content:"";position:absolute;left:-22px;top:6px;width:10px;height:10px;border:3px solid var(--white);background:var(--blue);border-radius:50%;box-shadow:0 0 0 1px var(--line)}

.role-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:14px;align-items:center;padding:15px 0;border-bottom:1px solid var(--line)}.role-card:last-child{border-bottom:0}.role-pill{padding:5px 9px;border-radius:999px;background:var(--surface-2);font-size:.66rem;font-weight:900;text-transform:uppercase}.role-superadmin{color:#7350c5;background:#efeaff}.role-admin{color:#b54655;background:#ffedef}.role-secretary{color:#15775e;background:#e5f6f0}.role-coordinator{color:#986515;background:#fff1d7}.role-teacher{color:#176fae;background:#e5f3ff}.role-student{color:#607384;background:#edf2f5}.role-guardian{color:#8b5b19;background:#fff1dc}

.chat-layout{display:grid;grid-template-columns:300px minmax(0,1fr);min-height:560px;border:1px solid var(--line);border-radius:20px;overflow:hidden;background:var(--white)}.chat-list{border-right:1px solid var(--line);overflow:auto;max-height:650px}.chat-list-head{padding:15px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}.conversation-btn{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;text-align:left;padding:14px;color:var(--ink)}.conversation-btn.active{background:color-mix(in srgb,var(--blue) 8%,transparent)}.conversation-btn strong{display:block}.conversation-btn span{display:block;color:var(--muted);font-size:.72rem;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-main{display:grid;grid-template-rows:auto 1fr auto;min-width:0}.chat-title{padding:16px 18px;border-bottom:1px solid var(--line)}.messages{padding:18px;overflow:auto;max-height:520px;display:flex;flex-direction:column;gap:10px;background:color-mix(in srgb,var(--page) 60%,var(--white))}.message{max-width:min(78%,620px);padding:11px 13px;border:1px solid var(--line);border-radius:14px 14px 14px 3px;background:var(--white);align-self:flex-start}.message.own{align-self:flex-end;border-color:color-mix(in srgb,var(--blue) 25%,var(--line));background:color-mix(in srgb,var(--blue) 9%,var(--white));border-radius:14px 14px 3px 14px}.message strong{display:block;font-size:.7rem;margin-bottom:4px}.message time{display:block;color:var(--muted);font-size:.6rem;text-align:right;margin-top:5px}.chat-form{display:grid;grid-template-columns:1fr auto;gap:10px;padding:12px;border-top:1px solid var(--line)}

.audit-row{display:grid;grid-template-columns:150px 165px 1fr auto;gap:14px;align-items:center;padding:13px 0;border-bottom:1px solid var(--line)}.audit-row:last-child{border-bottom:0}.audit-action{font-size:.66rem;text-transform:uppercase;font-weight:900;letter-spacing:.04em;color:var(--blue)}
.security-card{padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--white)}.security-card h3{margin:0 0 7px}.security-card p{margin:0 0 13px;color:var(--muted);font-size:.82rem}

.document-card{padding:20px;border:1px solid var(--line);border-radius:18px;background:var(--white)}.document-card .doc-icon{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--surface-2);margin-bottom:14px}.document-card h3{margin:0 0 7px}.document-card p{margin:0 0 16px;color:var(--muted);font-size:.8rem}

.brand-preview{overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--white)}.brand-preview .preview-cover{height:130px;background:linear-gradient(135deg,var(--navy-950),var(--navy-800));background-size:cover;background-position:center}.brand-preview .preview-body{padding:18px;display:flex;gap:14px;align-items:center}.brand-logo-img{width:58px;height:58px;border-radius:14px;object-fit:cover;background:var(--surface-2)}
.logo-small{width:32px;height:32px;border-radius:9px;object-fit:cover}

.install-banner{display:flex;justify-content:space-between;gap:14px;align-items:center;padding:14px 16px;margin-bottom:18px;border:1px solid color-mix(in srgb,var(--blue) 30%,var(--line));border-radius:15px;background:color-mix(in srgb,var(--blue) 7%,var(--white))}.install-banner strong{display:block}.install-banner span{display:block;color:var(--muted);font-size:.75rem;margin-top:3px}

@media(max-width:1100px){.span-8,.span-7,.span-5,.span-4,.span-3{grid-column:span 6}.quick-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.chat-layout{grid-template-columns:240px minmax(0,1fr)}}
@media(max-width:760px){.v2-grid{grid-template-columns:1fr}.span-12,.span-8,.span-7,.span-6,.span-5,.span-4,.span-3{grid-column:auto}.quick-grid{grid-template-columns:1fr}.subject-progress{grid-template-columns:1fr}.weight-row{grid-template-columns:1fr auto}.weight-row .bar{grid-column:1/-1}.agenda-item{grid-template-columns:58px 1fr}.agenda-item>.chip{display:none}.family-child,.dossier-head{grid-template-columns:auto 1fr}.family-child>.btn,.dossier-head>.page-actions{grid-column:1/-1}.chat-layout{grid-template-columns:1fr}.chat-list{border-right:0;border-bottom:1px solid var(--line);max-height:240px}.messages{min-height:330px}.audit-row{grid-template-columns:1fr}.chart-bars{gap:5px}.chart-bar span{font-size:.52rem}}

/* Relacionar columnas en exámenes */
.matching-grid{display:grid;gap:10px;margin-top:14px}.matching-row{display:grid;grid-template-columns:minmax(150px,.8fr) minmax(180px,1.2fr);align-items:center;gap:14px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--white)}.matching-row strong{font-size:.82rem;color:var(--ink)}@media(max-width:680px){.matching-row{grid-template-columns:1fr}}

/* Sidebar scrolling fix 2.0.2 */
.sidebar{height:100dvh;max-height:100dvh;overflow:hidden}
.side-scroll{flex:1 1 auto;min-height:0;overflow-y:auto!important;overflow-x:hidden;overscroll-behavior-y:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch}
.side-scroll .side-spacer{min-height:14px}
@media(max-width:860px){.sidebar{height:100dvh;max-height:100dvh}}


/* V2.1: scrolls independientes y estables. El documento no se desplaza cuando hay sesión;
   el menú y el contenido principal manejan su propio desplazamiento. */
body.session-active{overflow:hidden}
body.session-active .shell{height:100dvh;min-height:0;overflow:hidden}
body.session-active .main{height:100dvh;min-height:0;display:flex;flex-direction:column;overflow:hidden}
body.session-active .topbar{flex:0 0 auto}
body.session-active .content{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-gutter:stable;width:min(1320px,100%)}
.sidebar{height:100dvh!important;max-height:100dvh!important;min-height:0;overflow:hidden!important}
.side-head,.profile{flex:0 0 auto}
.side-scroll{flex:1 1 auto!important;min-height:0!important;overflow-y:auto!important;overflow-x:hidden!important;overscroll-behavior-y:none!important;touch-action:pan-y;-webkit-overflow-scrolling:touch;scrollbar-gutter:stable}
.side-scroll::-webkit-scrollbar{width:7px}.side-scroll::-webkit-scrollbar-thumb{background:rgba(184,214,231,.28);border-radius:999px}.side-scroll::-webkit-scrollbar-track{background:transparent}
@media(max-width:860px){body.session-active .main{height:100dvh}.sidebar{height:100dvh!important;max-height:100dvh!important}}
