/* ============================================================
   mysafari.css — MySafari Design System
   Safari International School · Wavehill Horizon
   All components use CSS variables defined in :root.
   Never hardcode hex values outside this file.
   ============================================================ */

/* ── Google Fonts import ──────────────────────────────────── */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@400;600;700&family=JetBrains+Mono:wght@400;500&display=swap');

/* ── Design Tokens ────────────────────────────────────────── */
:root {
    /* Brand greens */
    --ms-green:         #1B6B3A;
    --ms-green-light:   #2E8B57;
    --ms-green-pale:    #E8F5ED;

    /* Accent colours */
    --ms-amber:         #E8940A;
    --ms-blue:          #1A7BC4;
    --ms-coral:         #D94F3D;
    --ms-gold:          #F5C842;

    /* Neutrals */
    --ms-charcoal:      #1E1E2E;
    --ms-grey:          #6B7280;
    --ms-border:        #E2E8F0;
    --ms-surface:       #FAFAFA;
    --ms-white:         #FFFFFF;

    /* AI component */
    --ms-ai-bg:         #EFF6FF;
    --ms-ai-border:     #1A7BC4;

    /* Portal accent — overridden per portal on body */
    --ms-portal-accent: #1B6B3A;

    /* Typography */
    --ms-font:          'Inter', sans-serif;
    --ms-font-heading:  'Outfit', sans-serif;
    --ms-font-mono:     'JetBrains Mono', monospace;

    /* Border radii */
    --ms-radius-sm:     4px;
    --ms-radius:        6px;
    --ms-radius-lg:     8px;
    --ms-radius-xl:     12px;

    /* Shadows */
    --ms-shadow:        0 1px 3px rgba(0, 0, 0, 0.08);
    --ms-shadow-hover:  0 4px 12px rgba(0, 0, 0, 0.12);
    --ms-shadow-modal:  0 20px 60px rgba(0, 0, 0, 0.2);

    /* Spacing */
    --ms-xs:    4px;
    --ms-sm:    8px;
    --ms-md:    16px;
    --ms-lg:    24px;
    --ms-xl:    32px;
    --ms-2xl:   48px;

    /* Layout */
    --ms-sidebar-width:     240px;
    --ms-topbar-height:     68px;
    --ms-content-max:       1600px;   /* content fills the space beside the sidebar; centred only on very wide screens */
    --ms-radius-2xl:        20px;

    /* Dawn sky and savanna (login pages, portal background, footer) */
    --ms-sky-top:           #FBF6EA;
    --ms-sky-bottom:        #EAF3EC;
    --ms-hill-far:          #BFDCC8;
    --ms-hill-mid:          #2E8B57;
    --ms-hill-near:         #1B6B3A;
    --ms-tree:              #123F24;

    /* Frosted surfaces */
    --ms-glass:             rgba(255, 255, 255, 0.72);
    --ms-glass-strong:      rgba(255, 255, 255, 0.86);
    --ms-glass-border:      rgba(255, 255, 255, 0.9);
    --ms-hairline:          rgba(18, 63, 36, 0.08);
    --ms-hover:             rgba(18, 63, 36, 0.05);
    --ms-shadow-soft:       0 1px 2px rgba(18, 63, 36, 0.05), 0 12px 32px -14px rgba(18, 63, 36, 0.18);
    --ms-shadow-lift:       0 1px 2px rgba(18, 63, 36, 0.06), 0 20px 44px -14px rgba(18, 63, 36, 0.26);
    --ms-shadow-popup:      0 1px 2px rgba(18, 63, 36, 0.06), 0 30px 70px -16px rgba(18, 63, 36, 0.35);
    --ms-backdrop:          rgba(18, 63, 36, 0.28);
    --ms-green-glow:        rgba(27, 107, 58, 0.7);
    --ms-green-focus:       rgba(27, 107, 58, 0.12);
    --ms-coral-glow:        rgba(217, 79, 61, 0.7);
    --ms-blue-glow:         rgba(26, 123, 196, 0.7);
    --ms-coral-pulse:       rgba(217, 79, 61, 0.45);
    --ms-transparent:       rgba(217, 79, 61, 0);

    /* Tints */
    --ms-amber-pale:        #FEF3C7;
    --ms-amber-deep:        #92400E;
    --ms-blue-deep:         #1E40AF;
    --ms-coral-pale:        #FEF2F2;
    --ms-coral-tint:        #FAD4CF;
    --ms-coral-deep:        #B83E2E;

    /* IB transdisciplinary theme colours (dots, POI accents) */
    --ms-theme-1:           #7C3AED;   /* Who We Are */
    --ms-theme-2:           #B45309;   /* Where We Are in Place and Time */
    --ms-theme-3:           #DB2777;   /* How We Express Ourselves */
    --ms-theme-4:           #1A7BC4;   /* How the World Works */
    --ms-theme-5:           #0D7377;   /* How We Organize Ourselves */
    --ms-theme-6:           #2E8B57;   /* Sharing the Planet */
}

