:root{
  --smis-bg:#f4f7fb;
  --smis-surface:#ffffff;
  --smis-surface-soft:#f8fafc;
  --smis-text:#172033;
  --smis-muted:#64748b;
  --smis-border:#dfe6ef;
  --smis-primary:#2457a6;
  --smis-primary-strong:#173f7c;
  --smis-accent:#0f7c8c;
  --smis-success:#26734d;
  --smis-warning:#9a6500;
  --smis-danger:#b23a3a;
  --smis-radius:12px;
  --smis-shadow:0 8px 24px rgba(26,44,73,.08);
  --smis-shadow-strong:0 18px 50px rgba(20,36,62,.18);
  --smis-focus:0 0 0 3px rgba(36,87,166,.22);
}
html{scroll-behavior:smooth;min-height:100%;height:auto}
body{background:var(--smis-bg);color:var(--smis-text);font-size:14px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;min-height:100vh;height:auto;display:flex;flex-direction:column}
a{color:var(--smis-primary)}
a:hover,a:focus{color:var(--smis-primary-strong)}
.smis-skip-link{position:fixed;left:16px;top:-60px;z-index:99999;background:#111827;color:#fff!important;padding:10px 14px;border-radius:0 0 8px 8px;font-weight:700;transition:top .18s ease}
.smis-skip-link:focus{top:0;outline:3px solid #fff;outline-offset:2px}

/* Global shell: retain Bootstrap 3 behavior while giving legacy pages a common visual language. */
#wrap{flex:1 0 auto;min-height:0;height:auto;margin:0;padding:0;width:100%}
.navbar.navbar-default{background:#fff;border:0;border-bottom:1px solid var(--smis-border);box-shadow:0 3px 14px rgba(26,44,73,.07)}
.navbar-default .navbar-brand{color:var(--smis-text);font-weight:700}
.navbar-default .navbar-nav>li>a{color:#42526a;font-weight:600}
.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{background:#edf3fb;color:var(--smis-primary);box-shadow:inset 0 -3px 0 var(--smis-primary)}
.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{background:#f5f8fc;color:var(--smis-primary)}
.dropdown-menu{border:1px solid var(--smis-border);border-radius:10px;box-shadow:var(--smis-shadow-strong);padding:7px}
.dropdown-menu>li>a{border-radius:7px;padding:8px 12px}
.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background:#eef4fb;color:var(--smis-primary)}

.pagecontent.container,.pagecontent.container-fluid,.container.pagecontent{padding-top:8px;padding-bottom:24px}
.page-header{border-bottom:1px solid var(--smis-border);margin-bottom:18px}
.page-header h1,.page-header h2{font-weight:700;letter-spacing:-.02em;color:var(--smis-text)}
.breadcrumb{background:transparent;border:0;padding-left:0;color:var(--smis-muted)}
.panel{border:1px solid var(--smis-border);border-radius:var(--smis-radius);box-shadow:var(--smis-shadow);overflow:hidden}
.panel>.panel-heading{border-bottom:1px solid var(--smis-border);font-weight:700;padding:12px 15px;background:var(--smis-surface-soft);color:var(--smis-text)}
.panel>.panel-body{padding:16px}
.panel-primary>.panel-heading{background:#eaf1fb;color:#1e4b8c;border-color:#cfddf0}
.panel-info>.panel-heading{background:#e9f6f8;color:#176575;border-color:#cde9ed}
.panel-success>.panel-heading{background:#edf7f1;color:#286747;border-color:#d4eadc}
.panel-warning>.panel-heading{background:#fff7e7;color:#835b08;border-color:#f0dfb7}
.panel-danger>.panel-heading{background:#fdf0f0;color:#983b3b;border-color:#eed1d1}

.btn{border-radius:8px;font-weight:600;box-shadow:none;transition:transform .12s ease,box-shadow .12s ease,background-color .12s ease}
.btn:hover{transform:translateY(-1px);box-shadow:0 4px 10px rgba(26,44,73,.10)}
.btn:active,.btn.btn-pressed{transform:translateY(0);box-shadow:none}
.btn-primary{background:var(--smis-primary);border-color:var(--smis-primary)}
.btn-primary:hover,.btn-primary:focus{background:var(--smis-primary-strong);border-color:var(--smis-primary-strong)}
.btn-info{background:var(--smis-accent);border-color:var(--smis-accent)}
.btn-success{background:var(--smis-success);border-color:var(--smis-success)}
.btn-warning{background:#a86f05;border-color:#a86f05}
.btn-danger{background:var(--smis-danger);border-color:var(--smis-danger)}
.btn-default{background:#fff;border-color:#ccd6e3;color:#34445d}
.btn-group>.btn{border-radius:8px!important;margin-right:3px}

.form-control{border:1px solid #cbd5e1;border-radius:8px;box-shadow:none;min-height:36px;color:var(--smis-text)}
.form-control:focus{border-color:#7ca1d3;box-shadow:var(--smis-focus)}
label{color:#384860;font-weight:650}
.help-block,.text-muted{color:var(--smis-muted)}
.alert{border-radius:10px;border-width:1px}
.label,.badge{border-radius:999px;font-weight:700;letter-spacing:.01em}

.table-responsive{border:0;border-radius:0 0 var(--smis-radius) var(--smis-radius)}
.table{background:var(--smis-surface);margin-bottom:0}
.table>thead>tr>th{background:#f8fafc;color:#44536a;border-bottom:1px solid var(--smis-border);font-size:12px;text-transform:uppercase;letter-spacing:.035em;vertical-align:middle}
.table>tbody>tr>td{border-top:1px solid #edf1f6;vertical-align:middle}
.table-striped>tbody>tr:nth-of-type(odd){background:#fbfcfe}
.table-hover>tbody>tr:hover{background:#f3f7fc}
.pagination>li>a,.pagination>li>span{border-color:var(--smis-border);color:var(--smis-primary)}
.pagination>.active>a,.pagination>.active>span{background:var(--smis-primary);border-color:var(--smis-primary)}
.modal-content{border:0;border-radius:14px;box-shadow:var(--smis-shadow-strong);overflow:hidden}
.modal-header{border-bottom:1px solid var(--smis-border);background:#f8fafc}
.modal-footer{border-top:1px solid var(--smis-border);background:#fbfcfe}

/* Keyboard focus remains visible even when hover styling is subtle. */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid rgba(36,87,166,.34)!important;outline-offset:2px!important;box-shadow:none}

/* Shared Quick Access / command palette. */
.smis-quick-access{position:fixed;left:20px;bottom:20px;z-index:1750}
.smis-quick-trigger{display:flex;align-items:center;gap:8px;border:1px solid #c8d5e6;background:#fff;color:#27364e;border-radius:999px;padding:10px 13px;box-shadow:0 10px 28px rgba(20,36,62,.16);font-weight:700}
.smis-quick-trigger:hover{background:#f7faff;border-color:#9fb7d7}
.smis-quick-trigger kbd{font-size:10px;background:#edf2f8;color:#56657a;border:1px solid #d9e2ed;box-shadow:none}
.smis-command-backdrop{position:fixed;inset:0;background:rgba(15,23,42,.45);backdrop-filter:blur(2px);z-index:3000}
.smis-command-palette{position:fixed;inset:0;z-index:3010;display:flex;justify-content:center;align-items:flex-start;padding:11vh 20px 24px;pointer-events:none}
.smis-command-palette[hidden],.smis-command-backdrop[hidden]{display:none!important}
.smis-command-shell{width:min(680px,100%);max-height:76vh;background:#fff;border:1px solid rgba(214,224,236,.95);border-radius:16px;box-shadow:0 28px 75px rgba(9,22,43,.32);overflow:hidden;pointer-events:auto;display:flex;flex-direction:column}
.smis-command-head{display:flex;align-items:flex-start;justify-content:space-between;padding:15px 18px 10px}
.smis-command-head strong{display:block;font-size:18px;color:var(--smis-text)}
.smis-command-head small{display:block;color:var(--smis-muted);margin-top:2px}
.smis-command-close{border:0;background:transparent;color:#6b778a;font-size:27px;line-height:1;padding:0 4px;border-radius:6px}
.smis-command-search-wrap{display:flex;align-items:center;gap:10px;margin:0 15px 12px;padding:0 12px;border:1px solid #cdd8e5;border-radius:10px;background:#fafcff}
.smis-command-search{border:0!important;box-shadow:none!important;outline:0!important;background:transparent;flex:1;min-width:0;height:46px;font-size:16px}
.smis-command-search-wrap>kbd{background:#eef2f7;color:#64748b;border:1px solid #dbe3ed;box-shadow:none}
.smis-command-results{overflow-y:auto;padding:3px 9px 10px}
.smis-command-item{display:flex;align-items:center;gap:12px;padding:11px 10px;border-radius:10px;text-decoration:none!important;color:var(--smis-text)!important;margin:2px 0}
.smis-command-item:hover,.smis-command-item.is-active{background:#edf4fc}
.smis-command-icon{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:9px;background:#eaf1fa;color:var(--smis-primary);flex:0 0 36px}
.smis-command-copy{min-width:0;flex:1}
.smis-command-copy strong,.smis-command-copy small{display:block}
.smis-command-copy small{color:var(--smis-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.smis-command-arrow{color:#9aa8ba;font-size:10px}
.smis-command-empty{padding:28px 16px;text-align:center;color:var(--smis-muted)}
.smis-command-foot{display:flex;gap:18px;justify-content:flex-end;align-items:center;padding:9px 15px;border-top:1px solid var(--smis-border);background:#f8fafc;color:var(--smis-muted);font-size:11px}
.smis-command-foot kbd{background:#fff;color:#59687e;border:1px solid #d9e1eb;box-shadow:none}
body.smis-command-open{overflow:hidden}

/* Shared footer: sticky to the viewport bottom on short pages, pushed by content on long pages. */
#footer.smis-site-footer{position:static;flex:0 0 auto;height:auto;min-height:66px;margin:0;background:#fff;border-top:1px solid var(--smis-border);box-shadow:0 -3px 14px rgba(26,44,73,.035)}
.smis-site-footer__inner{min-height:66px;display:flex;align-items:center;justify-content:space-between;gap:18px;padding-top:13px;padding-bottom:13px}
.smis-site-footer__brand{display:flex;align-items:baseline;gap:8px;color:var(--smis-text)}
.smis-site-footer__brand strong{color:var(--smis-primary);letter-spacing:.04em}
.smis-site-footer__brand span,.smis-site-footer__meta{color:var(--smis-muted);font-size:12px}

/* Public and authentication pages share the exact same design tokens and footer as the app. */
body.smis-public-page{background:linear-gradient(180deg,#eef4fb 0,#f7f9fc 42%,var(--smis-bg) 100%);padding:0}
.smis-public-nav .navbar-brand.smis-public-brand{display:flex;align-items:center;gap:9px;padding-top:10px;padding-bottom:10px;max-width:68vw}
.smis-public-brand__logo{width:30px;height:30px;object-fit:contain;flex:0 0 30px}
.smis-public-brand__product{color:var(--smis-muted);font-weight:600}
.smis-auth-main{flex:1 0 auto;width:100%;display:flex;align-items:center;padding:94px 0 38px}
.smis-auth-card{width:100%;max-width:470px;margin:0 auto;background:var(--smis-surface);border:1px solid var(--smis-border);border-radius:18px;box-shadow:var(--smis-shadow-strong);padding:28px}
.smis-auth-card__brand{display:flex;justify-content:center;margin:-2px 0 12px}
.smis-auth-card__brand img{width:74px;height:74px;object-fit:contain}
.smis-auth-heading{text-align:center;margin-bottom:21px}
.smis-auth-kicker{display:inline-block;margin-bottom:6px;color:var(--smis-primary);font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase}
.smis-auth-heading h1{font-size:27px;line-height:1.18;margin:0 0 8px;font-weight:750;letter-spacing:-.025em;color:var(--smis-text)}
.smis-auth-heading p{margin:0;color:var(--smis-muted);line-height:1.55}
.smis-auth-form .form-group{margin-bottom:14px}
.smis-auth-form .input-lg{height:46px;font-size:15px}
.smis-auth-help-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px}
.smis-auth-help{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--smis-border);border-radius:11px;background:var(--smis-surface-soft);padding:12px;text-decoration:none!important;color:var(--smis-text)!important}
.smis-auth-help:hover,.smis-auth-help:focus{background:#edf4fc;border-color:#bfd0e5}
.smis-auth-help>.glyphicon{color:var(--smis-primary);font-size:17px;margin-top:2px}
.smis-auth-help strong,.smis-auth-help small{display:block}
.smis-auth-help small{color:var(--smis-muted);margin-top:3px;line-height:1.35}
.smis-auth-note,.smis-auth-secondary{text-align:center;color:var(--smis-muted);font-size:12px;margin:17px 0 0}
.smis-auth-secondary{display:flex;justify-content:center;gap:8px}
.smis-result-card,.smis-recovery-result{margin-top:18px;border:1px solid #cfe0d6;border-radius:12px;background:#f3faf6;padding:16px}
.smis-result-card__eyebrow{display:block;color:var(--smis-success);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.smis-result-card h2{font-size:18px;margin:4px 0 9px}
.smis-lrn-result,.smis-temporary-password{display:block;margin:8px 0 13px;padding:11px 13px;border-radius:9px;background:#fff;border:1px solid var(--smis-border);font-size:18px;font-weight:800;letter-spacing:.045em;color:var(--smis-text);text-align:center}
.smis-temporary-password{font-family:Menlo,Monaco,Consolas,monospace;color:var(--smis-primary)}
.smis-recovery-result>span.text-muted{display:block;margin-top:7px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
.smis-code-input{letter-spacing:.14em;text-align:center;font-weight:700}
.smis-field-match{border-color:#4b956d!important;background:#f5fbf7!important}
.smis-field-mismatch{border-color:#c05a5a!important;background:#fff7f7!important}
.smis-register-main{flex:1 0 auto;width:100%;padding-top:82px;padding-bottom:34px}
.smis-register-main>.page-header{background:#fff;border:1px solid var(--smis-border);border-radius:14px;padding:19px 22px;margin-bottom:18px!important;box-shadow:var(--smis-shadow)}
.smis-register-main>.page-header h1{margin-top:0;font-size:27px}

/* Responsive improvements for legacy Bootstrap layouts. */
@media (max-width:991px){
  .page-header .pull-right{float:none!important;margin-bottom:10px;display:flex;flex-wrap:wrap;gap:5px}
  .page-header .pull-right .btn{margin:0!important}
  .panel-body{overflow-wrap:anywhere}
  .navbar-fixed-top .navbar-collapse{max-height:78vh}
}
@media (max-width:767px){
  body{font-size:13px}
  .container,.container-fluid{padding-left:12px;padding-right:12px}
  .page-header h1,.page-header h2{font-size:25px;margin-top:12px}
  .panel{border-radius:10px}
  .panel>.panel-body{padding:13px}
  .btn{white-space:normal}
  .table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .smis-quick-access{left:12px;bottom:12px}
  .smis-quick-trigger-text,.smis-quick-trigger kbd{display:none}
  .smis-quick-trigger{width:44px;height:44px;padding:0;justify-content:center}
  .smis-command-palette{padding:7vh 10px 12px}
  .smis-command-shell{max-height:84vh;border-radius:13px}
  .smis-command-foot{justify-content:flex-start;gap:10px;flex-wrap:wrap}
  #chat-presence-panel{max-width:calc(100vw - 24px)!important;right:12px!important}
  #chat-popup{max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;right:12px!important}
  .smis-site-footer__inner{min-height:58px;display:block;text-align:center;padding-top:11px;padding-bottom:11px}
  .smis-site-footer__brand{justify-content:center;margin-bottom:4px}
  .smis-public-brand__product{display:none}
  .smis-auth-main{align-items:flex-start;padding:78px 0 24px}
  .smis-auth-card{padding:21px 17px;border-radius:14px}
  .smis-auth-heading h1{font-size:24px}
  .smis-auth-help-grid{grid-template-columns:1fr}
  .smis-register-main{padding-top:72px}
  .smis-register-main>.page-header{padding:15px;margin-top:12px!important}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}
@media print{
  body{background:#fff!important;color:#000!important;display:block;min-height:0}
  #wrap{display:block}
  #footer.smis-site-footer,.smis-public-nav,.smis-quick-access,.smis-command-palette,.smis-command-backdrop,.smis-skip-link{display:none!important}
  .panel{box-shadow:none!important;border-color:#bbb!important}
  a[href]:after{content:none!important}
}

/* VoteSys AJAX feedback. Kept class-scoped so the shared theme is unaffected. */
.votesys-is-loading{display:inline-flex!important;align-items:center;justify-content:center;gap:8px;cursor:wait!important;opacity:.82}
.votesys-spinner{display:inline-block;width:15px;height:15px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:votesys-spin .65s linear infinite;flex:0 0 15px}
.votesys-ajax-alert{position:fixed;right:18px;bottom:18px;z-index:5000;max-width:min(420px,calc(100vw - 36px));margin:0;box-shadow:var(--smis-shadow-strong)}
@keyframes votesys-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.votesys-spinner{animation-duration:1.4s}}


/* SMIS 2E.2 authenticated content rhythm */
:root{--smis-navbar-height:50px;--smis-content-gap:15px}
body:not(.smis-public-page) #wrap{padding-top:var(--smis-navbar-height)}
body:not(.smis-public-page) #wrap>.pagecontent{margin-top:var(--smis-content-gap)!important}
.smis-toolbar-form{margin:0;padding:0;border:0;box-shadow:none}
.smis-toolbar-form .input-group{width:240px;max-width:100%}
@media (max-width:767px){
  .smis-toolbar-form{width:100%}
  .smis-toolbar-form .input-group{width:100%}
}
@media print{
  body:not(.smis-public-page) #wrap{padding-top:0}
}


/* SMIS 2E.3 legacy routed-page form rhythm */
/* Legacy routed .inc.php pages often use Bootstrap navbar-form for page-level
   search/filter controls. Inside pagecontent those forms are not navbars, so
   remove Bootstrap's vertical navbar margins/padding while retaining horizontal
   alignment and all form behavior. */
body:not(.smis-public-page) .pagecontent .navbar-form{
  margin-top:0;
  margin-bottom:0;
  padding-top:0;
  padding-bottom:0;
}

/* Class Dashboard split action: keep View Enrolment and its caret as one joined control. */
.class-dashboard-enrolment-actions{display:inline-flex;flex-wrap:nowrap;vertical-align:middle;white-space:nowrap}
.class-dashboard-enrolment-actions>.btn{float:none;margin-right:0}
.class-dashboard-enrolment-actions>.btn:first-child{border-top-right-radius:0!important;border-bottom-right-radius:0!important}
.class-dashboard-enrolment-actions>.dropdown-toggle{margin-left:-1px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}
/* .panel clips overflow for rounded corners, which also clips this dropdown's popup menu. Let it escape only where this control is used. */
.panel:has(.class-dashboard-enrolment-actions){overflow:visible}

/* Floating controls: clear the shared footer instead of covering it. */
:root{--smis-floating-bottom:20px}
.smis-quick-access{bottom:var(--smis-floating-bottom)}
#chat-presence-panel,#chat-popup{bottom:var(--smis-floating-bottom)!important}


/* SMIS 2E.4 Student Dashboard canonical page layout */
/* studentDashboard.inc.php is the structural reference for authenticated routed pages:
   pagecontent container -> optional row-toolbar -> page-header/actions -> breadcrumb -> content. */
body:not(.smis-public-page) #wrap>.pagecontent>.row-toolbar{margin-bottom:0;min-height:40px}
body:not(.smis-public-page) #wrap>.pagecontent>.page-header{margin-top:20px;margin-bottom:18px;padding-bottom:9px}
body:not(.smis-public-page) #wrap>.pagecontent>.breadcrumb{margin-top:0;margin-bottom:18px;padding-top:0;padding-bottom:8px}
body:not(.smis-public-page) #wrap>.pagecontent>.panel{margin-bottom:20px}
.smis-toolbar-actions{margin-top:5px}
.smis-toolbar-context{font-size:18px;line-height:1.35;font-weight:600;padding-top:4px}
.smis-toolbar-context small{display:block;margin-top:2px;font-size:12px;font-weight:400;color:var(--smis-muted)}
.smis-toolbar-receipt{font-size:22px;line-height:1.2;font-weight:700;margin-top:3px}
.smis-page-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:6px}
.smis-page-actions>.btn{margin:0!important}
/* Context Insights is injected beside legacy page-header actions. Keep the
   separate controls from touching at their rounded edges. */
.page-header>.smis-context-insights-menu{margin-left:0}
.page-header>.smis-context-insights-menu>.btn{margin-right:0}
.page-header>.smis-context-insights-menu+.btn.pull-right{margin-right:8px}
@media (max-width:767px){
  body:not(.smis-public-page) #wrap>.pagecontent>.row-toolbar{min-height:0;margin-bottom:8px}
  .smis-toolbar-actions{float:none!important;width:100%;margin-top:0}
  .smis-toolbar-actions .smis-toolbar-form{width:100%}
  .smis-page-actions{float:none!important;justify-content:flex-start;margin:0 0 10px;width:100%}
  .page-header>.smis-context-insights-menu+.btn.pull-right{margin-right:0}
  body:not(.smis-public-page) #wrap>.pagecontent>.page-header h1{font-size:26px}
}
@media print{
  body:not(.smis-public-page) #wrap>.pagecontent>.row-toolbar{display:none!important}
  body:not(.smis-public-page) #wrap>.pagecontent>.breadcrumb{display:none!important}
}
