:root{--primary:#4f46e5;--primary-light:#6366f1;--primary-dark:#4338ca;--primary-bg:#eef2ff;--secondary:#7c3aed;--secondary-light:#8b5cf6;--success:#10b981;--success-bg:#d1fae5;--success-text:#065f46;--warning:#f59e0b;--warning-bg:#fef3c7;--warning-text:#92400e;--error:#ef4444;--error-dark:#dc2626;--error-bg:#fee2e2;--error-text:#991b1b;--neutral-50:#f9fafb;--neutral-100:#f3f4f6;--neutral-200:#e5e7eb;--neutral-300:#d1d5db;--neutral-400:#9ca3af;--neutral-500:#6b7280;--neutral-600:#4b5563;--neutral-700:#374151;--neutral-800:#1f2937;--neutral-900:#111827;--bg-body:#f9fafb;--bg-white:#fff;--bg-dark:#0f172a;--text-primary:#1f2937;--text-secondary:#4b5563;--text-muted:#6b7280;--text-placeholder:#9ca3af;--text-on-dark:#fff;--text-on-dark-muted:#ffffffb3;--border-default:#e5e7eb;--border-light:#f3f4f6;--border-focus:#4f46e5;--gradient-brand:linear-gradient(135deg,#667eea,#764ba2);--gradient-hero:linear-gradient(135deg,#0f0c29,#302b63 50%,#24243e);--gradient-page-loader:linear-gradient(135deg,#0f0a1f,#1a1035 50%,#0d1b2a);--accent-lectures:#667eea;--accent-lectures-end:#764ba2;--accent-assignments:#7c3aed;--accent-tutorials:#10b981;--accent-tutorials-end:#059669;--accent-exams:#ef4444;--accent-exams-end:#dc2626;--accent-prerequisites:#6366f1;--accent-resources:#6366f1;--accent-resources-end:#4f46e5;--font-sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;--font-mono:"JetBrains Mono",source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace;--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:2rem;--font-size-4xl:2.5rem;--space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:32px;--space-2xl:48px;--space-3xl:64px;--container-max:1280px;--container-wide:1400px;--header-height:52px;--header-height-mobile:48px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-2xl:24px;--radius-pill:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--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-fast:150ms ease;--transition-normal:250ms ease;--transition-smooth:300ms cubic-bezier(0.4,0,0.2,1);--hover-lift-sm:-2px;--hover-lift-md:-4px;--header-bg:#0f172a;--header-bg-scrolled:#0f172afa;--footer-bg:#0f172a;--footer-text:#94a3b8;--footer-heading:#f1f5f9;--footer-border:#ffffff14;--footer-link-hover:#4f46e5;--z-dropdown:100;--z-sticky:200;--z-modal-overlay:900;--z-modal:1000;--z-toast:1100;--text-white:#fff;--text-light:#ffffffd9;--color-primary:var(--primary);--color-primary-hover:var(--primary-dark);--color-primary-light:var(--primary-bg);--color-secondary:var(--neutral-200);--color-secondary-text:var(--neutral-700);--color-secondary-hover:var(--neutral-300);--color-danger:var(--error);--color-danger-hover:var(--error-dark);--color-border:var(--border-default);--color-border-light:var(--border-light);--color-border-focus:var(--border-focus);--color-border-error:var(--error);--color-bg-white:var(--bg-white);--color-bg-gray:var(--neutral-50);--color-text-primary:var(--text-primary);--color-text-secondary:var(--text-secondary);--color-text-muted:var(--text-muted);--color-text-placeholder:var(--text-placeholder);--color-success-bg:var(--success-bg);--color-success-text:var(--success-text);--color-warning-bg:var(--warning-bg);--color-warning-text:var(--warning-text);--color-error-bg:var(--error-bg);--color-error-text:var(--error-text);--color-neutral-bg:var(--neutral-100);--color-neutral-text:var(--neutral-600);--spacing-sm:var(--space-sm);--spacing-md:var(--space-md);--spacing-lg:var(--space-lg);--spacing-xl:var(--space-xl)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeSlideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.toast-container{flex-direction:column;pointer-events:none;position:fixed;right:24px;right:var(--space-lg);top:24px;top:var(--space-lg);z-index:1100;z-index:var(--z-toast)}.toast,.toast-container{display:flex;gap:8px;gap:var(--space-sm)}.toast{align-items:center;animation:toastSlideIn .3s ease,toastFadeOut .3s ease 3.7s forwards;background:#fff;background:var(--bg-white);border-left:4px solid #d1d5db;border-left:4px solid var(--neutral-300);border-radius:8px;border-radius:var(--radius-md);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;box-shadow:var(--shadow-xl);color:#1f2937;color:var(--text-primary);font-size:.875rem;font-size:var(--font-size-sm);font-weight:500;max-width:420px;min-width:300px;padding:16px 24px;padding:var(--space-md) var(--space-lg);pointer-events:all}.toast.toast-success{border-left-color:#10b981;border-left-color:var(--success)}.toast.toast-error{border-left-color:#ef4444;border-left-color:var(--error)}.toast.toast-warning{border-left-color:#f59e0b;border-left-color:var(--warning)}.toast.toast-info{border-left-color:#4f46e5;border-left-color:var(--primary)}.toast-icon{flex-shrink:0;font-size:1.1rem}.toast-message{flex:1 1}.toast-close{background:none;border:none;color:#6b7280;color:var(--text-muted);cursor:pointer;flex-shrink:0;font-size:1rem;line-height:1;padding:2px}.toast-close:hover{color:#1f2937;color:var(--text-primary)}@keyframes toastSlideIn{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@keyframes toastFadeOut{0%{opacity:1}to{opacity:0;transform:translateX(40px)}}.confirm-overlay{align-items:center;animation:fadeIn .15s ease;background:#00000080;display:flex;inset:0;justify-content:center;position:fixed;z-index:1000;z-index:var(--z-modal)}.confirm-dialog{animation:fadeInUp .2s ease;background:#fff;background:var(--bg-white);border-radius:12px;border-radius:var(--radius-lg);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;box-shadow:var(--shadow-xl);max-width:420px;padding:32px;padding:var(--space-xl);width:90%}.confirm-dialog h3{color:#1f2937;color:var(--text-primary);font-size:1.125rem;font-size:var(--font-size-lg);margin:0 0 8px;margin:0 0 var(--space-sm)}.confirm-dialog p{color:#4b5563;color:var(--text-secondary);font-size:.875rem;font-size:var(--font-size-sm);line-height:1.6;margin:0 0 24px;margin:0 0 var(--space-lg)}.confirm-actions{display:flex;gap:8px;gap:var(--space-sm);justify-content:flex-end}.confirm-btn{border:none;border-radius:8px;border-radius:var(--radius-md);cursor:pointer;font-size:.875rem;font-size:var(--font-size-sm);font-weight:600;padding:8px 16px;padding:var(--space-sm) var(--space-md);transition:background .15s ease,transform .15s ease;transition:background var(--transition-fast),transform var(--transition-fast)}.confirm-btn:active{transform:scale(.97)}.confirm-btn-cancel{background:#f3f4f6;background:var(--neutral-100);color:#4b5563;color:var(--text-secondary)}.confirm-btn-cancel:hover{background:#e5e7eb;background:var(--neutral-200)}.confirm-btn-danger{background:#ef4444;background:var(--error);color:#fff}.confirm-btn-danger:hover{background:#dc2626;background:var(--error-dark)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.skeleton{animation:shimmer 1.5s ease-in-out infinite;background:linear-gradient(90deg,#f3f4f6 25%,#e5e7eb 50%,#f3f4f6 75%);background:linear-gradient(90deg,var(--neutral-100) 25%,var(--neutral-200) 50%,var(--neutral-100) 75%);background-size:200% 100%;border-radius:8px;border-radius:var(--radius-md)}.skeleton-text{height:14px;margin-bottom:8px;margin-bottom:var(--space-sm);width:80%}.skeleton-text.short{width:40%}.skeleton-title{height:22px;margin-bottom:16px;margin-bottom:var(--space-md);width:60%}.skeleton-card{border-radius:12px;border-radius:var(--radius-lg);height:200px}.page-loader{align-items:center;background:linear-gradient(135deg,#0f0a1f,#1a1035 50%,#0d1b2a);background:var(--gradient-page-loader);display:flex;height:100vh;justify-content:center}.page-loader-inner{text-align:center}.page-loader-spinner{animation:spin .8s linear infinite;border:3px solid #a78bfa33;border-radius:50%;border-top-color:#a78bfa;height:40px;margin:0 auto 16px;width:40px}.page-loader-text{color:#a78bfa;font-size:1rem;font-size:var(--font-size-base);font-weight:500}.error-boundary{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);background:var(--gradient-brand);display:flex;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-family:var(--font-sans);justify-content:center;min-height:100vh;padding:20px}.error-boundary-card{background:#fff;border-radius:16px;border-radius:var(--radius-xl);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;box-shadow:var(--shadow-xl);max-width:500px;padding:48px;padding:var(--space-2xl);text-align:center;width:100%}.error-boundary-icon{font-size:64px;margin-bottom:24px;margin-bottom:var(--space-lg)}.error-boundary-title{color:#1f2937;color:var(--text-primary);font-size:1.5rem;font-size:var(--font-size-2xl);font-weight:700;margin:0 0 16px;margin:0 0 var(--space-md)}.error-boundary-message{color:#6b7280;color:var(--text-muted);font-size:1rem;font-size:var(--font-size-base);line-height:1.6;margin:0 0 24px;margin:0 0 var(--space-lg)}.error-boundary-actions{display:flex;flex-direction:column;gap:8px;gap:var(--space-sm);margin-top:24px;margin-top:var(--space-lg)}.error-boundary-btn{border:none;border-radius:8px;border-radius:var(--radius-md);cursor:pointer;font-size:1rem;font-size:var(--font-size-base);font-weight:600;padding:14px 28px;transition:transform .15s ease,box-shadow .15s ease;transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.error-boundary-btn:hover{transform:translateY(-2px);transform:translateY(var(--hover-lift-sm))}.error-boundary-btn-primary{background:linear-gradient(135deg,#667eea,#764ba2);background:var(--gradient-brand);color:#fff}.error-boundary-btn-secondary{background:#eef2ff;background:var(--primary-bg);color:#4f46e5;color:var(--primary)}.error-boundary-btn-outline{background:#0000;border:2px solid #e5e7eb;border:2px solid var(--border-default);color:#6b7280;color:var(--text-muted)}.error-boundary-details{background:#fee2e2;background:var(--error-bg);border-radius:8px;border-radius:var(--radius-md);margin-top:24px;margin-top:var(--space-lg);padding:16px;padding:var(--space-md);text-align:left}.error-boundary-details summary{color:#dc2626;color:var(--error-dark);cursor:pointer;font-weight:600;margin-bottom:8px;margin-bottom:var(--space-sm)}.error-boundary-details pre{color:#7f1d1d;font-size:.75rem;font-size:var(--font-size-xs);max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-word}.error-boundary-help{color:#9ca3af;color:var(--text-placeholder);font-size:.875rem;font-size:var(--font-size-sm);margin-top:24px;margin-top:var(--space-lg)}.protected-loading{align-items:center;display:flex;height:100vh;justify-content:center}.protected-loading-dark{background:linear-gradient(135deg,#0f0a1f,#1a1035 50%,#0d1b2a);background:var(--gradient-page-loader)}.protected-loading-dark .protected-loading-text{color:#a78bfa;font-size:1.125rem;font-size:var(--font-size-lg)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}code{background:var(--neutral-100);border-radius:4px;font-family:var(--font-mono);font-size:.9em;padding:2px 6px}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-behavior:smooth}body{background-color:var(--bg-body);color:var(--text-primary);font-family:var(--font-sans);font-size:16px;line-height:1.6}h1,h2,h3,h4,h5,h6{color:var(--neutral-900);font-weight:700;line-height:1.3}h1{font-size:2.5rem;letter-spacing:-.02em}h2{font-size:2rem;letter-spacing:-.01em}h3{font-size:1.5rem}h4{font-size:1.25rem}h5{font-size:1.125rem}h6{font-size:1rem}p{color:var(--text-secondary);line-height:1.7}a{color:var(--primary);text-decoration:none;transition:color .2s ease}a:hover{color:var(--primary-dark)}::selection{background-color:#4f46e533;color:var(--text-primary)}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:var(--neutral-100)}::-webkit-scrollbar-thumb{background:var(--neutral-300);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--neutral-400)}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.visually-hidden{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.App{display:flex;flex-direction:column;min-height:100vh}.feedback-widget{bottom:28px;font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;position:fixed;right:28px;z-index:9999}.feedback-fab{align-items:center;background:linear-gradient(135deg,#6366f1,#8b5cf6);border:none;border-radius:50%;box-shadow:0 4px 20px #6366f173,0 2px 8px #00000026;color:#fff;cursor:pointer;display:flex;height:56px;justify-content:center;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);width:56px}.feedback-fab:hover{box-shadow:0 6px 28px #6366f18c,0 4px 12px #0003;transform:scale(1.08)}.feedback-fab:active{transform:scale(.95)}.feedback-fab.fab-open{background:linear-gradient(135deg,#ef4444,#f97316);transform:rotate(0deg)}.feedback-fab.fab-pulse:after{animation:fabPulse 2s ease-in-out infinite;border:3px solid #6366f180;border-radius:50%;content:"";inset:-6px;position:absolute}@keyframes fabPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:0;transform:scale(1.25)}}.feedback-panel{animation:panelSlideIn .35s cubic-bezier(.16,1,.3,1);background:#1a1a2e;border-radius:16px;bottom:72px;box-shadow:0 12px 48px #00000059,0 0 0 1px #ffffff0f;max-height:520px;overflow-y:auto;position:absolute;right:0;scrollbar-color:#ffffff26 #0000;scrollbar-width:thin;width:360px}.feedback-panel::-webkit-scrollbar{width:6px}.feedback-panel::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:3px}@keyframes panelSlideIn{0%{opacity:0;transform:translateY(16px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.feedback-panel-header{border-bottom:1px solid #ffffff0f;padding:20px 20px 12px}.feedback-panel-header h3{color:#f1f5f9;font-size:1.15rem;font-weight:700;margin:0 0 4px}.feedback-panel-header p{color:#94a3b8;font-size:.85rem;margin:0}.feedback-form{gap:14px;padding:16px 20px 20px}.feedback-field,.feedback-form{display:flex;flex-direction:column}.feedback-field{gap:6px}.feedback-field label{color:#cbd5e1;font-size:.8rem;font-weight:600;letter-spacing:.5px;text-transform:uppercase}.feedback-field .required{color:#f87171}.feedback-field .optional{color:#64748b;font-size:.75rem;font-weight:400;text-transform:none}.feedback-field select,.feedback-field textarea{background:#ffffff0f;border:1px solid #ffffff1a;border-radius:10px;color:#e2e8f0;font-family:inherit;font-size:.88rem;padding:10px 12px;transition:border-color .2s,box-shadow .2s}.feedback-field select:focus,.feedback-field textarea:focus{border-color:#6366f1;box-shadow:0 0 0 3px #6366f133;outline:none}.feedback-field select option{background:#1e1e3a;color:#e2e8f0}.feedback-field textarea{min-height:80px;resize:vertical}.char-count{color:#64748b;font-size:.72rem;text-align:right}.star-rating{align-items:center;display:flex;gap:4px}.star{background:none;border:none;color:#475569;cursor:pointer;font-size:1.6rem;line-height:1;padding:0 2px;transition:color .15s,transform .15s}.star:hover{transform:scale(1.2)}.star.star-filled{color:#fbbf24;text-shadow:0 0 8px #fbbf2466}.rating-label{color:#fbbf24;font-size:.8rem;font-weight:600;margin-left:8px}.feedback-error{background:#ef44441f;border:1px solid #ef44444d;border-radius:8px;color:#fca5a5;font-size:.82rem;padding:8px 12px}.feedback-submit-btn{align-items:center;background:linear-gradient(135deg,#6366f1,#8b5cf6);border:none;border-radius:10px;color:#fff;cursor:pointer;display:flex;font-size:.92rem;font-weight:600;gap:8px;justify-content:center;padding:12px;transition:all .2s}.feedback-submit-btn:hover:not(:disabled){background:linear-gradient(135deg,#4f46e5,#7c3aed);box-shadow:0 4px 16px #6366f159}.feedback-submit-btn:disabled{cursor:not-allowed;opacity:.6}.btn-spinner{animation:spin .6s linear infinite;border:2px solid #ffffff4d;border-radius:50%;border-top-color:#fff;display:inline-block;height:16px;width:16px}@keyframes spin{to{transform:rotate(1turn)}}.feedback-success{padding:40px 24px;text-align:center}.success-icon{align-items:center;animation:successPop .4s cubic-bezier(.16,1,.3,1);background:linear-gradient(135deg,#22c55e,#16a34a);border-radius:50%;color:#fff;display:flex;font-size:1.6rem;height:56px;justify-content:center;margin:0 auto 16px;width:56px}@keyframes successPop{0%{transform:scale(0)}to{transform:scale(1)}}.feedback-success h3{color:#f1f5f9;font-size:1.2rem;margin:0 0 8px}.feedback-success p{color:#94a3b8;font-size:.9rem;margin:0 0 20px}.feedback-close-btn{background:#ffffff14;border:1px solid #ffffff1f;border-radius:8px;color:#e2e8f0;cursor:pointer;font-size:.88rem;padding:8px 24px;transition:background .2s}.feedback-close-btn:hover{background:#ffffff24}@media (max-width:480px){.feedback-widget{bottom:16px;right:16px}.feedback-panel{max-height:70vh;right:-8px;width:calc(100vw - 32px)}.feedback-fab{height:50px;width:50px}}