/* Portal accent overrides — applied to <body> tag */
body.portal-admin        { --ms-portal-accent: #1B6B3A; }
body.portal-coordinator  { --ms-portal-accent: #0D7377; }
body.portal-teacher      { --ms-portal-accent: #1E3A5F; }
body.portal-student      { --ms-portal-accent: #1A7BC4; }
body.portal-parent       { --ms-portal-accent: #3D5A73; }
body.portal-superadmin   { --ms-portal-accent: #4C1D95; }

/* ── Reset and Base ───────────────────────────────────────── */
*, *::before, *::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

html {
    font-size: 16px;
    -webkit-text-size-adjust: 100%;
    /* No elastic "bounce" past the page edges (macOS trackpads): it briefly drags the
       fixed top bar and sidebar out of place */
    overscroll-behavior: none;
}
body { overscroll-behavior: none; }

body {
    font-family: var(--ms-font);
    font-size: 15px;
    color: var(--ms-charcoal);
    background: var(--ms-surface);
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
}

/* No underlines anywhere — links and buttons signal hover with colour instead */
a,
a:hover,
a:focus,
a:visited,
button,
button:hover,
.ms-btn,
.ms-btn:hover {
    text-decoration: none;
}
a {
    color: var(--ms-green);
    transition: color 0.15s ease;
}
a:where(:not(.ms-btn, .ms-tab)):hover {
    color: var(--ms-green-light);
}

img {
    max-width: 100%;
    display: block;
}

ul, ol {
    list-style: none;
}

button {
    cursor: pointer;
    border: none;
    background: none;
    font-family: var(--ms-font);
}

input, select, textarea {
    font-family: var(--ms-font);
}

/* ── Typography ───────────────────────────────────────────── */
h1, h2, h3, h4, h5, h6 {
    font-family: var(--ms-font-heading);
    font-weight: 700;
    color: var(--ms-charcoal);
    line-height: 1.3;
}

h1 { font-size: 28px; }
h2 { font-size: 22px; }
h3 { font-size: 18px; }
h4 { font-size: 15px; }

.ms-text-sm    { font-size: 13px; }
.ms-text-xs    { font-size: 11px; }
.ms-text-mono  { font-family: var(--ms-font-mono); }
.ms-nowrap     { white-space: nowrap; }
.ms-text-muted { color: var(--ms-grey); }
.ms-text-green { color: var(--ms-green); }
.ms-text-coral { color: var(--ms-coral); }
.ms-text-amber { color: var(--ms-amber); }
.ms-text-blue  { color: var(--ms-blue); }
.ms-text-bold  { font-weight: 600; }

/* ── Layout (portal shell) ────────────────────────────────── */
/* Same dawn sky as the public pages; surfaces are frosted white. */

body[class*="portal-"] {
    min-height: 100vh;
    background: linear-gradient(180deg, var(--ms-sky-top) 0%, var(--ms-sky-bottom) 100%) fixed;
}

/* Top bar */
.ms-topbar {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: var(--ms-topbar-height);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ms-md);
    padding: 0 var(--ms-lg);
    background: var(--ms-glass);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-bottom: 1px solid var(--ms-hairline);
    z-index: 100;
}
.ms-topbar-left,
.ms-topbar-right { display: flex; align-items: center; gap: var(--ms-md); min-width: 0; }

.ms-brand { display: flex; align-items: center; gap: 10px; }
.ms-brand img { width: 32px; height: 32px; }

/* Wordmark — charcoal + green on light surfaces; add .on-dark for gold on green */
.ms-wordmark {
    font-family: var(--ms-font-heading);
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.3px;
    color: var(--ms-charcoal);
}
.ms-wordmark span { color: var(--ms-green); }
.ms-wordmark.on-dark { color: var(--ms-white); }
.ms-wordmark.on-dark span { color: var(--ms-gold); }

.ms-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    padding: 4px 12px;
    border-radius: 20px;
    background: var(--ms-green-pale);
    color: var(--ms-green);
    white-space: nowrap;
}
.ms-pill svg { width: 14px; height: 14px; }

/* User menu (top bar) — button opens a dropdown */
.ms-user-menu { position: relative; }
.ms-user {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 4px 10px 4px 4px;
    min-width: 0;
    border-radius: 14px;
    text-align: left;
    transition: background 0.15s ease;
}
.ms-user:hover,
.ms-user[aria-expanded="true"] { background: var(--ms-hover); }
.ms-user:focus-visible { outline: 2px solid var(--ms-green); outline-offset: 2px; }
.ms-user-chevron { width: 16px; height: 16px; color: var(--ms-grey); transition: transform 0.15s ease; }
.ms-user[aria-expanded="true"] .ms-user-chevron { transform: rotate(180deg); }

.ms-dropdown {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    width: 280px;
    padding: var(--ms-sm);
    background: var(--ms-white);
    border: 1px solid var(--ms-hairline);
    border-radius: 16px;
    box-shadow: var(--ms-shadow-lift);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-6px);
    transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
    z-index: 130;
}
.ms-dropdown.open { opacity: 1; visibility: visible; transform: none; }
.ms-dropdown-header { display: flex; align-items: center; gap: 12px; padding: 10px 10px 6px; }
.ms-dropdown-who { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.ms-dropdown-who strong { font-size: 14px; color: var(--ms-charcoal); }
.ms-dropdown-who span { font-size: 12px; color: var(--ms-grey); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ms-dropdown-meta { display: flex; flex-wrap: wrap; gap: 6px; padding: 4px 10px 10px; }
.ms-pill-muted { background: var(--ms-surface); color: var(--ms-grey); }
.ms-dropdown-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 500;
    color: var(--ms-charcoal);
}
a.ms-dropdown-item:hover,
.ms-dropdown-item:focus-visible { background: var(--ms-hover); color: var(--ms-charcoal); outline: none; }
.ms-dropdown-item svg { width: 18px; height: 18px; color: var(--ms-grey); }
.ms-dropdown-item.danger,
.ms-dropdown-item.danger svg { color: var(--ms-coral); }
a.ms-dropdown-item.danger:hover,
.ms-dropdown-item.danger:focus-visible { background: var(--ms-coral-pale); color: var(--ms-coral-deep); }
a.ms-dropdown-item.danger:hover svg { color: var(--ms-coral-deep); }
.ms-dropdown-divider { height: 1px; background: var(--ms-hairline); margin: 6px 4px; }
@media (prefers-reduced-motion: reduce) {
    .ms-dropdown, .ms-user-chevron { transition: none; }
}
.ms-avatar {
    width: 38px;
    height: 38px;
    border-radius: 12px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-family: var(--ms-font-heading);
    font-size: 14px;
    font-weight: 700;
    color: var(--ms-white);
    background: var(--ms-portal-accent);
}
.ms-user-text { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.ms-user-name { font-size: 14px; font-weight: 600; color: var(--ms-charcoal); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ms-user-role { font-size: 12px; font-weight: 500; color: var(--ms-portal-accent); }
.ms-topbar .ms-btn-ghost { color: var(--ms-grey); }
.ms-topbar .ms-btn-ghost:hover { color: var(--ms-charcoal); background: var(--ms-hover); }
/* Sidebar toggle — one button, icon depends on screen size and state */
.ms-topbar .ms-menu-toggle { display: inline-flex; }
.ms-menu-toggle .ms-toggle-mobile,
.ms-menu-toggle .ms-toggle-expand { display: none; }
html.ms-sidebar-collapsed .ms-menu-toggle .ms-toggle-collapse { display: none; }
html.ms-sidebar-collapsed .ms-menu-toggle .ms-toggle-expand { display: block; }

/* Collapsed sidebar (desktop only): a slim icon rail with hover labels */
@media (min-width: 769px) {
    html.ms-sidebar-collapsed { --ms-sidebar-width: 76px; }
    html.ms-sidebar-collapsed .ms-sidebar,
    html.ms-sidebar-collapsed .ms-sidebar .ms-nav { overflow: visible; }

    /* Profile in the rail: avatar with the logout icon underneath */
    html.ms-sidebar-collapsed .ms-sidebar-profile {
        flex-direction: column;
        gap: 6px;
        padding: 10px 0;
        margin: 0 var(--ms-sm) var(--ms-sm);
    }
    html.ms-sidebar-collapsed .ms-sidebar-profile-text { display: none; }
    html.ms-sidebar-collapsed .ms-sidebar-profile .ms-logout { position: relative; }
    html.ms-sidebar-collapsed .ms-sidebar-profile .ms-logout::after {
        content: attr(data-label);
        position: absolute;
        left: calc(100% + 18px);
        top: 50%;
        transform: translate(-4px, -50%);
        padding: 6px 10px;
        border-radius: 8px;
        background: var(--ms-charcoal);
        color: var(--ms-white);
        font-size: 12px;
        font-weight: 600;
        white-space: nowrap;
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.15s ease, transform 0.15s ease;
        z-index: 120;
    }
    html.ms-sidebar-collapsed .ms-sidebar-profile .ms-logout:hover::after,
    html.ms-sidebar-collapsed .ms-sidebar-profile .ms-logout:focus-visible::after { opacity: 1; transform: translate(0, -50%); }
    html.ms-sidebar-collapsed .ms-nav-item a { justify-content: center; padding: 11px 0; position: relative; }
    html.ms-sidebar-collapsed .ms-nav-item a span { display: none; }
    html.ms-sidebar-collapsed .ms-nav-section-label {
        font-size: 0;
        padding: 0;
        margin: var(--ms-sm) 14px;
        height: 1px;
        background: var(--ms-hairline);
    }
    html.ms-sidebar-collapsed .ms-nav-item a::after {
        content: attr(data-label);
        position: absolute;
        left: calc(100% + 12px);
        top: 50%;
        transform: translate(-4px, -50%);
        padding: 6px 10px;
        border-radius: 8px;
        background: var(--ms-charcoal);
        color: var(--ms-white);
        font-size: 12px;
        font-weight: 600;
        white-space: nowrap;
        box-shadow: var(--ms-shadow-lift);
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.15s ease, transform 0.15s ease;
        z-index: 120;
    }
    html.ms-sidebar-collapsed .ms-nav-item a:hover::after,
    html.ms-sidebar-collapsed .ms-nav-item a:focus-visible::after { opacity: 1; transform: translate(0, -50%); }

    /* Animate only after the first paint, so a saved state does not slide in on load */
    html.ms-sidebar-ready .ms-sidebar { transition: width 0.2s ease; }
    html.ms-sidebar-ready .ms-main { transition: margin-left 0.2s ease; }
}
@media (prefers-reduced-motion: reduce) {
    html.ms-sidebar-ready .ms-sidebar, html.ms-sidebar-ready .ms-main { transition: none; }
}

/* Main layout */
.ms-layout {
    display: flex;
    min-height: 100vh;
    padding-top: var(--ms-topbar-height);
}

/* Sidebar — full height, flush to the left edge and the top bar */
.ms-sidebar {
    position: fixed;
    top: var(--ms-topbar-height);
    left: 0;
    bottom: 0;
    width: var(--ms-sidebar-width);
    display: flex;
    flex-direction: column;
    background: var(--ms-white);
    border-right: 1px solid var(--ms-hairline);
    z-index: 90;
}
/* Menu scrolls on its own so the profile block always stays at the bottom */
.ms-sidebar .ms-nav {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: var(--ms-md) var(--ms-sm);
}

/* Profile block — pinned to the bottom of the sidebar */
.ms-sidebar-profile {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 var(--ms-sm) var(--ms-sm);
    padding: 10px 8px 10px 10px;
    border-radius: 14px;
    background: var(--ms-surface);
    border: 1px solid var(--ms-hairline);
    flex-shrink: 0;
}
.ms-sidebar-profile-text { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.25; }
.ms-sidebar-profile-name {
    font-size: 14px;
    font-weight: 600;
    color: var(--ms-charcoal);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.ms-sidebar-profile-role { font-size: 12px; font-weight: 500; color: var(--ms-portal-accent); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ms-sidebar-profile .ms-logout { flex-shrink: 0; color: var(--ms-coral); background: var(--ms-coral-pale); }
.ms-sidebar-profile .ms-logout:hover { color: var(--ms-coral-deep); background: var(--ms-coral-tint); }
.ms-nav { display: flex; flex-direction: column; gap: 2px; }
.ms-nav-item a {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 500;
    color: var(--ms-grey);
    transition: background 0.15s ease, color 0.15s ease;
}
.ms-nav-item a:hover { background: var(--ms-hover); color: var(--ms-charcoal); }
.ms-nav-item.active a {
    background: color-mix(in srgb, var(--ms-portal-accent) 11%, transparent);
    color: var(--ms-portal-accent);
    font-weight: 600;
}
.ms-nav-item a i,
.ms-nav-item a svg { width: 18px; height: 18px; flex-shrink: 0; }
.ms-nav-section-label {
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    color: var(--ms-grey);
    opacity: 0.8;
    padding: var(--ms-md) 14px 6px;
}

/* Main content */
.ms-main {
    flex: 1;
    min-width: 0;
    margin-left: var(--ms-sidebar-width);
    padding: var(--ms-xl) var(--ms-xl) 0;
    display: flex;
    flex-direction: column;
    min-height: calc(100vh - var(--ms-topbar-height));
}
.ms-main > :not(.ms-footer):not(.ms-footer-spacer):not(.ms-tabs):not(.ms-drawer):not(.ms-drawer-backdrop) { width: 100%; max-width: var(--ms-content-max); margin-left: auto; margin-right: auto; }

/* Page header */
.ms-page-header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--ms-md);
    margin-bottom: var(--ms-xl);
    animation: ms-rise 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.ms-page-eyebrow {
    font-size: 13px;
    font-weight: 600;
    color: var(--ms-green);
    margin-bottom: 4px;
}
.ms-page-title {
    font-family: var(--ms-font-heading);
    font-size: 30px;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.15;
    color: var(--ms-charcoal);
}
.ms-page-subtitle { font-size: 14px; color: var(--ms-grey); margin-top: 4px; }
.ms-page-actions { display: flex; gap: var(--ms-sm); align-items: center; flex-shrink: 0; }

/* Content grid */
.ms-content { display: flex; flex-direction: column; gap: var(--ms-lg); }
.ms-grid-2, .ms-grid-3, .ms-grid-4 { display: grid; gap: var(--ms-lg); }
.ms-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ms-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ms-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

/* Footer — plain white strip, flush with the sidebar on the left.
   The spacer grows to push the footer to the bottom of short pages (min 48px gap). */
.ms-footer-spacer { flex: 1 0 var(--ms-2xl); }
.ms-footer {
    margin: 0 calc(var(--ms-xl) * -1);
    background: var(--ms-white);
    border-top: 1px solid var(--ms-hairline);
}
.ms-footer-bar {
    padding: var(--ms-md) var(--ms-xl);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--ms-sm) var(--ms-lg);
    font-size: 13px;
    color: var(--ms-grey);
}
.ms-footer-brand { display: flex; align-items: center; gap: 10px; }
.ms-footer-brand .ms-wordmark { font-size: 15px; }
.ms-footer-links { display: flex; flex-wrap: wrap; gap: var(--ms-lg); }
.ms-footer-links span,
.ms-footer-links a { white-space: nowrap; }
.ms-footer-links a { color: var(--ms-grey); font-weight: 500; }
.ms-footer-links a:hover { color: var(--ms-green); }

@keyframes ms-rise {
    from { opacity: 0; transform: translateY(10px); }
    to   { opacity: 1; transform: none; }
}

/* ── Cards ────────────────────────────────────────────────── */
.ms-card {
    background: var(--ms-glass-strong);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid var(--ms-glass-border);
    border-radius: var(--ms-radius-2xl);
    padding: var(--ms-lg);
    box-shadow: var(--ms-shadow-soft);
    transition: box-shadow 0.2s ease;
    animation: ms-rise 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.ms-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ms-md);
    margin-bottom: var(--ms-md);
}
.ms-card-title {
    font-family: var(--ms-font-heading);
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--ms-charcoal);
}
.ms-card-subtitle { font-size: 13px; color: var(--ms-grey); margin-top: 2px; }
.ms-card-actions { display: flex; gap: var(--ms-sm); }
.ms-card-footer {
    margin-top: var(--ms-md);
    padding-top: var(--ms-md);
    border-top: 1px solid var(--ms-hairline);
    display: flex;
    justify-content: flex-end;
    gap: var(--ms-sm);
}

/* Stat card */
.ms-stat-card {
    background: var(--ms-glass-strong);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid var(--ms-glass-border);
    border-radius: var(--ms-radius-2xl);
    padding: 20px var(--ms-lg);
    box-shadow: var(--ms-shadow-soft);
    transition: transform 0.2s ease, box-shadow 0.2s ease;
    animation: ms-rise 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.ms-stat-card:hover { transform: translateY(-2px); box-shadow: var(--ms-shadow-lift); }
.ms-grid-4 > .ms-stat-card:nth-child(2) { animation-delay: 0.05s; }
.ms-grid-4 > .ms-stat-card:nth-child(3) { animation-delay: 0.1s; }
.ms-grid-4 > .ms-stat-card:nth-child(4) { animation-delay: 0.15s; }
.ms-stat-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--ms-md); }
.ms-stat-icon {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--ms-green-pale);
    color: var(--ms-green);
}
.ms-stat-icon svg { width: 22px; height: 22px; }
.ms-stat-icon.blue  { background: var(--ms-ai-bg);   color: var(--ms-blue); }
.ms-stat-icon.amber { background: var(--ms-amber-pale); color: var(--ms-amber); }
.ms-stat-icon.coral { background: var(--ms-coral-pale); color: var(--ms-coral); }
.ms-stat-icon.accent { background: color-mix(in srgb, var(--ms-portal-accent) 11%, transparent); color: var(--ms-portal-accent); }
.ms-stat-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--ms-grey);
}
.ms-stat-value {
    font-family: var(--ms-font-heading);
    font-size: 34px;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--ms-charcoal);
    line-height: 1.1;
}
.ms-stat-meta { font-size: 13px; color: var(--ms-grey); margin-top: 4px; }

