:root{--bg:var(--co-color-background);--panel:var(--co-color-surface-strong);--text:var(--co-color-text);--muted:var(--co-color-text-muted);--line:var(--co-color-border);--accent:var(--co-color-primary);--white:var(--co-neutral-0);--ok:var(--co-success-500);--bad:var(--co-danger-500);--radius:var(--co-radius-xl);--shadow:var(--co-shadow-lg)}*{box-sizing:border-box}html{background:var(--bg)}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,input{font:inherit}button{cursor:pointer}.hidden{display:none!important}.eyebrow{text-transform:uppercase;letter-spacing:.16em;font-size:11px;font-weight:850;color:#a4a4ad;margin:0}.eyebrow.accent{color:var(--accent)}.eyebrow.light{color:rgba(255,255,255,.66)}

/* Auth */
.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(330px,43%) 1fr}.brand-panel{background:var(--panel);color:#fff;padding:clamp(36px,6vw,88px);display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden}.brand-panel:after{content:"";position:absolute;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(210,15,104,.26),transparent 68%);right:-150px;bottom:-120px}.brand-mark{width:54px;height:54px;border:1px solid #3a3a40;border-radius:16px;display:grid;place-items:center;font-weight:800;letter-spacing:-.05em;margin-bottom:64px}.brand-panel h1{font-size:clamp(48px,6vw,86px);letter-spacing:-.06em;line-height:.94;margin:10px 0 26px;max-width:700px}.lead{font-size:18px;line-height:1.55;color:#c6c6ce;max-width:520px}.status-card{margin-top:48px;border:1px solid #303036;border-radius:18px;padding:17px;display:flex;align-items:center;gap:12px;max-width:420px;position:relative;z-index:1}.status-card strong,.status-card small{display:block}.status-card small{color:#9696a0;margin-top:4px}.status-dot{width:10px;height:10px;border-radius:50%;background:#777}.status-dot.ok{background:var(--ok);box-shadow:0 0 0 5px rgba(32,164,100,.1)}.status-dot.bad{background:var(--bad)}.content-panel{display:grid;place-items:center;padding:40px}.login-card{width:min(100%,780px);background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:clamp(28px,5vw,56px);box-shadow:var(--shadow)}.login-card h2{font-size:clamp(34px,4vw,52px);letter-spacing:-.045em;margin:8px 0 14px}.muted{color:var(--muted);font-size:16px;margin:0 0 34px}.login-card form{display:grid;gap:20px}.login-card label{display:grid;gap:9px;font-size:13px;font-weight:700}.login-card input{width:100%;border:1px solid #d8d8de;background:#fbfbfc;border-radius:14px;padding:15px 16px;outline:none}.login-card input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(210,15,104,.09)}.login-card button{border:0;border-radius:14px;background:var(--accent);color:white;font-weight:800;padding:15px 18px}.login-card button:disabled{opacity:.55;cursor:wait}.login-card .secondary{background:#f1f1f4;color:#25252a;margin-top:10px}.form-message{min-height:20px;color:var(--bad);font-size:14px;margin:0}.fineprint{color:#999aa2;font-size:12px;line-height:1.5;margin:28px 0 0}.auth-links{margin-top:14px}.link-button{background:none!important;color:inherit!important;border:0!important;padding:0!important;text-decoration:underline;cursor:pointer;width:auto!important}

/* App shell */
.app-shell{min-height:100vh}.topbar{height:78px;position:sticky;top:0;z-index:20;background:rgba(245,245,247,.92);backdrop-filter:blur(18px);border-bottom:1px solid rgba(220,220,224,.82);display:flex;align-items:center;padding:0 clamp(20px,4vw,58px);gap:34px}.suite-brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--text);font-weight:850;white-space:nowrap}.mini-mark{width:36px;height:36px;border:1px solid #dadade;border-radius:12px;background:white;display:grid;place-items:center;font-size:12px}.desktop-nav{display:flex;align-items:center;gap:4px;flex:1}.nav-item{border:0;background:transparent;color:#777780;padding:10px 11px;border-radius:11px;font-weight:700;font-size:13px}.nav-item:hover,.nav-item.active{background:#fff;color:var(--text)}.user-menu{display:flex;align-items:center;gap:10px}.avatar{width:38px;height:38px;border-radius:13px;background:var(--panel);color:white;display:grid;place-items:center;font-size:12px;font-weight:850}.user-copy{display:grid;min-width:130px}.user-copy strong{font-size:13px}.user-copy small{font-size:11px;color:var(--muted);margin-top:2px}.ghost-button{border:1px solid var(--line);background:#fff;color:var(--text);padding:10px 13px;border-radius:12px;font-weight:750;font-size:12px}.app-content{width:min(1240px,calc(100% - 48px));margin:0 auto;padding:52px 0 84px}.dashboard-page{min-height:70vh}.welcome-row{display:flex;justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:30px}.welcome-row h1,.module-placeholder h1{font-size:clamp(42px,6vw,72px);line-height:.95;letter-spacing:-.058em;margin:10px 0 12px}.page-meta{margin:0;color:var(--muted);font-size:16px}.student-context{background:white;border:1px solid var(--line);border-radius:16px;padding:14px 17px;display:grid;gap:4px;min-width:190px}.student-context span{font-size:11px;color:var(--muted);font-weight:750}.student-context strong{font-size:14px}

/* Hero */
.hero-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);gap:18px}.next-class-card,.smart-center,.upcoming-card,.quick-card{border-radius:24px}.next-class-card{background:var(--panel);color:white;padding:30px;min-height:340px;position:relative;overflow:hidden}.next-class-card:after{content:"";position:absolute;width:280px;height:280px;border-radius:50%;right:-100px;bottom:-90px;background:radial-gradient(circle,rgba(210,15,104,.45),transparent 68%)}.next-class-card h2{font-size:clamp(32px,4vw,48px);letter-spacing:-.045em;margin:10px 0 10px;max-width:580px;position:relative;z-index:1}.next-class-card p{color:#c4c4cb;line-height:1.5;position:relative;z-index:1}.class-time{font-size:64px;line-height:1;font-weight:850;letter-spacing:-.06em;margin-top:44px;position:relative;z-index:1}.empty-hero{display:flex;flex-direction:column;justify-content:flex-end;height:250px;position:relative;z-index:1}.empty-hero h2{margin:12px 0 6px}.empty-hero p{margin:0 0 22px;max-width:480px}.calendar-icon{width:45px;height:45px;border:1px solid #393940;border-radius:15px;display:grid;place-items:center;font-weight:850}.light-button{align-self:flex-start;border:0;border-radius:13px;padding:12px 16px;background:white;color:#16161a;font-weight:850;position:relative;z-index:1}.smart-center{background:#fff;border:1px solid var(--line);padding:28px}.section-heading{display:flex;justify-content:space-between;gap:20px;align-items:flex-start}.section-heading h2{font-size:24px;letter-spacing:-.035em;margin:7px 0 0}.live-dot{width:9px;height:9px;background:var(--ok);border-radius:50%;box-shadow:0 0 0 6px rgba(32,164,100,.09);margin:10px}.insights-list{margin-top:28px;display:grid;gap:10px}.insight-empty{border:1px solid var(--line);border-radius:18px;padding:17px;display:flex;gap:13px;align-items:center}.insight-empty>span{width:34px;height:34px;border-radius:11px;background:#eef8f3;color:var(--ok);display:grid;place-items:center;font-weight:900}.insight-empty strong,.insight-empty p{display:block}.insight-empty p{margin:4px 0 0;color:var(--muted);font-size:13px;line-height:1.4}.insight-note{font-size:13px;color:var(--muted);line-height:1.5;padding:4px 5px}.insight-item{border:1px solid var(--line);background:#fff;border-radius:17px;padding:15px;display:flex;gap:12px;text-align:left;color:var(--text)}.insight-item small{display:block;color:var(--muted);margin-top:3px}.insight-symbol{width:32px;height:32px;border-radius:10px;background:#f6edf2;color:var(--accent);display:grid;place-items:center}

/* Metrics + lower content */
.metrics-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0}.metric-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:19px;min-height:126px}.metric-card p{margin:0;color:var(--muted);font-size:12px;font-weight:750}.metric-card strong{display:block;font-size:30px;letter-spacing:-.045em;margin:16px 0 4px}.metric-card small{color:var(--muted);font-size:12px}.content-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(330px,.85fr);gap:18px}.upcoming-card,.quick-card{background:white;border:1px solid var(--line);padding:28px;min-height:300px}.text-action{border:0;background:transparent;color:var(--accent);font-size:12px;font-weight:850;padding:8px 0}.empty-list{margin-top:46px;padding:28px;border:1px dashed #d9d9de;border-radius:18px;background:#fafafb}.empty-list strong{font-size:16px}.empty-list p{margin:7px 0 0;color:var(--muted);font-size:13px;line-height:1.5}.class-row{display:grid;grid-template-columns:100px 1fr;gap:20px;padding:16px 0;border-bottom:1px solid var(--line)}.class-row small{display:block;color:var(--muted);font-size:12px;margin-bottom:5px}.class-row strong{display:block}.quick-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;margin-top:26px}.quick-grid button{min-height:84px;border:1px solid var(--line);background:#fbfbfc;border-radius:16px;padding:14px;text-align:left;color:var(--text);display:grid;align-content:space-between}.quick-grid button:hover{background:#fff;border-color:#d7d7dc}.quick-grid span{color:var(--accent);font-size:10px;font-weight:850}.quick-grid strong{font-size:14px}

/* Loading, error, placeholder */
.dashboard-loading{padding-top:25px}.skeleton{background:linear-gradient(90deg,#ececef,#f5f5f7,#ececef);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:14px}.sk-title{width:50%;height:58px}.sk-subtitle{width:28%;height:18px;margin-top:14px}.skeleton-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:18px;margin-top:36px}.sk-card{height:340px;border-radius:24px}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.dashboard-error{background:#fff;border:1px solid var(--line);border-radius:24px;padding:50px;text-align:center;max-width:620px;margin:70px auto}.state-icon{width:50px;height:50px;border-radius:15px;background:#fff1f1;color:var(--bad);display:grid;place-items:center;margin:0 auto 18px;font-weight:900}.dashboard-error h2{font-size:28px;margin:0 0 8px}.dashboard-error p{color:var(--muted)}.dashboard-error button{border:0;background:var(--accent);color:white;border-radius:13px;padding:13px 18px;font-weight:850}.module-placeholder{background:#fff;border:1px solid var(--line);border-radius:26px;padding:clamp(32px,7vw,80px);min-height:520px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.module-placeholder p:not(.eyebrow){font-size:18px;color:var(--muted);max-width:660px;line-height:1.55}.back-button{border:0;background:#f1f1f4;color:var(--text);border-radius:13px;padding:11px 14px;font-weight:800;margin-bottom:60px}.mobile-nav{display:none}

@media(max-width:1080px){.desktop-nav{display:none}.hero-grid,.content-grid{grid-template-columns:1fr}.metrics-grid{grid-template-columns:repeat(2,1fr)}.smart-center{min-height:260px}.user-copy{display:none}}
@media(max-width:900px){.auth-shell{grid-template-columns:1fr}.brand-panel{min-height:410px}.brand-mark{margin-bottom:36px}.content-panel{padding:20px}.topbar{padding:0 20px}.ghost-button{display:none}.app-content{width:min(100% - 30px,900px);padding-top:34px}.welcome-row{align-items:flex-start}.student-context{display:none}.mobile-nav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;bottom:0;left:0;right:0;z-index:30;background:rgba(255,255,255,.95);backdrop-filter:blur(18px);border-top:1px solid var(--line);padding:7px 7px calc(7px + env(safe-area-inset-bottom))}.mobile-nav button{border:0;background:transparent;padding:10px 3px;border-radius:10px;color:#7c7d84;font-size:11px;font-weight:800}.mobile-nav button.active{background:#f4edf1;color:var(--accent)}.app-content{padding-bottom:110px}}
@media(max-width:560px){.brand-panel{padding:32px 24px;min-height:370px}.content-panel{padding:14px}.login-card{padding:26px 20px;border-radius:20px}.suite-brand>span:last-child{display:none}.topbar{height:66px}.user-menu{margin-left:auto}.avatar{width:35px;height:35px}.app-content{width:calc(100% - 22px);padding-top:27px}.welcome-row h1,.module-placeholder h1{font-size:42px}.hero-grid{gap:12px}.next-class-card,.smart-center,.upcoming-card,.quick-card{border-radius:20px}.next-class-card{padding:23px;min-height:310px}.smart-center,.upcoming-card,.quick-card{padding:21px}.metrics-grid{grid-template-columns:repeat(2,1fr);gap:9px;margin:12px 0}.metric-card{padding:15px;min-height:112px}.metric-card strong{font-size:25px}.section-heading{display:block}.text-action{margin-top:8px}.quick-grid{grid-template-columns:1fr 1fr}.skeleton-grid{grid-template-columns:1fr}.sk-card{height:280px}.dashboard-error{padding:34px 22px;margin-top:40px}.module-placeholder{padding:30px 22px;min-height:500px}.back-button{margin-bottom:45px}}

/* Sprint 1.4 · Horario inteligente */
.timetable-page{max-width:1240px;margin:0 auto;padding:48px 24px 120px}.timetable-toolbar{display:flex;justify-content:space-between;gap:32px;align-items:flex-end;margin-bottom:28px}.timetable-toolbar h1{font-size:clamp(2.2rem,4vw,4.5rem);line-height:.95;margin:8px 0 12px;letter-spacing:-.05em}.timetable-back{margin-bottom:28px}.week-controls{display:flex;gap:8px;align-items:center}.week-controls button{border:1px solid var(--line,#e6e6ea);background:#fff;border-radius:12px;padding:11px 14px;font:inherit;cursor:pointer}.timetable-summary{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:18px 20px;background:#fff;border:1px solid #e8e8ec;border-radius:18px;margin-bottom:16px}.timetable-summary div{display:flex;gap:12px;align-items:baseline}.timetable-summary span{color:#72727a;font-size:.82rem}.timetable-summary strong{font-size:1.05rem}.week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px}.week-day{min-height:420px;background:#fff;border:1px solid #e7e7eb;border-radius:20px;overflow:hidden}.week-day.today{box-shadow:inset 0 3px 0 #d20f68}.week-day>header{padding:16px;border-bottom:1px solid #ededf0;display:grid;grid-template-columns:1fr auto;gap:2px}.week-day>header small{text-transform:uppercase;font-weight:750;color:#73737b;font-size:.7rem;letter-spacing:.08em}.week-day>header strong{font-size:1.55rem;grid-row:1/3;grid-column:2}.week-day>header span{font-size:.72rem;color:#9898a0}.week-day-sessions{padding:10px;display:flex;flex-direction:column;gap:9px}.day-empty{padding:18px 8px;color:#aaaab1;text-align:center;font-size:.82rem}.session-card{width:100%;border:1px solid #ececf0;background:#fafafd;border-radius:14px;padding:11px;text-align:left;display:flex;gap:9px;cursor:pointer;transition:.16s ease}.session-card:hover{transform:translateY(-1px);border-color:#d4d4da;background:#fff}.session-card.status-modified{border-left:3px solid #c68718}.session-card.status-cancelled{opacity:.68;border-left:3px solid #c43b45}.session-card.status-cancelled .session-copy>strong{text-decoration:line-through}.session-time{min-width:45px;display:flex;flex-direction:column}.session-time strong{font-size:.84rem}.session-time span{font-size:.7rem;color:#818189}.session-copy{min-width:0;display:flex;flex-direction:column;gap:3px}.session-copy>strong{font-size:.82rem;white-space:normal}.session-copy small{font-size:.69rem;color:#7b7b83;line-height:1.3}.session-copy em{font-size:.67rem;color:#9a6511;font-style:normal}.status-badge{display:inline-flex;width:max-content;border-radius:999px;padding:3px 6px;font-size:.59rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;background:#eef7f2;color:#257451}.status-badge.modified{background:#fff5df;color:#9a6511}.status-badge.cancelled{background:#fff0f1;color:#a82b35}.timetable-empty{background:#fff;border:1px solid #e8e8ec;border-radius:24px;padding:64px 24px;text-align:center}.timetable-empty h2{margin:14px 0 8px}.timetable-empty p{color:#777780;max-width:560px;margin:0 auto}.mobile-agenda{display:none}.timetable-state{padding:20px 0}.session-modal{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px}.session-modal-backdrop{position:absolute;inset:0;background:rgba(15,15,18,.48);backdrop-filter:blur(6px)}.session-modal-card{position:relative;width:min(620px,100%);background:#fff;border-radius:24px;padding:32px;box-shadow:0 30px 90px rgba(0,0,0,.2)}.session-modal-close{position:absolute;right:18px;top:16px;width:38px;height:38px;border:0;border-radius:50%;background:#f1f1f4;font-size:1.5rem;cursor:pointer}.session-modal-card h2{font-size:2rem;margin:6px 0 22px}.session-detail-status{display:flex;gap:12px;align-items:center;margin-bottom:20px}.session-detail-status p{margin:0;color:#7a5b19}.session-detail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:0}.session-detail-grid div{background:#f7f7f9;border-radius:14px;padding:14px}.session-detail-grid dt{font-size:.72rem;color:#777780;margin-bottom:5px}.session-detail-grid dd{margin:0;font-weight:750}.online-class-button{display:inline-flex;margin-top:20px;background:#111114;color:#fff;text-decoration:none;border-radius:14px;padding:13px 16px;font-weight:750}.session-modal.hidden{display:none!important}
@media(max-width:1050px){.week-grid{grid-template-columns:repeat(4,1fr)}.week-day{min-height:280px}}
@media(max-width:760px){.timetable-page{padding:28px 16px 110px}.timetable-toolbar{display:block}.week-controls{margin-top:20px}.week-grid{display:none!important}.mobile-agenda{display:flex;flex-direction:column;gap:14px}.agenda-day{background:#fff;border:1px solid #e7e7eb;border-radius:18px;padding:14px}.agenda-day>header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;text-transform:capitalize}.agenda-day>header span{background:#f1f1f4;border-radius:999px;padding:3px 8px;font-size:.72rem}.agenda-day .session-card{margin-top:8px}.timetable-summary{align-items:flex-start;flex-direction:column}.timetable-summary div{display:block}.timetable-summary strong{display:block;margin-top:4px}.session-detail-grid{grid-template-columns:1fr}.session-modal-card{padding:26px 20px}.timetable-toolbar h1{font-size:2.6rem}}

/* Sprint 1.5 · Asistencia Inteligente */
.attendance-page{min-height:70vh}.attendance-toolbar{display:flex;justify-content:space-between;align-items:flex-end;gap:28px;margin-bottom:28px}.attendance-toolbar h1{font-size:clamp(42px,6vw,72px);line-height:.95;letter-spacing:-.058em;margin:10px 0 12px}.attendance-back{margin-bottom:34px}.month-controls{display:flex;gap:7px;background:#fff;border:1px solid var(--line);border-radius:15px;padding:6px}.month-controls button{border:0;background:transparent;border-radius:10px;padding:9px 12px;font-weight:800;color:var(--text)}.month-controls button:hover{background:#f2f2f5}.attendance-summary-card{display:grid;grid-template-columns:.8fr 2.2fr;gap:28px;background:var(--panel);color:white;border-radius:26px;padding:30px;margin-bottom:18px}.attendance-score{display:grid;align-content:center;gap:5px;border-right:1px solid rgba(255,255,255,.14)}.attendance-score span,.attendance-score small{color:rgba(255,255,255,.65)}.attendance-score strong{font-size:clamp(48px,7vw,78px);line-height:1;letter-spacing:-.06em}.attendance-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.attendance-stats article{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.1);border-radius:17px;padding:18px;display:grid;align-content:center;gap:7px}.attendance-stats span{font-size:12px;color:rgba(255,255,255,.63)}.attendance-stats strong{font-size:30px}.attendance-calendar-card{background:#fff;border:1px solid var(--line);border-radius:26px;padding:28px}.attendance-calendar-card .section-heading>span{font-size:11px;color:var(--muted)}.attendance-legend{display:flex;flex-wrap:wrap;gap:15px;margin:18px 0 22px;font-size:12px;color:var(--muted);font-weight:700}.attendance-legend span{display:flex;align-items:center;gap:6px}.attendance-legend i{width:10px;height:10px;border-radius:3px;background:#eee}.attendance-legend i.present{background:#d7f1e3}.attendance-legend i.late{background:#fff0bf}.attendance-legend i.justified{background:#dde5ff}.attendance-legend i.absent{background:#f7d5d7}.attendance-weekdays,.attendance-calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.attendance-weekdays{margin-bottom:8px}.attendance-weekdays span{text-align:center;font-size:11px;font-weight:850;color:var(--muted)}.attendance-day{aspect-ratio:1.18;border:1px solid #ececf0;background:#fafafa;border-radius:13px;display:flex;align-items:center;justify-content:space-between;gap:5px;padding:10px;color:#8a8a92;min-width:0}.attendance-day.spacer{visibility:hidden}.attendance-day.has-record{cursor:pointer;color:var(--text);font-weight:850;transition:transform .15s ease,border-color .15s ease}.attendance-day.has-record:hover{transform:translateY(-2px);border-color:#cfcfd7}.attendance-day i{width:25px;height:25px;border-radius:8px;display:grid;place-items:center;font-style:normal;font-size:11px;font-weight:900}.attendance-day.present{background:#f3fbf6;border-color:#cdebd9}.attendance-day.present i{background:#d7f1e3;color:#137143}.attendance-day.late{background:#fffaf0;border-color:#f0dfae}.attendance-day.late i{background:#fff0bf;color:#8d6500}.attendance-day.justified{background:#f5f7ff;border-color:#d6ddfa}.attendance-day.justified i{background:#dde5ff;color:#4b5dac}.attendance-day.absent{background:#fff6f6;border-color:#efcdcf}.attendance-day.absent i{background:#f7d5d7;color:#ae3039}.attendance-calendar.is-empty{opacity:.35}.attendance-empty{text-align:center;padding:42px 20px 16px}.attendance-empty h2{margin:12px 0 5px}.attendance-empty p{color:var(--muted)}.attendance-detail-status{display:flex;align-items:center;gap:14px;padding:16px;border-radius:16px;background:#f4f4f6;margin:18px 0}.attendance-detail-status>span{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font-weight:900}.attendance-detail-status small,.attendance-detail-status strong{display:block}.attendance-detail-status small{color:var(--muted);margin-bottom:3px}.attendance-detail-status.present>span{background:#d7f1e3;color:#137143}.attendance-detail-status.absent>span{background:#f7d5d7;color:#ae3039}.attendance-detail-status.late>span{background:#fff0bf;color:#8d6500}.attendance-detail-status.justified>span{background:#dde5ff;color:#4b5dac}.attendance-note-detail{border-top:1px solid var(--line);padding-top:16px;margin-top:16px}.attendance-note-detail small{color:var(--muted);font-weight:800}.attendance-note-detail p{line-height:1.55;margin-bottom:0}
@media(max-width:900px){.attendance-toolbar{display:block}.month-controls{margin-top:20px;width:max-content}.attendance-summary-card{grid-template-columns:1fr}.attendance-score{border-right:0;border-bottom:1px solid rgba(255,255,255,.14);padding-bottom:22px}.attendance-stats{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.attendance-calendar-card{padding:18px}.attendance-weekdays,.attendance-calendar{gap:5px}.attendance-day{border-radius:9px;padding:6px;aspect-ratio:1}.attendance-day i{width:20px;height:20px;border-radius:6px}.attendance-stats article{padding:14px}.attendance-summary-card{padding:22px;border-radius:20px}.attendance-legend{gap:9px 12px}.month-controls{width:100%;justify-content:space-between}.attendance-toolbar h1{font-size:42px}}

/* G1 — Calificaciones Inteligentes: foundation */
.grades-page{padding:clamp(24px,4vw,56px);max-width:1220px;margin:0 auto;width:100%}
.grades-toolbar{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin-bottom:28px}
.grades-toolbar h1{margin:.35rem 0 .5rem;font-size:clamp(2rem,4vw,3.7rem);line-height:.95;letter-spacing:-.045em}
.grades-summary-grid{display:grid;grid-template-columns:1.15fr 1fr 1fr;gap:16px;margin-bottom:20px}
.grade-summary-card{background:var(--co-color-surface,#fff);border:1px solid var(--co-color-border,#e6e6ea);border-radius:22px;padding:22px;min-height:145px;display:flex;flex-direction:column;justify-content:flex-end;box-shadow:0 10px 28px rgba(17,17,20,.04)}
.grade-summary-card.featured{background:var(--co-color-text,#17171b);color:#fff;border-color:transparent}
.grade-summary-card span,.grade-summary-card small{font-size:.78rem;color:var(--co-color-text-muted,#6f7078)}
.grade-summary-card.featured span,.grade-summary-card.featured small{color:rgba(255,255,255,.62)}
.grade-summary-card strong{font-size:2.4rem;line-height:1;margin:.55rem 0 .35rem;letter-spacing:-.04em}
.grades-list-card{background:var(--co-color-surface,#fff);border:1px solid var(--co-color-border,#e6e6ea);border-radius:24px;padding:24px;box-shadow:0 10px 30px rgba(17,17,20,.04)}
.grades-table-wrap{overflow:auto;margin-top:18px}
.grades-table{width:100%;border-collapse:collapse;min-width:680px}
.grades-table th{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--co-color-text-muted,#6f7078);font-weight:700;text-align:left;padding:0 14px 12px;border-bottom:1px solid var(--co-color-border,#e6e6ea)}
.grades-table td{padding:16px 14px;border-bottom:1px solid var(--co-color-border,#e6e6ea);vertical-align:top}
.grades-table tbody tr:last-child td{border-bottom:0}
.grades-table td small{display:block;margin-top:5px;color:var(--co-color-text-muted,#6f7078);max-width:420px}
.grade-score{display:inline-flex;align-items:center;justify-content:center;min-width:52px;padding:8px 10px;border-radius:12px;background:color-mix(in srgb,var(--co-color-primary,#d20f68) 10%,white);color:var(--co-color-primary,#d20f68);font-weight:800}
@media(max-width:760px){.grades-page{padding:24px 16px 100px}.grades-summary-grid{grid-template-columns:1fr 1fr}.grade-summary-card.featured{grid-column:1/-1}.grades-list-card{padding:18px}}

/* Grades Intelligence G2 */
.grades-sync-label{font-size:.78rem;color:var(--co-color-text-muted,#6f7078);white-space:nowrap}
.grades-hero-grid{display:grid;grid-template-columns:.9fr 1.4fr;gap:18px;margin-bottom:18px}
.grade-hero-card{background:linear-gradient(145deg,#16161b,#27101d);color:#fff;border-radius:28px;padding:28px;min-height:300px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:var(--co-shadow-lg,0 20px 50px rgba(17,17,20,.10))}
.grade-hero-value{display:flex;align-items:flex-end;gap:8px;margin:18px 0}.grade-hero-value strong{font-size:clamp(4rem,8vw,7rem);line-height:.85;letter-spacing:-.07em}.grade-hero-value span{font-size:1rem;opacity:.65;margin-bottom:12px}
.grade-change{display:inline-flex;align-items:center;width:max-content;max-width:100%;border-radius:999px;padding:8px 12px;font-size:.82rem;font-weight:700}.grade-change.positive{background:rgba(32,164,100,.16);color:#8ee2b6}.grade-change.negative{background:rgba(196,59,69,.17);color:#ffacb3}.grade-change.neutral{background:rgba(255,255,255,.09);color:#ddd}
.grade-hero-meta{display:flex;justify-content:space-between;gap:18px;border-top:1px solid rgba(255,255,255,.12);padding-top:18px;color:#c7c7cc;font-size:.82rem}.grade-hero-meta strong{color:#fff}
.grades-trend-card,.grades-subjects-card,.grades-insights-card{background:var(--co-color-surface,#fff);border:1px solid var(--co-color-border,#e6e6ea);border-radius:24px;padding:24px;box-shadow:0 10px 30px rgba(17,17,20,.04)}
.section-heading.compact{margin-bottom:18px}.section-heading.compact h2{font-size:1.35rem}.section-heading.compact>strong{font-size:1.8rem;letter-spacing:-.04em}
.grades-trend-chart{height:220px;position:relative}.grades-trend-chart svg{width:100%;height:100%;overflow:visible}.grades-trend-grid{stroke:var(--co-color-border,#e6e6ea);stroke-width:1}.grades-trend-line{fill:none;stroke:var(--co-color-primary,#d20f68);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.grades-trend-area{fill:url(#gradeArea)}.grades-trend-dot{fill:var(--co-color-surface,#fff);stroke:var(--co-color-primary,#d20f68);stroke-width:3}.grades-trend-label{fill:var(--co-color-text-muted,#6f7078);font-size:10px}.grades-trend-score{fill:var(--co-color-text,#17171b);font-size:10px;font-weight:700}
.grades-intelligence-grid{display:grid;grid-template-columns:1.25fr .85fr;gap:18px;margin-bottom:18px}
.grades-subjects{display:grid;gap:16px}.grades-subject-row{display:grid;grid-template-columns:minmax(110px,1fr) 2fr auto;gap:14px;align-items:center}.grades-subject-row strong{font-size:.9rem}.grades-subject-row>span{font-weight:800}.grades-subject-track{height:10px;background:var(--co-color-background,#f5f5f7);border-radius:999px;overflow:hidden}.grades-subject-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--co-color-primary,#d20f68),#ef5ca0)}
.grades-insights{display:grid;gap:12px}.grade-insight{border-radius:18px;padding:16px;background:var(--co-color-background,#f5f5f7);border:1px solid transparent}.grade-insight strong{display:block;margin-bottom:5px}.grade-insight p{margin:0;color:var(--co-color-text-muted,#6f7078);font-size:.88rem;line-height:1.45}.grade-insight.positive{background:#f0faf5;border-color:#d6f0e2}.grade-insight.focus{background:#fff8eb;border-color:#f4e4bd}.grade-insight.strength{background:#fff1f7;border-color:#f6d3e4}.grade-insight.empty{background:var(--co-color-background,#f5f5f7)}
.grades-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:18px}.grade-evaluation-card{border:1px solid var(--co-color-border,#e6e6ea);border-radius:20px;padding:18px;background:#fff;display:flex;flex-direction:column;min-height:180px}.grade-evaluation-card header{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.grade-evaluation-card header span{font-size:.75rem;color:var(--co-color-text-muted,#6f7078)}.grade-evaluation-score{font-size:2.8rem;line-height:1;letter-spacing:-.06em;margin:18px 0 8px}.grade-evaluation-card h3{margin:0;font-size:1rem}.grade-evaluation-card p{margin:6px 0 0;color:var(--co-color-text-muted,#6f7078);font-size:.84rem}.grade-comment{margin-top:auto!important;padding-top:14px!important;border-top:1px solid var(--co-color-border,#e6e6ea);font-style:italic;color:var(--co-color-text,#17171b)!important}.grades-history-details{margin-top:20px;border-top:1px solid var(--co-color-border,#e6e6ea);padding-top:16px}.grades-history-details summary{cursor:pointer;font-weight:700;font-size:.9rem}.grades-mini-empty{padding:22px;border-radius:18px;background:var(--co-color-background,#f5f5f7);color:var(--co-color-text-muted,#6f7078);font-size:.9rem}
@media(max-width:980px){.grades-hero-grid,.grades-intelligence-grid{grid-template-columns:1fr}.grades-cards{grid-template-columns:1fr 1fr}.grade-hero-card{min-height:260px}}
@media(max-width:640px){.grades-toolbar{align-items:flex-start;flex-direction:column}.grades-cards{grid-template-columns:1fr}.grades-subject-row{grid-template-columns:1fr auto}.grades-subject-track{grid-column:1/-1}.grade-hero-meta{flex-direction:column}.grades-trend-chart{height:190px}}


/* G3 · Historial avanzado de calificaciones */
.grades-history-heading{align-items:end;gap:20px}
.grades-filter-count{font-size:13px;color:var(--co-color-text-muted,#6f7078);white-space:nowrap}
.grades-filter-bar{display:grid;grid-template-columns:minmax(150px,1fr) minmax(150px,1fr) minmax(150px,1fr) minmax(220px,1.5fr) auto;gap:12px;align-items:end;margin:18px 0 24px;padding:16px;border:1px solid var(--co-color-border,#e6e6ea);border-radius:var(--co-radius-lg,18px);background:var(--co-color-background,#f5f5f7)}
.grades-filter-bar label{display:grid;gap:7px;min-width:0}
.grades-filter-bar label>span{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--co-color-text-muted,#6f7078)}
.grades-filter-bar select,.grades-filter-bar input{width:100%;min-height:44px;padding:0 12px;border:1px solid var(--co-color-border,#e6e6ea);border-radius:12px;background:var(--co-color-surface,#fff);color:var(--co-color-text,#17171b);font:inherit;outline:none}
.grades-filter-bar select:focus,.grades-filter-bar input:focus{border-color:var(--co-color-primary,#d20f68);box-shadow:0 0 0 3px color-mix(in srgb,var(--co-color-primary,#d20f68) 12%,transparent)}
.grades-reset-button{min-height:44px;padding:0 15px;border:1px solid var(--co-color-border,#e6e6ea);border-radius:12px;background:var(--co-color-surface,#fff);color:var(--co-color-text,#17171b);font-weight:700;cursor:pointer;white-space:nowrap}
.grades-reset-button:hover{border-color:var(--co-color-primary,#d20f68);color:var(--co-color-primary,#d20f68)}
.grades-filter-empty{padding:26px;border:1px dashed var(--co-color-border,#e6e6ea);border-radius:18px;text-align:center;background:var(--co-color-background,#f5f5f7);margin-bottom:20px}
.grades-filter-empty strong{display:block;margin-bottom:6px}.grades-filter-empty p{margin:0;color:var(--co-color-text-muted,#6f7078)}
.grade-type-pill{display:inline-flex;align-items:center;min-height:24px;padding:0 8px;margin-bottom:8px;border-radius:999px;background:color-mix(in srgb,var(--co-color-primary,#d20f68) 9%,white);color:var(--co-color-primary,#d20f68);font-size:10px!important;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
.grades-table td small{display:block;margin-top:3px;color:var(--co-color-text-muted,#6f7078);font-size:12px;line-height:1.35}
@media(max-width:980px){.grades-filter-bar{grid-template-columns:1fr 1fr}.grades-search-label{grid-column:1/-1}.grades-reset-button{justify-self:start}}
@media(max-width:640px){.grades-filter-bar{grid-template-columns:1fr;padding:14px}.grades-search-label{grid-column:auto}.grades-reset-button{width:100%}.grades-history-heading{align-items:start}.grades-filter-count{white-space:normal}}

/* G4 — Academic Insights */
.grades-guidance-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:18px;margin-bottom:18px}
.grades-comments-card,.grades-objectives-card{background:var(--co-color-surface,#fff);border:1px solid var(--co-color-border,#e6e6ea);border-radius:24px;padding:24px;box-shadow:0 10px 30px rgba(17,17,20,.04)}
.grades-teacher-comments{display:grid;gap:12px}.grade-teacher-comment{padding:16px 18px;border-radius:18px;background:var(--co-color-background,#f5f5f7);border:1px solid var(--co-color-border,#e6e6ea)}
.grade-teacher-comment header{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:8px}.grade-teacher-comment strong{font-size:.92rem}.grade-teacher-comment span{font-size:.75rem;color:var(--co-color-text-muted,#6f7078)}
.grade-teacher-comment p{margin:0;color:var(--co-color-text,#17171b);line-height:1.55}.grade-teacher-comment footer{margin-top:9px;color:var(--co-color-text-muted,#6f7078);font-size:.78rem}
.grades-objectives-label{margin:-4px 0 16px;color:var(--co-color-text-muted,#6f7078);font-size:.86rem}.grades-objectives{display:grid;gap:10px}
.grade-objective{display:flex;align-items:center;gap:11px;padding:12px 14px;border-radius:14px;background:var(--co-color-background,#f5f5f7)}.grade-objective i{display:grid;place-items:center;width:24px;height:24px;border-radius:999px;border:1px solid var(--co-color-border,#e6e6ea);font-style:normal;font-size:.78rem;font-weight:900}.grade-objective.completed i{background:#eaf8f1;border-color:#c8ead9;color:#147749}.grade-objective.completed span{text-decoration:none;font-weight:700}.grade-objective.pending i{color:var(--co-color-text-muted,#6f7078)}
@media(max-width:980px){.grades-guidance-grid{grid-template-columns:1fr}}

/* D1 — Documentos Foundation */
.documents-page{padding:32px clamp(20px,4vw,58px) 100px}.documents-toolbar{margin-bottom:24px}.documents-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:18px}.documents-list-card{padding:24px}.documents-filter-bar{grid-template-columns:minmax(180px,.8fr) minmax(260px,1.4fr) auto}.documents-search{min-width:0}.documents-list{display:grid;gap:12px;margin-top:18px}.document-status{display:inline-flex;align-items:center;width:max-content;margin-top:8px;padding:5px 9px;border-radius:999px;font-size:11px;font-weight:800}.document-status.pending{background:#fff5df;color:#8b5b00}.document-status.signed{background:#eaf8f1;color:#147749}.document-action{border:1px solid var(--co-color-border,#e6e6ea);background:var(--co-color-surface,#fff);border-radius:10px;padding:9px 12px;font-weight:700}.document-action:disabled{opacity:.55;cursor:not-allowed}.activity-feed-card{margin-top:18px;padding:24px}.activity-item{width:100%;border:0;background:transparent;text-align:left;color:inherit;cursor:pointer}.activity-item>span:last-child{display:grid;gap:3px}.activity-item small,.activity-item time{color:var(--co-color-text-muted,#6f7078);font-size:12px}.student-empty-state.compact{padding:18px;text-align:left}
@media(max-width:760px){.documents-summary-grid{grid-template-columns:1fr 1fr}.documents-summary-grid article:last-child{grid-column:1/-1}.documents-filter-bar{grid-template-columns:1fr}.documents-page{padding:24px 16px 100px}.documents-list-card{padding:18px}}

/* D2 — Visor seguro y descarga controlada */
.student-attachment-card__actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.student-attachment-card__actions a{text-decoration:none;color:inherit}.document-content-pending{color:#9b6a11!important}.document-viewer{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:24px}.document-viewer.hidden{display:none}.document-viewer__backdrop{position:absolute;inset:0;background:rgba(10,10,14,.64);backdrop-filter:blur(8px)}.document-viewer__panel{position:relative;width:min(1100px,96vw);height:min(840px,92vh);display:grid;grid-template-rows:auto 1fr auto;background:var(--co-color-surface,#fff);border-radius:24px;overflow:hidden;box-shadow:0 28px 80px rgba(0,0,0,.3)}.document-viewer__header{display:flex;justify-content:space-between;gap:24px;padding:22px 26px;border-bottom:1px solid var(--co-color-border,#e6e6ea)}.document-viewer__header h2{margin:2px 0 4px}.document-viewer__close{width:42px;height:42px;border-radius:50%;border:1px solid var(--co-color-border,#e6e6ea);background:#fff;font-size:25px}.document-viewer__body{min-height:0;background:#ececf0;display:grid;place-items:center;overflow:auto}.document-preview-frame{width:100%;height:100%;border:0;background:white}.document-preview-image{max-width:100%;max-height:100%;object-fit:contain;padding:22px}.document-viewer__footer{display:flex;justify-content:flex-end;gap:10px;padding:16px 24px;border-top:1px solid var(--co-color-border,#e6e6ea)}.document-viewer__action{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--co-color-border,#e6e6ea);background:#fff;color:inherit;text-decoration:none;border-radius:11px;padding:10px 16px;font-weight:750}.document-viewer__action.primary{background:var(--co-color-primary,#d20f68);border-color:var(--co-color-primary,#d20f68);color:#fff}@media(max-width:760px){.document-viewer{padding:0}.document-viewer__panel{width:100vw;height:100vh;border-radius:0}.document-viewer__header{padding:18px}.document-viewer__footer{padding:12px;display:grid;grid-template-columns:1fr 1fr}.document-viewer__action.primary{grid-column:1/-1}}

.document-status.read{background:#eef3ff;color:#315a9c}
.document-consent-panel{padding:16px 24px;border-top:1px solid var(--co-color-border,#e6e6ea);background:var(--co-color-surface,#fff)}
.document-consent-panel.hidden{display:none}.document-consent-status{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}.document-consent-status span{padding:6px 10px;border-radius:999px;background:#f1f1f4;color:#696a73;font-size:12px;font-weight:800}.document-consent-status span.done{background:#eaf8f1;color:#147749}.document-consent-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.document-consent-actions small{color:var(--co-color-text-muted,#6f7078)}.document-consent-button{border:1px solid var(--co-color-border,#e6e6ea);border-radius:11px;padding:10px 15px;font-weight:800;background:#fff}.document-consent-button.primary{background:var(--co-color-primary,#d20f68);border-color:var(--co-color-primary,#d20f68);color:#fff}.document-sign-confirm{display:flex;align-items:flex-start;gap:9px;max-width:650px;font-size:13px;line-height:1.4}.document-sign-confirm input{margin-top:3px}.document-consent-note{margin:10px 0 0;color:var(--co-color-text-muted,#6f7078);font-size:11px}

.documents-smart-center{margin-bottom:18px}.documents-smart-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}.documents-smart-card{appearance:none;text-align:left;border:1px solid var(--co-color-border,#e6e6ea);background:var(--co-color-surface,#fff);border-radius:16px;padding:14px;cursor:pointer;transition:.18s ease}.documents-smart-card:hover,.documents-smart-card.active{transform:translateY(-1px);box-shadow:0 8px 24px rgba(24,25,31,.07);border-color:var(--co-color-primary,#d20f68)}.documents-smart-card span,.documents-smart-card small{display:block;color:var(--co-color-text-muted,#6f7078)}.documents-smart-card strong{display:block;font-size:25px;margin:5px 0}.documents-smart-card.attention strong{color:var(--co-color-primary,#d20f68)}.documents-active-smart{display:flex;align-items:center;gap:8px;margin-bottom:10px}.documents-active-smart.hidden{display:none}.documents-active-smart span{font-size:12px;font-weight:800;padding:6px 10px;border-radius:999px;background:#f7e9f0;color:var(--co-color-primary,#d20f68)}.documents-active-smart button{border:0;background:transparent;font-size:20px;cursor:pointer}.student-attachment-card.is-favorite{box-shadow:inset 3px 0 0 var(--co-color-primary,#d20f68)}.document-title-row{display:flex;gap:7px;align-items:center}.document-title-row span{color:#c89000}.document-action.icon-action{font-size:18px;min-width:38px}.document-status.new{background:#eef3ff;color:#315a9c}
@media(max-width:1050px){.documents-smart-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:640px){.documents-smart-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

.dashboard-document-action{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:18px;padding:20px 22px;background:linear-gradient(135deg,#fff 0%,#fff7fa 100%);border:1px solid #f0d9e4}.dashboard-document-action.hidden{display:none}.dashboard-document-action h2{margin:3px 0 6px}.dashboard-document-action p{margin:0}.dashboard-document-action button{border:0;border-radius:12px;padding:11px 16px;background:var(--co-color-primary,#d20f68);color:#fff;font-weight:800;cursor:pointer}.notifications-page{padding:28px}.notifications-summary{display:flex;align-items:baseline;gap:7px;margin:18px 0}.notifications-summary strong{font-size:30px}.notification-item.is-unread{background:#fff8fb}.notification-item.is-unread .student-timeline__marker{box-shadow:0 0 0 4px #f7dce8}.notification-item.is-read{opacity:.72}[data-module="notificaciones"][data-unread]:not([data-unread=""])::after{content:attr(data-unread);display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;margin-left:6px;border-radius:999px;background:var(--co-color-primary,#d20f68);color:#fff;font-size:10px;font-weight:800}
@media(max-width:640px){.dashboard-document-action{align-items:flex-start;flex-direction:column}.dashboard-document-action button{width:100%}.notifications-page{padding:18px}}

.billing-page{padding:28px}.billing-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:18px 0}.billing-summary-grid .student-metric strong{font-size:26px}.billing-summary-grid .student-metric.positive strong{color:#147749}.billing-summary-grid .student-metric.warning strong{color:#b56b00}.billing-attention{padding:18px 20px;margin:0 0 18px;border-left:4px solid #d20f68;background:#fff8fb}.billing-attention.hidden{display:none}.billing-attention h2{margin:3px 0 6px}.billing-attention p{margin:0}.billing-filter-bar{margin:12px 0 16px}.billing-search{min-width:240px}.billing-list{display:flex;flex-direction:column;gap:8px}.billing-invoice-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto 24px;gap:14px;align-items:center;width:100%;padding:15px 16px;border:1px solid var(--co-color-border,#e6e6ea);border-radius:14px;background:#fff;text-align:left;cursor:pointer;transition:.16s ease}.billing-invoice-row:hover{border-color:#d20f68;box-shadow:0 8px 24px rgba(24,25,31,.06);transform:translateY(-1px)}.billing-invoice-main{display:flex;flex-direction:column;gap:4px;min-width:0}.billing-invoice-main small{color:var(--co-color-text-muted,#6f7078);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.billing-status{display:inline-flex;align-items:center;padding:5px 9px;border-radius:999px;font-size:11px;font-weight:800}.billing-status.paid{background:#eaf8f1;color:#147749}.billing-status.pending{background:#fff4dc;color:#9b6200}.billing-status.overdue,.billing-status.returned{background:#fff0f0;color:#a62b2b}.billing-status.cancelled{background:#f1f1f4;color:#6f7078}.billing-amount{font-weight:850;white-space:nowrap}.billing-chevron{font-size:24px;color:#9b9ca4}.invoice-detail-panel{max-width:760px}.invoice-detail-body{padding:22px;overflow:auto}.invoice-detail-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:20px}.invoice-detail-summary div{padding:14px;border-radius:14px;background:#f7f7f9}.invoice-detail-summary span{display:block;font-size:12px;color:#6f7078}.invoice-detail-summary strong{display:block;margin-top:4px;font-size:20px}.invoice-detail-meta{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;margin:0}.invoice-detail-meta div{padding:10px 0;border-bottom:1px solid #ededf1}.invoice-detail-meta dt{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:#777883}.invoice-detail-meta dd{margin:5px 0 0;font-weight:700}.invoice-lines{margin-top:20px}.invoice-line{display:flex;justify-content:space-between;gap:20px;padding:12px 0;border-bottom:1px solid #ededf1}.invoice-line span{display:flex;flex-direction:column;gap:3px}.invoice-line small{color:#6f7078}.invoice-detail-note{margin-top:20px;color:#6f7078;font-size:12px}
@media(max-width:760px){.billing-page{padding:18px}.billing-summary-grid{grid-template-columns:1fr}.billing-invoice-row{grid-template-columns:minmax(0,1fr) auto}.billing-status{grid-row:2}.billing-amount{grid-column:2;grid-row:1}.billing-chevron{display:none}.invoice-detail-summary,.invoice-detail-meta{grid-template-columns:1fr}}

.invoice-pdf-panel{width:min(980px,94vw);height:min(900px,92vh)}.invoice-pdf-frame-wrap{flex:1;min-height:0;background:#ececf0}.invoice-pdf-frame-wrap iframe{width:100%;height:100%;min-height:620px;border:0;background:#fff}.invoice-pdf-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}.invoice-pdf-actions button,.invoice-pdf-actions a{display:inline-flex;align-items:center;justify-content:center;padding:11px 15px;border-radius:11px;border:1px solid #d20f68;background:#fff;color:#d20f68;font-weight:800;text-decoration:none;cursor:pointer}.invoice-pdf-actions button{background:#d20f68;color:#fff}.invoice-pdf-unavailable{margin-top:18px;padding:12px 14px;border-radius:12px;background:#f5f5f7;color:#6f7078;font-size:13px}

.dashboard-billing-action{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:18px;padding:20px 22px;background:linear-gradient(135deg,#fff 0%,#fffaf2 100%);border:1px solid #f0dfbf}.dashboard-billing-action.hidden{display:none}.dashboard-billing-action h2{margin:3px 0 6px}.dashboard-billing-action p{margin:0}.dashboard-billing-action button{border:0;border-radius:12px;padding:11px 16px;background:#b56b00;color:#fff;font-weight:800;cursor:pointer}.billing-smart-center{margin-bottom:18px}.billing-smart-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.billing-smart-card{appearance:none;text-align:left;border:1px solid var(--co-color-border,#e6e6ea);background:#fff;border-radius:16px;padding:14px}.billing-smart-card:not(.static){cursor:pointer;transition:.16s ease}.billing-smart-card:not(.static):hover,.billing-smart-card.active{border-color:#d20f68;box-shadow:0 8px 24px rgba(24,25,31,.06);transform:translateY(-1px)}.billing-smart-card span,.billing-smart-card small{display:block;color:#6f7078}.billing-smart-card strong{display:block;font-size:24px;margin:5px 0}.billing-smart-card.attention strong{color:#a62b2b}.billing-next-due{display:grid;grid-template-columns:auto auto 1fr auto;gap:10px;align-items:center;margin-top:12px;padding:13px 15px;border-radius:14px;background:#fff8e9}.billing-next-due.hidden{display:none}.billing-next-due span,.billing-next-due small{color:#6f7078}.billing-next-due button{border:0;border-radius:10px;padding:8px 12px;background:#fff;color:#9b6200;font-weight:800;cursor:pointer}
@media(max-width:850px){.billing-smart-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.billing-next-due{grid-template-columns:1fr auto}.dashboard-billing-action{align-items:flex-start;flex-direction:column}.dashboard-billing-action button{width:100%}}

.profile-page{padding:28px}.profile-content{display:flex;flex-direction:column;gap:18px}.profile-identity{display:flex;align-items:center;gap:18px;padding:22px}.profile-avatar{display:grid;place-items:center;width:76px;height:76px;border-radius:22px;background:#f7e9f0;color:var(--co-color-primary,#d20f68);font-size:24px;font-weight:900}.profile-identity__copy h2{margin:3px 0 5px}.profile-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.profile-badges span{padding:6px 10px;border-radius:999px;background:#f3f3f6;font-size:11px;font-weight:800;color:#555762}.profile-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.profile-section{padding:20px}.profile-details{margin:8px 0 0}.profile-details div{display:grid;grid-template-columns:170px 1fr;gap:16px;padding:11px 0;border-bottom:1px solid #ededf1}.profile-details div:last-child{border-bottom:0}.profile-details dt{color:#777883;font-size:12px}.profile-details dd{margin:0;font-weight:750;word-break:break-word}.profile-security{display:flex;justify-content:space-between;gap:28px;padding:20px 22px}.profile-security h2{margin:3px 0 6px}.profile-security p{margin:0}.profile-readonly-note{max-width:520px;color:#6f7078;font-size:13px;line-height:1.5}.profile-button{white-space:nowrap}
@media(max-width:780px){.profile-page{padding:18px}.profile-grid{grid-template-columns:1fr}.profile-security{flex-direction:column}.profile-details div{grid-template-columns:1fr;gap:4px}.profile-identity{align-items:flex-start}.profile-avatar{width:60px;height:60px;border-radius:18px}}

.profile-security{display:block}.profile-security__intro{display:flex;justify-content:space-between;gap:28px;align-items:flex-start}.profile-security__intro .profile-readonly-note{max-width:520px}.security-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:20px}.security-panel{padding:18px;border:1px solid #e8e8ed;border-radius:16px;background:#fafafd}.security-panel h3{margin:0 0 5px}.security-panel>p{margin:0 0 15px;color:#6f7078;font-size:13px;line-height:1.45}.security-form{display:flex;flex-direction:column;gap:11px}.security-form label{display:flex;flex-direction:column;gap:6px}.security-form label span{font-size:12px;font-weight:750;color:#555762}.security-form input{width:100%;box-sizing:border-box;border:1px solid #dcdde3;border-radius:10px;padding:10px 11px;background:#fff;font:inherit}.security-primary,.security-secondary{border-radius:11px;padding:10px 14px;font-weight:800;cursor:pointer}.security-primary{border:0;background:var(--co-color-primary,#d20f68);color:#fff}.security-secondary{border:1px solid #d5d6dd;background:#fff;color:#35363d}.security-secondary:disabled,.security-primary:disabled{opacity:.5;cursor:not-allowed}.security-details{margin:8px 0 16px}.security-details div{display:flex;justify-content:space-between;gap:15px;padding:9px 0;border-bottom:1px solid #e8e8ed}.security-details dt{font-size:12px;color:#777883}.security-details dd{margin:0;font-weight:750;text-align:right}.form-message.success{color:#147749}.form-message.error{color:#a62b2b}
@media(max-width:780px){.profile-security__intro{flex-direction:column}.security-grid{grid-template-columns:1fr}.security-details div{align-items:flex-start}.security-details dd{max-width:55%}}

.profile-preferences{padding:20px 22px}.preferences-form{display:flex;flex-direction:column;margin-top:8px}.preference-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:20px;padding:14px 0;border-bottom:1px solid #ededf1}.preference-row>span{display:flex;flex-direction:column;gap:4px}.preference-row small{color:#6f7078;line-height:1.4}.preference-row select{min-width:190px;border:1px solid #dcdde3;border-radius:10px;padding:9px 10px;background:#fff}.preference-row input[type="checkbox"]{width:20px;height:20px;accent-color:var(--co-color-primary,#d20f68)}.preferences-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}.preference-hidden{display:none!important}.student-reduce-motion *,.student-reduce-motion *::before,.student-reduce-motion *::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.student-compact .student-card,.student-compact .profile-section,.student-compact .profile-security,.student-compact .profile-preferences{padding-top:14px;padding-bottom:14px}.student-compact .student-section{margin-bottom:12px}.student-compact .billing-invoice-row,.student-compact .student-attachment-card{padding-top:10px;padding-bottom:10px}
@media(max-width:640px){.preference-row{grid-template-columns:1fr auto;gap:12px}.preference-row select{grid-column:1/-1;width:100%;min-width:0}}

.profile-center-overview{padding:20px 22px}.profile-center-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.profile-center-card{appearance:none;text-align:left;border:1px solid #e5e5ea;background:#fff;border-radius:16px;padding:16px;cursor:pointer;transition:.16s ease}.profile-center-card:hover{border-color:var(--co-color-primary,#d20f68);transform:translateY(-1px);box-shadow:0 8px 24px rgba(24,25,31,.06)}.profile-center-card span,.profile-center-card small{display:block;color:#6f7078}.profile-center-card strong{display:block;margin:5px 0;font-size:23px}.profile-review-notice{display:flex;justify-content:space-between;gap:20px;margin-top:14px;padding:14px 16px;border-radius:14px;background:#fff8e9;border:1px solid #f1dfb8}.profile-review-notice.hidden{display:none}.profile-review-notice p{margin:4px 0 0;color:#74540f;font-size:13px}.profile-review-notice>p{margin:0;align-self:center}
#profileIdentitySection,#profileSecuritySection,#profilePreferencesSection{scroll-margin-top:90px}
@media(max-width:720px){.profile-center-grid{grid-template-columns:1fr}.profile-review-notice{flex-direction:column}.profile-review-notice>p{align-self:flex-start}}

/* PF5 — cierre EPIC-05 */
.profile-center-card:focus-visible,.security-primary:focus-visible,.security-secondary:focus-visible,.preference-row select:focus-visible,.security-form input:focus-visible{outline:3px solid color-mix(in srgb,var(--co-color-primary,#d20f68) 28%,transparent);outline-offset:2px}.profile-center-card{min-height:112px}.profile-center-card strong{overflow-wrap:anywhere}.security-form input,.preference-row select{font-size:16px}.profile-content{min-width:0}.profile-center-grid>*{min-width:0}
@media(max-width:480px){.profile-center-overview,.profile-preferences{padding:16px}.profile-center-card{min-height:auto}.preferences-actions{display:grid;grid-template-columns:1fr}.preferences-actions button{width:100%}.security-primary,.security-secondary{min-height:44px}.profile-review-notice{padding:12px}.profile-security{overflow:hidden}}

/* PR1 — estados globales y resiliencia */
.student-resilience-state{margin:18px 0;padding:28px 22px;text-align:center;border:1px solid #e7e7ec;border-radius:18px;background:#fff}.student-resilience-state .state-icon{display:grid;place-items:center;width:42px;height:42px;margin:0 auto 10px;border-radius:50%;background:#f2f2f6;font-weight:900}.student-resilience-state h2{margin:0 0 7px;font-size:19px}.student-resilience-state p{max-width:560px;margin:0 auto;color:#6f7078;line-height:1.5}.student-resilience-state button{margin-top:16px;min-height:44px;padding:9px 16px;border:1px solid #d5d6dd;border-radius:11px;background:#fff;font-weight:800;cursor:pointer}.student-resilience-state.offline{border-style:dashed;background:#fafafd}.student-resilience-state.offline .state-icon{font-size:20px}


/* =========================================================
   EPIC-06 / PR2 — Responsive final
   Capa final de normalización para desktop, tablet y móvil.
   ========================================================= */
html,body{max-width:100%;overflow-x:clip}
.app-shell,.app-content,.dashboard-page,.timetable-page,.attendance-page,.grades-page,.documents-page,.billing-page,.notifications-page,.profile-page{min-width:0}
.app-content>*{min-width:0}
img,svg,video,canvas,iframe{max-width:100%}
button,input,select,textarea{max-width:100%}

/* Evita que textos largos de datos reales rompan tarjetas. */
.student-card,.student-section,.class-row,.student-attachment-card,.billing-invoice-row,.notification-item,.profile-section,.security-panel{min-width:0}
.student-card strong,.student-card small,.student-card p,.billing-invoice-main,.document-title-row,.notification-item span,.profile-details dd{overflow-wrap:anywhere}

/* Scroll horizontal intencional únicamente donde aporta valor. */
.grades-table-wrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-gutter:stable}
.grades-table{min-width:680px}
.documents-filters,.billing-filter-bar{min-width:0}
.documents-filters input,.documents-filters select,.billing-filter-bar input,.billing-filter-bar select{min-width:0}

/* Modales nunca pueden superar el viewport. */
.session-modal,.document-viewer{padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
.session-modal-card,.document-viewer__panel,.invoice-detail-panel,.invoice-pdf-panel{max-width:100%;max-height:calc(100dvh - 24px)}
.invoice-detail-body,.document-viewer__body,.invoice-pdf-frame-wrap{overscroll-behavior:contain}

/* Tablet / portátil estrecho */
@media(max-width:1100px){
  .app-content{width:min(100% - 32px,980px)}
  .topbar{gap:18px}
  .hero-grid,.content-grid{gap:16px}
  .documents-smart-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .billing-smart-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .profile-center-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
}

/* Navegación móvil/tablet */
@media(max-width:900px){
  .topbar{height:68px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
  .app-content{width:min(100% - 24px,760px);padding-top:28px;padding-bottom:calc(104px + env(safe-area-inset-bottom))}
  .mobile-nav{grid-template-columns:repeat(5,minmax(0,1fr));padding-left:max(7px,env(safe-area-inset-left));padding-right:max(7px,env(safe-area-inset-right))}
  .mobile-nav button{min-width:0;min-height:44px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .welcome-row,.student-page-header,.timetable-toolbar,.attendance-toolbar{gap:14px}
  .metrics-grid,.grades-summary-grid,.billing-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .documents-smart-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .profile-grid,.security-grid{grid-template-columns:1fr}
  .profile-security__intro{flex-direction:column}
  .week-grid{display:none!important}
  .mobile-agenda{display:flex;flex-direction:column;gap:14px}
}

/* Móvil */
@media(max-width:640px){
  .app-content{width:calc(100% - 20px);padding-top:20px}
  .topbar{gap:10px}
  .suite-brand{min-width:0}
  .suite-brand>span:last-child{display:none}
  .user-menu{margin-left:auto;gap:7px;min-width:0}
  .avatar{flex:0 0 auto}
  .profile-button,.ghost-button{display:none}

  .dashboard-page,.timetable-page,.attendance-page,.grades-page,.documents-page,.billing-page,.notifications-page,.profile-page{padding-left:0;padding-right:0}
  .welcome-row{display:block}
  .welcome-row h1,.student-page-header h1,.timetable-toolbar h1,.attendance-toolbar h1{font-size:clamp(1.75rem,8vw,2.35rem);line-height:1.04}

  .hero-grid,.content-grid,.metrics-grid,.grades-summary-grid,.billing-summary-grid,.billing-smart-grid,.documents-smart-grid,.profile-center-grid{grid-template-columns:1fr}
  .student-card,.grade-summary-card,.grades-list-card,.attendance-calendar-card,.profile-center-overview,.profile-preferences{border-radius:18px}
  .student-card,.grades-list-card,.attendance-calendar-card{padding-left:16px;padding-right:16px}

  .week-controls,.month-controls{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;width:100%;gap:8px}
  .week-controls button,.month-controls button{min-height:44px;min-width:0}
  .timetable-toolbar,.attendance-toolbar{display:flex;flex-direction:column;align-items:stretch}

  .attendance-calendar-card{padding:16px 10px}
  .attendance-weekdays,.attendance-calendar{gap:4px}
  .attendance-day{padding:5px;border-radius:10px;aspect-ratio:1}
  .attendance-day i{width:20px;height:20px;border-radius:6px;font-size:10px}
  .attendance-legend{gap:8px 12px}

  .student-filter-bar,.documents-filters,.billing-filter-bar{display:grid;grid-template-columns:1fr;gap:9px}
  .student-filter-bar>*,
  .documents-filters>*,
  .billing-filter-bar>*,
  .billing-search{width:100%;min-width:0}

  .student-attachment-card{grid-template-columns:auto minmax(0,1fr);gap:10px}
  .student-attachment-card__actions{grid-column:1/-1;display:flex;justify-content:flex-end;flex-wrap:wrap;gap:7px}
  .document-action{min-height:42px}

  .billing-invoice-row{grid-template-columns:minmax(0,1fr) auto;gap:8px 10px;padding:13px}
  .billing-status{grid-column:1;grid-row:2;justify-self:start}
  .billing-amount{grid-column:2;grid-row:1/3;align-self:center}
  .billing-chevron{display:none}

  .profile-identity{gap:12px;padding:16px}
  .profile-avatar{width:56px;height:56px;flex:0 0 auto}
  .profile-details div{grid-template-columns:1fr;gap:4px}
  .profile-details dd{text-align:left}
  .profile-center-card{min-height:0}
  .preference-row{grid-template-columns:minmax(0,1fr) auto}
  .preference-row select{grid-column:1/-1;width:100%}

  .session-modal-card{width:100%;padding:24px 18px 18px;border-radius:20px}
  .session-modal-card h2{font-size:1.55rem;padding-right:38px}
  .session-detail-grid{grid-template-columns:1fr}
  .document-viewer__panel,.invoice-pdf-panel{width:100%;height:calc(100dvh - 24px);border-radius:18px}
  .document-viewer__header{padding:15px 16px;gap:12px}
  .document-viewer__footer{padding:12px;display:grid;grid-template-columns:1fr}
  .document-viewer__action{width:100%;min-height:44px}
  .invoice-detail-body{padding:16px}
  .invoice-detail-summary,.invoice-detail-meta{grid-template-columns:1fr}
  .invoice-line{gap:12px}
  .invoice-pdf-actions{display:grid;grid-template-columns:1fr}
  .invoice-pdf-actions>*{width:100%}
}

/* Móvil estrecho: evita navegación y calendarios ilegibles. */
@media(max-width:420px){
  .app-content{width:calc(100% - 16px)}
  .mobile-nav{gap:2px;padding-top:5px}
  .mobile-nav button{font-size:10px;padding-left:1px;padding-right:1px}
  .attendance-calendar-card{padding-left:7px;padding-right:7px}
  .attendance-weekdays,.attendance-calendar{gap:3px}
  .attendance-day{font-size:11px;padding:3px}
  .attendance-day i{width:17px;height:17px}
  .grades-table{min-width:620px}
  .student-resilience-state{padding:22px 14px}
  .profile-identity{flex-direction:column}
  .profile-avatar{width:52px;height:52px}
  .security-details div{flex-direction:column;gap:4px}
  .security-details dd{max-width:none;text-align:left}
}

/* PR3 — accesibilidad y auditoría UX */
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.skip-link{position:fixed;z-index:9999;top:10px;left:10px;transform:translateY(-160%);padding:10px 14px;border-radius:10px;background:#fff;color:#17171b;font-weight:800;box-shadow:0 8px 30px rgba(0,0,0,.16)}
.skip-link:focus{transform:translateY(0)}
:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:3px solid color-mix(in srgb,var(--co-color-primary,#d20f68) 38%,#fff);outline-offset:3px}
[data-module][aria-current="page"]{font-weight:800}
body.dialog-open{overflow:hidden}
[role="dialog"]:not(.hidden){isolation:isolate}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto!important}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
@media(forced-colors:active){:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:2px solid CanvasText}.status-dot,.live-dot{forced-color-adjust:auto}.student-resilience-state{border:1px solid CanvasText}}
