/* ESEM Campus v0.9 · evolución visual institucional.
   Capa exclusivamente presentacional: consolida tokens y componentes existentes. */
@font-face{font-family:"ESEM Manrope";src:url("/static/public/fonts/Manrope.woff2") format("woff2");font-style:normal;font-weight:400 850;font-display:swap}

:root{
  --esem-petrol-950:#082f3d;
  --esem-petrol-900:#0b3d4d;
  --esem-petrol-800:#10566a;
  --esem-teal-700:#08777c;
  --esem-teal-600:#0d8f91;
  --esem-teal-100:#dff4f1;
  --esem-blue-100:#e8f1f7;
  --esem-green-700:#267158;
  --esem-green-100:#e4f4ec;
  --esem-amber-700:#8b6118;
  --esem-amber-100:#fff1d2;
  --esem-red-700:#983c43;
  --esem-red-100:#fae7e8;
  --esem-slate-950:#142f39;
  --esem-slate-700:#49616a;
  --esem-slate-500:#72868d;
  --esem-slate-300:#c9d6d9;
  --esem-slate-200:#dce5e7;
  --esem-slate-100:#edf3f3;
  --esem-canvas:#f3f7f6;
  --esem-surface:#fff;
  --esem-space-1:4px;
  --esem-space-2:8px;
  --esem-space-3:12px;
  --esem-space-4:16px;
  --esem-space-5:24px;
  --esem-space-6:32px;
  --esem-space-7:48px;
  --esem-radius-sm:10px;
  --esem-radius-md:16px;
  --esem-radius-lg:22px;
  --esem-radius-xl:28px;
  --esem-shadow-xs:0 1px 2px rgba(8,47,61,.04);
  --esem-shadow-sm:0 8px 24px rgba(8,47,61,.06);
  --esem-shadow-md:0 18px 48px rgba(8,47,61,.10);
  --ink:var(--esem-slate-950);
  --muted:var(--esem-slate-700);
  --paper:var(--esem-canvas);
  --line:var(--esem-slate-200);
  --accent:var(--esem-petrol-900);
  --accent2:var(--esem-teal-700);
  --success:var(--esem-green-700);
  --danger:var(--esem-red-700);
  --shadow:var(--esem-shadow-md);
  --radius:var(--esem-radius-lg);
  --ds-primary:var(--esem-petrol-800);
  --ds-primary-hover:var(--esem-petrol-950);
  --ds-success:var(--esem-green-700);
  --ds-warning:var(--esem-amber-700);
  --ds-danger:var(--esem-red-700);
  --ds-info:var(--esem-teal-700);
  --ds-surface-subtle:var(--esem-slate-100);
  --ds-border:var(--esem-slate-200);
  --ds-text:var(--esem-slate-950);
  --ds-text-muted:var(--esem-slate-700);
  --ds-radius-sm:var(--esem-radius-sm);
  --ds-radius-md:var(--esem-radius-md);
  --ds-radius-lg:var(--esem-radius-lg);
  --ds-shadow-sm:var(--esem-shadow-sm);
  --ds-shadow-md:var(--esem-shadow-md);
}

