@import url(https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap);.header{box-shadow:0 2px 4px #00000014;padding:.75rem 1.5rem;position:relative}.header-container{margin:0 auto;max-width:1400px}.nav-links li{margin-left:1.5rem}.nav-links a{padding:.5rem 0}.nav-links a.active:after{background-color:var(--primary-color);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%}.logout-button{background:none;border:none;color:var(--text-secondary);cursor:pointer;font-family:var(--font-family-base);font-weight:500;padding:.5rem 0}.logout-button:hover{color:var(--danger-color)}.mobile-menu-button{height:24px;width:32px;z-index:10}.menu-icon{background-color:var(--text-secondary);width:100%}.sidebar{background-color:#fff;box-shadow:1px 0 5px #0000001a;height:calc(100vh - 60px);left:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:60px;transform:translateX(0);transition:transform .3s ease,width .3s ease;width:var(--sidebar-width);z-index:var(--z-index-fixed)}.sidebar.closed{width:var(--sidebar-collapsed-width)}.sidebar-inner{display:flex;flex-direction:column;height:100%}.sidebar-section{margin-bottom:2rem}.sidebar-title{margin-bottom:.75rem;padding:0 1.25rem}.sidebar-link{padding:.625rem 1.25rem;transition:background-color .2s}.sidebar-link:hover{background-color:var(--gray-100)}.sidebar-link.active{background-color:var(--primary-light);color:var(--primary-color)}.sidebar-icon{font-size:1.25rem;margin-right:.875rem;text-align:center;width:24px}.sidebar-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-footer{border-top:1px solid var(--gray-200);margin-top:auto;padding:1rem 1.25rem}.sidebar-version{color:var(--gray-500);font-size:.75rem;text-align:center}.sidebar-toggle{background-color:#fff;border:1px solid var(--gray-300);box-shadow:0 2px 4px #0000001a;height:28px;transition:left .3s ease;width:28px}.sidebar-toggle.open{left:var(--sidebar-width)}.toggle-icon{border-right:2px solid var(--gray-600);border-top:2px solid var(--gray-600);display:block;height:12px;transform:rotate(45deg);width:12px}.sidebar-toggle.open .toggle-icon{transform:rotate(-135deg)}.sidebar-overlay{background-color:#00000080;bottom:0;display:none;left:0;position:fixed;right:0;top:60px;z-index:calc(var(--z-index-fixed) - 1)}.loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:2rem;text-align:center}.spinner{display:inline-block;height:40px;position:relative;width:40px}.spinner-inner{animation:spin 1.2s cubic-bezier(.5,0,.5,1) infinite;border:4px solid var(--primary-color);border-color:var(--primary-color) #0000 #0000 #0000;border-radius:50%;box-sizing:border-box;display:block;height:32px;margin:4px;position:absolute;width:32px}.spinner-small{height:24px;width:24px}.spinner-small .spinner-inner{border-width:3px;height:18px;width:18px}.spinner-large{height:60px;width:60px}.spinner-large .spinner-inner{border-width:6px;height:48px;width:48px}.loading-message{color:var(--text-secondary);font-size:1rem;margin-top:1rem}.loading-overlay{position:fixed;z-index:var(--z-index-modal)}.loading-overlay.transparent{background-color:#ffffff80}.loading-content{text-align:center}.error-container{align-items:center;border-radius:var(--border-radius);display:flex;margin-bottom:1.5rem;padding:1rem}.error-content{flex:1 1}.error-content p{color:inherit;margin:0}.error-error{background-color:#f443361a;border-left:4px solid #d32f2f;color:#d32f2f}.error-warning{background-color:#ff98001a;border-left:4px solid #ed6c02;color:#ed6c02}.error-info{background-color:#2196f31a;border-left:4px solid #0288d1;color:#0288d1}.error-success{background-color:#4caf501a;border-left:4px solid #4caf50;color:#2e7d32}.error-dismiss{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font-size:1.25rem;justify-content:center;margin-left:1rem;opacity:.7;padding:0}.error-dismiss:hover{opacity:1}.not-found-container{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;min-height:50vh;padding:4rem 1rem;text-align:center}.not-found-code{color:var(--primary-color);font-size:8rem;font-weight:700;line-height:1;margin-bottom:1rem;opacity:.7}.not-found-title{color:var(--text-primary);font-size:2rem;margin-bottom:1rem}.not-found-message{color:var(--text-secondary);margin-bottom:2rem;max-width:500px}.concluded-courses{border-top:1px solid var(--border-color);margin-top:1rem;opacity:.85;padding-top:.75rem}.sidebar-course-count{background-color:var(--gray-300);border-radius:1rem;color:var(--text-secondary);display:inline-block;font-weight:400;margin-left:.5rem;padding:.125rem .375rem;vertical-align:middle}.modern-back-button{align-items:center;background-color:var(--primary-color);border:none;border-radius:var(--border-radius);color:#fff;cursor:pointer;display:inline-flex;font-size:1rem;font-weight:var(--font-weight-medium);margin-top:1rem;padding:.75rem 1.5rem;transition:background-color .2s}.modern-back-button:hover{background-color:var(--primary-dark);box-shadow:0 3px 6px #00000026;transform:translateY(-1px)}.modern-back-button:active{box-shadow:0 1px 2px #0000001a;transform:translateY(1px)}.back-icon{display:inline-block;vertical-align:middle}.comparison-header{align-items:flex-start;display:flex;flex-direction:column;margin-bottom:24px}.comparison-header h1{margin-bottom:8px}.comparison-header p{color:#666;margin-bottom:16px}@media (max-width:767px){.nav-links{display:none}.mobile-menu-button{display:flex}.main-nav.open .nav-links{background-color:#fff;box-shadow:0 4px 6px #0000001a;display:flex;flex-direction:column;padding:1rem;position:absolute;right:0;top:100%;width:200px;z-index:var(--z-index-dropdown)}.main-nav.open .nav-links li{margin-bottom:.75rem;margin-left:0}.sidebar{transform:translateX(-100%);width:240px}.sidebar.open{transform:translateX(0)}.sidebar-toggle{display:none}.sidebar-overlay{display:block}}.header{align-items:center;background-color:#fff;display:flex;height:60px;padding:0;position:-webkit-sticky;position:sticky;top:0;transition:box-shadow .3s ease,background-color .3s ease;z-index:var(--z-index-fixed)}.header.scrolled{box-shadow:0 4px 12px #00000014}.header-container{height:100%;justify-content:space-between;padding:0 1.5rem;width:100%}.header-container,.header-left,.logo a{align-items:center;display:flex}.logo a{color:var(--primary-color);font-size:1.25rem;font-weight:600;text-decoration:none;transition:opacity .2s}.logo a:hover{opacity:.85}.logo-icon{font-size:1.5rem;margin-right:.5rem}.current-page-indicator{align-items:center;display:flex;margin-left:1rem;max-width:300px}.separator{color:var(--gray-400);margin:0 .75rem}.current-page-title{color:var(--text-secondary);font-size:1rem;font-weight:500;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-nav{display:flex;height:100%}.nav-links{list-style:none;margin:0;padding:0}.nav-links,.nav-links li{align-items:center;display:flex;height:100%}.nav-links li{margin:0 .25rem}.nav-links a{align-items:center;border-radius:4px;color:var(--text-secondary);display:flex;font-weight:500;height:36px;padding:.5rem .75rem;text-decoration:none;transition:all .2s}.nav-links a:hover{background-color:var(--gray-100);color:var(--primary-color)}.nav-links a.active{background-color:var(--primary-light);color:var(--primary-color)}.nav-button{background-color:var(--primary-color)!important;border-radius:4px;color:#fff!important;padding:.5rem 1rem!important;transition:background-color .2s!important}.nav-button:hover{background-color:var(--primary-dark)!important;color:#fff!important}.user-menu-container{margin-left:1rem;position:relative}.user-avatar{align-items:center;background-color:var(--primary-light);border:none;border-radius:50%;color:var(--primary-color);cursor:pointer;display:flex;font-size:1rem;font-weight:600;height:36px;justify-content:center;transition:transform .2s,box-shadow .2s;width:36px}.user-avatar:hover{box-shadow:0 2px 5px #0000001a;transform:translateY(-1px)}.user-dropdown{animation:dropdown-fade-in .2s ease;background-color:#fff;border-radius:8px;box-shadow:0 4px 16px #0000001f;overflow:hidden;position:absolute;right:0;top:calc(100% + .5rem);width:240px;z-index:var(--z-index-dropdown)}@keyframes dropdown-fade-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.user-dropdown-header{padding:1rem}.user-dropdown-email{color:var(--text-primary);font-size:.9rem;font-weight:500;word-break:break-all}.user-dropdown-menu{list-style:none;margin:0;padding:.5rem 0}.user-dropdown-item{align-items:center;background:none;border:none;color:var(--text-primary);cursor:pointer;display:flex;font:inherit;padding:.75rem 1rem;text-align:left;text-decoration:none;transition:background-color .15s;width:100%}.user-dropdown-item:hover{background-color:var(--gray-100)}.dropdown-item-icon{align-items:center;display:flex;font-size:1.125rem;justify-content:center;margin-right:.75rem;width:20px}.logout-item{color:var(--danger-color)}.mobile-menu-button{align-items:center;background:none;border:none;cursor:pointer;display:none;flex-direction:column;height:40px;justify-content:space-between;margin-left:1rem;padding:.5rem;width:40px}.menu-icon{background-color:var(--text-primary);border-radius:1px;display:block;height:2px;transition:transform .3s,opacity .3s;width:22px}.mobile-menu-button.active .menu-icon:first-child{transform:translateY(8px) rotate(45deg)}.mobile-menu-button.active .menu-icon:nth-child(2){opacity:0}.mobile-menu-button.active .menu-icon:nth-child(3){transform:translateY(-8px) rotate(-45deg)}.mobile-nav-overlay{animation:fade-in .3s ease;background-color:#00000080;bottom:0;left:0;position:fixed;right:0;top:60px;z-index:var(--z-index-overlay)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@media (max-width:920px){.current-page-indicator{max-width:150px}}@media (max-width:768px){.logo-text{display:none}.current-page-indicator{max-width:200px}.mobile-menu-button{display:flex}.nav-item-desktop{display:none}.main-nav{background-color:#fff;box-shadow:0 4px 8px #0000001a;height:auto;left:0;opacity:0;padding:1rem 0;position:fixed;top:60px;transform:translateY(-100%);transition:all .3s;visibility:hidden;width:100%;z-index:var(--z-index-dropdown)}.main-nav.open{opacity:1;transform:translateY(0);visibility:visible}.nav-links{align-items:stretch;flex-direction:column;height:auto;width:100%}.nav-links li{height:auto;margin:0}.nav-links a{border-radius:0;height:auto;padding:1rem 1.5rem;width:100%}}@media (max-width:480px){.header-container{padding:0 1rem}.current-page-indicator{display:none}}.user-selector-button:disabled{cursor:not-allowed;opacity:.7}.user-selector-item:disabled{background-color:var(--gray-100);opacity:.7}@keyframes shimmer{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.user-selector-button:disabled .user-name{animation:shimmer 1.5s infinite}.guest-mode-controls{gap:1rem}.guest-mode-controls,.guest-mode-indicator{align-items:center;display:flex}.guest-mode-badge{background-color:var(--warning-color);border-radius:1rem;color:#fff;font-size:.75rem;font-weight:var(--font-weight-medium);letter-spacing:.5px;padding:.25rem .75rem;text-transform:uppercase}.guest-menu-container{position:relative}.guest-avatar{background-color:var(--warning-color);color:#fff}.guest-avatar:hover{background-color:var(--warning-dark)}.user-selector-button.guest-mode{background-color:var(--warning-light);border:2px solid var(--warning-color)}.user-selector-button.guest-mode:hover{background-color:var(--warning-color);color:#fff}.user-selector-header strong{color:var(--text-primary);font-size:.875rem}.mobile-nav-logout{background:none;border:none;color:var(--danger-color);cursor:pointer;font-size:1rem;padding:.75rem 1rem;text-align:left;width:100%}.mobile-nav-logout:hover{background-color:var(--danger-light)}@media (max-width:768px){.guest-mode-controls{gap:.5rem}.guest-mode-badge{font-size:.6875rem;padding:.1875rem .5rem}}@media (max-width:480px){.guest-mode-indicator{display:none}}.header-right{align-items:center;display:flex;gap:1rem}.user-dropdown-header{border-bottom:1px solid var(--gray-200);padding:.75rem 1rem}.user-dropdown-email{color:var(--text-secondary);font-size:.875rem;font-weight:var(--font-weight-medium)}.user-dropdown .user-dropdown-email{color:var(--warning-dark)}.user-selector-item.current-user{background-color:var(--primary-light);color:var(--primary-dark);font-weight:600}.user-selector-item.current-user:hover{background-color:var(--primary-color);color:#fff}.current-indicator{margin-left:auto}.user-selector-item{font-size:.875rem;transition:background-color .2s ease}.user-selector-item:disabled{cursor:not-allowed;opacity:.6}.user-selector-dropdown{background:#fff;border:1px solid var(--gray-200);border-radius:var(--border-radius);box-shadow:0 4px 12px #00000026;margin-top:.25rem;max-width:300px;min-width:200px;top:100%;z-index:1000}.user-selector-header{background-color:var(--gray-50);border-radius:var(--border-radius) var(--border-radius) 0 0}.user-selector-list{max-height:200px}.error-boundary-container{align-items:center;background:linear-gradient(135deg,#f5f7fa,#c3cfe2);display:flex;justify-content:center;min-height:100vh;padding:2rem}.error-boundary-content{background:#fff;border:1px solid #e1e5e9;border-radius:12px;box-shadow:0 10px 30px #0000001a;max-width:600px;padding:3rem;text-align:center}.error-icon{font-size:4rem;margin-bottom:1rem}.error-boundary-content h2{color:#2c3e50;font-size:1.5rem;margin-bottom:1rem}.error-boundary-content p{color:#5a6c7d;line-height:1.6;margin-bottom:1.5rem}.error-details{background:#f8f9fa;border:1px solid #e9ecef;border-radius:6px;margin:1.5rem 0;padding:1rem;text-align:left}.error-details summary{color:#495057;cursor:pointer;font-weight:600;margin-bottom:.5rem}.error-stack{background:#343a40;border-radius:4px;color:#f8f9fa;font-size:.875rem;margin:0;overflow-x:auto;padding:1rem;white-space:pre-wrap}.error-actions{display:flex;gap:1rem;justify-content:center;margin:2rem 0}.error-actions button{border:none;border-radius:6px;cursor:pointer;font-weight:600;padding:.75rem 1.5rem;transition:all .2s ease}.error-actions .primary-button{background:#007bff;color:#fff}.error-actions .primary-button:hover{background:#0056b3;transform:translateY(-1px)}.error-actions .secondary-button{background:#6c757d;color:#fff}.error-actions .secondary-button:hover{background:#545b62;transform:translateY(-1px)}.error-id{color:#6c757d;font-family:monospace;font-size:.875rem;margin-top:1rem}.error-recovery{align-items:center;background:#f8f9fa;border-radius:8px;display:flex;justify-content:center;margin:1rem 0;min-height:300px;padding:2rem}.error-recovery--boundary{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:0;color:#fff;margin:0;min-height:100vh}.error-recovery__content{max-width:500px;text-align:center}.error-recovery__icon{animation:bounce 2s infinite;font-size:4rem;margin-bottom:1.5rem}@keyframes bounce{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-10px)}60%{transform:translateY(-5px)}}.error-recovery__message{margin-bottom:2rem}.error-recovery__title{color:#343a40;font-size:1.5rem;font-weight:600;margin-bottom:.75rem}.error-recovery--boundary .error-recovery__title{color:#fff}.error-recovery__description{color:#6c757d;font-size:1rem;font-weight:500;margin-bottom:.5rem}.error-recovery--boundary .error-recovery__description{color:#ffffffe6}.error-recovery__suggestion{color:#868e96;font-size:.9rem;line-height:1.5}.error-recovery--boundary .error-recovery__suggestion{color:#fffc}.error-recovery__actions{align-items:center;display:flex;flex-direction:column;gap:.75rem;margin-bottom:1.5rem}.error-recovery__button{align-items:center;border:none;border-radius:6px;cursor:pointer;display:flex;font-size:.95rem;font-weight:500;gap:.5rem;justify-content:center;min-width:150px;padding:.75rem 1.5rem;position:relative;transition:all .2s ease}.error-recovery__button:disabled{cursor:not-allowed;opacity:.7}.error-recovery__button--primary{background:#007bff;color:#fff}.error-recovery__button--primary:hover:not(:disabled){background:#0056b3;transform:translateY(-1px)}.error-recovery__button--secondary{background:#6c757d;color:#fff}.error-recovery__button--secondary:hover:not(:disabled){background:#545b62;transform:translateY(-1px)}.error-recovery__button--outline{background:#0000;border:2px solid #007bff;color:#007bff}.error-recovery--boundary .error-recovery__button--outline{border-color:#fff;color:#fff}.error-recovery__button--outline:hover:not(:disabled){background:#007bff;color:#fff;transform:translateY(-1px)}.error-recovery--boundary .error-recovery__button--outline:hover:not(:disabled){background:#fff;color:#667eea}.error-recovery__button.loading{overflow:hidden}.spinner{animation:spin 1s linear infinite;border:2px solid #0000;border-top-color:currentcolor;height:16px;width:16px}.error-recovery__details{border-top:1px solid #dee2e6;margin-top:1rem;padding-top:1rem}.error-recovery--boundary .error-recovery__details{border-top-color:#fff3}.error-recovery__details-toggle{background:none;border:none;color:#6c757d;cursor:pointer;font-size:.85rem;padding:0;text-decoration:underline}.error-recovery--boundary .error-recovery__details-toggle{color:#fffc}.error-recovery__details-toggle:hover{color:#495057}.error-recovery--boundary .error-recovery__details-toggle:hover{color:#fff}.error-recovery__details-content{background:#0000001a;border-radius:4px;font-size:.85rem;margin-top:1rem;padding:1rem;text-align:left}.error-recovery__details-content h4{font-size:.9rem;margin:0 0 .75rem}.error-recovery__error-info>div{margin-bottom:.5rem}.error-recovery__stack{margin-top:.75rem}.error-recovery__stack pre{background:#0003;border-radius:3px;font-size:.75rem;margin-top:.25rem;max-height:200px;overflow-y:auto;padding:.5rem;white-space:pre-wrap;word-break:break-word}.error-recovery__support{border-top:1px solid #dee2e6;color:#6c757d;font-size:.85rem;margin-top:1.5rem;padding-top:1rem}.error-recovery--boundary .error-recovery__support{border-top-color:#fff3;color:#fffc}.error-recovery__support a{color:#007bff;text-decoration:none}.error-recovery--boundary .error-recovery__support a{color:#fff;text-decoration:underline}.error-recovery__support a:hover{text-decoration:underline}@media (max-width:768px){.error-recovery{min-height:250px;padding:1rem}.error-recovery__icon{font-size:3rem;margin-bottom:1rem}.error-recovery__title{font-size:1.25rem}.error-recovery__actions{gap:.5rem}.error-recovery__button{font-size:.9rem;min-width:120px;padding:.625rem 1.25rem}}@media (max-width:480px){.error-recovery__actions{flex-direction:column;width:100%}.error-recovery__button{max-width:200px;width:100%}}@media (prefers-color-scheme:dark){.error-recovery:not(.error-recovery--boundary){background:#2d3748}.error-recovery__title{color:#f7fafc}.error-recovery__description{color:#cbd5e1}.error-recovery__suggestion{color:#a0aec0}.error-recovery__details{border-top-color:#4a5568}.error-recovery__details-toggle{color:#a0aec0}.error-recovery__details-toggle:hover{color:#cbd5e1}.error-recovery__details-content{background:#ffffff1a}.error-recovery__support{border-top-color:#4a5568;color:#a0aec0}}@media (prefers-reduced-motion:reduce){.error-recovery__icon,.spinner{animation:none}.spinner{border-top-color:initial;transform:rotate(45deg)}.error-recovery__button{transition:none}.error-recovery__button:hover:not(:disabled){transform:none}}.error-recovery__button:focus{outline:2px solid #007bff;outline-offset:2px}.error-recovery--boundary .error-recovery__button:focus{outline-color:#fff}.error-recovery__details-toggle:focus{outline:1px solid #007bff;outline-offset:2px}.header{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;border-bottom:1px solid #fff3;transition:all .3s cubic-bezier(.4,0,.2,1)}.header.scrolled{background:#fffffffa;box-shadow:0 8px 32px #0000001f}.header-container{padding:0 2rem}.logo a{-webkit-text-fill-color:#0000;background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);-webkit-background-clip:text;background-clip:text;font-family:var(--font-family-heading);font-size:1.375rem;font-weight:var(--font-weight-bold);letter-spacing:-.025em;transition:all .3s ease}.logo a:hover{opacity:.8;transform:translateY(-1px)}.logo-icon{filter:drop-shadow(0 2px 4px rgba(33,150,243,.3));font-size:1.75rem;margin-right:.75rem}.current-page-indicator{background:var(--gray-100);border:1px solid var(--gray-200);border-radius:8px;padding:.5rem 1rem;transition:all .3s ease}.separator{color:var(--primary-color);font-weight:var(--font-weight-medium);margin:0 1rem}.current-page-title{color:var(--text-primary);font-weight:var(--font-weight-semibold)}.nav-links a{border-radius:8px;font-weight:var(--font-weight-medium);padding:.75rem 1rem;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.nav-links a:before{background:linear-gradient(90deg,var(--primary-color) 0,var(--primary-dark) 100%);border-radius:1px;bottom:-2px;content:"";height:2px;left:50%;position:absolute;transform:translateX(-50%);transition:width .3s ease;width:0}.nav-links a.active:before,.nav-links a:hover:before{width:80%}.nav-links a:hover{background:linear-gradient(135deg,var(--primary-light) 0,#2196f31a 100%);transform:translateY(-2px)}.nav-links a.active{color:#fff}.nav-links a.active,.user-avatar{background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);box-shadow:0 4px 12px #2196f34d}.user-avatar{border:2px solid #fff;transition:all .3s cubic-bezier(.4,0,.2,1)}.user-avatar:hover{box-shadow:0 8px 20px #2196f366;transform:translateY(-2px) scale(1.05)}.user-dropdown{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;border:1px solid #fff3;box-shadow:0 20px 40px #00000026}.user-dropdown-header{background:linear-gradient(135deg,var(--gray-50) 0,var(--gray-100) 100%)}.user-dropdown-item{font-weight:var(--font-weight-medium);transition:all .2s ease}.user-dropdown-item:hover{transform:translateX(4px)}.user-dropdown-item:hover,.user-selector-button{background:linear-gradient(135deg,var(--primary-light) 0,#2196f31a 100%)}.user-selector-button{border:1px solid var(--primary-color);border-radius:8px;font-weight:var(--font-weight-medium);padding:.75rem 1rem;transition:all .3s cubic-bezier(.4,0,.2,1)}.user-selector-button:hover{background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);box-shadow:0 4px 12px #2196f34d;color:#fff;transform:translateY(-2px)}.user-selector-dropdown{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;border:1px solid #fff3;box-shadow:0 20px 40px #00000026}.user-selector-item-wrapper{align-items:center;display:flex;gap:.5rem;padding:.25rem 0}.user-selector-item{background:#0000;border-radius:6px;flex:1 1;justify-content:space-between;transition:all .2s ease}.user-selector-item:hover{background:#0000000d}.user-selector-item.default-user{background:linear-gradient(135deg,#ffc1071a,#ffc1070d);border-left:3px solid #ffc107}.user-name-container{align-items:center;display:flex;gap:.5rem}.default-indicator{color:#ffc107;font-size:.875rem;font-weight:700;text-shadow:0 1px 2px #0000001a}.current-indicator{color:var(--success-color);font-weight:700}.set-default-button{align-items:center;background:linear-gradient(135deg,#ffc107,#ffb300);border:none;border-radius:50%;box-shadow:0 2px 4px #ffc1074d;cursor:pointer;display:flex;font-size:.75rem;height:28px;justify-content:center;transition:all .2s ease;width:28px}.set-default-button:hover{background:linear-gradient(135deg,#ffb300,#ff8f00);box-shadow:0 4px 8px #ffc10766;transform:scale(1.1)}.set-default-button:disabled{cursor:not-allowed;opacity:.5;transform:none}.set-default-button:active{transform:scale(.95)}.guest-mode-badge{border-radius:12px;box-shadow:0 2px 8px #ff98004d;font-weight:var(--font-weight-semibold);letter-spacing:.025em;padding:.375rem .875rem}.guest-avatar,.guest-mode-badge{background:linear-gradient(135deg,var(--warning-color) 0,var(--warning-dark) 100%)}.guest-avatar{box-shadow:0 4px 12px #ff98004d}@media (max-width:768px){.header-container{padding:0 1rem}.logo a{font-size:1.25rem}.current-page-indicator{padding:.375rem .75rem}}.sidebar{background:linear-gradient(180deg,#fff,#fafbfc);border-right:1px solid var(--gray-200);box-shadow:2px 0 15px #00000014;transition:all .3s cubic-bezier(.4,0,.2,1)}.sidebar-inner{padding:1.5rem 0}.sidebar-section{margin-bottom:1.5rem}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar.closed .sidebar-course-code,.sidebar.closed .sidebar-search,.sidebar.closed .sidebar-search-toggle,.sidebar.closed .sidebar-section-header,.sidebar.closed .sidebar-title{display:none}.sidebar.closed .sidebar-section{margin-bottom:.5rem}.sidebar.closed .sidebar-link{justify-content:center;margin:0 .25rem;padding:.75rem .5rem}.sidebar.closed .sidebar-icon{margin-right:0}.sidebar-section-header{margin-bottom:.75rem}.sidebar-section-header,.sidebar-title{align-items:center;display:flex;justify-content:space-between;padding:0 1rem}.sidebar-title{color:var(--text-secondary);font-size:.875rem;font-weight:600;letter-spacing:.05em;margin:0 0 .75rem;text-transform:uppercase}.sidebar-title-collapsible{border-radius:6px;cursor:pointer;margin:0 -1rem .75rem;padding:.5rem 1rem;transition:color .2s ease;width:calc(100% + 2rem)}.sidebar-title-collapsible:hover{background-color:var(--gray-100);color:var(--primary-color)}.sidebar-title-content{align-items:center;display:flex;gap:.5rem}.sidebar-link{align-items:center;border-radius:8px;color:var(--text-primary);display:flex;font-weight:500;gap:.75rem;margin:0 .75rem;padding:.75rem 1rem;position:relative;text-decoration:none;transition:all .2s cubic-bezier(.4,0,.2,1)}.sidebar-link:hover{background-color:var(--primary-light);box-shadow:0 2px 8px #2196f326;color:var(--primary-color);text-decoration:none;transform:translateX(4px)}.sidebar-link.active{background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);box-shadow:0 4px 12px #2196f34d;color:#fff;font-weight:600}.sidebar-link.active:before{background:var(--primary-color);border-radius:2px;content:"";height:24px;left:-1rem;position:absolute;top:50%;transform:translateY(-50%);width:4px}.sidebar-icon{align-items:center;display:flex;flex-shrink:0;height:20px;justify-content:center;margin-right:0;width:20px}.sidebar-icon svg{height:100%;transition:all .2s ease;width:100%}.sidebar-link:hover .sidebar-icon svg{transform:scale(1.1)}.sidebar-course-count{align-items:center;background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);border-radius:12px;box-shadow:0 2px 4px #2196f333;color:#fff;display:inline-flex;font-size:.75rem;font-weight:600;height:20px;justify-content:center;min-width:24px;padding:.25rem .5rem}.sidebar-course-code{background-color:var(--gray-100);border-radius:4px;color:var(--text-muted);font-size:.6875rem;font-weight:500;letter-spacing:.5px;margin-left:auto;padding:.125rem .375rem;text-transform:uppercase}.sidebar-link.active .sidebar-course-code{background-color:#fff3;color:#ffffffe6}.sidebar-toggle{align-items:center;background:linear-gradient(135deg,var(--primary-color) 0,var(--primary-dark) 100%);border:none;border-radius:50%;box-shadow:0 4px 12px #2196f34d;cursor:pointer;display:flex;height:36px;justify-content:center;left:var(--sidebar-collapsed-width);position:fixed;top:100px;transition:all .3s cubic-bezier(.4,0,.2,1);width:36px;z-index:var(--z-index-fixed)}.sidebar-toggle:hover{box-shadow:0 6px 16px #2196f366;transform:scale(1.1)}.sidebar-toggle.open{left:calc(var(--sidebar-width) - 18px)}.toggle-icon{border-right:2px solid #fff;border-top:2px solid #fff;transition:transform .3s ease}.sidebar-search{margin:0 1rem 1rem;position:relative}.sidebar-search-input{background-color:var(--gray-50);border:1px solid var(--gray-300);border-radius:8px;font-size:.875rem;padding:.5rem .75rem;transition:all .2s ease;width:100%}.sidebar-search-input:focus{background-color:#fff;border-color:var(--primary-color);box-shadow:0 0 0 3px #2196f31a;outline:none}.sidebar-search-clear{align-items:center;background:none;border:none;border-radius:50%;color:var(--text-muted);cursor:pointer;display:flex;font-size:1rem;height:20px;justify-content:center;position:absolute;right:.5rem;top:50%;transform:translateY(-50%);transition:all .2s ease;width:20px}.sidebar-search-clear:hover{background-color:var(--gray-200);color:var(--text-primary)}.sidebar-search-toggle{align-items:center;background:none;border:none;border-radius:6px;color:var(--text-muted);cursor:pointer;display:flex;justify-content:center;padding:.375rem;transition:all .2s ease}.sidebar-search-toggle:hover{background-color:var(--gray-100);color:var(--primary-color)}.sidebar-no-results{color:var(--text-muted);font-style:italic;padding:.75rem 1rem;text-align:center}.concluded-courses{opacity:.75}.concluded-courses .sidebar-link{color:var(--text-secondary)}.concluded-courses .sidebar-link:hover{background-color:var(--gray-100);color:var(--text-primary);transform:translateX(2px)}.concluded-courses .sidebar-link.active{background:linear-gradient(135deg,var(--gray-500) 0,var(--gray-600) 100%);color:#fff}.sidebar-text{flex:1 1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar.closed .sidebar-text{display:none}@media (max-width:768px){.dashboard-container,body.sidebar-closed .dashboard-container{margin-left:0;max-width:100%}.sidebar{transform:translateX(-100%);width:280px}.sidebar.open{transform:translateX(0)}.sidebar-toggle{left:1rem;top:80px}.sidebar-search,.sidebar-search-toggle{display:none}}.performance-monitor{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;border:1px solid #e0e0e0;border-radius:8px;box-shadow:0 4px 12px #00000026;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;max-width:300px;position:fixed;right:20px;top:20px;transition:all .3s ease;z-index:1000}.performance-monitor.collapsed{min-width:200px;width:auto}.performance-monitor.expanded{width:280px}.performance-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #e0e0e0;border-radius:8px 8px 0 0;cursor:pointer;display:flex;justify-content:space-between;padding:8px 12px}.performance-header:hover{background:#e9ecef}.performance-title{color:#333;font-size:13px;font-weight:600}.performance-summary{align-items:center;display:flex;gap:8px}.cache-indicator,.performance-indicator{background:#fffc;border-radius:12px;font-size:11px;font-weight:500;padding:2px 6px}.expand-icon{color:#666;font-size:10px;transition:transform .2s ease}.expand-icon.expanded{transform:rotate(180deg)}.performance-details{max-height:400px;overflow-y:auto;padding:12px}.performance-section{margin-bottom:16px}.performance-section:last-child{margin-bottom:0}.performance-section h4{border-bottom:1px solid #e0e0e0;color:#333;font-size:12px;font-weight:600;margin:0 0 8px;padding-bottom:4px}.metric-row{align-items:center;display:flex;font-size:11px;justify-content:space-between;padding:3px 0}.metric-row span:first-child{color:#666}.metric-row span:last-child{font-weight:500}.enhanced-count{color:#4caf50;font-weight:600}.legacy-count{color:#ff9800;font-weight:600}.circuit-status{border-radius:10px;font-size:10px;font-weight:600;padding:2px 6px;text-transform:uppercase}.circuit-status.closed{background:#4caf501a;color:#4caf50}.circuit-status.half-open{background:#ff98001a;color:#ff9800}.circuit-status.open,.circuit-warning{background:#f443361a;color:#f44336}.circuit-warning{border-radius:4px;font-size:10px;font-weight:500;margin-top:4px;padding:4px 8px}.performance-actions{border-top:1px solid #e0e0e0;margin-top:12px;padding-top:8px}.clear-cache-btn{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:4px;color:#666;cursor:pointer;font-size:11px;font-weight:500;padding:6px 12px;transition:all .2s ease;width:100%}.clear-cache-btn:hover{background:#e9ecef;color:#333}.clear-cache-btn:active{transform:translateY(1px)}@media (prefers-color-scheme:dark){.performance-monitor{background:#1e1e1ef2;border-color:#444;color:#e0e0e0}.performance-header{background:#333;border-color:#444}.performance-header:hover{background:#404040}.performance-title{color:#e0e0e0}.cache-indicator,.performance-indicator{background:#323232cc}.performance-section h4{border-color:#444;color:#e0e0e0}.metric-row span:first-child{color:#aaa}.clear-cache-btn{background:#333;border-color:#444;color:#e0e0e0}.clear-cache-btn:hover{background:#404040}}@media (max-width:768px){.performance-monitor{max-width:250px;right:10px;top:10px}.performance-monitor.expanded{width:240px}}.api-test-panel{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;border:1px solid #e0e0e0;border-radius:8px;bottom:20px;box-shadow:0 4px 12px #00000026;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;max-height:500px;overflow:hidden;position:fixed;right:20px;width:350px;z-index:999}.api-test-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #e0e0e0;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;padding:12px 16px}.api-test-header h3{color:#333;font-size:14px;font-weight:600;margin:0}.clear-results-btn{background:#fff;border:1px solid #ddd;border-radius:4px;color:#666;cursor:pointer;font-size:11px;font-weight:500;padding:4px 8px;transition:all .2s ease}.clear-results-btn:hover{background:#f5f5f5;color:#333}.test-controls{border-bottom:1px solid #e0e0e0;display:flex;flex-direction:column;gap:8px;padding:12px 16px}.test-btn{background:#fff;border:1px solid #ddd;border-radius:4px;color:#333;cursor:pointer;font-size:12px;font-weight:500;padding:8px 12px;text-align:left;transition:all .2s ease}.test-btn:hover:not(:disabled){background:#f8f9fa;border-color:#007bff}.test-btn:disabled{cursor:not-allowed;opacity:.6}.metrics-summary{border-bottom:1px solid #e0e0e0;padding:12px 16px}.metrics-summary h4{color:#333;font-size:12px;font-weight:600;margin:0 0 8px}.metric-grid{grid-gap:8px;display:grid;gap:8px;grid-template-columns:1fr 1fr}.metric-item{align-items:center;display:flex;font-size:11px;justify-content:space-between}.metric-item span:first-child{color:#666}.metric-item span:last-child{color:#333;font-weight:600}.test-results{flex:1 1;overflow-y:auto;padding:12px 16px}.test-results h4{color:#333;font-size:12px;font-weight:600;margin:0 0 12px}.no-results{color:#666;font-size:11px;font-style:italic;margin:20px 0;text-align:center}.results-list{display:flex;flex-direction:column;gap:8px}.result-item{border:1px solid;border-radius:4px;font-size:11px;padding:8px}.result-item.success{background:#4caf500d;border-color:#4caf5033}.result-item.error{background:#f443360d;border-color:#f4433633}.result-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.result-name{color:#333;font-weight:600}.result-duration{color:#666;font-weight:500}.result-details{align-items:center;display:flex;justify-content:space-between}.result-status{font-weight:500}.result-item.success .result-status{color:#4caf50}.result-item.error .result-status{color:#f44336}.result-time{color:#999;font-size:10px}@media (prefers-color-scheme:dark){.api-test-panel{background:#1e1e1ef2;border-color:#444;color:#e0e0e0}.api-test-header{background:#333;border-color:#444}.api-test-header h3{color:#e0e0e0}.clear-results-btn,.test-btn{background:#333;border-color:#444;color:#e0e0e0}.clear-results-btn:hover,.test-btn:hover:not(:disabled){background:#404040}.metrics-summary h4,.test-results h4{color:#e0e0e0}.metric-item span:first-child{color:#aaa}.metric-item span:last-child,.result-name{color:#e0e0e0}.result-duration{color:#aaa}}@media (max-width:768px){.api-test-panel{bottom:10px;max-height:400px;right:10px;width:300px}.metric-grid{grid-template-columns:1fr}}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center;min-height:100vh}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.app-container{background-color:var(--bg-body);min-height:100vh}.content-container{min-height:0}.page-content{overflow-y:auto;width:calc(100% - var(--sidebar-collapsed-width))}body.sidebar-open .page-content{margin-left:var(--sidebar-width);width:calc(100% - var(--sidebar-width))}.page-content{box-shadow:-2px 0 5px #00000008}@media (max-width:767px){.page-content{padding:var(--spacer-3)}.page-content,body.sidebar-open .page-content{margin-left:0;width:100%}}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}*{box-sizing:border-box;margin:0;padding:0}body,html{overflow-x:hidden;width:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}code{border-radius:3px;font-size:.9em;padding:.1em .3em}code,pre{background-color:#f5f5f5;font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}pre{border-radius:5px;margin:1em 0;overflow-x:auto;padding:1em}:focus:not(:focus-visible){outline:none}:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}a{transition:color .2s}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#a1a1a1}*{scrollbar-color:#c1c1c1 #f1f1f1;scrollbar-width:thin}:root{--primary-color:#1976d2;--primary-dark:#1565c0;--primary-light:#e3f2fd;--primary-color-light-hover:#e8f4fd;--secondary-color:#ff9800;--success-color:#4caf50;--warning-color:#ff9800;--warning-light:#fff3e0;--warning-light-hover:#ffe0b2;--warning-dark:#f57c00;--danger-color:#f44336;--danger-light:#ffebee;--info-color:#2196f3;--white:#fff;--gray-100:#f8f9fa;--gray-200:#e9ecef;--gray-300:#dee2e6;--gray-400:#ced4da;--gray-500:#adb5bd;--gray-600:#6c757d;--gray-700:#495057;--gray-800:#343a40;--gray-900:#212529;--black:#000;--grade-a:#2ecc71;--grade-b:#3498db;--grade-c:#f1c40f;--grade-d:#e67e22;--grade-f:#e74c3c;--text-primary:var(--gray-900);--text-secondary:var(--gray-700);--text-muted:var(--gray-600);--border-color:var(--gray-300);--bg-light:var(--gray-100);--bg-body:#f8fafc;--bg-gradient-primary:linear-gradient(135deg,#667eea,#764ba2);--bg-gradient-secondary:linear-gradient(135deg,#f093fb,#f5576c);--font-family-base:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;--font-family-heading:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;--font-size-xs:0.75rem;--font-size-sm:0.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.25;--line-height-base:1.5;--line-height-relaxed:1.75;--spacer-1:0.25rem;--spacer-2:0.5rem;--spacer-3:1rem;--spacer-4:1.5rem;--spacer-5:3rem;--border-radius-sm:0.25rem;--border-radius:0.375rem;--border-radius-lg:0.5rem;--border-radius-xl:1rem;--shadow-sm:0 1px 2px #0000000d;--shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;--shadow-xl:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;--transition-base:all 0.2s ease-in-out;--sidebar-width:280px;--sidebar-collapsed-width:70px;--z-index-dropdown:1000;--z-index-sticky:1020;--z-index-fixed:1030;--z-index-modal-backdrop:1040;--z-index-modal:1050;--z-index-popover:1060;--z-index-tooltip:1070}*,:after,:before{box-sizing:border-box}body,html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f8fafc;background-color:var(--bg-body);color:#212529;color:var(--text-primary);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-family:var(--font-family-base);font-size:1rem;font-size:var(--font-size-base);font-weight:400;font-weight:var(--font-weight-normal);height:100%;line-height:1.5;line-height:var(--line-height-base);margin:0;padding:0}#root{display:flex;flex-direction:column;height:100%}h1,h2,h3,h4,h5,h6{font-weight:700;font-weight:var(--font-weight-bold);line-height:1.2;margin-bottom:.5rem;margin-bottom:var(--spacer-2);margin-top:0}h1{font-size:2rem}h2{font-size:1.75rem}h3{font-size:1.5rem}h4{font-size:1.25rem}h5{font-size:1.125rem}h6{font-size:1rem}p{margin-bottom:1rem;margin-bottom:var(--spacer-3);margin-top:0}a{color:#1976d2;color:var(--primary-color);text-decoration:none;transition:all .2s ease-in-out;transition:var(--transition-base)}a:hover{color:#1565c0;color:var(--primary-dark);text-decoration:underline}button{cursor:pointer;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-family:var(--font-family-base)}.btn,button{font-size:1rem;font-size:var(--font-size-base)}.btn{border:1px solid #0000;border-radius:.375rem;border-radius:var(--border-radius);display:inline-block;font-weight:500;font-weight:var(--font-weight-medium);line-height:1.5;padding:.375rem .75rem;text-align:center;transition:all .2s ease-in-out;transition:var(--transition-base);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn-primary{background-color:#1976d2;background-color:var(--primary-color);border-color:#1976d2;border-color:var(--primary-color);color:#fff}.btn-primary:hover{background-color:#1565c0;background-color:var(--primary-dark);border-color:#1565c0;border-color:var(--primary-dark)}.btn-secondary{background-color:#e9ecef;background-color:var(--gray-200);border-color:#e9ecef;border-color:var(--gray-200);color:#212529;color:var(--gray-900)}.btn-secondary:hover{background-color:#dee2e6;background-color:var(--gray-300);border-color:#dee2e6;border-color:var(--gray-300)}.main-container{flex-grow:1;margin-left:70px;margin-left:var(--sidebar-collapsed-width);padding:1.5rem;transition:margin-left .3s ease}@media (min-width:768px){.main-container.sidebar-open{margin-left:280px;margin-left:var(--sidebar-width)}}@media (max-width:767px){.main-container{margin-left:0;padding:1rem}}.app-container{display:flex;flex-direction:column;min-height:100%}.content-container{display:flex;flex:1 1;position:relative}.page-content{flex:1 1;margin-left:70px;margin-left:var(--sidebar-collapsed-width);padding:1.5rem;padding:var(--spacer-4);transition:margin-left .3s ease}.sidebar-open .page-content{margin-left:280px;margin-left:var(--sidebar-width)}@media (max-width:767px){.page-content{margin-left:0;padding:1rem;padding:var(--spacer-3)}}.form-control{background-clip:padding-box;border:1px solid #ced4da;border:1px solid var(--gray-400);border-radius:.375rem;border-radius:var(--border-radius);color:#212529;color:var(--text-primary);display:block;font-size:1rem;font-size:var(--font-size-base);line-height:1.5;padding:.375rem .75rem;transition:all .2s ease-in-out;transition:var(--transition-base);width:100%}.form-control,.form-control:focus{background-color:#fff;background-color:var(--white)}.form-control:focus{border-color:#e3f2fd;border-color:var(--primary-light);box-shadow:0 0 0 .2rem #2196f340;color:#212529;color:var(--gray-900);outline:0}.text-center{text-align:center}.text-right{text-align:right}.text-left{text-align:left}.mt-1{margin-top:.25rem;margin-top:var(--spacer-1)}.mt-2{margin-top:.5rem;margin-top:var(--spacer-2)}.mt-3{margin-top:1rem;margin-top:var(--spacer-3)}.mt-4{margin-top:1.5rem;margin-top:var(--spacer-4)}.mt-5{margin-top:3rem;margin-top:var(--spacer-5)}.mb-1{margin-bottom:.25rem;margin-bottom:var(--spacer-1)}.mb-2{margin-bottom:.5rem;margin-bottom:var(--spacer-2)}.mb-3{margin-bottom:1rem;margin-bottom:var(--spacer-3)}.mb-4{margin-bottom:1.5rem;margin-bottom:var(--spacer-4)}.mb-5{margin-bottom:3rem;margin-bottom:var(--spacer-5)}.ml-1{margin-left:.25rem;margin-left:var(--spacer-1)}.ml-2{margin-left:.5rem;margin-left:var(--spacer-2)}.ml-3{margin-left:1rem;margin-left:var(--spacer-3)}.ml-4{margin-left:1.5rem;margin-left:var(--spacer-4)}.ml-5{margin-left:3rem;margin-left:var(--spacer-5)}.mr-1{margin-right:.25rem;margin-right:var(--spacer-1)}.mr-2{margin-right:.5rem;margin-right:var(--spacer-2)}.mr-3{margin-right:1rem;margin-right:var(--spacer-3)}.mr-4{margin-right:1.5rem;margin-right:var(--spacer-4)}.mr-5{margin-right:3rem;margin-right:var(--spacer-5)}.p-1{padding:.25rem;padding:var(--spacer-1)}.p-2{padding:.5rem;padding:var(--spacer-2)}.p-3{padding:1rem;padding:var(--spacer-3)}.p-4{padding:1.5rem;padding:var(--spacer-4)}.p-5{padding:3rem;padding:var(--spacer-5)}.d-none{display:none}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:flex}.flex-row{flex-direction:row}.flex-column{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.justify-content-start{justify-content:flex-start}.justify-content-end{justify-content:flex-end}.justify-content-center{justify-content:center}.justify-content-between{justify-content:space-between}.justify-content-around{justify-content:space-around}.align-items-start{align-items:flex-start}.align-items-end{align-items:flex-end}.align-items-center{align-items:center}.align-items-baseline{align-items:baseline}.align-items-stretch{align-items:stretch}.w-100{width:100%}.h-100{height:100%}.card{word-wrap:break-word;background-clip:initial;background-color:#fff;background-color:var(--white);border:1px solid #dee2e6;border:1px solid var(--gray-300);border-radius:.375rem;border-radius:var(--border-radius);box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;box-shadow:var(--shadow);display:flex;flex-direction:column;margin-bottom:1rem;margin-bottom:var(--spacer-3);min-width:0;position:relative}.card-header{background-color:#f8f9fa;background-color:var(--gray-100);border-bottom:1px solid #dee2e6;border-bottom:1px solid var(--gray-300);margin-bottom:0}.card-body,.card-header{padding:1rem;padding:var(--spacer-3)}.card-body{flex:1 1 auto}.card-footer{background-color:#f8f9fa;background-color:var(--gray-100);border-top:1px solid #dee2e6;border-top:1px solid var(--gray-300);padding:1rem;padding:var(--spacer-3)}.spinner{animation:spin .8s linear infinite;border:.2em solid #0000001a;border-radius:50%;border-top-color:#1976d2;border-top:.2em solid var(--primary-color);height:1.5rem;width:1.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.auth-container{align-items:center;background-color:var(--bg-light);background-image:linear-gradient(135deg,#f5f7fa,#c3cfe2);display:flex;justify-content:center;min-height:100vh;padding:2rem 1rem}.auth-card{background-color:var(--white);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg);max-width:440px;padding:2rem;transition:transform .3s ease,box-shadow .3s ease;width:100%}.auth-card:hover{box-shadow:var(--shadow-xl);transform:translateY(-5px)}.auth-header{margin-bottom:2rem;text-align:center}.auth-header h2{color:var(--text-primary);font-size:1.75rem;margin-bottom:.5rem}.auth-header p{color:var(--text-secondary);margin-bottom:0}.auth-form,.form-group{margin-bottom:1.5rem}.form-group label{color:var(--text-primary);display:block;font-weight:var(--font-weight-medium);margin-bottom:.5rem}.form-group input{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--border-radius);font-size:1rem;padding:.75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-group input:focus{border-color:var(--primary-light);box-shadow:0 0 0 .2rem #2196f340;outline:0}.form-group small{display:block;margin-top:.5rem}.form-group small,.form-text{color:var(--text-muted);font-size:.875rem}.auth-button{background-color:var(--primary-color);border:none;border-radius:var(--border-radius);color:#fff;cursor:pointer;display:block;font-size:1rem;font-weight:500;padding:.875rem;text-align:center;transition:background-color .15s ease-in-out;width:100%}.auth-button:hover{background-color:var(--primary-dark)}.auth-button:disabled{background-color:var(--gray-400);cursor:not-allowed}.auth-error{background-color:#f443361a;border-left:3px solid var(--danger-color);border-radius:var(--border-radius);color:var(--danger-color);margin-bottom:1.5rem;padding:.75rem 1rem}.auth-footer{border-top:1px solid var(--gray-200);margin-top:1rem;padding-top:1rem;text-align:center}.auth-footer p{color:var(--text-secondary);margin-bottom:0}.auth-footer a{color:var(--primary-color);font-weight:500}.token-info{border-top:1px solid var(--gray-200);margin-top:2rem;padding-top:1.5rem}.token-info h4{color:var(--text-primary);font-weight:600;margin-bottom:.75rem}.token-info p{color:var(--text-secondary);font-size:.9375rem;line-height:1.5}.password-strength{align-items:center;display:flex;gap:8px;margin-top:8px}.password-strength-bar{background-color:#e9ecef;border-radius:2px;flex:1 1;height:4px;overflow:hidden}.password-strength-fill{border-radius:2px;height:100%;transition:width .3s ease,background-color .3s ease}.password-strength-label{font-size:12px;font-weight:500;letter-spacing:.5px;min-width:60px;text-align:right;text-transform:uppercase}.password-requirements{background-color:#f8f9fa;border-left:4px solid #007bff;border-radius:6px;margin-top:16px;padding:12px}.password-requirements h4{color:#495057;font-size:14px;margin:0 0 8px}.password-requirements ul{list-style:none;margin:0;padding-left:20px}.password-requirements li{color:#6c757d;font-size:13px;margin-bottom:4px;padding-left:20px;position:relative}.password-requirements li:before{color:#dc3545;content:"✗";font-weight:700;left:0;position:absolute}.password-requirements li.valid{color:#28a745}.password-requirements li.valid:before{color:#28a745;content:"✓"}.form-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.form-actions .btn{flex:1 1;min-width:120px}.form-actions .btn-link{background:none;border:none;color:#6c757d;flex:none;font-size:14px;min-width:auto;padding:8px 0;text-decoration:none}.form-actions .btn-link:hover{color:#007bff;text-decoration:underline}.auth-info{border-top:1px solid #dee2e6;margin-top:24px;padding-top:20px}.auth-info p{color:#495057;font-size:14px;margin:0 0 8px}.auth-info .text-small{color:#6c757d;font-size:12px;line-height:1.4}.auth-container .auth-card{max-width:480px}.auth-subtitle{color:#6c757d;line-height:1.5;margin-bottom:24px}.form-input:disabled{background-color:#f8f9fa;color:#6c757d;cursor:not-allowed}.btn:disabled{cursor:not-allowed;opacity:.6}@media (max-width:480px){.form-actions{flex-direction:column}.form-actions .btn{margin-bottom:8px;width:100%}.password-strength{align-items:stretch;flex-direction:column;gap:4px}.password-strength-label{min-width:auto;text-align:left}}@media (prefers-contrast:high){.password-requirements{background-color:#fff;border:2px solid #007bff}.password-strength-bar{border:1px solid #000}}@media (prefers-reduced-motion:reduce){.password-strength-fill{transition:none}}@media (max-width:576px){.auth-card{padding:1.5rem}.auth-header h2{font-size:1.5rem}}.auth-link-button{background:none;border:none;color:#007bff;cursor:pointer;font-size:14px;margin:0;padding:0;text-decoration:none;transition:color .2s ease}.auth-link-button:hover{color:#0056b3;text-decoration:underline}.auth-link-button:disabled{color:#6c757d;cursor:not-allowed}.auth-link-button:disabled:hover{text-decoration:none}.auth-success{background-color:#d4edda;border:1px solid #c3e6cb;border-radius:6px;color:#155724;font-size:14px;margin-bottom:20px;padding:12px;text-align:center}.assignments-container{padding:1rem 0}.assignments-header{margin-bottom:2rem}.assignments-header h2{color:var(--text-primary);font-size:1.75rem;font-weight:600;margin:0 0 1rem}.assignments-sub-tabs{-ms-overflow-style:none;border-bottom:1px solid var(--gray-200);display:flex;gap:.5rem;margin-bottom:1rem;overflow-x:auto;scrollbar-width:none}.assignments-sub-tabs::-webkit-scrollbar{display:none}.sub-tab-button{background:#0000;border:none;border-bottom:2px solid #0000;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:.9rem;font-weight:500;padding:.75rem 1rem;position:relative;transition:all .2s ease;white-space:nowrap}.sub-tab-button:hover{background:var(--gray-50);color:var(--text-primary)}.sub-tab-button.active{background:var(--gray-50);border-bottom-color:var(--primary-color);color:var(--primary-color)}.assignments-content{margin-top:1.5rem}.assignments-section-header{margin-bottom:1.5rem}.assignments-section-header h3{color:var(--text-primary);font-size:1.5rem;font-weight:600;margin:0 0 .5rem}.assignments-subtitle{color:var(--text-secondary);font-size:1rem;margin:0}.no-assignments{background:var(--gray-50);border:1px solid var(--gray-200);border-radius:12px;padding:3rem 2rem}.no-assignments-icon{font-size:3rem;margin-bottom:1rem}.no-assignments h4{color:var(--success-color);font-size:1.5rem;font-weight:600;margin:0 0 .5rem}.no-assignments p{color:var(--text-secondary);font-size:1rem;margin:0}.assignments-list{display:flex;flex-direction:column;gap:1rem}.assignment-item{background:#fff;border:1px solid var(--gray-200);border-radius:12px;box-shadow:0 1px 3px #0000001a;overflow:hidden;padding:0;transition:all .2s ease}.assignment-item:hover{border-color:var(--primary-color);box-shadow:0 4px 12px #00000026;transform:translateY(-2px)}.assignment-header{align-items:flex-start;display:flex;gap:1rem;justify-content:space-between;padding:1.5rem 1.5rem 0}.assignment-title-section{flex:1 1}.assignment-body{display:flex;gap:1.5rem;padding:1rem 1.5rem 1.5rem}.assignment-content{flex:2 1;min-width:0}.assignment-notes-section{flex:1 1;min-width:280px}.assignment-info{flex:1 1;min-width:0}.assignment-name{word-wrap:break-word;font-size:1.125rem;font-weight:600;-webkit-hyphens:auto;hyphens:auto;line-height:1.4;margin:0 0 .75rem;overflow-wrap:break-word}.course-info{align-items:center;display:flex;gap:.5rem;margin-bottom:1rem}.course-name{word-wrap:break-word;color:var(--text-secondary);font-size:.9rem;overflow-wrap:break-word}.course-code{color:var(--text-tertiary);font-size:.85rem}.assignment-description{word-wrap:break-word;color:var(--text-secondary);font-size:.9rem;line-height:1.4;margin-top:.5rem;max-height:4.2em;overflow-wrap:break-word}.assignment-details{background:var(--gray-50);border-radius:8px;display:flex;flex-direction:column;gap:.75rem;margin-top:.75rem;padding:1rem}.detail-item{align-items:center;border-bottom:1px solid var(--gray-200);display:flex;justify-content:space-between;padding:.5rem 0}.detail-item:last-child{border-bottom:none}.detail-label{color:var(--text-tertiary);font-size:.75rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.detail-value{color:var(--text-primary);font-size:.9rem;font-weight:500}.detail-value.overdue{color:var(--error-color);font-weight:600}.detail-value.no-due-date{color:var(--text-tertiary);font-style:italic}.assignment-status{display:flex;justify-content:flex-end;margin-top:.5rem}.status-badge{border-radius:20px;font-size:.75rem;font-weight:600;letter-spacing:.05em;padding:.375rem .75rem}.status-missing{background:var(--warning-bg);border:1px solid var(--warning-color);color:var(--warning-color)}.status-submitted{background:#3b82f61a;border:1px solid #3b82f6;color:#1d4ed8}.status-graded{background:#22c55e1a;border:1px solid #22c55e;color:#15803d}.status-upcoming{background:#a855f71a;border:1px solid #a855f7;color:#7c3aed}.status-not-submitted{background:#6b72801a;border:1px solid #6b7280;color:#374151}.grade-score{color:var(--success-color);font-weight:600}.graded-at-timestamp{color:var(--text-secondary);font-size:.75em;font-weight:400;opacity:.8}.submitted-date .detail-value{color:var(--primary-color)}.assignment-note-container{border-left:1px solid var(--gray-200);height:-webkit-fit-content;height:fit-content;padding-left:1rem}.assignment-note-toggle{margin-bottom:.75rem}.note-toggle-btn{align-items:center;background:var(--gray-100);border:1px solid var(--gray-300);border-radius:6px;color:var(--text-secondary);cursor:pointer;display:flex;font-size:.875rem;gap:.5rem;justify-content:flex-start;padding:.5rem .75rem;transition:all .2s ease;width:100%}.note-toggle-btn:hover{background:var(--gray-200);color:var(--text-primary)}.note-toggle-btn.has-note{background:#3b82f61a;border-color:#3b82f6;color:#1d4ed8}.note-toggle-btn.has-note:hover{background:#3b82f633}.note-icon{font-size:1rem}.toggle-arrow{font-size:.75rem;margin-left:auto;transition:transform .2s ease}.toggle-arrow.expanded{transform:rotate(180deg)}.assignment-note-content{background:var(--gray-50);border:1px solid var(--gray-200);border-radius:8px;margin-top:.5rem;padding:1rem}.note-display{display:flex;flex-direction:column;gap:.75rem}.note-text{background:#fff;border:1px solid var(--gray-200);border-radius:6px;color:var(--text-primary);font-size:.9rem;line-height:1.5;padding:.75rem;white-space:pre-wrap}.note-actions{display:flex;gap:.5rem}.note-meta{color:var(--text-tertiary);font-size:.75rem;font-style:italic}.note-editor{display:flex;flex-direction:column;gap:.75rem}.note-textarea{border:1px solid var(--gray-300);border-radius:6px;font-family:inherit;font-size:.9rem;line-height:1.5;min-height:80px;padding:.75rem;resize:vertical;width:100%}.note-textarea:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #3b82f633;outline:none}.note-textarea:disabled{background:var(--gray-100);color:var(--text-secondary);cursor:not-allowed}.note-editor-actions{display:flex;gap:.5rem;justify-content:flex-end}.note-action-btn{border:1px solid #0000;border-radius:6px;cursor:pointer;font-size:.875rem;font-weight:500;min-width:70px;padding:.5rem 1rem;transition:all .2s ease}.note-action-btn:disabled{cursor:not-allowed;opacity:.6}.add-btn,.save-btn{background:var(--primary-color);border-color:var(--primary-color);color:#fff}.add-btn:hover:not(:disabled),.save-btn:hover:not(:disabled){background:var(--primary-dark);border-color:var(--primary-dark)}.edit-btn{background:var(--gray-100);border-color:var(--gray-300);color:var(--text-secondary)}.edit-btn:hover:not(:disabled){background:var(--gray-200);color:var(--text-primary)}.delete-btn{background:#fff;border-color:var(--error-color);color:var(--error-color)}.delete-btn:hover:not(:disabled){background:var(--error-color);color:#fff}.cancel-btn{background:#fff;border-color:var(--gray-300);color:var(--text-secondary)}.cancel-btn:hover:not(:disabled){background:var(--gray-100);color:var(--text-primary)}.note-empty{color:var(--text-secondary);padding:1.5rem;text-align:center}.note-empty p{font-style:italic;margin:0 0 1rem}@media (max-width:768px){.assignment-body{flex-direction:column;gap:1rem}.assignment-content{flex:1 1}.assignment-notes-section{border-left:none;border-top:1px solid var(--gray-200);flex:1 1;min-width:auto;padding-left:0;padding-top:1rem}.assignment-header{align-items:flex-start;flex-direction:column;gap:.75rem;padding:1rem 1rem 0}.assignment-status{align-self:flex-end}.assignment-details{gap:.5rem;margin-top:.5rem;padding:.75rem}.detail-item{padding:.375rem 0}.assignments-sub-tabs{flex-wrap:wrap;gap:.25rem}.sub-tab-button{flex:1 1;font-size:.85rem;min-width:100px;padding:.5rem .75rem}.assignment-name{font-size:1rem}.note-editor-actions{flex-direction:column}.note-action-btn{width:100%}.note-actions{flex-direction:column}}.dashboard-tabs-container{align-items:flex-end;border-bottom:1px solid var(--gray-200);display:flex;gap:.75rem;justify-content:flex-start;margin-bottom:2rem;padding-bottom:0;width:100%}.dashboard-tabs{-ms-overflow-style:none;display:flex;flex:1 1;gap:.5rem;min-width:0;overflow-x:auto;scrollbar-width:none}.dashboard-tabs::-webkit-scrollbar{display:none}.tab-button{background:#0000;flex-shrink:0;padding:1rem 1.5rem;position:relative;transition:all .2s ease}.tab-button.active,.tab-button:hover{background:var(--gray-50)}.tab-button.active:after{background:var(--primary-color);bottom:-1px;content:"";height:2px;left:0;position:absolute;right:0}.course-filter-container{align-items:center;display:flex;flex-shrink:0;margin-left:auto;min-width:150px;padding-left:1rem}.courses-header{align-items:center;display:flex;justify-content:flex-end;margin-bottom:1rem}.courses-header .search-bar{flex:0 0 auto;max-width:300px}.dashboard-container{margin:0 auto;max-width:1200px;padding:1.5rem}.dashboard-header{display:flex;flex-direction:column;margin-bottom:1.5rem}.dashboard-header h1{color:var(--text-primary);font-weight:600;margin-bottom:1rem}.dashboard-controls{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;gap:1rem;margin-bottom:.5rem}.search-bar{flex:1 1;min-width:200px;position:relative}.dashboard-search{border:1px solid var(--gray-300);border-radius:var(--border-radius);font-size:.9375rem;padding:.625rem 2.5rem .625rem 1rem;transition:border-color .2s;width:100%}.dashboard-search:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f333;outline:none}.clear-search{align-items:center;background:none;border:none;color:var(--gray-600);cursor:pointer;display:flex;font-size:1.25rem;height:1.5rem;justify-content:center;padding:0;position:absolute;right:.75rem;top:50%;transform:translateY(-50%);width:1.5rem}.clear-search:hover{color:var(--gray-800)}.filter-dropdown{min-width:180px}.dashboard-filter{background-color:var(--white);border:1px solid var(--gray-300);border-radius:var(--border-radius);cursor:pointer;font-size:.875rem;min-width:140px;padding:.5rem .75rem;transition:border-color .2s;width:100%}.dashboard-filter:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f333;outline:none}.dashboard-summary{margin-bottom:2rem}.grade-summary{background-color:#fff;border-radius:var(--border-radius-lg);box-shadow:var(--shadow);padding:1.5rem}.grade-summary-content{grid-gap:2rem;align-items:start;display:grid;gap:2rem;grid-template-columns:3fr 1fr}.grade-chart-container{align-items:center;display:flex;flex-direction:column;margin:0;max-width:280px;width:100%}.grade-summary.no-courses{padding:3rem 1rem;text-align:center}.grade-overview h2{color:var(--text-primary);font-size:1.5rem;margin-bottom:1.25rem}.grade-stats-grid{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.grade-stat-card{background-color:var(--gray-100);border-radius:var(--border-radius);padding:1rem;text-align:center}.grade-stat-card h3{color:var(--text-secondary);font-size:.9375rem;font-weight:500;margin-bottom:.5rem}.stat-value{font-size:1.75rem;line-height:1.2;margin-bottom:.25rem}.stat-value.no-data{color:var(--gray-500);font-size:1.25rem}.gpa-value{color:var(--primary-color)}.average-value{color:var(--grade-b)}.highest-value{color:var(--grade-a)}.lowest-value{color:var(--grade-c)}.grades-list-container{border-top:1px solid var(--gray-200);margin-top:1.5rem;padding-top:1.5rem}.grades-list-container h3{font-size:1.25rem;margin-bottom:1rem}.grades-list{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.grade-list-item{align-items:center;background-color:var(--gray-100);border-radius:var(--border-radius);display:flex;justify-content:space-between;padding:.75rem 1rem;transition:transform .2s,box-shadow .2s}.grade-list-item:hover{box-shadow:var(--shadow-sm);transform:translateY(-2px)}.course-name{flex:1 1;font-weight:500;margin-right:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.course-grade{align-items:flex-end;display:flex;flex-direction:column;min-width:80px}.grade-value{font-size:1.125rem}.letter-grade{font-size:1.25rem;line-height:1}.courses-grid-container{position:relative}.courses-heading{color:var(--text-primary);font-size:1.375rem;margin-bottom:1.25rem}.courses-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.no-courses-message{border-radius:var(--border-radius);color:var(--text-secondary);font-size:1.125rem;padding:3rem 1rem;text-align:center}.course-card,.no-courses-message{background-color:#fff;box-shadow:var(--shadow)}.course-card{background-position:50%;background-size:cover;border-radius:var(--border-radius-lg);color:var(--text-primary);display:block;min-height:200px;overflow:hidden;position:relative;text-decoration:none;transition:transform .3s ease,box-shadow .3s ease}.course-card:hover{box-shadow:var(--shadow-lg);text-decoration:none;transform:translateY(-5px)}.course-card-content{display:flex;flex-direction:column;height:100%;padding:1.5rem}.course-card-header{margin-bottom:1rem}.course-name{color:var(--text-primary);font-size:1.125rem;font-weight:600;line-height:1.3;margin-bottom:.25rem}.course-code{display:block;font-size:.875rem}.course-card-body{flex-grow:1;margin-bottom:1rem}.course-grade-container,.grade-display{margin-bottom:.5rem}.grade-display{align-items:baseline;gap:.5rem}.percentage{font-size:1.5rem;font-weight:600}.grade-progress-bar{border-radius:3px;height:6px}.progress-fill{border-radius:3px}.no-grade-message{font-size:.9375rem}.course-card-footer{border-top:1px solid var(--gray-200);padding-top:.75rem}.course-stats{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:space-between}.stat-item{align-items:center;display:flex;flex-direction:column;min-width:60px}.stat-label{color:var(--text-muted);font-size:.75rem;margin-bottom:.125rem}.stat-value{font-size:1rem}.stat-item.warning .stat-value{color:var(--warning-color)}.stat-item.complete .stat-value{color:var(--success-color)}.course-card-warning{border-left:4px solid var(--warning-color)}.loading-overlay{align-items:center;background-color:#fffc;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:5}.loading-overlay.semi-transparent{background-color:#fff9}@media (max-width:992px){.grade-summary-content{gap:1.5rem;grid-template-columns:1fr}.grade-chart-container{margin:0 auto;max-width:280px}}@media (max-width:768px){.dashboard-tabs,.dashboard-tabs-container{align-items:stretch;flex-direction:column;gap:1rem}.dashboard-tabs{overflow-x:auto}.course-filter-container{justify-content:center;margin-left:0;padding-left:0}.course-filter-container .dashboard-filter{max-width:300px;width:100%}.courses-header{justify-content:stretch}.courses-header .search-bar{flex:1 1;max-width:none}.grade-stats-grid{grid-template-columns:repeat(2,1fr)}.courses-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}}@media (max-width:480px){.courses-grid,.grade-stats-grid,.grades-list{grid-template-columns:1fr}}.recent-submissions{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);margin:2rem 0;overflow:hidden;padding:1.25rem}.recent-submissions-title{border-bottom:1px solid var(--gray-200);font-size:1.125rem;margin:0;padding:0 0 1rem}.recent-submissions-list{margin-top:.75rem;max-height:500px;overflow-y:auto;padding:.5rem}.submission-item{align-items:center;border-bottom:1px solid var(--gray-100);color:var(--text-primary);display:flex;justify-content:space-between;padding:.75rem 1rem;text-decoration:none;transition:background-color .2s ease}.submission-item:last-child{border-bottom:none}.submission-item:hover{background-color:var(--gray-50)}.submission-details{flex:1 1;min-width:0}.submission-name{font-weight:500;margin-bottom:.25rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.submission-course{color:var(--primary-color);font-size:.875rem;margin-bottom:.25rem}.submission-date{color:var(--text-secondary);font-size:.75rem}.submission-grade{padding-left:1rem;text-align:right;white-space:nowrap}.grade-value{font-size:.875rem;font-weight:500}.grade-percentage{font-size:.75rem;font-weight:600}.not-graded{color:var(--text-secondary);font-size:.75rem;font-style:italic}.no-submissions{color:var(--text-secondary);padding:1.5rem;text-align:center}.user-selection-card{margin:3rem auto}.primary-button{background-color:var(--primary-color);border:none;border-radius:4px;color:#fff;cursor:pointer;font-size:.9375rem;font-weight:500;padding:.625rem 1.25rem;transition:background-color .2s}.primary-button:hover{background-color:var(--primary-dark)}.primary-button:disabled{background-color:var(--gray-400);cursor:not-allowed}.user-selector-container{margin-right:1rem;position:relative;z-index:1000}.user-selector-button{align-items:center;background-color:var(--primary-light);border:none;border-radius:4px;color:var(--primary-color);cursor:pointer;display:flex;font-size:.875rem;min-width:150px;padding:.5rem .75rem;transition:background-color .2s}.user-selector-button.attention-required{animation:pulse 1.5s infinite;background-color:var(--warning-light);box-shadow:0 0 0 2px #ea580c66;color:var(--warning-color)}@keyframes pulse{0%{opacity:.8}50%{opacity:1}to{opacity:.8}}.user-selector-button:hover{background-color:var(--primary-color-light-hover)}.user-selector-button.attention-required:hover{background-color:var(--warning-light-hover)}.user-name{flex-grow:1;max-width:150px;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.dropdown-arrow{color:var(--primary-color);font-size:.6rem;margin-left:.5rem}.user-selector-button.attention-required .dropdown-arrow{color:var(--warning-color)}.user-selector-dropdown{animation:dropdown-fade-in .2s ease;background-color:#fff;border-radius:8px;box-shadow:0 4px 16px #0000001f;overflow:hidden;position:absolute;right:0;top:calc(100% + .5rem);width:220px;z-index:var(--z-index-dropdown)}.user-selector-header{border-bottom:1px solid var(--gray-200);color:var(--text-secondary);font-size:.875rem;font-weight:500;padding:.75rem 1rem}.user-selector-list{list-style:none;margin:0;max-height:300px;overflow-y:auto;padding:.5rem 0}.user-selector-item{align-items:center;background:none;border:none;color:var(--text-primary);cursor:pointer;display:flex;font-size:.9375rem;padding:.75rem 1rem;text-align:left;transition:background-color .15s;width:100%}.user-selector-item:hover{background-color:var(--gray-100)}.user-selector-item.active{background-color:var(--primary-light);color:var(--primary-color);font-weight:500}.user-selection-container{align-items:center;display:flex;justify-content:center;min-height:50vh}.user-selection-card{background-color:#fff;border-radius:var(--border-radius);border-top:4px solid var(--primary-color);box-shadow:var(--shadow);margin:2rem auto;max-width:500px;padding:2rem;width:100%}.user-selection-header{margin-bottom:1.5rem}.user-selection-header h2{color:var(--primary-color);font-size:1.5rem;margin:0 0 .5rem}.user-selection-header p{color:var(--text-secondary);font-size:.9375rem;margin:0}.user-selection-body{margin-bottom:1.5rem}.user-select{background-color:#fff;border:1px solid var(--gray-300);border-radius:var(--border-radius);color:var(--text-primary);font-size:1rem;padding:.75rem;width:100%}.user-select:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f333;outline:none}.user-selection-footer{display:flex;justify-content:flex-end}.user-selection-info{border-top:1px solid var(--gray-200);color:var(--text-secondary);font-size:.875rem;margin-top:1.5rem;padding-top:1rem}.user-selection-error{background-color:var(--danger-light);border-radius:4px;color:var(--danger-color);margin-bottom:1rem;padding:1rem}.course-details{margin:0 auto;max-width:1200px;padding:1.5rem}.back-link{align-items:center;color:var(--text-secondary);display:inline-flex;font-weight:500;margin-bottom:1.5rem;transition:color .2s}.back-link:hover{color:var(--primary-color);text-decoration:none}.back-icon{font-size:1.25rem;line-height:1;margin-right:.5rem}.course-header{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:2rem}.course-title-container{flex:1 1;min-width:0;padding-right:1rem}.course-title{color:var(--text-primary);font-size:2rem;font-weight:700;line-height:1.2;margin-bottom:.25rem;word-break:break-word}.course-code{color:var(--text-secondary);font-size:1rem;margin-bottom:0}.course-grade-chip{align-items:center;border-radius:var(--border-radius-lg);display:flex;justify-content:center;margin-left:1rem;padding:.5rem 1rem}.course-grade-chip .grade-value{font-size:1.5rem;font-weight:700}.course-tabs{border-bottom:2px solid var(--gray-200);display:flex;margin-bottom:2rem;overflow-x:auto}.tab-button{background:none;border:none;border-bottom:2px solid #0000;color:var(--text-secondary);cursor:pointer;font-size:1rem;font-weight:500;margin-bottom:-2px;margin-right:.5rem;padding:.875rem 1.5rem;transition:color .2s,border-color .2s;white-space:nowrap}.tab-button:hover{color:var(--text-primary)}.tab-button.active{border-bottom-color:var(--primary-color);color:var(--primary-color)}.tab-content{min-height:400px}.assignment-filters{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);margin-bottom:1.5rem;padding:1.25rem}.filter-group{margin-bottom:1rem}.filter-group:last-child{margin-bottom:0}.filter-input-wrapper{position:relative}.search-icon{color:var(--gray-500);left:1rem;position:absolute;top:50%;transform:translateY(-50%)}.search-input{border:1px solid var(--gray-300);border-radius:var(--border-radius);font-size:1rem;padding:.75rem 2.5rem;width:100%}.search-input:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f333;outline:none}.filter-row{display:flex;flex-wrap:wrap;gap:1rem}.filter-group label{color:var(--text-secondary);display:block;font-weight:500;margin-bottom:.5rem}.filter-select{background-color:#fff;border:1px solid var(--gray-300);border-radius:var(--border-radius);color:var(--text-primary);font-size:.9375rem;min-width:180px;padding:.625rem}.filter-select:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f333;outline:none}.assignment-table-container{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);margin-bottom:2rem;overflow:hidden}.table-responsive{overflow-x:auto;width:100%}.assignments-table{border-collapse:collapse;width:100%}.assignments-table th{border-bottom:2px solid var(--gray-200);color:var(--text-primary);cursor:pointer;font-weight:600;padding:1rem;position:relative;text-align:left;white-space:nowrap}.assignments-table th:hover{background-color:var(--gray-100)}.assignments-table th.sorted-asc,.assignments-table th.sorted-desc{background-color:var(--gray-100);color:var(--primary-color)}.sort-icon{font-size:.875rem;margin-left:.5rem}.assignments-table td{border-bottom:1px solid var(--gray-200);padding:1rem;vertical-align:middle}.assignments-table tbody tr:last-child td{border-bottom:none}.assignments-table tbody tr:hover{background-color:var(--gray-100)}.assignment-name-cell{max-width:300px}.assignment-name{color:var(--text-primary);font-weight:500;word-break:break-word}.omitted-label{background-color:var(--gray-200);border-radius:var(--border-radius-sm);color:var(--text-secondary);display:inline-block;font-size:.75rem;margin-top:.25rem;padding:.25rem .5rem}.omitted-row{opacity:.7}.no-date{color:var(--text-muted);font-style:italic}.due-date-cell,.submitted-date-cell{font-size:.875rem}.status-badge{border-radius:2rem;display:inline-block;font-size:.8125rem;padding:.25rem .625rem}.status-badge.submitted{background-color:#4caf5026;color:#2e7d32}.status-badge.missing{background-color:#f4433626;color:#d32f2f}.status-badge.late{background-color:#ff980026;color:#ed6c02}.status-badge.excused{background-color:#9c27b026;color:#7b1fa2}.status-badge.upcoming{background-color:#03a9f426;color:#0288d1}.status-badge.not-submitted{background-color:#9e9e9e26;color:#757575}.score-cell{min-width:120px;white-space:nowrap}.score-container{display:flex;flex-direction:column}.score-value{font-weight:600}.score-percentage{font-size:.875rem;font-weight:600;margin-top:.25rem}.score-not-graded{color:var(--text-muted);font-style:italic}.score-excused{color:#7b1fa2;font-weight:500}.no-assignments{color:var(--text-muted);padding:3rem 1rem;text-align:center}.results-summary{border-top:1px solid var(--gray-200);padding:1rem}.course-stats{margin-bottom:2rem}.stats-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));margin-bottom:1.5rem}.stats-card{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);padding:1.5rem}.stats-card h3{color:var(--text-primary);font-size:1.25rem;margin-bottom:1.25rem}.stats-list{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.stat-item{margin-bottom:.75rem}.stat-label{color:var(--text-secondary);display:block;font-size:.875rem;margin-bottom:.25rem}.stat-value{color:var(--text-primary);font-weight:600}.metric-value.submitted-count,.stat-data.submitted-count,.submitted-count{color:var(--grade-a)!important}.metric-value.missing-count,.missing-count,.stat-data.missing-count{color:var(--grade-f)!important}.late-count,.metric-value.late-count,.stat-data.late-count{color:var(--grade-c)!important}.metric-value.upcoming-count,.stat-data.upcoming-count,.upcoming-count{color:var(--primary-color)!important}.overall-grade .grade-display{align-items:baseline;display:flex;margin-bottom:1rem}.overall-grade .grade-value{font-size:2.25rem;font-weight:700;margin-right:.75rem}.overall-grade .letter-grade{font-size:2.5rem;font-weight:700}.grade-progress-bar{background-color:var(--gray-200);border-radius:4px;height:8px;overflow:hidden}.grade-progress-fill{border-radius:4px;height:100%}.no-grade-message{color:var(--text-muted);font-size:1.125rem;font-style:italic;padding:2rem 0;text-align:center}.assignment-groups-stats{margin-top:1.5rem}.assignment-groups-stats h3{color:var(--text-primary);font-size:1.25rem;margin-bottom:1.25rem}.groups-grid{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.group-stat-card{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);padding:1.25rem}.group-name{color:var(--text-primary);font-weight:600;margin-bottom:.75rem}.group-percentage{font-size:1.5rem;font-weight:700;margin-bottom:.25rem}.group-points{color:var(--text-secondary);font-size:.875rem;margin-bottom:1rem}.analytics-tab{margin-bottom:2rem}.analytics-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.chart-item{background-color:#fff;border-radius:var(--border-radius);overflow:hidden}.chart-item.full-width{grid-column:1/-1}.progression-chart-container{position:relative}@media (max-width:768px){.course-header{align-items:flex-start;flex-direction:column}.course-grade-chip{margin-left:0;margin-top:1rem}.course-tabs{justify-content:space-between}.tab-button{flex:1 1;padding:.75rem .5rem;text-align:center}.filter-row{flex-direction:column}.filter-select{width:100%}.groups-grid,.stats-grid{grid-template-columns:1fr}}@media (max-width:576px){.course-title{font-size:1.5rem}.course-header{margin-bottom:1.5rem}.overall-grade .grade-value{font-size:1.75rem}.overall-grade .letter-grade{font-size:2rem}}.override-column{width:100px}.assignment-override,.override-input{text-align:center}.override-input{border:1px solid var(--gray-300);border-radius:var(--border-radius);padding:.375rem;width:70px}.override-input:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f333;outline:none}.override-input:disabled{background-color:var(--gray-100);color:var(--gray-500);cursor:not-allowed}.override-notice{align-items:center;background-color:var(--primary-light);border-radius:var(--border-radius);display:flex;flex-wrap:wrap;justify-content:space-between;margin-top:1.5rem;padding:.75rem 1rem}.override-notice p{color:var(--primary-dark);font-size:.9375rem;margin:0}.clear-overrides-btn{background-color:initial;border:1px solid var(--primary-color);border-radius:var(--border-radius);color:var(--primary-color);cursor:pointer;font-size:.875rem;padding:.375rem .75rem;transition:all .2s}.clear-overrides-btn:hover{background-color:var(--primary-color);color:#fff}.course-grade-container{align-items:flex-end;display:flex;flex-direction:column}.overridden-label{color:var(--primary-color);font-size:.75rem;font-style:italic;margin-top:.25rem}tr:has(.override-input:not(:placeholder-shown)){background-color:#2196f30d}tr:has(.override-input:not(:placeholder-shown)) td{font-weight:var(--font-weight-medium)}@media (max-width:768px){.override-notice{flex-direction:column}.clear-overrides-button{margin-top:.75rem}}.multi-select-container{min-width:180px;position:relative;-webkit-user-select:none;user-select:none}.multi-select-header{align-items:center;background-color:#fff;border:1px solid #ccc;border-radius:4px;cursor:pointer;display:flex;justify-content:space-between;padding:8px 12px;transition:all .2s ease}.multi-select-header.active{border-color:#4a90e2;box-shadow:0 0 0 2px #4a90e233}.multi-select-header:hover{border-color:#999}.multi-select-value{max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.multi-select-arrow{color:#666;font-size:10px;margin-left:8px}.multi-select-options{background:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 2px 8px #00000026;left:0;margin-top:4px;max-height:240px;overflow-y:auto;position:absolute;top:100%;width:100%;z-index:10}.multi-select-option{align-items:center;cursor:pointer;display:flex;padding:8px 12px;transition:background-color .15s ease}.multi-select-option:hover{background-color:#f5f5f5}.multi-select-option.selected{background-color:#eaf1fb}.multi-select-checkbox{margin-right:8px}.multi-select-label{cursor:pointer}.active-filters{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px}.filter-pills{align-items:center;display:flex;flex-wrap:wrap;gap:5px}.filter-group-label{color:#666;font-size:12px;font-weight:600}.filter-pill{background-color:#eaf1fb;border-radius:50px;display:flex;font-size:12px;padding:2px 8px}.filter-pill,.remove-filter{align-items:center;color:#4a90e2}.remove-filter{background:none;border:none;cursor:pointer;display:inline-flex;font-size:14px;justify-content:center;line-height:1;margin-left:4px;padding:0 2px}.remove-filter:hover{color:#2a6fc0}.low-grade-filter{display:flex;flex-direction:column;min-width:200px}.low-grade-filter label{color:var(--text-secondary);font-size:.875rem;font-weight:500;margin-bottom:.5rem}.checkbox-input{cursor:pointer;height:16px;width:16px}.checkbox-input:disabled{cursor:not-allowed;opacity:.5}.checkbox-label.disabled{color:var(--gray-400);cursor:not-allowed}.threshold-pill{background-color:var(--warning-light)!important;border:1px solid var(--warning-color);color:var(--warning-dark)!important}.low-grade-row{background-color:#ffc1070d}.low-grade-label{background-color:var(--warning-light);border-radius:.25rem;color:var(--warning-dark);display:inline-block;font-size:.75rem;font-weight:500;margin-left:.5rem;padding:.125rem .375rem}.low-grade-score{position:relative}.low-grade-score .score-percentage.low-grade,.low-grade-score .score-value.low-grade{background-color:var(--warning-light);border:1px solid var(--warning-color);border-radius:.25rem;padding:.125rem .25rem}.low-grade-indicator{color:var(--warning-dark);display:block;font-size:.75rem;font-style:italic;margin-top:.25rem}.status-badge.missing.low-grade{background-color:var(--warning-light);border:1px solid var(--warning-color);color:var(--warning-dark)}.override-info{align-items:center;background-color:var(--primary-light);border-radius:var(--border-radius);display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;margin-top:1.5rem;padding:.75rem 1rem}.low-grade-count{color:var(--warning-dark);font-size:.9375rem;font-weight:500}.action-buttons{display:flex;flex-wrap:wrap;gap:.5rem}.clear-low-grades-btn{background-color:initial;border:1px solid var(--warning-color);border-radius:var(--border-radius);color:var(--warning-color);cursor:pointer;font-size:.875rem;padding:.375rem .75rem;transition:all .2s}.clear-low-grades-btn:hover{background-color:var(--warning-color);color:#fff}.results-summary{background-color:var(--gray-100);border-radius:var(--border-radius);color:var(--text-secondary);font-size:.9375rem;margin-top:1rem;padding:.75rem;text-align:center}.low-grade-summary{color:var(--warning-dark);font-weight:500}@media (max-width:768px){.low-grade-checkboxes{justify-content:flex-start}.filter-row{flex-direction:column;gap:1rem}.action-buttons{justify-content:center;width:100%}.override-info{align-items:center;flex-direction:column;text-align:center}}@media (max-width:480px){.low-grade-checkboxes{gap:.5rem}.checkbox-label{font-size:.8125rem}.low-grade-filter{min-width:auto}}.no-low-grades{background-color:var(--gray-100);border-radius:var(--border-radius);padding:.5rem;text-align:center}.no-low-grades small{color:var(--text-secondary);font-style:italic}.threshold-explanation{margin-top:.5rem}.threshold-explanation small{color:var(--text-secondary);font-style:italic;font-weight:500}.score-dash{color:var(--text-muted)}.score-dash,.score-invalid{font-style:italic;font-weight:500}.score-invalid{color:var(--danger-color)}.low-grade-score .score-dash,.low-grade-score .score-not-graded{background-color:var(--warning-light);border:1px solid var(--warning-color);border-radius:.25rem;color:var(--warning-dark);padding:.125rem .25rem}.checkbox-label{align-items:center;color:var(--text-primary);cursor:pointer;display:flex;font-size:.875rem;font-weight:500;gap:.25rem;max-width:120px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap}.affected-count{color:var(--text-secondary);flex-shrink:0;font-size:.75rem;font-weight:400}.low-grade-checkboxes{align-items:flex-start;display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:.5rem}.low-grade-checkbox{align-items:center;display:flex;gap:.25rem;min-width:0}@media (max-width:768px){.checkbox-label{font-size:.8125rem;max-width:100px}.low-grade-checkboxes{gap:.5rem}}@media (max-width:480px){.checkbox-label{font-size:.75rem;max-width:80px}.affected-count{font-size:.6875rem}}.virtualized-assignment-table{background:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 2px 4px #0000001a;overflow:hidden}.assignment-table-header{background:#f8f9fa;border-bottom:2px solid #dee2e6;display:flex;font-weight:600;position:-webkit-sticky;position:sticky;top:0;z-index:10}.assignment-header-cell{align-items:center;border-right:1px solid #dee2e6;cursor:pointer;display:flex;gap:4px;padding:12px 8px;transition:background-color .2s ease;-webkit-user-select:none;user-select:none}.assignment-header-cell:hover{background-color:#e9ecef}.assignment-header-cell:focus{outline:2px solid #007bff;outline-offset:-2px}.assignment-header-cell:last-child{border-right:none}.assignment-name-header{flex:2 1;min-width:200px}.assignment-due-date-header{flex:1 1;min-width:120px}.assignment-grade-header,.assignment-status-header{flex:1 1;min-width:100px}.assignment-points-header{flex:0 0 80px}.sort-indicator{color:#007bff;font-size:14px;margin-left:4px}.assignment-row{align-items:center;border-bottom:1px solid #eee;cursor:pointer;display:flex;min-height:60px;transition:background-color .2s ease}.assignment-row:focus,.assignment-row:hover{background-color:#f8f9fa}.assignment-row:focus{outline:2px solid #007bff;outline-offset:-2px}.assignment-row-empty{color:#6c757d;cursor:default;font-style:italic;justify-content:center}.assignment-row-empty:hover{background-color:initial}.assignment-missing{background-color:#fff5f5;border-left:4px solid #dc3545}.assignment-missing:hover{background-color:#ffe6e6}.assignment-late{background-color:#fff8e1;border-left:4px solid #ffc107}.assignment-late:hover{background-color:#ffecb3}.assignment-excused{background-color:#f0f8ff;border-left:4px solid #17a2b8}.assignment-excused:hover{background-color:#e6f3ff}.assignment-zero-score{background-color:#fff3cd;border-left:4px solid #fd7e14}.assignment-zero-score:hover{background-color:#ffeaa7}.assignment-ungraded{background-color:#f8f9fa;border-left:4px solid #6c757d}.assignment-ungraded:hover{background-color:#e9ecef}.assignment-cell{align-items:center;border-right:1px solid #eee;display:flex;overflow:hidden;padding:8px}.assignment-cell:last-child{border-right:none}.assignment-name{align-items:flex-start;flex:2 1;flex-direction:column;gap:4px;min-width:200px}.assignment-name-text{color:#333;font-weight:500}.assignment-description,.assignment-name-text{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.assignment-description{color:#6c757d;font-size:12px}.assignment-due-date{color:#495057;flex:1 1;font-size:14px;min-width:120px}.assignment-status{flex:1 1;flex-wrap:wrap;gap:4px;min-width:100px}.assignment-grade{flex:1 1;min-width:100px}.assignment-points{color:#6c757d;flex:0 0 80px;font-size:12px;text-align:right}.status-badge{border-radius:12px;font-size:11px;font-weight:500;letter-spacing:.5px;padding:2px 6px;text-transform:uppercase}.status-missing{background-color:#dc3545;color:#fff}.status-late{background-color:#ffc107;color:#212529}.status-excused{background-color:#17a2b8;color:#fff}.status-ok{background-color:#28a745;color:#fff}.grade-display{align-items:center;background-color:#f8f9fa;border:1px solid #0000;border-radius:4px;cursor:pointer;display:flex;min-height:24px;padding:4px 8px;transition:all .2s ease}.grade-display:hover{background-color:#e9ecef;border-color:#007bff}.grade-display:focus{outline:2px solid #007bff;outline-offset:2px}.grade-input-field{background-color:#fff;border:2px solid #007bff;border-radius:4px;font-size:14px;padding:4px 8px;width:100%}.grade-input-field:focus{box-shadow:0 0 0 2px #007bff40;outline:none}.max-points{color:#6c757d;font-size:12px;margin-left:2px}.grade-excused{color:#17a2b8;font-style:italic;font-weight:500}.assignment-table-empty{background-color:#f8f9fa;border-top:1px solid #dee2e6;color:#6c757d;padding:40px;text-align:center}.assignment-table-empty p{font-size:16px;margin:0}@media (max-width:768px){.assignment-name,.assignment-name-header{min-width:150px}.assignment-due-date,.assignment-due-date-header{min-width:100px}.assignment-grade,.assignment-grade-header,.assignment-status,.assignment-status-header{min-width:80px}.assignment-points,.assignment-points-header{flex:0 0 60px}.assignment-cell,.assignment-header-cell{padding:6px 4px}.assignment-name-text{font-size:14px}.assignment-description{font-size:11px}}@media (prefers-reduced-motion:reduce){.assignment-header-cell,.assignment-row,.grade-display{transition:none}}@media (prefers-contrast:high){.assignment-table-header{border-bottom:3px solid #000}.assignment-row{border-bottom:2px solid #000}.assignment-cell,.assignment-header-cell{border-right:2px solid #000}.status-badge{border:2px solid #000}}.chart-container{background-color:#fff;border-radius:8px;box-shadow:0 2px 10px #00000014;margin-bottom:24px;min-height:300px;padding:20px;position:relative}.chart-title{color:#333;font-size:18px;font-weight:500;margin-bottom:16px;text-align:center}.no-data-message{align-items:center;color:#757575;display:flex;flex-direction:column;height:200px;justify-content:center;padding:20px;text-align:center}.no-data-message p{font-size:16px;margin-bottom:8px}.no-data-message small{font-size:14px;opacity:.7}.chart-info{color:#666;font-size:14px;margin-top:16px;text-align:center}.grade-chart-container{isolation:isolate;margin-left:auto;margin-right:auto;max-width:220px;min-height:200px;overflow:hidden;position:relative;z-index:1}.grade-chart-wrapper{height:160px}.chart-pie,.grade-chart-wrapper{overflow:hidden;position:relative;z-index:1}.chart-pie{align-items:center;display:flex;height:100%;justify-content:center;max-height:100%;max-width:100%}.chart-pie canvas{max-height:100%!important;max-width:100%!important;object-fit:contain}.grade-chart-overlay{left:50%;pointer-events:none;position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%);white-space:nowrap;z-index:2}.grade-value{color:#333;font-size:24px;font-weight:600}.letter-grade{font-size:32px;font-weight:700;margin-top:-5px}.group-comparison-chart{height:400px}.progression-chart{height:450px}.chart-controls{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin-top:16px}.toggle-groups-button{background-color:#f5f5f5;border:1px solid #ddd;border-radius:4px;cursor:pointer;font-size:14px;margin:0 8px;padding:8px 12px;transition:background-color .2s}.toggle-groups-button:hover{background-color:#e0e0e0}.toggle-groups-button.active{background-color:#e3f2fd;border-color:#2196f3;color:#0d47a1}.grade-a{color:#2ecc71}.grade-b{color:#3498db}.grade-c{color:#f1c40f}.grade-d{color:#e67e22}.grade-f{color:#e74c3c}.grade-na{color:#95a5a6}@media (max-width:768px){.chart-container{margin-bottom:16px;padding:16px}.grade-chart-container{max-width:100%}.grade-chart-wrapper{height:140px}.group-comparison-chart,.progression-chart{height:350px}.grade-value{font-size:20px}.letter-grade{font-size:28px}}.chart-loading{align-items:center;background-color:#fffc;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:10}.chart-loading-spinner{margin-bottom:16px}.date-range-selector{align-items:center;display:flex;justify-content:center;margin-bottom:16px}.date-range-selector label{color:#666;font-size:14px;margin-right:8px}.date-range-selector select{background-color:#fff;border:1px solid #ddd;border-radius:4px;font-size:14px;padding:6px 10px}.analytics-container{margin:0 auto;max-width:1200px;padding:1.5rem}.analytics-header{margin-bottom:2rem}.analytics-header h2{color:var(--text-primary);font-size:1.75rem;margin-bottom:.5rem}.analytics-header p{color:var(--text-secondary);font-size:1rem;max-width:700px}.analytics-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));margin-bottom:2rem}.full-width{grid-column:1/-1}.analytics-card{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);height:100%;padding:1.5rem}.analytics-card h3{align-items:center;border-bottom:1px solid var(--gray-200);color:var(--text-primary);display:flex;font-size:1.125rem;justify-content:space-between;margin-bottom:1rem;padding-bottom:.75rem}.analytics-card-content{height:calc(100% - 3rem)}.metrics-grid{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.metric-card{background-color:var(--gray-100);border-radius:var(--border-radius);padding:1rem;text-align:center}.metric-value{color:var(--primary-color);font-size:1.75rem;font-weight:var(--font-weight-bold);margin-bottom:.25rem}.metric-label{color:var(--text-secondary);font-size:.875rem;line-height:1.2}.trend-chart-container{height:350px;margin-top:1rem;position:relative}.trend-chart-empty{align-items:center;background-color:var(--gray-100);border-radius:var(--border-radius);color:var(--text-secondary);display:flex;font-style:italic;height:100%;justify-content:center}.chart-legend{display:flex;flex-wrap:wrap;gap:1rem;margin-top:1rem}.legend-item{align-items:center;color:var(--text-secondary);display:flex;font-size:.875rem}.legend-color{border-radius:50%;height:12px;margin-right:.5rem;width:12px}.assignment-trend-container{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);margin-bottom:2rem;padding:1.5rem}.assignment-trend-container h3{color:var(--text-primary);font-size:1.125rem;margin-bottom:1rem}.assignment-trend-chart{height:400px;position:relative}.trend-controls{flex-wrap:wrap;gap:1rem;margin-bottom:1rem}.trend-controls,.trend-filter{align-items:center;display:flex}.trend-filter label{color:var(--text-secondary);font-size:.875rem;margin-right:.5rem}.trend-filter select{background-color:#fff;border:1px solid var(--gray-300);border-radius:var(--border-radius);color:var(--text-primary);font-size:.875rem;padding:.375rem .75rem}.performance-overview{background:linear-gradient(135deg,#fff,#f8f9fa);border-radius:12px;box-shadow:0 2px 8px #00000014;margin-bottom:2rem;padding:2rem}.performance-overview h3{color:var(--text-primary);font-size:1.5rem;font-weight:600;margin-bottom:1.5rem}.performance-grid{grid-gap:2rem;display:grid;gap:2rem;grid-template-columns:1fr 1.5fr}.kpi-section{display:flex;flex-direction:column;gap:1rem}.kpi-card{align-items:center;background-color:#fff;border-radius:10px;box-shadow:0 1px 3px #0000001a;display:flex;padding:1.25rem;transition:transform .2s,box-shadow .2s}.kpi-card:hover{box-shadow:0 4px 12px #00000026;transform:translateY(-2px)}.kpi-icon{align-items:center;border-radius:10px;display:flex;font-size:2rem;height:50px;justify-content:center;margin-right:1rem;width:50px}.kpi-card.primary .kpi-icon{background-color:#4a90e21a}.kpi-card.success .kpi-icon{background-color:#4caf501a}.kpi-card.warning .kpi-icon{background-color:#ff98001a}.kpi-content{flex:1 1}.kpi-value{color:var(--text-primary);font-size:1.75rem;font-weight:700;line-height:1;margin-bottom:.25rem}.kpi-label{color:var(--text-secondary);font-size:.875rem;font-weight:500}.assignment-breakdown{background-color:#fff;border-radius:10px;box-shadow:0 1px 3px #0000001a;padding:1.5rem}.assignment-breakdown h4{color:var(--text-primary);font-size:1rem;font-weight:600;margin-bottom:1rem}.breakdown-grid{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(5,1fr);margin-bottom:1.5rem}.breakdown-item{background-color:var(--gray-50);border-radius:8px;padding:.75rem;text-align:center;transition:background-color .2s}.breakdown-item:hover{background-color:var(--gray-100)}.breakdown-item.submitted{background-color:#4caf501a}.breakdown-item.missing{background-color:#f443361a}.breakdown-item.late{background-color:#ff98001a}.breakdown-item.upcoming{background-color:#2196f31a}.breakdown-label{color:var(--text-secondary);display:block;font-size:.75rem;font-weight:500;letter-spacing:.5px;margin-bottom:.25rem;text-transform:uppercase}.breakdown-value{color:var(--text-primary);display:block;font-size:1.5rem;font-weight:700}.completion-progress{margin-top:1rem}.progress-label{align-items:center;color:var(--text-secondary);display:flex;font-size:.875rem;font-weight:500;justify-content:space-between;margin-bottom:.5rem}.progress-percentage{color:var(--text-primary);font-weight:600}.progress-bar{background-color:var(--gray-200);border-radius:6px;height:12px;overflow:hidden;position:relative}.progress-fill{background:linear-gradient(90deg,#4caf50,#8bc34a);border-radius:6px;height:100%;transition:width .3s ease}@media (max-width:768px){.performance-grid{gap:1.5rem;grid-template-columns:1fr}.breakdown-grid{grid-template-columns:repeat(3,1fr)}.kpi-icon{height:40px;width:40px}.kpi-icon,.kpi-value{font-size:1.5rem}}@media (max-width:480px){.breakdown-grid{grid-template-columns:repeat(2,1fr)}}.grades-distribution{margin-top:2rem}.grades-distribution h3{color:var(--text-primary);font-size:1.125rem;margin-bottom:1rem}.distribution-chart{height:300px;position:relative}.time-distribution{margin-top:2rem}.time-distribution h3{color:var(--text-primary);font-size:1.125rem;margin-bottom:1rem}.donut-chart-container{align-items:center;display:flex;height:300px;justify-content:center}.donut-chart-legend{grid-gap:.5rem;display:grid;gap:.5rem;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));margin-top:1rem}.donut-legend-item{align-items:center;color:var(--text-secondary);display:flex;font-size:.875rem;padding:.25rem 0}.donut-color{height:12px;margin-right:.5rem;width:12px}.completion-stats{display:flex;flex-wrap:wrap;gap:1.5rem;margin-top:1.5rem}.completion-item{flex:1 1;min-width:200px}.completion-label{display:flex;justify-content:space-between;margin-bottom:.5rem}.completion-title{color:var(--text-secondary);font-size:.875rem}.completion-percentage{font-size:.875rem;font-weight:var(--font-weight-medium)}.completion-bar{background-color:var(--gray-200);border-radius:3px;height:6px;overflow:hidden}.completion-fill{background-color:var(--primary-color);border-radius:3px;height:100%}.assignment-tooltip{background-color:#000c;border-radius:var(--border-radius);color:#fff;font-size:.875rem;max-width:250px;padding:.75rem}.tooltip-title{border-bottom:1px solid #fff3;font-weight:var(--font-weight-medium);margin-bottom:.5rem;padding-bottom:.25rem}.tooltip-data{grid-gap:.25rem .75rem;display:grid;gap:.25rem .75rem;grid-template-columns:auto auto}.tooltip-label{color:#ffffffb3}.empty-state,.no-snapshots-message{padding:2rem;text-align:center}.empty-state{align-items:center;background-color:var(--gray-100);border-radius:var(--border-radius);display:flex;flex-direction:column;gap:1rem}.empty-state h4{color:var(--text-primary);margin:0 0 .5rem}.empty-state p{color:var(--text-secondary);margin:0 auto 1rem;max-width:500px}.create-snapshot-button{background-color:var(--primary-color);border:none;border-radius:var(--border-radius);color:#fff;cursor:pointer;font-size:1rem;font-weight:var(--font-weight-medium);padding:.75rem 1.5rem;transition:background-color .2s}.create-snapshot-button:hover{background-color:var(--primary-dark)}.create-snapshot-button:disabled{background-color:var(--gray-400);cursor:not-allowed}.analytics-message{margin-bottom:1.5rem}.success-message{background-color:var(--success-light);border-radius:var(--border-radius);color:var(--success);font-weight:var(--font-weight-medium);padding:.75rem 1rem}.snapshots-management{background-color:#fff;border-radius:var(--border-radius);box-shadow:var(--shadow);margin-top:2rem;padding:1.5rem}.snapshots-actions{align-items:center;display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between}.text-link{color:var(--primary-color);font-weight:var(--font-weight-medium);text-decoration:none}.text-link:hover{text-decoration:underline}.secondary-button{background-color:#fff;border:1px solid var(--primary-color);border-radius:var(--border-radius);color:var(--primary-color);cursor:pointer;padding:.5rem 1rem;transition:all .2s}.secondary-button:hover{background-color:var(--primary-light)}.trend-chart-loading{align-items:center;display:flex;height:350px;justify-content:center}@media (max-width:768px){.analytics-grid{grid-template-columns:1fr}.trend-controls{align-items:flex-start;flex-direction:column}.summary-stats{grid-template-columns:1fr}}@media (max-width:576px){.metrics-grid{grid-template-columns:1fr 1fr}.donut-chart-legend{grid-template-columns:1fr}}.submission-metrics{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin-bottom:2rem}.submission-metrics .metric-card.highlight{background-color:#e3f2fd;border-left:4px solid #2196f3}.submission-charts{display:flex;flex-direction:column;gap:2rem}.submission-charts .chart-container{height:400px;margin-bottom:1rem;overflow:hidden;position:relative}.submission-charts h4{color:var(--text-secondary);font-size:1rem;margin-bottom:1rem;text-align:center}.chart-wrapper{height:350px;position:relative;width:100%}@media (min-width:992px){.submission-charts{flex-direction:row}.submission-charts .chart-container{width:50%}}.submission-heatmap{grid-gap:3px;display:grid;gap:3px;grid-template-columns:repeat(7,1fr);margin-top:1rem}.heatmap-cell{aspect-ratio:1;border-radius:2px;transition:transform .15s ease}.heatmap-legends{margin-top:1rem}.heatmap-legend-item{align-items:center;display:flex;font-size:.75rem}.heatmap-legend-color{border-radius:2px;height:12px;margin-right:4px;width:12px}.heatmap-grid{display:flex;flex-direction:column;gap:3px}.heatmap-row{align-items:center;display:flex;height:30px}.day-label{color:var(--text-secondary);font-size:.75rem;font-weight:500;padding-right:10px;text-align:right;width:40px}.day-cells{display:flex;flex:1 1;gap:3px}.heatmap-cell{border-radius:3px;flex:1 1;height:30px;transition:transform .15s ease,opacity .15s ease}.heatmap-cell:hover{opacity:.9;transform:scale(1.1)}.submission-heatmap{display:none}.heatmap-legends{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;margin-top:1.5rem}.week-labels{display:flex;margin-bottom:6px}.day-label-spacer{flex-shrink:0;width:40px}.week-label-container{display:flex;flex:1 1;gap:3px}.week-label{color:var(--text-secondary);flex:1 1;font-size:.7rem;overflow:hidden;text-align:center;white-space:nowrap}.heatmap-container{display:flex;flex-direction:column;margin:1.5rem 0}@media (max-width:600px){.week-label:nth-child(odd){display:none}}@media (max-width:400px){.week-label{display:none}.week-label:first-child,.week-label:last-child,.week-label:nth-child(6){display:block}}
/*# sourceMappingURL=main.d29551e3.css.map*/