/* Desktop UI foundation. This file is intentionally loaded after feature styles. */
/* Global design tokens are owned by core.css; this file owns shell layout rules. */

/* SVG masks are embedded from the bundled ISC-licensed icon files.
   This avoids asynchronous per-icon image requests when switching pages. */
.ui-icon {
    display: inline-block;
    width: 19px;
    height: 19px;
    flex: 0 0 19px;
    background-color: currentColor;
    -webkit-mask: var(--ui-icon-src) center/contain no-repeat;
    mask: var(--ui-icon-src) center/contain no-repeat;
    vertical-align: middle;
}
.ui-icon--dashboard{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%227%22%20height%3D%229%22%20rx%3D%221%22%2F%3E%3Crect%20x%3D%2214%22%20y%3D%223%22%20width%3D%227%22%20height%3D%225%22%20rx%3D%221%22%2F%3E%3Crect%20x%3D%2214%22%20y%3D%2212%22%20width%3D%227%22%20height%3D%229%22%20rx%3D%221%22%2F%3E%3Crect%20x%3D%223%22%20y%3D%2216%22%20width%3D%227%22%20height%3D%225%22%20rx%3D%221%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--calendar{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%225%22%20width%3D%2218%22%20height%3D%2216%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M16%203v4M8%203v4M3%2010h18%22%2F%3E%3Cpath%20d%3D%22M8%2014h.01M12%2014h.01M16%2014h.01M8%2018h.01M12%2018h.01M16%2018h.01%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--users{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M16%2021v-2a4%204%200%200%200-4-4H6a4%204%200%200%200-4%204v2%22%2F%3E%3Ccircle%20cx%3D%229%22%20cy%3D%227%22%20r%3D%224%22%2F%3E%3Cpath%20d%3D%22M22%2021v-2a4%204%200%200%200-3-3.87M16%203.13a4%204%200%200%201%200%207.75%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--instructor{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%228%22%20r%3D%224%22%2F%3E%3Cpath%20d%3D%22M5%2021v-2a7%207%200%200%201%2014%200v2H5z%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--car{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M5%2017h14l1-6-2-5H6l-2%205%201%206Z%22%2F%3E%3Cpath%20d%3D%22M5%2017v2a1%201%200%200%200%202%200v-2M17%2017v2a1%201%200%200%200%202%200v-2M4%2011h16M7%2014h.01M17%2014h.01%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--chart{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%203v18h18M8%2017v-5M13%2017V7M18%2017v-9%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--settings{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M12.22%202h-.44a2%202%200%200%200-2%201.72l-.11.81a2%202%200%200%201-.91%201.39l-.25.15a2%202%200%200%201-1.63.19l-.77-.32a2%202%200%200%200-2.41.88l-.22.38a2%202%200%200%200%20.41%202.53l.66.5a2%202%200%200%201%20.73%201.45v.29a2%202%200%200%201-.73%201.45l-.66.5a2%202%200%200%200-.41%202.53l.22.38a2%202%200%200%200%202.41.88l.77-.32a2%202%200%200%201%201.63.19l.25.15a2%202%200%200%201%20.91%201.39l.11.81a2%202%200%200%200%202%201.72h.44a2%202%200%200%200%202-1.72l.11-.81a2%202%200%200%201%20.91-1.39l.25-.15a2%202%200%200%201%201.63-.19l.77.32a2%202%200%200%200%202.41-.88l.22-.38a2%202%200%200%200-.41-2.53l-.66-.5a2%202%200%200%201-.73-1.45v-.29a2%202%200%200%201%20.73-1.45l.66-.5a2%202%200%200%200%20.41-2.53l-.22-.38a2%202%200%200%200-2.41-.88l-.77.32a2%202%200%200%201-1.63-.19l-.25-.15a2%202%200%200%201-.91-1.39l-.11-.81A2%202%200%200%200%2012.22%202Z%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%223%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--shield{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M12%2022s8-4%208-10V5l-8-3-8%203v7c0%206%208%2010%208%2010Z%22%2F%3E%3Cpath%20d%3D%22m9%2012%202%202%204-4%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--log-out{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M10%2017l5-5-5-5M15%2012H3%22%2F%3E%3Cpath%20d%3D%22M12%203h6a3%203%200%200%201%203%203v12a3%203%200%200%201-3%203h-6%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--sparkles{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22m12%203%201.8%205.2L19%2010l-5.2%201.8L12%2017l-1.8-5.2L5%2010l5.2-1.8L12%203ZM19%2017l.8%201.9L22%2020l-2.2%201.1L19%2023l-.8-1.9L16%2020l2.2-1.1L19%2017ZM4%202l.7%201.3L6%204l-1.3.7L4%206l-.7-1.3L2%204l1.3-.7L4%202Z%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--x{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M18%206%206%2018M6%206l12%2012%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--send{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22m22%202-7%2020-4-9-9-4%2020-7Z%22%2F%3E%3Cpath%20d%3D%22M22%202%2011%2013%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--plus{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M12%205v14M5%2012h14%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--help{--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cpath%20d%3D%22M9.5%209a2.5%202.5%200%201%201%205%200c0%202-2.5%202.5-2.5%204.5M12%2017h.01%22%2F%3E%3C%2Fsvg%3E");}

.skip-navigation {position:fixed;left:12px;top:-90px;padding:12px 16px;background:#fff;color:#17283f;z-index:20000;border-radius:10px;box-shadow:var(--shadow-md);}
.skip-navigation:focus {top:12px;}
.app-shell {min-height:100vh;}
.app-shell--authenticated {padding-left:238px;}
.app-sidebar--authenticated {
    position:fixed;z-index:100;inset:0 auto 0 0;width:238px;
    min-height:100dvh;max-height:100dvh;overflow-y:auto;
    display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;
    gap:22px;padding:25px 12px 18px;
    background:linear-gradient(160deg,#192b46 0%,#152339 100%);
    color:#f7faff;border:0;box-shadow:none;
}
.app-brand {display:flex;align-items:center;gap:12px;min-width:0;padding:2px 10px 16px;}
.app-brand-symbol {display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;
    border-radius:11px;color:#fff;background:linear-gradient(150deg,#6483ff,#3753cd);
    font-weight:850;font-size:21px;box-shadow:0 7px 15px rgba(22,49,116,.28);}
.app-brand-label {color:#fff;font-size:16px;line-height:1.08;font-weight:760;letter-spacing:-.045em;word-break:normal;}
.app-brand-label span {display:block;color:#c4d0e6;font-size:13px;letter-spacing:-.01em;}
.app-sidebar .app-primary-nav {display:flex;flex:0 0 auto;flex-direction:column;align-items:stretch;gap:5px;width:100%;}
.app-sidebar .app-nav-item {width:100%;display:flex;justify-content:flex-start;align-items:center;
    gap:12px;min-height:45px;padding:10px 14px;border-radius:10px;border:1px solid transparent;
    background:transparent;color:#c7d2e6;text-align:left;text-decoration:none;font-size:13px;
    font-weight:570;box-shadow:none;line-height:1.25;transition:background .14s ease,color .14s ease;}
.app-sidebar .app-nav-item:hover {background:rgba(255,255,255,.09);color:#fff;border-color:transparent;}
.app-sidebar .app-nav-item.active,
.app-sidebar .app-nav-item[aria-current="page"] {background:#315390;color:#fff;border-color:rgba(164,189,244,.1);font-weight:720;}
.app-sidebar .app-nav-item .ui-icon {width:18px;height:18px;flex-basis:18px;opacity:.92;}
.app-sidebar .app-sidebar-footer {margin-top:auto;padding:14px 4px 0;border-top:1px solid rgba(215,227,255,.13);}
.app-account-identity {display:flex;align-items:center;gap:10px;padding:4px 7px 14px;min-width:0;}
.app-account-avatar {display:grid;place-items:center;width:36px;height:36px;flex:0 0 36px;background:#dce7ff;color:#244776;border-radius:50%;font-weight:800;}
.app-account-text {display:flex;flex-direction:column;gap:2px;min-width:0;}
.app-account-text strong,.app-account-text small {display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.app-account-text strong {font-size:12px;color:#fff;}
.app-account-text small {font-size:11px;color:#a9bedc;}
.app-sidebar .nav-logout-form {width:100%;display:block;max-width:none;}
.app-sidebar .nav-logout-button {min-height:40px;color:#c7d2e6;padding:9px 14px;font-weight:550;font-size:13px;}
.app-shell--authenticated > main {margin:0;max-width:none;padding:32px clamp(18px,2.7vw,44px) 60px;width:100%;min-width:0;}
.app-shell main > h2:first-child {margin-bottom:18px;font-size:clamp(22px,2.1vw,30px);font-weight:760;}
.app-shell main section {border-color:var(--color-border);box-shadow:var(--shadow-sm);}
.app-shell .dashboard-card,.app-shell .settings-link-card {box-shadow:none;}
.app-shell .flash-messages {max-width:none;}
button {font-weight:650;}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,
[role="button"]:focus-visible {outline:3px solid #4163eb;outline-offset:3px;}
@media (max-width:1150px) {
    .app-shell--authenticated {padding-left:0;}
    .app-sidebar--authenticated {position:relative;inset:auto;width:100%;height:auto;max-height:none;min-height:0;
        padding:11px 16px;gap:10px;border-radius:0;}
    .app-brand {padding:0 4px 0;}
    .app-brand-label span {display:inline;margin-left:3px;color:#b6c6e4;}
    .app-sidebar .app-primary-nav {flex-direction:row;flex-wrap:nowrap;gap:4px;overflow-x:auto;scrollbar-width:thin;}
    .app-sidebar .app-nav-item {width:auto;min-width:max-content;padding:9px 11px;min-height:38px;}
    .app-sidebar .app-sidebar-footer {display:flex;align-items:center;justify-content:flex-end;
        width:auto;margin-top:0;padding:0;border:0;}
    .app-account-identity {display:none;}
    .app-sidebar .nav-logout-form {width:auto;}
    .app-sidebar .nav-logout-button {width:auto;min-height:36px;}
    .app-shell--authenticated > main {padding:23px 20px 48px;}
}
@media (max-width:650px) {
    .app-shell--authenticated > main {padding:18px 12px 36px;}
}
@media (prefers-reduced-motion: reduce) {
    .app-sidebar .app-nav-item {transition:none;}
}
/* Prevent the app shell from reducing the available FullCalendar scroll width. */
.app-shell main {min-width:0;}

/* Undo legacy header branding on the new authenticated app shell. */
.app-sidebar--authenticated .app-brand-label::before { content: none; display: none; }
.app-sidebar--authenticated .app-brand-label {
    display: block;
    flex: 1 1 auto;
    min-width: 0;
    max-width: 150px;
    white-space: normal;
    font-size: 15px;
    line-height: 1.14;
    letter-spacing: -.03em;
}
.app-sidebar--authenticated .app-brand-label span {
    display: block;
    margin: 0;
    white-space: normal;
    color: #c5d2e8;
    font-size: 13px;
}


/* Compact navigation: icon rail is a first-class desktop layout mode. */
.ui-icon--panel-left-close {--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%2218%22%20height%3D%2218%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M9%203v18%22%2F%3E%3Cpath%20d%3D%22m16%209-3%203%203%203%22%2F%3E%3C%2Fsvg%3E");}
.ui-icon--panel-left-open {--ui-icon-src: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Crect%20x%3D%223%22%20y%3D%223%22%20width%3D%2218%22%20height%3D%2218%22%20rx%3D%222%22%2F%3E%3Cpath%20d%3D%22M9%203v18%22%2F%3E%3Cpath%20d%3D%22m14%209%203%203-3%203%22%2F%3E%3C%2Fsvg%3E");}
.app-sidebar-toggle {
    display: flex; align-items: center; gap: 10px;
    width: calc(100% - 16px); margin: -12px 8px 0;
    min-height: 38px; padding: 7px 12px;
    background: transparent; color: #c7d2e6;
    border: 1px solid rgba(215, 227, 255, .16); border-radius: 9px;
    text-align: left; font-size: 12px; font-weight: 600;
    box-shadow: none;
}
.app-sidebar-toggle:hover { background: rgba(255,255,255,.09); color: #fff; }
.app-sidebar-toggle .ui-icon { width: 18px; height: 18px; flex: 0 0 18px; }
.app-sidebar-toggle-label { white-space: nowrap; }
@media (min-width: 1151px) {
    .app-shell--authenticated { transition: padding-left .18s ease; }
    .app-sidebar--authenticated { transition: width .18s ease; }
    /* Do not animate the persisted compact layout while the page initializes. */
    html.app-sidebar-state-initializing .app-shell--authenticated,
    html.app-sidebar-state-initializing .app-sidebar--authenticated { transition: none; }
    .app-shell--authenticated.app-shell--sidebar-collapsed { padding-left: 76px; }
    /* The root class is set synchronously in <head>, avoiding sidebar flash. */
    html.app-shell--sidebar-collapsed .app-shell--authenticated { padding-left: 76px; }
    .app-shell--sidebar-collapsed .app-sidebar--authenticated {
        width: 76px; padding-inline: 9px; gap: 17px; align-items: center;
    }
    .app-shell--sidebar-collapsed .app-brand {
        width: 100%; padding: 2px 0 10px; justify-content: center;
    }
    .app-shell--sidebar-collapsed .app-brand-label,
    .app-shell--sidebar-collapsed .app-sidebar-toggle-label,
    .app-shell--sidebar-collapsed .app-nav-item > span:not(.ui-icon),
    .app-shell--sidebar-collapsed .app-account-identity { display: none; }
    .app-shell--sidebar-collapsed .app-sidebar-toggle {
        justify-content: center; margin: -6px 0 0; width: 48px; padding: 8px;
    }
    .app-shell--sidebar-collapsed .app-primary-nav { align-items: center; }
    .app-shell--sidebar-collapsed .app-nav-item {
        justify-content: center; gap: 0; min-width: 0;
        width: 48px; height: 46px; padding: 11px;
    }
    .app-shell--sidebar-collapsed .app-sidebar-footer { width: 100%; padding: 12px 0 0; }
    .app-shell--sidebar-collapsed .nav-logout-form { display: flex; justify-content: center; }
}
@media (max-width: 1150px) {
    .app-sidebar-toggle { display: none; }
}
@media (prefers-reduced-motion: reduce) {
    .app-shell--authenticated, .app-sidebar--authenticated { transition: none; }
}
