DjayChucko commited on
Commit
0b2a6ce
·
verified ·
1 Parent(s): 2854d53

Build me a landing page using this html:

Browse files

<!DOCTYPE html>
<html lang="en" class="scroll-smooth">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Kyber Sales Enablement - Your strategic real-time video companion">
<title>Kyber Value Mapper | Home</title>

<link rel="icon" type="image/png" href="Images/kyber-logomark.png">

<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://unpkg.com/feather-icons"></script>

<script>
tailwind.config = {
darkMode: 'class',
theme: {
extend: {
colors: {
// Generic, high-contrast colors inspired by the original
primary: '#3b82f6', // Blue-500
secondary: '#6366f1', // Indigo-500
dark: '#1e293b'
}
}
}
}
</script>
<style>
/* --- UNIFIED HEADER STYLES --- */
.nav-link.active {
@apply text-primary font-medium border-b-2 border-primary;
}
.hamburger-line {
@apply w-6 h-0.5 bg-white transition-all duration-300;
}
#mobileMenuButton.open .hamburger-line:nth-child(1) {
transform: rotate(45deg) translate(5px, 6px);
}
#mobileMenuButton.open .hamburger-line:nth-child(2) {
opacity: 0;
}
#mobileMenuButton.open .hamburger-line:nth-child(3) {
transform: rotate(-45deg) translate(5px, -6px);
}

/* --- PAGE-SPECIFIC STYLES --- */
select {
-webkit-appearance: none; -moz-appearance: none; appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' 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");
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 1.25rem;
}
.dark select {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' 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");
}
</style>
</head>
<body class="bg-gray-100 dark:bg-gray-900 text-gray-800 dark:text-gray-200 min-h-screen flex flex-col">

<header class="sticky top-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-md shadow-sm">
<div class="container mx-auto px-4 py-3">
<div class="flex justify-between items-center">
<a href="index.html" class="flex items-center space-x-2">
<img src="Images/kyber-logomark.png" alt="Kyber Logo" class="h-8 mr-2">

<span class="text-xl font-bold text-gray-800 dark:text-white font-heading">Kyber Sales Enablement</span>
</a>
<nav class="hidden md:flex space-x-8">
<a href="value-mapper.html" class="nav-link py-2 px-1 text-slate-200 hover:text-blue-400 transition-colors">Mapper</a>
<a href="intel.html" class="nav-link py-2 px-1 text-slate-200 hover:text-blue-400 transition-colors">Products</a>
<a href="proof.html" class="nav-link py-2 px-1 text-slate-200 hover:text-blue-400 transition-colors">Proof</a>
<a href="scorecard.html" class="nav-link py-2 px-1 text-slate-200 hover:text-blue-400 transition-colors">Scorecard</a>
<a href="strategy.html" class="nav-link py-2 px-1 text-slate-200 hover:text-blue-400 transition-colors">Method</a>
<a href="academy.html" class="nav-link py-2 px-1 text-slate-200 hover:text-blue-400 transition-colors">Academy</a>
</nav>
<div class="flex items-center space-x-4">
<button id="themeToggle" class="p-2 rounded-full text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700">
<i data-feather="moon" class="hidden dark:block"></i>
<i data-feather="sun" class="block dark:hidden"></i>
</button>
<button id="mobileMenuButton" class="md:hidden flex flex-col space-y-1.5 p-2 z-50 bg-indigo-600 rounded-lg">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</button>
</div>
</div>
</div>
</header>

<div id="mobileMenu" class="hidden fixed inset-0 z-40 bg-gray-900 bg-opacity-95 backdrop-blur-sm">
<div class="flex flex-col items-center justify-center h-full space-y-8">
<a href="index.html" class="nav-link text-3xl text-white">Home</a>
<a href="value-mapper.html" class="nav-link text-3xl text-white">Mapper</a>
<a href="intel.html" class="nav-link text-3xl text-white">Products</a>
<a href="proof.html" class="nav-link text-3xl text-white">Proof</a>
<a href="scorecard.html" class="nav-link text-3xl text-white">Scorecard</a>
<a href="strategy.html" class="nav-link text-3xl text-white">Method</a>
<a href="academy.html" class="nav-link text-3xl text-white">Academy</a>
</div>
</div>
<main class="flex-grow bg-gradient-to-br from-purple-600 to-indigo-700">
<div class="container mx-auto px-4 py-12">
<div class="bg-white dark:bg-gray-800 p-6 sm:p-8 rounded-2xl shadow-2xl mb-8">
<div class="text-center">
<h1 class="text-3xl sm:text-4xl font-heading font-extrabold text-gray-800 dark:text-white mb-3 leading-tight">Kyber Value Mapper</h1>
<div class="flex justify-center mb-6">
<img src="Images/kyber-mapper.png" alt="Kyber Value Mapper Graphic" class="h-48 w-auto">

</div>
</div>
<div class="max-w-md mx-auto">
<select id="industry-selector" onchange="updateContent(true)" class="block w-full py-3 px-4 pr-10 border border-gray-300 dark:border-gray-600 rounded-xl text-base font-semibold text-gray-800 dark:text-gray-200 bg-white dark:bg-gray-700 focus:ring-2 focus:ring-blue-500 focus:outline-none transition duration-200 shadow-lg">
<option value="placeholder" disabled selected class="text-gray-500">- Choose Industry to Map -</option>
<option value="Robotics & Tele-Operation">Robotics & Tele-Operation</option>
<option value="Cloud Gaming / Cloud Rendering">Cloud Gaming / Cloud Rendering</option>
<option value="Live Auctions & eSports Betting">Live Auctions & eSports Betting</option>
<option value="Healthcare / Tele-Surgery">Healthcare / Tele-Surgery (New)</option>
<option value="Industrial IoT / Machine Vision">Industrial IoT / Machine Vision (New)</option>
<option value="Remote Live Production (REMI)">Remote Live Production (REMI) (New)</option>
</select>
</div>
</div>

