Aashish34 commited on
Commit
8150f90
·
verified ·
1 Parent(s): 3117c7d

Upload 3 files

Browse files
complete-statistics/app.js ADDED
@@ -0,0 +1,454 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // ===== CONFIGURATION & CONSTANTS =====
2
+ const COLORS = {
3
+ primary: '#4a90e2',
4
+ cyan: '#64ffda',
5
+ orange: '#ff6b6b',
6
+ green: '#51cf66',
7
+ background: '#0f3460',
8
+ text: '#e1e1e1',
9
+ textSecondary: '#a0a0a0'
10
+ };
11
+
12
+ const chartColors = ['#1FB8CD', '#FFC185', '#B4413C', '#ECEBD5', '#5D878F', '#DB4545', '#D2BA4C', '#964325', '#944454', '#13343B'];
13
+
14
+ // ===== STATE MANAGEMENT =====
15
+ let currentTopic = 1;
16
+ let animationFrames = {};
17
+
18
+ // ===== INITIALIZATION =====
19
+ document.addEventListener('DOMContentLoaded', () => {
20
+ initNavigation();
21
+ initInteractiveElements();
22
+ setupScrollObserver();
23
+ initializeAllVisualizations();
24
+ });
25
+
26
+ // ===== NAVIGATION =====
27
+ function initNavigation() {
28
+ // Mobile menu toggle
29
+ const mobileMenuBtn = document.getElementById('mobileMenuBtn');
30
+ const sidebar = document.getElementById('sidebar');
31
+
32
+ if (mobileMenuBtn) {
33
+ mobileMenuBtn.addEventListener('click', () => {
34
+ sidebar.classList.toggle('active');
35
+ });
36
+ }
37
+
38
+ // Topic link navigation
39
+ const topicLinks = document.querySelectorAll('.topic-link');
40
+ topicLinks.forEach(link => {
41
+ link.addEventListener('click', (e) => {
42
+ e.preventDefault();
43
+ const topicId = link.getAttribute('data-topic');
44
+ const target = document.getElementById(`topic-${topicId}`);
45
+
46
+ if (target) {
47
+ target.scrollIntoView({ behavior: 'smooth', block: 'start' });
48
+ updateActiveLink(topicId);
49
+
50
+ // Close mobile menu if open
51
+ if (window.innerWidth <= 1024) {
52
+ sidebar.classList.remove('active');
53
+ }
54
+ }
55
+ });
56
+ });
57
+ }
58
+
59
+ function updateActiveLink(topicId) {
60
+ document.querySelectorAll('.topic-link').forEach(link => {
61
+ link.classList.remove('active');
62
+ });
63
+ const activeLink = document.querySelector(`[data-topic="${topicId}"]`);
64
+ if (activeLink) {
65
+ activeLink.classList.add('active');
66
+ }
67
+ currentTopic = parseInt(topicId);
68
+ }
69
+
70
+ // ===== SCROLL OBSERVER =====
71
+ function setupScrollObserver() {
72
+ const options = {
73
+ root: null,
74
+ rootMargin: '-100px',
75
+ threshold: 0.3
76
+ };
77
+
78
+ const observer = new IntersectionObserver((entries) => {
79
+ entries.forEach(entry => {
80
+ if (entry.isIntersecting) {
81
+ const topicId = entry.target.id.split('-')[1];
82
+ updateActiveLink(topicId);
83
+ }
84
+ });
85
+ }, options);
86
+
87
+ document.querySelectorAll('.topic-section').forEach(section => {
88
+ observer.observe(section);
89
+ });
90
+ }
91
+
92
+ // ===== CANVAS UTILITIES =====
93
+ function clearCanvas(ctx, canvas) {
94
+ ctx.fillStyle = COLORS.background;
95
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
96
+ }
97
+
98
+ function drawText(ctx, text, x, y, fontSize = 14, color = COLORS.text, align = 'center') {
99
+ ctx.fillStyle = color;
100
+ ctx.font = `${fontSize}px 'Segoe UI', sans-serif`;
101
+ ctx.textAlign = align;
102
+ ctx.fillText(text, x, y);
103
+ }
104
+
105
+ function drawCircle(ctx, x, y, radius, color, filled = true) {
106
+ ctx.beginPath();
107
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
108
+ if (filled) {
109
+ ctx.fillStyle = color;
110
+ ctx.fill();
111
+ } else {
112
+ ctx.strokeStyle = color;
113
+ ctx.lineWidth = 2;
114
+ ctx.stroke();
115
+ }
116
+ }
117
+
118
+ function drawLine(ctx, x1, y1, x2, y2, color = COLORS.text, width = 1) {
119
+ ctx.beginPath();
120
+ ctx.moveTo(x1, y1);
121
+ ctx.lineTo(x2, y2);
122
+ ctx.strokeStyle = color;
123
+ ctx.lineWidth = width;
124
+ ctx.stroke();
125
+ }
126
+
127
+ function drawRect(ctx, x, y, width, height, color, filled = true) {
128
+ if (filled) {
129
+ ctx.fillStyle = color;
130
+ ctx.fillRect(x, y, width, height);
131
+ } else {
132
+ ctx.strokeStyle = color;
133
+ ctx.lineWidth = 2;
134
+ ctx.strokeRect(x, y, width, height);
135
+ }
136
+ }
137
+
138
+ // ===== STATISTICAL CALCULATIONS =====
139
+ function calculateMean(data) {
140
+ return data.reduce((sum, val) => sum + val, 0) / data.length;
141
+ }
142
+
143
+ function calculateMedian(data) {
144
+ const sorted = [...data].sort((a, b) => a - b);
145
+ const mid = Math.floor(sorted.length / 2);
146
+ return sorted.length % 2 === 0
147
+ ? (sorted[mid - 1] + sorted[mid]) / 2
148
+ : sorted[mid];
149
+ }
150
+
151
+ function calculateMode(data) {
152
+ const frequency = {};
153
+ let maxFreq = 0;
154
+
155
+ data.forEach(val => {
156
+ frequency[val] = (frequency[val] || 0) + 1;
157
+ maxFreq = Math.max(maxFreq, frequency[val]);
158
+ });
159
+
160
+ if (maxFreq === 1) return 'None';
161
+
162
+ const modes = Object.keys(frequency).filter(key => frequency[key] === maxFreq);
163
+ return modes.join(', ');
164
+ }
165
+
166
+ function calculateVariance(data, isSample = true) {
167
+ const mean = calculateMean(data);
168
+ const squaredDiffs = data.map(val => Math.pow(val - mean, 2));
169
+ const divisor = isSample ? data.length - 1 : data.length;
170
+ return squaredDiffs.reduce((sum, val) => sum + val, 0) / divisor;
171
+ }
172
+
173
+ function calculateStdDev(data, isSample = true) {
174
+ return Math.sqrt(calculateVariance(data, isSample));
175
+ }
176
+
177
+ function calculateQuartiles(data) {
178
+ const sorted = [...data].sort((a, b) => a - b);
179
+ const q2 = calculateMedian(sorted);
180
+ const midIndex = Math.floor(sorted.length / 2);
181
+
182
+ const lowerHalf = sorted.length % 2 === 0
183
+ ? sorted.slice(0, midIndex)
184
+ : sorted.slice(0, midIndex);
185
+ const upperHalf = sorted.length % 2 === 0
186
+ ? sorted.slice(midIndex)
187
+ : sorted.slice(midIndex + 1);
188
+
189
+ const q1 = calculateMedian(lowerHalf);
190
+ const q3 = calculateMedian(upperHalf);
191
+
192
+ return { q1, q2, q3 };
193
+ }
194
+
195
+ function calculateIQR(data) {
196
+ const { q1, q3 } = calculateQuartiles(data);
197
+ const iqr = q3 - q1;
198
+ const lowerFence = q1 - 1.5 * iqr;
199
+ const upperFence = q3 + 1.5 * iqr;
200
+
201
+ return { q1, q3, iqr, lowerFence, upperFence };
202
+ }
203
+
204
+ function detectOutliers(data) {
205
+ const { lowerFence, upperFence } = calculateIQR(data);
206
+ return data.filter(val => val < lowerFence || val > upperFence);
207
+ }
208
+
209
+ function calculateCovariance(x, y) {
210
+ const meanX = calculateMean(x);
211
+ const meanY = calculateMean(y);
212
+ let sum = 0;
213
+
214
+ for (let i = 0; i < x.length; i++) {
215
+ sum += (x[i] - meanX) * (y[i] - meanY);
216
+ }
217
+
218
+ return sum / (x.length - 1);
219
+ }
220
+
221
+ function calculateCorrelation(x, y) {
222
+ const cov = calculateCovariance(x, y);
223
+ const stdX = calculateStdDev(x);
224
+ const stdY = calculateStdDev(y);
225
+ return cov / (stdX * stdY);
226
+ }
227
+
228
+ // ===== VISUALIZATION FUNCTIONS =====
229
+
230
+ // Population vs Sample Visualization
231
+ function initPopulationSampleViz() {
232
+ const canvas = document.getElementById('populationSampleCanvas');
233
+ if (!canvas) return;
234
+
235
+ const ctx = canvas.getContext('2d');
236
+ let population = [];
237
+ let sample = [];
238
+ let sampleSize = 30;
239
+
240
+ // Initialize population
241
+ for (let i = 0; i < 200; i++) {
242
+ population.push({
243
+ x: Math.random() * (canvas.width - 40) + 20,
244
+ y: Math.random() * (canvas.height - 40) + 20,
245
+ inSample: false
246
+ });
247
+ }
248
+
249
+ function draw() {
250
+ clearCanvas(ctx, canvas);
251
+
252
+ // Draw title
253
+ drawText(ctx, 'Population (All dots) vs Sample (Highlighted)', canvas.width / 2, 30, 16, COLORS.cyan);
254
+
255
+ // Draw population
256
+ population.forEach(point => {
257
+ const color = point.inSample ? COLORS.orange : COLORS.primary;
258
+ const radius = point.inSample ? 6 : 4;
259
+ drawCircle(ctx, point.x, point.y, radius, color);
260
+ });
261
+
262
+ // Draw statistics
263
+ const popCount = population.length;
264
+ const sampleCount = population.filter(p => p.inSample).length;
265
+ drawText(ctx, `Population Size: N = ${popCount}`, 150, canvas.height - 20, 14, COLORS.text, 'center');
266
+ drawText(ctx, `Sample Size: n = ${sampleCount}`, canvas.width - 150, canvas.height - 20, 14, COLORS.orange, 'center');
267
+ }
268
+
269
+ function takeSample() {
270
+ // Reset all
271
+ population.forEach(p => p.inSample = false);
272
+
273
+ // Randomly select sample
274
+ const shuffled = [...population].sort(() => Math.random() - 0.5);
275
+ for (let i = 0; i < Math.min(sampleSize, population.length); i++) {
276
+ shuffled[i].inSample = true;
277
+ }
278
+
279
+ draw();
280
+ }
281
+
282
+ // Event listeners
283
+ const sampleBtn = document.getElementById('sampleBtn');
284
+ const resetBtn = document.getElementById('resetPopBtn');
285
+ const sizeSlider = document.getElementById('sampleSizeSlider');
286
+ const sizeLabel = document.getElementById('sampleSizeLabel');
287
+
288
+ if (sampleBtn) {
289
+ sampleBtn.addEventListener('click', takeSample);
290
+ }
291
+
292
+ if (resetBtn) {
293
+ resetBtn.addEventListener('click', () => {
294
+ population.forEach(p => p.inSample = false);
295
+ draw();
296
+ });
297
+ }
298
+
299
+ if (sizeSlider) {
300
+ sizeSlider.addEventListener('input', (e) => {
301
+ sampleSize = parseInt(e.target.value);
302
+ if (sizeLabel) {
303
+ sizeLabel.textContent = sampleSize;
304
+ }
305
+ });
306
+ }
307
+
308
+ draw();
309
+ }
310
+
311
+ // Central Tendency Visualization
312
+ function initCentralTendencyViz() {
313
+ const canvas = document.getElementById('centralTendencyCanvas');
314
+ if (!canvas) return;
315
+
316
+ const ctx = canvas.getContext('2d');
317
+ let data = [10, 20, 30, 40, 50];
318
+
319
+ function parseInput(input) {
320
+ return input.split(',').map(s => parseFloat(s.trim())).filter(n => !isNaN(n));
321
+ }
322
+
323
+ function draw() {
324
+ clearCanvas(ctx, canvas);
325
+
326
+ if (data.length === 0) {
327
+ drawText(ctx, 'Please enter valid numbers', canvas.width / 2, canvas.height / 2, 16, COLORS.orange);
328
+ return;
329
+ }
330
+
331
+ const sorted = [...data].sort((a, b) => a - b);
332
+ const min = Math.min(...sorted);
333
+ const max = Math.max(...sorted);
334
+ const range = max - min || 1;
335
+ const padding = 80;
336
+ const width = canvas.width - 2 * padding;
337
+
338
+ // Calculate statistics
339
+ const mean = calculateMean(data);
340
+ const median = calculateMedian(data);
341
+ const mode = calculateMode(data);
342
+
343
+ // Update results display
344
+ document.getElementById('meanResult').textContent = mean.toFixed(2);
345
+ document.getElementById('medianResult').textContent = median.toFixed(2);
346
+ document.getElementById('modeResult').textContent = mode;
347
+
348
+ // Draw axis
349
+ const axisY = canvas.height / 2;
350
+ drawLine(ctx, padding, axisY, canvas.width - padding, axisY, COLORS.text, 2);
351
+
352
+ // Draw data points
353
+ sorted.forEach((val, idx) => {
354
+ const x = padding + ((val - min) / range) * width;
355
+ drawCircle(ctx, x, axisY, 8, COLORS.primary);
356
+ drawText(ctx, val.toString(), x, axisY + 30, 12, COLORS.text);
357
+ });
358
+
359
+ // Draw mean
360
+ const meanX = padding + ((mean - min) / range) * width;
361
+ drawLine(ctx, meanX, axisY - 60, meanX, axisY + 60, COLORS.cyan, 3);
362
+ drawText(ctx, `Mean: ${mean.toFixed(2)}`, meanX, axisY - 70, 14, COLORS.cyan);
363
+
364
+ // Draw median
365
+ const medianX = padding + ((median - min) / range) * width;
366
+ drawLine(ctx, medianX, axisY - 50, medianX, axisY + 50, COLORS.orange, 2);
367
+ drawText(ctx, `Median: ${median.toFixed(2)}`, medianX, axisY - 55, 12, COLORS.orange);
368
+ }
369
+
370
+ // Event listeners
371
+ const input = document.getElementById('centralTendencyInput');
372
+ const calcBtn = document.getElementById('calculateCentralBtn');
373
+ const randomBtn = document.getElementById('randomDataBtn');
374
+
375
+ if (calcBtn && input) {
376
+ calcBtn.addEventListener('click', () => {
377
+ data = parseInput(input.value);
378
+ draw();
379
+ });
380
+ }
381
+
382
+ if (randomBtn && input) {
383
+ randomBtn.addEventListener('click', () => {
384
+ data = Array.from({ length: 10 }, () => Math.floor(Math.random() * 100));
385
+ input.value = data.join(', ');
386
+ draw();
387
+ });
388
+ }
389
+
390
+ if (input) {
391
+ input.addEventListener('keypress', (e) => {
392
+ if (e.key === 'Enter') {
393
+ data = parseInput(input.value);
394
+ draw();
395
+ }
396
+ });
397
+ }
398
+
399
+ draw();
400
+ }
401
+
402
+ // ===== INITIALIZE ALL VISUALIZATIONS =====
403
+ function initializeAllVisualizations() {
404
+ // Topic 2: Population vs Sample
405
+ initPopulationSampleViz();
406
+
407
+ // Topic 5: Central Tendency
408
+ initCentralTendencyViz();
409
+
410
+ // Add more visualizations as needed
411
+ // Each topic with a canvas gets its own initialization function
412
+ }
413
+
414
+ // ===== INTERACTIVE ELEMENTS =====
415
+ function initInteractiveElements() {
416
+ // Add any additional interactive elements here
417
+ // Such as tooltips, modals, etc.
418
+ }
419
+
420
+ // ===== HELPER FUNCTIONS =====
421
+ function generateRandomData(count, min, max) {
422
+ return Array.from({ length: count }, () =>
423
+ Math.floor(Math.random() * (max - min + 1)) + min
424
+ );
425
+ }
426
+
427
+ function formatNumber(num, decimals = 2) {
428
+ return Number(num).toFixed(decimals);
429
+ }
430
+
431
+ // ===== ANIMATION LOOP =====
432
+ function startAnimation(canvasId, animationFunction) {
433
+ if (animationFrames[canvasId]) {
434
+ cancelAnimationFrame(animationFrames[canvasId]);
435
+ }
436
+
437
+ function animate() {
438
+ animationFunction();
439
+ animationFrames[canvasId] = requestAnimationFrame(animate);
440
+ }
441
+
442
+ animate();
443
+ }
444
+
445
+ function stopAnimation(canvasId) {
446
+ if (animationFrames[canvasId]) {
447
+ cancelAnimationFrame(animationFrames[canvasId]);
448
+ delete animationFrames[canvasId];
449
+ }
450
+ }
451
+
452
+ // ===== CONSOLE LOG =====
453
+ console.log('%c📊 Statistics Mastery Platform Loaded', 'color: #64ffda; font-size: 16px; font-weight: bold;');
454
+ console.log('%cReady to explore 41 comprehensive statistics topics!', 'color: #4a90e2; font-size: 14px;');
complete-statistics/index.html ADDED
The diff for this file is too large to render. See raw diff
 
