@howssatoshi/quantumcss 1.0.2 → 1.2.0

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.
@@ -111,6 +111,40 @@
111
111
  --transition-slow: 400ms ease-in-out;
112
112
  }
113
113
 
114
+ /* High Contrast (Accessibility) Mode Support */
115
+ @media (prefers-contrast: more) {
116
+ :root {
117
+ --color-starlight-blue: #0088cc; /* Darkened for better contrast on light */
118
+ --color-starlight-orange: #d14d33;
119
+ --glass-bg: rgba(255, 255, 255, 0.1);
120
+ --glass-border: rgba(255, 255, 255, 0.4);
121
+ --text-muted: rgba(241, 245, 249, 0.8);
122
+ }
123
+ }
124
+
125
+ @media (forced-colors: active) {
126
+ :root {
127
+ --radius-none: 0;
128
+ --radius-sm: 0;
129
+ --radius-md: 0;
130
+ --radius-lg: 0;
131
+ --radius-xl: 0;
132
+ --radius-2xl: 0;
133
+ --radius-3xl: 0;
134
+ --radius-full: 0;
135
+ }
136
+
137
+ .starlight-card, .glass, .q-card {
138
+ border: 2px solid CanvasText !important;
139
+ }
140
+
141
+ .btn-starlight, .q-btn-primary {
142
+ background: ButtonFace !important;
143
+ color: ButtonText !important;
144
+ border: 2px solid ButtonText !important;
145
+ }
146
+ }
147
+
114
148
  /* Dark Mode */
