.ds,.ds[data-theme=light]{--navy:#003652;--blue:#0089cf;--magenta:#ec1458;--student:#0d05a8;--staff:#d92eb1;--amber:#ffb81c;--brand:var(--navy);--accent:var(--magenta);--on-accent:var(--on-magenta);--blue-tint:#7fc4ec;--surface:#fff;--surface-sunken:#f2f6f9;--ink:var(--navy);--ink-muted:#4a5f6d;--border:#d3dfe7;--border-strong:#6b8494;--focus-ring:var(--blue);--on-blue:#fff;--on-magenta:#fff;--on-student:#fff;--shadow-sm:0 1px 2px #0036521f;--shadow-md:0 4px 12px #00365229}.ds[data-theme=dark]{--brand:var(--navy);--accent:var(--magenta);--on-accent:var(--on-magenta);--surface:var(--navy);--surface-sunken:#002a40;--ink:#fff;--ink-muted:#c9dce8;--border:#1f5575;--border-strong:var(--blue-tint);--focus-ring:var(--blue);--shadow-sm:0 1px 2px #0006;--shadow-md:0 4px 12px #00000080}.ds[data-theme=student]{--brand:var(--student);--accent:var(--amber);--on-accent:var(--student);--surface-sunken:#fff3d6;--ink:#0d05a8;--ink-muted:#4b4a8f;--border:#e4dfc8;--border-strong:#7c79b8;--focus-ring:var(--student)}.ds{--space-1:4px;--space-2:8px;--space-3:16px;--space-4:24px;--space-5:32px;--space-6:48px;--radius-sm:4px;--radius-md:8px;--radius-lg:16px;--font-sans:Inter, system-ui, "Segoe UI", Arial, sans-serif;--font-heading:Poppins, "Century Gothic", CenturyGothic, system-ui, sans-serif;--text-display:700 48px/52px var(--font-heading);--text-h1:700 36px/42px var(--font-heading);--text-h2:700 28px/34px var(--font-heading);--text-h3:600 22px/28px var(--font-heading);--text-body-large:400 20px/30px var(--font-sans);--text-body:400 16px/24px var(--font-sans);--text-small:400 14px/20px var(--font-sans);--text-label:600 13px/18px var(--font-sans)}.ds .display{font-family:var(--font-heading);letter-spacing:0;font-size:48px;font-weight:700;line-height:52px}.ds .h1{font-family:var(--font-heading);letter-spacing:0;font-size:36px;font-weight:700;line-height:42px}.ds .h2{font-family:var(--font-heading);letter-spacing:0;font-size:28px;font-weight:700;line-height:34px}.ds .h3{font-family:var(--font-heading);letter-spacing:0;font-size:22px;font-weight:600;line-height:28px}.ds .body-large{font-family:var(--font-sans);letter-spacing:0;font-size:20px;font-weight:400;line-height:30px}.ds .body{font-family:var(--font-sans);letter-spacing:0;font-size:16px;font-weight:400;line-height:24px}.ds .small{font-family:var(--font-sans);letter-spacing:0;font-size:14px;font-weight:400;line-height:20px}.ds .label{font-family:var(--font-sans);letter-spacing:0;font-size:13px;font-weight:600;line-height:18px}@font-face{font-family:Poppins;src:url(/fonts/Poppins-SemiBold.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Poppins;src:url(/fonts/Poppins-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-Variable.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}.al-btn{font-family:var(--font-sans);border-radius:var(--radius-md);cursor:pointer;border:2px solid #0000;min-height:44px;padding:10px 24px;font-size:16px;font-weight:600;line-height:24px}.al-btn:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.al-btn:disabled{opacity:.45;cursor:not-allowed}.al-btn--lg{min-height:52px;padding:12px 32px;font-size:20px;font-weight:700;line-height:28px}.al-btn--primary{background:var(--ink);color:var(--surface)}.al-btn--secondary{background:var(--surface);color:var(--ink);border-color:var(--border-strong)}.al-btn--accent{background:var(--accent);color:var(--on-accent);font-size:20px;font-weight:700;line-height:28px}.al-btn--accent:focus-visible{outline-color:var(--ink)}.al-card{font-family:var(--font-sans);background:var(--surface);color:var(--ink);border:1px solid var(--border-strong);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-sm)}.al-card__title{margin:0 0 var(--space-2);font-family:var(--font-heading,var(--font-sans));font-size:22px;font-weight:600;line-height:28px}.al-card__body{font-size:16px;line-height:24px}.al-field{font-family:var(--font-sans);color:var(--ink);max-width:360px;display:block}.al-field__label{margin-bottom:var(--space-1);font-size:13px;font-weight:600;line-height:18px;display:block}.al-field__input{box-sizing:border-box;width:100%;color:var(--ink);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:10px 12px;font-family:inherit;font-size:16px;line-height:24px}.al-field__input:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.al-field__input:disabled{opacity:.45;cursor:not-allowed}.al-field__help{margin:var(--space-1) 0 0;color:var(--ink-muted);font-size:14px;line-height:20px}.al-field--error .al-field__input{border-width:2px;border-color:var(--ink)}.al-field--error .al-field__help{color:var(--ink);font-weight:600}.al-table-wrap{overflow-x:auto}.al-table{font-family:var(--font-sans);color:var(--ink);border-collapse:collapse;width:100%;font-size:16px;line-height:24px}.al-table--lg{font-size:20px;line-height:30px}.al-table__caption{font-family:var(--font-heading,var(--font-sans));text-align:left;padding-bottom:var(--space-2);font-size:22px;font-weight:600;line-height:28px}.al-table th{text-align:left;background:var(--surface-sunken);border-bottom:2px solid var(--border-strong);padding:var(--space-2) var(--space-3);font-weight:700}.al-table td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border)}.al-badge{align-items:center;gap:var(--space-1);font-family:var(--font-sans);color:var(--ink);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:3px 8px;font-size:13px;font-weight:600;line-height:18px;display:inline-flex}.al-badge__glyph{font-weight:700}.al-badge--approved{background:var(--ink);color:var(--surface);border-color:var(--ink)}.al-badge--pending{background:var(--surface-sunken)}.al-badge--overdue{border-width:2px;border-color:var(--accent)}[data-theme=dark] .al-badge--overdue,[data-theme=student] .al-badge--overdue{border-color:var(--ink)}.al-badge--info{background:var(--surface-sunken);border-style:dashed}.al-banner{justify-content:space-between;align-items:center;gap:var(--space-3);background:var(--accent);color:var(--on-accent);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);font-family:var(--font-sans);display:flex}.al-banner__text{margin:0;font-size:20px;font-weight:700;line-height:28px}.al-banner__action{border:2px solid var(--on-accent);border-radius:var(--radius-md);min-height:44px;color:var(--brand);cursor:pointer;white-space:nowrap;background:#fff;padding:8px 24px;font-family:inherit;font-size:20px;font-weight:700;line-height:28px}.al-banner__action:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.al-note{text-align:left;width:100%;max-width:480px;font-family:var(--font-sans);color:var(--ink);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);padding:var(--space-3);cursor:pointer;display:block}.al-note:hover{background:var(--surface-sunken)}.al-note:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.al-note--unread{border-width:2px;border-color:var(--ink)}.al-note__head{justify-content:space-between;gap:var(--space-3);display:flex}.al-note__title{font-size:16px;font-weight:700;line-height:24px}.al-note__time{color:var(--ink-muted);white-space:nowrap;font-size:14px;line-height:20px}.al-note__body{margin-top:var(--space-1);font-size:16px;line-height:24px;display:block}.al-nav{align-items:center;gap:var(--space-5);background:var(--brand);color:#fff;border-bottom:2px solid var(--blue);box-shadow:var(--shadow-sm);padding:var(--space-2) var(--space-4);font-family:var(--font-sans);display:flex}.al-nav__logo{align-items:center;gap:var(--space-2);min-height:44px;display:flex}.al-nav__logo img{border-radius:var(--radius-md);background:#fff;width:40px;height:40px;display:block}[data-theme=dark] .al-nav{background:var(--surface-sunken)}.al-nav__name{font-family:var(--font-heading,var(--font-sans));font-size:20px;font-weight:700;line-height:28px}.al-nav__links{gap:var(--space-1);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.al-nav__link{color:#fff;border-radius:var(--radius-sm);padding:10px 16px;font-size:16px;font-weight:600;line-height:24px;text-decoration:none;display:block}.al-nav__link:hover{background:#ffffff1f}.al-nav__link[aria-current=page]{box-shadow:inset 0 -3px 0 var(--blue-tint)}[data-theme=student] .al-nav{border-bottom-color:var(--accent)}[data-theme=student] .al-nav__link[aria-current=page]{box-shadow:inset 0 -3px 0 var(--accent)}[data-theme=student] .al-nav__link:focus-visible{outline-color:var(--accent)}[data-theme=student] .al-btn--accent:focus-visible,[data-theme=student] .al-banner__action:focus-visible{outline-color:var(--ink)}.al-nav__link:focus-visible{outline:2px solid var(--blue-tint);outline-offset:2px}.ds{font-family:var(--font-sans);color:var(--ink);font-size:16px;line-height:24px}.ds button.al-btn:focus-visible,.ds a:focus-visible,.ds select:focus-visible,.ds textarea:focus-visible,.ds input:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.al-stack{gap:var(--space-5);flex-direction:column;display:flex}.ds .al-muted{color:var(--ink-muted)}.ds .al-heading{margin:0}.ds .al-toolbar{align-items:flex-end;gap:var(--space-3);flex-wrap:wrap;display:flex}html,body,#root{height:100%}body{background:var(--surface-sunken,#f2f6f9);margin:0}.hub{flex-direction:column;min-height:100%;display:flex}.hub-bar{background:var(--navy,#003652);border-bottom:2px solid var(--blue,#0089cf);color:#fff}.hub-bar__in{align-items:center;gap:16px;max-width:1200px;margin:0 auto;padding:12px 24px;display:flex}.hub-brand{color:#fff;font-family:var(--font-heading,"Poppins", sans-serif);align-items:center;gap:10px;font-size:18px;font-weight:700;text-decoration:none;display:flex}.hub-brand img{background:#fff;border-radius:8px;width:40px;height:40px}.hub-spacer{flex:1}.hub-user{color:#fff;font-size:13px}.hub-bar .al-btn{color:#fff;background:0 0;border-color:#fff}.hub-main{box-sizing:border-box;flex:1;width:100%;max-width:1200px;margin:0 auto;padding:24px}.hub-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.hub-item{border:1px solid var(--border-strong,#6b8494);color:inherit;background:#fff;border-radius:16px;flex-direction:column;gap:8px;padding:16px 20px;text-decoration:none;display:flex;box-shadow:0 1px 2px #0036521f}.hub-item:hover{background:var(--surface-sunken,#f2f6f9)}.hub-item h3{font-family:var(--font-heading,"Poppins", sans-serif);color:var(--navy,#003652);margin:0;font-size:18px;line-height:26px}.hub-item p{color:var(--ink-muted,#4a5f6d);margin:0;font-size:14px;line-height:20px}.hub-meta{color:var(--ink-muted,#4a5f6d);flex-wrap:wrap;align-items:center;gap:12px;font-size:13px;display:flex}.hub-tag{color:var(--navy,#003652);background:#e3eff7;border-radius:999px;align-items:center;gap:6px;padding:2px 10px;font-size:13px;font-weight:600;display:inline-flex}.hub-tag--draft{color:#5c4300;background:#fff3d6}.hub-chips{flex-wrap:wrap;gap:8px;display:flex}.hub-chip{font:inherit;border:2px solid var(--border-strong,#6b8494);color:var(--navy,#003652);cursor:pointer;background:#fff;border-radius:999px;padding:6px 14px;font-size:14px;font-weight:600}.hub-chip[aria-pressed=true]{background:var(--navy,#003652);color:#fff;border-color:var(--navy,#003652)}.hub-frame{border:1px solid var(--border-strong,#6b8494);background:#fff;border-radius:16px;flex:1;width:100%;min-height:70vh}.hub-form{gap:16px;max-width:900px;display:grid}.hub-form label{margin-bottom:4px;font-size:14px;font-weight:600;display:block}.hub-form input[type=text],.hub-form select,.hub-form textarea{box-sizing:border-box;width:100%;font:inherit;border:2px solid var(--border-strong,#6b8494);color:var(--ink,#003652);background:#fff;border-radius:8px;padding:10px 12px}.hub-form textarea{min-height:320px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;line-height:20px}.hub-help{color:var(--ink-muted,#4a5f6d);margin:4px 0 0;font-size:13px}.hub-warn{border:2px solid var(--magenta,#ec1458);background:#fff;border-radius:12px;padding:12px 16px;font-size:14px}.hub-center{max-width:520px;margin:48px auto}@media (width<=640px){.hub-main{padding:16px}.hub-bar__in{padding:10px 16px}.hub-user{display:none}}