/* ── Buttons ──────────────────────────────────────────────── */
.ms-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 44px;
    padding: 0 20px;
    border-radius: 12px;
    font-family: var(--ms-font);
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    border: none;
    text-decoration: none;
    transition: all 0.15s ease;
    white-space: nowrap;
}
.ms-btn:focus-visible {
    outline: 2px solid var(--ms-green);
    outline-offset: 2px;
}

/* Primary */
.ms-btn-primary {
    background: var(--ms-green);
    color: var(--ms-white);
    box-shadow: 0 8px 20px -10px rgba(27, 107, 58, 0.7);
}
.ms-btn-primary:hover {
    background: var(--ms-green-light);
    text-decoration: none;
    color: var(--ms-white);
}

/* Secondary */
.ms-btn-secondary {
    background: var(--ms-white);
    color: var(--ms-green);
    border: 1.5px solid color-mix(in srgb, var(--ms-green) 35%, transparent);
}
.ms-btn-secondary:hover {
    background: var(--ms-green-pale);
    text-decoration: none;
    color: var(--ms-green);
}

/* Danger */
.ms-btn-danger {
    background: var(--ms-coral);
    color: var(--ms-white);
}
.ms-btn-danger:hover {
    background: var(--ms-coral-deep);
    text-decoration: none;
    color: var(--ms-white);
}

/* Ghost */
.ms-btn-ghost {
    background: transparent;
    color: var(--ms-grey);
    border: none;
}
.ms-btn-ghost:hover {
    background: var(--ms-hover);
    color: var(--ms-charcoal);
    text-decoration: none;
}

/* AI button */
.ms-btn-ai {
    background: var(--ms-blue);
    color: var(--ms-white);
}
.ms-btn-ai:hover {
    background: #1565A8;
    text-decoration: none;
    color: var(--ms-white);
}

/* Sizes */
.ms-btn-sm {
    height: 34px;
    padding: 0 14px;
    font-size: 13px;
    border-radius: 10px;
}
.ms-btn-lg {
    height: 52px;
    padding: 0 28px;
    font-size: 15px;
}
.ms-btn-icon {
    width: 44px;
    height: 44px;
    padding: 0;
}
.ms-btn-icon.ms-btn-sm {
    width: 34px;
    height: 34px;
}

/* Disabled */
.ms-btn:disabled,
.ms-btn.disabled {
    opacity: 0.5;
    cursor: not-allowed;
    pointer-events: none;
}

/* ── Form Elements ────────────────────────────────────────── */
.ms-form-group {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-bottom: var(--ms-md);
}

.ms-label {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--ms-charcoal);
}
.ms-label .required {
    color: var(--ms-green);
    margin-left: 2px;
}

.ms-input,
.ms-select {
    width: 100%;
    height: 44px;
    padding: 0 14px;
    border: 1.5px solid var(--ms-border);
    border-radius: 12px;
    font-family: var(--ms-font);
    font-size: 14px;
    color: var(--ms-charcoal);
    background: var(--ms-white);
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    appearance: none;
}

.ms-textarea {
    width: 100%;
    min-height: 120px;
    padding: 12px 14px;
    border: 1.5px solid var(--ms-border);
    border-radius: 12px;
    font-family: var(--ms-font);
    font-size: 14px;
    color: var(--ms-charcoal);
    background: var(--ms-white);
    resize: vertical;
    line-height: 1.6;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.ms-input:focus,
.ms-select:focus,
.ms-textarea:focus {
    outline: none;
    border-color: var(--ms-green);
    box-shadow: 0 0 0 3px rgba(27, 107, 58, 0.12);
}

.ms-input.error,
.ms-select.error,
.ms-textarea.error {
    border-color: var(--ms-coral);
}
.ms-input.error:focus,
.ms-select.error:focus,
.ms-textarea.error:focus {
    box-shadow: 0 0 0 3px rgba(217, 79, 61, 0.12);
}

/* Custom select arrow */
.ms-select {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236B7280' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 14px center;
    padding-right: 36px;
}

.ms-field-error {
    font-size: 12px;
    color: var(--ms-coral);
    display: block;
}

.ms-field-hint {
    font-size: 12px;
    color: var(--ms-grey);
    display: block;
}

/* Checkboxes */
.ms-checkbox-group {
    display: flex;
    flex-wrap: wrap;
    gap: var(--ms-sm);
}

.ms-checkbox-label {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 7px 14px 7px 10px;
    border: 1px solid var(--ms-border);
    border-radius: 20px;
    background: var(--ms-white);
    font-size: 13px;
    font-weight: 500;
    color: var(--ms-charcoal);
    cursor: pointer;
    user-select: none;
    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
/* Native checkbox stays in the DOM for forms and keyboards, hidden visually */
.ms-checkbox-label input[type="checkbox"] {
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
    pointer-events: none;
}
.ms-checkbox-label::before {
    content: '';
    width: 16px;
    height: 16px;
    flex-shrink: 0;
    border-radius: 50%;
    border: 1.5px solid var(--ms-border);
    background: var(--ms-white) center / 10px no-repeat;
    transition: background-color 0.15s ease, border-color 0.15s ease;
}
.ms-checkbox-label:hover { border-color: color-mix(in srgb, var(--ms-green) 40%, transparent); background: var(--ms-green-pale); }
.ms-checkbox-label:has(input:checked) {
    border-color: var(--ms-green);
    background: var(--ms-green);
    color: var(--ms-white);
}
.ms-checkbox-label:has(input:checked)::before {
    border-color: var(--ms-white);
    background-color: var(--ms-white);
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231B6B3A' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
}
.ms-checkbox-label:has(input:focus-visible) { outline: 2px solid var(--ms-green); outline-offset: 2px; }
.ms-checkbox-label:has(input:disabled) { opacity: 0.6; cursor: default; }

/* Toggle */
.ms-toggle {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--ms-sm);
    cursor: pointer;
}
.ms-toggle input {
    opacity: 0;
    width: 0;
    height: 0;
    position: absolute;
}
.ms-toggle-track {
    width: 44px;
    height: 24px;
    background: var(--ms-border);
    border-radius: 12px;
    position: relative;
    transition: background 0.2s ease;
}
.ms-toggle-thumb {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 18px;
    height: 18px;
    background: white;
    border-radius: 50%;
    transition: transform 0.2s ease;
    box-shadow: 0 1px 3px rgba(0,0,0,0.2);
}
.ms-toggle input:checked + .ms-toggle-track {
    background: var(--ms-green);
}
.ms-toggle input:checked + .ms-toggle-track .ms-toggle-thumb {
    transform: translateX(20px);
}
.ms-toggle-label {
    font-size: 14px;
    font-weight: 500;
    color: var(--ms-charcoal);
}

/* Form actions row */
.ms-form-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--ms-sm);
    margin-top: var(--ms-xl);
    padding-top: var(--ms-lg);
    border-top: 1px solid var(--ms-border);
}

/* ── Status Badges ────────────────────────────────────────── */
/* Soft pills with a status dot, sentence case */
.ms-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px 3px 8px;
    border-radius: 20px;
    font-family: var(--ms-font);
    font-size: 12px;
    font-weight: 600;
    line-height: 1.5;
    white-space: nowrap;
}
.ms-badge::before {
    content: '';
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: currentColor;
    flex-shrink: 0;
}
.ms-badge-empty      { background: var(--ms-surface);    color: var(--ms-grey); }
.ms-badge-pending    { background: var(--ms-surface);    color: var(--ms-grey); }
.ms-badge-draft      { background: var(--ms-amber-pale); color: var(--ms-amber-deep); }
.ms-badge-warning    { background: var(--ms-amber-pale); color: var(--ms-amber-deep); }
.ms-badge-developing { background: var(--ms-amber-pale); color: var(--ms-amber-deep); }
.ms-badge-progress   { background: var(--ms-ai-bg);      color: var(--ms-blue-deep); }
.ms-badge-complete   { background: var(--ms-green-pale); color: var(--ms-green); }
.ms-badge-secure     { background: var(--ms-green-pale); color: var(--ms-green); }
.ms-badge-approved   { background: var(--ms-green);      color: var(--ms-white); }
.ms-badge-published  { background: var(--ms-gold);       color: var(--ms-charcoal); }
.ms-badge-reteach    { background: var(--ms-coral-pale); color: var(--ms-coral-deep); }
.ms-badge-notyet     { background: var(--ms-coral-pale); color: var(--ms-coral-deep); }

/* ── Tables ───────────────────────────────────────────────── */
.ms-table-wrap {
    overflow-x: auto;
    border-radius: 14px;
    border: 1px solid var(--ms-hairline);
    background: var(--ms-white);
}

.ms-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
}

.ms-table th {
    background: transparent;
    padding: 12px 16px;
    text-align: left;
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--ms-grey);
    border-bottom: 1px solid var(--ms-hairline);
    white-space: nowrap;
}

.ms-table td {
    padding: 14px 16px;
    border-bottom: 1px solid var(--ms-hairline);
    color: var(--ms-charcoal);
    vertical-align: middle;
}

.ms-table tr:last-child td {
    border-bottom: none;
}

.ms-table tbody tr { transition: background 0.15s ease; }
.ms-table tbody tr:hover td {
    background: var(--ms-hover);
}

.ms-table-empty {
    text-align: center;
    padding: var(--ms-2xl);
    color: var(--ms-grey);
    font-size: 14px;
}

/* ── Search and Filter Bar ────────────────────────────────── */
.ms-toolbar {
    display: flex;
    align-items: center;
    gap: var(--ms-sm);
    margin-bottom: var(--ms-md);
    flex-wrap: wrap;
}

.ms-search-wrap {
    position: relative;
    flex: 1;
    min-width: 200px;
}
.ms-search-wrap svg,
.ms-search-wrap i {
    position: absolute;
    left: 12px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ms-grey);
    width: 16px;
    height: 16px;
    pointer-events: none;
}
.ms-search-wrap .ms-input {
    padding-left: 38px;
}

/* ── Inquiry Cycle Bar ────────────────────────────────────── */
.ms-inquiry-bar {
    display: flex;
    gap: 4px;
    padding: var(--ms-md) var(--ms-lg);
    background: var(--ms-white);
    border-bottom: 1px solid var(--ms-border);
    overflow-x: auto;
    position: sticky;
    top: var(--ms-topbar-height);
    z-index: 80;
}

.ms-stage {
    flex: 1;
    min-width: 120px;
    padding: 8px 12px;
    border-radius: var(--ms-radius);
    font-size: 12px;
    font-weight: 600;
    text-align: center;
    cursor: pointer;
    transition: all 0.15s ease;
    white-space: nowrap;
    font-family: var(--ms-font);
}

