TopBoss commited on
Commit
bbcee86
·
verified ·
1 Parent(s): db0bc18

now fix the full website and make it look nice, follow the rules

Browse files
Files changed (4) hide show
  1. components/navbar.js +138 -31
  2. index.html +35 -33
  3. script.js +23 -11
  4. style.css +54 -30
components/navbar.js CHANGED
@@ -1,29 +1,42 @@
 
1
  class CustomHeader extends HTMLElement {
2
  connectedCallback() {
3
  this.attachShadow({ mode: 'open' });
 
 
 
4
  this.shadowRoot.innerHTML = `
5
  <style>
 
 
 
 
 
 
 
 
6
  :host {
7
  display: block;
8
  width: 100%;
9
- background-color: rgba(255, 255, 255, 0.8);
10
- backdrop-filter: blur(12px);
11
- -webkit-backdrop-filter: blur(12px);
12
- border-bottom: 1px solid rgba(0,0,0,0.05);
13
  position: fixed;
14
  top: 0;
15
- z-index: 50;
16
  transition: all 0.3s ease;
 
17
  }
18
 
19
  nav {
20
- max-width: 1280px;
21
  margin: 0 auto;
22
  padding: 1rem 1.5rem;
23
  display: flex;
24
  align-items: center;
25
  justify-content: space-between;
26
- height: 80px;
27
  }
28
 
29
  .nav-group {
@@ -38,8 +51,15 @@ class CustomHeader extends HTMLElement {
38
  font-size: 1.5rem;
39
  color: #171717;
40
  text-decoration: none;
41
- letter-spacing: -0.05em;
42
  margin-right: 2rem;
 
 
 
 
 
 
 
43
  }
44
 
45
  /* Nav Items - Expanding Animation */
@@ -47,15 +67,15 @@ class CustomHeader extends HTMLElement {
47
  display: flex;
48
  align-items: center;
49
  justify-content: center;
50
- height: 44px;
51
  border-radius: 9999px;
52
  text-decoration: none;
53
- color: #404040;
54
  font-weight: 500;
55
- font-size: 0.95rem;
56
- width: 44px; /* Initial width icon only */
57
  overflow: hidden;
58
- transition: width 0.3s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.2s;
59
  white-space: nowrap;
60
  }
61
 
@@ -65,39 +85,41 @@ class CustomHeader extends HTMLElement {
65
  }
66
 
67
  .nav-icon {
68
- min-width: 44px;
69
  display: flex;
70
  justify-content: center;
71
  align-items: center;
72
- color: inherit;
73
  }
74
 
75
  .nav-label {
76
  opacity: 0;
77
  transition: opacity 0.2s ease-in;
 
78
  }
79
 
80
  /* On hover expand */
81
- .nav-item:hover {
82
- width: 130px;
83
- }
84
-
85
- .nav-item:hover .nav-label {
86
- opacity: 1;
87
- transition-delay: 0.05s;
 
88
  }
89
 
90
  /* Account Button */
91
  .account-btn {
92
  background-color: #171717;
93
  color: white;
94
- padding: 0 1.5rem;
95
- height: 44px;
96
  border-radius: 9999px;
97
  text-decoration: none;
98
  font-weight: 500;
99
  font-size: 0.9rem;
100
- transition: transform 0.2s, background-color 0.2s;
101
  display: flex;
102
  align-items: center;
103
  justify-content: center;
@@ -105,7 +127,8 @@ class CustomHeader extends HTMLElement {
105
 
106
  .account-btn:hover {
107
  background-color: #262626;
108
- transform: scale(1.02);
 
109
  }
110
 
111
  /* Mobile Menu */
@@ -114,10 +137,63 @@ class CustomHeader extends HTMLElement {
114
  background: none;
115
  border: none;
116
  cursor: pointer;
117
- padding: 0.5rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  }
119
 
120
- @media (max-width: 768px) {
121
  .nav-group.desktop {
122
  display: none;
123
  }
@@ -129,7 +205,7 @@ class CustomHeader extends HTMLElement {
129
 
130
  <nav>
131
  <div class="nav-group">
132
- <a href="/" class="logo">Nexus</a>
133
  </div>
134
 
135
  <div class="nav-group desktop">
@@ -152,11 +228,42 @@ class CustomHeader extends HTMLElement {
152
  </div>
153
 
154
  <div class="nav-group">
155
- <a href="https://app.nexus.ai" class="account-btn">Войти</a>
 
 
 
 
156
  </div>
157
  </nav>
 
 
 
 
 
 
 
 
158
  `;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  }
160
  }
