File size: 23,302 Bytes
5978da9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1fffa37
5978da9
 
 
 
 
 
 
 
 
1fffa37
 
 
5978da9
1fffa37
5978da9
 
 
 
 
1fffa37
 
 
 
 
 
 
 
 
5978da9
 
1fffa37
 
 
 
 
 
 
 
 
5978da9
1fffa37
5978da9
 
 
 
 
 
 
 
 
cb13c4e
 
 
 
 
 
 
 
 
5978da9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1fffa37
 
 
 
 
 
5978da9
1fffa37
5978da9
 
 
 
 
cb13c4e
 
5978da9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1fffa37
5978da9
 
 
 
 
1fffa37
5978da9
 
cb13c4e
5978da9
 
 
 
cb13c4e
5978da9
 
 
cb13c4e
 
 
 
 
 
 
 
 
5978da9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb13c4e
 
cbb89aa
 
 
cb13c4e
 
 
cbb89aa
cb13c4e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cbb89aa
 
 
 
cb13c4e
 
cbb89aa
cb13c4e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5978da9
 
 
cb13c4e
 
5978da9
 
cb13c4e
 
 
 
 
 
 
5978da9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb13c4e
5978da9
 
 
 
cbb89aa
 
5978da9
 
 
cbb89aa
 
 
cb13c4e
 
5978da9
cb13c4e
 
 
5978da9
 
cb13c4e
 
 
 
 
cbb89aa
 
 
 
 
 
 
 
 
 
cb13c4e
 
 
5978da9
 
 
 
 
 
 
 
 
 
 
 
 
4506dfb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Quantum State Explorer</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <script src="https://unpkg.com/feather-icons"></script>
    <script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.121.1/build/three.min.js"></script>
    <style>
        .quantum-orb {
            transition: all 0.5s ease;
        }
        .particle-path {
            stroke-dasharray: 1000;
            stroke-dashoffset: 1000;
            animation: dash 5s linear forwards infinite;
        }
        @keyframes dash {
            to {
                stroke-dashoffset: 0;
            }
        }
        .wave-function {
            background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(124,58,237,0.5) 50%, rgba(255,255,255,0) 100%);
            height: 2px;
            width: 100%;
            position: absolute;
            bottom: 0;
            animation: pulse 3s ease-in-out infinite;
        }
        @keyframes pulse {
            0%, 100% { opacity: 0.3; }
            50% { opacity: 1; }
        }
    </style>
</head>
<body class="bg-gray-900 text-white min-h-screen overflow-x-hidden" id="vanta-bg">
    <div class="container mx-auto px-4 py-12">
        <header class="text-center mb-16">
            <h1 class="text-5xl md:text-6xl font-bold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-purple-400 to-pink-600">
                Quantum State Explorer
            </h1>
            <p class="text-xl md:text-2xl text-gray-300 max-w-3xl mx-auto">
                Visualize and explore the mysterious quantum states of subatomic particles
            </p>
        </header>

        <main class="grid grid-cols-1 lg:grid-cols-2 gap-12">
            <div class="bg-gray-800 rounded-2xl p-8 shadow-2xl relative overflow-hidden">
                <div class="wave-function"></div>
                <h2 class="text-3xl font-bold mb-6 text-purple-300">Particle State Generator</h2>
                
                <div class="mb-8">
                    <label class="block text-gray-300 mb-2">Select Particle Type</label>
                    <div class="grid grid-cols-4 gap-2 mb-4">
                        <button class="particle-btn bg-purple-900 hover:bg-purple-700 text-white py-3 px-4 rounded-lg transition" data-particle="electron">
                            <i data-feather="zap" class="inline mr-2"></i> Electron
                        </button>
                        <button class="particle-btn bg-blue-900 hover:bg-blue-700 text-white py-3 px-4 rounded-lg transition" data-particle="photon">
                            <i data-feather="sun" class="inline mr-2"></i> Photon
                        </button>
                        <button class="particle-btn bg-pink-900 hover:bg-pink-700 text-white py-3 px-4 rounded-lg transition" data-particle="quark">
                            <i data-feather="activity" class="inline mr-2"></i> Quark
                        </button>
                        <button class="particle-btn bg-green-900 hover:bg-green-700 text-white py-3 px-4 rounded-lg transition" data-particle="ion">
                            <i data-feather="atom" class="inline mr-2"></i> Ion
                        </button>
                    </div>
