@jjlmoya/utils-creative 1.2.0 → 1.4.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.
@@ -1,482 +0,0 @@
1
- .dr-root {
2
- --dr-bg: #fff;
3
- --dr-bg-muted: #f8fafc;
4
- --dr-bg-card: #fff;
5
- --dr-text: #0f172a;
6
- --dr-text-muted: #64748b;
7
- --dr-border: #e2e8f0;
8
- --dr-primary: #7c3aed;
9
- --dr-primary-light: #ede9fe;
10
- --dr-primary-dark: #5b21b6;
11
- --dr-accent: #f59e0b;
12
- --dr-danger: #ef4444;
13
- --dr-success: #10b981;
14
- --dr-shadow-sm: 0 1px 3px rgba(0,0,0,0.08);
15
- --dr-shadow-md: 0 4px 16px rgba(0,0,0,0.1);
16
- --dr-shadow-lg: 0 8px 32px rgba(0,0,0,0.12);
17
- --dr-radius: 1rem;
18
- --dr-radius-sm: 0.5rem;
19
-
20
- display: grid;
21
- grid-template-columns: 1fr 1fr;
22
- gap: 1.5rem;
23
- max-width: 900px;
24
- margin: 0 auto;
25
- padding: 1rem;
26
- }
27
-
28
- .theme-dark .dr-root {
29
- --dr-bg: #0f172a;
30
- --dr-bg-muted: #1e293b;
31
- --dr-bg-card: #1e293b;
32
- --dr-text: #f1f5f9;
33
- --dr-text-muted: #94a3b8;
34
- --dr-border: #334155;
35
- --dr-primary: #a78bfa;
36
- --dr-primary-light: #2d1b69;
37
- --dr-primary-dark: #7c3aed;
38
- --dr-accent: #fbbf24;
39
- --dr-shadow-sm: 0 1px 3px rgba(0,0,0,0.3);
40
- --dr-shadow-md: 0 4px 16px rgba(0,0,0,0.4);
41
- --dr-shadow-lg: 0 8px 32px rgba(0,0,0,0.5);
42
- }
43
-
44
- @media (max-width: 680px) {
45
- .dr-root {
46
- grid-template-columns: 1fr;
47
- }
48
- }
49
-
50
- /* ── panel izquierdo ── */
51
- .dr-panel {
52
- background: var(--dr-bg-card);
53
- border: 1px solid var(--dr-border);
54
- border-radius: var(--dr-radius);
55
- box-shadow: var(--dr-shadow-md);
56
- padding: 1.5rem;
57
- display: flex;
58
- flex-direction: column;
59
- gap: 1.25rem;
60
- }
61
-
62
- .dr-label {
63
- font-size: 0.75rem;
64
- font-weight: 600;
65
- text-transform: uppercase;
66
- letter-spacing: 0.08em;
67
- color: var(--dr-text-muted);
68
- margin: 0 0 0.625rem;
69
- }
70
-
71
- /* ── cuadrícula de dados ── */
72
- .dr-dice-grid {
73
- display: grid;
74
- grid-template-columns: repeat(4, 1fr);
75
- gap: 0.5rem;
76
- }
77
-
78
- .dr-die-btn {
79
- display: flex;
80
- align-items: center;
81
- justify-content: center;
82
- padding: 0.75rem 0.5rem;
83
- background: var(--dr-bg-muted);
84
- border: 1px solid var(--dr-border);
85
- border-radius: var(--dr-radius-sm);
86
- cursor: pointer;
87
- transition: background 0.15s, border-color 0.15s, transform 0.1s;
88
- color: var(--dr-primary);
89
- font-size: 0.85rem;
90
- font-weight: 700;
91
- }
92
-
93
- .dr-die-btn:hover {
94
- background: var(--dr-primary-light);
95
- border-color: var(--dr-primary);
96
- transform: translateY(-2px);
97
- }
98
-
99
- .dr-die-btn:active {
100
- transform: translateY(0);
101
- }
102
-
103
- /* ── bolsa ── */
104
- .dr-pool-section {
105
- border: 1px solid var(--dr-border);
106
- border-radius: var(--dr-radius-sm);
107
- padding: 0.875rem;
108
- background: var(--dr-bg-muted);
109
- }
110
-
111
- .dr-pool-header {
112
- display: flex;
113
- justify-content: space-between;
114
- align-items: center;
115
- margin-bottom: 0.5rem;
116
- }
117
-
118
- .dr-pool-header .dr-label {
119
- margin-bottom: 0;
120
- }
121
-
122
- .dr-clear-btn {
123
- font-size: 0.7rem;
124
- font-weight: 600;
125
- color: var(--dr-text-muted);
126
- background: none;
127
- border: 1px solid var(--dr-border);
128
- border-radius: 0.375rem;
129
- padding: 0.2rem 0.5rem;
130
- cursor: pointer;
131
- transition: color 0.15s, border-color 0.15s;
132
- }
133
-
134
- .dr-clear-btn:hover {
135
- color: var(--dr-danger);
136
- border-color: var(--dr-danger);
137
- }
138
-
139
- .dr-pool-display {
140
- display: flex;
141
- flex-wrap: wrap;
142
- gap: 0.5rem;
143
- min-height: 2.5rem;
144
- align-items: center;
145
- }
146
-
147
- .dr-pool-empty {
148
- font-size: 0.8rem;
149
- color: var(--dr-text-muted);
150
- font-style: italic;
151
- }
152
-
153
- .dr-pool-chip {
154
- display: flex;
155
- align-items: center;
156
- gap: 0.25rem;
157
- background: var(--dr-primary-light);
158
- border: 1px solid var(--dr-primary);
159
- border-radius: 2rem;
160
- padding: 0.2rem 0.5rem 0.2rem 0.75rem;
161
- }
162
-
163
- .dr-chip-label {
164
- font-size: 0.8rem;
165
- font-weight: 700;
166
- color: var(--dr-primary);
167
- }
168
-
169
- .dr-chip-remove {
170
- width: 1.125rem;
171
- height: 1.125rem;
172
- border-radius: 50%;
173
- border: none;
174
- background: var(--dr-primary);
175
- color: #fff;
176
- font-size: 0.8rem;
177
- line-height: 1;
178
- cursor: pointer;
179
- display: flex;
180
- align-items: center;
181
- justify-content: center;
182
- transition: background 0.15s;
183
- padding: 0;
184
- }
185
-
186
- .dr-chip-remove:hover {
187
- background: var(--dr-primary-dark);
188
- }
189
-
190
- /* ── modificador ── */
191
- .dr-modifier-section {
192
- display: flex;
193
- align-items: center;
194
- justify-content: space-between;
195
- }
196
-
197
- .dr-modifier-controls {
198
- display: flex;
199
- align-items: center;
200
- gap: 0.75rem;
201
- background: var(--dr-bg-muted);
202
- border: 1px solid var(--dr-border);
203
- border-radius: 2rem;
204
- padding: 0.25rem 0.5rem;
205
- }
206
-
207
- .dr-mod-btn {
208
- width: 1.75rem;
209
- height: 1.75rem;
210
- border-radius: 50%;
211
- border: 1px solid var(--dr-border);
212
- background: var(--dr-bg-card);
213
- color: var(--dr-text);
214
- font-size: 1rem;
215
- font-weight: 700;
216
- cursor: pointer;
217
- display: flex;
218
- align-items: center;
219
- justify-content: center;
220
- transition: background 0.15s, border-color 0.15s;
221
- line-height: 1;
222
- padding: 0;
223
- }
224
-
225
- .dr-mod-btn:hover {
226
- background: var(--dr-primary-light);
227
- border-color: var(--dr-primary);
228
- }
229
-
230
- .dr-modifier-display {
231
- min-width: 2rem;
232
- text-align: center;
233
- font-weight: 700;
234
- font-size: 1rem;
235
- color: var(--dr-text);
236
- }
237
-
238
- /* ── botón lanzar ── */
239
- .dr-roll-btn {
240
- display: flex;
241
- align-items: center;
242
- justify-content: center;
243
- gap: 0.5rem;
244
- width: 100%;
245
- padding: 0.875rem;
246
- background: linear-gradient(135deg, var(--dr-primary), var(--dr-primary-dark));
247
- color: #fff;
248
- border: none;
249
- border-radius: var(--dr-radius-sm);
250
- font-size: 1rem;
251
- font-weight: 700;
252
- cursor: pointer;
253
- transition: opacity 0.2s, transform 0.1s;
254
- box-shadow: 0 4px 12px rgba(124, 58, 237, 0.35);
255
- margin-top: auto;
256
- }
257
-
258
- .dr-roll-btn:disabled {
259
- opacity: 0.5;
260
- cursor: not-allowed;
261
- box-shadow: none;
262
- }
263
-
264
- .dr-roll-btn:not(:disabled):hover {
265
- transform: translateY(-1px);
266
- box-shadow: 0 6px 18px rgba(124, 58, 237, 0.45);
267
- }
268
-
269
- .dr-roll-btn:not(:disabled):active {
270
- transform: translateY(0);
271
- }
272
-
273
- @keyframes dr-shake {
274
- 0%, 100% { transform: rotate(0deg); }
275
- 20% { transform: rotate(-15deg); }
276
- 40% { transform: rotate(15deg); }
277
- 60% { transform: rotate(-10deg); }
278
- 80% { transform: rotate(10deg); }
279
- }
280
-
281
- .dr-rolling {
282
- animation: dr-shake 0.4s ease-in-out;
283
- }
284
-
285
- /* ── panel de resultados ── */
286
- .dr-results-panel {
287
- display: flex;
288
- flex-direction: column;
289
- gap: 1.25rem;
290
- }
291
-
292
- .dr-result-card {
293
- background: var(--dr-bg-card);
294
- border: 1px solid var(--dr-border);
295
- border-radius: var(--dr-radius);
296
- box-shadow: var(--dr-shadow-md);
297
- padding: 1.5rem;
298
- min-height: 12rem;
299
- display: flex;
300
- align-items: center;
301
- justify-content: center;
302
- }
303
-
304
- .dr-result-empty {
305
- display: flex;
306
- flex-direction: column;
307
- align-items: center;
308
- gap: 0.5rem;
309
- color: var(--dr-text-muted);
310
- }
311
-
312
- .dr-result-empty p {
313
- font-size: 0.9rem;
314
- margin: 0;
315
- }
316
-
317
- .dr-result-content {
318
- width: 100%;
319
- flex-direction: column;
320
- align-items: center;
321
- gap: 1rem;
322
- }
323
-
324
- .dr-total-area {
325
- display: flex;
326
- flex-direction: column;
327
- align-items: center;
328
- gap: 0.25rem;
329
- }
330
-
331
- .dr-total-label {
332
- font-size: 0.75rem;
333
- font-weight: 600;
334
- text-transform: uppercase;
335
- letter-spacing: 0.08em;
336
- color: var(--dr-text-muted);
337
- }
338
-
339
- .dr-total-val {
340
- font-size: 4rem;
341
- font-weight: 900;
342
- color: var(--dr-primary);
343
- line-height: 1;
344
- }
345
-
346
- .dr-roll-expr {
347
- font-size: 0.8rem;
348
- color: var(--dr-text-muted);
349
- font-style: italic;
350
- }
351
-
352
- .dr-dice-results {
353
- display: flex;
354
- flex-wrap: wrap;
355
- gap: 0.5rem;
356
- justify-content: center;
357
- }
358
-
359
- .dr-result-pip {
360
- display: flex;
361
- flex-direction: column;
362
- align-items: center;
363
- gap: 0.15rem;
364
- padding: 0.5rem 0.75rem;
365
- background: var(--dr-bg-muted);
366
- border: 2px solid var(--dr-border);
367
- border-radius: var(--dr-radius-sm);
368
- min-width: 3rem;
369
- transition: border-color 0.2s;
370
- }
371
-
372
- .dr-pip-max {
373
- border-color: var(--dr-success);
374
- background: rgba(16, 185, 129, 0.1);
375
- }
376
-
377
- .dr-pip-min {
378
- border-color: var(--dr-danger);
379
- background: rgba(239, 68, 68, 0.1);
380
- }
381
-
382
- .dr-pip-val {
383
- font-size: 1.25rem;
384
- font-weight: 800;
385
- color: var(--dr-text);
386
- line-height: 1;
387
- }
388
-
389
- .dr-pip-die {
390
- font-size: 0.65rem;
391
- color: var(--dr-text-muted);
392
- font-weight: 600;
393
- }
394
-
395
- /* ── historial ── */
396
- .dr-history-section {
397
- background: var(--dr-bg-card);
398
- border: 1px solid var(--dr-border);
399
- border-radius: var(--dr-radius);
400
- box-shadow: var(--dr-shadow-sm);
401
- padding: 1.25rem;
402
- flex: 1;
403
- }
404
-
405
- .dr-history-header {
406
- display: flex;
407
- justify-content: space-between;
408
- align-items: center;
409
- margin-bottom: 0.75rem;
410
- }
411
-
412
- .dr-history-header .dr-label {
413
- margin-bottom: 0;
414
- }
415
-
416
- .dr-history-list {
417
- display: flex;
418
- flex-direction: column;
419
- gap: 0.375rem;
420
- max-height: 220px;
421
- overflow-y: auto;
422
- }
423
-
424
- .dr-history-list::-webkit-scrollbar {
425
- width: 4px;
426
- }
427
-
428
- .dr-history-list::-webkit-scrollbar-thumb {
429
- background: var(--dr-border);
430
- border-radius: 2px;
431
- }
432
-
433
- .dr-history-empty {
434
- font-size: 0.8rem;
435
- color: var(--dr-text-muted);
436
- font-style: italic;
437
- text-align: center;
438
- margin: 1rem 0;
439
- }
440
-
441
- .dr-history-item {
442
- display: grid;
443
- grid-template-columns: 1fr auto auto;
444
- align-items: center;
445
- gap: 0.75rem;
446
- padding: 0.4rem 0.6rem;
447
- background: var(--dr-bg-muted);
448
- border-radius: var(--dr-radius-sm);
449
- font-size: 0.8rem;
450
- animation: dr-fadein 0.2s ease-out;
451
- }
452
-
453
- @keyframes dr-fadein {
454
- from {
455
- opacity: 0;
456
- transform: translate-y(-4px);
457
- }
458
-
459
- to {
460
- opacity: 1;
461
- transform: translateY(0);
462
- }
463
- }
464
-
465
- .dr-hist-expr {
466
- color: var(--dr-text-muted);
467
- font-size: 0.75rem;
468
- overflow: hidden;
469
- text-overflow: ellipsis;
470
- white-space: nowrap;
471
- }
472
-
473
- .dr-hist-result {
474
- font-weight: 800;
475
- font-size: 1rem;
476
- color: var(--dr-primary);
477
- }
478
-
479
- .dr-hist-time {
480
- font-size: 0.7rem;
481
- color: var(--dr-text-muted);
482
- }
@@ -1,234 +0,0 @@
1
- .synesthesia-painter {
2
- --sp-bg: #fff;
3
- --sp-bg-muted: #f8fafc;
4
- --sp-text: #0f172a;
5
- --sp-text-muted: #475569;
6
- --sp-text-dim: #64748b;
7
- --sp-border: #e2e8f0;
8
- --sp-shadow: rgba(0, 0, 0, 0.08);
9
- --sp-primary: #6366f1;
10
- --sp-primary-on: #fff;
11
- --sp-header-bg: rgba(255, 255, 255, 0.92);
12
- }
13
-
14
- .theme-dark .synesthesia-painter {
15
- --sp-bg: #0f172a;
16
- --sp-bg-muted: #1e293b;
17
- --sp-text: #f8fafc;
18
- --sp-text-muted: #94a3b8;
19
- --sp-text-dim: #64748b;
20
- --sp-border: #334155;
21
- --sp-shadow: rgba(0, 0, 0, 0.35);
22
- --sp-primary: #818cf8;
23
- --sp-header-bg: rgba(30, 41, 59, 0.92);
24
- }
25
-
26
- .synesthesia-painter-card {
27
- position: relative;
28
- min-height: 420px;
29
- background-color: var(--sp-bg);
30
- border-radius: 2rem;
31
- border: 1px solid var(--sp-border);
32
- box-shadow: 0 20px 40px -8px var(--sp-shadow);
33
- display: flex;
34
- flex-direction: column;
35
- overflow: hidden;
36
- }
37
-
38
- /* ── mode selector ── */
39
- .synesthesia-painter-header {
40
- position: absolute;
41
- top: 1rem;
42
- right: 1rem;
43
- z-index: 30;
44
- background-color: var(--sp-header-bg);
45
- backdrop-filter: blur(8px);
46
- padding: 0.3rem;
47
- border-radius: 9999px;
48
- border: 1px solid var(--sp-border);
49
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
50
- display: flex;
51
- gap: 0.2rem;
52
- }
53
-
54
- .synesthesia-painter-mode-btn {
55
- padding: 0.4rem 0.875rem;
56
- border-radius: 9999px;
57
- font-size: 0.7rem;
58
- font-weight: 700;
59
- text-transform: uppercase;
60
- letter-spacing: 0.06em;
61
- transition: background 0.2s, color 0.2s;
62
- color: var(--sp-text-muted);
63
- background: none;
64
- border: none;
65
- cursor: pointer;
66
- }
67
-
68
- .synesthesia-painter-mode-btn:hover {
69
- background-color: var(--sp-bg-muted);
70
- color: var(--sp-text);
71
- }
72
-
73
- .synesthesia-painter-mode-btn.active {
74
- background-color: var(--sp-primary);
75
- color: var(--sp-primary-on);
76
- box-shadow: 0 2px 8px rgba(99, 102, 241, 0.35);
77
- }
78
-
79
- /* ── canvas area ── */
80
- .synesthesia-painter-canvas-wrapper {
81
- position: relative;
82
- flex-grow: 1;
83
- padding: 2rem;
84
- padding-top: 5rem;
85
- cursor: text;
86
- }
87
-
88
- @media (min-width: 768px) {
89
- .synesthesia-painter-canvas-wrapper {
90
- padding: 3rem;
91
- padding-top: 5rem;
92
- }
93
- }
94
-
95
- .synesthesia-painter-viz-layer {
96
- word-break: break-all;
97
- white-space: pre-wrap;
98
- line-height: 1.625;
99
- outline: none;
100
- font-size: 2.5rem;
101
- min-height: 100%;
102
- }
103
-
104
- .synesthesia-painter-input {
105
- position: absolute;
106
- inset: 0;
107
- opacity: 0;
108
- cursor: text;
109
- z-index: -10;
110
- width: 100%;
111
- height: 100%;
112
- resize: none;
113
- border: none;
114
- background: transparent;
115
- }
116
-
117
- .synesthesia-painter-placeholder {
118
- position: absolute;
119
- top: 5rem;
120
- left: 2rem;
121
- pointer-events: none;
122
- opacity: 0.35;
123
- user-select: none;
124
- }
125
-
126
- @media (min-width: 768px) {
127
- .synesthesia-painter-placeholder {
128
- left: 3rem;
129
- }
130
- }
131
-
132
- .synesthesia-painter-placeholder-text {
133
- color: var(--sp-text-dim);
134
- font-size: 2.25rem;
135
- font-weight: 300;
136
- font-style: italic;
137
- }
138
-
139
- /* ── footer ── */
140
- .synesthesia-painter-footer {
141
- background-color: var(--sp-bg-muted);
142
- border-top: 1px solid var(--sp-border);
143
- padding: 0.875rem 2rem;
144
- display: flex;
145
- align-items: center;
146
- justify-content: space-between;
147
- gap: 1rem;
148
- }
149
-
150
- .synesthesia-painter-tooltip {
151
- font-size: 0.75rem;
152
- color: var(--sp-text-muted);
153
- font-weight: 500;
154
- margin: 0;
155
- }
156
-
157
- .synesthesia-painter-clear-btn {
158
- font-size: 0.7rem;
159
- font-weight: 700;
160
- color: var(--sp-text-dim);
161
- text-transform: uppercase;
162
- letter-spacing: 0.06em;
163
- background: none;
164
- border: none;
165
- cursor: pointer;
166
- display: flex;
167
- align-items: center;
168
- gap: 0.375rem;
169
- transition: color 0.2s;
170
- white-space: nowrap;
171
- }
172
-
173
- .synesthesia-painter-clear-btn:hover {
174
- color: #ef4444;
175
- }
176
-
177
- /* ── characters ── */
178
- .synesthesia-painter-char {
179
- display: inline-block;
180
- color: var(--char-color);
181
- transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
182
- animation: sp-fade-in 0.2s ease-out forwards;
183
- }
184
-
185
- @keyframes sp-fade-in {
186
- from {
187
- opacity: 0;
188
- transform: translate-y(4px);
189
- }
190
-
191
- to {
192
- opacity: 1;
193
- transform: translate-y(0);
194
- }
195
- }
196
-
197
- /* mode: dots */
198
- .synesthesia-painter-viz-layer.dots .synesthesia-painter-char {
199
- color: transparent;
200
- font-size: 0;
201
- width: 1rem;
202
- height: 1rem;
203
- border-radius: 50%;
204
- background-color: var(--char-color);
205
- margin: 0.25rem;
206
- box-shadow: 0 0 8px var(--char-color);
207
- }
208
-
209
- /* mode: aura */
210
- .synesthesia-painter-viz-layer.aura .synesthesia-painter-char {
211
- color: rgba(255, 255, 255, 0.15);
212
- text-shadow: 0 0 18px var(--char-color), 0 0 36px var(--char-color);
213
- }
214
-
215
- .theme-dark .synesthesia-painter-viz-layer.aura .synesthesia-painter-char {
216
- color: rgba(255, 255, 255, 0.85);
217
- text-shadow: 0 0 14px var(--char-color), 0 0 28px var(--char-color), 0 0 56px var(--char-color);
218
- }
219
-
220
- /* cursor */
221
- .synesthesia-painter-cursor {
222
- display: inline-block;
223
- width: 2px;
224
- height: 2.5rem;
225
- background-color: var(--sp-primary);
226
- animation: sp-blink 1s step-end infinite;
227
- vertical-align: text-bottom;
228
- margin-left: 2px;
229
- }
230
-
231
- @keyframes sp-blink {
232
- 0%, 100% { opacity: 1; }
233
- 50% { opacity: 0; }
234
- }