:root{font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;color:#24364b;background:#f3f6fa;--navy:#17345e;--navy2:#213f78;--line:#dce5ef;--ink:#17345e;--muted:#6c7d90;--pale:#edf3fb;--green:#0b7b55;--red:#a52e3d;--amber:#8a630f}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.55;cursor:not-allowed}h1,h2,h3,p{margin:0}h1{font-size:26px;letter-spacing:-.6px;color:#12345c}h2{font-size:17px;color:#16385f}h3{font-size:14px;color:#16385f}p{line-height:1.55}.muted{color:var(--muted)}small{font-size:11px}.boot{min-height:70vh;display:grid;place-content:center;text-align:center;gap:16px;color:var(--ink)}.spinner{border:3px solid #cfdaea;border-top-color:#234b80;border-radius:50%;width:30px;height:30px;animation:spin .7s linear infinite;margin:auto}@keyframes spin{to{transform:rotate(360deg)}}
.shell{min-height:100vh;display:grid;grid-template-columns:250px minmax(0,1fr)}.sidebar{background:linear-gradient(160deg,#17345e,#102749);color:white;padding:22px 14px;display:flex;flex-direction:column;gap:13px;position:sticky;top:0;max-height:100vh;overflow-y:auto}.logo{padding:0 9px 16px;border-bottom:1px solid #ffffff29}.logo strong{font-size:19px;display:block;letter-spacing:-.4px}.logo span{font-size:11px;color:#c2d4ec}.nav{display:grid;gap:5px}.nav button{border:0;border-radius:9px;background:transparent;color:#e9f0fb;text-align:left;padding:12px;display:flex;align-items:center;gap:10px;font-size:13px;font-weight:650}.nav button:hover,.nav button.selected{background:#ffffff20}.nav .label{font-size:10px;text-transform:uppercase;color:#99b7da;letter-spacing:.1em;padding:15px 11px 4px}.userfoot{border-top:1px solid #ffffff29;margin-top:auto;padding:14px 9px;display:grid;gap:4px;font-size:12px;color:#e9f0fa}.userfoot small{color:#bed1e8;overflow-wrap:anywhere}
.main{min-width:0;padding:26px 3.4vw 55px}.top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:22px}.subtitle{color:#718199;font-size:13px;margin-top:4px}.topTools{display:flex;gap:9px;align-items:center;flex-wrap:wrap}select,input,textarea{background:white;color:#26394d;border:1px solid #cbd8e7;border-radius:8px;padding:10px 11px;width:100%;min-width:0;outline:none}select:focus,input:focus,textarea:focus{border-color:#507aaa;box-shadow:0 0 0 3px #c9def27a}textarea{min-height:112px;resize:vertical}input[type=checkbox]{width:17px;height:17px;accent-color:var(--navy)}label{font-size:12px;font-weight:740;color:#43566e;display:grid;gap:6px}.btn,.tiny{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:#edf3fb;border:1px solid #cbd8e8;color:#17345e;font-weight:750;border-radius:8px;padding:9px 13px;text-align:center;white-space:nowrap}.btn.primary{background:#17345e;color:white;border-color:#17345e}.btn.primary:hover{background:#244b80}.btn.danger,.tiny.danger{background:#fff4f3;color:#9b303b;border-color:#eed0d0}.btn.ghost{background:white}.btn:focus-visible,.tiny:focus-visible{outline:3px solid #a7caee}.tiny{font-size:11px;padding:6px 8px}.flex{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.right{margin-left:auto}.sep{border:0;border-top:1px solid #e4eaf2;margin:17px 0}.badge{display:inline-flex;align-items:center;border-radius:999px;background:#edf3fc;color:#284b79;padding:4px 8px;font-size:10px;font-weight:850}.badge.green{background:#e5f6ee;color:#126747}.badge.amber{background:#fff4d7;color:#866108}.badge.gray{background:#eef0f3;color:#68798b}.badge.red{background:#ffebee;color:#aa3442}.mutedbox{background:#f2f5f9;border-radius:9px;padding:12px 14px;color:#657689;font-size:12px}
.panel,.metric{background:white;border:1px solid var(--line);border-radius:12px;box-shadow:0 9px 26px #17365d08}.panel{padding:18px;margin-bottom:16px}.panelhead{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:13px}.metrics{display:grid;grid-template-columns:repeat(4,minmax(130px,1fr));gap:12px;margin-bottom:17px}.metric{padding:18px}.metric .num{font-size:28px;line-height:1.15;font-weight:850;color:#163860}.metric .desc{color:#70829a;font-size:12px;margin-top:6px}.tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:17px}.tabs button{border:1px solid #cddbea;background:white;color:#365474;border-radius:9px;padding:10px 14px;font-size:12px;font-weight:800}.tabs button.active{color:white;background:#1e4071;border-color:#1e4071}.form{display:grid;grid-template-columns:repeat(auto-fit,minmax(175px,1fr));gap:12px;align-items:end}.form.wide{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.form .full{grid-column:1/-1}.form .actions{display:flex;gap:8px;align-items:center}.tablewrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:12px}th,td{text-align:left;padding:11px 9px;border-bottom:1px solid #e8edf4;vertical-align:middle}th{font-size:11px;color:#667a91;background:#f7f9fc}tr:last-child td{border-bottom:0}.empty{border:1px dashed #cedbe8;padding:28px;border-radius:10px;background:#f9fbfd;color:#708096;text-align:center}.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.treebox{background:#f9fbfe;border:1px solid #dfe8f2;border-radius:10px;padding:13px;margin:10px 0}.treerow{padding:9px 0;border-top:1px solid #e7ecf3;display:flex;justify-content:space-between;align-items:center;gap:8px}.treerow:first-child{border:0}.treeindent{padding-left:18px}.chips{display:flex;gap:6px;flex-wrap:wrap}.chip{border-radius:99px;background:#edf3fa;color:#234775;border:1px solid #dae6f4;font-size:11px;font-weight:750;padding:6px 10px}.subjectgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.subjectcard{border:1px solid #dee8f2;background:#f8fafc;border-radius:10px;padding:12px;display:flex;align-items:center;justify-content:space-between;gap:8px}.subjectcard strong{font-size:13px;color:#18365d}.subjectcheck{border:1px solid #dee8f0;background:#f9fbfe;border-radius:8px;padding:9px 10px;display:flex;gap:9px;align-items:center;font-size:12px;font-weight:700;cursor:pointer}.subjectcheck.on{background:#eaf3fc;border-color:#8eafcf}.subjectcheck.assigned{background:#f2f4f6;color:#748091}.listrows{display:grid;gap:8px}.student{border:1px solid #dfe7ef;border-radius:9px;background:#fafcff;display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 12px}.student strong{color:#1d3c64;font-size:13px}.student small{color:#8190a0;display:block;margin-top:4px}.preview{display:grid;grid-template-columns:205px minmax(0,1fr);border:1px solid #dae4ee;border-radius:12px;overflow:hidden;background:white;min-height:500px}.previewnav{background:#234479;color:white;padding:14px 10px}.previewnav strong{display:block;padding:6px 8px 12px;font-size:14px}.previewnav small{color:#c4d5ef;font-size:10px}.previewnav button{border:0;background:transparent;color:#eaf1fc;display:block;width:100%;text-align:left;padding:10px 9px;border-radius:7px;font-size:12px}.previewnav button:hover,.previewnav button.active{background:#ffffff27}.previewcontent{background:#f5f7fb;padding:20px;min-width:0}.previewcontent h2{font-size:21px}.twoline{display:grid;gap:4px}.notice{padding:12px 14px;border-radius:10px;border:1px solid #cfe0f2;background:#ecf4fd;font-size:13px;color:#315b82;margin-bottom:15px}.notice.ok{background:#e8f7ef;color:#166747;border-color:#c3ead3}.notice.warn{background:#fff8e7;border-color:#f0dba7;color:#795a19}.notice.error{background:#fff0f1;border-color:#edc3c9;color:#9d3445}.flash{position:fixed;right:20px;bottom:18px;z-index:80;max-width:min(470px,calc(100vw - 32px));box-shadow:0 16px 48px #142d4d30}.loginbg{min-height:100vh;background:linear-gradient(#18345e 0 74px,#eff3f9 74px);display:grid;place-items:center;padding:115px 16px 50px}.logincard{background:#fff;border:1px solid #dce4ee;border-radius:15px;padding:30px;width:min(520px,100%);box-shadow:0 20px 60px #17345e13}.loginbrand{font-weight:850;color:#183c6b;font-size:20px;margin-bottom:18px}.logincard h1{margin-bottom:10px}.logincard p{margin-bottom:22px;color:#64748b}.loginbutton{width:100%;justify-content:center;padding:13px}.spinner.inline{display:inline-block;width:15px;height:15px;border-width:2px;margin:0 6px 0 0}.overlay{position:fixed;inset:0;background:#152c47a3;display:grid;place-items:center;padding:16px;z-index:99}.dialog{background:white;border-radius:14px;border:1px solid #d4dfec;padding:23px;width:min(500px,100%);box-shadow:0 20px 60px #0003}.dialog h2{margin-bottom:12px}.dialog p{margin-bottom:10px;font-size:13px}.dialog .confirm{margin-top:12px}.dialog .flex{justify-content:flex-end;margin-top:16px}.arrow{display:inline-block;font-weight:900;color:#7693b5}.audit td{font-size:11px}.warnline{color:#966b16;font-size:12px;font-weight:700}.callout{background:#fffaf0;border:1px solid #f0ddb4;padding:12px;border-radius:9px;color:#806122;font-size:12px}.top-select{min-width:240px;max-width:390px}.textbtn{background:none;border:0;padding:0;color:#174a7d;font-weight:750;text-decoration:underline}.tagline{font-size:11px;color:#73869d;margin-top:9px}.overflow{overflow-wrap:anywhere}
@media(max-width:1060px){.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.shell{grid-template-columns:218px minmax(0,1fr)}.main{padding:20px}.subjectgrid{grid-template-columns:1fr}}
@media(max-width:720px){.shell{display:block}.sidebar{position:static;max-height:none;padding:12px}.logo{padding:0 7px 10px}.nav{display:flex;flex-wrap:wrap}.nav button{padding:8px 9px}.nav .label{display:none}.userfoot{display:none}.main{padding:15px}.top{flex-wrap:wrap}.metrics{grid-template-columns:1fr 1fr}.panel{padding:13px}.grid2,.preview{grid-template-columns:1fr}.previewnav{display:flex;flex-wrap:wrap;gap:4px}.previewnav strong{width:100%}.previewcontent{padding:12px}.student{flex-wrap:wrap}.topTools{width:100%}.top-select{max-width:none;width:100%}}
@media(max-width:440px){.metrics{grid-template-columns:1fr}.form{grid-template-columns:1fr}}
/* DEV 0.2: catálogo oficial, formularios completos y ajustes de presentación */
.form-search{grid-template-columns:minmax(220px, 1fr) auto;align-items:end}
.form-search .actions{align-self:end}
.modalform{display:grid;gap:12px;max-height:65vh;overflow-y:auto;padding:3px 6px 3px 0}
.modalform .flex{justify-content:flex-end;padding-top:8px}
.dialog:has(.modalform){width:min(560px,calc(100vw - 28px))}
.previewnav>strong{overflow-wrap:anywhere;font-size:12px;line-height:1.35;display:grid;gap:4px;padding-right:4px}
.previewnav>strong small{display:block;font-size:10px}
.previewnav button strong{display:inline-block;white-space:normal;line-height:1.3}
.previewnav .badge{vertical-align:middle}
[data-group-students]{scroll-margin-top:26px}
@media(max-width:720px){.form-search{grid-template-columns:1fr}}
.offline-source{margin-top:14px;padding:12px 14px;background:#f8fafc;border:1px dashed #d2dfed;border-radius:9px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.offline-source label{min-width:240px;flex:1}
.offline-source .muted{font-size:11px;flex:2}
.offline-source input[type=file]{font-size:11px;padding:8px}
/* DEV 0.3 - cuaderno académico */
.grade-context{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin:16px 0}
.grade-context label{min-width:235px;max-width:430px;flex:1}
.grade-context .badge{margin-bottom:10px}
.grade-input{max-width:190px;font-weight:700;color:#17416f;padding:8px 9px}
.grade-input:focus{background:#f2f8ff}
.grade-context+.panel .warnline{font-weight:650}
.tutorperiod{max-width:270px}
.previewcontent .tablewrap{max-height:630px;overflow:auto}
.previewcontent thead th{position:sticky;top:0;z-index:1}
.previewcontent .panel>p.tagline{margin-top:12px}
#grade-dirty-status{font-size:12px}
@media(max-width:900px){.previewcontent th,.previewcontent td{padding:9px 6px}.grade-input{min-width:90px}}