</div>

                <div class="mb-8">
                    <label class="block text-gray-300 mb-2">Quantum State Parameters</label>
                    <div class="space-y-4">
                        <div>
                            <div class="flex justify-between text-gray-400 mb-1">
                                <label>Superposition</label>
                                <span id="superposition-value">50%</span>
                            </div>
                            <input type="range" min="0" max="100" step="5" value="50" class="w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer" id="superposition">
                            <div class="text-xs text-gray-500 mt-1">
                                <span>Collapsed</span>
                                <span class="float-right">Superposed</span>
                            </div>
                        </div>
                        <div>
                            <div class="flex justify-between text-gray-400 mb-1">
                                <label>Entanglement</label>
                                <span id="entanglement-value">25%</span>
                            </div>
                            <input type="range" min="0" max="100" step="5" value="25" class="w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer" id="entanglement">
                            <div class="text-xs text-gray-500 mt-1">
                                <span>Independent</span>
                                <span class="float-right">Entangled</span>
                            </div>
                        </div>
<div>
                            <label class="text-gray-400">Spin</label>
                            <div class="flex space-x-4">
                                <button class="spin-btn bg-gray-700 hover:bg-gray-600 text-white py-2 px-4 rounded-lg transition" data-spin="up">↑ Up</button>
                                <button class="spin-btn bg-gray-700 hover:bg-gray-600 text-white py-2 px-4 rounded-lg transition" data-spin="down">↓ Down</button>
                                <button class="spin-btn bg-gray-700 hover:bg-gray-600 text-white py-2 px-4 rounded-lg transition" data-spin="super">🌀 Superposition</button>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="grid grid-cols-2 gap-4">
                    <button id="generate-btn" class="bg-gradient-to-r from-purple-600 to-pink-600 hover:from-purple-700 hover:to-pink-700 text-white font-bold py-4 px-6 rounded-lg shadow-lg transition-all transform hover:scale-105">
                        Generate Quantum State
                    </button>
                    <button id="analyze-btn" class="bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-700 hover:to-indigo-700 text-white font-bold py-4 px-6 rounded-lg shadow-lg transition-all transform hover:scale-105">
                        Analyze State
                    </button>
                </div>
