html, body { font-family: 'Inter', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; }
h1:focus { outline: none; }
a { text-decoration: none; }

/* ---------- Brand ---------- */
.brand { color: inherit; }
.brand-mark { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 10px; background: #1E3A8A; color: #F59E0B; font-weight: 800; font-size: 1.2rem; }
.brand-text { font-weight: 800; letter-spacing: -0.01em; font-size: 1.05rem; color: #0F172A; }
.brand-text span { color: #1E3A8A; font-weight: 600; }
.brand-text.light { color: #fff; }
.brand-text.light span { color: #F59E0B; }

/* ---------- Public site ---------- */
.public-shell { min-height: 100vh; display: flex; flex-direction: column; background: #fff; color: #0F172A; }
.container { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.public-header { position: sticky; top: 0; z-index: 50; backdrop-filter: blur(12px); background: rgba(255,255,255,.85); border-bottom: 1px solid #E2E8F0; }
.public-header .container { height: 68px; }
.public-nav { gap: 4px; margin-left: 24px; }
.public-nav a { padding: 8px 12px; border-radius: 8px; color: #334155; font-weight: 500; }
.public-nav a:hover, .public-nav a.active { background: #EEF2FF; color: #1E3A8A; }
.public-nav-mobile { display: flex; flex-direction: column; padding: 8px 24px 16px; }
.public-nav-mobile a { padding: 10px 0; color: #334155; border-bottom: 1px solid #E2E8F0; }
.public-main { flex: 1; }
.public-footer { background: #0F1B3D; color: rgba(255,255,255,.75); padding: 56px 0 24px; margin-top: 64px; }
.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1.4fr; gap: 32px; }
.footer-grid h6 { color: #fff; margin: 0 0 12px; font-size: .95rem; }
.footer-grid a { display: block; color: rgba(255,255,255,.75); padding: 4px 0; }
.footer-grid a:hover { color: #F59E0B; }
.footer-bottom { border-top: 1px solid rgba(255,255,255,.12); margin-top: 40px; padding-top: 20px; font-size: .85rem; }
@media (max-width: 800px) { .footer-grid { grid-template-columns: 1fr 1fr; } }

.hero { position: relative; overflow: hidden; background: radial-gradient(1200px 600px at 10% -10%, #DBEAFE 0%, transparent 60%), radial-gradient(900px 500px at 100% 0%, #FEF3C7 0%, transparent 55%), #F8FAFC; }
.hero .container { display: grid; grid-template-columns: 1.1fr .9fr; gap: 48px; align-items: center; padding-top: 88px; padding-bottom: 88px; }
.hero h1 { font-size: 3.4rem; line-height: 1.05; font-weight: 800; letter-spacing: -0.03em; margin: 0 0 20px; }
.hero h1 em { font-style: normal; color: #1E3A8A; background: linear-gradient(120deg, #1E3A8A, #2563EB); -webkit-background-clip: text; background-clip: text; color: transparent; }
.hero p.lead { font-size: 1.2rem; color: #475569; max-width: 560px; margin-bottom: 28px; }
.hero-card { background: #fff; border: 1px solid #E2E8F0; border-radius: 20px; padding: 24px; box-shadow: 0 30px 60px -30px rgba(15,23,42,.35); }
.eyebrow { display: inline-block; font-size: .78rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: #1E3A8A; background: #EEF2FF; padding: 6px 12px; border-radius: 999px; margin-bottom: 18px; }
.stats-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-top: -40px; position: relative; z-index: 2; }
.stats-strip .stat { background: #fff; border: 1px solid #E2E8F0; border-radius: 16px; padding: 20px; text-align: center; }
.stats-strip .stat b { display: block; font-size: 2rem; font-weight: 800; color: #1E3A8A; letter-spacing: -0.02em; }
.stats-strip .stat span { color: #64748B; font-size: .9rem; }
.section { padding: 72px 0; }
.section-title { font-size: 2rem; font-weight: 800; letter-spacing: -0.02em; margin: 0 0 8px; }
.section-sub { color: #64748B; max-width: 640px; margin: 0 0 36px; }
.feature-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.feature { background: #fff; border: 1px solid #E2E8F0; border-radius: 16px; padding: 24px; transition: transform .2s, box-shadow .2s; }
.feature:hover { transform: translateY(-3px); box-shadow: 0 20px 40px -24px rgba(15,23,42,.3); }
.feature .icon { width: 44px; height: 44px; border-radius: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 14px; color: #fff; }
.feature h4 { margin: 0 0 6px; font-size: 1.05rem; }
.feature p { margin: 0; color: #64748B; font-size: .92rem; }
.news-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.news-card { background: #fff; border: 1px solid #E2E8F0; border-radius: 16px; overflow: hidden; display: flex; flex-direction: column; }
.news-card .banner { height: 120px; background: linear-gradient(135deg, #1E3A8A, #2563EB); position: relative; }
.news-card .banner.alt { background: linear-gradient(135deg, #0D9488, #14B8A6); }
.news-card .banner.warm { background: linear-gradient(135deg, #B45309, #F59E0B); }
.news-card .body { padding: 18px; flex: 1; }
.news-card .meta { font-size: .8rem; color: #64748B; margin-bottom: 6px; }
.news-card h4 { margin: 0 0 8px; }
.news-card p { color: #475569; font-size: .92rem; margin: 0; }
.event-row { display: flex; gap: 16px; align-items: center; padding: 14px 0; border-bottom: 1px solid #E2E8F0; }
.event-date { min-width: 64px; text-align: center; background: #EEF2FF; border-radius: 12px; padding: 8px 4px; }
.event-date b { display: block; font-size: 1.4rem; color: #1E3A8A; line-height: 1; }
.event-date span { font-size: .75rem; text-transform: uppercase; color: #1E3A8A; letter-spacing: .08em; }
.cta-band { background: linear-gradient(120deg, #1E3A8A, #172B6B); color: #fff; border-radius: 24px; padding: 48px; display: flex; align-items: center; gap: 32px; }
.cta-band h3 { margin: 0 0 8px; font-size: 1.8rem; }
.cta-band p { margin: 0; opacity: .85; }
.prose { max-width: 760px; color: #334155; line-height: 1.7; font-size: 1.05rem; }
.prose h2 { font-size: 1.6rem; margin-top: 2rem; color: #0F172A; }
@media (max-width: 900px) {
    .hero .container { grid-template-columns: 1fr; padding-top: 56px; padding-bottom: 56px; }
    .hero h1 { font-size: 2.4rem; }
    .stats-strip, .feature-grid, .news-grid { grid-template-columns: 1fr 1fr; }
    .cta-band { flex-direction: column; text-align: center; }
}
@media (max-width: 600px) { .stats-strip, .feature-grid, .news-grid { grid-template-columns: 1fr; } }

/* ---------- Portal ---------- */
.portal-appbar { border-bottom: 1px solid var(--mud-palette-lines-default); }
.portal-search { max-width: 560px; }
.portal-search .mud-input-control { margin: 0; }
.portal-drawer .mud-drawer-content { display: flex; flex-direction: column; }
.portal-nav .mud-nav-link { margin: 2px 12px; border-radius: 8px; }
.portal-nav .mud-nav-link.active { background: rgba(245,158,11,.16) !important; color: #fff !important; }
.portal-nav .mud-nav-link.active .mud-icon-root { color: #F59E0B !important; }
.nav-section { padding: 18px 24px 6px; font-size: .7rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: rgba(255,255,255,.45); }
.portal-main { background: var(--mud-palette-background); min-height: 100vh; }
.stat-card { position: relative; }
.stat-card-link { position: absolute; inset: 0; border-radius: inherit; }
.notification-unread { background: rgba(37,99,235,.06); }
.status-chip { font-weight: 600; }
.mud-table-cell, .mud-table-head .mud-table-cell { font-size: .875rem; }
.mud-data-grid .mud-table-cell { padding: 8px 12px; }

/* Timetable grid */
.timetable { display: grid; grid-template-columns: 90px repeat(5, 1fr); gap: 6px; }
.timetable .head { font-weight: 700; text-align: center; padding: 8px 0; color: var(--mud-palette-text-secondary); font-size: .8rem; text-transform: uppercase; letter-spacing: .06em; }
.timetable .period { font-size: .78rem; color: var(--mud-palette-text-secondary); display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 6px; border-radius: 8px; background: var(--mud-palette-surface); border: 1px solid var(--mud-palette-lines-default); }
.timetable .period b { color: var(--mud-palette-text-primary); }
.timetable .cell { min-height: 64px; border-radius: 10px; padding: 8px 10px; color: #fff; display: flex; flex-direction: column; justify-content: center; font-size: .82rem; line-height: 1.25; }
.timetable .cell small { opacity: .85; }
.timetable .cell.empty { background: transparent; border: 1px dashed var(--mud-palette-lines-default); }
.timetable .cell.break { background: var(--mud-palette-lines-default); color: var(--mud-palette-text-secondary); text-align: center; font-weight: 600; min-height: 32px; }
.timetable .cell.now { outline: 3px solid #F59E0B; }
@media (max-width: 900px) { .timetable { grid-template-columns: 70px repeat(5, minmax(120px, 1fr)); overflow-x: auto; } }

/* Register */
.register-row { border-bottom: 1px solid var(--mud-palette-lines-default); padding: 8px 0; }
.register-row:last-child { border-bottom: 0; }

/* Report card print */
@media print {
    .mud-appbar, .mud-drawer, .page-header .d-flex, .no-print { display: none !important; }
    .mud-main-content { padding: 0 !important; }
    .print-page { break-after: page; }
}

/* Error UI from template */
#blazor-error-ui { color-scheme: light only; background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0,0,0,.2); box-sizing: border-box; display: none; left: 0; padding: .6rem 1.25rem .7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; }
#blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: .75rem; top: .5rem; }
.blazor-error-boundary { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MyAyNjYuNjA2IDUyLjI2NUwyNjcuMDUyIDUyLjc4MSAyNjcuNTM5IDUzLjUwNCAyODYuNTgxIDg2LjI2MyAyODcuMDU3IDg3LjE1NiAyODcuNjM5IDg4LjM0OSAyODcuOTg2IDg5LjA2OCAyODguMzUxIDg5Ljk5MiAyODguNjU1IDkxLjA2IDI4OC44NDIgOTIuMTk3IDI4OC45MTggOTMuMTk1IDI4OC45MTggOTMuMzQ0IDI4OC45MjEgOTMuNDkgMjg4LjkyMSA5My41NDMgMjg4LjkyMSA5My41NjkgMjg4LjgxMSA5NS4zNjkgMjg4LjcyMSA5NS45NyAyODguMjAzIDk3LjIxMSAyODguMDI4IDk3LjQ5MSAyODcuNjEyIDk4LjEyOCAyODcuMTM5IDk4LjczNyAyODYuNzE5IDk5LjE0IDI4NS44MzEgOTkuNzUgMjg1LjQ5NiA5OS45MDcgMjg0LjczNSAxMDAuMTUgMjgzLjA0MSAxMDAuMzYgMjgxLjIwOCAxMDAuNDA1IDI3NC4zNzYgMTAwLjQwNSAyMzkuMjIxIDEwMC40MDUgMjM3LjcwOCAxMDAuMzk3IDIzNi4xOCAxMDAuMTkgMjM1LjMwMiA5OS44NTkgMjM1LjI0NyA5OS44MzkgMjM1LjIzMSA5OS44MjkgMjM1LjE5NCA5OS43OTQgMjM0Ljk4MyA5OS43MDUgMjM0LjcxNSA5OS41NTQgMjM0LjQ5NCA5OS4zNTMgMjM0LjE5MyA5OS4wNzUgMjMzLjkyIDk4Ljc2NSAyMzMuNTcgOTguMzM3IDIzMy4wODUgOTcuNjE0IDIzMi43MTEgOTYuOTMgMjMyLjMwMiA5NS42MTUgMjMyLjIyNyA5NS4wMjUgMjMyLjE3OSA5NC40MzEgMjMyLjE2OCA5My4zNTcgMjMyLjE3NyA5My4yNDUgMjMyLjE5IDkzLjE0MyAyMzIuMTk0IDkzLjEwMiAyMzIuMjY4IDkyLjM4NCAyMzIuNDA5IDkxLjUwOCAyMzIuNjQ0IDkwLjU2NiAyMzIuOTk4IDg5LjQzNyAyMzMuMzY3IDg4LjUyNiAyMzMuODU3IDg3LjU3NCAyMzQuMjczIDg2LjgxNCAyMzQuNjA1IDg2LjI2NiAyNTMuNTQ4IDUzLjY1NCAyNTQuMTA1IDUyLjc2NCAyNTQuNTg5IDUyLjE5NyAyNTUuMzg2IDUxLjQ5MSAyNTYuNjExIDUxIDI2My41MDYgNTFaTTI2My41MDUgNTQuNzM3QzI2Mi42ODkgNTQuNzM3IDI2Mi4wNDcgNTUuMDYzIDI2MS41NTIgNTUuNjA2TDI2MS4xMTQgNTYuMTU2IDI2MC44MTkgNTYuNTIzIDIzNy44NTMgODkuNzE4IDIzNy40OTIgOTAuMjQyIDIzNy4xOSA5MC44OTUgMjM2Ljk1NiA5MS44OTYgMjM2LjkyOCA5Mi44MTMgMjM2Ljk2NSA5My4yOTggMjM3LjA5MSA5My44MTIgMjM3LjMzOCA5NC4yNzggMjM3LjU0MSA5NC41MzYgMjM3Ljc5NCA5NC42ODcgMjM4LjE0MyA5NC43OCAyMzguNTk1IDk0Ljg1MSAyMzkuMzI5IDk0Ljg2OSAyODUuMTEgOTQuODY5IDI4Ni4wMjIgOTQuNzkgMjg2Ljg4OCA5NC41ODggMjg3LjI0NyA5NC4zOTUgMjg3LjM5NyA5NC4yNzkgMjg3LjU3IDk0LjA5NiAyODcuODIzIDkzLjU2NSAyODcuOTE2IDkyLjkyOSAyODcuNzk1IDkyLjE4MSAyODcuNTQ1IDkxLjQxNSAyODcuMTU1IDkwLjYxNiAyODYuOTEgOTAuMjE5IDI2NS44MjkgNTYuMDQzIDI2NS40MTMgNTUuNTQ4IDI2NS4wNDEgNTUuMjIzIDI2NC4yNzMgNTQuNzk4IDI2My41MDUgNTQuNzM3Wk0yNjEuNTIyIDg0LjMwNkMyNjEuNTIyIDgyLjM2NSAyNjIuMjcxIDgxLjA2IDI2My41MjQgODEuMDYgMjY0Ljc3NyA4MS4wNiAyNjUuNTI2IDgyLjM2NSAyNjUuNTI2IDg0LjMwNiAyNjUuNTI2IDg2LjI0NiAyNjQuNzc3IDg3LjU1MSAyNjMuNTI0IDg3LjU1MSAyNjIuMjcxIDg3LjU1MSAyNjEuNTIyIDg2LjI0NiAyNjEuNTIyIDg0LjMwNlpNMjYyLjkxNSA2My41NDdDMjYyLjkxNSA2Mi4xOTYgMjYzLjgzOSA2MS4zMzUgMjY0LjkzMiA2MS4zMzUgMjY2LjE1NCA2MS4zMzUgMjY2Ljk4OCA2Mi4xNjIgMjY2Ljk4OCA2My42MzggMjY2Ljk4OCA2NC40OCAyNjYuNjA5IDY3LjYzIDI2NS42NTggNzkuMTY1IDI2NS4zMDYgNzkuMzMzIDI2NC42ODUgNzkuNjMgMjY0LjI1NyA3OS42MyAyNjMuOTg4IDc5LjYzIDI2My41OTMgNzkuNDEgMjYzLjM1MyA3OS4xMzggMjYzLjA4NCA3OC44MzUgMjYyLjkxNSA2My41NDdaIiBmaWxsPSIjRkZFNTAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PC9zdmc+) no-repeat 1rem/1.8rem, #b32121; padding: 1rem 1rem 1rem 3.7rem; color: white; }
.blazor-error-boundary::after { content: "An error has occurred."; }