161
 
162
- customElements.define('custom-header', CustomHeader);
 
1
+
2
  class CustomHeader extends HTMLElement {
3
  connectedCallback() {
4
  this.attachShadow({ mode: 'open' });
5
+
6
+ const isMobile = () => window.innerWidth <= 768;
7
+
8
  this.shadowRoot.innerHTML = `
9
  <style>
10
+ @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');
11
+
12
+ * {
13
+ box-sizing: border-box;
14
+ margin: 0;
15
+ padding: 0;
16
+ }
17
+
18
  :host {
19
  display: block;
20
  width: 100%;
21
+ background-color: rgba(255, 255, 255, 0.85);
22
+ backdrop-filter: blur(16px);
23
+ -webkit-backdrop-filter: blur(16px);
24
+ border-bottom: 1px solid rgba(0,0,0,0.06);
25
  position: fixed;
26
  top: 0;
27
+ z-index: 1000;
28
  transition: all 0.3s ease;
29
+ font-family: 'Plus Jakarta Sans', sans-serif;
30
  }
31
 
32
  nav {
33
+ max-width: 1400px;
34
  margin: 0 auto;
35
  padding: 1rem 1.5rem;
36
  display: flex;
37
  align-items: center;
38
  justify-content: space-between;
39
+ height: 72px;
40
  }
41
 
42
  .nav-group {
 
51
  font-size: 1.5rem;
52
  color: #171717;
53
  text-decoration: none;
54
+ letter-spacing: -0.03em;
55
  margin-right: 2rem;
56
+ display: flex;
57
+ align-items: center;
58
+ gap: 8px;
59
+ }
60
+
61
+ .logo span {
62
+ color: #D58A60;
63
  }
64
 
65
  /* Nav Items - Expanding Animation */
 
67
  display: flex;
68
  align-items: center;
69
  justify-content: center;
70
+ height: 40px;
71
  border-radius: 9999px;
72
  text-decoration: none;
73
+ color: #525252;
74
  font-weight: 500;
75
+ font-size: 0.9rem;
76
+ width: 40px;
77
  overflow: hidden;
78
+ transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1), background-color 0.2s, color 0.2s;
79
  white-space: nowrap;
80
  }
81
 
 
85
  }
86
 
87
  .nav-icon {
88
+ min-width: 40px;
89
  display: flex;
90
  justify-content: center;
91
  align-items: center;
92
+ color: currentColor;
93
  }
94
 
95
  .nav-label {
96
  opacity: 0;
97
  transition: opacity 0.2s ease-in;
98
+ padding-right: 16px;
99
  }
100
 
101
  /* On hover expand */
102
+ @media (hover: hover) {
103
+ .nav-item:hover {
104
+ width: 140px;
105
+ }
106
+ .nav-item:hover .nav-label {
107
+ opacity: 1;
108
+ transition-delay: 0.05s;
109
+ }
110
  }
111
 
112
  /* Account Button */
113
  .account-btn {
114
  background-color: #171717;
115
  color: white;
116
+ padding: 0 1.25rem;
117
+ height: 40px;
118
  border-radius: 9999px;
119
  text-decoration: none;
120
  font-weight: 500;
121
  font-size: 0.9rem;
122
+ transition: all 0.2s ease;
123
  display: flex;
124
  align-items: center;
125
  justify-content: center;
 
127
 
128
  .account-btn:hover {
129
  background-color: #262626;
130
+ transform: translateY(-1px);
131
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
132
  }
133
 
134
  /* Mobile Menu */
 
137
  background: none;
138
  border: none;
139
  cursor: pointer;
140
+ padding: 8px;
141
+ color: #171717;
142
+ z-index: 1002;
143
+ }
144
+
145
+ .mobile-menu-overlay {
146
+ position: fixed;
147
+ top: 0;
148
+ left: 0;
149
+ width: 100%;
150
+ height: 100vh;
151
+ background: rgba(255, 255, 255, 0.98);
152
+ z-index: 1001;
153
+ display: flex;
154
+ flex-direction: column;
155
+ justify-content: center;
156
+ align-items: center;
157
+ gap: 2rem;
158
+ opacity: 0;
159
+ pointer-events: none;
160
+ transition: opacity 0.3s ease;
161
+ }
162
+
163
+ .mobile-menu-overlay.open {
164
+ opacity: 1;
165
+ pointer-events: auto;
166
+ }
167
+
168
+ .mobile-nav-item {
169
+ font-size: 1.5rem;
170
+ font-weight: 600;
171
+ color: #171717;
172
+ text-decoration: none;
173
+ transition: color 0.2s;
174
+ }
175
+
176
+ .mobile-nav-item:hover {
177
+ color: #D58A60;
178
+ }
179
+
180
+ .close-icon {
181
+ display: none;
182
+ }
183
+
184
+ .menu-icon {
185
+ display: block;
186
+ }
187
+
188
+ .mobile-menu-btn.open .menu-icon {
189
+ display: none;
190
+ }
191
+
192
+ .mobile-menu-btn.open .close-icon {
193
+ display: block;
194
  }
195
 
196
+ @media (max-width: 1024px) {
197
  .nav-group.desktop {
198
  display: none;
199
  }
 
205
 
206
  <nav>
207
  <div class="nav-group">
208
+ <a href="/" class="logo">Nexus<span>.</span></a>
209
  </div>
210
 
211
  <div class="nav-group desktop">
 
228
  </div>
229
 
230
  <div class="nav-group">
231
+ <button class="mobile-menu-btn" id="menu-toggle">
232
+ <svg class="menu-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
233
+ <svg class="close-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
234
+ </button>
235
+ <a href="https://app.nexus.ai" class="account-btn desktop-only">Войти</a>
236
  </div>
237
  </nav>
238
+
239
+ <div class="mobile-menu-overlay" id="mobile-menu">
240
+ <a href="#home" class="mobile-nav-item">Главная</a>
241
+ <a href="#about" class="mobile-nav-item">О нас</a>
242
+ <a href="#plans" class="mobile-nav-item">Тарифы</a>
243
+ <a href="#meet-us" class="mobile-nav-item">Команда</a>
244
+ <a href="https://app.nexus.ai" class="mobile-nav-item" style="color: #D58A60;">Войти в аккаунт</a>
245
+ </div>
246
  `;
247
+
248
+ // Mobile Menu Logic
249
+ const menuToggle = this.shadowRoot.getElementById('menu-toggle');
250
+ const mobileMenu = this.shadowRoot.getElementById('mobile-menu');
251
+ const mobileLinks = this.shadowRoot.querySelectorAll('.mobile-nav-item');
252
+
253
+ menuToggle.addEventListener('click', () => {
254
+ menuToggle.classList.toggle('open');
255
+ mobileMenu.classList.toggle('open');
256
+ document.body.style.overflow = mobileMenu.classList.contains('open') ? 'hidden' : '';
257
+ });
258
+
259
+ mobileLinks.forEach(link => {
260
+ link.addEventListener('click', () => {
261
+ menuToggle.classList.remove('open');
262
+ mobileMenu.classList.remove('open');
263
+ document.body.style.overflow = '';
264
+ });
265
+ });
266
  }
267
  }