</div>

            <div class="bg-gray-800 rounded-2xl p-8 shadow-2xl relative overflow-hidden min-h-[500px] flex items-center justify-center">
                <div class="wave-function"></div>
                <h2 class="text-3xl font-bold mb-6 text-purple-300 absolute top-8 left-8">Visualization</h2>
                
                <div id="visualization-container" class="w-full h-full flex items-center justify-center">
                    <div class="text-center">
                        <svg width="300" height="300" viewBox="0 0 300 300" id="quantum-visualization">
                            <circle cx="150" cy="150" r="30" fill="url(#particle-gradient)" class="quantum-orb" opacity="0" />
                            <path d="M150,50 A100,100 0 0,1 250,150 A100,100 0 0,1 150,250 A100,100 0 0,1 50,150 A100,100 0 0,1 150,50" 
                                  fill="none" stroke="rgba(124, 58, 237, 0.2)" stroke-width="2" class="particle-path" />
                            <defs>
                                <radialGradient id="particle-gradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
                                    <stop offset="0%" stop-color="#8B5CF6" />
                                    <stop offset="100%" stop-color="#EC4899" />
                                </radialGradient>
                            </defs>
                        </svg>
                        <div id="state-description" class="mt-8 text-gray-300 text-lg">
                            <p>Select a particle and adjust parameters to see its quantum state</p>
                        </div>
                        <div id="state-equation" class="mt-4 text-xl font-mono bg-gray-900 p-4 rounded-lg hidden">
                            |ψ⟩ = <span id="equation-content"></span>
                        </div>
                    </div>
                </div>
            </div>
        </main>

        <section class="mt-24 bg-gray-800 rounded-2xl p-8 shadow-2xl">
            <h2 class="text-3xl font-bold mb-6 text-purple-300">Quantum Mechanics Basics</h2>
            <div class="grid md:grid-cols-3 gap-8">
                <div class="bg-gray-700 p-6 rounded-lg">
                    <i data-feather="box" class="text-purple-400 w-8 h-8 mb-4"></i>
                    <h3 class="text-xl font-bold mb-2">Wave-Particle Duality</h3>
                    <p class="text-gray-300">Quantum entities exhibit both particle-like and wave-like properties depending on how they're observed.</p>
                </div>
                <div class="bg-gray-700 p-6 rounded-lg">
                    <i data-feather="git-merge" class="text-purple-400 w-8 h-8 mb-4"></i>
                    <h3 class="text-xl font-bold mb-2">Superposition</h3>
                    <p class="text-gray-300">A quantum system can exist in multiple states simultaneously until measured or observed.</p>
                </div>
                <div class="bg-gray-700 p-6 rounded-lg">
                    <i data-feather="link" class="text-purple-400 w-8 h-8 mb-4"></i>
                    <h3 class="text-xl font-bold mb-2">Entanglement</h3>
                    <p class="text-gray-300">When particles become entangled, the state of one instantly influences the state of the other, regardless of distance.</p>
                </div>
            </div>
        </section>

        <footer class="mt-24 text-center text-gray-400 pb-12">
            <p>Explore the quantum realm at your own risk! Schrödinger's cat not included.</p>
            <p class="mt-2">© 2023 Quantum State Explorer | Built with quantum magic</p>
        </footer>
    </div>

    <script>
        // Initialize Vanta.js background
        VANTA.GLOBE({
            el: "#vanta-bg",
            mouseControls: true,
            touchControls: true,
            gyroControls: false,
            minHeight: 200.00,
            minWidth: 200.00,
            scale: 1.00,
            scaleMobile: 1.00,
            color: 0x7c3aed,
            backgroundColor: 0x111827,
            size: 0.8
        });

        // Particle data
        const particles = {
            electron: {
                name: "Electron",
                color: "#8B5CF6",
                description: "A fundamental subatomic particle with negative charge.",
                states: ["Spin Up", "Spin Down", "Superposition"]
            },
            photon: {
                name: "Photon",
                color: "#3B82F6",
                description: "A quantum of electromagnetic radiation exhibiting wave-particle duality.",
                states: ["Vertical Polarization", "Horizontal Polarization", "Circular Polarization"]
            },
            quark: {
                name: "Quark",
                color: "#EC4899",
                description: "An elementary particle that combines to form hadrons like protons and neutrons.",
                states: ["Up", "Down", "Strange", "Charm", "Bottom", "Top"]
            },
            ion: {
                name: "Ion",
                color: "#10B981",
                description: "An atom or molecule with a net electric charge due to loss or gain of electrons.",
                states: ["Ground State", "Excited State", "Rydberg State"]
            }
};
        // Current state
        let currentParticle = null;
        let currentSuperposition = 50;
        let currentEntanglement = 25;
        let currentSpin = "super";
        let analyzing = false;
// DOM elements
        const particleBtns = document.querySelectorAll('.particle-btn');
        const spinBtns = document.querySelectorAll('.spin-btn');
        const generateBtn = document.getElementById('generate-btn');
        const superpositionSlider = document.getElementById('superposition');
        const entanglementSlider = document.getElementById('entanglement');
        const visualizationContainer = document.getElementById('visualization-container');
        const stateDescription = document.getElementById('state-description');
        const stateEquation = document.getElementById('state-equation');
        const equationContent = document.getElementById('equation-content');
        const quantumOrb = document.querySelector('.quantum-orb');
        const svg = document.getElementById('quantum-visualization');

        // Event listeners
        particleBtns.forEach(btn => {
            btn.addEventListener('click', () => {
                particleBtns.forEach(b => b.classList.remove('ring-2', 'ring-white'));
                btn.classList.add('ring-2', 'ring-white');
                currentParticle = btn.dataset.particle;
                updateVisualization();
            });
        });

        spinBtns.forEach(btn => {
            btn.addEventListener('click', () => {
                spinBtns.forEach(b => b.classList.remove('ring-2', 'ring-white'));
                btn.classList.add('ring-2', 'ring-white');
                currentSpin = btn.dataset.spin;
                updateVisualization();
            });
        });
        superpositionSlider.addEventListener('input', () => {
            currentSuperposition = superpositionSlider.value;
            document.getElementById('superposition-value').textContent = `${currentSuperposition}%`;
            updateVisualization();
        });

        entanglementSlider.addEventListener('input', () => {
            currentEntanglement = entanglementSlider.value;
            document.getElementById('entanglement-value').textContent = `${currentEntanglement}%`;
            updateVisualization();
        });
        generateBtn.addEventListener('click', () => {
            if (!currentParticle) {
                alert("Please select a particle type first!");
                return;
            }
            analyzing = false;
            animateState();
        });

        document.getElementById('analyze-btn').addEventListener('click', () => {
            if (!currentParticle) {
                alert("Please select a particle type first!");
                return;
            }
            analyzing = true;
            analyzeState();
        });