html{font-family:"ESEM Manrope",Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;font-size:16px;line-height:1.5;background:var(--esem-canvas);color:var(--esem-slate-950)}
body{font-weight:460;letter-spacing:-.006em}
.app-body{background:
  radial-gradient(circle at 8% -10%,rgba(13,143,145,.08),transparent 32rem),
  linear-gradient(180deg,#f8fbfa 0,var(--esem-canvas) 38rem)}
h1,h2,h3{color:var(--esem-slate-950);font-weight:760;letter-spacing:-.035em;text-wrap:balance}
p{line-height:1.62}
.eyebrow,.ds-eyebrow,[class$="-card"]>small,[class$="-hero"] small{font-weight:780;letter-spacing:.09em}

/* Cabecera y navegación */
.topbar{height:76px;padding:0 max(28px,4vw);border-bottom:1px solid rgba(201,214,217,.8);background:rgba(255,255,255,.88);box-shadow:0 4px 18px rgba(8,47,61,.035);backdrop-filter:blur(18px) saturate(150%)}
.brand{gap:12px}.brand .seal{width:48px;height:48px;border:0;border-radius:15px;background:linear-gradient(145deg,var(--esem-petrol-900),var(--esem-teal-700));color:#fff;box-shadow:0 7px 18px rgba(8,71,82,.2)}
.brand b{font-size:15px;letter-spacing:-.01em}.brand small{font-size:11px}
.top-actions{gap:10px}.top-communications,.switch-space,.top-actions .ghost{min-height:40px;padding:9px 13px;border:1px solid transparent;border-radius:11px;color:var(--esem-petrol-800);font-size:12px;font-weight:720}
.top-communications:hover,.switch-space:hover,.top-actions .ghost:hover{background:var(--esem-slate-100);border-color:var(--esem-slate-200)}
.system-status{padding:7px 11px;border:1px solid #cfe7df;border-radius:999px;background:#f0faf6;color:#356757;font-size:11px}
.system-status i{box-shadow:0 0 0 4px rgba(53,180,132,.12)}
.identity{padding:4px 10px;border-left:1px solid var(--esem-slate-200)}
.canvas-sidebar{background:linear-gradient(180deg,var(--esem-petrol-950),#0b3a49 62%,#0d4856);box-shadow:12px 0 36px rgba(8,47,61,.12)}
.canvas-brand-seal{border-radius:13px;background:rgba(255,255,255,.12);box-shadow:inset 0 0 0 1px rgba(255,255,255,.16)}
.canvas-nav a{min-height:48px;border-radius:12px;color:rgba(255,255,255,.74);transition:background .16s ease,color .16s ease,transform .16s ease}
.canvas-nav a:hover{background:rgba(255,255,255,.08);color:#fff;transform:translateX(2px)}
.canvas-nav a.active{background:#fff;color:var(--esem-petrol-900);box-shadow:0 10px 24px rgba(0,0,0,.13)}

/* Botones consistentes */
:where(.btn,.primary,.secondary,.ghost,.danger,.success,.ghost-link,.meet-cta,.future-rail-button){min-height:44px;padding:10px 16px;border-radius:11px;font-size:13px;font-weight:760;letter-spacing:-.005em;box-shadow:none;transition:transform .14s ease,box-shadow .14s ease,background-color .14s ease,border-color .14s ease,color .14s ease}
:where(.btn,.primary,.secondary,.ghost,.danger,.success,.ghost-link,.meet-cta,.future-rail-button):hover{transform:translateY(-1px)}
.primary,.btn-primary{background:linear-gradient(135deg,var(--esem-petrol-800),var(--esem-petrol-900));border-color:var(--esem-petrol-900);box-shadow:0 7px 16px rgba(10,69,84,.14)}
.primary:hover,.btn-primary:hover{background:var(--esem-petrol-950);box-shadow:0 9px 20px rgba(10,69,84,.2)}
.secondary,.btn-secondary{border-color:#b9ced2;background:rgba(255,255,255,.95);color:var(--esem-petrol-800)}
.secondary:hover,.btn-secondary:hover{border-color:#83aeb4;background:#f4f9f9}
.ghost,.ghost-link,.btn-ghost{color:var(--esem-petrol-800)}
.success,.btn-success{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--esem-green-700);background:var(--esem-green-700);color:#fff}
.danger,.btn-danger,.confirm-danger{background:var(--esem-red-700);border-color:var(--esem-red-700)}
:where(button,a,summary):focus-visible{outline:3px solid rgba(13,143,145,.28)!important;outline-offset:3px}
:where(button,.btn,.primary,.secondary,.ghost,.danger,.success)[disabled],.disabled{filter:saturate(.55);opacity:.5;transform:none!important}

/* Superficies, jerarquía y formularios */
.shell,.future-shell{width:min(1440px,92vw);padding-top:36px;padding-bottom:56px}
.ds-page-header{padding:28px 30px;border-color:rgba(201,214,217,.86);border-radius:var(--esem-radius-xl);box-shadow:var(--esem-shadow-sm)}
.ds-page-header h1{font-size:clamp(30px,3.8vw,48px);line-height:1.05}
.ds-page-header h1+p{font-size:15px}
.ds-card,.future-focus-card,.future-course-card,.future-info-card,.future-rail-card,.teacher-card,.academic-course-directory,.academic-create-card,.coursework-panel,.coursework-create-card,.material-action-card,.materials-table{border-color:rgba(201,214,217,.85)!important;border-radius:var(--esem-radius-lg)!important;background:rgba(255,255,255,.96)!important;box-shadow:var(--esem-shadow-xs)!important}
.future-course-card,.future-info-card,.future-rail-card,.material-action-card,.academic-course-row{transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease}
.future-course-card:hover,.future-info-card:hover,.material-action-card:hover{transform:translateY(-2px);border-color:#a9c4c8!important;box-shadow:var(--esem-shadow-sm)!important}
.future-section-head{margin-bottom:16px}.future-section-head h2{font-size:26px}.future-section-head p{color:var(--esem-slate-700)}
label{color:#39545e;font-size:12px;font-weight:700}
:where(input:not([type="checkbox"]):not([type="radio"]),select,textarea){min-height:46px;padding:11px 13px;border-color:#c6d5d8;border-radius:11px;background:#fff;color:var(--esem-slate-950)}
:where(input:not([type="checkbox"]):not([type="radio"]),select,textarea):focus{border-color:var(--esem-teal-700);box-shadow:0 0 0 4px rgba(13,143,145,.11);outline:0}
:where(input[type="checkbox"],input[type="radio"]){accent-color:var(--esem-teal-700)}

/* Dashboard modular */
.future-welcome-strip,.future-hero-teacher,.academic-admin-hero{position:relative;overflow:hidden;background:linear-gradient(135deg,#fff 0,#f5faf9 58%,#e7f4f2 100%)}
.future-welcome-strip:after,.future-hero-teacher:after,.academic-admin-hero:after{content:"";position:absolute;right:-70px;bottom:-115px;width:250px;height:250px;border:44px solid rgba(13,143,145,.07);border-radius:50%;pointer-events:none}
.future-student-grid{gap:20px}.future-focus-card{position:relative;overflow:hidden;padding:30px;background:linear-gradient(135deg,var(--esem-petrol-900),var(--esem-petrol-800))!important;color:#fff!important;box-shadow:0 18px 42px rgba(8,47,61,.18)!important}
.future-focus-card h2,.future-focus-card p{color:#fff}.future-focus-card>small{color:#9fdfd8}.future-focus-card:after{content:"";position:absolute;right:-54px;top:-62px;width:180px;height:180px;border-radius:50%;background:rgba(255,255,255,.055)}
.future-stat-card{border:1px solid var(--esem-slate-200);border-radius:var(--esem-radius-md);background:#fff;box-shadow:var(--esem-shadow-xs)}
.future-stat-card b{color:var(--esem-petrol-900);font-size:30px}.future-stat-card span{color:var(--esem-slate-700)}
.future-course-grid{gap:18px}.future-course-card{padding:24px}.future-course-card h3{font-size:23px}.future-course-card p{color:var(--esem-slate-700)}
.course-progress-line,.coursework-progress>div,[role="progressbar"]{background:#dfe9e9}.course-progress-line i,.coursework-progress i,[role="progressbar"]>i{background:linear-gradient(90deg,var(--esem-teal-700),#32a889)}
.future-right-rail{gap:16px}.future-rail-card{padding:20px}.future-rail-head{padding-bottom:12px;border-bottom:1px solid var(--esem-slate-200)}
.future-rail-item{padding:15px 0;border-bottom:1px solid var(--esem-slate-100)}
.dashboard-tools{display:flex;justify-content:flex-end;align-items:center;gap:10px;flex-wrap:wrap;margin:-18px 0 20px}
.widget-library{position:relative;z-index:6}.widget-library>summary{display:inline-flex;align-items:center;gap:8px;min-height:42px;padding:9px 14px;border:1px solid #b9ced2;border-radius:11px;background:#fff;color:var(--esem-petrol-800);font-size:12px;font-weight:780;cursor:pointer;list-style:none;box-shadow:var(--esem-shadow-xs)}
.widget-library>summary::-webkit-details-marker{display:none}.widget-library>summary:before{content:"+";display:grid;place-items:center;width:21px;height:21px;border-radius:7px;background:var(--esem-teal-100);color:var(--esem-teal-700);font-size:16px}
.widget-library-panel{position:absolute;right:0;top:calc(100% + 8px);width:min(680px,calc(100vw - 32px));padding:18px;border:1px solid var(--esem-slate-200);border-radius:18px;background:#fff;box-shadow:0 22px 60px rgba(8,47,61,.18)}
.widget-library-panel>header{display:flex;align-items:start;justify-content:space-between;gap:20px;margin-bottom:14px}.widget-library-panel h2{margin:0 0 3px;font-size:20px}.widget-library-panel p{margin:0;color:var(--esem-slate-700);font-size:12px}.widget-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.widget-option{display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:10px;padding:12px;border:1px solid var(--esem-slate-200);border-radius:13px;background:#f9fbfb;text-align:left}.widget-option>span:first-child{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;background:var(--esem-teal-100);color:var(--esem-teal-700);font-size:17px}.widget-option>span:nth-child(2){display:grid}.widget-option b{font-size:12px}.widget-option small{color:var(--esem-slate-700);font-size:10px}.widget-option button{min-height:34px;padding:6px 9px;border:1px solid #b8cdd1;border-radius:9px;background:#fff;color:var(--esem-petrol-800);font-size:10px;font-weight:780;cursor:pointer}.widget-option button[aria-pressed="false"]{background:var(--esem-petrol-800);color:#fff}.dashboard-widget.is-widget-hidden{display:none!important}
.enrollment-code-dialog{width:min(580px,calc(100vw - 32px))}.enrollment-code-card{position:relative}.enrollment-code-close{position:absolute;top:16px;right:16px;width:38px;height:38px;border:0;border-radius:50%;background:#edf5f5;color:var(--esem-petrol-800);font-size:24px;cursor:pointer}.enrollment-code-form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:12px;margin-top:20px}.enrollment-code-form label{display:grid;gap:7px;color:var(--esem-petrol-800);font-size:12px;font-weight:800}.enrollment-code-form input{text-transform:uppercase}.enrollment-code-error{margin:16px 0 0}.enrollment-code-preview{display:grid;gap:12px;margin-top:18px;padding:16px;border:1px solid var(--esem-slate-200);border-radius:14px;background:var(--esem-teal-050,#f2f8f8)}.enrollment-code-preview>div{display:grid;gap:3px}.enrollment-code-preview small{color:var(--esem-teal-700);font-size:10px;font-weight:850;letter-spacing:.08em}.enrollment-code-preview b{color:var(--esem-petrol-900);font-size:16px}.enrollment-code-preview span{color:var(--esem-slate-700);font-size:12px}
.batch-enrollment-panel{margin:0 0 16px;border:1px solid var(--esem-slate-200);border-radius:14px;background:#f8fbfb}.batch-enrollment-panel>summary{padding:13px 15px;color:var(--esem-petrol-800);font-size:12px;font-weight:850;cursor:pointer}.batch-enrollment-panel>div{display:grid;gap:14px;padding:0 15px 15px}.batch-enrollment-panel p{margin:0;color:var(--esem-slate-700);font-size:12px;line-height:1.5}.batch-enrollment-panel form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}.batch-enrollment-panel form label{display:grid;gap:6px;font-size:11px;font-weight:800}.batch-summary-list{display:grid;gap:10px}.batch-summary-card{padding:12px;border:1px solid var(--esem-slate-200);border-radius:12px;background:#fff}.batch-summary-card.is-linked{border-color:var(--esem-teal-500);box-shadow:inset 3px 0 var(--esem-teal-500)}.batch-summary-card>header{display:flex;justify-content:space-between;gap:10px;margin-bottom:10px}.batch-summary-card>header span{color:var(--esem-teal-700);font-size:10px;font-weight:800}.batch-summary-card dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0}.batch-summary-card dl div{display:grid;gap:2px}.batch-summary-card dt{color:var(--esem-slate-700);font-size:9px;text-transform:uppercase}.batch-summary-card dd{margin:0;color:var(--esem-petrol-900);font-size:16px;font-weight:850}

/* Curso, estructura y Meet */
.backlink{display:inline-flex;align-items:center;min-height:38px;margin:0 0 14px;color:var(--esem-petrol-800);font-size:12px;font-weight:720}
.future-course-hero{position:relative;overflow:hidden;padding:32px;background:linear-gradient(135deg,var(--esem-petrol-950),var(--esem-petrol-800) 66%,var(--esem-teal-700))!important;border:0!important;box-shadow:0 22px 50px rgba(8,47,61,.2)!important}
.future-course-hero h1,.future-course-hero p{color:#fff!important}.future-course-hero:after{content:"";position:absolute;right:-85px;top:-110px;width:300px;height:300px;border:50px solid rgba(255,255,255,.06);border-radius:50%}
.course-identity-grid{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0 0}.course-identity-grid span{display:grid;gap:1px;min-width:120px;padding:9px 12px;border:1px solid rgba(255,255,255,.14);border-radius:11px;background:rgba(255,255,255,.08);color:#fff}.course-identity-grid small{color:rgba(255,255,255,.64);font-size:9px}.course-identity-grid b{font-size:12px}
.future-module-card{overflow:hidden;border:1px solid var(--esem-slate-200);border-radius:var(--esem-radius-lg);background:#fff;box-shadow:var(--esem-shadow-xs)}
.future-module-head{padding:22px 24px;background:linear-gradient(180deg,#fff,#fafcfc)}
.future-module-head>div>small{color:var(--esem-teal-700)}
.future-lesson-row{transition:background .14s ease,transform .14s ease}.future-lesson-row:hover{background:#f2f8f7;transform:translateX(2px)}
.future-meet-card{border:1px solid #c6e1dd;background:linear-gradient(135deg,#edf9f6,#f8fcfb);box-shadow:none}.future-meet-card.pending{border-color:#ead7a7;background:#fff8e8}
.status,.account-state,.badge,.academic-result,.submission-state,.risk-badge{min-height:27px;padding:5px 9px;border-radius:999px;font-size:10px;font-weight:820;letter-spacing:.015em}
.academic-approved{background:var(--esem-green-100);color:var(--esem-green-700)}.academic-warning{background:var(--esem-amber-100);color:var(--esem-amber-700)}.academic-failed{background:var(--esem-red-100);color:var(--esem-red-700)}.academic-pending{background:var(--esem-blue-100);color:#496b82}

/* Materiales */
.materials-page{padding-top:30px}.materials-hero{padding:28px 30px;background:linear-gradient(135deg,var(--esem-petrol-950),var(--esem-petrol-800))!important;color:#fff!important;border:0!important;box-shadow:0 18px 42px rgba(8,47,61,.18)!important}.materials-hero h1,.materials-hero p,.materials-hero .eyebrow{color:#fff!important}.materials-hero p{opacity:.78}
.new-material-menu>summary{min-height:46px;padding:12px 18px;border-radius:12px;background:#fff;color:var(--esem-petrol-900);box-shadow:0 9px 24px rgba(0,0,0,.12)}
.new-material-menu nav{border-color:var(--esem-slate-200);border-radius:14px;box-shadow:0 20px 50px rgba(8,47,61,.2)}.new-material-menu nav a:hover{background:var(--esem-teal-100)}
.materials-metrics{gap:12px}.materials-metrics>div{position:relative;overflow:hidden;padding:17px 19px;border-color:var(--esem-slate-200);border-radius:15px;box-shadow:var(--esem-shadow-xs)}.materials-metrics>div:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--esem-teal-600)}
.material-action-card.primary-action{border-color:#bfdad7!important}.drive-dropzone{border-color:#8ebfc1;background:#f1faf8}.drive-dropzone:hover{border-color:var(--esem-teal-700);background:#e9f7f4}
.materials-toolbar{border-color:var(--esem-slate-200);background:#fff;box-shadow:var(--esem-shadow-xs)}
.materials-table-head{background:var(--esem-petrol-900);color:#fff}.material-row:hover{background:#f7fbfa}.file-kind{background:var(--esem-teal-100);color:var(--esem-teal-700)}
.upload-progress-row{border:1px solid #d5e6e4;background:#f0f8f7}.upload-progress-row progress{accent-color:var(--esem-teal-700)}

/* Seguimiento y administración */
.coursework-hero{border:0;background:linear-gradient(135deg,var(--esem-petrol-950),var(--esem-petrol-800));box-shadow:0 18px 44px rgba(8,47,61,.18)}
.coursework-kpis,.academic-kpis{gap:12px}.coursework-kpis article,.academic-kpis article{border-color:var(--esem-slate-200);border-radius:15px;background:#fff;box-shadow:var(--esem-shadow-xs)}
.coursework-kpis article b,.academic-kpis article b{color:var(--esem-petrol-900)}
.coursework-student-row,.submission-review-card{border-color:var(--esem-slate-200);border-radius:15px}.coursework-student-row:hover{border-color:#aac7c9;background:#fafdfc}
.coursework-risk-filters a{border-radius:10px}.coursework-risk-filters a.active{background:var(--esem-petrol-900);color:#fff}
.academic-course-row{border-color:var(--esem-slate-200);background:#fff}.academic-course-row:hover{border-color:#a6c3c7;box-shadow:var(--esem-shadow-sm)}

/* Microinteracciones y responsive */
@keyframes esem-rise{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
.future-course-card,.future-info-card,.future-rail-card,.material-action-card,.future-module-card{animation:esem-rise .28s ease both}
@media(max-width:1100px){.future-lower-grid{grid-template-columns:minmax(0,1fr) 300px}.widget-library-panel{width:min(620px,calc(100vw - 32px))}}
@media(max-width:860px){
  .shell,.future-shell{width:100%;padding-top:22px;padding-bottom:36px}.ds-page-header{padding:22px;border-radius:20px}.ds-page-header h1{font-size:clamp(29px,8vw,39px)}
  .dashboard-tools{margin:-10px 0 16px}.dashboard-tools>*{flex:1 1 auto;text-align:center}.widget-library{width:100%}.widget-library>summary{justify-content:center;width:100%}.widget-library-panel{position:static;width:100%;margin-top:8px}.widget-options{grid-template-columns:1fr}.enrollment-code-form,.batch-enrollment-panel form{grid-template-columns:1fr}.batch-summary-card dl{grid-template-columns:repeat(2,minmax(0,1fr))}
  .future-student-grid,.future-lower-grid,.material-actions-grid,.coursework-layout{grid-template-columns:1fr}.future-student-side{grid-template-columns:repeat(3,1fr)}
  .future-course-hero{padding:24px}.course-identity-grid span{min-width:calc(50% - 4px)}
  .materials-hero{align-items:flex-start;padding:24px}.new-material-menu{width:100%}
  .materials-table-head{display:none}.material-row{padding:16px}.material-edit-form{grid-template-columns:1fr}.material-edit-form>div{padding-bottom:9px;border-bottom:1px solid var(--esem-slate-100)}.row-actions{justify-content:flex-start}
}
@media(max-width:560px){
  .future-student-side{grid-template-columns:1fr}.future-focus-card{padding:22px}.future-focus-card h2{font-size:26px}
  .course-identity-grid{display:grid;grid-template-columns:1fr 1fr}.course-identity-grid span{min-width:0}
  .materials-metrics{grid-template-columns:1fr}.upload-actions,.future-action-row{display:grid;grid-template-columns:1fr}.upload-actions>*{width:100%}
  .widget-option{grid-template-columns:36px minmax(0,1fr)}.widget-option button{grid-column:1/-1;width:100%}
}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}.future-course-card,.future-info-card,.future-rail-card,.material-action-card,.future-module-card{animation:none}:where(.btn,.primary,.secondary,.ghost,.danger,.success,.ghost-link,.meet-cta,.future-rail-button),.future-course-card,.future-info-card,.material-action-card,.future-lesson-row{transition:none}}