268
 
269
+ customElements.define('custom-header', CustomHeader);
index.html CHANGED
@@ -61,21 +61,27 @@
61
  <!-- Main Content -->
62
  <main>
63
  <!-- Hero Section -->
64
- <section id="home" class="relative min-h-screen flex items-center justify-center pt-20 overflow-hidden">
65
- <!-- 3D Background Canvas -->
66
  <div id="canvas-container" class="absolute inset-0 z-0"></div>
67
 
68
  <div class="container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center">
69
  <!-- Text Content -->
70
- <div class="text-center lg:text-left space-y-6 animate-fade-in-up">
71
- <h1 class="text-5xl md:text-7xl font-bold tracking-tight text-neutral-900 leading-[1.1]">
72
- Продавай, пока ты <span class="text-primary">спишь.</span>
 
 
 
 
 
 
 
73
  </h1>
74
- <p class="text-xl text-neutral-600 max-w-lg mx-auto lg:mx-0 font-light">
75
- Твой AI-менеджер на Авито. Работает 24/7 без зарплаты и выходных.
76
  </p>
77
-
78
- <div class="flex flex-col sm:flex-row items-center gap-4 justify-center lg:justify-start pt-4">
79
  <a href="https://app.nexus.ai" class="bg-neutral-900 text-white px-8 py-4 rounded-full font-medium hover:bg-neutral-800 transition-all transform hover:scale-105 shadow-lg hover:shadow-xl w-full sm:w-auto text-center">
