@jjlmoya/utils-developer 1.17.0 → 1.18.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.
Files changed (36) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +2 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/calculadoraTiempoDatos/data-time-calculator-web-speed-impact.css +498 -499
  8. package/src/tool/visualCssGridFlexboxGenerator/bibliography.astro +14 -0
  9. package/src/tool/visualCssGridFlexboxGenerator/bibliography.ts +20 -0
  10. package/src/tool/visualCssGridFlexboxGenerator/canvas.ts +103 -0
  11. package/src/tool/visualCssGridFlexboxGenerator/component.astro +218 -0
  12. package/src/tool/visualCssGridFlexboxGenerator/entry.ts +30 -0
  13. package/src/tool/visualCssGridFlexboxGenerator/i18n/de.ts +110 -0
  14. package/src/tool/visualCssGridFlexboxGenerator/i18n/en.ts +256 -0
  15. package/src/tool/visualCssGridFlexboxGenerator/i18n/es.ts +110 -0
  16. package/src/tool/visualCssGridFlexboxGenerator/i18n/fr.ts +110 -0
  17. package/src/tool/visualCssGridFlexboxGenerator/i18n/id.ts +110 -0
  18. package/src/tool/visualCssGridFlexboxGenerator/i18n/it.ts +110 -0
  19. package/src/tool/visualCssGridFlexboxGenerator/i18n/ja.ts +110 -0
  20. package/src/tool/visualCssGridFlexboxGenerator/i18n/ko.ts +110 -0
  21. package/src/tool/visualCssGridFlexboxGenerator/i18n/nl.ts +110 -0
  22. package/src/tool/visualCssGridFlexboxGenerator/i18n/pl.ts +110 -0
  23. package/src/tool/visualCssGridFlexboxGenerator/i18n/pt.ts +110 -0
  24. package/src/tool/visualCssGridFlexboxGenerator/i18n/ru.ts +110 -0
  25. package/src/tool/visualCssGridFlexboxGenerator/i18n/sv.ts +110 -0
  26. package/src/tool/visualCssGridFlexboxGenerator/i18n/tr.ts +110 -0
  27. package/src/tool/visualCssGridFlexboxGenerator/i18n/zh.ts +110 -0
  28. package/src/tool/visualCssGridFlexboxGenerator/index.ts +11 -0
  29. package/src/tool/visualCssGridFlexboxGenerator/interactions.ts +45 -0
  30. package/src/tool/visualCssGridFlexboxGenerator/logic.ts +49 -0
  31. package/src/tool/visualCssGridFlexboxGenerator/presets.ts +63 -0
  32. package/src/tool/visualCssGridFlexboxGenerator/seo.astro +15 -0
  33. package/src/tool/visualCssGridFlexboxGenerator/ui.ts +58 -0
  34. package/src/tool/visualCssGridFlexboxGenerator/visual-css-grid-flexbox-generator.css +816 -0
  35. package/src/tool/visualCssGridFlexboxGenerator/workspace.ts +192 -0
  36. package/src/tools.ts +2 -1