.ms-stage-complete  { background: var(--ms-green);  color: white; }
.ms-stage-active    { background: #1E3A5F; color: white; }
.ms-stage-warning   { background: var(--ms-amber);  color: white; }
.ms-stage-upcoming  { background: #F3F4F6; color: var(--ms-grey); }

.ms-stage:hover {
    opacity: 0.85;
}

/* ── Teacher Front Screen ─────────────────────────────────── */
/* Six cells as frosted cards; layout and no-scroll sizing live in teacher.css */
.ms-front-screen {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--ms-md);
}
.ms-front-cell {
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding: 18px 20px;
    background: var(--ms-glass-strong);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid var(--ms-glass-border);
    border-radius: var(--ms-radius-2xl);
    box-shadow: var(--ms-shadow-soft);
    overflow: hidden;
    cursor: pointer;
    transition: transform 0.2s ease, box-shadow 0.2s ease;
    animation: ms-rise 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.ms-front-cell:hover { transform: translateY(-2px); box-shadow: var(--ms-shadow-lift); }
.ms-front-cell:focus-visible { outline: 2px solid var(--ms-green); outline-offset: 2px; }
.ms-front-cell:nth-child(2) { animation-delay: 0.04s; }
.ms-front-cell:nth-child(3) { animation-delay: 0.08s; }
.ms-front-cell:nth-child(4) { animation-delay: 0.12s; }
.ms-front-cell:nth-child(5) { animation-delay: 0.16s; }
.ms-front-cell:nth-child(6) { animation-delay: 0.2s; }

.ms-front-cell-head { display: flex; align-items: center; gap: 10px; }
.ms-front-cell-head .ms-stat-icon { width: 36px; height: 36px; border-radius: 11px; }
.ms-front-cell-head .ms-stat-icon svg { width: 18px; height: 18px; }
.ms-front-cell-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--ms-grey);
}
.ms-front-cell-value { font-size: 14px; font-weight: 600; color: var(--ms-charcoal); line-height: 1.35; }
.ms-front-cell-meta { font-size: 12px; color: var(--ms-grey); margin-top: 2px; }

/* Carried forward (reteach) — amber tint */
.ms-front-cell.reteach { background: linear-gradient(180deg, var(--ms-amber-pale), var(--ms-white) 70%); border-color: var(--ms-amber-pale); }
.ms-front-cell.reteach .ms-front-cell-label { color: var(--ms-amber-deep); }
@media (prefers-reduced-motion: reduce) {
    .ms-front-cell { animation: none; }
    .ms-front-cell:hover { transform: none; }
}

/* ── Coverage Progress Bar ────────────────────────────────── */
.ms-coverage-bar {
    display: flex;
    flex-direction: column;
    gap: var(--ms-sm);
}

.ms-loi-item {
    display: flex;
    align-items: center;
    gap: var(--ms-sm);
}

.ms-loi-label {
    font-size: 12px;
    color: var(--ms-grey);
    white-space: nowrap;
    min-width: 50px;
}

.ms-progress-track {
    flex: 1;
    min-height: 8px;
    height: 8px;
    background: var(--ms-hairline);
    border-radius: 4px;
    overflow: hidden;
}
/* In a vertical stack the track must not take part in flex sizing (it would collapse to 0) */
.ms-progress-track:only-child,
.ms-cycle-week .ms-progress-track,
.ms-unit-week .ms-progress-track { flex: none; width: 100%; }

.ms-progress-fill {
    height: 100%;
    background: var(--ms-green);
    border-radius: 4px;
    transition: width 0.4s ease;
}

.ms-progress-fill.warning {
    background: var(--ms-amber);
}

.ms-progress-fill.empty {
    background: var(--ms-border);
}

.ms-loi-pct {
    font-size: 11px;
    font-family: var(--ms-font-mono);
    color: var(--ms-grey);
    min-width: 36px;
    text-align: right;
}

/* ── AI Suggestion Card ───────────────────────────────────── */
.ms-ai-card {
    background: var(--ms-ai-bg);
    border-left: 3px solid var(--ms-ai-border);
    border-radius: var(--ms-radius-lg);
    padding: var(--ms-md);
    margin: var(--ms-md) 0;
    position: relative;
    transition: opacity 0.3s ease;
}

.ms-ai-card::before {
    content: '✦ AI Suggestion';
    position: absolute;
    top: 10px;
    right: 14px;
    font-size: 11px;
    font-weight: 600;
    color: var(--ms-grey);
    font-family: var(--ms-font);
    letter-spacing: 0.2px;
}

.ms-ai-card-content {
    font-size: 14px;
    color: var(--ms-charcoal);
    line-height: 1.6;
    padding-right: 120px;
}

.ms-ai-card-actions {
    display: flex;
    gap: var(--ms-sm);
    margin-top: var(--ms-md);
}

/* Highlight on AI-filled fields */
.ms-ai-filled {
    background: #FFFDE7 !important;
    border-color: var(--ms-gold) !important;
}
.ms-ai-filled:focus {
    background: var(--ms-white) !important;
}

/* ── POI Grid ─────────────────────────────────────────────── */
/* Year groups (rows) × the six themes (columns). Cells are small cards. */
.ms-poi-grid {
    overflow-x: auto;
    background: var(--ms-glass-strong);
    border: 1px solid var(--ms-glass-border);
    border-radius: var(--ms-radius-2xl);
    box-shadow: var(--ms-shadow-soft);
}
.ms-poi-table {
    width: 100%;
    min-width: 1040px;
    border-collapse: separate;
    border-spacing: 0;
    table-layout: fixed;
}
.ms-poi-table th {
    padding: 16px 12px 12px;
    text-align: left;
    vertical-align: top;   /* colour bars and names line up whether a name takes one line or two */
    font-size: 13px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--ms-charcoal);
    border-bottom: 1px solid var(--ms-hairline);
}
.ms-poi-table th .ms-theme-dot { display: block; margin-bottom: 8px; width: 24px; height: 6px; border-radius: 3px; }
.ms-poi-table th:first-child,
.ms-poi-table td:first-child {
    width: 150px;
    position: sticky;
    left: 0;
    z-index: 1;
    background: var(--ms-white);
    border-right: 1px solid var(--ms-hairline);
}
.ms-poi-table th:first-child {
    padding-top: 30px;     /* skip the 6px bar + 8px gap so the label sits level with the theme names */
    font-size: 12px;
    color: var(--ms-grey);
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.ms-poi-table td {
    padding: 6px;
    vertical-align: top;
    border-bottom: 1px solid var(--ms-hairline);
}
.ms-poi-table tr:last-child td { border-bottom: none; }

.ms-poi-theme-cell { padding: 14px 16px !important; }
.ms-poi-yg-name { font-family: var(--ms-font-heading); font-size: 15px; font-weight: 700; color: var(--ms-charcoal); }
.ms-poi-yg-label { font-size: 12px; color: var(--ms-grey); }

.ms-poi-cell {
    display: flex;
    flex-direction: column;
    gap: 6px;
    height: 100%;
    min-height: 112px;
    padding: 12px;
    border-radius: 14px;
    background: var(--ms-white);
    border: 1px solid var(--ms-hairline);
    cursor: pointer;
    transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
.ms-poi-cell:hover { border-color: color-mix(in srgb, var(--ms-green) 35%, transparent); box-shadow: var(--ms-shadow-soft); transform: translateY(-1px); }
.ms-poi-cell:focus-visible { outline: 2px solid var(--ms-green); outline-offset: 2px; }
.ms-poi-cell-title { font-size: 13px; font-weight: 700; line-height: 1.3; color: var(--ms-charcoal); }
.ms-poi-cell-idea {
    flex: 1;
    font-size: 12px;
    line-height: 1.4;
    color: var(--ms-grey);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.ms-poi-cell-foot { display: flex; align-items: center; justify-content: space-between; gap: 6px; flex-wrap: wrap; }
.ms-poi-cell-count { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--ms-grey); }
.ms-poi-cell-count svg { width: 13px; height: 13px; }

/* Empty slot */
.ms-poi-cell.empty {
    align-items: center;
    justify-content: center;
    gap: 4px;
    background: transparent;
    border: 1.5px dashed var(--ms-border);
    color: var(--ms-grey);
    font-size: 12px;
    font-weight: 600;
}
.ms-poi-cell.empty svg { width: 20px; height: 20px; }
.ms-poi-cell.empty:hover { border-color: var(--ms-green); background: var(--ms-green-pale); color: var(--ms-green); box-shadow: none; }

@media (prefers-reduced-motion: reduce) {
    .ms-poi-cell:hover { transform: none; }
}

/* ── Student Question Logger ──────────────────────────────── */
.ms-question-buttons {
    display: flex;
    gap: var(--ms-sm);
    margin-bottom: var(--ms-lg);
    flex-wrap: wrap;
}

.ms-question-btn {
    flex: 1;
    min-width: 140px;
    height: 52px;
    border-radius: var(--ms-radius-lg);
    font-size: 14px;
    font-weight: 600;
    border: 2px solid transparent;
    transition: all 0.15s ease;
}
.ms-question-btn.wonder    { background: #EFF6FF; color: var(--ms-blue); border-color: var(--ms-blue); }
.ms-question-btn.found_out { background: var(--ms-green-pale); color: var(--ms-green); border-color: var(--ms-green); }
.ms-question-btn.want_to   { background: #FEF3C7; color: #92400E; border-color: var(--ms-amber); }

.ms-question-btn:hover {
    filter: brightness(0.95);
    transform: translateY(-1px);
}

.ms-question-card {
    background: var(--ms-white);
    border: 1px solid var(--ms-border);
    border-radius: var(--ms-radius);
    padding: var(--ms-md);
    display: flex;
    gap: var(--ms-md);
    align-items: flex-start;
}

.ms-question-type-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
    margin-top: 5px;
}
.ms-question-type-dot.wonder    { background: var(--ms-blue); }
.ms-question-type-dot.found_out { background: var(--ms-green); }
.ms-question-type-dot.want_to   { background: var(--ms-amber); }

/* ── Fold-outs ────────────────────────────────────────────── */
/* Collapsible card sections (planner, configuration years) */
.ms-foldout {
    margin-bottom: var(--ms-md);
    background: var(--ms-glass-strong);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border: 1px solid var(--ms-glass-border);
    border-radius: var(--ms-radius-2xl);
    box-shadow: var(--ms-shadow-soft);
    overflow: hidden;
}
.ms-foldout-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ms-md);
    padding: 18px var(--ms-lg);
    cursor: pointer;
    user-select: none;
    transition: background 0.15s ease;
}
.ms-foldout-header:hover { background: var(--ms-hover); }
.ms-foldout-header:focus-visible { outline: 2px solid var(--ms-green); outline-offset: -2px; }
.ms-foldout-title {
    display: flex;
    align-items: center;
    gap: 12px;
    font-family: var(--ms-font-heading);
    font-size: 16px;
    font-weight: 700;
    color: var(--ms-charcoal);
}
.ms-foldout-title .ms-stat-icon { width: 36px; height: 36px; border-radius: 11px; }
.ms-foldout-title .ms-stat-icon svg { width: 18px; height: 18px; }
.ms-foldout-hint { font-family: var(--ms-font); font-size: 13px; font-weight: 500; color: var(--ms-grey); }
.ms-foldout-chevron {
    width: 32px;
    height: 32px;
    padding: 7px;
    border-radius: 10px;
    color: var(--ms-grey);
    flex-shrink: 0;
    transition: transform 0.2s ease, background 0.15s ease;
}
.ms-foldout-header:hover .ms-foldout-chevron { background: var(--ms-white); }
.ms-foldout.open .ms-foldout-chevron { transform: rotate(180deg); }
.ms-foldout-body { display: none; padding: 4px var(--ms-lg) var(--ms-lg); }
.ms-foldout.open .ms-foldout-body { display: block; }
@media (prefers-reduced-motion: reduce) {
    .ms-foldout-chevron { transition: none; }
}

/* ── Offline Bar ──────────────────────────────────────────── */
#ms-offline-bar {
    display: none;
    background: var(--ms-amber);
    color: var(--ms-charcoal); /* white on amber is 2.4:1; charcoal passes WCAG AA */
    text-align: center;
    padding: var(--ms-sm) var(--ms-lg);
    font-size: 13px;
    font-family: var(--ms-font);
    font-weight: 500;
    position: fixed;
    top: var(--ms-topbar-height);
    left: 0;
    right: 0;
    z-index: 95;
}