80
  Подключить Nexus
81
  </a>
@@ -83,44 +89,40 @@
83
  Как это работает
84
  </a>
85
  </div>
86
-
87
- <div class="pt-8 flex flex-wrap items-center justify-center lg:justify-start gap-6 text-sm text-neutral-500 font-medium">
88
- <div class="flex items-center gap-2">
89
- <div class="w-2 h-2 rounded-full bg-green-500"></div>
90
- <span>Официальная интеграция API</span>
91
- </div>
92
  <div class="flex items-center gap-2">
93
- <div class="w-2 h-2 rounded-full bg-primary"></div>
94
- <span>0% галлюцинаций</span>
95
  </div>
96
  <div class="flex items-center gap-2">
97
- <div class="w-2 h-2 rounded-full bg-blue-500"></div>
98
- <span>Безопасность данных</span>
99
  </div>
100
  </div>
101
- </div>
102
 
103
  <!-- MacOS Window Visualization -->
104
  <div class="relative hidden lg:block perspective-container">
105
- <div class="mac-window tilt-effect bg-white/90 backdrop-blur-xl border border-neutral-200 shadow-2xl rounded-xl overflow-hidden w-full max-w-md mx-auto transform transition-transform duration-100 ease-out">
106
  <!-- Window Controls -->
107
- <div class="h-10 bg-neutral-100 border-b border-neutral-200 flex items-center px-4 gap-2">
108
- <div class="w-3 h-3 rounded-full bg-[#FF5F57]"></div>
109
- <div class="w-3 h-3 rounded-full bg-[#FEBC2E]"></div>
110
- <div class="w-3 h-3 rounded-full bg-[#28C840]"></div>
111
- <div class="ml-4 text-xs text-neutral-400 font-mono">Nexus Chat Agent</div>
 
 
 
112
  </div>
113
-
114
  <!-- Chat Area -->
115
- <div class="p-6 space-y-4 h-[400px] overflow-y-auto chat-container" id="chat-display">
116
- <!-- Chat messages will be injected here via JS -->
117
  </div>
118
  </div>
119
-
120
  <!-- Decorative elements behind window -->
121
- <div class="absolute -top-10 -right-10 w-20 h-20 bg-primary/10 rounded-full blur-2xl"></div>
122
- <div class="absolute -bottom-10 -left-10 w-32 h-32 bg-blue-100 rounded-full blur-2xl"></div>
123
- </div>
124
  </div>
125
  </section>
126
 
 
61
  <!-- Main Content -->
62
  <main>
63
  <!-- Hero Section -->
64
+ <section id="home" class="relative min-h-screen flex items-center justify-center pt-24 pb-12 lg:pt-32 overflow-hidden">
65
+ <!-- 3D Background Canvas -->
66
  <div id="canvas-container" class="absolute inset-0 z-0"></div>
67
 
68
  <div class="container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center">
69
  <!-- Text Content -->
70
+ <div class="text-center lg:text-left space-y-8 animate-fade-in-up">
71
+ <div class="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-primary/10 border border-primary/20 text-primary text-sm font-semibold mb-4">
72
+ <span class="relative flex h-2 w-2">
73
+ <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"></span>
74
+ <span class="relative inline-flex rounded-full h-2 w-2 bg-primary"></span>
75
+ </span>
76
+ Официальная интеграция API Avito
77
+ </div>
78
+ <h1 class="text-5xl md:text-7xl lg:text-8xl font-bold tracking-tight text-neutral-900 leading-[1.05]">
79
+ Продавай, пока ты <br class="hidden lg:block"/><span class="text-primary">спишь.</span>
80
  </h1>
81
+ <p class="text-xl md:text-2xl text-neutral-500 max-w-xl mx-auto lg:mx-0 leading-relaxed font-normal">
82
+ Твой AI-менеджер на Авито. Работает 24/7, отвечает мгновенно и закрывает сделки.
83
  </p>