@@ -1,522 +1,521 @@
1
1
  .ctd-wrapper {
2
- --ctd-primary: #6366f1;
3
- --ctd-secondary: #8b5cf6;
4
- --ctd-accent: #ec4899;
5
-
6
- display: flex;
7
- align-items: center;
8
- justify-content: center;
9
- padding: 2rem 1rem;
10
- min-height: 100vh;
2
+ --ctd-primary: #6366f1;
3
+ --ctd-secondary: #8b5cf6;
4
+ --ctd-accent: #ec4899;
5
+
6
+ display: flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ padding: 2rem 1rem;
10
+ }
11
+
12
+ .ctd-card {
13
+ background: white;
14
+ border-radius: 2.5rem;
15
+ padding: 3rem;
16
+ max-width: 700px;
17
+ width: 100%;
18
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
19
+ }
20
+
21
+ .theme-dark .ctd-card {
22
+ background: rgb(30, 41, 59);
23
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
24
+ }
25
+
26
+ .ctd-header {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 1.2rem;
30
+ margin-bottom: 3rem;
31
+ }
32
+
33
+ .ctd-icon {
34
+ width: 60px;
35
+ height: 60px;
36
+ background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #ec4899 100%);
37
+ border-radius: 1.2rem;
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ color: white;
42
+ box-shadow: 0 10px 25px rgba(99, 102, 241, 0.3);
43
+ flex-shrink: 0;
44
+ }
45
+
46
+ .ctd-icon svg {
47
+ width: 32px;
48
+ height: 32px;
49
+ }
50
+
51
+ .ctd-header h2 {
52
+ font-size: 2rem;
53
+ font-weight: 900;
54
+ margin: 0;
55
+ color: rgb(15, 23, 42);
56
+ letter-spacing: -0.02em;
57
+ }
58
+
59
+ .theme-dark .ctd-header h2 {
60
+ color: rgb(241, 245, 249);
61
+ }
62
+
63
+ .ctd-input-section {
64
+ margin-bottom: 2.5rem;
65
+ }
66
+
67
+ .ctd-input-section>label {
68
+ display: block;
69
+ font-size: 0.85rem;
70
+ font-weight: 700;
71
+ color: rgb(100, 116, 139);
72
+ margin-bottom: 0.8rem;
73
+ text-transform: uppercase;
74
+ letter-spacing: 0.05em;
75
+ }
76
+
77
+ .theme-dark .ctd-input-section>label {
78
+ color: rgb(203, 213, 225);
79
+ }
80
+
81
+ .ctd-input-group {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 1rem;
85
+ margin-bottom: 2rem;
86
+ }
87
+
88
+ .ctd-input {
89
+ flex: 1;
90
+ background: rgb(248, 250, 252);
91
+ border: 2px solid rgb(226, 232, 240);
92
+ border-radius: 1.3rem;
93
+ padding: 1.2rem 1.5rem;
94
+ font-size: 1.5rem;
95
+ font-weight: 800;
96
+ color: rgb(15, 23, 42);
97
+ outline: none;
98
+ transition: all 0.3s;
99
+ box-sizing: border-box;
100
+ }
101
+
102
+ .theme-dark .ctd-input {
103
+ background: rgb(15, 23, 42);
104
+ border-color: rgb(51, 65, 85);
105
+ color: rgb(241, 245, 249);
106
+ }
107
+
108
+ .ctd-input:focus {
109
+ border-color: var(--ctd-primary);
110
+ background: white;
111
+ box-shadow: 0 0 0 6px rgba(99, 102, 241, 0.1);
112
+ }
113
+
114
+ .theme-dark .ctd-input:focus {
115
+ background: rgb(30, 41, 59);
116
+ }
117
+
118
+ .ctd-input-unit {
119
+ font-size: 0.95rem;
120
+ font-weight: 700;
121
+ color: rgb(100, 116, 139);
122
+ white-space: nowrap;
123
+ }
124
+
125
+ .theme-dark .ctd-input-unit {
126
+ color: rgb(203, 213, 225);
127
+ }
128
+
129
+ .ctd-presets-label {
130
+ font-size: 0.75rem;
131
+ font-weight: 800;
132
+ color: var(--ctd-primary);
133
+ text-transform: uppercase;
134
+ letter-spacing: 0.1em;
135
+ margin-bottom: 1rem;
136
+ }
137
+
138
+ .ctd-presets {
139
+ display: grid;
140
+ grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
141
+ gap: 0.8rem;
142
+ }
143
+
144
+ .ctd-preset {
145
+ background: rgb(241, 245, 249);
146
+ border: 2px solid rgb(226, 232, 240);
147
+ border-radius: 1rem;
148
+ padding: 1rem;
149
+ font-size: 0.8rem;
150
+ font-weight: 700;
151
+ color: rgb(15, 23, 42);
152
+ cursor: pointer;
153
+ transition: all 0.2s;
154
+ display: flex;
155
+ flex-direction: column;
156
+ align-items: center;
157
+ gap: 0.5rem;
158
+ }
159
+
160
+ .theme-dark .ctd-preset {
161
+ background: rgb(15, 23, 42);
162
+ border-color: rgb(51, 65, 85);
163
+ color: rgb(241, 245, 249);
164
+ }
165
+
166
+ .ctd-preset:hover {
167
+ border-color: var(--ctd-primary);
168
+ background: rgb(219, 234, 254);
169
+ transform: translateY(-3px);
170
+ box-shadow: 0 8px 16px rgba(99, 102, 241, 0.2);
171
+ }
172
+
173
+ .theme-dark .ctd-preset:hover {
174
+ background: rgba(99, 102, 241, 0.1);
175
+ }
176
+
177
+ .ctd-preset.active {
178
+ background: linear-gradient(135deg, var(--ctd-primary), var(--ctd-secondary));
179
+ color: white;
180
+ border-color: transparent;
181
+ box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3);
182
+ }
183
+
184
+ .ctd-speed-section {
185
+ margin-bottom: 2.5rem;
186
+ }
187
+
188
+ .ctd-speed-section>label {
189
+ display: block;
190
+ font-size: 0.85rem;
191
+ font-weight: 700;
192
+ color: rgb(100, 116, 139);
193
+ margin-bottom: 1rem;
194
+ text-transform: uppercase;
195
+ letter-spacing: 0.05em;
196
+ }
197
+
198
+ .theme-dark .ctd-speed-section>label {
199
+ color: rgb(203, 213, 225);
200
+ }
201
+
202
+ .ctd-speed-buttons {
203
+ display: grid;
204
+ grid-template-columns: repeat(3, 1fr);
205
+ gap: 1rem;
206
+ }
207
+
208
+ .ctd-speed-btn {
209
+ background: rgb(241, 245, 249);
210
+ border: 2px solid rgb(226, 232, 240);
211
+ border-radius: 1.1rem;
212
+ padding: 1rem;
213
+ display: flex;
214
+ flex-direction: column;
215
+ align-items: center;
216
+ gap: 0.4rem;
217
+ cursor: pointer;
218
+ transition: all 0.3s;
219
+ }
220
+
221
+ .theme-dark .ctd-speed-btn {
222
+ background: rgb(15, 23, 42);
223
+ border-color: rgb(51, 65, 85);
224
+ }
225
+
226
+ .ctd-speed-label {
227
+ font-size: 0.9rem;
228
+ font-weight: 800;
229
+ color: rgb(15, 23, 42);
230
+ }
231
+
232
+ .theme-dark .ctd-speed-label {
233
+ color: rgb(241, 245, 249);
234
+ }
235
+
236
+ .ctd-speed-value {
237
+ font-size: 0.75rem;
238
+ font-weight: 700;
239
+ color: rgb(100, 116, 139);
240
+ }
241
+
242
+ .theme-dark .ctd-speed-value {
243
+ color: rgb(203, 213, 225);
244
+ }
245
+
246
+ .ctd-speed-btn:hover {
247
+ border-color: var(--ctd-primary);
248
+ background: rgb(219, 234, 254);
249
+ transform: translateY(-3px);
250
+ box-shadow: 0 8px 16px rgba(99, 102, 241, 0.2);
251
+ }
252
+
253
+ .theme-dark .ctd-speed-btn:hover {
254
+ background: rgba(99, 102, 241, 0.1);
255
+ }
256
+
257
+ .ctd-speed-btn.active {
258
+ background: linear-gradient(135deg, var(--ctd-primary), var(--ctd-secondary));
259
+ color: white;
260
+ border-color: transparent;
261
+ box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3);
262
+ }
263
+
264
+ .ctd-speed-btn.active .ctd-speed-label {
265
+ color: white;
266
+ }
267
+
268
+ .ctd-speed-btn.active .ctd-speed-value {
269
+ color: rgba(255, 255, 255, 0.9);
270
+ }
271
+
272
+ .ctd-multiplier-section {
273
+ margin-bottom: 2.5rem;
274
+ }
275
+
276
+ .ctd-multiplier-section>label {
277
+ display: block;
278
+ font-size: 0.85rem;
279
+ font-weight: 700;
280
+ color: rgb(100, 116, 139);
281
+ margin-bottom: 1rem;
282
+ text-transform: uppercase;
283
+ letter-spacing: 0.05em;
284
+ }
285
+
286
+ .theme-dark .ctd-multiplier-section>label {
287
+ color: rgb(203, 213, 225);
288
+ }
289
+
290
+ .ctd-multiplier-input {
291
+ display: flex;
292
+ gap: 0.6rem;
293
+ flex-wrap: wrap;
294
+ align-items: center;
295
+ }
296
+
297
+ .ctd-times-btn {
298
+ background: rgb(241, 245, 249);
299
+ border: 2px solid rgb(226, 232, 240);
300
+ border-radius: 0.9rem;
301
+ padding: 0.8rem 1.2rem;
302
+ font-size: 0.8rem;
303
+ font-weight: 700;
304
+ color: rgb(15, 23, 42);
305
+ cursor: pointer;
306
+ transition: all 0.2s;
307
+ }
308
+
309
+ .theme-dark .ctd-times-btn {
310
+ background: rgb(15, 23, 42);
311
+ border-color: rgb(51, 65, 85);
312
+ color: rgb(241, 245, 249);
313
+ }
314
+
315
+ .ctd-times-btn:hover {
316
+ border-color: var(--ctd-primary);
317
+ background: rgb(219, 234, 254);
318
+ }
319
+
320
+ .theme-dark .ctd-times-btn:hover {
321
+ background: rgba(99, 102, 241, 0.1);
322
+ }
323
+
324
+ .ctd-times-btn.active {
325
+ background: var(--ctd-primary);
326
+ color: white;
327
+ border-color: var(--ctd-primary);
328
+ }
329
+
330
+ .ctd-times-input {
331
+ padding: 0.8rem 1rem;
332
+ border: 2px solid rgb(226, 232, 240);
333
+ border-radius: 0.9rem;
334
+ font-size: 0.8rem;
335
+ font-weight: 700;
336
+ background: rgb(248, 250, 252);
337
+ color: rgb(15, 23, 42);
338
+ outline: none;
339
+ width: 80px;
340
+ transition: all 0.2s;
341
+ box-sizing: border-box;
342
+ }
343
+
344
+ .theme-dark .ctd-times-input {
345
+ background: rgb(15, 23, 42);
346
+ border-color: rgb(51, 65, 85);
347
+ color: rgb(241, 245, 249);
348
+ }
349
+
350
+ .ctd-times-input:focus {
351
+ border-color: var(--ctd-primary);
352
+ box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
353
+ }
354
+
355
+ .ctd-results {
356
+ background: linear-gradient(135deg, rgb(240, 249, 255) 0%, rgb(240, 253, 244) 100%);
357
+ border-radius: 1.5rem;
358
+ padding: 2rem;
359
+ margin-bottom: 2rem;
360
+ display: grid;
361
+ grid-template-columns: 1fr auto 1fr;
362
+ gap: 2rem;
363
+ align-items: center;
364
+ }
365
+
366
+ .theme-dark .ctd-results {
367
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(16, 185, 129, 0.05));
368
+ }
369
+
370
+ .ctd-result-single,
371
+ .ctd-result-total {
372
+ display: flex;
373
+ flex-direction: column;
374
+ align-items: center;
375
+ gap: 0.5rem;
376
+ }
377
+
378
+ .ctd-result-label {
379
+ font-size: 0.8rem;
380
+ font-weight: 700;
381
+ color: rgb(100, 116, 139);
382
+ text-transform: uppercase;
383
+ letter-spacing: 0.05em;
384
+ }
385
+
386
+ .theme-dark .ctd-result-label {
387
+ color: rgb(203, 213, 225);
388
+ }
389
+
390
+ .ctd-result-time,
391
+ .ctd-result-time-total {
392
+ font-size: 2rem;
393
+ font-weight: 900;
394
+ color: var(--ctd-primary);
395
+ line-height: 1;
396
+ }
397
+
398
+ .ctd-result-life,
399
+ .ctd-result-life-total {
400
+ font-size: 0.75rem;
401
+ font-weight: 700;
402
+ color: rgb(100, 116, 139);
403
+ }
404
+
405
+ .theme-dark .ctd-result-life,
406
+ .theme-dark .ctd-result-life-total {
407
+ color: rgb(203, 213, 225);
408
+ }
409
+
410
+ .ctd-divider {
411
+ width: 2px;
412
+ height: 100%;
413
+ background: linear-gradient(180deg, transparent, rgb(203, 213, 225), transparent);
414
+ }
415
+
416
+ .theme-dark .ctd-divider {
417
+ background: linear-gradient(180deg, transparent, rgba(203, 213, 225, 0.2), transparent);
418
+ }
419
+
420
+ .ctd-impact {
421
+ display: grid;
422
+ grid-template-columns: repeat(2, 1fr);
423
+ gap: 1.5rem;
424
+ margin-bottom: 2rem;
425
+ }
426
+
427
+ .ctd-impact-card {
428
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(255, 140, 0, 0.1));
429
+ border: 2px solid rgba(99, 102, 241, 0.2);
430
+ border-radius: 1.3rem;
431
+ padding: 2rem;
432
+ text-align: center;
433
+ transition: all 0.3s;
434
+ }
435
+
436
+ .theme-dark .ctd-impact-card {
437
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(255, 140, 0, 0.05));
438
+ border-color: rgba(99, 102, 241, 0.1);
439
+ }
440
+
441
+ .ctd-impact-card:hover {
442
+ transform: translateY(-4px);
443
+ box-shadow: 0 12px 24px rgba(99, 102, 241, 0.2);
444
+ }
445
+
446
+ .ctd-impact-number {
447
+ font-size: 2.5rem;
448
+ font-weight: 900;
449
+ background: linear-gradient(135deg, var(--ctd-primary), var(--ctd-accent));
450
+ background-clip: text;
451
+ -webkit-background-clip: text;
452
+ -webkit-text-fill-color: transparent;
453
+ line-height: 1;
454
+ margin-bottom: 0.5rem;
455
+ }
456
+
457
+ .ctd-impact-text {
458
+ font-size: 0.85rem;
459
+ font-weight: 700;
460
+ color: rgb(100, 116, 139);
461
+ }
462
+
463
+ .theme-dark .ctd-impact-text {
464
+ color: rgb(203, 213, 225);
465
+ }
466
+
467
+ .ctd-message {
468
+ background: linear-gradient(135deg, rgb(254, 243, 199) 0%, rgb(254, 202, 202) 100%);
469
+ border: 2px solid rgb(251, 191, 36);
470
+ border-radius: 1.3rem;
471
+ padding: 1.5rem;
472
+ text-align: center;
473
+ font-size: 1rem;
474
+ font-weight: 700;
475
+ color: rgb(146, 64, 14);
476
+ line-height: 1.6;
477
+ }
478
+
479
+ .theme-dark .ctd-message {
480
+ background: linear-gradient(135deg, rgba(254, 243, 199, 0.1), rgba(254, 202, 202, 0.1));
481
+ border-color: rgba(251, 191, 36, 0.3);
482
+ color: rgb(251, 191, 36);
483
+ }
484
+
485
+ @media (max-width: 768px) {
486
+ .ctd-wrapper {
487
+ padding: 1rem;
488
+ min-height: auto;
11
489
  }
12
490
 
13
491
  .ctd-card {
14
- background: white;
15
- border-radius: 2.5rem;
16
- padding: 3rem;
17
- max-width: 700px;
18
- width: 100%;
19
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
20
- }
21
-
22
- .theme-dark .ctd-card {
23
- background: rgb(30, 41, 59);
24
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
492
+ padding: 1.5rem;
25
493
  }
26
494
 
27
495
  .ctd-header {
28
- display: flex;
29
- align-items: center;
30
- gap: 1.2rem;
31
- margin-bottom: 3rem;
32
- }
33
-
34
- .ctd-icon {
35
- width: 60px;
36
- height: 60px;
37
- background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #ec4899 100%);
38
- border-radius: 1.2rem;
39
- display: flex;
40
- align-items: center;
41
- justify-content: center;
42
- color: white;
43
- box-shadow: 0 10px 25px rgba(99, 102, 241, 0.3);
44
- flex-shrink: 0;
45
- }
46
-
47
- .ctd-icon svg {
48
- width: 32px;
49
- height: 32px;
496
+ margin-bottom: 1.2rem;
497
+ gap: 0.8rem;
50
498
  }
51
499
 
52
500
  .ctd-header h2 {
53
- font-size: 2rem;
54
- font-weight: 900;
55
- margin: 0;
56
- color: rgb(15, 23, 42);
57
- letter-spacing: -0.02em;
58
- }
59
-
60
- .theme-dark .ctd-header h2 {
61
- color: rgb(241, 245, 249);
62
- }
63
-
64
- .ctd-input-section {
65
- margin-bottom: 2.5rem;
66
- }
67
-
68
- .ctd-input-section > label {
69
- display: block;
70
- font-size: 0.85rem;
71
- font-weight: 700;
72
- color: rgb(100, 116, 139);
73
- margin-bottom: 0.8rem;
74
- text-transform: uppercase;
75
- letter-spacing: 0.05em;
76
- }
77
-
78
- .theme-dark .ctd-input-section > label {
79
- color: rgb(203, 213, 225);
501
+ font-size: 1.3rem;
80
502
  }
81
503
 
82
- .ctd-input-group {
83
- display: flex;
84
- align-items: center;
85
- gap: 1rem;
86
- margin-bottom: 2rem;
87
- }
88
-
89
- .ctd-input {
90
- flex: 1;
91
- background: rgb(248, 250, 252);
92
- border: 2px solid rgb(226, 232, 240);
93
- border-radius: 1.3rem;
94
- padding: 1.2rem 1.5rem;
95
- font-size: 1.5rem;
96
- font-weight: 800;
97
- color: rgb(15, 23, 42);
98
- outline: none;
99
- transition: all 0.3s;
100
- box-sizing: border-box;
101
- }
102
-
103
- .theme-dark .ctd-input {
104
- background: rgb(15, 23, 42);
105
- border-color: rgb(51, 65, 85);
106
- color: rgb(241, 245, 249);
107
- }
108
-
109
- .ctd-input:focus {
110
- border-color: var(--ctd-primary);
111
- background: white;
112
- box-shadow: 0 0 0 6px rgba(99, 102, 241, 0.1);
113
- }
114
-
115
- .theme-dark .ctd-input:focus {
116
- background: rgb(30, 41, 59);
117
- }
118
-
119
- .ctd-input-unit {
120
- font-size: 0.95rem;
121
- font-weight: 700;
122
- color: rgb(100, 116, 139);
123
- white-space: nowrap;
124
- }
125
-
126
- .theme-dark .ctd-input-unit {
127
- color: rgb(203, 213, 225);
128
- }
129
-
130
- .ctd-presets-label {
131
- font-size: 0.75rem;
132
- font-weight: 800;
133
- color: var(--ctd-primary);
134
- text-transform: uppercase;
135
- letter-spacing: 0.1em;
136
- margin-bottom: 1rem;
137
- }
138
-
139
- .ctd-presets {
140
- display: grid;
141
- grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
504
+ .ctd-results {
505
+ grid-template-columns: 1fr;
142
506
  gap: 0.8rem;
143
- }
144
-
145
- .ctd-preset {
146
- background: rgb(241, 245, 249);
147
- border: 2px solid rgb(226, 232, 240);
148
- border-radius: 1rem;
149
- padding: 1rem;
150
- font-size: 0.8rem;
151
- font-weight: 700;
152
- color: rgb(15, 23, 42);
153
- cursor: pointer;
154
- transition: all 0.2s;
155
- display: flex;
156
- flex-direction: column;
157
- align-items: center;
158
- gap: 0.5rem;
159
- }
160
-
161
- .theme-dark .ctd-preset {
162
- background: rgb(15, 23, 42);
163
- border-color: rgb(51, 65, 85);
164
- color: rgb(241, 245, 249);
165
- }
166
-
167
- .ctd-preset:hover {
168
- border-color: var(--ctd-primary);
169
- background: rgb(219, 234, 254);
170
- transform: translateY(-3px);
171
- box-shadow: 0 8px 16px rgba(99, 102, 241, 0.2);
172
- }
173
-
174
- .theme-dark .ctd-preset:hover {
175
- background: rgba(99, 102, 241, 0.1);
176
- }
177
-
178
- .ctd-preset.active {
179
- background: linear-gradient(135deg, var(--ctd-primary), var(--ctd-secondary));
180
- color: white;
181
- border-color: transparent;
182
- box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3);
183
- }
184
-
185
- .ctd-speed-section {
186
- margin-bottom: 2.5rem;
187
- }
188
-
189
- .ctd-speed-section > label {
190
- display: block;
191
- font-size: 0.85rem;
192
- font-weight: 700;
193
- color: rgb(100, 116, 139);
194
- margin-bottom: 1rem;
195
- text-transform: uppercase;
196
- letter-spacing: 0.05em;
197
- }
198
-
199
- .theme-dark .ctd-speed-section > label {
200
- color: rgb(203, 213, 225);
201
- }
202
-
203
- .ctd-speed-buttons {
204
- display: grid;
205
- grid-template-columns: repeat(3, 1fr);
206
- gap: 1rem;
207
- }
208
-
209
- .ctd-speed-btn {
210
- background: rgb(241, 245, 249);
211
- border: 2px solid rgb(226, 232, 240);
212
- border-radius: 1.1rem;
213
507
  padding: 1rem;
214
- display: flex;
215
- flex-direction: column;
216
- align-items: center;
217
- gap: 0.4rem;
218
- cursor: pointer;
219
- transition: all 0.3s;
220
- }
221
-
222
- .theme-dark .ctd-speed-btn {
223
- background: rgb(15, 23, 42);
224
- border-color: rgb(51, 65, 85);
225
- }
226
-
227
- .ctd-speed-label {
228
- font-size: 0.9rem;
229
- font-weight: 800;
230
- color: rgb(15, 23, 42);
231
- }
232
-
233
- .theme-dark .ctd-speed-label {
234
- color: rgb(241, 245, 249);
235
- }
236
-
237
- .ctd-speed-value {
238
- font-size: 0.75rem;
239
- font-weight: 700;
240
- color: rgb(100, 116, 139);
241
- }
242
-
243
- .theme-dark .ctd-speed-value {
244
- color: rgb(203, 213, 225);
245
- }
246
-
247
- .ctd-speed-btn:hover {
248
- border-color: var(--ctd-primary);
249
- background: rgb(219, 234, 254);
250
- transform: translateY(-3px);
251
- box-shadow: 0 8px 16px rgba(99, 102, 241, 0.2);
252
- }
253
-
254
- .theme-dark .ctd-speed-btn:hover {
255
- background: rgba(99, 102, 241, 0.1);
256
- }
257
-
258
- .ctd-speed-btn.active {
259
- background: linear-gradient(135deg, var(--ctd-primary), var(--ctd-secondary));
260
- color: white;
261
- border-color: transparent;
262
- box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3);
263
- }
264
-
265
- .ctd-speed-btn.active .ctd-speed-label {
266
- color: white;
267
- }
268
-
269
- .ctd-speed-btn.active .ctd-speed-value {
270
- color: rgba(255, 255, 255, 0.9);
271
- }
272
-
273
- .ctd-multiplier-section {
274
- margin-bottom: 2.5rem;
275
- }
276
-
277
- .ctd-multiplier-section > label {
278
- display: block;
279
- font-size: 0.85rem;
280
- font-weight: 700;
281
- color: rgb(100, 116, 139);
282
- margin-bottom: 1rem;
283
- text-transform: uppercase;
284
- letter-spacing: 0.05em;
285
- }
286
-
287
- .theme-dark .ctd-multiplier-section > label {
288
- color: rgb(203, 213, 225);
289
- }
290
-
291
- .ctd-multiplier-input {
292
- display: flex;
293
- gap: 0.6rem;
294
- flex-wrap: wrap;
295
- align-items: center;
296
- }
297
-
298
- .ctd-times-btn {
299
- background: rgb(241, 245, 249);
300
- border: 2px solid rgb(226, 232, 240);
301
- border-radius: 0.9rem;
302
- padding: 0.8rem 1.2rem;
303
- font-size: 0.8rem;
304
- font-weight: 700;
305
- color: rgb(15, 23, 42);
306
- cursor: pointer;
307
- transition: all 0.2s;
308
- }
309
-
310
- .theme-dark .ctd-times-btn {
311
- background: rgb(15, 23, 42);
312
- border-color: rgb(51, 65, 85);
313
- color: rgb(241, 245, 249);
314
- }
315
-
316
- .ctd-times-btn:hover {
317
- border-color: var(--ctd-primary);
318
- background: rgb(219, 234, 254);
319
- }
320
-
321
- .theme-dark .ctd-times-btn:hover {
322
- background: rgba(99, 102, 241, 0.1);
323
- }
324
-
325
- .ctd-times-btn.active {
326
- background: var(--ctd-primary);
327
- color: white;
328
- border-color: var(--ctd-primary);
329
- }
330
-
331
- .ctd-times-input {
332
- padding: 0.8rem 1rem;
333
- border: 2px solid rgb(226, 232, 240);
334
- border-radius: 0.9rem;
335
- font-size: 0.8rem;
336
- font-weight: 700;
337
- background: rgb(248, 250, 252);
338
- color: rgb(15, 23, 42);
339
- outline: none;
340
- width: 80px;
341
- transition: all 0.2s;
342
- box-sizing: border-box;
343
- }
344
-
345
- .theme-dark .ctd-times-input {
346
- background: rgb(15, 23, 42);
347
- border-color: rgb(51, 65, 85);
348
- color: rgb(241, 245, 249);
349
- }
350
-
351
- .ctd-times-input:focus {
352
- border-color: var(--ctd-primary);
353
- box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
354
- }
355
-
356
- .ctd-results {
357
- background: linear-gradient(135deg, rgb(240, 249, 255) 0%, rgb(240, 253, 244) 100%);
358
- border-radius: 1.5rem;
359
- padding: 2rem;
360
- margin-bottom: 2rem;
361
- display: grid;
362
- grid-template-columns: 1fr auto 1fr;
363
- gap: 2rem;
364
- align-items: center;
365
- }
366
-
367
- .theme-dark .ctd-results {
368
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(16, 185, 129, 0.05));
369
- }
370
-
371
- .ctd-result-single,
372
- .ctd-result-total {
373
- display: flex;
374
- flex-direction: column;
375
- align-items: center;
376
- gap: 0.5rem;
377
- }
378
-
379
- .ctd-result-label {
380
- font-size: 0.8rem;
381
- font-weight: 700;
382
- color: rgb(100, 116, 139);
383
- text-transform: uppercase;
384
- letter-spacing: 0.05em;
385
- }
386
-
387
- .theme-dark .ctd-result-label {
388
- color: rgb(203, 213, 225);
389
- }
390
-
391
- .ctd-result-time,
392
- .ctd-result-time-total {
393
- font-size: 2rem;
394
- font-weight: 900;
395
- color: var(--ctd-primary);
396
- line-height: 1;
397
- }
398
-
399
- .ctd-result-life,
400
- .ctd-result-life-total {
401
- font-size: 0.75rem;
402
- font-weight: 700;
403
- color: rgb(100, 116, 139);
404
- }
405
-
406
- .theme-dark .ctd-result-life,
407
- .theme-dark .ctd-result-life-total {
408
- color: rgb(203, 213, 225);
409
508
  }