/* ── Dividers ─────────────────────────────────────────────── */
.ms-divider {
    height: 1px;
    background: var(--ms-border);
    margin: var(--ms-lg) 0;
}

/* ── Empty State ──────────────────────────────────────────── */
.ms-empty {
    text-align: center;
    padding: var(--ms-2xl) var(--ms-xl);
    color: var(--ms-grey);
}
/* The Lucide svg itself becomes a rounded tinted tile */
.ms-empty-icon {
    display: block;
    width: 64px;
    height: 64px;
    padding: 17px;
    margin: 0 auto var(--ms-md);
    border-radius: var(--ms-radius-2xl);
    background: var(--ms-green-pale);
    color: var(--ms-green);
}
.ms-empty-title {
    font-family: var(--ms-font-heading);
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--ms-charcoal);
    margin-bottom: 6px;
}
.ms-empty-text {
    max-width: 46ch;
    margin: 0 auto var(--ms-lg);
    font-size: 14px;
    color: var(--ms-grey);
}
.ms-empty-text:last-child { margin-bottom: 0; }

/* ── Utility ──────────────────────────────────────────────── */
.ms-flex         { display: flex; }
.ms-flex-center  { display: flex; align-items: center; }
.ms-flex-between { display: flex; align-items: center; justify-content: space-between; }
.ms-gap-sm       { gap: var(--ms-sm); }
.ms-gap-md       { gap: var(--ms-md); }
.ms-gap-lg       { gap: var(--ms-lg); }
.ms-mt-sm        { margin-top: var(--ms-sm); }
.ms-mt-md        { margin-top: var(--ms-md); }
.ms-mt-lg        { margin-top: var(--ms-lg); }
.ms-block        { display: block; }
.ms-mb-sm        { margin-bottom: var(--ms-sm); }
.ms-mb-md        { margin-bottom: var(--ms-md); }
.ms-mb-lg        { margin-bottom: var(--ms-lg); }

/* ── Phase 5 portfolio, SLC and Exhibition ──────────────── */
.ms-portfolio-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--ms-lg); align-items: start; }
.ms-portfolio-card.is-featured { box-shadow: 0 0 0 2px var(--ms-gold); }
.ms-portfolio-image { width: 100%; max-height: 360px; object-fit: cover; border-radius: 14px; margin: 12px 0; background: var(--ms-surface); }
.ms-portfolio-content { margin-top: 12px; line-height: 1.65; color: var(--ms-charcoal); }
.ms-portfolio-reflection { margin: 14px 0; padding: 12px 14px; border-left: 4px solid var(--ms-blue); border-radius: 0 12px 12px 0; background: var(--ms-ai-bg); line-height: 1.55; }
.ms-teacher-note { display: flex; gap: 10px; margin-top: 14px; padding: 12px 14px; border-radius: 14px; background: var(--ms-green-pale); font-size: 14px; line-height: 1.5; }
.ms-teacher-note > svg { width: 18px; flex-shrink: 0; color: var(--ms-green); }
.ms-tag-picker { display: flex; flex-wrap: wrap; gap: 8px; max-height: 180px; overflow: auto; padding: 8px 0; }
.ms-exhibition-stages { display: flex; flex-wrap: wrap; gap: 8px; }
.ms-stage-chip { display: inline-flex; align-items: center; gap: 6px; padding: 8px 10px; border-radius: 999px; background: var(--ms-surface); color: var(--ms-grey); font-size: 13px; }
.ms-stage-chip.done { background: var(--ms-green-pale); color: var(--ms-green); font-weight: 600; }
.ms-stage-chip svg { width: 15px; height: 15px; }
.ms-journal-list { display: flex; flex-direction: column; gap: 12px; }
.ms-journal-list article { padding: 12px 0; border-bottom: 1px solid var(--ms-hairline); }
.ms-journal-list article:last-child { border-bottom: 0; }
.ms-journal-list time { float: right; color: var(--ms-grey); font-size: 12px; }
.ms-journal-list p,.ms-journal-list blockquote { margin-top: 8px; line-height: 1.55; }
.ms-journal-list blockquote { padding: 10px 12px; border-radius: 10px; background: var(--ms-ai-bg); }
.ms-slc-intro { text-align: center; font-size: 18px; line-height: 1.6; }
.ms-presentation-mode .ms-sidebar,.ms-presentation-mode .ms-topbar,.ms-presentation-mode .ms-page-actions,.ms-presentation-mode .ms-footer-bar { display:none!important; }
.ms-presentation-mode .ms-layout,.ms-presentation-mode .ms-main { display:block; margin:0; width:100%; max-width:none; }
.ms-presentation-mode .ms-main { padding:40px; font-size:120%; }
.ms-presentation-mode .ms-portfolio-grid { grid-template-columns:1fr; }
.ms-print-view { padding: 24px; background: white; }
@media(max-width:760px){.ms-portfolio-grid{grid-template-columns:1fr;}}
@media print {.ms-topbar,.ms-sidebar,.ms-page-actions,.ms-footer-bar{display:none!important}.ms-layout,.ms-main{display:block!important;margin:0!important;padding:0!important}.ms-card{box-shadow:none;break-inside:avoid}.ms-portfolio-grid{grid-template-columns:1fr}}

/* ── Phase 6 reports and analytics ───────────────────────── */
.ms-report-preview,.ms-report-narrative { line-height: 1.75; color: var(--ms-charcoal); text-align: left; }
.ms-report-document { max-width: 820px; margin-inline: auto; padding: clamp(24px,5vw,56px); }
.ms-report-document header { display:flex; align-items:center; gap:16px; padding-bottom:20px; margin-bottom:28px; border-bottom:2px solid var(--ms-green); }
.ms-report-document header img { width:64px; height:64px; object-fit:contain; }
.ms-report-document header div { display:flex; flex-direction:column; gap:3px; }
.ms-report-document .ms-report-narrative { margin-top:28px; font-size:16px; }
.ms-metric-big { margin:12px 0 4px; font-family:var(--ms-font-heading); font-size:36px; font-weight:700; color:var(--ms-green); }
.ms-p-md         { padding: var(--ms-md); }
.ms-p-lg         { padding: var(--ms-lg); }
.ms-w-full       { width: 100%; }
.ms-truncate     { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ms-sr-only      { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }

/* ── Responsive ───────────────────────────────────────────── */
@media (max-width: 1200px) {
    .ms-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 1024px) {
    .ms-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Tablet and phone: sidebar slides in over the page */
@media (max-width: 768px) {
    .ms-menu-toggle .ms-toggle-mobile { display: block; }
    .ms-menu-toggle .ms-toggle-collapse,
    html.ms-sidebar-collapsed .ms-menu-toggle .ms-toggle-expand { display: none; }
    .ms-topbar { padding: 0 var(--ms-md); }
    .ms-sidebar {
        top: var(--ms-topbar-height);
        left: 0;
        bottom: 0;
        width: min(280px, 85vw);
        box-shadow: var(--ms-shadow-lift);
        background: var(--ms-white);
        transform: translateX(-105%);
        transition: transform 0.25s ease;
        z-index: 200;
    }
    .ms-sidebar.open { transform: translateX(0); }
    .ms-sidebar-backdrop {
        position: fixed;
        inset: var(--ms-topbar-height) 0 0 0;
        background: rgba(30, 30, 46, 0.3);
        z-index: 150;
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.2s ease;
    }
    .ms-sidebar.open + .ms-sidebar-backdrop { opacity: 1; pointer-events: auto; }
    .ms-main { margin-left: 0; padding: var(--ms-lg) var(--ms-md) 0; }
    .ms-footer { margin: 0 calc(var(--ms-md) * -1); }
    .ms-footer-bar { padding: var(--ms-md); }
    .ms-grid-2,
    .ms-grid-3 { grid-template-columns: 1fr; }
    .ms-front-screen { grid-template-columns: 1fr; height: auto; overflow: visible; }
    .ms-page-header { flex-direction: column; align-items: flex-start; }
    .ms-page-title { font-size: 26px; }
    .ms-page-actions { flex-wrap: wrap; width: 100%; }
    .ms-page-actions .ms-select { flex: 1 1 150px; min-width: 0; }
}

@media (max-width: 560px) {
    .ms-topbar-campus, .ms-user-text, .ms-logout-label { display: none; }
    .ms-grid-4 { grid-template-columns: 1fr; }
    .ms-card { padding: 20px var(--ms-md); }
    .ms-stat-card { padding: var(--ms-md); }
    .ms-stat-value { font-size: 28px; }
}

@media (prefers-reduced-motion: reduce) {
    .ms-page-header, .ms-card, .ms-stat-card { animation: none; }
    .ms-stat-card:hover { transform: none; }
}

/* ── Button icons ─────────────────────────────────────────── */
.ms-btn svg { width: 16px; height: 16px; }

/* ── Tabs ─────────────────────────────────────────────────── */
/* Segmented control: a frosted track with the active tab as a white pill */
.ms-tabs {
    display: inline-flex;
    gap: 4px;
    max-width: 100%;
    padding: 4px;
    margin-bottom: var(--ms-lg);
    overflow-x: auto;
    background: var(--ms-glass-strong);
    border: 1px solid var(--ms-hairline);
    border-radius: 14px;
    scrollbar-width: none;
}
.ms-tabs::-webkit-scrollbar { display: none; }
.ms-tab {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 8px 14px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 500;
    color: var(--ms-grey);
    white-space: nowrap;
    background: none;
    transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}
.ms-tab:hover { color: var(--ms-charcoal); background: var(--ms-hover); }
.ms-tab:focus-visible { outline: 2px solid var(--ms-green); outline-offset: 1px; }
.ms-tab.active {
    color: var(--ms-green);
    font-weight: 600;
    background: var(--ms-green-pale);
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ms-green) 18%, transparent);
}
.ms-tab.active:hover { background: var(--ms-green-pale); color: var(--ms-green); }
.ms-tab svg { width: 16px; height: 16px; }
.ms-tab.active svg { color: var(--ms-green); }
.ms-tab-panel { display: none; }
.ms-tab-panel.active { display: block; animation: ms-rise 0.35s ease both; }
@media (prefers-reduced-motion: reduce) {
    .ms-tab-panel.active { animation: none; }
}

/* ── Inline icon buttons in tables ────────────────────────── */
.ms-table-actions { display: flex; gap: var(--ms-xs); justify-content: flex-end; }
.ms-inline-form { display: flex; gap: var(--ms-sm); align-items: flex-end; flex-wrap: wrap; }
.ms-inline-form .ms-form-group { margin-bottom: 0; flex: 1; min-width: 140px; }

/* ── Login ────────────────────────────────────────────────── */
.ms-auth {
    --ms-auth-sky-top: var(--ms-sky-top);
    --ms-auth-sky-bottom: var(--ms-sky-bottom);
    --ms-auth-hill-far: var(--ms-hill-far);
    --ms-auth-hill-mid: var(--ms-hill-mid);
    --ms-auth-hill-near: var(--ms-hill-near);
    --ms-auth-tree: var(--ms-tree);

    position: relative;
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    align-items: center;
    overflow: hidden;
    padding: var(--ms-lg) var(--ms-md) 0;
    background: linear-gradient(180deg, var(--ms-auth-sky-top) 0%, var(--ms-auth-sky-bottom) 70%);
}

.ms-auth-top {
    width: 100%;
    max-width: 1120px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    position: relative;
    z-index: 2;
}
.ms-auth-logo { display: flex; align-items: center; gap: 10px; text-decoration: none; }
.ms-auth-logo:hover { text-decoration: none; }
.ms-auth-logo img { width: 34px; height: 34px; }
.ms-auth-logo .ms-wordmark { color: var(--ms-charcoal); font-size: 20px; }
.ms-auth-logo .ms-wordmark span { color: var(--ms-green); }
.ms-auth-school { font-size: 13px; color: var(--ms-grey); }

