:root{--purple-50: #faf5ff;--purple-100: #f3e8ff;--purple-200: #e9d5ff;--purple-300: #d8b4fe;--purple-400: #c084fc;--purple-500: #a855f7;--purple-600: #9333ea;--purple-700: #7c3aed;--purple-800: #6d28d9;--purple-900: #5b21b6;--accent: #7c3aed;--accent-hover: #6d28d9;--accent-light: #a855f7;--accent-glow: rgba(124, 58, 237, .25);--success: #22c55e;--warning: #f59e0b;--danger: #ef4444;--info: #3b82f6;--bg-base: #0f0a1e;--bg-surface: #1a1130;--bg-card: #221840;--bg-hover: #2d2050;--bg-input: #1a1130;--border: rgba(124, 58, 237, .2);--border-hover: rgba(124, 58, 237, .5);--text-primary: #f1f0ff;--text-secondary: #a89fc8;--text-muted: #6b648a;--shadow-sm: 0 1px 3px rgba(0,0,0,.4);--shadow-md: 0 4px 16px rgba(0,0,0,.5);--shadow-lg: 0 8px 32px rgba(0,0,0,.6);--shadow-glow: 0 0 24px rgba(124,58,237,.3);--radius-sm: 6px;--radius-md: 12px;--radius-lg: 18px;--radius-xl: 24px;--font-sans: "Inter", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--nav-height: 64px;--sidebar-width: 240px;--transition: .18s ease}[data-theme=light]{--bg-base: #f8f5ff;--bg-surface: #ffffff;--bg-card: #faf7ff;--bg-hover: #f3e8ff;--bg-input: #ffffff;--border: rgba(124, 58, 237, .15);--border-hover: rgba(124, 58, 237, .4);--text-primary: #1e1533;--text-secondary: #5b4f7a;--text-muted: #9182b3;--shadow-sm: 0 1px 3px rgba(124,58,237,.08);--shadow-md: 0 4px 16px rgba(124,58,237,.12);--shadow-lg: 0 8px 32px rgba(124,58,237,.15);--shadow-glow: 0 0 24px rgba(124,58,237,.15)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;font-size:16px}body{font-family:var(--font-sans);background:var(--bg-base);color:var(--text-primary);line-height:1.6;min-height:100vh;-webkit-font-smoothing:antialiased;transition:background var(--transition),color var(--transition)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-base)}::-webkit-scrollbar-thumb{background:var(--purple-700);border-radius:3px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}h1{font-size:clamp(1.75rem,4vw,2.5rem);font-weight:800;line-height:1.15}h2{font-size:clamp(1.35rem,3vw,1.875rem);font-weight:700}h3{font-size:clamp(1.1rem,2vw,1.375rem);font-weight:600}h4{font-size:1.1rem;font-weight:600}p{color:var(--text-secondary)}a{color:var(--accent-light);text-decoration:none}a:hover{text-decoration:underline}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border-radius:var(--radius-md);font-family:var(--font-sans);font-size:.9rem;font-weight:600;cursor:pointer;border:none;transition:all var(--transition);white-space:nowrap;text-decoration:none}.btn-primary{background:var(--accent);color:#fff;box-shadow:0 4px 14px #7c3aed66}.btn-primary:hover{background:var(--accent-hover);transform:translateY(-1px);box-shadow:var(--shadow-glow)}.btn-secondary{background:var(--bg-card);color:var(--text-primary);border:1px solid var(--border)}.btn-secondary:hover{background:var(--bg-hover);border-color:var(--border-hover)}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--bg-hover);color:var(--text-primary)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{background:#dc2626}.btn-sm{padding:6px 14px;font-size:.82rem}.btn-lg{padding:14px 28px;font-size:1rem}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.btn-icon{padding:8px;border-radius:var(--radius-sm)}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;transition:border-color var(--transition),box-shadow var(--transition)}.card:hover{border-color:var(--border-hover)}.card-glow{box-shadow:var(--shadow-glow);border-color:var(--border-hover)}.input,.select,.textarea{width:100%;padding:10px 14px;background:var(--bg-input);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-md);font-family:var(--font-sans);font-size:.9rem;transition:border-color var(--transition),box-shadow var(--transition);outline:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.input::placeholder{color:var(--text-muted)}.textarea{resize:vertical;min-height:90px}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.label{display:block;font-size:.82rem;font-weight:600;color:var(--text-secondary);margin-bottom:6px}.form-group{display:flex;flex-direction:column;gap:4px;margin-bottom:16px}.form-error{font-size:.8rem;color:var(--danger);margin-top:4px}.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.badge-purple{background:#7c3aed33;color:var(--purple-300)}.badge-green{background:#22c55e26;color:#4ade80}.badge-amber{background:#f59e0b26;color:#fbbf24}.badge-red{background:#ef444426;color:#f87171}.badge-blue{background:#3b82f626;color:#60a5fa}.badge-grey{background:#ffffff14;color:var(--text-secondary)}.progress-bar{height:6px;background:var(--bg-hover);border-radius:3px;overflow:hidden}.progress-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--purple-700),var(--purple-400));transition:width .6s cubic-bezier(.4,0,.2,1)}.divider{height:1px;background:var(--border);margin:20px 0}.gradient-text{background:linear-gradient(135deg,var(--purple-400),var(--purple-200));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.accent-card{background:linear-gradient(135deg,#7c3aed26,#a855f70d);border:1px solid rgba(124,58,237,.3)}.tabs{display:flex;gap:4px;background:var(--bg-surface);padding:4px;border-radius:var(--radius-md);border:1px solid var(--border)}.tab{flex:1;padding:8px 16px;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all var(--transition);text-align:center}.tab.active{background:var(--accent);color:#fff;box-shadow:0 2px 8px #7c3aed66}.tab:hover:not(.active){background:var(--bg-hover);color:var(--text-primary)}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}@media (max-width: 900px){.grid-4,.grid-3{grid-template-columns:repeat(2,1fr)}}@media (max-width: 640px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.stat-card{display:flex;flex-direction:column;gap:6px}.stat-value{font-size:1.75rem;font-weight:800;color:var(--text-primary);line-height:1}.stat-label{font-size:.8rem;color:var(--text-muted);font-weight:500}.toast-custom{background:var(--bg-card)!important;color:var(--text-primary)!important;border:1px solid var(--border)!important;border-radius:var(--radius-md)!important}.modal-overlay{position:fixed!important;top:0!important;left:0!important;width:100vw!important;height:100vh!important;z-index:9999!important;background:#000000a6!important;display:flex!important;align-items:center!important;justify-content:center!important;padding:1rem!important;box-sizing:border-box!important}.modal{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;position:relative;z-index:10000;box-sizing:border-box}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem}.modal-title{font-weight:700;font-size:1.05rem}@keyframes modalIn{0%{opacity:0;transform:scale(.95) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.modal-title{font-size:1.2rem;font-weight:700}.app-layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);flex-shrink:0;background:var(--bg-surface);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:20px 12px;position:fixed;top:0;left:0;height:100vh;z-index:100;transition:transform var(--transition);overflow-y:auto}.main-content{flex:1;margin-left:var(--sidebar-width);padding:28px;min-height:100vh;max-width:1400px}@media (max-width: 768px){.sidebar{transform:translate(-100%)}.sidebar.open{transform:translate(0)}.main-content{margin-left:0;padding:16px 16px 80px}}.mobile-nav{display:none;position:fixed;bottom:0;left:0;right:0;z-index:200;background:var(--bg-surface);border-top:1px solid var(--border);padding:8px 0 max(8px,env(safe-area-inset-bottom))}@media (max-width: 768px){.mobile-nav{display:flex}}.mobile-nav-items{display:flex;width:100%;justify-content:space-around;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;padding:0 4px}.mobile-nav-items::-webkit-scrollbar{display:none}.mobile-nav-item{display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 12px;border-radius:var(--radius-sm);color:var(--text-muted);font-size:.7rem;font-weight:500;cursor:pointer;transition:all var(--transition);border:none;background:transparent;text-decoration:none;flex-shrink:0;min-width:64px}.mobile-nav-item.active{color:var(--accent-light)}@keyframes flicker{0%,to{transform:scale(1) rotate(-2deg)}50%{transform:scale(1.05) rotate(2deg)}}.streak-fire{animation:flicker 1.5s ease-in-out infinite;display:inline-block}.xp-bar-fill{background:linear-gradient(90deg,var(--purple-700),var(--purple-400),#c084fc);box-shadow:0 0 8px #a855f799}.subj-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.cal-day{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:4px 2px;border-radius:var(--radius-sm);cursor:pointer;transition:background var(--transition);font-size:.8rem;position:relative;overflow:hidden;min-height:52px}.cal-day:hover{background:var(--bg-hover)}.cal-day.today{background:#7c3aed33;border:1px solid var(--accent)}.cal-day.has-session:after{content:"";position:absolute;bottom:4px;left:50%;transform:translate(-50%);width:4px;height:4px;border-radius:50%;background:var(--accent-light)}.cal-day.completed:after{background:var(--success)}.cal-day.other-month{opacity:.3}.table-wrapper{overflow-x:auto;border-radius:var(--radius-md);border:1px solid var(--border)}table{width:100%;border-collapse:collapse;font-size:.875rem}thead{background:var(--bg-surface)}th{padding:12px 16px;text-align:left;font-weight:600;color:var(--text-secondary);font-size:.8rem;text-transform:uppercase;letter-spacing:.04em}td{padding:12px 16px;border-top:1px solid var(--border);color:var(--text-primary)}tr:hover td{background:var(--bg-hover)}.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-center{display:flex;align-items:center;justify-content:center;min-height:200px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:48px 24px;text-align:center}.empty-icon{font-size:3rem;opacity:.4}[title]{position:relative}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .3s ease forwards}@keyframes slideIn{0%{opacity:0;transform:translate(-12px)}to{opacity:1;transform:translate(0)}}.slide-in{animation:slideIn .25s ease forwards}.conf-dots{display:flex;gap:4px}.conf-dot{width:12px;height:12px;border-radius:50%;border:2px solid var(--border);cursor:pointer;transition:all var(--transition)}.conf-dot.filled-1{background:var(--danger);border-color:var(--danger)}.conf-dot.filled-2{background:var(--warning);border-color:var(--warning)}.conf-dot.filled-3{background:#eab308;border-color:#eab308}.conf-dot.filled-4{background:#84cc16;border-color:#84cc16}.conf-dot.filled-5{background:var(--success);border-color:var(--success)}@keyframes skeletonPulse{0%{opacity:.6}50%{opacity:1}to{opacity:.6}}.skeleton-pulse{animation:skeletonPulse 1.5s ease-in-out infinite}@media (max-width: 600px){h1{font-size:1.6rem}h2{font-size:1.3rem}h3{font-size:1.15rem}.card{padding:14px!important}.stat-card{padding:12px 14px!important}.grid-2,.grid-4,.grid-3{gap:12px!important}.main-content{padding:12px 12px 90px!important}}@media (max-width: 600px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr!important}.card{padding:12px 14px!important}.card[style*="display: flex"]{flex-wrap:wrap!important;gap:8px!important}.stat-card div:nth-child(2){font-size:1.25rem!important}.btn{padding:8px 14px!important;font-size:.8rem!important}}
