:root{
  --bg:#f4f6fa;--surface:#ffffff;--surface2:#f8fafc;--surface3:#eef2f7;--line:#dfe4ec;--line2:#cfd6e1;
  --text:#172033;--muted:#6f7888;--soft:#4b5567;--accent:#b42346;--accent2:#d62d55;--accent-soft:#fff0f4;
  --nav:#ffffff;--nav-active:#fff1f4;--good:#14845f;--good-soft:#eaf8f2;--warn:#a56814;--warn-soft:#fff6df;
  --bad:#bd334c;--bad-soft:#fff0f2;--info:#2467b2;--info-soft:#edf5ff;--shadow:0 10px 32px rgba(31,45,70,.08);
  --shadow-sm:0 2px 10px rgba(31,45,70,.06);--radius:14px;--radius-sm:10px;--sidebar:264px;
  --ease:cubic-bezier(.2,.78,.2,1);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color-scheme:light
}
*{box-sizing:border-box}html,body,#app{margin:0;min-height:100%;background:var(--bg);color:var(--text)}body{min-height:100vh;overflow-x:hidden}
button,input,select,textarea{font:inherit}button{cursor:pointer}.mono{font-family:"SFMono-Regular",Consolas,monospace}.muted{color:var(--muted)}.small{font-size:12px}.right{text-align:right}.hidden{display:none!important}
.brand{display:flex;align-items:center;gap:12px}.brand-logo-wrap{width:142px;display:flex;align-items:center}.brand-logo{display:block;max-width:100%;height:auto}.brand-copy{min-width:0}.brand-copy strong{display:block;font-size:14px;letter-spacing:-.02em;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand-copy span{display:block;font-size:10px;color:var(--muted);letter-spacing:.12em;margin-top:4px;text-transform:uppercase}
.eyebrow{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-weight:800}
.login-shell{min-height:100vh;display:grid;grid-template-columns:minmax(430px,1.1fr) minmax(400px,.9fr);background:linear-gradient(135deg,#f8fafc,#eef2f7)}
.login-visual{position:relative;padding:58px clamp(42px,7vw,110px);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;border-right:1px solid var(--line);background:#fff}
.login-visual:after{content:"";position:absolute;width:620px;height:620px;border-radius:50%;right:-280px;bottom:-270px;background:radial-gradient(circle,rgba(214,45,85,.09),transparent 65%);border:1px solid rgba(180,35,70,.08)}
.hero-copy{position:relative;z-index:1;max-width:760px}.hero-copy h1{font-size:clamp(44px,5vw,72px);line-height:1;letter-spacing:-.055em;margin:16px 0 22px;max-width:760px}.hero-copy p{font-size:17px;color:#596477;line-height:1.65;max-width:680px}.authority-strip{display:flex;gap:9px;flex-wrap:wrap;margin-top:30px}.authority-pill{font-size:11px;padding:8px 10px;border:1px solid var(--line);border-radius:999px;color:#596477;background:#f8fafc}
.login-panel{display:grid;place-items:center;padding:40px}.login-card{width:min(440px,100%);background:#fff;border:1px solid var(--line);border-radius:20px;padding:32px;box-shadow:var(--shadow)}.login-card h2{font-size:27px;margin:5px 0 8px;letter-spacing:-.03em}.login-card p{color:var(--muted);margin:0 0 24px;line-height:1.5}
.field{display:grid;gap:7px;margin:13px 0}.field label{font-size:11px;color:#5e6878;font-weight:700}.field input,.field select,.field textarea,.input,.select{width:100%;background:#fff;border:1px solid var(--line2);color:var(--text);border-radius:9px;padding:10px 11px;outline:none;transition:border .18s,box-shadow .18s}.field textarea{min-height:84px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus,.input:focus,.select:focus{border-color:#cc5c76;box-shadow:0 0 0 3px rgba(180,35,70,.08)}
.primary{border:0;border-radius:9px;background:var(--accent);color:#fff;font-weight:800;padding:11px 14px;box-shadow:0 6px 16px rgba(180,35,70,.16)}.primary:hover{background:#9f1c3b}.primary.wide{width:100%}.login-error{min-height:19px;font-size:12px;color:var(--bad);margin-top:12px}
.shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar) 1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar);background:var(--nav);border-right:1px solid var(--line);z-index:30;display:flex;flex-direction:column}.sidebar .brand{min-height:84px;padding:12px 18px;border-bottom:1px solid var(--line);align-items:flex-start;flex-direction:column}
.nav-scroll{padding:12px 9px;overflow:auto;flex:1}.nav-group{margin:8px 0 17px}.nav-label{font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:#9098a7;padding:0 10px;margin:0 0 6px;font-weight:800}.nav-link{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:9px;text-decoration:none;color:#566173;font-size:12.5px;margin:2px 0;transition:background .15s,color .15s,transform .15s}.nav-link:hover{background:#f5f7fa;color:#1d2637}.nav-link.active{background:var(--nav-active);color:#8e1836;font-weight:700;box-shadow:inset 3px 0 var(--accent)}.nav-dot{width:6px;height:6px;border-radius:50%;background:#b8bfca}.nav-link.active .nav-dot{background:var(--accent)}
.sidebar-foot{padding:12px 15px 14px;border-top:1px solid var(--line);font-size:11px;background:#fbfcfd}.runtime-mini{display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:center}.live-dot{width:8px;height:8px;border-radius:50%;background:var(--good);box-shadow:0 0 0 4px rgba(20,132,95,.09)}.sidebar-foot .mono{font-size:10px;color:#8a93a1;margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.main{grid-column:2;min-width:0}.topbar{height:76px;position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:rgba(255,255,255,.92);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}.crumb{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted)}.crumb strong{color:var(--text)}.institution-topline{display:flex;flex-direction:column;gap:3px}.institution-topline small{font-size:11px;color:var(--muted)}.top-actions{display:flex;align-items:center;gap:8px}.chip{font-size:10px;border:1px solid var(--line);background:#f8fafc;border-radius:999px;padding:6px 9px;color:#667184}.user-btn{border:1px solid var(--line);background:#fff;color:var(--text);padding:7px 10px;border-radius:9px}.logout{border:1px solid var(--line);background:#fff;color:#667184;padding:7px 10px;border-radius:9px}
.content{padding:22px clamp(18px,3vw,36px) 56px;max-width:1780px;margin:0 auto}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:3px 0 20px}.page-head h1{font-size:29px;letter-spacing:-.04em;margin:5px 0 4px}.page-head p{margin:0;color:var(--muted);font-size:13px;max-width:820px;line-height:1.5}.page-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.page-context{font-size:11px;color:#667184;margin-top:8px;display:flex;gap:10px;flex-wrap:wrap}.page-context b{color:#1c2637}
.btn{border:1px solid var(--line2);background:#fff;color:#3f4a5c;border-radius:8px;padding:8px 11px;font-size:11px;font-weight:700;box-shadow:var(--shadow-sm)}.btn:hover{border-color:#b9c1ce;background:#f9fafb}.btn.accent{border-color:var(--accent);background:var(--accent);color:#fff}.btn.danger{border-color:#e5b6c0;background:#fff6f7;color:#a42842}.btn.ghost{box-shadow:none;background:transparent}.btn:disabled{opacity:.45;cursor:not-allowed}
.grid{display:grid;gap:13px}.grid.kpi{grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:13px}.grid.two{grid-template-columns:minmax(0,1.45fr) minmax(330px,.75fr)}.grid.equal{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.five{grid-template-columns:repeat(5,minmax(0,1fr))}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}.card-pad{padding:17px}.kpi-card{padding:15px 16px;min-height:112px;position:relative}.kpi-label{font-size:9px;text-transform:uppercase;letter-spacing:.14em;color:#8993a2;font-weight:800}.kpi-value{font-size:29px;letter-spacing:-.05em;font-weight:800;margin:10px 0 5px;color:#172033}.kpi-sub{font-size:11px;color:var(--muted)}.kpi-accent{position:absolute;inset:auto 14px 13px auto;font-size:9px;color:#a0a8b5}.card-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;border-bottom:1px solid var(--line);background:#fcfdfe}.card-title{font-size:13px;font-weight:800}.card-sub{font-size:10px;color:var(--muted);margin-top:3px}.card-body{padding:15px 16px}
.hero-panel{min-height:286px;position:relative;overflow:hidden;background:linear-gradient(135deg,#fff,#f8fafc 75%);border:1px solid var(--line)}.hero-panel:after{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(58,70,90,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(58,70,90,.035) 1px,transparent 1px);background-size:28px 28px;mask-image:linear-gradient(to right,transparent 28%,black)}.hero-content{position:relative;z-index:2;padding:24px;max-width:710px}.hero-content h2{font-size:31px;letter-spacing:-.045em;margin:9px 0}.hero-content p{color:#687385;line-height:1.6;font-size:13px}.runtime-orbit{position:absolute;right:58px;top:43px;width:196px;height:196px;border-radius:50%;border:1px solid #dce2ea;z-index:2;display:grid;place-items:center;background:rgba(255,255,255,.5)}.runtime-orbit:before,.runtime-orbit:after{content:"";position:absolute;border-radius:50%;border:1px solid rgba(180,35,70,.13)}.runtime-orbit:before{inset:23px}.runtime-orbit:after{inset:48px}.orbit-core{width:54px;height:54px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#e85d7d,#b42346 55%,#7e112b);box-shadow:0 0 28px rgba(180,35,70,.2);transform:scale(calc(.93 + var(--pulse,0) * .08));transition:transform .45s var(--ease)}.orbit-label{position:absolute;bottom:-25px;font-size:9px;color:#8f98a7;letter-spacing:.12em;text-transform:uppercase}
.progress-wrap{margin-top:18px}.progress-meta{display:flex;justify-content:space-between;font-size:10px;color:#7d8797;margin-bottom:6px}.progress{height:6px;background:#e8ecf2;border-radius:999px;overflow:hidden}.progress>i{display:block;height:100%;width:0;background:linear-gradient(90deg,#b42346,#dc5574);border-radius:999px;transition:width .52s var(--ease)}
.signal-list{display:grid}.signal{display:grid;grid-template-columns:9px 1fr auto;gap:11px;align-items:start;padding:12px 0;border-bottom:1px solid var(--line)}.signal:last-child{border:0}.severity{width:8px;height:8px;border-radius:50%;margin-top:4px;background:var(--info)}.severity.high{background:var(--bad)}.severity.medium{background:#d28a28}.severity.good{background:var(--good)}.signal strong{font-size:12px;display:block;margin-bottom:3px}.signal span{font-size:11px;color:var(--muted);line-height:1.45}.signal a{font-size:10px;color:#485367;text-decoration:none;border:1px solid var(--line);border-radius:7px;padding:5px 7px;background:#fff}
.table-wrap{overflow:auto}.table{width:100%;border-collapse:collapse;min-width:760px}.table th{text-align:left;font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:#818a98;font-weight:800;padding:10px 12px;border-bottom:1px solid var(--line);background:#f8fafc;position:sticky;top:0}.table td{padding:10px 12px;border-bottom:1px solid #edf0f4;font-size:11.5px;color:#465164;vertical-align:top}.table tr:hover td{background:#fafbfd}.table td strong{color:#1d2637}.link{color:#8f1a38;text-decoration:none;font-weight:750}.link:hover{text-decoration:underline}.badge{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line2);border-radius:999px;padding:4px 7px;font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:#687385;background:#f7f9fb}.badge.good{color:#116848;border-color:#b8e0d2;background:var(--good-soft)}.badge.warn{color:#8a5711;border-color:#ead7a8;background:var(--warn-soft)}.badge.bad{color:#a52640;border-color:#efc4cc;background:var(--bad-soft)}.badge.info{color:#1c5a9f;border-color:#bfd7ee;background:var(--info-soft)}.confidence{font-family:"SFMono-Regular",monospace;font-size:10px;color:#788291}
.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}.search{min-width:260px;flex:1;max-width:480px;background:#fff;border:1px solid var(--line2);border-radius:8px;color:var(--text);padding:9px 11px;outline:none}.search:focus{border-color:#ca6079;box-shadow:0 0 0 3px rgba(180,35,70,.07)}.toolbar .select{width:auto;min-width:130px}.section-gap{margin-top:13px}.metric-line{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid #edf0f4;font-size:11px}.metric-line:last-child{border-bottom:0}.metric-line span{color:var(--muted)}
.profile-head{display:flex;align-items:center;gap:14px}.avatar{width:54px;height:54px;border-radius:14px;background:linear-gradient(145deg,#fff0f4,#f7dfe5);color:#9b1b39;display:grid;place-items:center;font-weight:900;font-size:19px;border:1px solid #efcbd4}.profile-title h2{margin:0 0 4px;font-size:23px}.profile-title p{margin:0;color:var(--muted);font-size:11px}.profile-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px;margin-top:13px}.detail-list{display:grid;grid-template-columns:140px 1fr;gap:9px 12px;font-size:11px}.detail-list dt{color:#7d8796}.detail-list dd{margin:0;color:#344054}.student-hero{padding:19px}.student-hero .profile-head{margin-bottom:17px}
.tabs{display:flex;gap:5px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin:0 0 14px}.tab{border:0;background:transparent;color:#667184;padding:10px 11px;font-size:11px;font-weight:700;border-bottom:2px solid transparent}.tab.active{color:#92203b;border-bottom-color:var(--accent)}
.timeline{position:relative;padding-left:18px}.timeline:before{content:"";position:absolute;left:4px;top:6px;bottom:6px;width:1px;background:var(--line2)}.timeline-item{position:relative;padding:0 0 15px 14px}.timeline-item:before{content:"";position:absolute;left:-18px;top:4px;width:8px;height:8px;border-radius:50%;background:#c83d5d;border:2px solid #fff;box-shadow:0 0 0 1px #e5a6b5}.timeline-item strong{font-size:11px}.timeline-item p{font-size:10px;color:var(--muted);margin:4px 0 0}
.empty{padding:32px;text-align:center;color:#88919f;font-size:12px}.notice{border:1px solid #ead9ae;background:#fff8e9;color:#76500f;border-radius:9px;padding:10px 12px;font-size:11px;line-height:1.5}.notice.good{border-color:#b6ddcf;background:#eef9f5;color:#17674d}.notice.info{border-color:#c7dced;background:#f1f7fd;color:#285f96}.notice.neutral{border-color:var(--line);background:#f8fafc;color:#5d6778}
.calendar{display:grid;grid-template-columns:repeat(7,minmax(150px,1fr));gap:8px;min-width:1080px}.day-column{background:#fafbfd;border:1px solid var(--line);border-radius:10px;min-height:240px}.day-head{padding:9px 10px;border-bottom:1px solid var(--line);font-size:10px;color:#6b7585;font-weight:800;background:#f5f7fa}.session-card{margin:7px;padding:9px;border-radius:8px;background:#fff;border:1px solid var(--line);box-shadow:0 2px 8px rgba(31,45,70,.04)}.session-card strong{font-size:11px}.session-card p{font-size:9.5px;color:var(--muted);margin:4px 0}.session-card .time{font-size:9px;color:#9a2440;font-weight:800}.calendar-wrap{overflow:auto}
.pager{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-top:1px solid var(--line);background:#fbfcfd}.pager-info{font-size:10px;color:var(--muted)}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.form-grid .span2{grid-column:span 2}.form-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
.modal-backdrop{position:fixed;inset:0;background:rgba(25,33,47,.28);display:grid;place-items:center;z-index:100;padding:20px;backdrop-filter:blur(2px)}.modal{width:min(820px,100%);max-height:92vh;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 24px 70px rgba(31,45,70,.22)}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--line)}.modal-head h3{margin:0;font-size:16px}.modal-body{padding:17px 18px}.icon-btn{border:0;background:#f1f4f7;width:31px;height:31px;border-radius:8px;color:#657083}
.stat-strip{display:flex;gap:16px;flex-wrap:wrap;padding:12px 15px;background:#fafbfd;border-bottom:1px solid var(--line)}.stat-strip .stat{font-size:10px;color:var(--muted)}.stat-strip .stat strong{font-size:13px;color:var(--text);margin-left:4px}
.module-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.module-card{display:block;text-decoration:none;color:inherit;background:#fff;border:1px solid var(--line);border-radius:12px;padding:15px;transition:transform .15s,border .15s,box-shadow .15s}.module-card:hover{transform:translateY(-1px);border-color:#c8ced8;box-shadow:var(--shadow-sm)}.module-card .module-kicker{font-size:9px;color:#9b1e3b;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.module-card h3{font-size:14px;margin:7px 0 5px}.module-card p{font-size:10.5px;color:var(--muted);line-height:1.5;margin:0}
.live-rail{display:flex;gap:5px;align-items:end;height:43px}.live-rail i{display:block;width:4px;border-radius:3px 3px 0 0;background:linear-gradient(#d9617c,#a22140);height:calc(9px + var(--h) * 1px);transition:height .5s var(--ease)}
.mobile-head{display:none}.loading{display:grid;place-items:center;min-height:240px;color:#7f8998;font-size:12px}.spinner{width:22px;height:22px;border:2px solid #e2e7ed;border-top-color:#c12b4e;border-radius:50%;animation:spin .8s linear infinite;margin-bottom:9px}@keyframes spin{to{transform:rotate(360deg)}}
.toast{position:fixed;right:22px;bottom:22px;z-index:200;background:#1f2937;color:#fff;padding:11px 14px;border-radius:9px;box-shadow:0 12px 30px rgba(31,45,70,.22);font-size:11px;opacity:0;transform:translateY(10px);transition:.2s}.toast.show{opacity:1;transform:translateY(0)}
@media(max-width:1250px){:root{--sidebar:232px}.grid.kpi{grid-template-columns:repeat(2,1fr)}.grid.five{grid-template-columns:repeat(3,1fr)}.grid.two{grid-template-columns:1fr}.runtime-orbit{opacity:.55;right:35px}.hero-content{max-width:590px}.module-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.login-shell{grid-template-columns:1fr}.login-visual{display:none}.login-panel{padding:20px}.shell{display:block}.sidebar{transform:translateX(-100%);transition:transform .25s var(--ease);width:264px}.sidebar.open{transform:translateX(0)}.main{display:block}.mobile-head{display:block}.topbar{padding:0 13px}.content{padding:17px 11px 42px}.grid.kpi,.grid.three,.grid.five,.profile-grid,.form-grid,.module-grid{grid-template-columns:1fr}.form-grid .span2{grid-column:span 1}.page-head{align-items:flex-start;flex-direction:column}.runtime-orbit{display:none}.table{min-width:720px}.detail-list{grid-template-columns:110px 1fr}.top-actions .chip{display:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* v2.2 academic intelligence workspaces */
.module-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px;padding:5px;background:#fff;border:1px solid var(--line);border-radius:11px;box-shadow:var(--shadow-sm)}
.module-tab{padding:8px 11px;border-radius:7px;color:#647084;text-decoration:none;font-size:11px;font-weight:700;transition:.16s}
.module-tab:hover{background:#f4f6f9;color:#283449}.module-tab.active{background:var(--accent-soft);color:#971d3b;box-shadow:inset 0 0 0 1px rgba(180,35,70,.08)}
.filter-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px 14px;margin-bottom:13px;box-shadow:var(--shadow-sm)}
.filter-title{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:800;margin-bottom:8px}.filter-grid{display:grid;grid-template-columns:repeat(6,minmax(110px,1fr));gap:8px}.filter-grid .field{margin:0}.quick-filter-row{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.export-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.export-actions>span{font-size:10px;color:var(--muted);font-weight:800;text-transform:uppercase;letter-spacing:.1em}
.trend-chart{display:grid;gap:9px}.trend-row{display:grid;grid-template-columns:72px minmax(100px,1fr) 58px 74px;align-items:center;gap:9px;font-size:11px}.trend-label{color:#5e6878;font-weight:700}.trend-track{height:8px;border-radius:999px;background:#edf0f4;overflow:hidden}.trend-track i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#bf2e51,#df6a86);min-width:2px}.trend-row strong{font-size:11px;text-align:right}.trend-row span{font-size:10px;color:var(--muted);text-align:right}
.student-action-strip{display:flex;justify-content:flex-end;align-items:center;gap:8px;flex-wrap:wrap;margin:-2px 0 13px}.student-command{display:flex;align-items:center;justify-content:space-between;padding:18px 20px;margin-bottom:13px}.student-command-main{display:flex;align-items:center;gap:14px}.student-command-main h2{margin:3px 0;font-size:22px;letter-spacing:-.035em}.student-command-main p{margin:0;color:var(--muted);font-size:12px}.student-command-side{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:11px}.avatar.large{width:54px;height:54px;font-size:17px;border-radius:14px}.student-tabs{margin-bottom:13px}.profile-sections{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.break{word-break:break-all}
.student-signal-list{display:grid;gap:8px}.student-signal{display:grid;grid-template-columns:8px 1fr;gap:10px;padding:10px 11px;border:1px solid var(--line);border-radius:9px;text-decoration:none;color:var(--text);background:#fbfcfd}.student-signal>span{width:8px;height:8px;border-radius:50%;margin-top:4px;background:#8d98a8}.student-signal.high>span{background:var(--bad)}.student-signal.medium>span{background:var(--warn)}.student-signal.good>span{background:var(--good)}.student-signal strong{display:block;font-size:11px}.student-signal small{display:block;color:var(--muted);font-size:10px;margin-top:3px;line-height:1.45}.quick-action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.quick-action-grid a{display:flex;min-height:54px;align-items:center;padding:10px 11px;border:1px solid var(--line);border-radius:9px;text-decoration:none;color:#354154;font-size:11px;font-weight:700;background:#fbfcfd}.quick-action-grid a:hover{border-color:#c8cfda;background:#fff}
.session-hero{padding:18px 20px;margin-bottom:13px}.session-hero h2{font-size:24px;letter-spacing:-.04em;margin:5px 0}.session-hero h2 span{font-size:12px;color:var(--muted);font-family:"SFMono-Regular",Consolas,monospace}.session-hero p{margin:0;color:var(--muted);font-size:12px}.session-meta{display:flex;gap:8px;align-items:center;margin-top:13px;flex-wrap:wrap;font-size:11px;color:var(--muted)}
.report-template-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.report-template{border:1px solid var(--line);background:#fbfcfd;border-radius:9px;padding:10px 11px;text-align:left;color:var(--text)}.report-template:hover{background:#fff;border-color:#c2cad6}.report-template span{display:block;font-size:11px;font-weight:800}.report-template small{display:block;font-size:9px;color:var(--muted);line-height:1.45;margin-top:4px}.field-help{font-size:9px;color:var(--muted);line-height:1.4}.report-job-head{display:flex;justify-content:space-between;gap:10px;align-items:start}.report-job-head h2{font-size:16px;margin:5px 0}.report-progress{height:9px}.download-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.download-card{display:grid;gap:4px;padding:18px;border:1px solid var(--line);border-radius:11px;text-decoration:none;color:var(--text);background:#fbfcfd}.download-card:hover{background:#fff;border-color:#bfc8d4;box-shadow:var(--shadow-sm)}.download-card strong{font-size:16px}.download-card span{font-size:10px;color:var(--muted)}.processing-panel{display:flex;align-items:center;gap:18px;padding:16px}.processing-panel p{margin:5px 0 0;color:var(--muted);font-size:11px}.processing-ring{width:66px;height:66px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--accent) var(--report-progress,65%),#e9edf3 0);position:relative}.processing-ring:after{content:"";position:absolute;inset:6px;border-radius:50%;background:#fff}.processing-ring span{position:relative;z-index:1;font-size:11px;font-weight:800}.detail-list.compact{margin-top:12px}.detail-list.compact dt,.detail-list.compact dd{padding-top:6px;padding-bottom:6px}
.form-section-title{grid-column:1/-1;font-size:10px;font-weight:900;letter-spacing:.11em;text-transform:uppercase;color:#7a8494;border-top:1px solid var(--line);padding-top:13px;margin-top:5px}.danger-dot{background:var(--bad)!important}
@media(max-width:1150px){.filter-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.download-grid{grid-template-columns:1fr}.profile-sections{grid-template-columns:1fr}}
@media(max-width:760px){.module-tabs{overflow:auto;flex-wrap:nowrap}.module-tab{white-space:nowrap}.filter-grid{grid-template-columns:1fr}.trend-row{grid-template-columns:60px minmax(80px,1fr) 52px}.trend-row span{display:none}.student-command{align-items:flex-start;gap:12px}.student-command-side{display:none}.quick-action-grid,.report-template-grid{grid-template-columns:1fr}.student-action-strip{justify-content:flex-start}}
.global-find{position:relative;width:min(410px,34vw);margin:0 14px}.global-find input{width:100%;height:36px;border:1px solid var(--line);border-radius:9px;background:#f8fafc;padding:0 12px;color:var(--text);font-size:11px;outline:none}.global-find input:focus{background:#fff;border-color:#c4cbd6;box-shadow:0 0 0 3px rgba(36,103,178,.06)}.global-find-results{display:none;position:absolute;top:42px;left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:11px;box-shadow:0 16px 38px rgba(31,45,70,.16);padding:5px;z-index:80}.global-find-results.show{display:grid}.global-find-results a{padding:9px 10px;border-radius:7px;text-decoration:none;color:var(--text)}.global-find-results a:hover{background:#f5f7fa}.global-find-results strong{display:block;font-size:11px}.global-find-results span{display:block;color:var(--muted);font-size:9px;margin-top:3px}.empty.mini{padding:10px;font-size:10px}
@media(max-width:980px){.global-find{display:none}}
.student-command{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm)}
.filter-title>div{display:grid;gap:2px}.filter-title>div span{font-size:9px;color:var(--muted);font-weight:500}.stat-strip{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.stat{background:#f8fafc;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:9px;color:var(--muted)}.stat strong{display:block;font-size:10px;color:var(--text);margin-top:3px}.student-mini{font-size:9px;color:var(--muted);padding-left:8px;border-left:1px solid var(--line)}.student-mini strong{display:block;color:var(--text);font-size:11px;margin-top:2px}

/* v2.3 people-first cards, calendars, leave and organization */
:root{--surface:#ffffff;--surface-soft:#f7f9fc;--surface-tint:#fbfcfe;--card-radius:16px;--soft-shadow:0 8px 28px rgba(38,50,74,.07)}
body{background:#f4f6f9}.card{border-radius:var(--card-radius);box-shadow:0 2px 10px rgba(31,45,70,.035)}
.welcome-strip{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px 22px;margin-bottom:14px;border:1px solid var(--line);border-radius:18px;background:linear-gradient(120deg,#fff 0%,#fff 65%,#f9edf1 100%);box-shadow:var(--soft-shadow)}
.welcome-strip h2{font-size:25px;letter-spacing:-.04em;margin:4px 0}.welcome-strip p{margin:0;color:var(--muted);font-size:12px;max-width:720px}.welcome-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.day-pulse{padding:2px}.day-pulse-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.day-pulse-grid>div,.health-stack>div{padding:12px;border:1px solid var(--line);border-radius:11px;background:var(--surface-soft)}.day-pulse-grid span,.health-stack span{display:block;font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.07em}.day-pulse-grid strong,.health-stack strong{display:block;margin-top:5px;font-size:15px;color:var(--text)}.sync-pill{display:inline-flex;align-items:center;gap:6px;padding:6px 9px;border:1px solid #cfe8db;border-radius:999px;background:#f1faf5;color:#27764c;font-size:11px;font-weight:800}.sync-pill i{width:7px;height:7px;border-radius:50%;background:#38a169;box-shadow:0 0 0 4px rgba(56,161,105,.1)}
.card-modules{grid-template-columns:repeat(3,minmax(0,1fr))}.module-card.modern{min-height:138px;border-radius:15px;padding:16px;display:grid;grid-template-columns:42px 1fr 22px;gap:12px;align-items:start;background:#fff}.module-card.modern:hover{transform:translateY(-2px);box-shadow:var(--soft-shadow);border-color:#ccd3dd}.module-icon{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:#f8edf1;color:#a62648;font-size:17px}.module-arrow{font-size:18px;color:#9ca6b4;align-self:center}.module-card.modern h3{margin:3px 0 5px}.module-card.modern p{margin:0}
.search-panel{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:15px;padding:10px;margin:0 0 14px;box-shadow:var(--shadow-sm)}.search-main{position:relative;flex:1;min-width:240px}.search-main input{width:100%;height:42px;border:1px solid #dce2e9;border-radius:10px;background:#f8fafc;padding:0 12px 0 38px;outline:none;font-size:12px}.search-main input:focus{background:#fff;border-color:#bfc8d4;box-shadow:0 0 0 3px rgba(160,34,67,.06)}.search-icon{position:absolute;left:13px;top:9px;color:#8994a3;font-size:18px}.search-filters{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.search-filters select{height:38px;border:1px solid var(--line);background:#fff;border-radius:9px;padding:0 10px;color:var(--text);font-size:10px}.view-switch{display:flex;border:1px solid var(--line);border-radius:9px;padding:2px;background:#f6f8fb}.icon-toggle{border:0;background:transparent;border-radius:7px;width:32px;height:30px;color:#7f8998}.icon-toggle.active{background:#fff;color:var(--accent);box-shadow:0 1px 5px rgba(31,45,70,.08)}
.person-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.person-card{display:block;text-decoration:none;color:var(--text);border:1px solid var(--line);border-radius:15px;padding:14px;background:#fff;box-shadow:0 2px 8px rgba(31,45,70,.025);transition:.18s}.person-card:hover{border-color:#c8d0da;box-shadow:var(--soft-shadow);transform:translateY(-1px)}.person-card-top{display:flex;align-items:center;gap:10px}.person-card-title{display:grid;gap:2px;min-width:0;flex:1}.person-card-title strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.person-card-title span{font-size:9px;color:var(--muted)}.person-card-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:13px}.person-card-meta>div{padding:8px 9px;border-radius:9px;background:#f8fafc}.person-card-meta span{display:block;font-size:8px;text-transform:uppercase;letter-spacing:.06em;color:#8993a1}.person-card-meta strong{display:block;font-size:10px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.person-card-contact{border-top:1px solid #eef1f4;margin-top:11px;padding-top:9px;display:flex;justify-content:space-between;gap:8px;font-size:9px;color:var(--muted)}.person-card-contact span{color:#9c2343;font-weight:800;white-space:nowrap}
.leave-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.leave-card{border:1px solid var(--line);border-radius:15px;background:#fff;padding:15px;box-shadow:0 2px 8px rgba(31,45,70,.025)}.leave-card-head{display:flex;align-items:start;justify-content:space-between;gap:12px}.leave-card-head>div{display:grid;gap:4px}.leave-card-head strong{font-size:12px}.leave-type{font-size:9px;color:#8a5362;font-weight:800;text-transform:uppercase;letter-spacing:.07em}.leave-card p{font-size:11px;line-height:1.55;color:#586476;min-height:34px}.leave-card-actions{display:flex;gap:7px;margin-top:11px}.approval-track{display:flex;align-items:center;gap:5px;margin:13px 0}.approval-track span{font-size:8px;color:#8d97a5;padding:5px 7px;border-radius:999px;border:1px solid var(--line);background:#f7f9fb;white-space:nowrap}.approval-track span.done{background:#eff8f3;border-color:#cce7d8;color:#2e7750}.approval-track span.active{background:#fff4e4;border-color:#efd7ad;color:#926324}.approval-track i{height:1px;background:#dfe4ea;flex:1;min-width:7px}.leave-calendar{display:grid;grid-template-columns:repeat(7,minmax(130px,1fr));gap:8px;overflow:auto}.leave-day{min-height:150px;border:1px solid var(--line);border-radius:12px;padding:9px;background:#fff}.leave-day-head{font-size:10px;font-weight:800;margin-bottom:8px}.leave-calendar-item{display:grid;gap:2px;padding:7px;border-radius:8px;background:#f7f9fc;border-left:3px solid #b52b4c;margin-bottom:5px}.leave-calendar-item strong{font-size:9px}.leave-calendar-item span{font-size:10px;color:var(--muted)}
.section-heading{display:flex;align-items:end;justify-content:space-between;gap:16px;margin:9px 0 11px}.section-heading h2{margin:3px 0;font-size:18px;letter-spacing:-.03em}.section-heading p{margin:2px 0 0;color:var(--muted);font-size:10px}.section-gap{margin-top:14px}.org-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.org-card,.workflow-card,.onboarding-card{border:1px solid var(--line);border-radius:15px;background:#fff;padding:14px;box-shadow:0 2px 8px rgba(31,45,70,.025)}.org-card-top{display:grid;grid-template-columns:38px 1fr auto;gap:10px;align-items:start}.org-icon{width:38px;height:38px;border-radius:11px;background:#f2f5f9;display:grid;place-items:center;color:#8a2442;font-weight:900}.org-card-top>div:nth-child(2){display:grid;gap:2px}.org-card-top span,.workflow-head span{font-size:8px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.org-card-top strong,.workflow-head strong{font-size:11px}.org-card-top small{font-size:10px;color:var(--muted)}.org-meta{margin-top:13px;padding-top:10px;border-top:1px solid #eef1f4;display:flex;justify-content:space-between;font-size:9px}.org-meta span{color:var(--muted)}.workflow-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.workflow-head{display:flex;justify-content:space-between;gap:10px}.workflow-head>div{display:grid;gap:3px}.workflow-steps{display:grid;gap:7px;margin:13px 0}.workflow-steps>div{display:grid;grid-template-columns:25px 1fr;gap:8px;align-items:center}.workflow-steps b{width:25px;height:25px;border-radius:50%;display:grid;place-items:center;background:#f4e8ec;color:#962642;font-size:9px}.workflow-steps span{display:grid}.workflow-steps strong{font-size:9px}.workflow-steps small{font-size:10px;color:var(--muted);margin-top:1px}
.onboarding-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.onboarding-head{display:grid;grid-template-columns:42px 1fr auto;gap:10px;align-items:center}.onboarding-head>div:nth-child(2){display:grid;gap:2px}.onboarding-head strong{font-size:11px}.onboarding-head span{font-size:9px;color:var(--muted)}.onboarding-tasks{display:grid;gap:6px;margin:12px 0}.task-row{display:grid;grid-template-columns:22px 1fr;gap:8px;width:100%;text-align:left;border:1px solid var(--line);border-radius:9px;padding:8px;background:#f9fafc;color:var(--text)}.task-row:hover{background:#fff}.task-row.done{background:#f3faf6;border-color:#d9ebdf}.task-row>span{font-size:14px;color:#9ba4b1}.task-row.done>span{color:#3b8a5e}.task-row div{display:grid;gap:2px}.task-row strong{font-size:9px}.task-row small{font-size:10px;color:var(--muted)}
.document-list,.identity-card-list{display:grid;gap:8px}.document-card{display:grid;grid-template-columns:36px 1fr auto;gap:9px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:9px;background:#fafbfd}.doc-icon{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;background:#f2e7eb;color:#982744;font-size:8px;font-weight:900}.document-card>div:nth-child(2){display:grid;gap:2px}.document-card strong{font-size:10px}.document-card span,.document-card small{font-size:10px;color:var(--muted)}.identity-card-ui{display:flex;justify-content:space-between;gap:12px;min-height:92px;padding:14px;border-radius:13px;background:linear-gradient(135deg,#262d38,#444b58);color:#fff;box-shadow:0 8px 20px rgba(31,45,70,.15)}.identity-card-ui>div{display:grid;align-content:space-between;gap:4px}.identity-card-ui span,.identity-card-ui small{font-size:8px;opacity:.7}.identity-card-ui strong{font-size:15px;letter-spacing:.04em}.my-workspace-head{display:flex;align-items:end;justify-content:space-between;gap:16px;padding:18px 20px;border:1px solid var(--line);border-radius:16px;background:#fff;margin-bottom:13px}.my-workspace-head h2{margin:3px 0;font-size:20px}.my-workspace-head p{margin:0;color:var(--muted);font-size:10px}.health-stack{display:grid;gap:8px}.health-stack>div{display:flex;justify-content:space-between;align-items:center}.health-stack strong{font-size:11px;margin:0}.health-stack span{font-size:8px}
.calendar-board{border-radius:15px}.day-column{border-radius:12px}.session-card{border-radius:9px}
@media(max-width:1220px){.card-modules,.person-grid,.org-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.leave-calendar{grid-template-columns:repeat(7,minmax(115px,1fr))}.day-pulse-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.welcome-strip,.my-workspace-head,.section-heading{align-items:flex-start;flex-direction:column}.welcome-actions{justify-content:flex-start}.card-modules,.person-grid,.org-grid,.workflow-grid,.onboarding-grid,.leave-grid{grid-template-columns:1fr}.search-panel{align-items:stretch;flex-direction:column}.search-main{min-width:0}.search-filters{display:grid;grid-template-columns:1fr 1fr}.search-filters select{width:100%}.person-card-meta{grid-template-columns:1fr}.day-pulse-grid{grid-template-columns:1fr 1fr}.leave-calendar{grid-template-columns:repeat(7,180px)}}
.approval-step-editor{display:grid;grid-template-columns:34px 1fr 34px;gap:10px;align-items:start;padding:10px 0;border-bottom:1px solid var(--line)}.approval-step-number{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#f4e8ec;color:#962642;font-size:10px;font-weight:900;margin-top:21px}.approval-step-editor .form-grid{width:100%}.approval-step-editor>.icon-btn{margin-top:21px}.leave-event{display:grid;gap:3px;padding:7px;border-left:3px solid #aa2849;border-radius:7px;background:#f8fafc;margin-bottom:6px}.leave-event strong{font-size:9px}.leave-event span{font-size:10px;color:var(--muted)}


/* v2.4 attendance continuity + universal search */
.global-find-results{position:absolute;top:46px;left:0;right:0;display:none;z-index:50;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 20px 48px rgba(35,44,61,.14);padding:6px;max-height:430px;overflow:auto}
.global-find-results.show{display:grid;gap:3px}.global-find-results a{display:grid;grid-template-columns:72px minmax(0,1fr);grid-template-rows:auto auto;column-gap:10px;text-decoration:none;color:var(--text);padding:10px 11px;border-radius:10px}.global-find-results a:hover{background:#f6f8fb}.global-find-results strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.global-find-results small{grid-column:2;color:var(--muted);font-size:9px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-kind{grid-row:1/3;align-self:center;display:inline-flex;justify-content:center;padding:4px 6px;border-radius:999px;background:#f4e9ed;color:#942542;font-size:7px;font-weight:900;text-transform:uppercase;letter-spacing:.06em}
.source-status-ribbon{display:grid;grid-template-columns:34px minmax(0,1fr) auto;align-items:center;gap:11px;padding:11px 13px;margin-bottom:13px;border:1px solid #dce4df;border-radius:13px;background:linear-gradient(90deg,#f5fbf7,#fff);color:var(--text);text-decoration:none;box-shadow:0 2px 8px rgba(31,45,70,.025)}.source-status-ribbon.warn{border-color:#eeddbd;background:linear-gradient(90deg,#fff8eb,#fff)}.source-status-icon{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#e5f5eb;color:#27784b;font-size:13px;font-weight:900}.source-status-ribbon.warn .source-status-icon{background:#fff0d5;color:#996221}.source-status-ribbon div{display:grid;gap:2px}.source-status-ribbon strong{font-size:10px}.source-status-ribbon small{font-size:10px;color:var(--muted)}.source-status-action{font-size:8px;font-weight:900;color:#9d2846;white-space:nowrap}
.attendance-sync-hero{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:0 0 13px;padding:22px 24px;border:1px solid #e0e5ec;border-radius:18px;background:linear-gradient(135deg,#fff 0%,#fbfcfe 65%,#f8edf1 100%);box-shadow:var(--shadow-sm)}.attendance-sync-hero h2{margin:4px 0 6px;font-size:23px;letter-spacing:-.035em}.attendance-sync-hero p{max-width:720px;margin:0;color:var(--muted);font-size:10px;line-height:1.55}.sync-hero-state{min-width:190px;border:1px solid #d9e7de;border-radius:13px;background:#f4faf6;padding:12px 14px;display:grid;grid-template-columns:10px 1fr;gap:3px 8px;align-items:center}.sync-hero-state>span{width:9px;height:9px;border-radius:50%;background:#3c9766;box-shadow:0 0 0 5px rgba(60,151,102,.09)}.sync-hero-state strong{font-size:10px}.sync-hero-state small{grid-column:2;font-size:10px;color:var(--muted)}.sync-hero-state.warn{background:#fff8ec;border-color:#edd9b9}.sync-hero-state.warn>span{background:#cc8b2d;box-shadow:0 0 0 5px rgba(204,139,45,.09)}
.sync-flow{display:grid;grid-template-columns:1fr 34px 1fr 34px 1fr 34px 1fr;align-items:center;gap:5px;padding:8px 0}.sync-flow>i{height:2px;background:#dce3e9;border-radius:999px}.sync-flow-step{min-height:92px;border:1px solid var(--line);border-radius:13px;background:#fbfcfd;padding:11px;display:grid;grid-template-columns:25px 1fr;grid-template-rows:auto auto;gap:3px 8px;align-content:center}.sync-flow-step b{grid-row:1/3;width:25px;height:25px;border-radius:50%;display:grid;place-items:center;background:#e8f5ed;color:#2f7b52;font-size:9px}.sync-flow-step span{font-size:9px;font-weight:900}.sync-flow-step small{font-size:10px;color:var(--muted)}.sync-flow-step.warn b{background:#fff0d6;color:#9a6824}.sync-flow-step.warn{background:#fffaf2;border-color:#ecdcbc}
.sync-source-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.sync-source-card{border:1px solid var(--line);border-radius:15px;background:#fff;padding:15px;box-shadow:0 2px 9px rgba(31,45,70,.025)}.sync-source-card.degraded{border-color:#ead5ad}.sync-source-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.sync-source-head h3{margin:4px 0 3px;font-size:14px}.sync-source-head p{margin:0;color:var(--muted);font-size:8px}.sync-cursor-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:13px 0}.sync-cursor-grid>div{background:#f7f9fb;border-radius:9px;padding:9px}.sync-cursor-grid span{display:block;color:var(--muted);font-size:7px;text-transform:uppercase;letter-spacing:.06em}.sync-cursor-grid strong{display:block;margin-top:4px;font-size:10px}.sync-card-foot{border-top:1px solid #edf0f3;padding-top:9px;display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:8px}.sync-card-foot strong{color:var(--text)}
.scope-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.scope-card{border:1px solid var(--line);border-radius:12px;padding:12px;background:#fafbfd}.scope-card>span{display:inline-flex;padding:3px 6px;border-radius:999px;background:#eef1f5;color:#687487;font-size:7px;font-weight:900;letter-spacing:.07em}.scope-card.active>span{background:#e6f5eb;color:#2f7951}.scope-card.safe>span{background:#f4e9ed;color:#972844}.scope-card strong{display:block;font-size:10px;margin:9px 0 4px}.scope-card p{margin:0;color:var(--muted);font-size:8px;line-height:1.5}
@media(max-width:1100px){.sync-flow{grid-template-columns:1fr 1fr}.sync-flow>i{display:none}.sync-source-grid{grid-template-columns:1fr}.sync-cursor-grid{grid-template-columns:1fr 1fr}}
@media(max-width:760px){.attendance-sync-hero{align-items:flex-start;flex-direction:column}.sync-hero-state{width:100%}.scope-cards{grid-template-columns:1fr}.source-status-ribbon{grid-template-columns:34px 1fr}.source-status-action{grid-column:2}.global-find-results{position:fixed;left:10px;right:10px;top:64px}.sync-flow{grid-template-columns:1fr}.sync-cursor-grid{grid-template-columns:1fr 1fr}.sync-card-foot{flex-direction:column}}

.institution-summary{display:grid;gap:14px}
.info-list{display:grid;gap:10px}.info-row{display:grid;grid-template-columns:160px 1fr;gap:12px;padding:10px 0;border-bottom:1px solid var(--line)}.info-row:last-child{border-bottom:0}.info-row span{font-size:11px;color:var(--muted);font-weight:700;letter-spacing:.08em;text-transform:uppercase}.info-row strong,.info-row div{font-size:13px;color:var(--text)}
.contact-stack{display:grid;gap:12px}.contact-pill{display:flex;gap:10px;align-items:flex-start;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fbfcfe}.contact-pill b{display:block;font-size:12px}.contact-pill span{font-size:12px;color:var(--muted)}
.brand-subtle{font-size:9px;color:var(--muted);letter-spacing:.12em;text-transform:uppercase}
@media (max-width: 960px){.info-row{grid-template-columns:1fr}.topbar{height:auto;padding:12px 16px;align-items:flex-start;gap:10px;flex-wrap:wrap}.sidebar .brand{min-height:unset}.brand-logo-wrap{width:128px}}

.demo-chip{background:#fff6dc!important;border-color:#ecd69b!important;color:#8a5b00!important;font-weight:900;letter-spacing:.08em}

/* v2.7.1 management BI */
.management-filters{margin-bottom:16px}
.management-filters .filter-grid{grid-template-columns:repeat(5,minmax(150px,1fr))}
.bi-readiness{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.bi-readiness>div{border:1px solid var(--line,#e5e7eb);border-radius:14px;padding:16px;background:var(--panel-soft,#fafafa);display:flex;flex-direction:column;gap:5px;min-height:112px}
.bi-readiness span{font-size:12px;color:var(--muted,#667085);font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.bi-readiness strong{font-size:22px;line-height:1.2}
.bi-readiness small{color:var(--muted,#667085)}
@media(max-width:900px){.management-filters .filter-grid,.bi-readiness{grid-template-columns:1fr 1fr}}
@media(max-width:620px){.management-filters .filter-grid,.bi-readiness{grid-template-columns:1fr}}

/* v2.7.2 Student attendance calendar hotfix */
.student-att-controls{display:grid;grid-template-columns:38px minmax(155px,190px) minmax(260px,1fr) 38px;gap:8px;align-items:center}
.student-att-controls .select{min-width:0;height:38px}.student-att-controls .btn{height:38px;display:grid;place-items:center;font-size:16px;padding:0}
.att-calendar-kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:13px;margin-bottom:13px}
.att-calendar-title{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:16px 18px 12px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fff,#fbfcfd)}
.att-calendar-title h3{font-size:21px;letter-spacing:-.035em;margin:4px 0 2px}.att-calendar-title p{margin:0;color:var(--muted);font-size:10px}
.att-calendar-scroll{overflow-x:auto;overscroll-behavior-inline:contain;background:#fff}
.att-calendar{min-width:1050px;padding:0 14px 14px}
.att-calendar-heads{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));position:sticky;top:0;z-index:1;background:#fff;border-bottom:1px solid var(--line)}
.att-cal-head{padding:10px 9px;font-size:9px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;color:#7b8595;text-align:center}
.att-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid #e6eaf0;border-top:1px solid #e6eaf0}
.att-cal-day{min-height:176px;padding:8px;border-right:1px solid #e6eaf0;border-bottom:1px solid #e6eaf0;background:#fff;min-width:0;display:flex;flex-direction:column;gap:6px}
.att-cal-day.has-events{background:linear-gradient(180deg,#fff,#fcfdff)}.att-cal-day.muted-day{background:#f8fafc;min-height:176px}
.att-cal-date{display:flex;align-items:baseline;justify-content:space-between;gap:6px;margin-bottom:1px}.att-cal-date strong{font-size:12px;color:#283244}.att-cal-date span{font-size:7px;color:#929aa7;white-space:nowrap}
.att-cal-event{border:1px solid var(--line);border-left:3px solid #9ba5b4;border-radius:8px;padding:7px;background:#fafbfd;display:grid;gap:3px;box-shadow:0 1px 3px rgba(31,45,70,.025)}
.att-cal-event.attended{border-left-color:var(--good);background:var(--good-soft)}.att-cal-event.no-evidence{border-left-color:var(--warn);background:var(--warn-soft)}.att-cal-event.evidence-only{border-left-color:var(--info);background:var(--info-soft)}.att-cal-event.review{border-left-color:#7c6fb1;background:#f5f2ff}
.att-cal-event-top{display:flex;align-items:center;justify-content:space-between;gap:6px}.att-cal-time{font-size:8px;color:#5f6979;font-weight:800}.att-cal-mark{font-size:10px;font-weight:900}
.att-cal-event a,.att-cal-event>strong{color:#253149;text-decoration:none;font-size:9px;font-weight:900;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.att-cal-event a:hover{color:var(--accent);text-decoration:underline}
.att-cal-event small{display:block;font-size:7px;color:#6f7888;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.att-cal-more{font-size:10px;color:var(--muted);padding:3px 2px;font-weight:700}
.att-cal-day-foot{margin-top:auto;padding-top:5px;border-top:1px dashed #e4e8ee;display:flex;justify-content:space-between;gap:6px;font-size:7px;color:#8992a1}
.att-month-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.att-month-chip{display:grid;gap:3px;text-decoration:none;color:var(--text);padding:9px 10px;border:1px solid var(--line);border-radius:9px;background:#fafbfd}.att-month-chip:hover{border-color:#c8d0dc;background:#fff}.att-month-chip.active{border-color:#d98aa0;background:var(--accent-soft);box-shadow:inset 0 0 0 1px rgba(180,35,70,.06)}.att-month-chip strong{font-size:10px}.att-month-chip span{font-size:7px;color:var(--muted)}
@media(max-width:1100px){.att-calendar-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}.student-att-controls{grid-template-columns:38px minmax(145px,180px) minmax(180px,1fr) 38px}}
@media(max-width:760px){.student-att-controls{grid-template-columns:38px 1fr 38px}.student-att-controls #studentAttSubject{grid-column:1/-1;grid-row:2}.att-calendar-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.att-calendar{min-width:910px}.att-cal-day,.att-cal-day.muted-day{min-height:160px}.att-calendar-title{align-items:flex-start;flex-direction:column}.att-month-strip{grid-template-columns:repeat(2,minmax(0,1fr))}}


/* v2.7.3 Current attendance + lecture status colour system */
.attendance-current{display:grid;grid-template-columns:minmax(250px,.72fr) minmax(320px,1.28fr);gap:22px;align-items:center;margin:0 0 13px;padding:20px 22px;border:1px solid #dde3eb;border-radius:16px;background:#fff;box-shadow:var(--shadow-sm);position:relative;overflow:hidden}
.attendance-current:before{content:"";position:absolute;inset:0 auto 0 0;width:5px;background:#98a2b1}.attendance-current.excellent:before,.attendance-current.good:before{background:#2f8d5a}.attendance-current.watch:before{background:#d28b22}.attendance-current.low:before{background:#c15b5b}
.attendance-current-rate{display:grid;gap:4px}.attendance-current-rate>span,.month-attendance-strip span{font-size:8px;font-weight:900;letter-spacing:.1em;color:#7e8795}.attendance-current-rate>strong{font-size:42px;line-height:1;letter-spacing:-.055em;color:#263248}.attendance-current.excellent .attendance-current-rate>strong,.attendance-current.good .attendance-current-rate>strong{color:#267a4e}.attendance-current.watch .attendance-current-rate>strong{color:#a96b15}.attendance-current.low .attendance-current-rate>strong{color:#a44747}.attendance-current-rate small{font-size:9px;color:var(--muted)}
.attendance-current-progress{display:grid;gap:11px}.attendance-progress-track{height:12px;border-radius:999px;background:#edf0f4;overflow:hidden}.attendance-progress-track i{display:block;height:100%;border-radius:inherit;background:#8d98a7;transition:width .25s ease}.attendance-current.excellent .attendance-progress-track i,.attendance-current.good .attendance-progress-track i{background:#3a9964}.attendance-current.watch .attendance-progress-track i{background:#d79a3e}.attendance-current.low .attendance-progress-track i{background:#c96868}.attendance-current-counts{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:9px;color:#687283}.attendance-current-counts b{font-size:11px;color:#2e394c;margin-right:3px}
.attendance-count-kpis{margin-bottom:13px}
.attendance-legend{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:0 0 13px;padding:10px 12px;border:1px solid var(--line);border-radius:11px;background:#fff}.attendance-legend>strong{font-size:9px;margin-right:3px}.attendance-legend>small{font-size:10px;color:var(--muted);margin-left:auto}.legend-chip,.att-status-pill{display:inline-flex;align-items:center;gap:4px;border:1px solid transparent;border-radius:999px;font-size:7px;font-weight:900;letter-spacing:.025em;padding:4px 7px;white-space:nowrap}.legend-chip.attended,.att-status-pill.attended{background:#eaf7ef;border-color:#b9dfc8;color:#267249}.legend-chip.no-evidence,.att-status-pill.no-evidence{background:#fff5df;border-color:#eed092;color:#9a6518}.legend-chip.evidence-only,.att-status-pill.evidence-only{background:#eaf4ff;border-color:#bfd8f0;color:#376e9c}.legend-chip.review,.att-status-pill.review{background:#f2effb;border-color:#d3c9ec;color:#66559b}
.month-attendance-strip{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:0 0 13px;padding:15px 17px;border:1px solid var(--line);border-radius:12px;background:#fbfcfd}.month-attendance-strip>div{display:grid;gap:3px}.month-attendance-strip strong{font-size:29px;line-height:1;letter-spacing:-.04em;color:#334055}.month-attendance-strip p{margin:0;font-size:9px;color:var(--muted);text-align:right}.month-attendance-strip.excellent,.month-attendance-strip.good{background:#f1faf5;border-color:#cbe7d5}.month-attendance-strip.excellent strong,.month-attendance-strip.good strong{color:#28794e}.month-attendance-strip.watch{background:#fff9ec;border-color:#efdbad}.month-attendance-strip.watch strong{color:#a66c1a}.month-attendance-strip.low{background:#fff5f4;border-color:#efcccc}.month-attendance-strip.low strong{color:#a64b4b}
.att-cal-day.day-attended{box-shadow:inset 0 3px 0 #62a87d}.att-cal-day.day-no-evidence{box-shadow:inset 0 3px 0 #d99a3c}.att-cal-day.day-evidence-only{box-shadow:inset 0 3px 0 #6d9fc7}.att-cal-day.day-review{box-shadow:inset 0 3px 0 #8b7abc}.att-cal-event{border-left-width:4px}.att-cal-event.attended{border-color:#b9dfc8;border-left-color:#2f8d5a;background:#eff9f3}.att-cal-event.no-evidence{border-color:#efd59d;border-left-color:#d28b22;background:#fff8e9}.att-cal-event.evidence-only{border-color:#c4dbee;border-left-color:#5d90ba;background:#eff7ff}.att-cal-event.review{border-color:#d7cfee;border-left-color:#7a68ad;background:#f7f4fd}.att-cal-event-top{align-items:center}.att-cal-mark{display:none}.att-status-pill b{font-size:9px}.att-cal-day-foot .foot-good{color:#2d7e51;font-weight:800}.att-cal-day-foot .foot-warn{color:#9b681f;font-weight:800}
@media(max-width:900px){.attendance-current{grid-template-columns:1fr}.attendance-legend>small{width:100%;margin-left:0}.month-attendance-strip{align-items:flex-start;flex-direction:column}.month-attendance-strip p{text-align:left}}

/* v2.7.4 attendance semantics: real source evidence is always green ATTENDED. */
.att-cal-event.attended small:first-of-type{font-weight:700;color:#397154}
.att-denominator-note{font-size:7px;color:#7c8695;font-weight:700}

/* v2.7.5 UI streamline hotfix — schedule discoverability + clear attendance states */
.attendance-policy-note{margin:10px 0 14px;padding:10px 12px;border:1px solid #e2e7ee;border-radius:10px;background:#f8fafc;color:#5e6979;font-size:11px;line-height:1.55}.attendance-policy-note strong{color:#2e394c}
.att-cal-event.attended{background:#e7f7ed!important;border-color:#8dcca5!important;border-left-color:#238653!important;box-shadow:0 1px 4px rgba(35,134,83,.08)}
.att-cal-event.no-evidence{background:#fff0f0!important;border-color:#efb2b2!important;border-left-color:#c94242!important;box-shadow:0 1px 4px rgba(201,66,66,.08)}
.att-cal-event.review{background:#f4f6f8!important;border-color:#d9dfe6!important;border-left-color:#8a95a3!important;color:#5d6775}
.legend-chip.attended,.att-status-pill.attended{background:#e3f6ea!important;border-color:#8dcaa4!important;color:#1f7447!important}
.legend-chip.no-evidence,.att-status-pill.no-evidence{background:#fde8e8!important;border-color:#edaaaa!important;color:#a72f2f!important}
.legend-chip.review,.att-status-pill.review{background:#f0f2f5!important;border-color:#d5dbe3!important;color:#687383!important}
.att-cal-day.day-attended{box-shadow:inset 0 4px 0 #2f9560}.att-cal-day.day-no-evidence{box-shadow:inset 0 4px 0 #cf4747}.att-cal-day.day-review{box-shadow:inset 0 4px 0 #8c97a5}
.att-cal-day-foot .foot-warn{color:#b43838!important}.att-cal-event.no-evidence small:first-of-type{font-weight:700;color:#a23d3d}
.academic-primary-action,.schedule-workspace-head{display:flex;align-items:center;justify-content:space-between;gap:22px;margin:0 0 14px;padding:18px 20px;border:1px solid #dfe5ec;border-radius:15px;background:linear-gradient(135deg,#fff 0%,#fbfcfe 70%,#f7f9fc 100%);box-shadow:var(--shadow-sm)}
.academic-primary-action h2,.schedule-workspace-head h2{margin:3px 0 5px;font-size:22px;letter-spacing:-.035em}.academic-primary-action p,.schedule-workspace-head p{margin:0;max-width:760px;color:var(--muted);font-size:10px;line-height:1.55}.academic-primary-action .page-actions,.schedule-workspace-head .page-actions{flex:0 0 auto}
.schedule-meaning{display:flex;align-items:center;flex-wrap:wrap;gap:7px 10px;margin:0 0 12px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#fff}.schedule-meaning small{color:var(--muted);font-size:8px;margin-right:8px}.schedule-origin{display:inline-flex;align-items:center;padding:4px 7px;border-radius:999px;font-size:7px;font-weight:900;letter-spacing:.035em;text-transform:uppercase;border:1px solid transparent}.schedule-origin.managed{color:#245f91;background:#eaf4ff;border-color:#bad7ef}.schedule-origin.evidence{color:#6c5b31;background:#f8f3e7;border-color:#e6d6ac}
.schedule-filter-bar{margin-bottom:12px}.schedule-filter-bar .filter-grid{grid-template-columns:repeat(5,minmax(0,1fr))}.schedule-managed td{background:#fcfdff}.schedule-historical td{background:#fbfaf7}.session-card.managed{border-left:4px solid #548fbd;background:#f7fbff}.session-card.evidence{border-left:4px solid #c3a96b;background:#fffdf8}
.schedule-form-intro{display:grid;gap:3px;margin:-2px 0 13px;padding:10px 12px;border-radius:10px;background:#f7f9fc;border:1px solid #e2e7ee}.schedule-form-intro strong{font-size:12px;color:#2f3b4e}.schedule-form-intro span{font-size:9px;color:var(--muted)}.schedule-repeat-preview{min-height:28px;margin-top:10px;padding:8px 10px;border-radius:8px;background:#f7f9fb;color:#647082;font-size:9px;border:1px dashed #d9e0e8}.schedule-source-choice{display:grid;grid-template-columns:1fr 1fr;gap:13px}.schedule-source-choice h3{margin:5px 0 6px;font-size:18px}.schedule-source-choice p{color:var(--muted);font-size:10px;line-height:1.55;margin:0 0 12px}
@media(max-width:900px){.academic-primary-action,.schedule-workspace-head{align-items:flex-start;flex-direction:column}.schedule-filter-bar .filter-grid,.schedule-source-choice{grid-template-columns:1fr 1fr}.academic-primary-action .page-actions,.schedule-workspace-head .page-actions{width:100%}}
@media(max-width:620px){.schedule-filter-bar .filter-grid,.schedule-source-choice{grid-template-columns:1fr}.academic-primary-action .page-actions,.schedule-workspace-head .page-actions{display:grid;grid-template-columns:1fr;width:100%}.academic-primary-action .page-actions .btn,.schedule-workspace-head .page-actions .btn{width:100%;justify-content:center}}

/* v2.8.0 schedule-aware attendance states */
.att-cal-event.absent{background:#ffe9e9!important;border-color:#e99797!important;border-left-color:#b92f2f!important}.legend-chip.absent,.att-status-pill.absent{background:#fbdede!important;border-color:#e79a9a!important;color:#982929!important}
.att-cal-event.scheduled{background:#eef6ff!important;border-color:#b9d6ef!important;border-left-color:#4f8ebe!important}.legend-chip.scheduled,.att-status-pill.scheduled{background:#e7f2ff!important;border-color:#b8d4ee!important;color:#356f9d!important}.att-cal-day.day-scheduled{box-shadow:inset 0 4px 0 #5c95c2}

/* v2.8.1 monthly batch attendance register */
.legend-strip{display:flex;flex-wrap:wrap;gap:10px 18px;margin:12px 0 4px;padding:10px 12px;border:1px solid var(--line,#dfe3e8);border-radius:10px;background:var(--surface-soft,#f7f8fa);font-size:12px}
.legend-strip span{white-space:nowrap}.req{font-weight:800}

/* v2.8.4 compact report workspace + Excel-like same-page attendance matrix */
.report-workspace{display:flex;flex-direction:column;gap:12px;min-width:0}.report-workspace-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:16px 18px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(135deg,#fff 0%,#fbfcfe 100%);box-shadow:var(--shadow-sm)}.report-workspace-head h2{margin:2px 0 4px;font-size:21px;letter-spacing:-.03em}.report-workspace-head p{margin:0;max-width:720px;color:var(--muted);font-size:11px;line-height:1.5}.report-top-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}.compact-select{min-height:34px;padding:0 30px 0 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);font-size:11px;font-weight:750}
.report-filter-strip{display:grid;grid-template-columns:repeat(6,minmax(135px,1fr)) 150px;gap:7px;align-items:stretch;padding:9px;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:var(--shadow-sm);position:relative;z-index:8}.report-search-combo{position:relative;min-width:0}.report-native-select{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important}.report-combo-trigger{width:100%;height:48px;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;align-items:center;text-align:left;padding:7px 9px;border:1px solid #dfe4ea;border-radius:9px;background:#fafbfc;color:var(--text);cursor:pointer;transition:.14s ease}.report-combo-trigger:hover,.report-search-combo.open .report-combo-trigger{border-color:#9eb6cb;background:#fff;box-shadow:0 0 0 3px rgba(66,112,150,.08)}.report-combo-trigger span{grid-column:1/3;font-size:9px;font-weight:850;letter-spacing:.055em;text-transform:uppercase;color:#7b8796}.report-combo-trigger strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.report-combo-trigger b{font-size:11px;color:#8290a0}.report-combo-menu{display:none;position:absolute;left:0;top:53px;width:min(360px,82vw);padding:7px;border:1px solid #dce3ea;border-radius:10px;background:#fff;box-shadow:0 16px 44px rgba(25,40,58,.17);z-index:50}.report-search-combo.open .report-combo-menu{display:block}.report-combo-search{width:100%;height:34px;border:1px solid #dce3ea;border-radius:7px;padding:0 9px;font-size:11px;outline:none}.report-combo-search:focus{border-color:#82a8c6;box-shadow:0 0 0 3px rgba(69,119,159,.09)}.report-combo-options{max-height:260px;overflow:auto;margin-top:6px;display:grid;gap:2px}.report-combo-options button{display:block;width:100%;border:0;background:#fff;border-radius:6px;text-align:left;padding:7px 8px;color:#334052;font-size:11px;line-height:1.35;cursor:pointer}.report-combo-options button:hover,.report-combo-options button.selected{background:#edf5fb;color:#1d5d8c}.report-month-control{height:48px;display:flex;flex-direction:column;gap:3px;padding:6px 8px;border:1px solid #dfe4ea;border-radius:9px;background:#fafbfc}.report-month-control span,.report-advanced-row label span{font-size:9px;font-weight:850;letter-spacing:.055em;text-transform:uppercase;color:#7b8796}.report-month-control input{border:0;background:transparent;font:inherit;font-size:11px;outline:none;color:var(--text);min-width:0}
.report-advanced-row{display:none;grid-template-columns:145px 145px 140px 140px minmax(190px,1fr) auto auto;gap:7px;align-items:end;padding:9px;border:1px solid var(--line);border-radius:11px;background:#f9fafb}.report-advanced-row.show{display:grid}.report-advanced-row label{display:grid;gap:4px}.report-advanced-row input,.report-advanced-row select{height:34px;border:1px solid #dce3ea;border-radius:7px;background:#fff;padding:0 8px;font-size:11px;color:var(--text)}.report-context-line{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:28px;padding:0 2px;color:#697687;font-size:10px}.report-legend{display:flex;align-items:center;gap:5px;white-space:nowrap}.report-legend i{width:8px;height:8px;border-radius:2px;margin-left:5px;border:1px solid transparent}.report-legend i.p{background:#dcf4e5;border-color:#8fc4a3}.report-legend i.a{background:#fde1e1;border-color:#dc8d8d}.report-legend i.ne{background:#fff0c9;border-color:#dabd72}.report-legend i.r{background:#ffe6c8;border-color:#dda66a}.report-legend i.na{background:#f0f2f4;border-color:#cdd3da}
.report-result-shell{min-width:0;border:1px solid var(--line);border-radius:13px;background:#fff;box-shadow:var(--shadow-sm);overflow:hidden}.report-result-toolbar{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 13px;border-bottom:1px solid var(--line);background:#fbfcfd;position:sticky;top:0;z-index:5}.report-result-toolbar>div:first-child{min-width:0;display:grid;gap:2px}.report-result-toolbar strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.report-result-toolbar span{font-size:10px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.report-toolbar-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}.report-toolbar-actions input{width:150px;height:32px;border:1px solid #dbe2e8;border-radius:7px;padding:0 9px;font-size:11px}.report-toolbar-actions .btn{min-height:32px;padding:0 10px}.report-toolbar-actions .disabled{pointer-events:none;opacity:.45}.report-preview-empty,.report-preview-loading{height:420px;display:grid;place-items:center;color:var(--muted);background:linear-gradient(#fff,#fcfdfe)}.report-preview-empty>div{display:grid;gap:5px;text-align:center;max-width:520px;padding:20px}.report-preview-empty strong{font-size:15px;color:#536071}.report-preview-empty span{font-size:11px;line-height:1.5}.report-preview-loading{align-content:center;gap:9px;font-size:11px}.report-grid-wrap{height:min(66vh,680px);overflow:auto;position:relative;background:#fff}.attendance-sheet{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;font-size:10px;line-height:1.2}.attendance-sheet col.roll{width:112px}.attendance-sheet col.name{width:190px}.attendance-sheet col.lecture{width:84px}.attendance-sheet col.metric{width:72px}.attendance-sheet th,.attendance-sheet td{height:27px;padding:5px 7px;border-right:1px solid #d9e0e7;border-bottom:1px solid #d9e0e7;text-align:center;white-space:nowrap;background:#fff}.attendance-sheet thead th{position:sticky;top:0;z-index:3;height:44px;background:#dff2f7;color:#304154;font-weight:900;white-space:normal;line-height:1.2;border-bottom:1px solid #afcad3}.attendance-sheet th.identity,.attendance-sheet td.identity{position:sticky;text-align:left;z-index:2}.attendance-sheet th.identity{z-index:4}.attendance-sheet th:nth-child(1),.attendance-sheet td:nth-child(1){left:0}.attendance-sheet th:nth-child(2),.attendance-sheet td:nth-child(2){left:112px;box-shadow:3px 0 5px rgba(43,58,75,.06)}.attendance-sheet tbody tr:nth-child(even):not(.summary) td.identity{background:#fafbfd}.attendance-sheet tbody tr:hover:not(.summary) td{outline:1px solid rgba(57,108,149,.10);outline-offset:-1px}.attendance-sheet td.att-p{background:#e7f6eb;color:#1f6d43;font-weight:800}.attendance-sheet td.att-a{background:#fde9e9;color:#a52d2d;font-weight:900}.attendance-sheet td.att-ne{background:#fff3d4;color:#956a13;font-weight:800}.attendance-sheet td.att-r{background:#ffead2;color:#985b1e;font-weight:800}.attendance-sheet td.att-na{background:#f3f5f7;color:#98a1aa}.attendance-sheet tr.summary td{background:#8fb1df;color:#12283f;font-weight:900;border-color:#779ecf}.attendance-sheet tr.summary td.identity{background:#8fb1df}.report-other{border:1px solid var(--line);border-radius:10px;background:#fff}.report-other summary{cursor:pointer;padding:10px 12px;font-size:11px;font-weight:800;color:#5c6978}.report-other .card-body{padding-top:0}
@media(max-width:1280px){.report-filter-strip{grid-template-columns:repeat(4,minmax(135px,1fr))}.report-advanced-row{grid-template-columns:repeat(4,minmax(130px,1fr))}.report-workspace-head{flex-direction:column}.report-top-actions{justify-content:flex-start;width:100%}}
@media(max-width:760px){.report-filter-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.report-advanced-row{grid-template-columns:repeat(2,minmax(0,1fr))}.report-result-toolbar{align-items:flex-start;flex-direction:column}.report-toolbar-actions{width:100%;overflow:auto}.report-toolbar-actions input{min-width:140px}.report-context-line{align-items:flex-start;flex-direction:column}.attendance-sheet col.name{width:150px}.attendance-sheet th:nth-child(2),.attendance-sheet td:nth-child(2){left:112px}}

/* v2.8.4 report print view */
@media print{
  .sidebar,.topbar,.page-head,.report-workspace-head,.report-filter-strip,.report-advanced-row,.report-context-line,.report-other{display:none!important}
  .shell,.main,.content,.report-workspace,.report-result-shell{display:block!important;width:100%!important;max-width:none!important;margin:0!important;padding:0!important;border:0!important;box-shadow:none!important;background:#fff!important}
  .report-result-toolbar{position:static!important;border:0!important;padding:0 0 8px!important}.report-toolbar-actions{display:none!important}
  .report-grid-wrap{height:auto!important;overflow:visible!important}.attendance-sheet{font-size:7.5pt!important;width:max-content!important;min-width:100%!important}
  .attendance-sheet th,.attendance-sheet td{position:static!important;box-shadow:none!important}
  @page{size:landscape;margin:8mm}
}

/* Source Excel visual parity for identity cells */
.attendance-sheet tbody tr:not(.summary) td.identity{background:#f0f0f0}
.attendance-sheet tbody tr:nth-child(even):not(.summary) td.identity{background:#e9e9e9}

/* v2.8.5 attendance focus view: full-width matrix, reliable export toolbar */
.report-modal-open{overflow:hidden!important}
.attendance-sheet .header-fit{display:none}
.report-fit-all{overflow-y:auto;overflow-x:hidden}
.report-fit-all .attendance-sheet{width:100%!important;min-width:0!important;table-layout:fixed;font-size:7.2px;line-height:1.05}
.report-fit-all .attendance-sheet col.roll{width:6.5%!important}
.report-fit-all .attendance-sheet col.name{width:11.5%!important}
.report-fit-all .attendance-sheet col.lecture{width:auto!important}
.report-fit-all .attendance-sheet col.metric{width:3.1%!important}
.report-fit-all .attendance-sheet th,.report-fit-all .attendance-sheet td{height:24px;padding:3px 2px;overflow:hidden;text-overflow:clip;white-space:nowrap}
.report-fit-all .attendance-sheet thead th{height:42px;padding:3px 1px;white-space:normal;font-size:7px;line-height:1.05}
.report-fit-all .attendance-sheet .header-full{display:none}
.report-fit-all .attendance-sheet .header-fit{display:inline}
.report-fit-all .attendance-sheet th.identity,.report-fit-all .attendance-sheet td.identity{position:static!important;left:auto!important;box-shadow:none!important}
.report-fit-all .attendance-sheet td:nth-child(1){font-size:7px;letter-spacing:-.02em}
.report-fit-all .attendance-sheet td:nth-child(2){font-size:7.4px;text-align:left}
.report-fit-all .attendance-sheet tr.summary td{font-size:7px}

.report-result-shell.report-maximized{position:fixed!important;inset:7px!important;z-index:3000!important;border-radius:12px!important;box-shadow:0 24px 80px rgba(17,29,42,.32)!important;background:#fff!important;display:flex!important;flex-direction:column!important;overflow:hidden!important}
.report-result-shell.report-maximized .report-result-toolbar{position:relative!important;top:auto!important;flex:0 0 auto;min-height:54px;padding:8px 12px;background:#f8fafc}
.report-result-shell.report-maximized .report-grid-wrap{height:auto!important;flex:1 1 auto;min-height:0;max-height:none!important}
.report-result-shell.report-maximized .report-preview-empty,.report-result-shell.report-maximized .report-preview-loading{height:auto!important;flex:1 1 auto}
.report-result-shell.report-maximized .report-fit-all .attendance-sheet{font-size:7.8px}
.report-result-shell.report-maximized .report-fit-all .attendance-sheet thead th{font-size:7.5px;height:44px}
.report-result-shell.report-maximized .report-fit-all .attendance-sheet td:nth-child(2){font-size:8px}
.report-result-shell.report-maximized .report-fit-all .attendance-sheet tr.summary td{font-size:7.5px}

.report-toolbar-actions button:disabled{opacity:.42;cursor:not-allowed}
.report-toolbar-actions #reportFit,.report-toolbar-actions #reportMaximize{font-weight:800}
@media(max-width:1100px){
  .report-fit-all .attendance-sheet{font-size:6.2px}
  .report-fit-all .attendance-sheet thead th{font-size:6.1px}
  .report-fit-all .attendance-sheet col.roll{width:7.5%!important}
  .report-fit-all .attendance-sheet col.name{width:13%!important}
  .report-fit-all .attendance-sheet col.metric{width:3.2%!important}
}