/* Card */
.ms-auth-card {
    position: relative;
    z-index: 2;
    width: 100%;
    max-width: 420px;
    margin: clamp(32px, 9vh, 96px) 0 var(--ms-2xl);
    padding: 40px;
    background: rgba(255, 255, 255, 0.86);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border: 1px solid rgba(255, 255, 255, 0.9);
    border-radius: 20px;
    box-shadow: 0 1px 2px rgba(18, 63, 36, 0.06), 0 24px 60px -12px rgba(18, 63, 36, 0.22);
    animation: ms-auth-rise 0.6s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.ms-auth-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    color: var(--ms-green);
    background: var(--ms-green-pale);
    padding: 4px 10px;
    border-radius: 20px;
}
.ms-auth-eyebrow svg { width: 14px; height: 14px; }
.ms-auth-title {
    font-family: var(--ms-font-heading);
    font-size: 30px;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--ms-charcoal);
    margin-top: var(--ms-md);
}
.ms-auth-sub { color: var(--ms-grey); font-size: 14px; margin: 2px 0 var(--ms-lg); }

/* Floating-label fields */
.ms-float {
    position: relative;
    margin-bottom: 14px;
}
.ms-float input {
    width: 100%;
    height: 56px;
    padding: 22px 16px 6px;
    font-family: var(--ms-font);
    font-size: 15px;
    color: var(--ms-charcoal);
    background: var(--ms-white);
    border: 1.5px solid var(--ms-border);
    border-radius: 12px;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.ms-float input.has-action { padding-right: 52px; }
.ms-float label {
    position: absolute;
    left: 17px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 15px;
    color: var(--ms-grey);
    pointer-events: none;
    transition: all 0.15s ease;
}
.ms-float input:focus {
    outline: none;
    border-color: var(--ms-green);
    box-shadow: 0 0 0 4px rgba(27, 107, 58, 0.12);
}
.ms-float input:focus + label,
.ms-float input:not(:placeholder-shown) + label {
    top: 17px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.3px;
    color: var(--ms-green);
}
.ms-float-action {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    width: 40px;
    height: 40px;
    border-radius: 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--ms-grey);
}
.ms-float-action:hover { color: var(--ms-charcoal); background: var(--ms-surface); }
.ms-float-action svg { width: 18px; height: 18px; }

.ms-auth-card .ms-btn {
    width: 100%;
    height: 52px;
    margin-top: 6px;
    border-radius: 12px;
    font-size: 15px;
    box-shadow: 0 8px 20px -8px rgba(27, 107, 58, 0.6);
}
.ms-auth-card .ms-btn svg { transition: transform 0.15s ease; }
.ms-auth-card .ms-btn:hover svg { transform: translateX(3px); }
.ms-auth-card .ms-btn:disabled { box-shadow: none; }
.ms-auth-alert {
    display: flex;
    gap: var(--ms-sm);
    align-items: flex-start;
    padding: 12px 14px;
    margin-bottom: var(--ms-md);
    border-radius: 12px;
    background: #FEF2F2;
    color: #991B1B;
    font-size: 13px;
}
.ms-auth-alert svg { width: 18px; height: 18px; flex-shrink: 0; margin-top: 1px; }
.ms-auth-alert.success { background: var(--ms-green-pale); color: var(--ms-green); }

/* Links and rows inside the card */
.ms-auth-row { display: flex; justify-content: flex-end; margin: -2px 0 14px; }
.ms-auth-link { font-size: 13px; font-weight: 600; color: var(--ms-green); }
.ms-auth-link:hover { color: var(--ms-green-light); }
.ms-auth-back {
    display: inline-flex; align-items: center; gap: 6px;
    margin-top: var(--ms-lg); width: 100%; justify-content: center;
    font-size: 14px; font-weight: 600; color: var(--ms-grey);
}
.ms-auth-back:hover { color: var(--ms-charcoal); text-decoration: none; }
.ms-auth-back svg { width: 16px; height: 16px; transition: transform 0.15s ease; }
.ms-auth-back:hover svg { transform: translateX(-3px); }

/* Status icon for confirmation states */
.ms-auth-icon {
    width: 56px; height: 56px; border-radius: 16px;
    display: flex; align-items: center; justify-content: center;
    background: var(--ms-green-pale); color: var(--ms-green);
    margin-bottom: var(--ms-md);
}
.ms-auth-icon svg { width: 28px; height: 28px; }
.ms-auth-icon.warning { background: #FEF3C7; color: var(--ms-amber); }
.ms-auth-card .ms-auth-icon + .ms-auth-title { margin-top: 0; }
.ms-auth-card p strong { color: var(--ms-charcoal); }

/* Password strength meter */
.ms-strength { display: flex; gap: 6px; margin: -4px 0 6px; }
.ms-strength span { flex: 1; height: 4px; border-radius: 4px; background: var(--ms-border); transition: background 0.2s ease; }
.ms-strength[data-level="1"] span:nth-child(-n+1) { background: var(--ms-coral); }
.ms-strength[data-level="2"] span:nth-child(-n+2) { background: var(--ms-amber); }
.ms-strength[data-level="3"] span:nth-child(-n+3) { background: var(--ms-green-light); }
.ms-strength[data-level="4"] span { background: var(--ms-green); }
.ms-float-hint { font-size: 12px; color: var(--ms-grey); margin: 0 0 14px 2px; min-height: 18px; }
.ms-float-hint.error { color: var(--ms-coral); }
.ms-float input.error { border-color: var(--ms-coral); }

/* Development-only reset link */
.ms-auth-dev {
    margin-top: var(--ms-lg); padding: 12px 14px;
    border: 1.5px dashed var(--ms-amber); border-radius: 12px;
    font-size: 12px; color: var(--ms-charcoal); background: #FFFBF0;
    word-break: break-all;
}
.ms-auth-dev strong { display: block; color: var(--ms-amber); text-transform: uppercase; letter-spacing: 0.5px; font-size: 11px; margin-bottom: 4px; }
.ms-auth-help { margin-top: var(--ms-lg); font-size: 13px; color: var(--ms-grey); text-align: center; }

/* Savanna scene */
.ms-auth-scene {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: clamp(180px, 36vh, 340px);
    z-index: 1;
    pointer-events: none;
}
.ms-auth-scene svg { width: 100%; height: 100%; display: block; }
.ms-auth-sun { animation: ms-auth-sun 1.4s cubic-bezier(0.2, 0.8, 0.2, 1) both; transform-box: fill-box; }
.ms-auth-foot {
    position: absolute;
    bottom: 14px;
    left: 0;
    right: 0;
    z-index: 2;
    text-align: center;
    font-size: 12px;
    color: rgba(255, 255, 255, 0.75);
}

@keyframes ms-auth-rise {
    from { opacity: 0; transform: translateY(14px); }
    to   { opacity: 1; transform: none; }
}
@keyframes ms-auth-sun {
    from { transform: translateY(40px); opacity: 0; }
    to   { transform: none; opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
    .ms-auth-card, .ms-auth-sun { animation: none; }
}

/* Phones */
@media (max-width: 560px) {
    .ms-auth { padding: var(--ms-md) var(--ms-md) 0; }
    .ms-auth-school { display: none; }
    .ms-auth-card { padding: 28px 22px; margin-top: var(--ms-lg); border-radius: 18px; }
    .ms-auth-title { font-size: 26px; }
    .ms-auth-scene { height: 150px; }
}
/* Short landscape screens: let the card sit over the scene */
@media (max-height: 640px) {
    .ms-auth-card { margin-top: var(--ms-lg); }
}

/* ── Notice (inline, non-modal) ───────────────────────────── */
.ms-notice {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    padding: 12px 16px;
    border-radius: 14px;
    font-size: 14px;
    line-height: 1.5;
    background: var(--ms-ai-bg);
    color: var(--ms-charcoal);
}
.ms-notice svg { width: 18px; height: 18px; flex-shrink: 0; margin-top: 2px; color: var(--ms-blue); }
.ms-notice-warning { background: var(--ms-amber-pale); }
.ms-notice-warning svg { color: var(--ms-amber); }
.ms-notice-success { background: var(--ms-green-pale); }
.ms-notice-success svg { color: var(--ms-green); }
.ms-notice-error { background: var(--ms-coral-pale); }
.ms-notice-error svg { color: var(--ms-coral); }

/* ── POI status strip ─────────────────────────────────────── */
/* Legend row: right-aligned white panel above the grid */
.ms-poi-legend-row { display: flex; justify-content: flex-end; margin-bottom: var(--ms-md); }
.ms-poi-legend {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 8px;
    padding: 6px 8px;
    background: var(--ms-white);
    border: 1px solid var(--ms-hairline);
    border-radius: 14px;
    box-shadow: var(--ms-shadow-soft);
    font-size: 13px;
    font-weight: 500;
    color: var(--ms-grey);
}
@media (max-width: 560px) {
    .ms-poi-legend-row { justify-content: flex-start; }
}

/* ── Drawer (side panel for fold-out detail) ──────────────── */
.ms-drawer-backdrop {
    position: fixed;
    inset: 0;
    z-index: 150;
    background: rgba(18, 63, 36, 0.28);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
}
.ms-drawer {
    position: fixed;
    top: var(--ms-sm);
    right: var(--ms-sm);
    bottom: var(--ms-sm);
    width: min(520px, calc(100vw - var(--ms-md)));
    z-index: 160;
    display: flex;
    flex-direction: column;
    background: var(--ms-white);
    border-radius: var(--ms-radius-2xl);
    box-shadow: 0 30px 70px -16px rgba(18, 63, 36, 0.35);
    transform: translateX(calc(100% + var(--ms-md)));
    transition: transform 0.25s cubic-bezier(0.2, 0.8, 0.2, 1);
}
.ms-drawer.open { transform: translateX(0); }
.ms-drawer.open + .ms-drawer-backdrop,
.ms-drawer-backdrop.open { opacity: 1; pointer-events: auto; }
.ms-drawer-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ms-md);
    padding: 20px var(--ms-lg);
    border-bottom: 1px solid var(--ms-hairline);
}
.ms-drawer-heading { display: flex; align-items: center; gap: 12px; min-width: 0; }
.ms-drawer-heading .ms-stat-icon { width: 40px; height: 40px; border-radius: 12px; flex-shrink: 0; }
.ms-drawer-title { font-family: var(--ms-font-heading); font-size: 19px; font-weight: 700; letter-spacing: -0.01em; }
.ms-drawer-body { flex: 1; overflow-y: auto; padding: var(--ms-lg); font-size: 14px; }
.ms-drawer-footer { padding: var(--ms-md) var(--ms-lg); border-top: 1px solid var(--ms-hairline); display: flex; justify-content: flex-end; gap: var(--ms-sm); }
@media (prefers-reduced-motion: reduce) {
    .ms-drawer { transition: none; }
}

/* ── Simple list rows ─────────────────────────────────────── */
.ms-list { display: flex; flex-direction: column; }
.ms-list-item {
    padding: 12px 0;
    border-bottom: 1px solid var(--ms-border);
    display: flex;
    gap: var(--ms-sm);
    align-items: flex-start;
}
.ms-list-item:last-child { border-bottom: none; }