84
+ <div class="flex flex-col sm:flex-row items-center gap-4 justify-center lg:justify-start pt-4">
 
85
  <a href="https://app.nexus.ai" class="bg-neutral-900 text-white px-8 py-4 rounded-full font-medium hover:bg-neutral-800 transition-all transform hover:scale-105 shadow-lg hover:shadow-xl w-full sm:w-auto text-center">
86
  Подключить Nexus
87
  </a>
 
89
  Как это работает
90
  </a>
91
  </div>
92
+ <div class="pt-8 flex items-center justify-center lg:justify-start gap-8 text-sm text-neutral-400 font-medium border-t border-neutral-100/50">
 
 
 
 
 
93
  <div class="flex items-center gap-2">
94
+ <i data-feather="check-circle" class="text-green-500 w-4 h-4"></i>
95
+ <span>Установлен за 5 мин</span>
96
  </div>
97
  <div class="flex items-center gap-2">
98
+ <i data-feather="shield" class="text-primary w-4 h-4"></i>
99
+ <span>Безопасные данные</span>
100
  </div>
101
  </div>
102
+ </div>
103
 
104
  <!-- MacOS Window Visualization -->
105
  <div class="relative hidden lg:block perspective-container">
106
+ <div class="mac-window tilt-effect bg-white/80 backdrop-blur-2xl border border-white/50 shadow-[0_25px_50px_-12px_rgba(0,0,0,0.15)] rounded-2xl overflow-hidden w-full max-w-md mx-auto transform transition-transform duration-150 ease-out">
107
  <!-- Window Controls -->
108
+ <div class="h-12 bg-white/50 border-b border-neutral-200/50 flex items-center justify-between px-4 backdrop-blur-md">
109
+ <div class="flex gap-2">
110
+ <div class="w-3 h-3 rounded-full bg-[#FF5F57]"></div>
111
+ <div class="w-3 h-3 rounded-full bg-[#FEBC2E]"></div>
112
+ <div class="w-3 h-3 rounded-full bg-[#28C840]"></div>
113
+ </div>
114
+ <div class="text-xs text-neutral-400 font-medium tracking-wide">Nexus AI Agent</div>
115
+ <div class="w-4"></div>
116
  </div>
 
117
  <!-- Chat Area -->
118
+ <div class="p-6 space-y-4 h-[420px] overflow-y-auto chat-container scroll-smooth" id="chat-display">
119
+ <!-- Chat messages will be injected here via JS -->
120
  </div>
121
  </div>
 
122
  <!-- Decorative elements behind window -->
123
+ <div class="absolute -top-10 -right-10 w-32 h-32 bg-primary/20 rounded-full blur-3xl animate-pulse"></div>
124
+ <div class="absolute -bottom-10 -left-10 w-40 h-40 bg-blue-500/10 rounded-full blur-3xl"></div>
125
+ </div>
126
  </div>
127
  </section>
128
 
script.js CHANGED
@@ -150,35 +150,47 @@ document.addEventListener('DOMContentLoaded', () => {
150
  camera.updateProjectionMatrix();
151
  renderer.setSize(window.innerWidth, window.innerHeight);
152
  });
153
-
154
-
155
  // --- 3. MacOS Window Tilt Interaction ---
156
  const windowEl = document.querySelector('.mac-window');
157
  const container = document.querySelector('.perspective-container');
158
 