410
509
 
411
510
  .ctd-divider {
412
- width: 2px;
413
- height: 100%;
414
- background: linear-gradient(180deg, transparent, rgb(203, 213, 225), transparent);
511
+ display: none;
415
512
  }
416
513
 
417
- .theme-dark .ctd-divider {
418
- background: linear-gradient(180deg, transparent, rgba(203, 213, 225, 0.2), transparent);
514
+ .ctd-speed-buttons {
515
+ grid-template-columns: 1fr;
419
516
  }
420
517
 
421
518
  .ctd-impact {
422
- display: grid;
423
- grid-template-columns: repeat(2, 1fr);
424
- gap: 1.5rem;
425
- margin-bottom: 2rem;
426
- }
427
-
428
- .ctd-impact-card {
429
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(255, 140, 0, 0.1));
430
- border: 2px solid rgba(99, 102, 241, 0.2);
431
- border-radius: 1.3rem;
432
- padding: 2rem;
433
- text-align: center;
434
- transition: all 0.3s;
435
- }
436
-
437
- .theme-dark .ctd-impact-card {
438
- background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(255, 140, 0, 0.05));
439
- border-color: rgba(99, 102, 241, 0.1);
440
- }
441
-
442
- .ctd-impact-card:hover {
443
- transform: translateY(-4px);
444
- box-shadow: 0 12px 24px rgba(99, 102, 241, 0.2);
445
- }
446
-
447
- .ctd-impact-number {
448
- font-size: 2.5rem;
449
- font-weight: 900;
450
- background: linear-gradient(135deg, var(--ctd-primary), var(--ctd-accent));
451
- background-clip: text;
452
- -webkit-background-clip: text;
453
- -webkit-text-fill-color: transparent;
454
- line-height: 1;
455
- margin-bottom: 0.5rem;
456
- }
457
-
458
- .ctd-impact-text {
459
- font-size: 0.85rem;
460
- font-weight: 700;
461
- color: rgb(100, 116, 139);
519
+ grid-template-columns: 1fr;
462
520
  }