complete-statistics/style.css ADDED
@@ -0,0 +1,1631 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ /* Primitive Color Tokens */
3
+ --color-white: rgba(255, 255, 255, 1);
4
+ --color-black: rgba(0, 0, 0, 1);
5
+ --color-cream-50: rgba(252, 252, 249, 1);
6
+ --color-cream-100: rgba(255, 255, 253, 1);
7
+ --color-gray-200: rgba(245, 245, 245, 1);
8
+ --color-gray-300: rgba(167, 169, 169, 1);
9
+ --color-gray-400: rgba(119, 124, 124, 1);
10
+ --color-slate-500: rgba(98, 108, 113, 1);
11
+ --color-brown-600: rgba(94, 82, 64, 1);
12
+ --color-charcoal-700: rgba(31, 33, 33, 1);
13
+ --color-charcoal-800: rgba(38, 40, 40, 1);
14
+ --color-slate-900: rgba(19, 52, 59, 1);
15
+ --color-teal-300: rgba(50, 184, 198, 1);
16
+ --color-teal-400: rgba(45, 166, 178, 1);
17
+ --color-teal-500: rgba(33, 128, 141, 1);
18
+ --color-teal-600: rgba(29, 116, 128, 1);
19
+ --color-teal-700: rgba(26, 104, 115, 1);
20
+ --color-teal-800: rgba(41, 150, 161, 1);
21
+ --color-red-400: rgba(255, 84, 89, 1);
22
+ --color-red-500: rgba(192, 21, 47, 1);
23
+ --color-orange-400: rgba(230, 129, 97, 1);
24
+ --color-orange-500: rgba(168, 75, 47, 1);
25
+
26
+ /* RGB versions for opacity control */
27
+ --color-brown-600-rgb: 94, 82, 64;
28
+ --color-teal-500-rgb: 33, 128, 141;
29
+ --color-slate-900-rgb: 19, 52, 59;
30
+ --color-slate-500-rgb: 98, 108, 113;
31
+ --color-red-500-rgb: 192, 21, 47;
32
+ --color-red-400-rgb: 255, 84, 89;
33
+ --color-orange-500-rgb: 168, 75, 47;
34
+ --color-orange-400-rgb: 230, 129, 97;
35
+
36
+ /* Background color tokens (Light Mode) */
37
+ --color-bg-1: rgba(59, 130, 246, 0.08); /* Light blue */
38
+ --color-bg-2: rgba(245, 158, 11, 0.08); /* Light yellow */
39
+ --color-bg-3: rgba(34, 197, 94, 0.08); /* Light green */
40
+ --color-bg-4: rgba(239, 68, 68, 0.08); /* Light red */
41
+ --color-bg-5: rgba(147, 51, 234, 0.08); /* Light purple */
42
+ --color-bg-6: rgba(249, 115, 22, 0.08); /* Light orange */
43
+ --color-bg-7: rgba(236, 72, 153, 0.08); /* Light pink */
44
+ --color-bg-8: rgba(6, 182, 212, 0.08); /* Light cyan */
45
+
46
+ /* Semantic Color Tokens (Light Mode) */
47
+ --color-background: var(--color-cream-50);
48
+ --color-surface: var(--color-cream-100);
49
+ --color-text: var(--color-slate-900);
50
+ --color-text-secondary: var(--color-slate-500);
51
+ --color-primary: var(--color-teal-500);
52
+ --color-primary-hover: var(--color-teal-600);
53
+ --color-primary-active: var(--color-teal-700);
54
+ --color-secondary: rgba(var(--color-brown-600-rgb), 0.12);
55
+ --color-secondary-hover: rgba(var(--color-brown-600-rgb), 0.2);
56
+ --color-secondary-active: rgba(var(--color-brown-600-rgb), 0.25);
57
+ --color-border: rgba(var(--color-brown-600-rgb), 0.2);
58
+ --color-btn-primary-text: var(--color-cream-50);
59
+ --color-card-border: rgba(var(--color-brown-600-rgb), 0.12);
60
+ --color-card-border-inner: rgba(var(--color-brown-600-rgb), 0.12);
61
+ --color-error: var(--color-red-500);
62
+ --color-success: var(--color-teal-500);
63
+ --color-warning: var(--color-orange-500);
64
+ --color-info: var(--color-slate-500);
65
+ --color-focus-ring: rgba(var(--color-teal-500-rgb), 0.4);
66
+ --color-select-caret: rgba(var(--color-slate-900-rgb), 0.8);
67
+
68
+ /* Common style patterns */
69
+ --focus-ring: 0 0 0 3px var(--color-focus-ring);
70
+ --focus-outline: 2px solid var(--color-primary);
71
+ --status-bg-opacity: 0.15;
72
+ --status-border-opacity: 0.25;
73
+ --select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
74
+ --select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
75
+
76
+ /* RGB versions for opacity control */
77
+ --color-success-rgb: 33, 128, 141;
78
+ --color-error-rgb: 192, 21, 47;
79
+ --color-warning-rgb: 168, 75, 47;
80
+ --color-info-rgb: 98, 108, 113;
81
+
82
+ /* Typography */
83
+ --font-family-base: "FKGroteskNeue", "Geist", "Inter", -apple-system,
84
+ BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
85
+ --font-family-mono: "Berkeley Mono", ui-monospace, SFMono-Regular, Menlo,
86
+ Monaco, Consolas, monospace;
87
+ --font-size-xs: 11px;
88
+ --font-size-sm: 12px;
89
+ --font-size-base: 14px;
90
+ --font-size-md: 14px;
91
+ --font-size-lg: 16px;
92
+ --font-size-xl: 18px;
93
+ --font-size-2xl: 20px;
94
+ --font-size-3xl: 24px;
95
+ --font-size-4xl: 30px;
96
+ --font-weight-normal: 400;
97
+ --font-weight-medium: 500;
98
+ --font-weight-semibold: 550;
99
+ --font-weight-bold: 600;
100
+ --line-height-tight: 1.2;
101
+ --line-height-normal: 1.5;
102
+ --letter-spacing-tight: -0.01em;
103
+
104
+ /* Spacing */
105
+ --space-0: 0;
106
+ --space-1: 1px;
107
+ --space-2: 2px;
108
+ --space-4: 4px;
109
+ --space-6: 6px;
110
+ --space-8: 8px;
111
+ --space-10: 10px;
112
+ --space-12: 12px;
113
+ --space-16: 16px;
114
+ --space-20: 20px;
115
+ --space-24: 24px;
116
+ --space-32: 32px;
117
+
118
+ /* Border Radius */
119
+ --radius-sm: 6px;
120
+ --radius-base: 8px;
121
+ --radius-md: 10px;
122
+ --radius-lg: 12px;
123
+ --radius-full: 9999px;
124
+
125
+ /* Shadows */
126
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.02);
127
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.02);
128
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.04),
129
+ 0 2px 4px -1px rgba(0, 0, 0, 0.02);
130
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.04),
131
+ 0 4px 6px -2px rgba(0, 0, 0, 0.02);
132
+ --shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.15),
133
+ inset 0 -1px 0 rgba(0, 0, 0, 0.03);
134
+
135
+ /* Animation */
136
+ --duration-fast: 150ms;
137
+ --duration-normal: 250ms;
138
+ --ease-standard: cubic-bezier(0.16, 1, 0.3, 1);
139
+
140
+ /* Layout */
141
+ --container-sm: 640px;
142
+ --container-md: 768px;
143
+ --container-lg: 1024px;
144
+ --container-xl: 1280px;
145
+ }
146
+
147
+ /* Dark mode colors */
148
+ @media (prefers-color-scheme: dark) {
149
+ :root {
150
+ /* RGB versions for opacity control (Dark Mode) */
151
+ --color-gray-400-rgb: 119, 124, 124;
152
+ --color-teal-300-rgb: 50, 184, 198;
153
+ --color-gray-300-rgb: 167, 169, 169;
154
+ --color-gray-200-rgb: 245, 245, 245;
155
+
156
+ /* Background color tokens (Dark Mode) */
157
+ --color-bg-1: rgba(29, 78, 216, 0.15); /* Dark blue */
158
+ --color-bg-2: rgba(180, 83, 9, 0.15); /* Dark yellow */
159
+ --color-bg-3: rgba(21, 128, 61, 0.15); /* Dark green */
160
+ --color-bg-4: rgba(185, 28, 28, 0.15); /* Dark red */
161
+ --color-bg-5: rgba(107, 33, 168, 0.15); /* Dark purple */
162
+ --color-bg-6: rgba(194, 65, 12, 0.15); /* Dark orange */
163
+ --color-bg-7: rgba(190, 24, 93, 0.15); /* Dark pink */
164
+ --color-bg-8: rgba(8, 145, 178, 0.15); /* Dark cyan */
165
+
166
+ /* Semantic Color Tokens (Dark Mode) */
167
+ --color-background: var(--color-charcoal-700);
168
+ --color-surface: var(--color-charcoal-800);
169
+ --color-text: var(--color-gray-200);
170
+ --color-text-secondary: rgba(var(--color-gray-300-rgb), 0.7);
171
+ --color-primary: var(--color-teal-300);
172
+ --color-primary-hover: var(--color-teal-400);
173
+ --color-primary-active: var(--color-teal-800);
174
+ --color-secondary: rgba(var(--color-gray-400-rgb), 0.15);
175
+ --color-secondary-hover: rgba(var(--color-gray-400-rgb), 0.25);
176
+ --color-secondary-active: rgba(var(--color-gray-400-rgb), 0.3);
177
+ --color-border: rgba(var(--color-gray-400-rgb), 0.3);
178
+ --color-error: var(--color-red-400);
179
+ --color-success: var(--color-teal-300);
180
+ --color-warning: var(--color-orange-400);
181
+ --color-info: var(--color-gray-300);
182
+ --color-focus-ring: rgba(var(--color-teal-300-rgb), 0.4);
183
+ --color-btn-primary-text: var(--color-slate-900);
184
+ --color-card-border: rgba(var(--color-gray-400-rgb), 0.2);
185
+ --color-card-border-inner: rgba(var(--color-gray-400-rgb), 0.15);
186
+ --shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.1),
187
+ inset 0 -1px 0 rgba(0, 0, 0, 0.15);
188
+ --button-border-secondary: rgba(var(--color-gray-400-rgb), 0.2);
189
+ --color-border-secondary: rgba(var(--color-gray-400-rgb), 0.2);
190
+ --color-select-caret: rgba(var(--color-gray-200-rgb), 0.8);
191
+
192
+ /* Common style patterns - updated for dark mode */
193
+ --focus-ring: 0 0 0 3px var(--color-focus-ring);
194
+ --focus-outline: 2px solid var(--color-primary);
195
+ --status-bg-opacity: 0.15;
196
+ --status-border-opacity: 0.25;
197
+ --select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
198
+ --select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
199
+
200
+ /* RGB versions for dark mode */
201
+ --color-success-rgb: var(--color-teal-300-rgb);
202
+ --color-error-rgb: var(--color-red-400-rgb);
203
+ --color-warning-rgb: var(--color-orange-400-rgb);
204
+ --color-info-rgb: var(--color-gray-300-rgb);
205
+ }
206
+ }
207
+
208
+ /* Data attribute for manual theme switching */
209
+ [data-color-scheme="dark"] {
210
+ /* RGB versions for opacity control (dark mode) */
211
+ --color-gray-400-rgb: 119, 124, 124;
212
+ --color-teal-300-rgb: 50, 184, 198;
213
+ --color-gray-300-rgb: 167, 169, 169;
214
+ --color-gray-200-rgb: 245, 245, 245;
215
+
216
+ /* Colorful background palette - Dark Mode */
217
+ --color-bg-1: rgba(29, 78, 216, 0.15); /* Dark blue */
218
+ --color-bg-2: rgba(180, 83, 9, 0.15); /* Dark yellow */
219
+ --color-bg-3: rgba(21, 128, 61, 0.15); /* Dark green */
220
+ --color-bg-4: rgba(185, 28, 28, 0.15); /* Dark red */
221
+ --color-bg-5: rgba(107, 33, 168, 0.15); /* Dark purple */
222
+ --color-bg-6: rgba(194, 65, 12, 0.15); /* Dark orange */
223
+ --color-bg-7: rgba(190, 24, 93, 0.15); /* Dark pink */
224
+ --color-bg-8: rgba(8, 145, 178, 0.15); /* Dark cyan */
225
+
226
+ /* Semantic Color Tokens (Dark Mode) */
227
+ --color-background: var(--color-charcoal-700);
228
+ --color-surface: var(--color-charcoal-800);
229
+ --color-text: var(--color-gray-200);
230
+ --color-text-secondary: rgba(var(--color-gray-300-rgb), 0.7);
231
+ --color-primary: var(--color-teal-300);
232
+ --color-primary-hover: var(--color-teal-400);
233
+ --color-primary-active: var(--color-teal-800);
234
+ --color-secondary: rgba(var(--color-gray-400-rgb), 0.15);
235
+ --color-secondary-hover: rgba(var(--color-gray-400-rgb), 0.25);
236
+ --color-secondary-active: rgba(var(--color-gray-400-rgb), 0.3);
237
+ --color-border: rgba(var(--color-gray-400-rgb), 0.3);
238
+ --color-error: var(--color-red-400);
239
+ --color-success: var(--color-teal-300);
240
+ --color-warning: var(--color-orange-400);
241
+ --color-info: var(--color-gray-300);
242
+ --color-focus-ring: rgba(var(--color-teal-300-rgb), 0.4);
243
+ --color-btn-primary-text: var(--color-slate-900);
244
+ --color-card-border: rgba(var(--color-gray-400-rgb), 0.15);
245
+ --color-card-border-inner: rgba(var(--color-gray-400-rgb), 0.15);
246
+ --shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.1),
247
+ inset 0 -1px 0 rgba(0, 0, 0, 0.15);
248
+ --color-border-secondary: rgba(var(--color-gray-400-rgb), 0.2);
249
+ --color-select-caret: rgba(var(--color-gray-200-rgb), 0.8);
250
+
251
+ /* Common style patterns - updated for dark mode */
252
+ --focus-ring: 0 0 0 3px var(--color-focus-ring);
253
+ --focus-outline: 2px solid var(--color-primary);
254
+ --status-bg-opacity: 0.15;
255
+ --status-border-opacity: 0.25;
256
+ --select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
257
+ --select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
258
+
259
+ /* RGB versions for dark mode */
260
+ --color-success-rgb: var(--color-teal-300-rgb);
261
+ --color-error-rgb: var(--color-red-400-rgb);
262
+ --color-warning-rgb: var(--color-orange-400-rgb);
263
+ --color-info-rgb: var(--color-gray-300-rgb);
264
+ }
265
+
266
+ [data-color-scheme="light"] {
267
+ /* RGB versions for opacity control (light mode) */
268
+ --color-brown-600-rgb: 94, 82, 64;
269
+ --color-teal-500-rgb: 33, 128, 141;
270
+ --color-slate-900-rgb: 19, 52, 59;
271
+
272
+ /* Semantic Color Tokens (Light Mode) */
273
+ --color-background: var(--color-cream-50);
274
+ --color-surface: var(--color-cream-100);
275
+ --color-text: var(--color-slate-900);
276
+ --color-text-secondary: var(--color-slate-500);
277
+ --color-primary: var(--color-teal-500);
278
+ --color-primary-hover: var(--color-teal-600);
279
+ --color-primary-active: var(--color-teal-700);
280
+ --color-secondary: rgba(var(--color-brown-600-rgb), 0.12);
281
+ --color-secondary-hover: rgba(var(--color-brown-600-rgb), 0.2);
282
+ --color-secondary-active: rgba(var(--color-brown-600-rgb), 0.25);
283
+ --color-border: rgba(var(--color-brown-600-rgb), 0.2);
284
+ --color-btn-primary-text: var(--color-cream-50);
285
+ --color-card-border: rgba(var(--color-brown-600-rgb), 0.12);
286
+ --color-card-border-inner: rgba(var(--color-brown-600-rgb), 0.12);
287
+ --color-error: var(--color-red-500);
288
+ --color-success: var(--color-teal-500);
289
+ --color-warning: var(--color-orange-500);
290
+ --color-info: var(--color-slate-500);
291
+ --color-focus-ring: rgba(var(--color-teal-500-rgb), 0.4);
292
+
293
+ /* RGB versions for light mode */
294
+ --color-success-rgb: var(--color-teal-500-rgb);
295
+ --color-error-rgb: var(--color-red-500-rgb);
296
+ --color-warning-rgb: var(--color-orange-500-rgb);
297
+ --color-info-rgb: var(--color-slate-500-rgb);
298
+ }
299
+
300
+ /* Base styles */
301
+ html {
302
+ font-size: var(--font-size-base);
303
+ font-family: var(--font-family-base);
304
+ line-height: var(--line-height-normal);
305
+ color: var(--color-text);
306
+ background-color: var(--color-background);
307
+ -webkit-font-smoothing: antialiased;
308
+ box-sizing: border-box;
309
+ }
310
+
311
+ body {
312
+ margin: 0;
313
+ padding: 0;
314
+ }
315
+
316
+ *,
317
+ *::before,
318
+ *::after {
319
+ box-sizing: inherit;
320
+ }
321
+
322
+ /* Typography */
323
+ h1,
324
+ h2,
325
+ h3,
326
+ h4,
327
+ h5,
328
+ h6 {
329
+ margin: 0;
330
+ font-weight: var(--font-weight-semibold);
331
+ line-height: var(--line-height-tight);
332
+ color: var(--color-text);
333
+ letter-spacing: var(--letter-spacing-tight);
334
+ }
335
+
336
+ h1 {
337
+ font-size: var(--font-size-4xl);
338
+ }
339
+ h2 {
340
+ font-size: var(--font-size-3xl);
341
+ }
342
+ h3 {
343
+ font-size: var(--font-size-2xl);
344
+ }
345
+ h4 {
346
+ font-size: var(--font-size-xl);
347
+ }
348
+ h5 {
349
+ font-size: var(--font-size-lg);
350
+ }
351
+ h6 {
352
+ font-size: var(--font-size-md);
353
+ }
354
+
355
+ p {
356
+ margin: 0 0 var(--space-16) 0;
357
+ }
358
+
359
+ a {
360
+ color: var(--color-primary);
361
+ text-decoration: none;
362
+ transition: color var(--duration-fast) var(--ease-standard);
363
+ }
364
+
365
+ a:hover {
366
+ color: var(--color-primary-hover);
367
+ }
368
+
369
+ code,
370
+ pre {
371
+ font-family: var(--font-family-mono);
372
+ font-size: calc(var(--font-size-base) * 0.95);
373
+ background-color: var(--color-secondary);
374
+ border-radius: var(--radius-sm);
375
+ }
376
+
377
+ code {
378
+ padding: var(--space-1) var(--space-4);
379
+ }
380
+
381
+ pre {
382
+ padding: var(--space-16);
383
+ margin: var(--space-16) 0;
384
+ overflow: auto;
385
+ border: 1px solid var(--color-border);
386
+ }
387
+
388
+ pre code {
389
+ background: none;
390
+ padding: 0;
391
+ }
392
+
393
+ /* Buttons */
394
+ .btn {
395
+ display: inline-flex;
396
+ align-items: center;
397
+ justify-content: center;
398
+ padding: var(--space-8) var(--space-16);
399
+ border-radius: var(--radius-base);
400
+ font-size: var(--font-size-base);
401
+ font-weight: 500;
402
+ line-height: 1.5;
403
+ cursor: pointer;
404
+ transition: all var(--duration-normal) var(--ease-standard);
405
+ border: none;
406
+ text-decoration: none;
407
+ position: relative;
408
+ }
409
+
410
+ .btn:focus-visible {
411
+ outline: none;
412
+ box-shadow: var(--focus-ring);
413
+ }
414
+
415
+ .btn--primary {
416
+ background: var(--color-primary);
417
+ color: var(--color-btn-primary-text);
418
+ }
419
+
420
+ .btn--primary:hover {
421
+ background: var(--color-primary-hover);
422
+ }
423
+
424
+ .btn--primary:active {
425
+ background: var(--color-primary-active);
426
+ }
427
+
428
+ .btn--secondary {
429
+ background: var(--color-secondary);
430
+ color: var(--color-text);
431
+ }
432
+
433
+ .btn--secondary:hover {
434
+ background: var(--color-secondary-hover);
435
+ }
436
+
437
+ .btn--secondary:active {
438
+ background: var(--color-secondary-active);
439
+ }
440
+
441
+ .btn--outline {
442
+ background: transparent;
443
+ border: 1px solid var(--color-border);
444
+ color: var(--color-text);
445
+ }
446
+
447
+ .btn--outline:hover {
448
+ background: var(--color-secondary);
449
+ }
450
+
451
+ .btn--sm {
452
+ padding: var(--space-4) var(--space-12);
453
+ font-size: var(--font-size-sm);
454
+ border-radius: var(--radius-sm);
455
+ }
456
+
457
+ .btn--lg {
458
+ padding: var(--space-10) var(--space-20);
459
+ font-size: var(--font-size-lg);
460
+ border-radius: var(--radius-md);
461
+ }
462
+
463
+ .btn--full-width {
464
+ width: 100%;
465
+ }
466
+
467
+ .btn:disabled {
468
+ opacity: 0.5;
469
+ cursor: not-allowed;
470
+ }
471
+
472
+ /* Form elements */
473
+ .form-control {
474
+ display: block;
475
+ width: 100%;
476
+ padding: var(--space-8) var(--space-12);
477
+ font-size: var(--font-size-md);
478
+ line-height: 1.5;
479
+ color: var(--color-text);
480
+ background-color: var(--color-surface);
481
+ border: 1px solid var(--color-border);
482
+ border-radius: var(--radius-base);
483
+ transition: border-color var(--duration-fast) var(--ease-standard),
484
+ box-shadow var(--duration-fast) var(--ease-standard);
485
+ }
486
+
487
+ textarea.form-control {
488
+ font-family: var(--font-family-base);
489
+ font-size: var(--font-size-base);
490
+ }
491
+
492
+ select.form-control {
493
+ padding: var(--space-8) var(--space-12);
494
+ -webkit-appearance: none;
495
+ -moz-appearance: none;
496
+ appearance: none;
497
+ background-image: var(--select-caret-light);
498
+ background-repeat: no-repeat;
499
+ background-position: right var(--space-12) center;
500
+ background-size: 16px;
501
+ padding-right: var(--space-32);
502
+ }
503
+
504
+ /* Add a dark mode specific caret */
505
+ @media (prefers-color-scheme: dark) {
506
+ select.form-control {
507
+ background-image: var(--select-caret-dark);
508
+ }
509
+ }
510
+
511
+ /* Also handle data-color-scheme */
512
+ [data-color-scheme="dark"] select.form-control {
513
+ background-image: var(--select-caret-dark);
514
+ }
515
+
516
+ [data-color-scheme="light"] select.form-control {
517
+ background-image: var(--select-caret-light);
518
+ }
519
+
520
+ .form-control:focus {
521
+ border-color: var(--color-primary);
522
+ outline: var(--focus-outline);
523
+ }
524
+
525
+ .form-label {
526
+ display: block;
527
+ margin-bottom: var(--space-8);
528
+ font-weight: var(--font-weight-medium);
529
+ font-size: var(--font-size-sm);
530
+ }
531
+
532
+ .form-group {
533
+ margin-bottom: var(--space-16);
534
+ }
535
+
536
+ /* Card component */
537
+ .card {
538
+ background-color: var(--color-surface);
539
+ border-radius: var(--radius-lg);
540
+ border: 1px solid var(--color-card-border);
541
+ box-shadow: var(--shadow-sm);
542
+ overflow: hidden;
543
+ transition: box-shadow var(--duration-normal) var(--ease-standard);
544
+ }
545
+
546
+ .card:hover {
547
+ box-shadow: var(--shadow-md);
548
+ }
549
+
550
+ .card__body {
551
+ padding: var(--space-16);
552
+ }
553
+
554
+ .card__header,
555
+ .card__footer {
556
+ padding: var(--space-16);
557
+ border-bottom: 1px solid var(--color-card-border-inner);
558
+ }
559
+
560
+ /* Status indicators - simplified with CSS variables */
561
+ .status {
562
+ display: inline-flex;
563
+ align-items: center;
564
+ padding: var(--space-6) var(--space-12);
565
+ border-radius: var(--radius-full);
566
+ font-weight: var(--font-weight-medium);
567
+ font-size: var(--font-size-sm);
568
+ }
569
+
570
+ .status--success {
571
+ background-color: rgba(
572
+ var(--color-success-rgb, 33, 128, 141),
573
+ var(--status-bg-opacity)
574
+ );
575
+ color: var(--color-success);
576
+ border: 1px solid
577
+ rgba(var(--color-success-rgb, 33, 128, 141), var(--status-border-opacity));
578
+ }
579
+
580
+ .status--error {
581
+ background-color: rgba(
582
+ var(--color-error-rgb, 192, 21, 47),
583
+ var(--status-bg-opacity)
584
+ );
585
+ color: var(--color-error);
586
+ border: 1px solid
587
+ rgba(var(--color-error-rgb, 192, 21, 47), var(--status-border-opacity));
588
+ }
589
+
590
+ .status--warning {
591
+ background-color: rgba(
592
+ var(--color-warning-rgb, 168, 75, 47),
593
+ var(--status-bg-opacity)
594
+ );
595
+ color: var(--color-warning);
596
+ border: 1px solid
597
+ rgba(var(--color-warning-rgb, 168, 75, 47), var(--status-border-opacity));
598
+ }
599
+
600
+ .status--info {
601
+ background-color: rgba(
602
+ var(--color-info-rgb, 98, 108, 113),
603
+ var(--status-bg-opacity)
604
+ );
605
+ color: var(--color-info);
606
+ border: 1px solid
607
+ rgba(var(--color-info-rgb, 98, 108, 113), var(--status-border-opacity));
608
+ }
609
+
610
+ /* Container layout */
611
+ .container {
612
+ width: 100%;
613
+ margin-right: auto;
614
+ margin-left: auto;
615
+ padding-right: var(--space-16);
616
+ padding-left: var(--space-16);
617
+ }
618
+
619
+ @media (min-width: 640px) {
620
+ .container {
621
+ max-width: var(--container-sm);
622
+ }
623
+ }
624
+ @media (min-width: 768px) {
625
+ .container {
626
+ max-width: var(--container-md);
627
+ }
628
+ }
629
+ @media (min-width: 1024px) {
630
+ .container {
631
+ max-width: var(--container-lg);
632
+ }
633
+ }
634
+ @media (min-width: 1280px) {
635
+ .container {
636
+ max-width: var(--container-xl);
637
+ }
638
+ }
639
+
640
+ /* Utility classes */
641
+ .flex {
642
+ display: flex;
643
+ }
644
+ .flex-col {
645
+ flex-direction: column;
646
+ }
647
+ .items-center {
648
+ align-items: center;
649
+ }
650
+ .justify-center {
651
+ justify-content: center;
652
+ }
653
+ .justify-between {
654
+ justify-content: space-between;
655
+ }
656
+ .gap-4 {
657
+ gap: var(--space-4);
658
+ }
659
+ .gap-8 {
660
+ gap: var(--space-8);
661
+ }
662
+ .gap-16 {
663
+ gap: var(--space-16);
664
+ }
665
+
666
+ .m-0 {
667
+ margin: 0;
668
+ }
669
+ .mt-8 {
670
+ margin-top: var(--space-8);
671
+ }
672
+ .mb-8 {
673
+ margin-bottom: var(--space-8);
674
+ }
675
+ .mx-8 {
676
+ margin-left: var(--space-8);
677
+ margin-right: var(--space-8);
678
+ }
679
+ .my-8 {
680
+ margin-top: var(--space-8);
681
+ margin-bottom: var(--space-8);
682
+ }
683
+
684
+ .p-0 {
685
+ padding: 0;
686
+ }
687
+ .py-8 {
688
+ padding-top: var(--space-8);
689
+ padding-bottom: var(--space-8);
690
+ }
691
+ .px-8 {
692
+ padding-left: var(--space-8);
693
+ padding-right: var(--space-8);
694
+ }
695
+ .py-16 {
696
+ padding-top: var(--space-16);
697
+ padding-bottom: var(--space-16);
698
+ }
699
+ .px-16 {
700
+ padding-left: var(--space-16);
701
+ padding-right: var(--space-16);
702
+ }
703
+
704
+ .block {
705
+ display: block;
706
+ }
707
+ .hidden {
708
+ display: none;
709
+ }
710
+
711
+ /* Accessibility */
712
+ .sr-only {
713
+ position: absolute;
714
+ width: 1px;
715
+ height: 1px;
716
+ padding: 0;
717
+ margin: -1px;
718
+ overflow: hidden;
719
+ clip: rect(0, 0, 0, 0);
720
+ white-space: nowrap;
721
+ border-width: 0;
722
+ }
723
+
724
+ :focus-visible {
725
+ outline: var(--focus-outline);
726
+ outline-offset: 2px;
727
+ }
728
+
729
+ /* Dark mode specifics */
730
+ [data-color-scheme="dark"] .btn--outline {
731
+ border: 1px solid var(--color-border-secondary);
732
+ }
733
+
734
+ @font-face {
735
+ font-family: 'FKGroteskNeue';
736
+ src: url('https://r2cdn.perplexity.ai/fonts/FKGroteskNeue.woff2')
737
+ format('woff2');
738
+ }
739
+
740
+ /* END PERPLEXITY DESIGN SYSTEM */
741
+ /* Reset and Base Styles */
742
+ * {
743
+ margin: 0;
744
+ padding: 0;
745
+ box-sizing: border-box;
746
+ }
747
+
748
+ html {
749
+ scroll-behavior: smooth;
750
+ }
751
+
752
+ body {
753
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
754
+ background-color: #1a1a2e;
755
+ color: #e1e1e1;
756
+ line-height: 1.6;
757
+ overflow-x: hidden;
758
+ }
759
+
760
+ /* Top Navigation */
761
+ .top-nav {
762
+ position: sticky;
763
+ top: 0;
764
+ background: linear-gradient(135deg, #16213e 0%, #0f3460 100%);
765
+ padding: 1rem 0;
766
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
767
+ z-index: 1000;
768
+ border-bottom: 2px solid #4a90e2;
769
+ }
770
+
771
+ .nav-container {
772
+ max-width: 1400px;
773
+ margin: 0 auto;
774
+ padding: 0 2rem;
775
+ display: flex;
776
+ justify-content: space-between;
777
+ align-items: center;
778
+ }
779
+
780
+ .course-title {
781
+ font-size: 1.8rem;
782
+ color: #64ffda;
783
+ font-weight: 700;
784
+ text-shadow: 0 0 20px rgba(100, 255, 218, 0.3);
785
+ }
786
+
787
+ .mobile-menu-btn {
788
+ display: none;
789
+ flex-direction: column;
790
+ background: none;
791
+ border: none;
792
+ cursor: pointer;
793
+ padding: 0.5rem;
794
+ }
795
+
796
+ .mobile-menu-btn span {
797
+ width: 25px;
798
+ height: 3px;
799
+ background: #64ffda;
800
+ margin: 3px 0;
801
+ border-radius: 3px;
802
+ transition: all 0.3s ease;
803
+ }
804
+
805
+ /* Main Container */
806
+ .main-container {
807
+ display: flex;
808
+ max-width: 1400px;
809
+ margin: 0 auto;
810
+ min-height: calc(100vh - 80px);
811
+ }
812
+
813
+ /* Sidebar */
814
+ .sidebar {
815
+ width: 280px;
816
+ background: #16213e;
817
+ padding: 2rem 1rem;
818
+ position: sticky;
819
+ top: 80px;
820
+ height: calc(100vh - 80px);
821
+ overflow-y: auto;
822
+ border-right: 2px solid #0f3460;
823
+ transition: transform 0.3s ease;
824
+ }
825
+
826
+ .sidebar-content h3 {
827
+ color: #64ffda;
828
+ margin-bottom: 1.5rem;
829
+ font-size: 1.3rem;
830
+ text-align: center;
831
+ }
832
+
833
+ .module {
834
+ margin-bottom: 2rem;
835
+ }
836
+
837
+ .module-title {
838
+ color: #4a90e2;
839
+ font-size: 0.9rem;
840
+ text-transform: uppercase;
841
+ letter-spacing: 1px;
842
+ margin-bottom: 0.8rem;
843
+ padding: 0.5rem;
844
+ background: rgba(74, 144, 226, 0.1);
845
+ border-radius: 5px;
846
+ border-left: 3px solid #4a90e2;
847
+ }
848
+
849
+ .topic-list {
850
+ list-style: none;
851
+ }
852
+
853
+ .topic-list li {
854
+ margin-bottom: 0.5rem;
855
+ }
856
+
857
+ .topic-link {
858
+ display: block;
859
+ padding: 0.6rem 0.8rem;
860
+ color: #a0a0a0;
861
+ text-decoration: none;
862
+ border-radius: 5px;
863
+ transition: all 0.3s ease;
864
+ font-size: 0.9rem;
865
+ border-left: 3px solid transparent;
866
+ }
867
+
868
+ .topic-link:hover {
869
+ background: rgba(100, 255, 218, 0.1);
870
+ color: #64ffda;
871
+ border-left-color: #64ffda;
872
+ transform: translateX(5px);
873
+ }
874
+
875
+ .topic-link.active {
876
+ background: rgba(100, 255, 218, 0.15);
877
+ color: #64ffda;
878
+ border-left-color: #64ffda;
879
+ font-weight: 600;
880
+ }
881
+
882
+ /* Scrollbar Styling */
883
+ .sidebar::-webkit-scrollbar {
884
+ width: 8px;
885
+ }
886
+
887
+ .sidebar::-webkit-scrollbar-track {
888
+ background: #0f3460;
889
+ }
890
+
891
+ .sidebar::-webkit-scrollbar-thumb {
892
+ background: #4a90e2;
893
+ border-radius: 4px;
894
+ }
895
+
896
+ .sidebar::-webkit-scrollbar-thumb:hover {
897
+ background: #64ffda;
898
+ }
899
+
900
+ /* Main Content */
901
+ .content {
902
+ flex: 1;
903
+ padding: 3rem;
904
+ background: #1a1a2e;
905
+ }
906
+
907
+ /* Topic Section */
908
+ .topic-section {
909
+ margin-bottom: 4rem;
910
+ opacity: 0;
911
+ transform: translateY(20px);
912
+ animation: fadeInUp 0.6s ease forwards;
913
+ }
914
+
915
+ @keyframes fadeInUp {
916
+ to {
917
+ opacity: 1;
918
+ transform: translateY(0);
919
+ }
920
+ }
921
+
922
+ .topic-header {
923
+ margin-bottom: 2rem;
924
+ padding-bottom: 1.5rem;
925
+ border-bottom: 3px solid #0f3460;
926
+ }
927
+
928
+ .topic-number {
929
+ display: inline-block;
930
+ background: linear-gradient(135deg, #4a90e2, #64ffda);
931
+ color: #1a1a2e;
932
+ padding: 0.3rem 1rem;
933
+ border-radius: 20px;
934
+ font-size: 0.85rem;
935
+ font-weight: 700;
936
+ margin-bottom: 0.8rem;
937
+ }
938
+
939
+ .topic-header h2 {
940
+ font-size: 2.5rem;
941
+ color: #64ffda;
942
+ margin-bottom: 0.5rem;
943
+ text-shadow: 0 0 20px rgba(100, 255, 218, 0.2);
944
+ }
945
+
946
+ .topic-subtitle {
947
+ color: #a0a0a0;
948
+ font-size: 1.1rem;
949
+ font-style: italic;
950
+ }
951
+
952
+ /* Content Cards */
953
+ .content-card {
954
+ background: #16213e;
955
+ padding: 2rem;
956
+ border-radius: 12px;
957
+ margin-bottom: 2rem;
958
+ border: 1px solid #0f3460;
959
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
960
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
961
+ }
962
+
963
+ .content-card:hover {
964
+ transform: translateY(-2px);
965
+ box-shadow: 0 6px 25px rgba(74, 144, 226, 0.2);
966
+ }
967
+
968
+ .content-card h3 {
969
+ color: #4a90e2;
970
+ margin-bottom: 1rem;
971
+ font-size: 1.5rem;
972
+ }
973
+
974
+ .content-card h4 {
975
+ margin-top: 1rem;
976
+ margin-bottom: 0.8rem;
977
+ font-size: 1.2rem;
978
+ }
979
+
980
+ .content-card p {
981
+ margin-bottom: 1rem;
982
+ color: #d0d0d0;
983
+ line-height: 1.8;
984
+ }
985
+
986
+ .content-card ul,
987
+ .content-card ol {
988
+ margin-left: 2rem;
989
+ margin-bottom: 1rem;
990
+ }
991
+
992
+ .content-card li {
993
+ margin-bottom: 0.5rem;
994
+ color: #d0d0d0;
995
+ }
996
+
997
+ /* Callout Boxes */
998
+ .callout-box {
999
+ padding: 1.5rem;
1000
+ border-radius: 10px;
1001
+ margin-bottom: 2rem;
1002
+ border-left: 4px solid;
1003
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
1004
+ }
1005
+
1006
+ .callout-header {
1007
+ font-weight: 700;
1008
+ font-size: 1rem;
1009
+ margin-bottom: 0.8rem;
1010
+ display: flex;
1011
+ align-items: center;
1012
+ gap: 0.5rem;
1013
+ }
1014
+
1015
+ .callout-box.insight {
1016
+ background: rgba(100, 255, 218, 0.1);
1017
+ border-left-color: #64ffda;
1018
+ }
1019
+
1020
+ .callout-box.insight .callout-header {
1021
+ color: #64ffda;
1022
+ }
1023
+
1024
+ .callout-box.warning {
1025
+ background: rgba(255, 107, 107, 0.1);
1026
+ border-left-color: #ff6b6b;
1027
+ }
1028
+
1029
+ .callout-box.warning .callout-header {
1030
+ color: #ff6b6b;
1031
+ }
1032
+
1033
+ .callout-box.tip {
1034
+ background: rgba(81, 207, 102, 0.1);
1035
+ border-left-color: #51cf66;
1036
+ }
1037
+
1038
+ .callout-box.tip .callout-header {
1039
+ color: #51cf66;
1040
+ }
1041
+
1042
+ .callout-box.example {
1043
+ background: rgba(74, 144, 226, 0.1);
1044
+ border-left-color: #4a90e2;
1045
+ }
1046
+
1047
+ .callout-box.example .callout-header {
1048
+ color: #4a90e2;
1049
+ }
1050
+
1051
+ .callout-box p,
1052
+ .callout-box ul,
1053
+ .callout-box ol {
1054
+ color: #d0d0d0;
1055
+ }
1056
+
1057
+ /* Formula Cards */
1058
+ .formula-card {
1059
+ background: linear-gradient(135deg, #0f3460 0%, #16213e 100%);
1060
+ padding: 2rem;
1061
+ border-radius: 12px;
1062
+ margin-bottom: 1.5rem;
1063
+ border: 2px solid #4a90e2;
1064
+ box-shadow: 0 4px 20px rgba(74, 144, 226, 0.2);
1065
+ }
1066
+
1067
+ .formula-header {
1068
+ color: #64ffda;
1069
+ font-size: 1.2rem;
1070
+ font-weight: 700;
1071
+ margin-bottom: 1rem;
1072
+ text-align: center;
1073
+ text-transform: uppercase;
1074
+ letter-spacing: 1px;
1075
+ }
1076
+
1077
+ .formula-main {
1078
+ font-size: 1.8rem;
1079
+ text-align: center;
1080
+ margin: 1.5rem 0;
1081
+ color: #fff;
1082
+ font-family: 'Courier New', monospace;
1083
+ }
1084
+
1085
+ .formula-symbol {
1086
+ color: #64ffda;
1087
+ font-weight: 700;
1088
+ font-size: 2rem;
1089
+ }
1090
+
1091
+ .formula-var {
1092
+ color: #64ffda;
1093
+ font-weight: 600;
1094
+ }
1095
+
1096
+ .formula-fraction {
1097
+ display: inline-flex;
1098
+ flex-direction: column;
1099
+ align-items: center;
1100
+ margin: 0 0.5rem;
1101
+ vertical-align: middle;
1102
+ }
1103
+
1104
+ .formula-numerator,
1105
+ .formula-denominator {
1106
+ padding: 0.2rem 0.5rem;
1107
+ }
1108
+
1109
+ .formula-line {
1110
+ width: 100%;
1111
+ height: 2px;
1112
+ background: #fff;
1113
+ margin: 0.2rem 0;
1114
+ }
1115
+
1116
+ .formula-steps {
1117
+ margin-top: 1rem;
1118
+ padding-top: 1rem;
1119
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
1120
+ }
1121
+
1122
+ .formula-steps p {
1123
+ color: #a0a0a0;
1124
+ margin-bottom: 0.5rem;
1125
+ }
1126
+
1127
+ .formula-steps ol,
1128
+ .formula-steps ul {
1129
+ margin-left: 2rem;
1130
+ color: #d0d0d0;
1131
+ }
1132
+
1133
+ .formula-steps li {
1134
+ margin-bottom: 0.5rem;
1135
+ }
1136
+
1137
+ /* Interactive Container */
1138
+ .interactive-container {
1139
+ background: #16213e;
1140
+ padding: 2rem;
1141
+ border-radius: 12px;
1142
+ margin-bottom: 2rem;
1143
+ border: 2px solid #4a90e2;
1144
+ box-shadow: 0 4px 20px rgba(74, 144, 226, 0.3);
1145
+ }
1146
+
1147
+ .interactive-container h3 {
1148
+ color: #64ffda;
1149
+ margin-bottom: 1.5rem;
1150
+ text-align: center;
1151
+ font-size: 1.5rem;
1152
+ }
1153
+
1154
+ .interactive-container canvas {
1155
+ display: block;
1156
+ max-width: 100%;
1157
+ height: auto;
1158
+ margin: 0 auto 1.5rem;
1159
+ background: #0f3460;
1160
+ border-radius: 8px;
1161
+ border: 1px solid #4a90e2;
1162
+ }
1163
+
1164
+ /* Controls */
1165
+ .controls {
1166
+ display: flex;
1167
+ flex-direction: column;
1168
+ gap: 1rem;
1169
+ align-items: center;
1170
+ }
1171
+
1172
+ .input-group {
1173
+ display: flex;
1174
+ flex-direction: column;
1175
+ gap: 0.8rem;
1176
+ width: 100%;
1177
+ max-width: 600px;
1178
+ }
1179
+
1180
+ .input-group label {
1181
+ color: #64ffda;
1182
+ font-weight: 600;
1183
+ }
1184
+
1185
+ .form-control {
1186
+ padding: 0.8rem;
1187
+ background: #0f3460;
1188
+ border: 2px solid #4a90e2;
1189
+ border-radius: 8px;
1190
+ color: #e1e1e1;
1191
+ font-size: 1rem;
1192
+ transition: all 0.3s ease;
1193
+ }
1194
+
1195
+ .form-control:focus {
1196
+ outline: none;
1197
+ border-color: #64ffda;
1198
+ box-shadow: 0 0 10px rgba(100, 255, 218, 0.3);
1199
+ }
1200
+
1201
+ .slider-group {
1202
+ display: flex;
1203
+ flex-direction: column;
1204
+ gap: 0.5rem;
1205
+ width: 100%;
1206
+ }
1207
+
1208
+ .slider-group label {
1209
+ color: #64ffda;
1210
+ font-weight: 600;
1211
+ }
1212
+
1213
+ .slider {
1214
+ width: 100%;
1215
+ height: 8px;
1216
+ border-radius: 5px;
1217
+ background: #0f3460;
1218
+ outline: none;
1219
+ -webkit-appearance: none;
1220
+ }
1221
+
1222
+ .slider::-webkit-slider-thumb {
1223
+ -webkit-appearance: none;
1224
+ appearance: none;
1225
+ width: 20px;
1226
+ height: 20px;
1227
+ border-radius: 50%;
1228
+ background: #64ffda;
1229
+ cursor: pointer;
1230
+ box-shadow: 0 0 10px rgba(100, 255, 218, 0.5);
1231
+ transition: all 0.3s ease;
1232
+ }
1233
+
1234
+ .slider::-webkit-slider-thumb:hover {
1235
+ background: #4a90e2;
1236
+ transform: scale(1.2);
1237
+ }
1238
+
1239
+ .slider::-moz-range-thumb {
1240
+ width: 20px;
1241
+ height: 20px;
1242
+ border-radius: 50%;
1243
+ background: #64ffda;
1244
+ cursor: pointer;
1245
+ border: none;
1246
+ box-shadow: 0 0 10px rgba(100, 255, 218, 0.5);
1247
+ }
1248
+
1249
+ /* Buttons */
1250
+ .btn {
1251
+ padding: 0.8rem 2rem;
1252
+ border: none;
1253
+ border-radius: 8px;
1254
+ font-size: 1rem;
1255
+ font-weight: 600;
1256
+ cursor: pointer;
1257
+ transition: all 0.3s ease;
1258
+ text-transform: uppercase;
1259
+ letter-spacing: 1px;
1260
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
1261
+ }
1262
+
1263
+ .btn-primary {
1264
+ background: linear-gradient(135deg, #4a90e2, #64ffda);
1265
+ color: #1a1a2e;
1266
+ }
1267
+
1268
+ .btn-primary:hover {
1269
+ transform: translateY(-2px);
1270
+ box-shadow: 0 6px 20px rgba(100, 255, 218, 0.4);
1271
+ }
1272
+
1273
+ .btn-secondary {
1274
+ background: #0f3460;
1275
+ color: #64ffda;
1276
+ border: 2px solid #4a90e2;
1277
+ }
1278
+
1279
+ .btn-secondary:hover {
1280
+ background: #16213e;
1281
+ transform: translateY(-2px);
1282
+ }
1283
+
1284
+ /* Results Display */
1285
+ .results {
1286
+ display: grid;
1287
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1288
+ gap: 1rem;
1289
+ width: 100%;
1290
+ margin-top: 1rem;
1291
+ }
1292
+
1293
+ .result-item {
1294
+ background: #0f3460;
1295
+ padding: 1rem;
1296
+ border-radius: 8px;
1297
+ text-align: center;
1298
+ border: 2px solid #4a90e2;
1299
+ }
1300
+
1301
+ .result-label {
1302
+ display: block;
1303
+ color: #64ffda;
1304
+ font-weight: 600;
1305
+ margin-bottom: 0.5rem;
1306
+ font-size: 0.9rem;
1307
+ }
1308
+
1309
+ .result-item span:last-child {
1310
+ display: block;
1311
+ color: #fff;
1312
+ font-size: 1.5rem;
1313
+ font-weight: 700;
1314
+ }
1315
+
1316
+ /* Tables */
1317
+ .comparison-table {
1318
+ width: 100%;
1319
+ border-collapse: collapse;
1320
+ margin: 1rem 0;
1321
+ background: #0f3460;
1322
+ border-radius: 8px;
1323
+ overflow: hidden;
1324
+ }
1325
+
1326
+ .comparison-table thead {
1327
+ background: linear-gradient(135deg, #4a90e2, #64ffda);
1328
+ color: #1a1a2e;
1329
+ }
1330
+
1331
+ .comparison-table th,
1332
+ .comparison-table td {
1333
+ padding: 1rem;
1334
+ text-align: left;
1335
+ border-bottom: 1px solid #16213e;
1336
+ }
1337
+
1338
+ .comparison-table th {
1339
+ font-weight: 700;
1340
+ text-transform: uppercase;
1341
+ font-size: 0.9rem;
1342
+ letter-spacing: 1px;
1343
+ }
1344
+
1345
+ .comparison-table tbody tr {
1346
+ transition: background 0.3s ease;
1347
+ }
1348
+
1349
+ .comparison-table tbody tr:hover {
1350
+ background: rgba(74, 144, 226, 0.1);
1351
+ }
1352
+
1353
+ .comparison-table td {
1354
+ color: #d0d0d0;
1355
+ }
1356
+
1357
+ /* Two Column Layout */
1358
+ .two-column {
1359
+ display: grid;
1360
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
1361
+ gap: 2rem;
1362
+ margin: 1.5rem 0;
1363
+ }
1364
+
1365
+ .column {
1366
+ background: #0f3460;
1367
+ padding: 1.5rem;
1368
+ border-radius: 8px;
1369
+ border: 2px solid rgba(74, 144, 226, 0.3);
1370
+ }
1371
+
1372
+ /* Comparison Grid */
1373
+ .comparison-grid {
1374
+ display: grid;
1375
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1376
+ gap: 1.5rem;
1377
+ margin: 1.5rem 0;
1378
+ }
1379
+
1380
+ .comparison-item {
1381
+ background: #0f3460;
1382
+ padding: 1.5rem;
1383
+ border-radius: 8px;
1384
+ border-left: 4px solid #4a90e2;
1385
+ }
1386
+
1387
+ /* Data Tree */
1388
+ .data-tree {
1389
+ display: flex;
1390
+ flex-direction: column;
1391
+ align-items: center;
1392
+ gap: 2rem;
1393
+ padding: 2rem;
1394
+ margin: 1.5rem 0;
1395
+ }
1396
+
1397
+ .tree-level-1,
1398
+ .tree-level-2,
1399
+ .tree-level-3 {
1400
+ display: flex;
1401
+ gap: 2rem;
1402
+ justify-content: center;
1403
+ flex-wrap: wrap;
1404
+ }
1405
+
1406
+ .tree-node {
1407
+ padding: 1rem 2rem;
1408
+ background: #0f3460;
1409
+ border: 2px solid #4a90e2;
1410
+ border-radius: 8px;
1411
+ color: #64ffda;
1412
+ font-weight: 600;
1413
+ position: relative;
1414
+ transition: all 0.3s ease;
1415
+ }
1416
+
1417
+ .tree-node:hover {
1418
+ transform: scale(1.05);
1419
+ box-shadow: 0 4px 15px rgba(74, 144, 226, 0.4);
1420
+ }
1421
+
1422
+ .tree-node.main {
1423
+ font-size: 1.3rem;
1424
+ background: linear-gradient(135deg, #4a90e2, #64ffda);
1425
+ color: #1a1a2e;
1426
+ }
1427
+
1428
+ .tree-node.categorical {
1429
+ border-color: #64ffda;
1430
+ }
1431
+
1432
+ .tree-node.numerical {
1433
+ border-color: #ff6b6b;
1434
+ }
1435
+
1436
+ /* Use Case List */
1437
+ .use-case-list {
1438
+ list-style: none;
1439
+ margin-left: 0;
1440
+ }
1441
+
1442
+ .use-case-list li {
1443
+ padding: 1rem;
1444
+ margin-bottom: 1rem;
1445
+ background: #0f3460;
1446
+ border-radius: 8px;
1447
+ border-left: 4px solid #4a90e2;
1448
+ transition: all 0.3s ease;
1449
+ }
1450
+
1451
+ .use-case-list li:hover {
1452
+ transform: translateX(5px);
1453
+ border-left-color: #64ffda;
1454
+ }
1455
+
1456
+ /* Example Solution */
1457
+ .example-solution {
1458
+ background: #0f3460;
1459
+ padding: 1.5rem;
1460
+ border-radius: 8px;
1461
+ margin-top: 1rem;
1462
+ font-family: 'Courier New', monospace;
1463
+ }
1464
+
1465
+ .example-solution p {
1466
+ margin-bottom: 0.8rem;
1467
+ color: #d0d0d0;
1468
+ }
1469
+
1470
+ .example-solution strong {
1471
+ color: #64ffda;
1472
+ }
1473
+
1474
+ /* Summary Card */
1475
+ .summary-card {
1476
+ background: linear-gradient(135deg, #0f3460 0%, #16213e 100%);
1477
+ padding: 2rem;
1478
+ border-radius: 12px;
1479
+ border: 2px solid #64ffda;
1480
+ box-shadow: 0 4px 20px rgba(100, 255, 218, 0.3);
1481
+ margin-bottom: 2rem;
1482
+ }
1483
+
1484
+ .summary-card h3 {
1485
+ color: #64ffda;
1486
+ margin-bottom: 1rem;
1487
+ font-size: 1.5rem;
1488
+ text-align: center;
1489
+ }
1490
+
1491
+ .summary-card ul {
1492
+ list-style: none;
1493
+ margin-left: 0;
1494
+ }
1495
+
1496
+ .summary-card li {
1497
+ padding: 0.8rem;
1498
+ margin-bottom: 0.8rem;
1499
+ background: rgba(100, 255, 218, 0.05);
1500
+ border-radius: 6px;
1501
+ border-left: 3px solid #64ffda;
1502
+ color: #d0d0d0;
1503
+ }
1504
+
1505
+ .summary-card li::before {
1506
+ content: "✓";
1507
+ color: #64ffda;
1508
+ font-weight: 700;
1509
+ margin-right: 0.8rem;
1510
+ }
1511
+
1512
+ /* Data Examples Table */
1513
+ .data-examples-table {
1514
+ width: 100%;
1515
+ border-collapse: collapse;
1516
+ margin-top: 1rem;
1517
+ }
1518
+
1519
+ .data-examples-table th,
1520
+ .data-examples-table td {
1521
+ padding: 1rem;
1522
+ text-align: left;
1523
+ border-bottom: 1px solid rgba(74, 144, 226, 0.2);
1524
+ }
1525
+
1526
+ .data-examples-table th {
1527
+ background: rgba(74, 144, 226, 0.2);
1528
+ color: #64ffda;
1529
+ font-weight: 600;
1530
+ }
1531
+
1532
+ /* Responsive Design */
1533
+ @media (max-width: 1024px) {
1534
+ .main-container {
1535
+ flex-direction: column;
1536
+ }
1537
+
1538
+ .sidebar {
1539
+ width: 100%;
1540
+ height: auto;
1541
+ position: static;
1542
+ transform: translateX(-100%);
1543
+ }
1544
+
1545
+ .sidebar.active {
1546
+ transform: translateX(0);
1547
+ }
1548
+
1549
+ .mobile-menu-btn {
1550
+ display: flex;
1551
+ }
1552
+
1553
+ .content {
1554
+ padding: 2rem 1.5rem;
1555
+ }
1556
+
1557
+ .topic-header h2 {
1558
+ font-size: 2rem;
1559
+ }
1560
+
1561
+ .two-column {
1562
+ grid-template-columns: 1fr;
1563
+ }
1564
+ }
1565
+
1566
+ @media (max-width: 768px) {
1567
+ .course-title {
1568
+ font-size: 1.3rem;
1569
+ }
1570
+
1571
+ .content {
1572
+ padding: 1.5rem 1rem;
1573
+ }
1574
+
1575
+ .topic-header h2 {
1576
+ font-size: 1.6rem;
1577
+ }
1578
+
1579
+ .formula-main {
1580
+ font-size: 1.3rem;
1581
+ }
1582
+
1583
+ .comparison-grid {
1584
+ grid-template-columns: 1fr;
1585
+ }
1586
+
1587
+ .results {
1588
+ grid-template-columns: 1fr;
1589
+ }
1590
+
1591
+ .interactive-container canvas {
1592
+ max-width: 100%;
1593
+ height: auto;
1594
+ }
1595
+ }
1596
+
1597
+ /* Animations */
1598
+ @keyframes pulse {
1599
+ 0%, 100% {
1600
+ opacity: 1;
1601
+ }
1602
+ 50% {
1603
+ opacity: 0.5;
1604
+ }
1605
+ }
1606
+
1607
+ .pulse {
1608
+ animation: pulse 2s ease-in-out infinite;
1609
+ }
1610
+
1611
+ /* Loading State */
1612
+ .loading {
1613
+ display: inline-block;
1614
+ width: 20px;
1615
+ height: 20px;
1616
+ border: 3px solid rgba(100, 255, 218, 0.3);
1617
+ border-radius: 50%;
1618
+ border-top-color: #64ffda;
1619
+ animation: spin 1s ease-in-out infinite;
1620
+ }
1621
+
1622
+ @keyframes spin {
1623
+ to {
1624
+ transform: rotate(360deg);
1625
+ }
1626
+ }
1627
+
1628
+ /* Smooth Transitions */
1629
+ * {
1630
+ transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
1631
+ }