159
  if(container && windowEl) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  container.addEventListener('mousemove', (e) => {
161
  const rect = container.getBoundingClientRect();
162
  const x = e.clientX - rect.left;
163
  const y = e.clientY - rect.top;
164
 
165
- // Calculate rotation based on cursor position relative to center
166
  const centerX = rect.width / 2;
167
  const centerY = rect.height / 2;
168
 
169
- const rotateY = ((x - centerX) / centerX) * -5; // Max 5 deg
170
- const rotateX = ((y - centerY) / centerY) * 5; // Max 5 deg
171
-
172
- windowEl.style.transform = `rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
173
  });
174
 
175
  container.addEventListener('mouseleave', () => {
176
- // Reset to default tilt
177
- windowEl.style.transform = `rotateY(-10deg) rotateX(5deg)`;
178
  });
179
  }
180
-
181
- // --- 4. FAQ Accordion Logic ---
182
  const faqData = [
183
  {
184
  q: "Зачем мне это нужно?",
 
150
  camera.updateProjectionMatrix();
151
  renderer.setSize(window.innerWidth, window.innerHeight);
152
  });
 
 
153
  // --- 3. MacOS Window Tilt Interaction ---
154
  const windowEl = document.querySelector('.mac-window');
155
  const container = document.querySelector('.perspective-container');
156
 
157
  if(container && windowEl) {
158
+ // Use requestAnimationFrame for smoother performance
159
+ let currentX = -8;
160
+ let currentY = 4;
161
+ let targetX = -8;
162
+ let targetY = 4;
163
+
164
+ const animateTilt = () => {
165
+ // Lerp (Linear Interpolation) for smooth movement
166
+ currentX += (targetX - currentX) * 0.1;
167
+ currentY += (targetY - currentY) * 0.1;
168
+
169
+ windowEl.style.transform = `rotateX(${currentY}deg) rotateY(${currentX}deg)`;
170
+ requestAnimationFrame(animateTilt);
171
+ };
172
+
173
+ animateTilt();
174
+
175
  container.addEventListener('mousemove', (e) => {
176
  const rect = container.getBoundingClientRect();
177
  const x = e.clientX - rect.left;
178
  const y = e.clientY - rect.top;
179
 
 
180
  const centerX = rect.width / 2;
181
  const centerY = rect.height / 2;
182
 
183
+ // Reduced intensity for a more premium feel
184
+ targetX = ((x - centerX) / centerX) * -4;
185
+ targetY = ((y - centerY) / centerY) * 4;
 
186
  });
187
 
188
  container.addEventListener('mouseleave', () => {
189
+ targetX = -8;
190
+ targetY = 4;
191
  });
192
  }
193
+ // --- 4. FAQ Accordion Logic ---
 
194
  const faqData = [
195
  {
196
  q: "Зачем мне это нужно?",
style.css CHANGED
@@ -28,71 +28,90 @@ body {
28
  ::-webkit-scrollbar-thumb:hover {
29
  background: #D4D4D4;
30
  }
31
-
32
  /* MacOS Window 3D Effect */
33
  .perspective-container {
34
- perspective: 1200px;
35
  }
36
 
37
  .mac-window {
38
- transform: rotateY(-10deg) rotateX(5deg);
39
- transition: transform 0.1s ease-out; /* Fast response for mouse move */
40
- box-shadow: 20px 20px 60px rgba(0,0,0,0.1), -5px -5px 20px rgba(255,255,255,0.8);
 
 
41
  }
42
 
43
  .mac-window:hover {
44
- /* Subtle pop on hover */
45
- transform: rotateY(-5deg) rotateX(2deg) scale(1.02);
46
  }
47
-
48
  /* Chat Styles */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  .chat-bubble {
50
  max-width: 85%;
51
- padding: 12px 16px;
52
- border-radius: 18px;
53
  font-size: 0.95rem;
54
  line-height: 1.5;
55
- margin-bottom: 8px;
56
  opacity: 0;
57
- transform: translateY(10px);
58
- animation: slideUp 0.3s forwards;
 
59
  }
60
 
61
  .chat-bubble.bot {
62
- background-color: #F3F4F6;
63
- color: #171717;
64
- border-bottom-left-radius: 4px;
 
65
  }
66
 
67
  .chat-bubble.customer {
68
- background-color: #171717;
69
  color: #FFFFFF;
70
  margin-left: auto;
71
- border-bottom-right-radius: 4px;
 
72
  }
73
-
74
  @keyframes slideUp {
 
 
 
 
75
  to {
76
  opacity: 1;
77
- transform: translateY(0);
78
  }
79
  }
80
-
81
  /* Typing Indicator */
82
  .typing-indicator {
83
  display: flex;
84
- gap: 4px;
85
- padding: 12px 16px;
86
- background-color: #F3F4F6;
87
- border-radius: 18px;
88
- border-bottom-left-radius: 4px;
89
  width: fit-content;
 
90
  }
91
 
92
  .dot {
93
  width: 6px;
94
  height: 6px;
95
- background: #A3A3A3;
96
  border-radius: 50%;
97
  animation: bounce 1.4s infinite ease-in-out both;
98
  }
@@ -101,10 +120,15 @@ body {
101
  .dot:nth-child(2) { animation-delay: -0.16s; }
102
 
103
  @keyframes bounce {
104
- 0%, 80%, 100% { transform: scale(0); }
105
- 40% { transform: scale(1); }
 
 
 
 
 
 
106
  }
107
-
108
  /* Header Nav Expansion Animation (Fallback if CSS preferred) */
109
  .nav-link {
110
  display: flex;
 
28
  ::-webkit-scrollbar-thumb:hover {
29
  background: #D4D4D4;
30
  }
 
31
  /* MacOS Window 3D Effect */
32
  .perspective-container {
33
+ perspective: 1500px;
34
  }
35
 
36
  .mac-window {
37
+ transform: rotateY(-8deg) rotateX(4deg);
38
+ transition: transform 0.15s cubic-bezier(0.2, 0, 0.2, 1);
39
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1),
40
+ 0 0 0 1px rgba(255, 255, 255, 0.5) inset;
41
+ background: rgba(255, 255, 255, 0.7);
42
  }
43
 
44
  .mac-window:hover {
45
+ transform: rotateY(-4deg) rotateX(2deg) scale(1.01);
 
46
  }
 
47
  /* Chat Styles */
48
+ .chat-container {
49
+ scrollbar-width: thin;
50
+ scrollbar-color: #E5E5E5 transparent;
51
+ }
52
+
53
+ .chat-container::-webkit-scrollbar {
54
+ width: 4px;
55
+ }
56
+
57
+ .chat-container::-webkit-scrollbar-thumb {
58
+ background-color: #E5E5E5;
59
+ border-radius: 4px;
60
+ }
61
+
62
  .chat-bubble {
63
  max-width: 85%;
64
+ padding: 14px 18px;
65
+ border-radius: 20px;
66
  font-size: 0.95rem;
67
  line-height: 1.5;
68
+ margin-bottom: 12px;
69
  opacity: 0;
70
+ transform: translateY(15px);
71
+ animation: slideUp 0.4s cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
72
+ box-shadow: 0 2px 4px rgba(0,0,0,0.02);
73
  }
74
 
75
  .chat-bubble.bot {
76
+ background: linear-gradient(135deg, #F9FAFB 0%, #F3F4F6 100%);
77
+ color: #1F2937;
78
+ border-bottom-left-radius: 6px;
79
+ border: 1px solid rgba(0,0,0,0.04);
80
  }
81
 
82
  .chat-bubble.customer {
83
+ background: linear-gradient(135deg, #171717 0%, #262626 100%);
84
  color: #FFFFFF;
85
  margin-left: auto;
86
+ border-bottom-right-radius: 6px;
87
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
88
  }
 
89
  @keyframes slideUp {
90
+ from {
91
+ opacity: 0;
92
+ transform: translateY(15px) scale(0.98);
93
+ }
94
  to {
95
  opacity: 1;
96
+ transform: translateY(0) scale(1);
97
  }
98
  }
 
99
  /* Typing Indicator */
100
  .typing-indicator {
101
  display: flex;
102
+ gap: 5px;
103
+ padding: 14px 18px;
104
+ background: linear-gradient(135deg, #F9FAFB 0%, #F3F4F6 100%);
105
+ border-radius: 20px;
106
+ border-bottom-left-radius: 6px;
107
  width: fit-content;
108
+ border: 1px solid rgba(0,0,0,0.04);
109
  }
110
 
111
  .dot {
112
  width: 6px;
113
  height: 6px;
114
+ background: #9CA3AF;
115
  border-radius: 50%;
116
  animation: bounce 1.4s infinite ease-in-out both;
117
  }
 
120
  .dot:nth-child(2) { animation-delay: -0.16s; }
121
 
122
  @keyframes bounce {
123
+ 0%, 80%, 100% {
124
+ transform: scale(0);
125
+ opacity: 0.5;
126
+ }
127
+ 40% {
128
+ transform: scale(1);
129
+ opacity: 1;
130
+ }
131
  }
 
132
  /* Header Nav Expansion Animation (Fallback if CSS preferred) */
133
  .nav-link {
134
  display: flex;