@howssatoshi/quantumcss 1.7.7 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -178,7 +178,7 @@
178
178
  .quick-action-card:hover {
179
179
  background: rgba(255, 255, 255, 0.05);
180
180
  transform: translateY(-2px);
181
- border-color: rgba(0, 212, 255, 0.2);
181
+ border-color: rgba(0, 212, 255, 0.6);
182
182
  }
183
183
 
184
184
  .quick-action-icon {
@@ -204,41 +204,41 @@
204
204
  }
205
205
 
206
206
  /* Light Mode Overrides */
207
- body.light-mode {
207
+ html[data-theme="light"] {
208
208
  --bg-primary: #f8fafc;
209
209
  --text-primary: #0f172a;
210
210
  --text-secondary: #475569;
211
211
  --text-muted: #64748b;
212
212
  }
213
213
 
214
- body.light-mode .admin-logo {
214
+ html[data-theme="light"] .admin-logo {
215
215
  border-bottom-color: #e2e8f0;
216
216
  }
217
217
 
218
- body.light-mode .table-container,
219
- body.light-mode .quick-action-card {
218
+ html[data-theme="light"] .table-container,
219
+ html[data-theme="light"] .quick-action-card {
220
220
  background: #ffffff;
221
221
  border-color: #e2e8f0;
222
222
  }
223
223
 
224
- body.light-mode .quick-action-card:hover {
224
+ html[data-theme="light"] .quick-action-card:hover {
225
225
  background: #f8fafc;
226
226
  }
227
227
 
228
- body.light-mode th {
228
+ html[data-theme="light"] th {
229
229
  background: #f8fafc;
230
230
  border-bottom-color: #e2e8f0;
231
231
  }
232
232
 
233
- body.light-mode td {
233
+ html[data-theme="light"] td {
234
234
  border-bottom-color: #f1f5f9;
235
235
  }
236
236
 
237
- body.light-mode tr:hover td {
237
+ html[data-theme="light"] tr:hover td {
238
238
  background: #f8fafc;
239
239
  }
240
240
 
241
- body.light-mode .table-footer {
241
+ html[data-theme="light"] .table-footer {
242
242
  background: #f8fafc;
243
243
  border-top-color: #e2e8f0;
244
244
  }
@@ -426,11 +426,11 @@
426
426
  <span>All Users</span>
427
427
  </nav>
428
428
  <div class="top-nav-actions">
429
- <div class="starlight-search max-w-xs">
429
+ <div class="starlight-search has-icon max-w-xs">
430
430
  <svg class="search-icon w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
431
431
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
432
432
  </svg>
433
- <input type="text" class="bg-transparent border-none w-full h-full pl-12 outline-none text-sm text-white" placeholder="Search users...">
433
+ <input type="text" class="search-input bg-transparent border-none w-full h-full pl-12 outline-none text-sm text-white" placeholder="Search users...">
434
434
  </div>
435
435
  <button class="icon-btn">
436
436
  <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -823,15 +823,7 @@
823
823
  </div>
824
824
 
825
825
  <script>
826
- function toggleTheme() {
827
- document.body.classList.toggle('light-mode');
828
- localStorage.setItem('theme', document.body.classList.contains('light-mode') ? 'light' : 'dark');
829
- }
830
826
 
831
- const savedTheme = localStorage.getItem('theme');
832
- if (savedTheme === 'light') {
833
- document.body.classList.add('light-mode');
834
- }
835
827
  </script>
836
828
  </body>
837
829
  </html>
@@ -75,13 +75,13 @@
75
75
  color: var(--text-primary, #f1f5f9);
76
76
  }
77
77
 
78
- body.light-mode .notification-btn {
78
+ html[data-theme="light"] .notification-btn {
79
79
  background: #ffffff;
80
80
  border-color: #e2e8f0;
81
81
  color: #64748b;
82
82
  }
83
83
 
84
- body.light-mode .notification-badge {
84
+ html[data-theme="light"] .notification-badge {
85
85
  border-color: #ffffff;
86
86
  }
87
87
 
@@ -362,34 +362,34 @@
362
362
 
363
363
  /* Sun/Moon icons */
364
364
  .sun-icon { display: none; }
365
- body.light-mode .sun-icon { display: inline; }
366
- body.light-mode .moon-icon { display: none; }
365
+ html[data-theme="light"] .sun-icon { display: inline; }
366
+ html[data-theme="light"] .moon-icon { display: none; }
367
367
 
368
368
  /* Light Mode Overrides */
369
- body.light-mode {
369
+ html[data-theme="light"] {
370
370
  --bg-primary: #f8fafc;
371
371
  --text-primary: #0f172a;
372
372
  --text-secondary: #475569;
373
373
  --text-muted: #64748b;
374
374
  }
375
375
 
376
- body.light-mode .chart-card {
376
+ html[data-theme="light"] .chart-card {
377
377
  background: #ffffff;
378
378
  border-color: #e2e8f0;
379
379
  }
380
380
 
381
- body.light-mode .date-selector {
381
+ html[data-theme="light"] .date-selector {
382
382
  background: #ffffff;
383
383
  border-color: #e2e8f0;
384
384
  }
385
385
 
386
- body.light-mode .header {
386
+ html[data-theme="light"] .header {
387
387
  border-bottom-color: #e2e8f0;
388
388
  }
389
389
 
390
- body.light-mode .legend-item,
391
- body.light-mode .activity-item,
392
- body.light-mode .product-row {
390
+ html[data-theme="light"] .legend-item,
391
+ html[data-theme="light"] .activity-item,
392
+ html[data-theme="light"] .product-row {
393
393
  border-bottom-color: #f1f5f9;
394
394
  }
395
395
 
@@ -408,6 +408,25 @@
408
408
  }
409
409
  }
410
410
 
411
+ @media (max-width: 1024px) {
412
+ .sidebar {
413
+ width: 80px;
414
+ }
415
+ .sidebar .logo span,
416
+ .sidebar .nav-section-title,
417
+ .sidebar .nav-item span,
418
+ .sidebar .theme-label {
419
+ display: none;
420
+ }
421
+ .sidebar .nav-item {
422
+ justify-content: center;
423
+ padding: 0.75rem;
424
+ }
425
+ .sidebar .logo {
426
+ justify-content: center;
427
+ }
428
+ }
429
+
411
430
  @media (max-width: 768px) {
412
431
  .app-layout {
413
432
  grid-template-columns: 1fr;
@@ -807,16 +826,8 @@
807
826
 
808
827
  <script>
809
828
  // Theme toggle
810
- function toggleTheme() {
811
- document.body.classList.toggle('light-mode');
812
- localStorage.setItem('theme', document.body.classList.contains('light-mode') ? 'light' : 'dark');
813
- }
814
829
 
815
830
  // Check saved theme
816
- const savedTheme = localStorage.getItem('theme');
817
- if (savedTheme === 'light') {
818
- document.body.classList.add('light-mode');
819
- }
820
831
 
821
832
  // Chart drawing functions
822
833
  function drawLineChart() {
@@ -849,7 +860,7 @@
849
860
  const range = maxValue - minValue;
850
861
 
851
862
  // Draw grid lines
852
- ctx.strokeStyle = document.body.classList.contains('light-mode') ? '#e2e8f0' : 'rgba(255,255,255,0.05)';
863
+ ctx.strokeStyle = document.documentElement.getAttribute('data-theme') === 'light' ? '#e2e8f0' : 'rgba(255,255,255,0.05)';
853
864
  ctx.lineWidth = 1;
854
865
 
855
866
  for (let i = 0; i <= 5; i++) {
@@ -915,7 +926,7 @@
915
926
  });
916
927
 
917
928
  // Draw labels
918
- ctx.fillStyle = document.body.classList.contains('light-mode') ? '#64748b' : '#64748b';
929
+ ctx.fillStyle = document.documentElement.getAttribute('data-theme') === 'light' ? '#64748b' : '#94a3b8';
919
930
  ctx.font = '12px Inter, system-ui, sans-serif';
920
931
  ctx.textAlign = 'center';
921
932
 
@@ -967,7 +978,7 @@
967
978
  });
968
979
 
969
980
  // Draw center text
970
- ctx.fillStyle = document.body.classList.contains('light-mode') ? '#0f172a' : '#f1f5f9';
981
+ ctx.fillStyle = document.documentElement.getAttribute('data-theme') === 'light' ? '#0f172a' : '#f1f5f9';
971
982
  ctx.font = 'bold 20px Inter, system-ui, sans-serif';
972
983
  ctx.textAlign = 'center';
973
984
  ctx.textBaseline = 'middle';
@@ -987,15 +998,10 @@
987
998
  });
988
999
 
989
1000
  // Redraw on theme change
990
- const observer = new MutationObserver((mutations) => {
991
- mutations.forEach((mutation) => {
992
- if (mutation.attributeName === 'class') {
993
- drawLineChart();
994
- drawDonutChart();
995
- }
996
- });
1001
+ window.addEventListener('themechange', () => {
1002
+ drawLineChart();
1003
+ drawDonutChart();
997
1004
  });
998
- observer.observe(document.body, { attributes: true });
999
1005
  </script>
1000
1006
  </body>
1001
1007
  </html>
@@ -24,54 +24,55 @@
24
24
  background: rgba(255, 255, 255, 0.1);
25
25
  }
26
26
 
27
- body.light-mode .theme-toggle:hover {
27
+ html[data-theme="light"] .theme-toggle:hover {
28
28
  background: rgba(0, 0, 0, 0.05);
29
29
  }
30
30
 
31
31
  .sun-icon { display: none; }
32
- body.light-mode .sun-icon { display: block; }
33
- body.light-mode .moon-icon { display: none; }
32
+ html[data-theme="light"] .sun-icon { display: block; }
33
+ html[data-theme="light"] .moon-icon { display: none; }
34
34
 
35
- body.light-mode {
35
+ html[data-theme="light"] {
36
36
  background-color: #f8fafc;
37
37
  color: #1e293b;
38
38
  }
39
39
 
40
- body.light-mode .text-white,
41
- body.light-mode .text-primary,
42
- body.light-mode h1,
43
- body.light-mode h2,
44
- body.light-mode h3,
45
- body.light-mode h4 {
40
+ html[data-theme="light"] .text-primary,
41
+ html[data-theme="light"] h1,
42
+ html[data-theme="light"] h2,
43
+ html[data-theme="light"] h3,
44
+ html[data-theme="light"] h4 {
46
45
  color: #0f172a !important;
47
46
  }
48
47
 
49
- body.light-mode .text-secondary,
50
- body.light-mode .text-muted,
51
- body.light-mode .text-slate-300,
52
- body.light-mode .prose,
53
- body.light-mode .prose p {
48
+ html[data-theme="light"] .text-secondary,
49
+ html[data-theme="light"] .text-muted,
50
+ html[data-theme="light"] .text-slate-300,
51
+ html[data-theme="light"] .prose,
52
+ html[data-theme="light"] .prose p {
54
53
  color: #475569 !important;
55
54
  }
56
55
 
57
- body.light-mode .glass {
56
+ html[data-theme="light"] .glass {
58
57
  background: rgba(255, 255, 255, 0.8) !important;
59
58
  border-color: rgba(0, 0, 0, 0.1) !important;
60
59
  }
61
60
 
62
- body.light-mode .starlight-card {
61
+ html[data-theme="light"] .starlight-card {
63
62
  background: white;
64
63
  border-color: #e2e8f0;
65
64
  }
66
65
 
67
- body.light-mode .code-window {
66
+ html[data-theme="light"] .code-window {
68
67
  background: #f1f5f9;
69
68
  border-color: #e2e8f0;
70
69
  }
71
70
 
72
- body.light-mode .code-window pre {
71
+ html[data-theme="light"] .code-window pre {
73
72
  color: #1e293b;
74
73
  }
74
+ body { background: transparent !important; }
75
+ nav, main, footer, section { position: relative; z-index: 1; }
75
76
  </style>
76
77
  </head>
77
78
  <body class="bg-starlight-deep text-primary font-sans antialiased min-h-screen relative overflow-x-hidden">
@@ -85,7 +86,7 @@
85
86
  <div class="star" style="top: 90%; left: 90%; --duration: 4s;"></div>
86
87
  </div>
87
88
 
88
- <div class="fixed top-0 left-0 w-full h-full overflow-hidden z-0 pointer-events-none">
89
+ <div class="fixed top-0 left-0 w-full h-full overflow-hidden z-n1 pointer-events-none">
89
90
  <div class="absolute top-0 left-0 w-full h-full bg-gradient-radial from-primary opacity-10"></div>
90
91
  </div>
91
92
 
@@ -110,7 +111,7 @@
110
111
  <a href="#" class="text-sm font-medium hover:text-primary transition-colors">Articles</a>
111
112
  <a href="#" class="text-sm font-medium hover:text-primary transition-colors">About</a>
112
113
  <div id="theme-btn" class="theme-toggle" title="Toggle Theme">
113
- <svg class="w-6 h-6 sun-icon hidden" fill="currentColor" viewBox="0 0 20 20"><path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"></path></svg>
114
+ <svg class="w-6 h-6 sun-icon" fill="currentColor" viewBox="0 0 20 20"><path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"></path></svg>
114
115
  <svg class="w-6 h-6 moon-icon" fill="currentColor" viewBox="0 0 20 20"><path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path></svg>
115
116
  </div>
116
117
  <button class="btn-starlight btn-sm">Subscribe</button>
@@ -147,14 +148,14 @@
147
148
  <span>5 min read</span>
148
149
  </div>
149
150
 
150
- <h1 class="text-5xl md:text-7xl font-black leading-tight text-white uppercase italic tracking-tighter">
151
+ <h1 class="text-5xl md:text-7xl font-black leading-tight text-primary uppercase italic tracking-tighter">
151
152
  The Future of <span class="text-gradient-starlight">UI Design</span>
152
153
  </h1>
153
154
 
154
155
  <div class="flex items-center gap-4 pt-4">
155
- <img src="https://media.licdn.com/dms/image/v2/D5603AQFDAUK1PK6IzQ/profile-displayphoto-scale_100_100/B56Zml2ZwgJkAg-_0/1759424127811?e=1771459200&v=beta&t=kk4HtXlQ0REqJ5bz6yy3akXwYeEfvznb8PZ4hQg85u4" alt="Eric Yang" class="w-12 h-12 rounded-full border border-primary_30">
156
+ <img src="images/eric.png" alt="Eric Yang" class="w-12 h-12 rounded-full border border-accent_30">
156
157
  <div>
157
- <p class="font-bold text-white uppercase text-xs tracking-widest">Eric Yang</p>
158
+ <p class="font-bold text-primary uppercase text-xs tracking-widest">Eric Yang</p>
158
159
  <p class="text-xs text-secondary font-medium">Frontend Architect</p>
159
160
  </div>
160
161
  </div>
@@ -169,12 +170,12 @@
169
170
 
170
171
  <!-- Content -->
171
172
  <div class="prose max-w-none text-slate-300 text-lg leading-relaxed space-y-10">
172
- <p class="text-2xl text-white font-medium">
173
+ <p class="text-2xl text-primary font-medium">
173
174
  Glassmorphism, neon glows, and deep gradients are making a comeback. Powered by modern CSS, they create an immersive experience.
174
175
  </p>
175
176
 
176
177
  <div class="space-y-6">
177
- <h2 class="text-3xl font-black text-white uppercase italic tracking-tighter flex items-center gap-4">
178
+ <h2 class="text-3xl font-black text-primary uppercase italic tracking-tighter flex items-center gap-4">
178
179
  <span class="w-2 h-10 bg-starlight rounded-full shadow-[0_0_15px_rgba(0,212,255,0.5)]"></span>
179
180
  The Starlight Paradigm
180
181
  </h2>
@@ -183,12 +184,12 @@
183
184
  </p>
184
185
  </div>
185
186
 
186
- <div class="glass p-8 rounded-2xl border-primary bg-primary_5 italic text-xl text-white">
187
+ <div class="glass p-8 rounded-2xl border-accent bg-accent_5 italic text-xl text-primary">
187
188
  "Design is not just what it looks like and feels like. Design is how it works... in zero gravity."
188
189
  </div>
189
190
 
190
191
  <div class="space-y-6">
191
- <h2 class="text-3xl font-black text-white uppercase italic tracking-tighter">Code Interface</h2>
192
+ <h2 class="text-3xl font-black text-primary uppercase italic tracking-tighter">Code Interface</h2>
192
193
  <div class="code-window">
193
194
  <div class="code-window-header">
194
195
  <div class="code-window-controls">
@@ -235,7 +236,7 @@
235
236
 
236
237
  <!-- Newsletter -->
237
238
  <div class="glass p-6 rounded-2xl glow-blue border border-white_5">
238
- <h3 class="text-lg font-bold mb-2 text-white">Join the Newsletter</h3>
239
+ <h3 class="text-lg font-bold mb-2 text-primary">Join the Newsletter</h3>
239
240
  <p class="text-secondary text-sm mb-4">Get the latest design trends delivered to your inbox.</p>
240
241
  <form class="space-y-3">
241
242
  <input type="email" placeholder="your@email.com" class="input-starlight w-full bg-black_20 border-white_10">
@@ -248,12 +249,12 @@
248
249
  <h3 class="text-xs font-bold text-muted uppercase tracking-wider">Recommended</h3>
249
250
 
250
251
  <a href="#" class="block glass p-4 rounded-xl hover:bg-white_5 transition-colors group">
251
- <h4 class="font-bold text-white group-hover:text-primary transition-colors">Glassmorphism in 2026</h4>
252
+ <h4 class="font-bold text-primary group-hover:text-primary transition-colors">Glassmorphism in 2026</h4>
252
253
  <p class="text-xs text-muted mt-1">Feb 1 • 4 min read</p>
253
254
  </a>
254
255
 
255
256
  <a href="#" class="block glass p-4 rounded-xl hover:bg-white_5 transition-colors group">
256
- <h4 class="font-bold text-white group-hover:text-primary transition-colors">Modern CSS Variables</h4>
257
+ <h4 class="font-bold text-primary group-hover:text-primary transition-colors">Modern CSS Variables</h4>
257
258
  <p class="text-xs text-muted mt-1">Jan 28 • 8 min read</p>
258
259
  </a>
259
260
  </div>
@@ -271,8 +272,8 @@
271
272
  © 2026 StarlightBlog. Powered by QuantumCSS.
272
273
  </div>
273
274
  <div class="flex gap-6">
274
- <a href="#" class="text-muted hover:text-white transition-colors">Privacy</a>
275
- <a href="#" class="text-muted hover:text-white transition-colors">Terms</a>
275
+ <a href="#" class="text-muted hover:text-primary transition-colors">Privacy</a>
276
+ <a href="#" class="text-muted hover:text-primary transition-colors">Terms</a>
276
277
  </div>
277
278
  </div>
278
279
  </div>
@@ -284,4 +285,4 @@
284
285
  </script>
285
286
 
286
287
  </body>
287
- </html>
288
+ </html>
@@ -11,72 +11,68 @@
11
11
  display: grid;
12
12
  grid-template-columns: 320px 1fr;
13
13
  height: 100vh;
14
- background: var(--bg-primary, #08081a);
14
+ background: var(--q-color-bg, #08081a);
15
15
  overflow: hidden;
16
16
  }
17
17
  .chat-sidebar {
18
- background: linear-gradient(180deg, rgba(15, 23, 42, 0.98) 0%, rgba(8, 8, 26, 0.98) 100%);
19
- border-right: 1px solid rgba(255, 255, 255, 0.06);
18
+ background: linear-gradient(180deg, color-mix(in srgb, var(--q-color-bg), white 2%) 0%, var(--q-color-bg) 100%);
19
+ border-right: 1px solid var(--q-color-border);
20
20
  display: flex;
21
21
  flex-direction: column;
22
22
  overflow: hidden;
23
23
  }
24
- .sidebar-header { padding: 1.25rem; border-bottom: 1px solid rgba(255, 255, 255, 0.06); }
25
- .chat-tabs { display: flex; gap: 0.25rem; padding: 0.75rem 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.06); }
24
+ .sidebar-header { padding: 1.25rem; border-bottom: 1px solid var(--q-color-border); }
25
+ .chat-tabs { display: flex; gap: 0.25rem; padding: 0.75rem 1rem; border-bottom: 1px solid var(--q-color-border); }
26
26
  .chat-tab { flex: 1; padding: 0.5rem; background: transparent; border: none; border-radius: 0.5rem;
27
- color: var(--text-muted, #64748b); font-size: 0.8125rem; font-weight: 500; cursor: pointer;
27
+ color: var(--q-text-muted, #64748b); font-size: 0.8125rem; font-weight: 500; cursor: pointer;
28
28
  }
29
- .chat-tab.active { color: var(--color-starlight, #00d4ff); background: rgba(0, 212, 255, 0.1); }
29
+ .chat-tab.active { color: var(--q-color-starlight-blue, #00d4ff); background: var(--q-highlight-bg); }
30
30
  .conversation-list { flex: 1; overflow-y: auto; padding: 0.5rem; }
31
31
  .conversation-item { display: flex; align-items: center; gap: 0.875rem; padding: 0.875rem; border-radius: 0.75rem; cursor: pointer; margin-bottom: 0.25rem; }
32
- .conversation-item:hover { background: rgba(255, 255, 255, 0.03); }
33
- .conversation-item.active { background: rgba(0, 212, 255, 0.08); }
32
+ .conversation-item:hover { background: var(--q-highlight-bg); }
33
+ .conversation-item.active { background: color-mix(in srgb, var(--q-color-starlight-blue), transparent 90%); }
34
34
  .conversation-avatar { position: relative; flex-shrink: 0; }
35
35
  .conversation-avatar img { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; }
36
36
  .conversation-info { flex: 1; min-width: 0; }
37
37
  .conversation-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.25rem; }
38
- .conversation-name { font-size: 0.9375rem; font-weight: 600; color: var(--text-primary, #f1f5f9); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
39
- .conversation-time { font-size: 0.75rem; color: var(--text-muted, #64748b); }
40
- .conversation-message { font-size: 0.875rem; color: var(--text-secondary, #94a3b8); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
41
- .conversation-item.unread .conversation-message { color: var(--text-primary, #f1f5f9); font-weight: 500; }
38
+ .conversation-name { font-size: 0.9375rem; font-weight: 600; color: var(--q-text-primary, #f1f5f9); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
39
+ .conversation-time { font-size: 0.75rem; color: var(--q-text-muted, #64748b); }
40
+ .conversation-message { font-size: 0.875rem; color: var(--q-text-secondary, #94a3b8); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
41
+ .conversation-item.unread .conversation-message { color: var(--q-text-primary, #f1f5f9); font-weight: 500; }
42
42
  .chat-main { display: flex; flex-direction: column; overflow: hidden; }
43
- .chat-header { display: flex; align-items: center; justify-content: space-between; padding: 0 1.5rem; border-bottom: 1px solid rgba(255, 255, 255, 0.06); background: rgba(255, 255, 255, 0.02); height: 5rem; flex-shrink: 0; }
43
+ .chat-header { display: flex; align-items: center; justify-content: space-between; padding: 0 1.5rem; border-bottom: 1px solid var(--q-color-border); background: color-mix(in srgb, var(--q-color-bg), white 1%); height: 5rem; flex-shrink: 0; }
44
44
  .chat-header-info { display: flex; align-items: center; gap: 0.875rem; }
45
45
  .chat-header-avatar { position: relative; }
46
46
  .chat-header-avatar img { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; }
47
- .chat-header-details h3 { font-size: 1rem; font-weight: 600; color: var(--text-primary, #f1f5f9); margin-bottom: 0.125rem; }
47
+ .chat-header-details h3 { font-size: 1rem; font-weight: 600; color: var(--q-text-primary, #f1f5f9); margin-bottom: 0.125rem; }
48
48
  .chat-header-details p { font-size: 0.8125rem; color: #10b981; }
49
49
  .messages-container { flex: 1; overflow-y: auto; padding: 1.5rem; display: flex; flex-direction: column; gap: 1rem; }
50
50
  .message-date { text-align: center; margin: 1rem 0; }
51
- .message-date span { font-size: 0.75rem; color: var(--text-muted, #64748b); background: rgba(255, 255, 255, 0.05); padding: 0.375rem 0.875rem; border-radius: 9999px; }
51
+ .message-date span { font-size: 0.75rem; color: var(--q-text-muted, #64748b); background: var(--q-color-bg-muted); padding: 0.375rem 0.875rem; border-radius: 9999px; }
52
52
  .message { display: flex; gap: 0.75rem; max-width: 70%; }
53
53
  .message.sent { align-self: flex-end; flex-direction: row-reverse; }
54
54
  .message-avatar { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
55
55
  .message-content { display: flex; flex-direction: column; gap: 0.25rem; }
56
56
  .message-bubble { padding: 0.875rem 1.125rem; border-radius: 1.125rem; font-size: 0.9375rem; line-height: 1.5; }
57
- .message.received .message-bubble { background: rgba(255, 255, 255, 0.08); color: var(--text-primary, #f1f5f9); border-bottom-left-radius: 0.25rem; }
58
- .message.sent .message-bubble { background: linear-gradient(135deg, var(--color-starlight, #00d4ff), #3b82f6); color: white; border-bottom-right-radius: 0.25rem; }
59
- .message-time { font-size: 0.75rem; color: var(--text-muted, #64748b); align-self: flex-start; margin-left: 0.5rem; }
57
+ .message.received .message-bubble { background: color-mix(in srgb, var(--q-color-bg), white 8%); color: var(--q-text-primary, #f1f5f9); border-bottom-left-radius: 0.25rem; }
58
+ .message.sent .message-bubble { background: var(--q-color-starlight-blue); color: #000; font-weight: 600; border-bottom-right-radius: 0.25rem; }
59
+ .message-time { font-size: 0.75rem; color: var(--q-text-muted, #64748b); align-self: flex-start; margin-left: 0.5rem; }
60
60
  .message.sent .message-time { align-self: flex-end; margin-left: 0; margin-right: 0.5rem; }
61
- .chat-input-container { padding: 0 1.25rem; border-top: 1px solid rgba(255, 255, 255, 0.06); background: rgba(255, 255, 255, 0.02); height: 5rem; min-height: 5rem; display: flex; align-items: center; flex-shrink: 0; box-sizing: border-box; }
62
- .chat-input-wrapper { display: flex; align-items: flex-end; gap: 0.75rem; background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 1.25rem; padding: 0.5rem 0.75rem; width: 100%; }
63
- .chat-input { flex: 1; background: transparent; border: none; color: var(--text-primary, #f1f5f9); font-size: 0.9375rem; resize: none; max-height: 120px; padding: 0.625rem 0; outline: none; }
64
- .chat-input::placeholder { color: var(--text-muted, #64748b); }
65
- .send-btn { width: 36px; height: 36px; border-radius: 50%; background: linear-gradient(135deg, var(--color-starlight, #00d4ff), #3b82f6); border: none; color: white; display: flex; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0; margin-bottom: 0.125rem; }
66
- .theme-toggle-wrapper { padding: 0 1.25rem; border-top: 1px solid rgba(255, 255, 255, 0.06); height: 5rem; min-height: 5rem; display: flex; align-items: center; flex-shrink: 0; background: rgba(255, 255, 255, 0.02); box-sizing: border-box; }
67
- .theme-btn { width: 100%; display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 0.75rem; color: var(--text-primary, #f1f5f9); cursor: pointer; transition: all 0.2s ease; }
68
- .theme-btn:hover { background: rgba(255, 255, 255, 0.08); }
61
+ .chat-input-container { padding: 0 1.25rem; border-top: 1px solid var(--q-color-border); background: color-mix(in srgb, var(--q-color-bg), white 1%); height: 5rem; min-height: 5rem; display: flex; align-items: center; flex-shrink: 0; box-sizing: border-box; }
62
+ .chat-input-wrapper { display: flex; align-items: flex-end; gap: 0.75rem; background: var(--q-input-bg); border: 1px solid var(--q-input-border); border-radius: 1.25rem; padding: 0.5rem 0.75rem; width: 100%; }
63
+ .chat-input { flex: 1; background: transparent; border: none; color: var(--q-text-primary, #f1f5f9); font-size: 0.9375rem; resize: none; max-height: 120px; padding: 0.625rem 0; outline: none; }
64
+ .chat-input::placeholder { color: var(--q-text-muted, #64748b); }
65
+ .send-btn { width: 36px; height: 36px; border-radius: 50%; background: var(--q-gradient-primary); border: none; color: white; display: flex; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0; margin-bottom: 0.125rem; }
66
+ .theme-toggle-wrapper { padding: 0 1.25rem; border-top: 1px solid var(--q-color-border); height: 5rem; min-height: 5rem; display: flex; align-items: center; flex-shrink: 0; background: color-mix(in srgb, var(--q-color-bg), white 1%); box-sizing: border-box; }
67
+ .theme-btn { width: 100%; display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; background: var(--q-color-surface); border: 1px solid var(--q-color-border); border-radius: 0.75rem; color: var(--q-text-primary, #f1f5f9); cursor: pointer; transition: all 0.2s ease; }
68
+ .theme-btn:hover { background: var(--q-highlight-bg); }
69
69
  .theme-label { font-size: 0.875rem; font-weight: 500; }
70
70
  .sun-icon { display: none; }
71
- body.light-mode .sun-icon { display: inline; }
72
- body.light-mode .moon-icon { display: none; }
73
- body.light-mode { --bg-primary: #f8fafc; --text-primary: #0f172a; --text-secondary: #475569; --text-muted: #64748b; }
74
- body.light-mode .chat-sidebar { background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); border-right-color: #e2e8f0; }
75
- body.light-mode .chat-header, body.light-mode .chat-input-container { background: #f8fafc; border-color: #e2e8f0; }
76
- body.light-mode .chat-input-wrapper { background: #f1f5f9; border-color: #e2e8f0; }
77
- body.light-mode .conversation-item:hover { background: #f8fafc; }
78
- body.light-mode .conversation-item.active { background: rgba(0, 212, 255, 0.08); }
79
- body.light-mode .message.received .message-bubble { background: #f1f5f9; color: #0f172a; }
71
+ html[data-theme="light"] .sun-icon { display: inline; }
72
+ html[data-theme="light"] .moon-icon { display: none; }
73
+ html[data-theme="light"] { --bg-primary: var(--q-light-bg); --text-primary: var(--q-light-text); --text-secondary: var(--q-light-text-muted); --text-muted: var(--q-light-text-muted); }
74
+ html[data-theme="light"] .message.received .message-bubble { background: #fff; border: 1px solid #e2e8f0; color: #0f172a; }
75
+ html[data-theme="light"] .message.sent .message-bubble { background: var(--q-color-primary); color: #fff; }
80
76
  @media (max-width: 768px) { .chat-app { grid-template-columns: 1fr; } .chat-sidebar { display: none; } .message { max-width: 85%; } }
81
77
  </style>
82
78
  </head>
@@ -91,15 +87,15 @@
91
87
  </div>
92
88
  <div class="user-info">
93
89
  <div class="user-name">John Doe</div>
94
- <div class="user-email" style="color: var(--text-muted, #64748b); font-size: 0.8125rem;">Online</div>
90
+ <div class="user-email" style="color: var(--q-text-muted, #64748b); font-size: 0.8125rem;">Online</div>
95
91
  </div>
96
92
  </div>
97
93
  <div class="px-4 py-4 border-b border-white_5">
98
- <div class="starlight-search">
94
+ <div class="starlight-search has-icon">
99
95
  <svg class="search-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
100
96
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
101
97
  </svg>
102
- <input type="text" class="bg-transparent border-none w-full h-full pl-12 outline-none text-sm text-white" placeholder="Search conversations...">
98
+ <input type="text" class="search-input bg-transparent border-none w-full h-full pl-12 outline-none text-sm text-white" placeholder="Search conversations...">
103
99
  </div>
104
100
  </div>
105
101
  </div>
@@ -247,22 +243,5 @@
247
243
  </div>
248
244
  </div>
249
245
  </div>
250
- <script>
251
- function toggleTheme() {
252
- document.body.classList.toggle('light-mode');
253
- localStorage.setItem('theme', document.body.classList.contains('light-mode') ? 'light' : 'dark');
254
- }
255
- const savedTheme = localStorage.getItem('theme');
256
- if (savedTheme === 'light') document.body.classList.add('light-mode');
257
- document.querySelectorAll('.conversation-item').forEach(item => {
258
- item.addEventListener('click', function() {
259
- document.querySelectorAll('.conversation-item').forEach(i => i.classList.remove('active'));
260
- this.classList.add('active');
261
- this.classList.remove('unread');
262
- const badge = this.querySelector('.unread-badge');
263
- if (badge) badge.style.display = 'none';
264
- });
265
- });
266
- </script>
267
246
  </body>
268
247
  </html>