463
-
464
- .theme-dark .ctd-impact-text {
465
- color: rgb(203, 213, 225);
466
- }
467
-
468
- .ctd-message {
469
- background: linear-gradient(135deg, rgb(254, 243, 199) 0%, rgb(254, 202, 202) 100%);
470
- border: 2px solid rgb(251, 191, 36);
471
- border-radius: 1.3rem;
472
- padding: 1.5rem;
473
- text-align: center;
474
- font-size: 1rem;
475
- font-weight: 700;
476
- color: rgb(146, 64, 14);
477
- line-height: 1.6;
478
- }
479
-
480
- .theme-dark .ctd-message {
481
- background: linear-gradient(135deg, rgba(254, 243, 199, 0.1), rgba(254, 202, 202, 0.1));
482
- border-color: rgba(251, 191, 36, 0.3);
483
- color: rgb(251, 191, 36);
484
- }
485
-
486
- @media (max-width: 768px) {
487
- .ctd-wrapper {
488
- padding: 1rem;
489
- min-height: auto;
490
- }
491
-
492
- .ctd-card {
493
- padding: 1.5rem;
494
- }
495
-
496
- .ctd-header {
497
- margin-bottom: 1.2rem;
498
- gap: 0.8rem;
499
- }
500
-
501
- .ctd-header h2 {
502
- font-size: 1.3rem;
503
- }
504
-
505
- .ctd-results {
506
- grid-template-columns: 1fr;
507
- gap: 0.8rem;
508
- padding: 1rem;
509
- }
510
-
511
- .ctd-divider {
512
- display: none;
513
- }
514
-
515
- .ctd-speed-buttons {
516
- grid-template-columns: 1fr;
517
- }
518
-
519
- .ctd-impact {
520
- grid-template-columns: 1fr;
521
- }
522
- }
521
+ }