@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.0-dom-5bn10r2.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.1y4-pdgsjb-pw.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.3lvt2whj97whp.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.2uwcyprjm3xu3.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.0k62hbripvv8p.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.3-6t-g6q0vh0a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.2bn3s6zvc0dyp.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_38dc5a12-module__hE9Gta__className{font-family:Inter,Inter Fallback;font-style:normal}.inter_38dc5a12-module__hE9Gta__variable{--font-sans:"Inter", "Inter Fallback"}
@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(../media/9cc5c0547f229dea-s.00y8kskkn0hyx.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b0947914c9718a1e-s.1xjn85gt7t6qs.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(../media/d0b60be57f16ee32-s.1xtu7gopqv2u0.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1f9e983605289f29-s.3aak_kra40y8r.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(../media/01e4147cff8141ee-s.3huc2loe0ie8a.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(../media/9cc5c0547f229dea-s.00y8kskkn0hyx.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(../media/b0947914c9718a1e-s.1xjn85gt7t6qs.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(../media/d0b60be57f16ee32-s.1xtu7gopqv2u0.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(../media/1f9e983605289f29-s.3aak_kra40y8r.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(../media/01e4147cff8141ee-s.3huc2loe0ie8a.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant Garamond Fallback;src:local(Times New Roman);ascent-override:95.27%;descent-override:29.59%;line-gap-override:0.0%;size-adjust:96.98%}.cormorant_garamond_bbba18dc-module__TzFeBa__className{font-family:Cormorant Garamond,Cormorant Garamond Fallback;font-style:normal}.cormorant_garamond_bbba18dc-module__TzFeBa__variable{--font-serif:"Cormorant Garamond", "Cormorant Garamond Fallback"}
:root{--color-bg:#fdfcfe;--color-bg-alt:#f4f0f9;--color-surface:#fff;--color-primary:#8c56b0;--color-primary-dark:#713f92;--color-secondary:#2f4a3d;--color-secondary-light:#4fa89a;--color-text:#2b2b2e;--color-text-muted:#706b78;--color-border:#e6e0ef;--color-success:#3d8c6d;--color-success-bg:#e4f3ec;--color-warning:#b8863b;--color-warning-bg:#f7ecd9;--color-danger:#b8503f;--color-danger-bg:#f8e6e1;--color-info-bg:#f1edf7;--radius:10px;--radius-lg:16px;--shadow-sm:0 1px 2px #2e2a260f, 0 1px 3px #2e2a2614;--shadow-md:0 4px 12px #2e2a2614;--font-heading:var(--font-serif,"Cormorant Garamond"), Georgia, serif;--font-body:var(--font-sans,"Inter"), -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-body);margin:0;padding:0;font-size:15px;line-height:1.5}h1,h2,h3,h4{font-family:var(--font-heading);color:var(--color-text);letter-spacing:.01em;margin:0 0 .4em;font-weight:600}h1{font-size:2.1rem}h2{font-size:1.5rem}h3{font-size:1.15rem}p{color:var(--color-text-muted);margin:0 0 .75em}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button,.btn{font-family:var(--font-body);border-radius:var(--radius);cursor:pointer;background:var(--color-surface);color:var(--color-text);border:1px solid #0000;padding:.55em 1.1em;font-size:.9rem;transition:all .15s}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover{background:var(--color-primary-dark)}.btn-secondary{background:var(--color-secondary);color:#fff}.btn-secondary:hover{background:#3a4a3a}.btn-outline{border-color:var(--color-border);background:0 0}.btn-outline:hover{border-color:var(--color-primary);color:var(--color-primary)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover{background:#9c3f30}.btn-success{background:var(--color-success);color:#fff}.btn-success:hover{background:#16a34a}.btn-sm{padding:.35em .75em;font-size:.8rem}button:disabled{opacity:.45;cursor:not-allowed}input,select,textarea{font-family:var(--font-body);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-text);width:100%;padding:.55em .75em;font-size:.9rem}input:focus,select:focus,textarea:focus{border-color:var(--color-primary);outline:none;box-shadow:0 0 0 3px #c1673f26}label{color:var(--color-text-muted);margin-bottom:.3em;font-size:.82rem;font-weight:500;display:block}.field{margin-bottom:1em}.app-shell{min-height:100vh;display:flex}.sidebar{background:var(--color-surface);border-right:1px solid var(--color-border);flex-direction:column;flex-shrink:0;width:230px;height:100vh;padding:1.4rem 1rem;display:flex;position:sticky;top:0;overflow-y:auto}.sidebar .brand{margin-bottom:.2rem}.sidebar .brand-logo{width:auto;height:32px;display:block}.sidebar .brand small{font-family:var(--font-body);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted);margin-top:.3rem;font-size:.7rem;font-weight:500;display:block}.sidebar nav{flex-direction:column;flex:1;gap:1rem;margin-top:1.8rem;display:flex}.nav-group{flex-direction:column;gap:.2rem;display:flex}.nav-group-title{letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:.2rem;padding:0 .75rem;font-size:.7rem;font-weight:700}.sidebar nav a{color:var(--color-text);border-radius:var(--radius);align-items:center;gap:.6rem;padding:.6rem .75rem;font-size:.88rem;font-weight:500;text-decoration:none;display:flex}.sidebar nav a:hover{background:var(--color-bg-alt)}.sidebar nav a.active{background:var(--color-secondary);color:#fff}.sidebar-header{display:contents}.mobile-nav-toggle{display:none}.sidebar .switch-role{border-top:1px solid var(--color-border);margin-top:auto;padding-top:1rem}.role-pill{background:var(--color-bg-alt);color:var(--color-secondary);border-radius:999px;align-items:center;gap:.4rem;margin-bottom:.6rem;padding:.3rem .7rem;font-size:.78rem;font-weight:600;display:inline-flex}.role-pill .dot{background:var(--color-secondary);border-radius:50%;width:8px;height:8px}.main{flex:1;max-width:1400px;padding:2rem 2.4rem}.topbar{justify-content:space-between;align-items:center;margin-bottom:1.6rem;display:flex}.topbar .date{color:var(--color-text-muted);font-size:.85rem}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:1.3rem 1.4rem}.lesson-card.is-past{opacity:.55}.lesson-card.is-past .badge{background:var(--color-bg-alt);color:var(--color-text-muted)}.lesson-card.is-cancelled{border-color:var(--color-danger);background:var(--color-danger-bg)}.lesson-card.is-cancelled h3,.slot-row.is-cancelled .title{text-decoration:line-through;-webkit-text-decoration-color:var(--color-danger);text-decoration-color:var(--color-danger)}.slot-row.is-cancelled{opacity:.7;background:var(--color-danger-bg)}.course-details.is-past{opacity:.55}.course-details.is-past .badge{background:var(--color-bg-alt);color:var(--color-text-muted)}.course-details.is-cancelled{border-color:var(--color-danger);background:var(--color-danger-bg)}.course-details.is-cancelled .col-name .name{text-decoration:line-through;-webkit-text-decoration-color:var(--color-danger);text-decoration-color:var(--color-danger)}.course-summary .col-people{min-width:0;color:var(--color-text-muted);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.8rem;overflow:hidden}.grid{gap:1.1rem;display:grid}.grid-2{grid-template-columns:1fr 1fr}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}.grid-span-2{grid-column:span 2}.grid-span-3{grid-column:span 3}.grid-span-4{grid-column:span 4}@media (max-width:1000px) and (min-width:721px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}}.kpi{flex-direction:column;gap:.3rem;display:flex}.kpi .value{font-family:var(--font-heading);color:var(--color-secondary);font-size:2.1rem;font-weight:700}.kpi .label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.8rem}.kpi .sub{color:var(--color-text-muted);font-size:.78rem}.quick-link{color:inherit;text-decoration:none;transition:box-shadow .15s,border-color .15s;display:block}.quick-link:hover{box-shadow:var(--shadow-md);border-color:var(--color-secondary)}.quick-link-title{margin-bottom:.3rem;font-weight:600}.today-lessons{flex-direction:column;gap:.6rem;margin:0;padding:0;list-style:none;display:flex}.today-lessons li a{color:inherit;text-decoration:none}.today-lessons li a:hover{color:var(--color-primary)}.section-title{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.section-title h2{margin:0}.badge{border-radius:999px;padding:.2em .65em;font-size:.72rem;font-weight:600;display:inline-block}.badge-success{background:var(--color-success-bg);color:var(--color-success)}.badge-warning{background:var(--color-warning-bg);color:var(--color-warning)}.badge-danger{background:var(--color-danger-bg);color:var(--color-danger)}.badge-neutral{background:var(--color-bg-alt);color:var(--color-text-muted)}.table-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.table-scroll table{min-width:100%}table{border-collapse:collapse;width:100%;font-size:.86rem}thead th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);padding:.6rem .7rem;font-size:.72rem;font-weight:600}tbody td{border-bottom:1px solid var(--color-border);vertical-align:middle;padding:.65rem .7rem}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:var(--color-bg-alt)}.table-compact tbody td{padding:.4rem .7rem}.select-sm,.input-sm{width:auto;padding:.3em .5em;font-size:.78rem}.select-sm{max-width:140px}.input-sm{max-width:118px}.day-section{margin-bottom:1.6rem}.day-section-title{text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);margin:0 0 .5rem;padding-bottom:.3rem;font-size:1rem}.course-table{flex-direction:column;gap:.5rem;display:flex}.course-row-container{align-items:flex-start;gap:.5rem;scroll-margin-top:1rem;display:flex}.course-details{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);flex:1;min-width:0;overflow:hidden}.course-details[open]{border-color:var(--color-primary)}.course-summary{cursor:pointer;align-items:center;gap:.7rem;padding:.6rem .9rem;list-style:none;display:flex}.course-summary::-webkit-details-marker{display:none}.course-summary::marker{content:""}.course-summary .col-time{flex-shrink:0;width:52px;font-weight:600}.course-summary .col-name{flex:1;min-width:0}.course-summary .col-name .name{font-weight:600}.course-summary .col-name .teacher{color:var(--color-text-muted);font-size:.78rem}.course-summary .col-group{width:130px;color:var(--color-text-muted);text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;font-size:.8rem;overflow:hidden}.course-summary .col-badges{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;gap:.4rem;min-width:190px;max-width:340px;display:flex}.course-summary .chevron{color:var(--color-text-muted);flex-shrink:0;transition:transform .15s}.course-details[open] .chevron{transform:rotate(90deg)}.course-edit-panel{border-top:1px solid var(--color-border);padding:.9rem}.course-delete-form{flex-shrink:0}.course-chip-list{flex-wrap:wrap;gap:.4rem;margin-bottom:.6rem;display:flex}.course-chip{white-space:nowrap;border:1px solid var(--color-primary);background:var(--color-primary);color:#fff;cursor:pointer;border-radius:999px;align-items:center;gap:.4rem;padding:.35em .7em;font-size:.8rem;font-weight:400;display:inline-flex}.course-chip span{opacity:.85;font-size:.9em}.course-search-results{border:1px solid var(--color-border);border-radius:var(--radius);max-height:220px;margin-top:.4rem;padding:.3rem;overflow:hidden auto}.course-search-item{color:var(--color-text);border-radius:var(--radius);cursor:pointer;align-items:center;gap:.6rem;padding:.4em .5em;font-size:.86rem;font-weight:400;display:flex}.course-search-item:hover{background:var(--color-bg-alt)}.course-search-item input[type=checkbox]{flex-shrink:0;width:auto;padding:0}@media (max-width:720px){.course-summary .col-group,.course-summary .col-people{display:none}.course-summary{flex-wrap:wrap}.course-summary .col-name{min-width:55%}}.day-columns{grid-template-columns:repeat(7,1fr);gap:.8rem;display:grid}.day-col{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-height:120px;padding:.8rem}.day-col.today{border-color:var(--color-primary);box-shadow:0 0 0 2px #c1673f1f}.day-col h4{text-transform:capitalize;color:var(--color-secondary);margin-bottom:.6rem;font-size:.82rem}.slot-card{background:var(--color-bg-alt);border-radius:var(--radius);margin-bottom:.5rem;padding:.55rem .65rem;font-size:.78rem}.slot-card .name{font-weight:600}.slot-card .meta{color:var(--color-text-muted);font-size:.72rem}.slot-card .capacity{align-items:center;gap:.4rem;margin-top:.3rem;display:flex}.capacity-bar{background:var(--color-border);border-radius:3px;flex:1;height:5px;overflow:hidden}.capacity-bar span{background:var(--color-secondary-light);height:100%;display:block}.capacity-bar.full span{background:var(--color-danger)}.login-wrap{background:linear-gradient(160deg, var(--color-bg) 0%, var(--color-bg-alt) 100%);justify-content:center;align-items:center;min-height:100vh;padding:2rem;display:flex}.login-box{text-align:center;width:100%;max-width:880px}.login-logo{width:auto;height:96px;margin:0 auto;display:block}.login-box .tagline{color:var(--color-text-muted);margin-bottom:2.4rem;font-size:1rem}.role-cards{text-align:left;grid-template-columns:repeat(3,1fr);gap:1.2rem;display:grid}@media (max-width:800px){.role-cards{grid-template-columns:1fr}}.role-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);cursor:pointer;box-shadow:var(--shadow-sm);padding:1.6rem;transition:all .15s}.role-card:hover{box-shadow:var(--shadow-md);border-color:var(--color-primary);transform:translateY(-3px)}.role-card .icon{margin-bottom:.6rem;font-size:1.8rem}.role-card h3{margin-bottom:.4rem}.role-card p{margin-bottom:0;font-size:.82rem}.empty{text-align:center;color:var(--color-text-muted);padding:2.4rem 1rem}.muted{color:var(--color-text-muted)}.text-sm{font-size:.8rem}.flex{align-items:center;display:flex}.flex-between{justify-content:space-between;align-items:center;display:flex}.gap-sm{gap:.5rem}.gap-md{gap:1rem}.mt-sm{margin-top:.5rem}.mt-lg{margin-top:1.5rem}.mb-md{margin-bottom:1rem}.toast{background:var(--color-secondary);color:#fff;border-radius:var(--radius);box-shadow:var(--shadow-md);z-index:999;opacity:0;pointer-events:none;padding:.8rem 1.2rem;font-size:.85rem;transition:all .25s;position:fixed;bottom:1.5rem;right:1.5rem;transform:translateY(10px)}.toast.show{opacity:1;transform:translateY(0)}.progress-track{background:var(--color-border);border-radius:4px;height:8px;overflow:hidden}.progress-track span{background:var(--color-primary);height:100%;display:block}.modal-backdrop{z-index:900;background:#2e2a2666;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--color-surface);border-radius:var(--radius-lg);width:420px;max-width:90vw;box-shadow:var(--shadow-md);padding:1.6rem}.note-box{background:var(--color-info-bg);border-left:3px solid var(--color-secondary-light);border-radius:var(--radius);color:var(--color-text-muted);margin-bottom:1rem;padding:.7rem 1rem;font-size:.8rem}.tabs{border-bottom:1px solid var(--color-border);-webkit-overflow-scrolling:touch;gap:.4rem;margin-bottom:1.2rem;display:flex;overflow-x:auto}.tabs button,.tabs a{color:var(--color-text-muted);white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;padding:.6rem .9rem;font-weight:500}.tabs button.active,.tabs a.active{color:var(--color-secondary);border-bottom-color:var(--color-primary)}.date-picker-popup{z-index:20;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);min-width:230px;padding:.6rem;position:absolute;top:calc(100% + .3rem);left:0;box-shadow:0 4px 16px #0000001f}.credit-history-popup{text-align:left;z-index:1;width:max-content;max-width:400px;position:absolute;top:100%;right:0}code{background:var(--color-bg-alt);border-radius:4px;padding:.15em .4em;font-size:.85em}@media (max-width:720px){html,body{font-size:16px}h1{font-size:1.6rem}h2{font-size:1.25rem}.app-shell{flex-direction:column;min-height:auto}.sidebar{z-index:50;border-right:none;border-bottom:1px solid var(--color-border);flex-direction:column;align-items:stretch;gap:.5rem;width:100%;padding:.7rem .9rem;position:sticky;top:0}.sidebar .brand{white-space:nowrap;align-items:center;gap:.5rem;display:flex}.sidebar .brand-logo{height:26px}.sidebar .brand small{margin-top:0;font-size:.65rem}.sidebar-header{justify-content:space-between;align-items:center;width:100%;display:flex;position:relative}.mobile-nav-toggle{cursor:pointer;min-width:44px;min-height:44px;color:var(--color-secondary);background:0 0;border:none;justify-content:center;align-items:center;padding:.3rem .5rem;font-size:1.3rem;line-height:1;display:inline-flex}.sidebar nav{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);z-index:60;flex-direction:column;margin-top:0;padding:.5rem;display:none;position:absolute;top:calc(100% + .4rem);left:0;right:0}.sidebar nav.open{display:flex}.sidebar nav a{white-space:normal;padding:.7rem .75rem;font-size:.9rem}.sidebar .switch-role{border-top:none;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:0;padding-top:0;display:flex}.sidebar .switch-role .role-pill{margin-bottom:0;margin-right:auto;font-size:.72rem}.sidebar .switch-role>p{display:none}.sidebar .switch-role .flex{flex-wrap:nowrap;flex-shrink:0;margin-bottom:0!important}.main{max-width:100%;padding:1rem 1rem 3rem}.topbar{flex-direction:column;align-items:flex-start;gap:.3rem}.topbar .date{font-size:.75rem}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.grid-span-2,.grid-span-3,.grid-span-4{grid-column:span 1}.day-columns{-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory;gap:.7rem;margin:0 -.2rem;padding:.2rem;display:flex;overflow-x:auto}.day-col{scroll-snap-align:start;min-width:78%}table{font-size:.78rem}thead th,tbody td{padding:.5rem .4rem}.modal{border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;max-width:100%;max-height:88vh;position:fixed;bottom:0;left:0;overflow-y:auto}.modal-backdrop{align-items:flex-end}.role-cards{grid-template-columns:1fr}.login-logo{height:76px}.toast{text-align:center;bottom:1rem;left:1rem;right:1rem}.flex{flex-wrap:wrap}.date-picker-popup{width:min(280px,100vw - 2rem);max-width:calc(100vw - 2rem);position:fixed;inset:auto auto 1rem 50%;transform:translate(-50%)}.credit-history-popup{width:min(320px,100vw - 2rem);max-width:calc(100vw - 2rem);max-height:60vh;position:fixed;inset:auto auto 1rem 50%;overflow-y:auto;transform:translate(-50%)}}@media (max-width:420px){.student-wrap{padding:1.1rem .8rem 2.5rem}.slot-row{flex-direction:column;align-items:stretch}.slot-row button{width:100%}.kpi .value{font-size:1.7rem}}@media (max-width:720px),(pointer:coarse){button,.btn,.sidebar nav a,select,input{min-height:44px}}.student-wrap{max-width:720px;margin:0 auto;padding:1.6rem 1.2rem 3rem}.student-header{text-align:center;margin-bottom:1.6rem}.student-logo{width:auto;height:72px;margin:0 auto;display:block}.room-tag{background:var(--color-bg-alt);color:var(--color-primary);border-radius:999px;margin-top:.4rem;padding:.25rem .8rem;font-size:.8rem;font-weight:600;display:inline-block}.slot-list{flex-direction:column;gap:.7rem;display:flex}.slot-row{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.8rem;padding:.9rem 1rem;display:flex}.slot-row .info .title{font-weight:600}.slot-row .info .meta{color:var(--color-text-muted);font-size:.8rem}.tooltip-trigger{position:relative}.tooltip-box{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);color:var(--color-text);white-space:normal;width:max-content;max-width:280px;box-shadow:var(--shadow-md);z-index:100;pointer-events:none;padding:.5rem .75rem;font-size:.78rem;font-weight:400;display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.tooltip-trigger:hover .tooltip-box{display:block}
