/* ═══════════════════════════════════════════════════════════════════════════ 🦄 UNICORN THEME — Maximum magic. No apologies. ═══════════════════════════════════════════════════════════════════════════ */ @import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700;800;900&display=swap'); :root { --u-bg: #1a0840; --u-sidebar: #120630; --u-purple: #6d28d9; --u-pink: #ff69b4; --u-pink-dark: #db2777; --u-pink-glow: rgba(255, 105, 180, 0.35); --u-content: #fdf4ff; --u-card: #ffffff; --u-text-dark: #3b0764; --u-text-mid: #7e22ce; --u-text-pale: #fce4ff; --u-muted: #c4a0dc; --u-green: #34d399; --u-red: #f87171; --theme-accent: #ff69b4; /* compat */ --rainbow: linear-gradient(90deg, #ff6ec7 0%, #c084fc 20%, #60a5fa 40%, #34d399 60%, #fbbf24 80%, #ff6ec7 100%); } /* ─── Spacing & typography ───────────────────────────────────────────────── */ body { font-family: 'Nunito', sans-serif; } h1 { font-size: 2em; font-weight: 900; } header { padding: 24px 44px; } .sidebar-item { padding: 12px 16px; font-size: 0.93em; line-height: 1.4; } .points-display { padding: 14px 26px; text-align: center; } .points-label { font-size: 0.72em; font-weight: 700; margin-bottom: 4px; } .points-value { font-size: 2.2em; font-weight: 900; } .user-name { font-size: 0.85em; font-weight: 600; } .logout-button { font-size: 0.8em; padding: 5px 14px; } .progress-section { padding: 20px 44px; } .progress-label { margin-bottom: 10px; font-size: 0.8em; font-weight: 700; } .progress-bar-container { margin-bottom: 6px; } .progress-text { font-size: 0.8em; font-weight: 700; } .task-section { padding: 36px 44px; } .chapter-description { padding: 20px 26px; margin-bottom: 32px; font-size: 1.05em; line-height: 1.8; } .task-container { gap: 28px; } .task-card { padding: 32px; } .task-header { margin-bottom: 20px; padding-bottom: 16px; } .task-title { font-size: 1.05em; font-weight: 800; } .task-points { padding: 5px 16px; font-size: 0.82em; font-weight: 800; } .task-question { font-size: 1.15em; margin: 22px 0; line-height: 1.8; font-weight: 600; } .task-input-group { gap: 14px; margin: 24px 0 14px; padding-top: 20px; } .task-input { font-size: 1.2em; padding: 12px 18px; width: 160px; font-weight: 700; } .task-button { padding: 12px 32px; font-size: 1em; font-weight: 800; } .task-status { margin-top: 16px; font-size: 1em; font-weight: 700; } .confetti { width: 10px; height: 10px; } .message { padding: 14px 24px; font-size: 1em; font-weight: 700; } .auth-card { padding: 40px; } .auth-title { font-size: 1.7em; font-weight: 900; margin-bottom: 24px; } .auth-tabs { margin-bottom: 24px; } .auth-tab { padding: 8px 20px; font-size: 0.9em; font-weight: 700; } .auth-input { padding: 12px 16px; margin-bottom: 12px; font-size: 1em; } .auth-error { font-size: 0.85em; margin-bottom: 10px; } .auth-button { padding: 14px; font-size: 1em; font-weight: 900; } .reset-button { padding: 10px 12px; font-size: 0.8em; font-weight: 600; } .class-picker-card { padding: 44px; } .class-picker-title { font-size: 1.6em; font-weight: 900; margin-bottom: 10px; } .class-picker-subtitle { font-size: 0.92em; margin-bottom: 32px; } .class-list { gap: 16px; } .class-card { padding: 20px 24px; gap: 18px; } .class-card-icon { font-size: 2.6em; } .class-card-name { font-size: 1.15em; font-weight: 800; margin-bottom: 5px; } .class-card-desc { font-size: 0.87em; } .completion-icon { font-size: 3.6em; margin-bottom: 18px; } /* ─── Full-page background with stars ───────────────────────────────────── */ body { background: var(--u-bg); background-image: radial-gradient(1px 1px at 15% 25%, rgba(255,255,255,0.6) 0%, transparent 100%), radial-gradient(1px 1px at 72% 8%, rgba(255,255,255,0.5) 0%, transparent 100%), radial-gradient(1px 1px at 44% 60%, rgba(255,255,255,0.4) 0%, transparent 100%), radial-gradient(1px 1px at 88% 45%, rgba(255,255,255,0.6) 0%, transparent 100%), radial-gradient(1px 1px at 5% 80%, rgba(255,255,255,0.3) 0%, transparent 100%), radial-gradient(2px 2px at 30% 70%, rgba(255,105,180,0.5) 0%, transparent 100%), radial-gradient(2px 2px at 60% 30%, rgba(192,132,252,0.5) 0%, transparent 100%); } /* ─── Sidebar ────────────────────────────────────────────────────────────── */ .sidebar { background: var(--u-sidebar); border-right: 1px solid rgba(255, 105, 180, 0.15); box-shadow: 4px 0 30px rgba(0, 0, 0, 0.6); } .sidebar::-webkit-scrollbar { width: 3px; } .sidebar::-webkit-scrollbar-thumb { background: var(--u-pink); border-radius: 99px; } .sidebar-header { padding: 28px 20px 22px; border-bottom: 1px solid rgba(255, 105, 180, 0.15); background: linear-gradient(180deg, rgba(255,105,180,0.08) 0%, transparent 100%); } .sidebar-header h2 { color: var(--u-muted); font-size: 0.75em; font-weight: 800; letter-spacing: 2px; text-transform: uppercase; } .sidebar-item { border-radius: 10px; margin: 3px 10px; color: var(--u-muted); font-weight: 600; transition: background 0.18s, color 0.15s, transform 0.15s; } .sidebar-item:hover { background: rgba(255, 105, 180, 0.12); color: var(--u-text-pale); transform: translateX(4px); } .sidebar-item.active { background: linear-gradient(135deg, var(--u-pink), var(--u-purple)); color: #fff; font-weight: 900; box-shadow: 0 4px 20px var(--u-pink-glow); } .sidebar-item.completed { background: rgba(52, 211, 153, 0.1); color: #6ee7b7; } .sidebar-item.completed.active { background: linear-gradient(135deg, var(--u-pink), var(--u-purple)); color: #fff; } /* ─── Main content ───────────────────────────────────────────────────────── */ .main-content, .container { background: var(--u-content); } /* ─── Header ─────────────────────────────────────────────────────────────── */ header { background: var(--u-bg); border-bottom: 4px solid transparent; border-image: var(--rainbow) 1; } h1 { font-weight: 900; background: var(--rainbow); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; background-size: 300% 100%; animation: rainbowSlide 5s linear infinite; } @keyframes rainbowSlide { 0% { background-position: 0% 50%; } 100% { background-position: 300% 50%; } } /* ─── Points ─────────────────────────────────────────────────────────────── */ .points-display { background: rgba(255, 105, 180, 0.1); border: 2px solid var(--u-pink); border-radius: 16px; box-shadow: 0 0 20px var(--u-pink-glow); } .points-label { color: var(--u-muted); text-transform: uppercase; letter-spacing: 1.5px; } .points-value { color: var(--u-pink); } /* ─── User area ──────────────────────────────────────────────────────────── */ .user-name { color: var(--u-muted); } .logout-button { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.12); color: var(--u-muted); border-radius: 8px; transition: border-color 0.2s, color 0.2s, background 0.2s; } .logout-button:hover { border-color: var(--u-pink); color: var(--u-pink); background: rgba(255, 105, 180, 0.1); } /* ─── Progress ───────────────────────────────────────────────────────────── */ .progress-section { background: rgba(109, 40, 217, 0.05); border-bottom: 1px solid rgba(255, 105, 180, 0.1); } .progress-label { color: var(--u-text-mid); letter-spacing: 1px; text-transform: uppercase; } .progress-bar-container { height: 18px; background: rgba(109, 40, 217, 0.12); border-radius: 99px; border: 1px solid rgba(109, 40, 217, 0.2); } .progress-bar { background: var(--rainbow); background-size: 300% 100%; border-radius: 99px; animation: rainbowSlide 3s linear infinite; box-shadow: 0 0 10px rgba(255, 105, 180, 0.5); } .progress-text { color: var(--u-text-mid); } /* ─── Chapter description ────────────────────────────────────────────────── */ .chapter-description { background: linear-gradient(135deg, rgba(109,40,217,0.06), rgba(255,105,180,0.06)); border: 1px solid rgba(255, 105, 180, 0.2); border-left: 5px solid var(--u-pink); border-radius: 16px; color: var(--u-text-dark); } /* ─── Task cards ─────────────────────────────────────────────────────────── */ .task-card { background: var(--u-card); border: 2px solid rgba(192, 132, 252, 0.15); border-radius: 20px; box-shadow: 0 8px 32px rgba(255, 105, 180, 0.1); transition: border-color 0.2s, box-shadow 0.25s, transform 0.2s; } .task-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 5px; background: var(--rainbow); background-size: 300% 100%; border-radius: 20px 20px 0 0; animation: rainbowSlide 5s linear infinite; } .task-card:hover { border-color: rgba(255, 105, 180, 0.5); box-shadow: 0 12px 40px rgba(255, 105, 180, 0.22); transform: translateY(-4px); } .task-header { border-bottom: 1px solid rgba(192, 132, 252, 0.15); } .task-title { color: var(--u-text-dark); font-weight: 800; } .task-question { color: var(--u-text-dark); } .task-points { background: rgba(255, 105, 180, 0.1); color: var(--u-pink-dark); border: 1px solid rgba(255, 105, 180, 0.25); border-radius: 99px; } .task-input-group { border-top: 1px solid rgba(192, 132, 252, 0.12); } .task-input { border: 2px solid rgba(109, 40, 217, 0.2); border-radius: 12px; background: #fff; color: var(--u-text-dark); transition: border-color 0.2s, box-shadow 0.2s; } .task-input:focus { outline: none; border-color: var(--u-pink); box-shadow: 0 0 0 4px rgba(255, 105, 180, 0.15); } .task-button { background: linear-gradient(135deg, var(--u-pink), var(--u-purple)); color: #fff; border-radius: 12px; box-shadow: 0 4px 20px var(--u-pink-glow); transition: transform 0.15s, box-shadow 0.2s, opacity 0.2s; } .task-button:hover { transform: translateY(-2px); box-shadow: 0 8px 28px rgba(255, 105, 180, 0.55); opacity: 0.92; } .task-button:active { transform: translateY(0); } .task-button:disabled { background: #d4bde8; box-shadow: none; opacity: 0.6; } .task-status.success { color: #15803d; } .task-status.error { color: #dc2626; } .task-status.completed { color: var(--u-pink-dark); } /* ─── Confetti ───────────────────────────────────────────────────────────── */ .confetti { border-radius: 50%; background: var(--u-pink); } /* ─── Toast ──────────────────────────────────────────────────────────────── */ .message { border-radius: 16px; box-shadow: 0 8px 32px rgba(0,0,0,0.2); font-family: 'Nunito', sans-serif; } .message.success { background: linear-gradient(135deg, #15803d, #166534); color: #fff; } .message.error { background: linear-gradient(135deg, #dc2626, #991b1b); color: #fff; } /* ─── Overlays ───────────────────────────────────────────────────────────── */ .auth-overlay, .class-picker-overlay { background: radial-gradient(ellipse at 30% 60%, rgba(109,40,217,0.5) 0%, transparent 50%), radial-gradient(ellipse at 80% 20%, rgba(255,105,180,0.4) 0%, transparent 45%), radial-gradient(ellipse at 60% 80%, rgba(96,165,250,0.3) 0%, transparent 40%), #0d0520; } .auth-card, .class-picker-card { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,105,180,0.3); border-radius: 28px; backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); box-shadow: 0 30px 80px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.06), inset 0 1px 0 rgba(255,255,255,0.12); } .auth-title { background: var(--rainbow); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; background-size: 300% 100%; animation: rainbowSlide 5s linear infinite; } .class-picker-title { color: #fff; } .class-picker-subtitle { color: rgba(255,255,255,0.4); } .auth-tabs { border-bottom: 1px solid rgba(255,255,255,0.1); } .auth-tab { color: rgba(255,255,255,0.35); border-bottom: 2px solid transparent; margin-bottom: -1px; transition: color 0.2s, border-color 0.2s; } .auth-tab.active { color: #fff; border-bottom-color: var(--u-pink); } .auth-input { background: rgba(255,255,255,0.07); border: 1px solid rgba(255,255,255,0.14); border-radius: 12px; color: #fff; transition: border-color 0.2s, background 0.2s; } .auth-input:focus { outline: none; border-color: var(--u-pink); background: rgba(255,255,255,0.11); } .auth-input::placeholder { color: rgba(255,255,255,0.28); } .auth-error { color: var(--u-red); } .auth-button { background: linear-gradient(135deg, var(--u-pink), var(--u-purple)); color: #fff; border-radius: 14px; box-shadow: 0 6px 24px var(--u-pink-glow); transition: opacity 0.2s, transform 0.15s; } .auth-button:hover { opacity: 0.88; transform: translateY(-1px); } .reset-button { border: 1px solid rgba(220,38,38,0.35); color: #f87171; border-radius: 10px; transition: background 0.2s; } .reset-button:hover { background: rgba(220,38,38,0.1); } /* ─── Class cards in picker ──────────────────────────────────────────────── */ .class-card { border: 2px solid rgba(255,105,180,0.3); border-radius: 16px; background: rgba(255,255,255,0.04); transition: transform 0.18s, box-shadow 0.18s; } .class-card:hover { transform: translateY(-4px); box-shadow: 0 14px 40px rgba(0,0,0,0.35); } .class-card-name { font-weight: 900; } /* ─── Completion bounce ──────────────────────────────────────────────────── */ .completion-icon { animation: bounce 1.2s ease infinite; } @keyframes bounce { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-14px) scale(1.08); } }