// Update visualization
        function updateVisualization() {
            if (!currentParticle) return;

            const particle = particles[currentParticle];
            
            // Update particle color
            document.querySelector('#particle-gradient stop:first-child').setAttribute('stop-color', particle.color);
            
            // Update description
            let description = `<strong class="text-${currentParticle === 'electron' ? 'purple' : currentParticle === 'photon' ? 'blue' : 'pink'}-400">${particle.name}</strong>: ${particle.description}<br><br>`;
            description += `Superposition: ${currentSuperposition}%<br>`;
            description += `Entanglement: ${currentEntanglement}%<br>`;
            description += `Spin: ${currentSpin === 'up' ? '↑ Up' : currentSpin === 'down' ? '↓ Down' : '🌀 Superposition'}`;
            
            stateDescription.innerHTML = description;
            stateEquation.classList.add('hidden');
        }
        // Analyze quantum state
        function analyzeState() {
            // Calculate quantum properties with physical accuracy
            const wavelength = 100 + Math.random() * 700; // nm (visible light range 100-800nm)
            const energy = 1240 / wavelength; // eV (E = hc/λ simplified)
            currentSuperposition = Math.floor(Math.random() * 100);
            currentEntanglement = Math.floor(Math.random() * 100);
            currentSpin = Math.random() > 0.5 ? (Math.random() > 0.5 ? 'up' : 'down') : 'super';
// Update UI
            superpositionSlider.value = currentSuperposition;
            entanglementSlider.value = currentEntanglement;
            document.getElementById('superposition-value').textContent = `${currentSuperposition}%`;
            document.getElementById('entanglement-value').textContent = `${currentEntanglement}%`;
            
            // Highlight selected spin
            spinBtns.forEach(b => b.classList.remove('ring-2', 'ring-white'));
            document.querySelector(`.spin-btn[data-spin="${currentSpin}"]`).classList.add('ring-2', 'ring-white');
            
            // Animate with analysis effect
            analyzeEffect().then(() => animateState());
        }

        function analyzeEffect() {
            return new Promise((resolve) => {
                const analysisSteps = [
                    "Measuring particle state...",
                    `Calculating wavelength: ${wavelength.toFixed(2)} nm...`,
                    `Calculating energy: ${energy.toFixed(2)} eV...`,
                    "Analyzing superposition coherence...",
                    "Measuring entanglement correlation...",
                    "Resolving spin direction...",
                    "Analysis complete!"
];
                
                let i = 0;
                stateDescription.innerHTML = `<div class="text-center"><div class="inline-block animate-pulse"><i data-feather="loader" class="w-8 h-8"></i></div><p class="mt-2">${analysisSteps[i]}</p></div>`;
                feather.replace();
                
                const interval = setInterval(() => {
                    i++;
                    if (i >= analysisSteps.length) {
                        clearInterval(interval);
                        resolve();
                        return;
                    }
                    stateDescription.innerHTML = `<div class="text-center"><div class="inline-block animate-pulse"><i data-feather="loader" class="w-8 h-8"></i></div><p class="mt-2">${analysisSteps[i]}</p></div>`;
                    feather.replace();
                }, 800);
            });
        }

        // Animate quantum state
        function animateState() {
const particle = particles[currentParticle];
            // Show quantum orb with different effect if analyzing
            quantumOrb.style.opacity = '1';
            
            if (analyzing) {
                quantumOrb.style.filter = 'drop-shadow(0 0 10px rgba(59, 130, 246, 0.8))';
                setTimeout(() => {
                    quantumOrb.style.filter = 'none';
                }, 1500);
            }
// Animation
            anime({
                targets: '.quantum-orb',
                r: [10, 30, 10],
                opacity: [0.5, 1, 0.8],
                duration: 2000,
                loop: true,
                easing: 'easeInOutSine'
            });
            
            // Generate random path for particle
            const paths = [];
            for (let i = 0; i < 5; i++) {
                const startX = 150;
                const startY = 150;
                const cp1x = Math.random() * 300;
                const cp1y = Math.random() * 300;
                const cp2x = Math.random() * 300;
                const cp2y = Math.random() * 300;
                const endX = 150;
                const endY = 150;
                
                paths.push(`M${startX},${startY} C${cp1x},${cp1y} ${cp2x},${cp2y} ${endX},${endY}`);
            }
            
            // Update SVG paths
            const existingPaths = svg.querySelectorAll('.dynamic-path');
            existingPaths.forEach(path => path.remove());
            
            paths.forEach((path, i) => {
                const newPath = document.createElementNS("http://www.w3.org/2000/svg", "path");
                newPath.setAttribute("d", path);
                newPath.setAttribute("fill", "none");
                newPath.setAttribute("stroke", `rgba(${hexToRgb(particle.color)}, ${0.3 + (i * 0.1)})`);
                newPath.setAttribute("stroke-width", "2");
                newPath.setAttribute("class", "dynamic-path particle-path");
                newPath.style.animationDelay = `${i * 0.5}s`;
                svg.appendChild(newPath);
            });
            // Generate quantum state equation with more detail
            let equation = '';
            if (currentSpin === 'super') {
                const alpha = (currentSuperposition / 100).toFixed(2);
                const beta = (1 - (currentSuperposition / 100)).toFixed(2);
                const phase = (energy * 0.123).toFixed(2); // Arbitrary phase factor based on energy
                equation = `${alpha}|↑⟩ + ${beta}e<sup>i${phase}π</sup>|↓⟩`;
            } else {
                equation = currentSpin === 'up' ? '|↑⟩' : '|↓⟩';
            }
            // Include energy in the equation
            equation += ` @ ${energy.toFixed(2)}eV`;
if (currentEntanglement > 30) {
                const entanglementStrength = (currentEntanglement / 100).toFixed(2);
                equation += ` ⊗ (${entanglementStrength}|00⟩ + ${Math.sqrt(1 - entanglementStrength**2).toFixed(2)}|11⟩)`;
            }
            equationContent.innerHTML = equation;
stateEquation.classList.remove('hidden');
            // Update background and add analysis annotation if needed
            const bgColor = `rgba(${hexToRgb(particle.color)}, ${currentEntanglement / 200})`;
            visualizationContainer.style.backgroundColor = bgColor;
            
            if (analyzing) {
                stateDescription.innerHTML += `
                    <div class="mt-4 p-4 bg-gray-700 rounded-lg text-left">
                        <h4 class="font-bold text-blue-300 mb-2">Analysis Results</h4>
                        <p class="mb-1">Wavelength: <span class="text-purple-300">${wavelength.toFixed(2)} nm</span></p>
                        <p class="mb-1">Energy: <span class="text-blue-300">${energy.toFixed(2)} eV</span></p>
                        <p class="mb-1">Superposition Coherence: <span class="text-purple-300">${currentSuperposition}%</span></p>
                        <p class="mb-1">Entanglement Correlation: <span class="text-blue-300">${currentEntanglement}%</span></p>
                        <p class="mb-1">Spin State: <span class="text-pink-300">${currentSpin === 'up' ? '↑ Up' : currentSpin === 'down' ? '↓ Down' : '🌀 Superposition'}</span></p>
                        <div class="mt-2 text-xs text-gray-400">
                            <p>λ = hc/E = ${wavelength.toFixed(2)}nm</p>
                            <p>E = hc/λ = ${energy.toFixed(2)}eV</p>
                        </div>
</div>
                `;
            }
}

        // Helper function to convert hex to rgb
        function hexToRgb(hex) {
            const r = parseInt(hex.slice(1, 3), 16);
            const g = parseInt(hex.slice(3, 5), 16);
            const b = parseInt(hex.slice(5, 7), 16);
            return `${r}, ${g}, ${b}`;
        }

        // Initialize feather icons
        feather.replace();
    </script>
</body>
</html>