<div id="initial-message" class="text-center p-12 rounded-xl bg-white/80 dark:bg-gray-800/80 text-gray-600 dark:text-gray-300 border-2 border-dashed border-gray-400 dark:border-gray-600 backdrop-blur-sm">
<p class="text-lg font-medium">Please select an industry from the dropdown above to reveal targeted value mapping, discovery questions, and permission-based openers.</p>
</div>

<div id="dynamic-area" class="hidden space-y-8">
<h2 id="industry-title" class="text-3xl font-heading font-bold text-white text-center pt-4"></h2>

<div class="bg-white dark:bg-gray-800 p-6 sm:p-8 rounded-xl shadow-lg">
<h3 class="text-xl font-heading font-bold mb-6 text-gray-800 dark:text-white">Recommended Value Proposition & Suggested Product Focus</h3>
<div id="value-drivers" class="space-y-4 text-gray-700 dark:text-gray-300 text-base"></div>
</div>

<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<div class="bg-white dark:bg-gray-800 p-6 rounded-xl shadow-lg">
<h3 class="text-lg font-heading font-bold mb-4 text-gray-800 dark:text-white">Permission-Based Opener (PBO) / C-Level Hook</h3>
<p id="pbo1" class="text-gray-800 dark:text-white font-medium text-base"></p>
</div>
<div class="bg-white dark:bg-gray-800 p-6 rounded-xl shadow-lg">
<h3 class="text-lg font-heading font-bold mb-4 text-gray-800 dark:text-white">Discovery Question (DQ) / Technical Deep Dive</h3>
<p id="dq1" class="text-gray-600 dark:text-gray-400 italic text-base"></p>
</div>
</div>

<div class="flex justify-center pt-4">
<button id="refresh-button" class="hidden items-center px-6 py-3 bg-white/20 hover:bg-white/30 rounded-lg text-white font-semibold transition flex space-x-2 shadow-lg">
<i data-feather="refresh-cw" class="w-5 h-5"></i>
<span>Cycle Inspiration</span>
</button>
</div>

</div>
</div>
</main>

<footer class="bg-purple-800/80 dark:bg-purple-800/80 backdrop-blur-sm border-t border-gray-700">
<div class="container mx-auto px-4 py-8">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="mb-6 md:mb-0">
<p class="text-gray-600 dark:text-gray-300 mt-2 text-sm">
Leveraging Kyber to Enable Real-Time Interaction
</p>
</div>

<div class="mt-8 pt-8 border-t border-gray-200 dark:border-gray-700 text-center text-sm text-gray-500 dark:

Files changed (5) hide show
  1. README.md +7 -4
  2. components/navbar.js +239 -0
  3. index.html +366 -19
  4. script.js +85 -0
  5. style.css +46 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Kyber Value Mapper Pro
3
- emoji: 😻
4
  colorFrom: yellow
5
- colorTo: pink
 
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: Kyber Value Mapper Pro 🚀
 
3
  colorFrom: yellow
