@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.
- package/README.md +1 -1
- package/dist/quantum.min.css +10 -1
- package/examples/admin-panel.html +12 -20
- package/examples/analytics-dashboard.html +36 -30
- package/examples/blog-template.html +35 -34
- package/examples/chat-messaging.html +35 -56
- package/examples/email-template.html +22 -30
- package/examples/gaming-template.html +161 -30
- package/examples/images/eric.png +0 -0
- package/examples/index.html +102 -129
- package/examples/kitchen-sink.html +59 -23
- package/examples/music-streaming.html +19 -27
- package/examples/news-template.html +87 -229
- package/examples/portfolio-resume.html +125 -588
- package/examples/shopping/index.html +514 -341
- package/examples/shopping/nova-shop.css +984 -0
- package/examples/starlight.html +9 -8
- package/examples/theme-test.html +0 -15
- package/examples/travel/index.html +185 -28
- package/examples/video-streaming.html +40 -19
- package/package.json +1 -1
- package/src/defaults.js +77 -1
- package/src/generator.js +14 -5
- package/src/starlight.js +0 -4
- package/src/styles/quantum-base.css +192 -18
- package/src/styles/quantum-components.css +147 -136
- package/src/styles/starlight.css +907 -44
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
|
|
214
|
+
html[data-theme="light"] .admin-logo {
|
|
215
215
|
border-bottom-color: #e2e8f0;
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
224
|
+
html[data-theme="light"] .quick-action-card:hover {
|
|
225
225
|
background: #f8fafc;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
html[data-theme="light"] th {
|
|
229
229
|
background: #f8fafc;
|
|
230
230
|
border-bottom-color: #e2e8f0;
|
|
231
231
|
}
|
|
232
232
|
|
|
233
|
-
|
|
233
|
+
html[data-theme="light"] td {
|
|
234
234
|
border-bottom-color: #f1f5f9;
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
|
|
237
|
+
html[data-theme="light"] tr:hover td {
|
|
238
238
|
background: #f8fafc;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
366
|
-
|
|
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
|
-
|
|
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
|
-
|
|
376
|
+
html[data-theme="light"] .chart-card {
|
|
377
377
|
background: #ffffff;
|
|
378
378
|
border-color: #e2e8f0;
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
-
|
|
381
|
+
html[data-theme="light"] .date-selector {
|
|
382
382
|
background: #ffffff;
|
|
383
383
|
border-color: #e2e8f0;
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
-
|
|
386
|
+
html[data-theme="light"] .header {
|
|
387
387
|
border-bottom-color: #e2e8f0;
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
991
|
-
|
|
992
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
32
|
+
html[data-theme="light"] .sun-icon { display: block; }
|
|
33
|
+
html[data-theme="light"] .moon-icon { display: none; }
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
html[data-theme="light"] {
|
|
36
36
|
background-color: #f8fafc;
|
|
37
37
|
color: #1e293b;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
+
html[data-theme="light"] .starlight-card {
|
|
63
62
|
background: white;
|
|
64
63
|
border-color: #e2e8f0;
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
html[data-theme="light"] .code-window {
|
|
68
67
|
background: #f1f5f9;
|
|
69
68
|
border-color: #e2e8f0;
|
|
70
69
|
}
|
|
71
70
|
|
|
72
|
-
|
|
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-
|
|
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
|
|
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-
|
|
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="
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
275
|
-
<a href="#" class="text-muted hover:text-
|
|
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
|
|
14
|
+
background: var(--q-color-bg, #08081a);
|
|
15
15
|
overflow: hidden;
|
|
16
16
|
}
|
|
17
17
|
.chat-sidebar {
|
|
18
|
-
background: linear-gradient(180deg,
|
|
19
|
-
border-right: 1px solid
|
|
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
|
|
25
|
-
.chat-tabs { display: flex; gap: 0.25rem; padding: 0.75rem 1rem; border-bottom: 1px solid
|
|
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:
|
|
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:
|
|
33
|
-
.conversation-item.active { background:
|
|
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
|
|
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:
|
|
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:
|
|
58
|
-
.message.sent .message-bubble { background:
|
|
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
|
|
62
|
-
.chat-input-wrapper { display: flex; align-items: flex-end; gap: 0.75rem; background:
|
|
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:
|
|
66
|
-
.theme-toggle-wrapper { padding: 0 1.25rem; border-top: 1px solid
|
|
67
|
-
.theme-btn { width: 100%; display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; background:
|
|
68
|
-
.theme-btn:hover { background:
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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>
|