115
149
  @media (prefers-color-scheme: dark) {
116
150
  :root {
@@ -140,6 +174,20 @@ body {
140
174
  line-height: inherit;
141
175
  }
142
176
 
177
+ input, textarea, select, button {
178
+ font-family: inherit;
179
+ font-size: inherit;
180
+ line-height: inherit;
181
+ color: inherit;
182
+ border: none;
183
+ background: transparent;
184
+ }
185
+
186
+ textarea {
187
+ resize: vertical;
188
+ min-height: 5rem;
189
+ }
190
+
143
191
  /* Layout Utilities */
144
192
  .container {
145
193
  width: 100%;
@@ -262,7 +310,7 @@ body {
262
310
  .text-2xl { font-size: 1.5rem; line-height: 2rem; }
263
311
  .text-3xl { font-size: 1.875rem; line-height: 2.25rem; }
264
312
  .text-4xl { font-size: 2.25rem; line-height: 2.5rem; }
265
- .text-5xl { font-size: 3rem; line-height: 1; }
313
+ .text-5xl { font-size: 3rem; line-height: 1.2; }
266
314
 
267
315
  .font-light { font-weight: 300; }
268
316
  .font-normal { font-weight: 400; }
@@ -844,19 +892,19 @@ body {
844
892
  }
845
893
 
846
894
  /* Utility for Quick Prototyping */
847
- .q-prose {
895
+ .prose {
848
896
  max-width: 65ch;
849
897
  line-height: 1.75;
850
898
  }
851
899
 
852
- .q-prose h1 {
900
+ .prose h1 {
853
901
  font-size: 2.25rem;
854
902
  font-weight: 700;
855
903
  line-height: 1.25;
856
904
  margin-bottom: 1rem;
857
905
  }
858
906
 
859
- .q-prose h2 {
907
+ .prose h2 {
860
908
  font-size: 1.875rem;
861
909
  font-weight: 600;
862
910
  line-height: 1.25;
@@ -864,16 +912,16 @@ body {
864
912
  margin-bottom: 1rem;
865
913
  }
866
914
 
867
- .q-prose p {
915
+ .prose p {
868
916
  margin-bottom: 1rem;
869
917
  }
870
918
 
871
- .q-prose a {
919
+ .prose a {
872
920
  color: var(--color-primary);
873
921
  text-decoration: underline;
874
922
  }
875
923
 
876
- .q-prose a:hover {
924
+ .prose a:hover {
877
925
  color: var(--color-primary-600);
878
926
  }
879
927
 
@@ -1045,21 +1093,39 @@ body.light-mode ::-webkit-scrollbar-thumb { border-color: var(--light-bg); }
1045
1093
 
1046
1094
  /* Starlight Focus Ring */
1047
1095
 
1048
- :focus-visible {
1096
+
1097
+
1098
+ :focus, :focus-visible {
1099
+
1100
+
1049
1101
 
1050
1102
  outline: none;
1051
1103
 
1104
+
1105
+
1052
1106
  box-shadow: 0 0 0 2px var(--color-starlight-deep), 0 0 0 4px var(--color-starlight-blue);
1053
1107
 
1108
+
1109
+
1054
1110
  transition: box-shadow var(--transition-fast);
1055
1111
 
1112
+
1113
+
1056
1114
  }
1057
1115
 
1058
1116
 
1059
1117
 
1060
- body.light-mode :focus-visible {
1061
1118
 
1062
- box-shadow: 0 0 0 2px var(--light-bg), 0 0 0 4px var(--color-starlight-blue);
1119
+
1120
+
1121
+
1122
+ body.light-mode :focus, body.light-mode :focus-visible {
1123
+
1124
+
1125
+
1126
+ box-shadow: 0 0 0 2px var(--light-bg), 0 0 0 4px rgba(59, 130, 246, 0.4);
1127
+
1128
+
1063
1129
 
1064
1130
  }
1065
1131
 
@@ -13,6 +13,31 @@
13
13
  gap: var(--space-8);
14
14
  }
15
15
 
16
+ /* Links */
17
+ a {
18
+ color: var(--color-starlight-blue);
19
+ text-decoration: none;
20
+ transition: all var(--transition-base);
21
+ position: relative;
22
+ }
23
+
24
+ a:hover {
25
+ color: var(--color-starlight-peach);
26
+ text-shadow: 0 0 8px rgba(255, 179, 138, 0.4);
27
+ }
28
+
29
+ a:active {
30
+ transform: scale(0.98);
31
+ }
32
+
33
+ body.light-mode a {
34
+ color: #2563eb;
35
+ }
36
+
37
+ body.light-mode a:hover {
38
+ color: #1d4ed8;
39
+ }
40
+
16
41
  /* 1. Starlight Card */
17
42
  .starlight-card {
18
43
  background: var(--glass-bg);
@@ -22,7 +47,6 @@
22
47
  backdrop-filter: var(--glass-blur);
23
48
  -webkit-backdrop-filter: var(--glass-blur);
24
49
  position: relative;
25
- z-index: 1;
26
50
  transition: border-color var(--transition-base), transform var(--transition-base), background-color var(--transition-base);
27
51
  }
28
52
 
@@ -30,10 +54,6 @@
30
54
  border-color: rgba(0, 212, 255, 0.3);
31
55
  }
32
56
 
33
- .starlight-card.has-open-menu {
34
- z-index: 1000;
35
- }
36
-
37
57
  body.light-mode .starlight-card {
38
58
  background: var(--light-card-bg);
39
59
  border-color: var(--light-card-border);
@@ -79,48 +99,37 @@ body.light-mode .starlight-card {
79
99
  border-radius: 50%;
80
100
  }
81
101
 
82
- body.light-mode .checkbox-starlight,
83
- body.light-mode .radio-starlight {
84
- background: #f1f5f9;
85
- border-color: #cbd5e1;
86
- }
87
-
88
102
  /* 3. Tooltips */
89
103
  .has-tooltip {
90
104
  position: relative;
91
105
  }
92
106
 
93
- .has-tooltip:hover {
94
- z-index: 2000;
107
+ .has-tooltip .tooltip {
108
+ position: absolute;
109
+ bottom: 125%;
110
+ left: 50%;
111
+ transform: translateX(-50%) translateY(10px);
112
+ padding: 0.5rem 0.75rem;
113
+ background-color: rgba(10, 10, 30, 0.98);
114
+ backdrop-filter: blur(12px);
115
+ border: 1px solid rgba(0, 212, 255, 0.3);
116
+ border-radius: 0.5rem;
117
+ color: #f1f5f9;
118
+ font-size: 0.75rem;
119
+ white-space: nowrap;
120
+ pointer-events: none;
121
+ opacity: 0;
122
+ transition: all 0.2s ease;
123
+ z-index: 800;
124
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4);
95
125
  }
96
126
 
97
127
  .has-tooltip:hover .tooltip {
98
128
  opacity: 1;
99
- transform: translateX(-50%) translateY(-10px);
100
- }
101
-
102
- body.light-mode .tooltip {
103
- background-color: #ffffff;
104
- border-color: var(--color-starlight-blue);
105
- color: var(--light-text);
106
- }
107
-
108
- /* 4. Skeletons */
109
- .skeleton {
110
- animation: shimmer 2s infinite;
111
- }
112
-
113
- @keyframes shimmer {
114
- 0% { background-position: -200% 0; }
115
- 100% { background-position: 200% 0; }
116
- }
117
-
118
- body.light-mode .skeleton {
119
- background-color: #cbd5e1;
120
- background-image: linear-gradient(90deg, transparent, #f1f5f9, transparent);
129
+ transform: translateX(-50%) translateY(0);
121
130
  }
122
131
 
123
- /* 5. Twinkling Background */
132
+ /* 4. Skeletons & Twinkle */
124
133
  .stars-container {
125
134
  position: fixed;
126
135
  top: 0; left: 0; width: 100%; height: 100%;
@@ -134,7 +143,7 @@ body.light-mode .skeleton {
134
143
  background: white;
135
144
  border-radius: 50%;
136
145
  opacity: 0.3;
137
- animation: twinkle var(--duration) infinite ease-in-out;
146
+ animation: twinkle var(--duration, 3s) infinite ease-in-out;
138
147
  }
139
148
 
140
149
  @keyframes twinkle {
@@ -142,29 +151,30 @@ body.light-mode .skeleton {
142
151
  50% { opacity: 1; transform: scale(1.2); }
143
152
  }
144
153
 
145
- /* 6. Form Select Overrides */
146
- select option {
147
- background-color: #1a1a2e;
148
- color: var(--text-primary);
149
- }
150
-
151
- body.light-mode select option {
152
- background-color: white;
153
- color: var(--light-text);
154
- }
155
-
156
- body.light-mode .input-starlight {
157
- background-color: #ffffff;
158
- border-color: #cbd5e1;
159
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%23475569'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M8 9l4 4 4-4' /%3E%3C/svg%3E");
160
- background-repeat: no-repeat;
154
+ /* 5. Dialog & Overlays */
155
+ .dialog-overlay {
156
+ position: fixed;
157
+ inset: 0;
158
+ background: rgba(0, 0, 0, 0.6);
159
+ backdrop-filter: blur(12px);
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: center;
163
+ z-index: 400;
161
164
  }
162
165
 
163
- body.light-mode .btn-secondary {
164
- border-color: #cbd5e1;
166
+ .dialog-content {
167
+ background-color: rgba(10, 10, 20, 0.98);
168
+ backdrop-filter: blur(20px);
169
+ border: 1px solid rgba(255, 255, 255, 0.1);
170
+ border-radius: 1.5rem;
171
+ padding: 2rem;
172
+ max-width: 90%;
173
+ width: 600px;
174
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
175
+ position: relative;
165
176
  }
166
177
 
167
- /* 7. Dialog & Menu Theme Support */
168
178
  body.light-mode .dialog-overlay {
169
179
  background: rgba(255, 255, 255, 0.4);
170
180
  }
@@ -172,10 +182,44 @@ body.light-mode .dialog-overlay {
172
182
  body.light-mode .dialog-content {
173
183
  background-color: rgba(255, 255, 255, 0.98);
174
184
  border-color: rgba(0, 0, 0, 0.1);
175
- color: var(--light-text);
185
+ color: #1e293b;
176
186
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
177
187
  }
178
188
 
189
+ /* 6. Dropdown Menu */
190
+ .dropdown-menu {
191
+ position: absolute;
192
+ top: 100%;
193
+ left: 0;
194
+ background-color: rgba(15, 15, 30, 0.98);
195
+ backdrop-filter: blur(20px);
196
+ border: 1px solid rgba(255, 255, 255, 0.1);
197
+ border-radius: 0.75rem;
198
+ padding: 0.5rem;
199
+ margin-top: 0.5rem;
200
+ min-width: 200px;
201
+ z-index: 600;
202
+ box-shadow: 0 20px 40px rgba(0,0,0,0.4);
203
+ }
204
+
205
+ .dropdown-item {
206
+ display: block;
207
+ width: 100%;
208
+ padding: 0.625rem 1rem;
209
+ border-radius: 0.5rem;
210
+ color: rgba(255, 255, 255, 0.7);
211
+ transition: all 0.2s ease;
212
+ text-align: left;
213
+ background: transparent;
214
+ border: none;
215
+ cursor: pointer;
216
+ }
217
+
218
+ .dropdown-item:hover {
219
+ background-color: var(--color-starlight-blue);
220
+ color: black;
221
+ }
222
+
179
223
  body.light-mode .dropdown-menu {
180
224
  background-color: rgba(255, 255, 255, 0.99);
181
225
  border-color: #cbd5e1;
@@ -186,7 +230,198 @@ body.light-mode .dropdown-item {
186
230
  color: #475569;
187
231
  }
188
232
 
189
- .dropdown-item:hover {
190
- background-color: var(--color-starlight-blue) !important;
191
- color: #000000 !important;
233
+ body.light-mode .dropdown-item:hover {
234
+ background-color: #f1f5f9;
235
+ color: #1e293b;
236
+ }
237
+
238
+ /* 7. Input & Glass Fixes */
239
+ .input-starlight, .textarea-starlight {
240
+ height: auto;
241
+ padding: 1rem;
242
+ background-color: rgba(255, 255, 255, 0.04);
243
+ border: 1px solid rgba(255, 255, 255, 0.15);
244
+ border-radius: 0.75rem;
245
+ color: inherit;
246
+ width: 100%;
247
+ }
248
+
249
+ textarea.input-starlight, .textarea-starlight {
250
+ min-height: 120px;
251
+ display: block;
252
+ }
253
+
254
+ body.light-mode .input-starlight,
255
+ body.light-mode .textarea-starlight {
256
+ background-color: #ffffff;
257
+ border-color: #cbd5e1;
258
+ }
259
+
260
+ body.light-mode .glass {
261
+ background-color: rgba(0, 0, 0, 0.02);
262
+ border-color: rgba(0, 0, 0, 0.05);
263
+ }
264
+
265
+ /* 8. Input Focus States */
266
+ .input-starlight:focus, .textarea-starlight:focus {
267
+ outline: none;
268
+ border-color: var(--color-starlight-blue);
269
+ box-shadow: 0 0 0 4px rgba(0, 212, 255, 0.1);
270
+ }
271
+
272
+ body.light-mode .input-starlight:focus,
273
+ body.light-mode .textarea-starlight:focus {
274
+ border-color: #93c5fd;
275
+ box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.08);
276
+ }
277
+
278
+ /* 9. Code Interface Window */
279
+ .code-window {
280
+ background: rgba(0, 0, 0, 0.4);
281
+ backdrop-filter: blur(20px);
282
+ -webkit-backdrop-filter: blur(20px);
283
+ border: 1px solid rgba(255, 255, 255, 0.1);
284
+ border-radius: var(--radius-xl);
285
+ overflow: hidden;
286
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
287
+ }
288
+
289
+ .code-window-header {
290
+ background: rgba(255, 255, 255, 0.05);
291
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
292
+ padding: 1rem 1.5rem;
293
+ display: flex;
294
+ align-items: center;
295
+ justify-content: space-between;
296
+ }
297
+
298
+ .code-window-controls {
299
+ display: flex;
300
+ gap: 0.5rem;
301
+ }
302
+
303
+ .code-window-dot {
304
+ width: 0.75rem;
305
+ height: 0.75rem;
306
+ border-radius: 50%;
307
+ opacity: 0.6;
308
+ }
309
+
310
+ .code-window-title {
311
+ font-size: 0.65rem;
312
+ font-weight: 800;
313
+ text-transform: uppercase;
314
+ letter-spacing: 0.15em;
315
+ color: rgba(255, 255, 255, 0.4);
316
+ }
317
+
318
+ body.light-mode .code-window {
319
+ background: #f8fafc;
320
+ border-color: #e2e8f0;
321
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
322
+ }
323
+
324
+ body.light-mode .code-window-header {
325
+ background: #f1f5f9;
326
+ border-color: #e2e8f0;
327
+ }
328
+
329
+ body.light-mode .code-window-title {
330
+ color: #94a3b8;
331
+ }
332
+
333
+ /* 10. Starlight Accordion */
334
+ .accordion-starlight.accordion-item {
335
+ background: rgba(255, 255, 255, 0.02);
336
+ backdrop-filter: blur(12px);
337
+ -webkit-backdrop-filter: blur(12px);
338
+ border: 1px solid rgba(255, 255, 255, 0.08);
339
+ border-radius: var(--radius-xl);
340
+ margin-bottom: var(--space-4);
341
+ transition: all var(--transition-base);
342
+ position: relative;
343
+ }
344
+
345
+ .accordion-starlight.accordion-item:hover {
346
+ border-color: rgba(0, 212, 255, 0.3);
347
+ background: rgba(255, 255, 255, 0.04);
348
+ box-shadow: 0 0 20px rgba(0, 212, 255, 0.05);
349
+ }
350
+
351
+ .accordion-starlight.accordion-item.active {
352
+ border-color: var(--color-starlight-blue);
353
+ background: rgba(0, 212, 255, 0.03);
354
+ box-shadow: 0 0 30px rgba(0, 212, 255, 0.1), inset 0 0 20px rgba(0, 212, 255, 0.05);
355
+ }
356
+
357
+ .accordion-starlight .accordion-header {
358
+ background: transparent !important;
359
+ padding: var(--space-6) var(--space-8);
360
+ color: white;
361
+ font-weight: 700;
362
+ letter-spacing: 0.02em;
363
+ font-size: 1.125rem;
364
+ }
365
+
366
+ .accordion-starlight.active .accordion-header {
367
+ background: linear-gradient(to right, rgba(255, 179, 138, 0.15), rgba(0, 212, 255, 0.15)) !important;
368
+ border-bottom: 1px solid rgba(0, 212, 255, 0.2);
369
+ }
370
+
371
+ .accordion-starlight .accordion-content {
372
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.1)) !important;
373
+ color: rgba(255, 255, 255, 0.6) !important;
374
+ font-size: 1rem;
375
+ line-height: 1.8;
376
+ padding: 0;
377
+ }
378
+
379
+ .accordion-starlight.active .accordion-content {
380
+ padding: var(--space-6) var(--space-8);
381
+ }
382
+
383
+ .accordion-starlight .accordion-icon {
384
+ color: var(--color-starlight-blue);
385
+ filter: drop-shadow(0 0 5px rgba(0, 212, 255, 0.5));
386
+ }
387
+
388
+ body.light-mode .accordion-starlight.accordion-item {
389
+ background: white;
390
+ border-color: #e2e8f0;
391
+ }
392
+
393
+ body.light-mode .accordion-starlight.accordion-item.active {
394
+ border-color: #3b82f6;
395
+ background: #f8fafc;
396
+ }
397
+
398
+ body.light-mode .accordion-starlight .accordion-header {
399
+ color: #1e293b;
400
+ }
401
+
402
+ body.light-mode .accordion-starlight .accordion-content {
403
+ background: #f1f5f9 !important;
404
+ color: #475569 !important;
405
+ }
406
+
407
+ @media (forced-colors: active) {
408
+ button:focus, input:focus, select:focus, textarea:focus {
409
+ outline: 2px solid SelectedItem !important;
410
+ outline-offset: 2px;
411
+ }
412
+
413
+ .starlight-card:hover, .accordion-starlight.accordion-item:hover {
414
+ border-color: SelectedItem !important;
415
+ }
416
+
417
+ .text-gradient-starlight, .bg-starlight {
418
+ background: none !important;
419
+ -webkit-text-fill-color: CanvasText !important;
420
+ color: CanvasText !important;
421
+ text-decoration: underline;
422
+ }
423
+
424
+ .btn-starlight {
425
+ border: 2px solid ButtonText !important;
426
+ }
192
427
  }