/* ── Account pages (profile, change password) ─────────────── */
.ms-account-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.5fr);
    gap: var(--ms-lg);
    align-items: start;
}
.ms-profile-hero { display: flex; flex-direction: column; align-items: center; text-align: center; gap: var(--ms-sm); padding: var(--ms-md) 0; }
.ms-avatar-lg { width: 80px; height: 80px; border-radius: 24px; font-size: 26px; }
.ms-profile-name { font-family: var(--ms-font-heading); font-size: 22px; font-weight: 700; letter-spacing: -0.01em; }
.ms-profile-email { font-size: 14px; color: var(--ms-grey); word-break: break-all; }
.ms-profile-pills { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 4px; }

.ms-detail-list { display: grid; grid-template-columns: max-content 1fr; gap: 12px var(--ms-lg); font-size: 14px; }
.ms-detail-list dt { color: var(--ms-grey); }
.ms-detail-list dd { color: var(--ms-charcoal); font-weight: 500; }
.ms-account-grid .ms-card + .ms-card { margin-top: var(--ms-lg); }

/* Password input with a show/hide button inside it */
.ms-password-field { position: relative; }
.ms-password-field .ms-input { padding-right: 52px; }
.ms-field-action {
    position: absolute;
    right: 4px;
    top: 50%;
    transform: translateY(-50%);
    width: 36px;
    height: 36px;
    border-radius: 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--ms-grey);
}
.ms-field-action:hover { color: var(--ms-charcoal); background: var(--ms-hover); }
.ms-field-action svg { width: 18px; height: 18px; }
.ms-form-group .ms-strength { margin: 10px 0 6px; }
.ms-form-group .ms-float-hint { margin: 0; }
.ms-narrow { max-width: 620px; }

@media (max-width: 960px) {
    .ms-account-grid { grid-template-columns: 1fr; }
}

/* Footer on phones: one compact centred block */
@media (max-width: 560px) {
    .ms-footer-bar {
        flex-direction: column;
        justify-content: center;
        text-align: center;
        gap: 6px;
        padding: var(--ms-md) var(--ms-md) calc(var(--ms-md) + env(safe-area-inset-bottom));
        font-size: 12px;
    }
    .ms-footer-brand { flex-direction: column; gap: 2px; }
    .ms-footer-links { justify-content: center; gap: 4px 14px; }
}

/* Wide public card for reading pages (terms) */
.ms-auth-card.wide { max-width: 760px; margin-bottom: clamp(160px, 30vh, 300px); }
.ms-legal h2 { font-family: var(--ms-font-heading); font-size: 17px; font-weight: 700; color: var(--ms-charcoal); margin: var(--ms-lg) 0 6px; }
.ms-legal p, .ms-legal li { font-size: 14px; color: var(--ms-grey); line-height: 1.7; }
.ms-legal ol { list-style: decimal; padding-left: 20px; }

/* ── IB theme dot ─────────────────────────────────────────── */
.ms-theme-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; display: inline-block; background: var(--ms-grey); }
.ms-theme-dot.theme-1 { background: var(--ms-theme-1); }
.ms-theme-dot.theme-2 { background: var(--ms-theme-2); }
.ms-theme-dot.theme-3 { background: var(--ms-theme-3); }
.ms-theme-dot.theme-4 { background: var(--ms-theme-4); }
.ms-theme-dot.theme-5 { background: var(--ms-theme-5); }
.ms-theme-dot.theme-6 { background: var(--ms-theme-6); }

/* Compact empty state for side cards */
.ms-empty.ms-empty-compact { padding: var(--ms-lg) var(--ms-md); }
.ms-empty-compact .ms-empty-icon { width: 52px; height: 52px; padding: 14px; border-radius: 16px; }

/* Fold-outs nested inside a card are flat panels, not cards-in-cards */
.ms-card .ms-foldout {
    background: var(--ms-white);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border: 1px solid var(--ms-hairline);
    border-radius: 16px;
    box-shadow: none;
}
.ms-card .ms-foldout:last-child { margin-bottom: 0; }

/* ── Coming soon (placeholder pages) ──────────────────────── */
.ms-soon {
    text-align: center;
    padding: var(--ms-2xl) var(--ms-xl);
    background: var(--ms-white);
}
.ms-soon .ms-empty-icon { width: 72px; height: 72px; padding: 19px; }
.ms-soon-pill { margin-bottom: var(--ms-md); }
.ms-soon-title { font-family: var(--ms-font-heading); font-size: 24px; font-weight: 700; letter-spacing: -0.02em; color: var(--ms-charcoal); }
.ms-soon-text { max-width: 52ch; margin: 8px auto var(--ms-lg); font-size: 15px; color: var(--ms-grey); }
.ms-soon-actions { display: flex; justify-content: center; gap: var(--ms-sm); flex-wrap: wrap; }

/* Selects in a page header size to their content instead of squeezing */
.ms-page-actions .ms-select { width: auto; min-width: 190px; padding-right: 40px; }

/* Buttons inside a form group keep their natural width */
.ms-form-group > .ms-btn { align-self: flex-start; }

/* Phones: stat cards two across, compact */
@media (max-width: 560px) {
    .ms-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
    .ms-grid-4 > .ms-stat-card { padding: 14px; }
    .ms-grid-4 .ms-stat-top { margin-bottom: 10px; align-items: flex-start; gap: 8px; }
    .ms-grid-4 .ms-stat-label { font-size: 12px; line-height: 1.3; }
    .ms-grid-4 .ms-stat-icon { width: 34px; height: 34px; border-radius: 10px; flex-shrink: 0; }
    .ms-grid-4 .ms-stat-icon svg { width: 17px; height: 17px; }
    .ms-grid-4 .ms-stat-value { font-size: 24px; }
    .ms-grid-4 .ms-stat-meta { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}

/* ── Users page ───────────────────────────────────────────── */
.ms-person { display: flex; align-items: center; gap: 12px; min-width: 0; }
.ms-person .ms-roster-avatar { width: 36px; height: 36px; border-radius: 11px; font-size: 12px; flex-shrink: 0; }
.ms-person-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.35; }
.ms-row-muted td { opacity: 0.6; }
.ms-temp-password {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--ms-sm);
    margin: var(--ms-md) 0 6px;
    padding: 10px 10px 10px 16px;
    border: 1.5px dashed var(--ms-green);
    border-radius: 12px;
    background: var(--ms-green-pale);
}
.ms-temp-password code { font-family: var(--ms-font-mono); font-size: 17px; font-weight: 500; color: var(--ms-charcoal); letter-spacing: 0.3px; }
.ms-child-list { max-height: 340px; overflow-y: auto; padding-right: 4px; }
.ms-log-filters { flex-wrap: wrap; margin-bottom: var(--ms-md); }
.ms-log-filters .ms-search-wrap { flex: 1 1 260px; }
.ms-log-filters .ms-select { width: auto; min-width: 160px; }
.ms-pagination { display: flex; align-items: center; justify-content: space-between; gap: var(--ms-md); flex-wrap: wrap; margin-top: var(--ms-md); }

/* ── Question type dots (students and teachers) ───────────── */
.ms-wonder-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; background: var(--ms-blue); }
.ms-wonder-item .ms-wonder-dot { margin-top: 7px; }
.ms-wonder-dot.found_out { background: var(--ms-green); }
.ms-wonder-dot.want_to_try { background: var(--ms-amber); }
.ms-inline-icon { width: 14px; height: 14px; vertical-align: -2px; }

/* Count inside a tab */
.ms-tab-count {
    min-width: 22px;
    padding: 0 7px;
    border-radius: 20px;
    background: var(--ms-hover);
    font-size: 12px;
    font-weight: 600;
    line-height: 20px;
    text-align: center;
    color: var(--ms-grey);
}
.ms-tab.active .ms-tab-count { background: var(--ms-white); color: var(--ms-green); }

/* ── Quizzes: shared number badge ─────────────────────────── */
.ms-result-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    margin-right: 10px;
    border-radius: 8px;
    background: var(--ms-green-pale);
    color: var(--ms-green);
    font-size: 13px;
    font-weight: 700;
    flex-shrink: 0;
}

/* ── Shared list rows and week badge (all portals) ───────── */
/* Unit list */
.ms-unit-list { display: flex; flex-direction: column; gap: 2px; }
.ms-unit-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px;
    border-radius: 12px;
    color: var(--ms-charcoal);
    transition: background 0.15s ease;
}
a.ms-unit-row:hover { background: var(--ms-hover); color: var(--ms-charcoal); }
.ms-unit-row-text { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.3; }
.ms-unit-row-title { font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ms-unit-row.is-static .ms-unit-row-title { color: var(--ms-grey); font-weight: 500; }
.ms-unit-row-theme { font-size: 12px; color: var(--ms-grey); }
.ms-unit-row-arrow { width: 16px; height: 16px; color: var(--ms-grey); flex-shrink: 0; }

.ms-seq-week {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 30px;
    padding: 0 10px;
    border-radius: 10px;
    background: var(--ms-green-pale);
    color: var(--ms-green);
    font-size: 12px;
    font-weight: 700;
    white-space: nowrap;
}

/* Initials tile (rosters, people tables) — all portals */
.ms-roster-avatar {
    width: 40px;
    height: 40px;
    border-radius: 12px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-family: var(--ms-font-heading);
    font-size: 13px;
    font-weight: 700;
    color: var(--ms-green);
    background: var(--ms-green-pale);
}
.ms-auth-help.ms-auth-help-top { margin: -10px 0 var(--ms-md); text-align: left; }

/* ── Students ─────────────────────────────────────────────── */
.ms-row-link { cursor: pointer; }
a.ms-person { color: var(--ms-charcoal); }
a.ms-person:hover .ms-text-bold { color: var(--ms-green); }
.ms-avatar-student { background: var(--ms-blue); }
.ms-guardian-list { display: flex; flex-direction: column; gap: 10px; }
.ms-guardian {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px;
    border: 1px solid var(--ms-hairline);
    border-radius: 16px;
    background: var(--ms-white);
}
.ms-guardian .ms-roster-avatar { width: 40px; height: 40px; flex-shrink: 0; }
.ms-guardian-body { flex: 1; min-width: 0; }
.ms-guardian-name { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-weight: 600; color: var(--ms-charcoal); }
.ms-guardian-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 4px; font-size: 13px; color: var(--ms-grey); }
.ms-form-group-checks { justify-content: flex-end; gap: 8px; }
.ms-guardian-mode { margin-bottom: var(--ms-md); }
.ms-import-steps { list-style: decimal; padding-left: 20px; display: flex; flex-direction: column; gap: 10px; margin-bottom: var(--ms-md); font-size: 14px; color: var(--ms-charcoal); }
.ms-import-steps code { font-family: var(--ms-font-mono); font-size: 12px; background: var(--ms-surface); padding: 1px 6px; border-radius: 6px; }
.ms-file { height: auto; padding: 10px 14px; }
.ms-import-preview { max-height: 360px; overflow-y: auto; }
.ms-import-preview .ms-table td, .ms-import-preview .ms-table th { padding: 8px 10px; font-size: 13px; }
.swal-mysafari.swal-form.swal2-popup:has(.ms-import-preview) { max-width: 760px; }