4
+ colorTo: red
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/navbar.js ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ position: sticky;
9
+ top: 0;
10
+ z-index: 50;
11
+ background-color: rgba(255, 255, 255, 0.8);
12
+ backdrop-filter: blur(12px);
13
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
14
+ }
15
+
16
+ .dark :host {
17
+ background-color: rgba(17, 24, 39, 0.8);
18
+ }
19
+
20
+ .container {
21
+ max-width: 1280px;
22
+ margin: 0 auto;
23
+ padding: 0.75rem 1rem;
24
+ }
25
+
26
+ .nav-container {
27
+ display: flex;
28
+ justify-content: space-between;
29
+ align-items: center;
30
+ }
31
+
32
+ .logo-link {
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 0.5rem;
36
+ text-decoration: none;
37
+ }
38
+
39
+ .logo-img {
40
+ height: 2rem;
41
+ }
42
+
43
+ .logo-text {
44
+ font-size: 1.25rem;
45
+ font-weight: 700;
46
+ color: rgb(31, 41, 55);
47
+ }
48
+
49
+ .dark .logo-text {
50
+ color: white;
51
+ }
52
+
53
+ .nav-links {
54
+ display: none;
55
+ gap: 2rem;
56
+ }
57
+
58
+ @media (min-width: 768px) {
59
+ .nav-links {
60
+ display: flex;
61
+ }
62
+ }
63
+
64
+ .nav-link {
65
+ padding: 0.5rem 0.25rem;
66
+ color: rgb(148, 163, 184);
67
+ text-decoration: none;
68
+ transition: color 0.3s ease;
69
+ }
70
+
71
+ .nav-link:hover {
72
+ color: #6366f1;
73
+ }
74
+
75
+ .nav-link.active {
76
+ color: #6366f1;
77
+ font-weight: 500;
78
+ border-bottom: 2px solid #6366f1;
79
+ }
80
+
81
+ .actions {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 1rem;
85
+ }
86
+
87
+ .theme-toggle {
88
+ padding: 0.5rem;
89
+ border-radius: 9999px;
90
+ color: rgb(107, 114, 128);
91
+ transition: background-color 0.3s ease;
92
+ }
93
+
94
+ .theme-toggle:hover {
95
+ background-color: rgb(229, 231, 235);
96
+ }
97
+
98
+ .dark .theme-toggle:hover {
99
+ background-color: rgb(55, 65, 81);
100
+ }
101
+
102
+ .mobile-menu-btn {
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: 0.375rem;
106
+ padding: 0.5rem;
107
+ z-index: 50;
108
+ background-color: #6366f1;
109
+ border-radius: 0.5rem;
110
+ }
111
+
112
+ @media (min-width: 768px) {
113
+ .mobile-menu-btn {
114
+ display: none;
115
+ }
116
+ }
117
+
118
+ .hamburger-line {
119
+ width: 1.5rem;
120
+ height: 0.125rem;
121
+ background-color: white;
122
+ transition: all 0.3s ease;
123
+ }
124
+
125
+ .mobile-menu-btn.open .hamburger-line:nth-child(1) {
126
+ transform: rotate(45deg) translate(0.3125rem, 0.375rem);
127
+ }
128
+
129
+ .mobile-menu-btn.open .hamburger-line:nth-child(2) {
130
+ opacity: 0;
131
+ }
132
+
133
+ .mobile-menu-btn.open .hamburger-line:nth-child(3) {
134
+ transform: rotate(-45deg) translate(0.3125rem, -0.375rem);
135
+ }
136
+
137
+ .mobile-menu {
138
+ position: fixed;
139
+ inset: 0;
140
+ z-index: 40;
141
+ background-color: rgba(17, 24, 39, 0.95);
142
+ backdrop-filter: blur(12px);
143
+ display: none;
144
+ }
145
+
146
+ .mobile-menu.open {
147
+ display: flex;
148
+ }
149
+
150
+ .mobile-menu-content {
151
+ display: flex;
152
+ flex-direction: column;
153
+ align-items: center;
154
+ justify-content: center;
155
+ height: 100;
156
+ gap: 2rem;
157
+ }
158
+
159
+ .mobile-nav-link {
160
+ font-size: 1.875rem;
161
+ color: white;
162
+ text-decoration: none;
163
+ }
164
+ </style>
165
+ <div class="container">
166
+ <div class="nav-container">
167
+ <a href="index.html" class="logo-link">
168
+ <img src="Images/kyber-logomark.png" alt="Kyber Logo" class="logo-img">
169
+ <span class="logo-text">Kyber Sales Enablement</span>
170
+ </a>
171
+
172
+ <nav class="nav-links">
173
+ <a href="value-mapper.html" class="nav-link">Mapper</a>
174
+ <a href="intel.html" class="nav-link">Products</a>
175
+ <a href="proof.html" class="nav-link">Proof</a>
176
+ <a href="scorecard.html" class="nav-link">Scorecard</a>
177
+ <a href="strategy.html" class="nav-link">Method</a>
178
+ <a href="academy.html" class="nav-link">Academy</a>
179
+ </nav>
180
+
181
+ <div class="actions">
182
+ <button class="theme-toggle">
183
+ <i data-feather="moon" class="hidden dark:block"></i>
184
+ <i data-feather="sun" class="block dark:hidden"></i>
185
+ </button>
186
+ <button class="mobile-menu-btn">
187
+ <span class="hamburger-line"></span>
188
+ <span class="hamburger-line"></span>
189
+ <span class="hamburger-line"></span>
190
+ </button>
191
+ </div>
192
+ </div>
193
+ </div>
194
+
195
+ <div class="mobile-menu">
196
+ <div class="mobile-menu-content">
197
+ <a href="index.html" class="mobile-nav-link">Home</a>
198
+ <a href="value-mapper.html" class="mobile-nav-link">Mapper</a>
199
+ <a href="intel.html" class="mobile-nav-link">Products</a>
200
+ <a href="proof.html" class="mobile-nav-link">Proof</a>
201
+ <a href="scorecard.html" class="mobile-nav-link">Scorecard</a>
202
+ <a href="strategy.html" class="mobile-nav-link">Method</a>
203
+ <a href="academy.html" class="mobile-nav-link">Academy</a>
204
+ </div>
205
+ </div>
206
+ `;
207
+
208
+ // Theme toggle functionality
209
+ const themeToggle = this.shadowRoot.querySelector('.theme-toggle');
210
+ themeToggle.addEventListener('click', () => {
211
+ document.documentElement.classList.toggle('dark');
212
+ localStorage.theme = document.documentElement.classList.contains('dark') ? 'dark' : 'light';
213
+ feather.replace();
214
+ });
215
+
216
+ // Mobile menu functionality
217
+ const mobileMenuBtn = this.shadowRoot.querySelector('.mobile-menu-btn');
218
+ const mobileMenu = this.shadowRoot.querySelector('.mobile-menu');
219
+ mobileMenuBtn.addEventListener('click', () => {
220
+ mobileMenuBtn.classList.toggle('open');
221
+ mobileMenu.classList.toggle('open');
222
+ document.body.classList.toggle('overflow-hidden');
223
+ });
224
+
225
+ // Set active nav link based on current page
226
+ const currentPage = window.location.pathname.split('/').pop() || 'index.html';
227
+ this.shadowRoot.querySelectorAll('.nav-link, .mobile-nav-link').forEach(link => {
228
+ const linkHref = link.getAttribute('href');
229
+ if (linkHref === currentPage) {
230
+ link.classList.add('active');
231
+ }
232
+ });
233
+
234
+ // Initialize feather icons
235
+ feather.replace();
236
+ }
237
+ }
238
+
239
+ customElements.define('custom-navbar', CustomNavbar);
index.html CHANGED
@@ -1,19 +1,366 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="scroll-smooth">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="Kyber Sales Enablement - Your strategic real-time video companion">
7
+ <title>Kyber Value Mapper | Home</title>
8
+
9
+ <link rel="icon" type="image/png" href="Images/kyber-logomark.png">
10
+
11
+ <script src="https://cdn.tailwindcss.com"></script>
12
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
13
+ <script src="https://unpkg.com/feather-icons"></script>
14
+
15
+ <script>
16
+ tailwind.config = {
17
+ darkMode: 'class',
18
+ theme: {
19
+ extend: {
20
+ colors: {
21
+ // Using indigo as primary and purple as secondary
22
+ primary: '#6366f1', // Indigo-500
23
+ secondary: '#8b5cf6', // Purple-500
24
+ dark: '#1e293b'
25
+ }
26
+ }
27
+ }
28
+ }
29
+ </script>
30
+ <style>
31
+ /* --- UNIFIED HEADER STYLES --- */
32
+ .nav-link.active {
33
+ @apply text-primary font-medium border-b-2 border-primary;
34
+ }
35
+ .hamburger-line {
36
+ @apply w-6 h-0.5 bg-white transition-all duration-300;
37
+ }
38
+ #mobileMenuButton.open .hamburger-line:nth-child(1) {
39
+ transform: rotate(45deg) translate(5px, 6px);
40
+ }
41
+ #mobileMenuButton.open .hamburger-line:nth-child(2) {
42
+ opacity: 0;
43
+ }
44
+ #mobileMenuButton.open .hamburger-line:nth-child(3) {
45
+ transform: rotate(-45deg) translate(5px, -6px);
46
+ }
47
+
48
+ /* --- PAGE-SPECIFIC STYLES --- */
49
+ select {
50
+ -webkit-appearance: none; -moz-appearance: none; appearance: none;
51
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' 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");
52
+ background-repeat: no-repeat;
53
+ background-position: right 0.75rem center;
54
+ background-size: 1.25rem;
55
+ }
56
+ .dark select {
57
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='white' 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");
58
+ }
59
+ </style>
60
+ </head>
61
+ <body class="bg-gray-100 dark:bg-gray-900 text-gray-800 dark:text-gray-200 min-h-screen flex flex-col">
62
+
63
+ <header class="sticky top-0 z-50 bg-white/80 dark:bg-gray-900/80 backdrop-blur-md shadow-sm">
64
+ <div class="container mx-auto px-4 py-3">
65
+ <div class="flex justify-between items-center">
66
+ <a href="index.html" class="flex items-center space-x-2">
67
+ <img src="Images/kyber-logomark.png" alt="Kyber Logo" class="h-8 mr-2">
68
+
69
+ <span class="text-xl font-bold text-gray-800 dark:text-white font-heading">Kyber Sales Enablement</span>
70
+ </a>
71
+ <nav class="hidden md:flex space-x-8">
72
+ <a href="value-mapper.html" class="nav-link py-2 px-1 text-slate-200 hover:text-primary transition-colors">Mapper</a>
73
+ <a href="intel.html" class="nav-link py-2 px-1 text-slate-200 hover:text-primary transition-colors">Products</a>
74
+ <a href="proof.html" class="nav-link py-2 px-1 text-slate-200 hover:text-primary transition-colors">Proof</a>
75
+ <a href="scorecard.html" class="nav-link py-2 px-1 text-slate-200 hover:text-primary transition-colors">Scorecard</a>
76
+ <a href="strategy.html" class="nav-link py-2 px-1 text-slate-200 hover:text-primary transition-colors">Method</a>
77
+ <a href="academy.html" class="nav-link py-2 px-1 text-slate-200 hover:text-primary transition-colors">Academy</a>
78
+ </nav>
79
+ <div class="flex items-center space-x-4">
80
+ <button id="themeToggle" class="p-2 rounded-full text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700">
81
+ <i data-feather="moon" class="hidden dark:block"></i>
82
+ <i data-feather="sun" class="block dark:hidden"></i>
83
+ </button>
84
+ <button id="mobileMenuButton" class="md:hidden flex flex-col space-y-1.5 p-2 z-50 bg-primary rounded-lg">
85
+ <span class="hamburger-line"></span>
86
+ <span class="hamburger-line"></span>
87
+ <span class="hamburger-line"></span>
88
+ </button>
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </header>
93
+
94
+ <div id="mobileMenu" class="hidden fixed inset-0 z-40 bg-gray-900 bg-opacity-95 backdrop-blur-sm">
95
+ <div class="flex flex-col items-center justify-center h-full space-y-8">
96
+ <a href="index.html" class="nav-link text-3xl text-white">Home</a>
97
+ <a href="value-mapper.html" class="nav-link text-3xl text-white">Mapper</a>
98
+ <a href="intel.html" class="nav-link text-3xl text-white">Products</a>
99
+ <a href="proof.html" class="nav-link text-3xl text-white">Proof</a>
100
+ <a href="scorecard.html" class="nav-link text-3xl text-white">Scorecard</a>
101
+ <a href="strategy.html" class="nav-link text-3xl text-white">Method</a>
102
+ <a href="academy.html" class="nav-link text-3xl text-white">Academy</a>
103
+ </div>
104
+ </div>
105
+ <main class="flex-grow bg-gradient-to-br from-purple-600 to-indigo-700">
106
+ <div class="container mx-auto px-4 py-12">
107
+ <div class="bg-white dark:bg-gray-800 p-6 sm:p-8 rounded-2xl shadow-2xl mb-8">
108
+ <div class="text-center">
109
+ <h1 class="text-3xl sm:text-4xl font-heading font-extrabold text-gray-800 dark:text-white mb-3 leading-tight">Kyber Value Mapper</h1>
110
+ <div class="flex justify-center mb-6">
111
+ <img src="Images/kyber-mapper.png" alt="Kyber Value Mapper Graphic" class="h-48 w-auto">
112
+
113
+ </div>
114
+ </div>
115
+ <div class="max-w-md mx-auto">
116
+ <select id="industry-selector" onchange="updateContent(true)" class="block w-full py-3 px-4 pr-10 border border-gray-300 dark:border-gray-600 rounded-xl text-base font-semibold text-gray-800 dark:text-gray-200 bg-white dark:bg-gray-700 focus:ring-2 focus:ring-primary focus:outline-none transition duration-200 shadow-lg">
117
+ <option value="placeholder" disabled selected class="text-gray-500">- Choose Industry to Map -</option>
118
+ <option value="Robotics & Tele-Operation">Robotics & Tele-Operation</option>
119
+ <option value="Cloud Gaming / Cloud Rendering">Cloud Gaming / Cloud Rendering</option>
120
+ <option value="Live Auctions & eSports Betting">Live Auctions & eSports Betting</option>
121
+ <option value="Healthcare / Tele-Surgery">Healthcare / Tele-Surgery (New)</option>
122
+ <option value="Industrial IoT / Machine Vision">Industrial IoT / Machine Vision (New)</option>
123
+ <option value="Remote Live Production (REMI)">Remote Live Production (REMI) (New)</option>
124
+ </select>
125
+ </div>
126
+ </div>
127
+
128
+ <div id="initial-message" class="text-center p-12 rounded-xl bg-white/80 dark:bg-gray-800/80 text-gray-600 dark:text-gray-300 border-2 border-dashed border-gray-400 dark:border-gray-600 backdrop-blur-sm">
129
+ <p class="text-lg font-medium">Please select an industry from the dropdown above to reveal targeted value mapping, discovery questions, and permission-based openers.</p>
130
+ </div>
131
+
132
+ <div id="dynamic-area" class="hidden space-y-8">
133
+ <h2 id="industry-title" class="text-3xl font-heading font-bold text-white text-center pt-4"></h2>
134
+
135
+ <div class="bg-white dark:bg-gray-800 p-6 sm:p-8 rounded-xl shadow-lg">
136
+ <h3 class="text-xl font-heading font-bold mb-6 text-gray-800 dark:text-white">Recommended Value Proposition & Suggested Product Focus</h3>
137
+ <div id="value-drivers" class="space-y-4 text-gray-700 dark:text-gray-300 text-base"></div>
138
+ </div>
139
+
140
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8">
141
+ <div class="bg-white dark:bg-gray-800 p-6 rounded-xl shadow-lg">
142
+ <h3 class="text-lg font-heading font-bold mb-4 text-gray-800 dark:text-white">Permission-Based Opener (PBO) / C-Level Hook</h3>
143
+ <p id="pbo1" class="text-gray-800 dark:text-white font-medium text-base"></p>
144
+ </div>
145
+ <div class="bg-white dark:bg-gray-800 p-6 rounded-xl shadow-lg">
146
+ <h3 class="text-lg font-heading font-bold mb-4 text-gray-800 dark:text-white">Discovery Question (DQ) / Technical Deep Dive</h3>
147
+ <p id="dq1" class="text-gray-600 dark:text-gray-400 italic text-base"></p>
148
+ </div>
149
+ </div>
150
+
151
+ <div class="flex justify-center pt-4">
152
+ <button id="refresh-button" class="hidden items-center px-6 py-3 bg-white/20 hover:bg-white/30 rounded-lg text-white font-semibold transition flex space-x-2 shadow-lg">
153
+ <i data-feather="refresh-cw" class="w-5 h-5"></i>
154
+ <span>Cycle Inspiration</span>
155
+ </button>
156
+ </div>
157
+
158
+ </div>
159
+ </div>
160
+ </main>
161
+
162
+ <footer class="bg-purple-800/80 dark:bg-purple-800/80 backdrop-blur-sm border-t border-gray-700">
163
+ <div class="container mx-auto px-4 py-8">
164
+ <div class="flex flex-col md:flex-row justify-between items-center">
165
+ <div class="mb-6 md:mb-0">
166
+ <p class="text-gray-600 dark:text-gray-300 mt-2 text-sm">
167
+ Leveraging Kyber to Enable Real-Time Interaction
168
+ </p>
169
+ </div>
170
+
171
+ <div class="mt-8 pt-8 border-t border-gray-200 dark:border-gray-700 text-center text-sm text-gray-500 dark:text-gray-400">
172
+ <p>&copy; 2025 Kyber Technologies. Real-Time, All The Time.</p>
173
+ </div>
174
+ </div>
175
+ </footer>
176
+
177
+ <script>
178
+ // --- Mobile Menu Toggle ---
179
+ const mobileMenuButton = document.getElementById('mobileMenuButton');
180
+ const mobileMenu = document.getElementById('mobileMenu');
181
+ mobileMenuButton.addEventListener('click', () => {
182
+ mobileMenu.classList.toggle('hidden');
183
+ mobileMenuButton.classList.toggle('open');
184
+ document.body.classList.toggle('overflow-hidden');
185
+ });
186
+
187
+ // --- Theme Toggle ---
188
+ const themeToggle = document.getElementById('themeToggle');
189
+ const html = document.documentElement;
190
+ themeToggle.addEventListener('click', () => {
191
+ html.classList.toggle('dark');
192
+ localStorage.theme = html.classList.contains('dark') ? 'dark' : 'light';
193
+ feather.replace();
194
+ });
195
+
196
+ if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
197
+ html.classList.add('dark');
198
+ } else {
199
+ html.classList.remove('dark');
200
+ }
201
+
202
+ // --- Set Active Nav Link ---
203
+ const currentPage = window.location.pathname.split('/').pop() || 'index.html';
204
+ document.querySelectorAll('.nav-link').forEach(link => {
205
+ const linkHref = link.getAttribute('href');
206
+ if (linkHref === currentPage) {
207
+ link.classList.add('active');
208
+ } else {
209
+ link.classList.remove('active');
210
+ }
211
+ });
212
+
213
+ feather.replace();
214
+ </script>
215
+ <script>
216
+ // *** KYBER INDUSTRY DATA - Mapped from provided table ***
217
+ const INDUSTRY_DATA = {
218
+ "Robotics & Tele-Operation": {
219
+ valueDrivers: "Value Drivers: Kyber is essential for applications where ultra-low latency (<100ms) is critical for **precision, safety, and human control**. It enables reliable remote control of industrial robots, inspection drones (UAVs), and heavy machinery by minimizing jitter and ensuring deterministic control. Product Focus: Custom Kyber Stack (Encoder/Decoder/Player), Edge Compute Integration, Jitter Mitigation Protocol.",
220
+ questions: [
221
+ // Technical (DQ) paired with C-Level (PBO) - Cycle 1 (Original Index 1 & 1)
222
+ { pbo: "Would it be helpful to discuss the annual financial exposure or primary safety risk associated with unexpected jitter or lag in your current tele-operation system?", dq: "What is your absolute glass-to-glass latency budget for the remote operator's visual feedback and input response?" },
223
+ // Technical (DQ) paired with C-Level (PBO) - Cycle 2 (Original Index 2 & 2)
224
+ { pbo: "If you could own and adapt the full video/input stack (encoder to player) to meet specific national security or proprietary sensor needs, what would that unlock?", dq: "How do you currently handle network variability (jitter) to ensure deterministic control, and what is the cost of your current retransmission/error correction layer?" },
225
+ // Technical (DQ) paired with C-Level (PBO) - Cycle 3 (Original Index 3 & 3)
226
+ { pbo: "How much complexity and expense is tied up in deploying your current system to new geographic locations or edge compute nodes?", dq: "Are you currently streaming bidirectional input (gamepad, mouse, USB-over-IP) with the video, and what proprietary protocol is currently driving that?" }
227
+ ]
228
+ },
229
+ "Cloud Gaming / Cloud Rendering": {
230
+ valueDrivers: "Value Drivers: The core value is delivering a **seamless, highly interactive PC or console experience** streamed to any device. Kyber reduces the network/decoding stack latency to support native high refresh rates (120Hz/240Hz) essential for competitive gaming and high-end graphics work. Product Focus: Kyber Web Codec/WebTransport Client, GPU/CPU Agnostic Optimization, Input Reliability Module.",
231
+ questions: [
232
+ // Cycle 1
233
+ { pbo: "What is the correlation between average latency and customer churn or session abandonment in your interactive cloud service?", dq: "What is the maximum acceptable frame-time added by the network/decoding stack to a native 120Hz or 240Hz rendered stream?" },
234
+ // Cycle 2
235
+ { pbo: "If you could shift encoding/decoding optimization to an open, hardware-agnostic platform, what percentage savings could you realize in GPU/CPU rental costs?", dq: "Are you constrained by WebRTC's complexity or WebCodec's browser compatibility, and which codecs (AV1, HEVC) must you support on the client?" },
236
+ // Cycle 3
237
+ { pbo: "How long does it currently take your team to port your streaming solution to a new platform (e.g., an embedded smart TV or a new operating system)?", dq: "What is your failover mechanism for input streams during network loss, and is there an unacceptable delay on reconnecting the input channel?" }
238
+ ]
239
+ },
240
+ "Live Auctions & eSports Betting": {
241
+ valueDrivers: "Value Drivers: Kyber enables **real-time synchronization** of interactive data (bids, odds) with the video feed, requiring sub-300ms total latency. This eliminates missed monetization opportunities and ensures regulatory compliance for high-stakes, time-sensitive events. Product Focus: Kyber QUIC/WebTransport Protocol, Data Synchronization Layer, Custom Player SDK.",
242
+ questions: [
243
+ // Cycle 1
244
+ { pbo: "How many millions of euros in potential revenue are lost annually due to the latency window between the live event and the user's ability to place a bet or bid?", dq: "What is the current delay difference (skew) between the video feed and the interactive data stream (e.g., bid button, betting odds update)?" },
245
+ // Cycle 2
246
+ { pbo: "Does your current system provide the auditable, deterministic, and synchronized timestamping needed to satisfy fair-play regulations for high-stakes real-time events?", dq: "How much unnecessary bandwidth is consumed by using a high-latency (e.g., HLS) protocol to achieve scalability that Kyber could reduce with QUIC/WebTransport?" },
247
+ // Cycle 3
248
+ { pbo: "What specific new high-interaction product (e.g., live dealer experience, interactive trivia) could you launch if you could guarantee a true real-time experience?", dq: "What custom logic or interactive overlays are you struggling to perfectly sync within the player due to mandated player buffer depths?" }
249
+ ]
250
+ },
251
+ "Healthcare / Tele-Surgery": {
252
+ valueDrivers: "Value Drivers: Kyber provides the ultra-low latency (<100ms) and **diagnostic fidelity** required for life-critical applications like remote diagnostics, real-time consultation, and remote assistance in complex surgical procedures. **Security and interoperability** are non-negotiable. Product Focus: Kyber Secure Stream, End-to-End Encryption, Medical Imaging Interoperability Module.",
253
+ questions: [
254
+ // Cycle 1
255
+ { pbo: "What is the liability or insurance premium reduction achievable by migrating to an auditable, sub-100ms video stack for remote assistance in the operating room?", dq: "Beyond latency, what is your threshold for acceptable packet loss or video artifacts during a critical remote diagnostic feed?" },
256
+ // Cycle 2
257
+ { pbo: "What is the strategic value of securely providing expert surgical consultation or training to remote, low-bandwidth hospitals using an optimized open-source stack?", dq: "How complex is integrating your current real-time video stream with specialized medical imaging hardware (e.g., endoscopy cameras, MRI displays)?" },
258
+ // Cycle 3
259
+ { pbo: "How much time is wasted daily by doctors and specialists due to poor video quality, dropped connections, or laggy interactive interfaces?", dq: "Can your current streaming solution meet the necessary end-to-end encryption and metadata privacy standards required by health data regulations (e.g., GDPR, HIPAA)?" }
260
+ ]
261
+ },
262
+ "Industrial IoT / Machine Vision": {
263
+ valueDrivers: "Value Drivers: Enables **real-time AI inference and action control** on manufacturing lines and autonomous systems by ensuring the total round-trip latency (capture to command) is minimized. Kyber delivers higher operational efficiency and defect detection rates. Product Focus: Kyber Edge SDK, High-Efficiency Codecs (AV1/HEVC), Cloud/Edge Synchronization API.",
264
+ questions: [
265
+ // Cycle 1
266
+ { pbo: "If you could cut 50ms from your control loop latency, what percentage increase would you see in manufacturing throughput or defect detection rate?", dq: "What is the total round-trip time (camera capture $\rightarrow$ cloud/edge inference $\rightarrow$ action command) you must hit to maintain line speed or control stability?" },
267
+ // Cycle 2
268
+ { pbo: "Are you concerned about your reliance on a single vendor's proprietary stack for your critical Industrial IoT (IIoT) control plane, and what is the cost of switching?", dq: "How are you managing the synchronization of configuration and control messages between the edge device and the centralized cloud dashboard?" },
269
+ // Cycle 3
270
+ { pbo: "Given the open-source nature of Kyber, how valuable is it to your strategy to have a transparent, auditable control stack where proprietary algorithms can be secured?", dq: "Are you leveraging modern, high-efficiency codecs (like AV1 or HEVC) on your embedded hardware to minimize bandwidth costs on cellular/remote connections?" }
271
+ ]
272
+ },
273
+ "Remote Live Production (REMI)": {
274
+ valueDrivers: "Value Drivers: Kyber provides **high-quality, low-latency transport** of contribution feeds from a remote venue back to a centralized studio (REMI/At-Home Production). It is critical for reducing on-site crew costs while maintaining strict synchronization (genlock) and content quality. Product Focus: Kyber REMI Gateway, Genlock Synchronization Module, Bidirectional Comms API.",
275
+ questions: [
276
+ // Cycle 1
277
+ { pbo: "What is the potential cost savings from reducing the size of your on-site production crew and equipment by shifting more tasks to a remote hub via low-latency feed?", dq: "What is your minimum requirement for synchronization (genlock) between multiple remote camera feeds ingested into the central production switcher?" },
278
+ // Cycle 2
279
+ { pbo: "What is the maximum acceptable delay between the action occurring at the venue and the broadcast feed reaching your primary CDN ingest point?", dq: "Are you currently using SRT or NDI, and what specific limitations (jitter, complexity of NAT traversal, non-native web playback) are you encountering with that protocol?" },
280
+ // Cycle 3
281
+ { pbo: "How quickly can you spin up a new, professional-grade remote production feed for a sudden, high-profile event using your existing infrastructure?", dq: "How critical is it to have guaranteed, low-latency, bidirectional audio/video communication for the director and camera operators back to the remote site?" }
282
+ ]
283
+ }
284
+ };
285
+
286
+ // *** NEW SCRIPT LOGIC FOR CYCLING (Keep functionality) ***
287
+
288
+ // Global variable to track the current question
289
+ let currentQuestionIndex = 0;
290
+ const selector = document.getElementById('industry-selector');
291
+ const refreshButton = document.getElementById('refresh-button');
292
+
293
+ function cycleQuestions() {
294
+ const industry = selector.value;
295
+ if (!industry || industry === 'placeholder') return;
296
+
297
+ const data = INDUSTRY_DATA[industry];
298
+ if (!data.questions || data.questions.length === 0) return;
299
+
300
+ // Increment index and loop back to 0 if at the end
301
+ currentQuestionIndex = (currentQuestionIndex + 1) % data.questions.length;
302
+
303
+ const newPair = data.questions[currentQuestionIndex];
304
+
305
+ document.getElementById('pbo1').textContent = newPair.pbo;
306
+ document.getElementById('dq1').textContent = newPair.dq;
307
+ }
308
+
309
+ function updateContent(shouldScroll = false) {
310
+ const industry = selector.value;
311
+ const dynamicArea = document.getElementById('dynamic-area');
312
+ const initialMessage = document.getElementById('initial-message');
313
+
314
+ if (!industry || industry === 'placeholder') {
315
+ dynamicArea.classList.add('hidden');
316
+ initialMessage.classList.remove('hidden');
317
+ refreshButton.classList.add('hidden');
318
+ return;
319
+ }
320
+
321
+ const data = INDUSTRY_DATA[industry];
322
+ document.getElementById('industry-title').textContent = industry;
323
+ const valueDriversElement = document.getElementById('value-drivers');
324
+
325
+ // Format the Value Drivers and Product Focus
326
+ // Note: This regex relies on the exact formatting of the 'valueDrivers' string:
327
+ // "Value Drivers: [Content]. Product Focus: [Content]."
328
+ valueDriversElement.innerHTML = data.valueDrivers.replace(/Value Drivers: (.*?)\. Product Focus: (.*?)\./s,
329
+ `<p class="font-semibold text-lg mb-2 text-primary dark:text-blue-400">Value Drivers:</p>
330
+ <p class="mb-4">${'$1'}</p>
331
+ <p class="font-semibold text-lg mb-2 text-primary dark:text-blue-400">Product Focus:</p>
332
+ <p>${'$2'}</p>`);
333
+
334
+ // Reset index and load the *first* question for the new industry
335
+ currentQuestionIndex = 0;
336
+ if (data.questions && data.questions.length > 0) {
337
+ const firstPair = data.questions[0];
338
+ document.getElementById('pbo1').textContent = firstPair.pbo;
339
+ document.getElementById('dq1').textContent = firstPair.dq;
340
+ refreshButton.classList.remove('hidden'); // Show the button
341
+ } else {
342
+ // No questions for this industry
343
+ document.getElementById('pbo1').textContent = "No opener available for this industry.";
344
+ document.getElementById('dq1').textContent = "No discovery question available.";
345
+ refreshButton.classList.add('hidden'); // Hide the button
346
+ }
347
+
348
+ initialMessage.classList.add('hidden');
349
+ dynamicArea.classList.remove('hidden');
350
+ feather.replace(); // Refresh icons
351
+
352
+ if (shouldScroll) {
353
+ dynamicArea.scrollIntoView({ behavior: 'smooth', block: 'start' });
354
+ }
355
+ }
356
+
357
+ // Add the event listener for the button
358
+ refreshButton.addEventListener('click', cycleQuestions);
359
+
360
+ // Call updateContent on load in case a value is pre-selected (e.g., browser back button)
361
+ window.onload = () => updateContent(false);
362
+ </script>
363
+
364
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
365
+ </body>
366
+ </html>
script.js ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Smooth scroll for anchor links
2
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
3
+ anchor.addEventListener('click', function (e) {
4
+ e.preventDefault();
5
+ document.querySelector(this.getAttribute('href')).scrollIntoView({
6
+ behavior: 'smooth'
7
+ });
8
+ });
9
+ });
10
+
11
+ // Intersection Observer for scroll animations
12
+ const observerOptions = {
13
+ threshold: 0.1
14
+ };
15
+
16
+ const observer = new IntersectionObserver((entries) => {
17
+ entries.forEach(entry => {
18
+ if (entry.isIntersecting) {
19
+ entry.target.classList.add('fade-in');
20
+ observer.unobserve(entry.target);
21
+ }
22
+ });
23
+ }, observerOptions);
24
+
25
+ document.querySelectorAll('.animate-on-scroll').forEach(element => {
26
+ observer.observe(element);
27
+ });
28
+
29
+ // Form validation helper
30
+ function validateForm(form) {
31
+ let isValid = true;
32
+ const inputs = form.querySelectorAll('input[required], select[required], textarea[required]');
33
+
34
+ inputs.forEach(input => {
35
+ if (!input.value.trim()) {
36
+ input.classList.add('border-red-500');
37
+ isValid = false;
38
+ } else {
39
+ input.classList.remove('border-red-500');
40
+ }
41
+ });
42
+
43
+ return isValid;
44
+ }
45
+
46
+ // Cookie consent banner
47
+ function initCookieBanner() {
48
+ if (!localStorage.getItem('cookieConsent')) {
49
+ const banner = document.createElement('div');
50
+ banner.className = 'fixed bottom-0 left-0 right-0 bg-gray-800 text-white p-4 flex flex-col md:flex-row justify-between items-center z-50';
51
+ banner.innerHTML = `
52
+ <p class="mb-4 md:mb-0">We use cookies to enhance your experience. By continuing to browse, you agree to our use of cookies.</p>
53
+ <div class="flex space-x-4">
54
+ <button id="acceptCookies" class="px-4 py-2 bg-primary rounded-lg hover:bg-opacity-90 transition">Accept</button>
55
+ <button id="rejectCookies" class="px-4 py-2 border border-white rounded-lg hover:bg-white hover:text-gray-800 transition">Reject</button>
56
+ </div>
57
+ `;
58
+ document.body.appendChild(banner);
59
+
60
+ document.getElementById('acceptCookies').addEventListener('click', () => {
61
+ localStorage.setItem('cookieConsent', 'accepted');
62
+ banner.remove();
63
+ });
64
+
65
+ document.getElementById('rejectCookies').addEventListener('click', () => {
66
+ localStorage.setItem('cookieConsent', 'rejected');
67
+ banner.remove();
68
+ });
69
+ }
70
+ }
71
+
72
+ // Initialize cookie banner on DOM content loaded
73
+ document.addEventListener('DOMContentLoaded', () => {
74
+ initCookieBanner();
75
+
76
+ // Initialize tooltips if any
77
+ if (window.tippy) {
78
+ tippy('[data-tippy-content]', {
79
+ theme: 'light-border',
80
+ placement: 'top',
81
+ animation: 'scale',
82
+ arrow: true
83
+ });
84
+ }
85
+ });
style.css CHANGED
@@ -1,28 +1,56 @@
 
 
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
 
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
 
 
 
 
 
 
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Custom fonts */
2
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
3
+
4
+ /* Base styles */
5
  body {
6
+ font-family: 'Inter', sans-serif;
7
+ line-height: 1.6;
8
+ }
9
+
10
+ /* Custom animations */
11
+ @keyframes fadeIn {
12
+ from { opacity: 0; transform: translateY(20px); }
13
+ to { opacity: 1; transform: translateY(0); }
14
  }
15
 
16
+ .fade-in {
17
+ animation: fadeIn 0.6s ease-out forwards;
 
18
  }
19
 
20
+ /* Gradient text */
21
+ .gradient-text {
22
+ background-clip: text;
23
+ -webkit-background-clip: text;
24
+ color: transparent;
25
+ background-image: linear-gradient(90deg, #6366f1, #8b5cf6);
26
  }
27
 
28
+ /* Custom shadows */
29
+ .custom-shadow {
30
+ box-shadow: 0 10px 25px -5px rgba(99, 102, 241, 0.2),
31
+ 0 10px 10px -5px rgba(99, 102, 241, 0.04);
 
 
32
  }
33
 
34
+ /* Responsive tweaks */
35
+ @media (max-width: 768px) {
36
+ .mobile-flex-col {
37
+ flex-direction: column;
38
+ }
39
+
40
+ .mobile-text-center {
41
+ text-align: center;
42
+ }
43
  }
44
+
45
+ /* Smooth transitions */
46
+ .transition-all {
47
+ transition-property: all;
48
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
49
+ transition-duration: 300ms;
50
+ }
51
+
52
+ /* Enhanced focus states */
53
+ .focus-visible {
54
+ outline: 2px solid #6366f1;
55
+ outline-offset: 2px;
56
+ }