/* ── Students: grade cards ────────────────────────────────── */
.ms-student-search { display: flex; align-items: center; gap: var(--ms-sm); flex-wrap: wrap; padding: 14px 16px; }
.ms-student-search .ms-search-wrap { flex: 1 1 280px; }
.ms-grade-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--ms-lg); }
.ms-grade-card {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 20px var(--ms-lg);
    background: var(--ms-glass-strong);
    border: 1px solid var(--ms-glass-border);
    border-radius: var(--ms-radius-2xl);
    box-shadow: var(--ms-shadow-soft);
    color: var(--ms-charcoal);
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
    animation: ms-rise 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
.ms-grade-card:hover { transform: translateY(-3px); box-shadow: var(--ms-shadow-lift); border-color: color-mix(in srgb, var(--ms-green) 30%, transparent); color: var(--ms-charcoal); }
.ms-grade-card:focus-visible { outline: 2px solid var(--ms-green); outline-offset: 3px; }
.ms-grade-card.is-empty { opacity: 0.75; }
.ms-grade-card.is-warning { border: 1.5px dashed var(--ms-amber); background: var(--ms-white); }
.ms-grade-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--ms-md); }
.ms-grade-name { font-family: var(--ms-font-heading); font-size: 20px; font-weight: 700; letter-spacing: -0.01em; }
.ms-grade-label { font-size: 13px; color: var(--ms-grey); min-height: 18px; }
.ms-grade-count {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    font-family: var(--ms-font-heading);
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
    color: var(--ms-green);
}
.ms-grade-card.is-empty .ms-grade-count { color: var(--ms-grey); }
.ms-grade-card.is-warning .ms-grade-count { color: var(--ms-amber); }
.ms-grade-count span { font-family: var(--ms-font); font-size: 11px; font-weight: 600; color: var(--ms-grey); margin-top: 4px; }
.ms-grade-classes { display: flex; flex-wrap: wrap; gap: 6px; min-height: 26px; }
.ms-grade-foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 12px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--ms-hairline);
    font-size: 13px;
}
.ms-grade-flag { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; }
.ms-grade-flag svg { width: 15px; height: 15px; }
.ms-grade-flag.green { color: var(--ms-green); }
.ms-grade-flag.coral { color: var(--ms-coral); }
.ms-grade-flag.amber { color: var(--ms-amber-deep); }
.ms-grade-arrow { width: 18px; height: 18px; margin-left: auto; color: var(--ms-grey); transition: transform 0.15s ease; }
.ms-grade-card:hover .ms-grade-arrow { transform: translateX(3px); color: var(--ms-green); }
.ms-back-link { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 6px; font-size: 13px; font-weight: 600; }
.ms-back-link svg { width: 15px; height: 15px; }
@media (prefers-reduced-motion: reduce) {
    .ms-grade-card { animation: none; }
    .ms-grade-card:hover { transform: none; }
}

/* ── Resource library ─────────────────────────────────────── */
.ms-resource-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--ms-md); }
.ms-resource {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 16px;
    border: 1px solid var(--ms-hairline);
    border-radius: 16px;
    background: var(--ms-white);
    transition: box-shadow 0.15s ease, border-color 0.15s ease;
}
.ms-resource:hover { box-shadow: var(--ms-shadow-soft); border-color: color-mix(in srgb, var(--ms-green) 25%, transparent); }
.ms-resource.is-unavailable { opacity: 0.6; }
.ms-resource-head { display: flex; align-items: flex-start; gap: 12px; }
.ms-resource-head .ms-stat-icon { width: 38px; height: 38px; border-radius: 11px; flex-shrink: 0; }
.ms-resource-head .ms-stat-icon svg { width: 18px; height: 18px; }
.ms-resource-title { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.35; }
.ms-resource-desc { font-size: 13px; color: var(--ms-grey); line-height: 1.5; }
.ms-resource-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.ms-resource-tags .ms-pill { font-size: 11px; padding: 2px 8px; }
.ms-resource-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin-top: auto; font-size: 12px; color: var(--ms-grey); }
.ms-input-sm { height: 34px; width: 90px; padding: 0 10px; border-radius: 10px; font-size: 13px; }
.ms-dialog-delete { margin-right: auto; color: var(--ms-coral); }
.ms-dialog-delete:hover { background: var(--ms-coral-pale); color: var(--ms-coral-deep); }

/* Small select (tables, inline controls) — all portals */
.ms-select-sm { height: 34px; width: auto; min-width: 110px; font-size: 13px; padding: 0 32px 0 10px; border-radius: 10px; }

/* ── Dashboard layout: main column + side column (shared by all portals) ── */
.ms-dash-grid {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(300px, 1fr);
    gap: var(--ms-lg);
    align-items: start;
}
.ms-dash-main, .ms-dash-side { display: flex; flex-direction: column; gap: var(--ms-lg); min-width: 0; }
@media (max-width: 1100px) {
    .ms-dash-grid { grid-template-columns: 1fr; }
}

/* ── Integration records ──────────────────────────────────── */
.ms-integration-link { position: relative; padding-left: 14px; font-size: 14px; line-height: 1.5; color: var(--ms-charcoal); }
.ms-integration-link::before { content: ''; position: absolute; left: 0; top: 3px; bottom: 3px; width: 3px; border-radius: 3px; background: var(--ms-blue); }
.ms-subject-bars { display: flex; flex-direction: column; gap: 14px; }
.ms-subject-bar { display: flex; flex-direction: column; gap: 6px; }
.ms-subject-bar .ms-progress-track { flex: none; width: 100%; }
.ms-label-badge { margin-left: 8px; vertical-align: 1px; }

/* To-do list (teacher and student dashboards) */
.ms-todo-list { display: flex; flex-direction: column; gap: 4px; }
.ms-todo {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px;
    border-radius: 12px;
    color: var(--ms-charcoal);
    transition: background 0.15s ease;
}
a.ms-todo:hover { background: var(--ms-hover); color: var(--ms-charcoal); }
.ms-todo-icon { width: 38px; height: 38px; border-radius: 11px; flex-shrink: 0; }
.ms-todo-icon svg { width: 18px; height: 18px; }
.ms-todo-text { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.35; }
.ms-todo-title { font-size: 14px; font-weight: 600; }
.ms-todo-meta { font-size: 12px; color: var(--ms-grey); }

/* Wrapping chip row (portfolio tags, prompt starters) */
.ms-chip-row { display: flex; flex-wrap: wrap; gap: 8px; }
.ms-starter { cursor: pointer; border: none; font-family: var(--ms-font); transition: background 0.15s ease, color 0.15s ease; }
.ms-starter:hover { background: var(--ms-green-pale); color: var(--ms-green); }

/* Reflections: a student's answer, quoted */
.ms-reflect-answer { padding: 12px 14px; border-radius: 14px; background: var(--ms-surface); font-size: 15px; line-height: 1.55; color: var(--ms-charcoal); text-align: left; }

/* Learning goals panel (teacher and parent portfolio views) */
.ms-goal-panel { display: flex; flex-direction: column; gap: 10px; }
.ms-goal-panel-item { display: flex; align-items: flex-start; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--ms-hairline); }
.ms-goal-panel-item:last-child { border-bottom: 0; }
.ms-goal-panel-item .ms-stat-icon { flex-shrink: 0; }
.ms-goal-panel-item .ms-q-body { flex: 1; min-width: 0; }
.ms-goal-panel-item .ms-q-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; font-size: 12px; color: var(--ms-grey); }
.ms-goal-panel-item .ms-q-text { margin-top: 6px; font-size: 15px; line-height: 1.45; color: var(--ms-charcoal); }
@media (max-width: 560px) { .ms-goal-panel-item { flex-wrap: wrap; } }

/* ── Page preloader (includes/preloader.php) ─────────────────
   Hidden by default. It fades in after a short delay while the page is loading
   (html.ms-loading) or after an internal navigation starts (html.ms-navigating),
   so pages that load quickly never flash it. */
.ms-preloader {
    position: fixed;
    inset: 0;
    z-index: 10000;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(180deg, var(--ms-sky-top) 0%, var(--ms-sky-bottom) 100%);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}
html.ms-loading .ms-preloader    { visibility: visible; pointer-events: auto; animation: ms-preloader-in 0.3s ease-out 0.25s both; }
html.ms-navigating .ms-preloader { visibility: visible; pointer-events: auto; animation: ms-preloader-in 0.3s ease-out 0.15s both; }
html .ms-preloader.is-leaving    { pointer-events: none; animation: ms-preloader-out 0.3s ease-out forwards; }
@keyframes ms-preloader-in  { from { opacity: 0; } to { opacity: 1; } }
@keyframes ms-preloader-out { to { opacity: 0; } }

.ms-preloader-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
    animation: ms-preloader-rise 0.6s ease-out both;
}
html.ms-loading .ms-preloader-inner    { animation-delay: 0.25s; }
html.ms-navigating .ms-preloader-inner { animation-delay: 0.15s; }
@keyframes ms-preloader-rise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

.ms-preloader-mark { width: 96px; height: 80px; overflow: visible; }
.ms-preloader-sun  { fill: var(--ms-gold); animation: ms-preloader-sun 2.4s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.ms-preloader-glow { fill: var(--ms-gold); opacity: 0; animation: ms-preloader-glow 2.4s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.ms-preloader-page .back  { fill: var(--ms-green); }
.ms-preloader-page .front { fill: var(--ms-green-light); }
.ms-preloader-page { transform-box: view-box; animation: ms-preloader-page 2.4s ease-in-out infinite; }
.ms-preloader-page.left  { transform-origin: 60px 90px; }
.ms-preloader-page.right { transform-origin: 60px 90px; animation-delay: 0.12s; }
@keyframes ms-preloader-sun  { 0%, 100% { transform: translateY(4px); } 50% { transform: translateY(-3px); } }
@keyframes ms-preloader-glow { 0%, 100% { opacity: 0; transform: translateY(4px) scale(0.7); } 50% { opacity: 0.22; transform: translateY(-3px) scale(1.15); } }
@keyframes ms-preloader-page { 0%, 100% { transform: scaleX(0.9); } 50% { transform: scaleX(1); } }

.ms-preloader-word { font-size: 22px; }
.ms-preloader-bar {
    position: relative;
    width: 132px;
    height: 4px;
    border-radius: 20px;
    background: var(--ms-hairline);
    overflow: hidden;
}
.ms-preloader-bar span {
    position: absolute;
    inset: 0 auto 0 0;
    width: 40%;
    border-radius: 20px;
    background: var(--ms-green);
    animation: ms-preloader-bar 1.3s ease-in-out infinite;
}
@keyframes ms-preloader-bar { from { transform: translateX(-100%); } to { transform: translateX(250%); } }

@media (prefers-reduced-motion: reduce) {
    .ms-preloader-inner, .ms-preloader-sun, .ms-preloader-glow, .ms-preloader-page { animation: none; }
    .ms-preloader-bar span { animation: none; width: 100%; opacity: 0.5; }
}
@media print { .ms-preloader { display: none !important; } }

/* ── School logo (SuperAdmin > System Configuration) ─────── */
.ms-logo-setting { display: flex; align-items: center; gap: var(--ms-lg); flex-wrap: wrap; }
.ms-logo-preview {
    width: 220px;
    height: 132px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--ms-md);
    border: 1px solid var(--ms-hairline);
    border-radius: 16px;
    background: var(--ms-white);
}
.ms-logo-preview img { max-width: 100%; max-height: 100%; object-fit: contain; }
.ms-logo-preview.is-default { border-style: dashed; background: var(--ms-surface); }
.ms-logo-preview.is-default img { max-height: 56px; opacity: 0.55; }
.ms-logo-actions { flex: 1; min-width: 240px; }
.ms-logo-actions .ms-field-hint { max-width: 60ch; }
.ms-logo-actions input[type="file"]:focus-visible + .ms-btn { outline: 2px solid var(--ms-green); outline-offset: 2px; }
.ms-logo-actions .ms-btn.is-busy { opacity: 0.6; pointer-events: none; }
@media (max-width: 560px) { .ms-logo-preview { width: 100%; } }
