@jjlmoya/utils-cooking 1.19.0 → 1.20.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 (26) hide show
  1. package/package.json +5 -3
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/tool/american-kitchen-converter/component.astro +0 -498
  4. package/src/tool/american-kitchen-converter/us-cooking-conversion-calculator-cups-to-grams-fahrenheit.css +496 -0
  5. package/src/tool/banana-ripeness/banana-ripeness.css +587 -0
  6. package/src/tool/banana-ripeness/component.astro +0 -589
  7. package/src/tool/brine/component.astro +0 -536
  8. package/src/tool/brine/equilibrium-brining-calculator-meat-fermentation-ratios.css +534 -0
  9. package/src/tool/cookware-guide/component.astro +0 -24
  10. package/src/tool/cookware-guide/cookware-selector.css +22 -0
  11. package/src/tool/egg-timer/component.astro +1 -505
  12. package/src/tool/egg-timer/perfect-boiled-egg-timer-altitude-calculator.css +503 -0
  13. package/src/tool/ingredient-rescaler/component.astro +0 -22
  14. package/src/tool/ingredient-rescaler/recipe-ingredient-scaler-converter-servings.css +20 -0
  15. package/src/tool/kitchen-timer/component.astro +0 -340
  16. package/src/tool/kitchen-timer/kitchen-timer.css +338 -0
  17. package/src/tool/meringue-peak/component.astro +0 -300
  18. package/src/tool/meringue-peak/meringue-sugar-ratio-calculator-stiff-peaks.css +298 -0
  19. package/src/tool/mold-scaler/cake-pan-size-converter-calculator.css +364 -0
  20. package/src/tool/mold-scaler/component.astro +0 -366
  21. package/src/tool/pizza/component.astro +0 -570
  22. package/src/tool/pizza/neapolitan-pizza-dough-calculator-authentic-recipe.css +569 -0
  23. package/src/tool/roux-guide/component.astro +0 -23
  24. package/src/tool/roux-guide/roux-ratio-calculator-thickening-sauce-guide.css +21 -0
  25. package/src/tool/sourdough-calculator/component.astro +0 -371
  26. package/src/tool/sourdough-calculator/sourdough-starter-feeding-calculator-ratio-proportions.css +369 -0
@@ -342,343 +342,3 @@ const { ui } = Astro.props;
342
342
  }
343
343
  </script>
344
344
 
345
- <style>
346
- .kitchen-timer-wrapper {
347
- --kt-primary: #ea580c;
348
- --kt-secondary: #f97316;
349
- --kt-bg: #fff;
350
- --kt-bg-secondary: #f8fafc;
351
- --kt-border: #e2e8f0;
352
- --kt-separator: #cbd5e1;
353
- --kt-text: #0f172a;
354
- --kt-text-muted: #64748b;
355
- --card-br: 1.5rem;
356
- }
357
-
358
- :global(.theme-dark) .kitchen-timer-wrapper {
359
- --kt-primary: #fb923c;
360
- --kt-secondary: #fdba74;
361
- --kt-bg: #0f172a;
362
- --kt-bg-secondary: #1e293b;
363
- --kt-border: #334155;
364
- --kt-separator: #64748b;
365
- --kt-text: #f8fafc;
366
- --kt-text-muted: #94a3b8;
367
- }
368
-
369
- .kitchen-timer-master-card {
370
- background: var(--kt-bg);
371
- border: 1px solid var(--kt-border);
372
- border-radius: var(--card-br);
373
- box-shadow: var(--sc-shadow-lg);
374
- overflow: hidden;
375
- }
376
-
377
- .timers-grid {
378
- display: grid;
379
- grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
380
- gap: 0;
381
- }
382
-
383
- .timer-card {
384
- background: transparent;
385
- border: none;
386
- border-right: 1px solid var(--kt-border);
387
- border-bottom: 1px solid var(--kt-border);
388
- border-radius: 0;
389
- position: relative;
390
- overflow: hidden;
391
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
392
- box-shadow: none;
393
- }
394
-
395
- .timer-card:hover {
396
- transform: none;
397
- background: var(--kt-bg-secondary);
398
- }
399
-
400
- .progress-bar {
401
- position: absolute;
402
- top: 0;
403
- left: 0;
404
- width: 100%;
405
- height: 4px;
406
- background: var(--kt-bg-secondary);
407
- }
408
-
409
- .progress-fill {
410
- width: 100%;
411
- height: 100%;
412
- background: var(--kt-primary);
413
- transform-origin: left;
414
- transform: scaleX(0);
415
- transition: transform 0.1s linear;
416
- }
417
-
418
- .timer-content {
419
- padding: 1.5rem;
420
- }
421
-
422
- .timer-header {
423
- display: flex;
424
- justify-content: space-between;
425
- align-items: center;
426
- margin-bottom: 1.5rem;
427
- }
428
-
429
- .timer-name-wrapper {
430
- flex: 1;
431
- min-width: 0;
432
- margin-right: 0.5rem;
433
- }
434
-
435
- .timer-name {
436
- background: transparent;
437
- border: none;
438
- border-bottom: 2px solid transparent;
439
- font-weight: 700;
440
- font-size: 1.1rem;
441
- color: var(--kt-text);
442
- width: 100%;
443
- outline: none;
444
- transition: border-color 0.2s;
445
- white-space: nowrap;
446
- overflow: hidden;
447
- text-overflow: ellipsis;
448
- }
449
-
450
- .timer-name:focus {
451
- border-color: var(--kt-primary);
452
- }
453
-
454
- .status-badge {
455
- padding: 0.25rem 0.75rem;
456
- background: var(--kt-bg-secondary);
457
- border-radius: 2rem;
458
- font-size: 0.75rem;
459
- font-weight: 700;
460
- color: var(--kt-text-muted);
461
- border: 1px solid var(--kt-border);
462
- flex-shrink: 0;
463
- }
464
-
465
- .timer-display {
466
- display: flex;
467
- align-items: center;
468
- justify-content: center;
469
- gap: 1rem;
470
- margin: 2rem 0;
471
- }
472
-
473
- .time-input-group {
474
- display: flex;
475
- flex-direction: column;
476
- align-items: center;
477
- gap: 0.5rem;
478
- }
479
-
480
- .time-input {
481
- width: 85px;
482
- aspect-ratio: 1;
483
- background: var(--kt-bg-secondary);
484
- border: 2px solid var(--kt-border);
485
- border-radius: 1.25rem;
486
- font-size: 2.75rem;
487
- font-weight: 900;
488
- text-align: center;
489
- color: var(--kt-text);
490
- padding: 0;
491
- display: flex;
492
- align-items: center;
493
- justify-content: center;
494
- outline: none;
495
- transition: all 0.2s;
496
- appearance: textfield;
497
- -moz-appearance: textfield;
498
- }
499
-
500
- .time-input::-webkit-outer-spin-button,
501
- .time-input::-webkit-inner-spin-button {
502
- -webkit-appearance: none;
503
- margin: 0;
504
- }
505
-
506
- .time-input:focus {
507
- border-color: var(--kt-primary);
508
- background: var(--kt-bg);
509
- box-shadow: 0 0 0 4px rgba(234, 88, 12, 0.1);
510
- }
511
-
512
- .time-label {
513
- font-size: 0.65rem;
514
- font-weight: 800;
515
- text-transform: uppercase;
516
- letter-spacing: 0.1em;
517
- color: var(--kt-text-muted);
518
- }
519
-
520
- .time-separator {
521
- font-size: 2rem;
522
- font-weight: 900;
523
- color: var(--kt-separator);
524
- margin-top: -1.4rem;
525
- }
526
-
527
- .timer-controls {
528
- display: flex;
529
- flex-direction: column;
530
- gap: 1rem;
531
- }
532
-
533
- .timer-buttons {
534
- display: grid;
535
- grid-template-columns: 1fr 1fr;
536
- gap: 0.75rem;
537
- }
538
-
539
- .btn-toggle, .btn-reset {
540
- padding: 0.75rem;
541
- border-radius: 1rem;
542
- font-weight: 700;
543
- cursor: pointer;
544
- display: flex;
545
- align-items: center;
546
- justify-content: center;
547
- gap: 0.5rem;
548
- transition: all 0.2s;
549
- border: none;
550
- }
551
-
552
- .btn-toggle {
553
- background: var(--kt-primary);
554
- color: var(--kt-bg);
555
- }
556
-
557
- .btn-toggle:hover:not(:disabled) {
558
- background: var(--kt-secondary);
559
- transform: scale(1.02);
560
- }
561
-
562
- .btn-toggle:disabled {
563
- opacity: 0.5;
564
- cursor: not-allowed;
565
- }
566
-
567
- .btn-reset {
568
- background: var(--kt-bg-secondary);
569
- color: var(--kt-text);
570
- border: 1px solid var(--kt-border);
571
- }
572
-
573
- .btn-reset:hover {
574
- border-color: var(--kt-primary);
575
- }
576
-
577
- .timer-quick-buttons {
578
- display: flex;
579
- gap: 0.5rem;
580
- }
581
-
582
- .timer-quick-buttons button {
583
- flex: 1;
584
- padding: 0.5rem;
585
- border-radius: 0.75rem;
586
- background: var(--kt-bg-secondary);
587
- border: 1px solid var(--kt-border);
588
- font-size: 0.8rem;
589
- font-weight: 600;
590
- color: var(--kt-text-muted);
591
- cursor: pointer;
592
- transition: all 0.2s;
593
- }
594
-
595
- .timer-quick-buttons button:hover {
596
- color: var(--kt-primary);
597
- border-color: var(--kt-primary);
598
- }
599
-
600
- .add-timer-container {
601
- padding: 1.5rem 2.5rem;
602
- display: flex;
603
- align-items: center;
604
- justify-content: space-between;
605
- background: var(--kt-bg-secondary);
606
- border-top: 1px solid var(--kt-border);
607
- gap: 1.5rem;
608
- }
609
-
610
- .add-timer-btn {
611
- background: var(--kt-primary);
612
- border: none;
613
- border-radius: 1rem;
614
- width: auto;
615
- padding: 0.75rem 2rem;
616
- height: auto;
617
- display: flex;
618
- flex-direction: row;
619
- align-items: center;
620
- justify-content: center;
621
- gap: 0.75rem;
622
- color: var(--kt-bg);
623
- font-weight: 700;
624
- font-size: 1rem;
625
- cursor: pointer;
626
- transition: all 0.2s;
627
- box-shadow: 0 4px 6px -1px rgba(234, 88, 12, 0.2);
628
- }
629
-
630
- .add-timer-btn:hover {
631
- background: var(--kt-secondary);
632
- transform: translateY(-2px);
633
- box-shadow: 0 10px 15px -3px rgba(234, 88, 12, 0.3);
634
- }
635
-
636
- .add-timer-icon {
637
- font-size: 1.25rem;
638
- display: flex;
639
- align-items: center;
640
- }
641
-
642
- .stop-all-container {
643
- flex-shrink: 0;
644
- }
645
-
646
- .stop-all-btn {
647
- background: #1e293b;
648
- padding: 0.75rem 1.5rem;
649
- border-radius: 1rem;
650
- color: var(--kt-bg);
651
- border: 1px solid rgba(255, 255, 255, 0.1);
652
- font-weight: 700;
653
- font-size: 0.9rem;
654
- display: flex;
655
- align-items: center;
656
- gap: 0.5rem;
657
- cursor: pointer;
658
- transition: all 0.2s;
659
- }
660
-
661
- .stop-all-btn:hover {
662
- background: #000;
663
- transform: translateY(-2px);
664
- }
665
-
666
- .timer-card.finished {
667
- animation: pulse-border 1.5s infinite;
668
- }
669
-
670
- @keyframes pulse-border {
671
- 0% {
672
- border-color: var(--kt-primary);
673
- box-shadow: 0 0 0 0 rgba(234, 88, 12, 0.4);
674
- }
675
- 70% {
676
- border-color: var(--kt-secondary);
677
- box-shadow: 0 0 0 15px rgba(234, 88, 12, 0);
678
- }
679
- 100% {
680
- border-color: var(--kt-primary);
681
- box-shadow: 0 0 0 0 rgba(234, 88, 12, 0);
682
- }
683
- }
684
- </style>
@@ -0,0 +1,338 @@
1
+ .kitchen-timer-wrapper {
2
+ --kt-primary: #ea580c;
3
+ --kt-secondary: #f97316;
4
+ --kt-bg: #fff;
5
+ --kt-bg-secondary: #f8fafc;
6
+ --kt-border: #e2e8f0;
7
+ --kt-separator: #cbd5e1;
8
+ --kt-text: #0f172a;
9
+ --kt-text-muted: #64748b;
10
+ --card-br: 1.5rem;
11
+ }
12
+
13
+ :global(.theme-dark) .kitchen-timer-wrapper {
14
+ --kt-primary: #fb923c;
15
+ --kt-secondary: #fdba74;
16
+ --kt-bg: #0f172a;
17
+ --kt-bg-secondary: #1e293b;
18
+ --kt-border: #334155;
19
+ --kt-separator: #64748b;
20
+ --kt-text: #f8fafc;
21
+ --kt-text-muted: #94a3b8;
22
+ }
23
+
24
+ .kitchen-timer-master-card {
25
+ background: var(--kt-bg);
26
+ border: 1px solid var(--kt-border);
27
+ border-radius: var(--card-br);
28
+ box-shadow: var(--sc-shadow-lg);
29
+ overflow: hidden;
30
+ }
31
+
32
+ .timers-grid {
33
+ display: grid;
34
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
35
+ gap: 0;
36
+ }
37
+
38
+ .timer-card {
39
+ background: transparent;
40
+ border: none;
41
+ border-right: 1px solid var(--kt-border);
42
+ border-bottom: 1px solid var(--kt-border);
43
+ border-radius: 0;
44
+ position: relative;
45
+ overflow: hidden;
46
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
47
+ box-shadow: none;
48
+ }
49
+
50
+ .timer-card:hover {
51
+ transform: none;
52
+ background: var(--kt-bg-secondary);
53
+ }
54
+
55
+ .progress-bar {
56
+ position: absolute;
57
+ top: 0;
58
+ left: 0;
59
+ width: 100%;
60
+ height: 4px;
61
+ background: var(--kt-bg-secondary);
62
+ }
63
+
64
+ .progress-fill {
65
+ width: 100%;
66
+ height: 100%;
67
+ background: var(--kt-primary);
68
+ transform-origin: left;
69
+ transform: scaleX(0);
70
+ transition: transform 0.1s linear;
71
+ }
72
+
73
+ .timer-content {
74
+ padding: 1.5rem;
75
+ }
76
+
77
+ .timer-header {
78
+ display: flex;
79
+ justify-content: space-between;
80
+ align-items: center;
81
+ margin-bottom: 1.5rem;
82
+ }
83
+
84
+ .timer-name-wrapper {
85
+ flex: 1;
86
+ min-width: 0;
87
+ margin-right: 0.5rem;
88
+ }
89
+
90
+ .timer-name {
91
+ background: transparent;
92
+ border: none;
93
+ border-bottom: 2px solid transparent;
94
+ font-weight: 700;
95
+ font-size: 1.1rem;
96
+ color: var(--kt-text);
97
+ width: 100%;
98
+ outline: none;
99
+ transition: border-color 0.2s;
100
+ white-space: nowrap;
101
+ overflow: hidden;
102
+ text-overflow: ellipsis;
103
+ }
104
+
105
+ .timer-name:focus {
106
+ border-color: var(--kt-primary);
107
+ }
108
+
109
+ .status-badge {
110
+ padding: 0.25rem 0.75rem;
111
+ background: var(--kt-bg-secondary);
112
+ border-radius: 2rem;
113
+ font-size: 0.75rem;
114
+ font-weight: 700;
115
+ color: var(--kt-text-muted);
116
+ border: 1px solid var(--kt-border);
117
+ flex-shrink: 0;
118
+ }
119
+
120
+ .timer-display {
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+ gap: 1rem;
125
+ margin: 2rem 0;
126
+ }
127
+
128
+ .time-input-group {
129
+ display: flex;
130
+ flex-direction: column;
131
+ align-items: center;
132
+ gap: 0.5rem;
133
+ }
134
+
135
+ .time-input {
136
+ width: 85px;
137
+ aspect-ratio: 1;
138
+ background: var(--kt-bg-secondary);
139
+ border: 2px solid var(--kt-border);
140
+ border-radius: 1.25rem;
141
+ font-size: 2.75rem;
142
+ font-weight: 900;
143
+ text-align: center;
144
+ color: var(--kt-text);
145
+ padding: 0;
146
+ display: flex;
147
+ align-items: center;
148
+ justify-content: center;
149
+ outline: none;
150
+ transition: all 0.2s;
151
+ appearance: textfield;
152
+ -moz-appearance: textfield;
153
+ }
154
+
155
+ .time-input::-webkit-outer-spin-button,
156
+ .time-input::-webkit-inner-spin-button {
157
+ -webkit-appearance: none;
158
+ margin: 0;
159
+ }
160
+
161
+ .time-input:focus {
162
+ border-color: var(--kt-primary);
163
+ background: var(--kt-bg);
164
+ box-shadow: 0 0 0 4px rgba(234, 88, 12, 0.1);
165
+ }
166
+
167
+ .time-label {
168
+ font-size: 0.65rem;
169
+ font-weight: 800;
170
+ text-transform: uppercase;
171
+ letter-spacing: 0.1em;
172
+ color: var(--kt-text-muted);
173
+ }
174
+
175
+ .time-separator {
176
+ font-size: 2rem;
177
+ font-weight: 900;
178
+ color: var(--kt-separator);
179
+ margin-top: -1.4rem;
180
+ }
181
+
182
+ .timer-controls {
183
+ display: flex;
184
+ flex-direction: column;
185
+ gap: 1rem;
186
+ }
187
+
188
+ .timer-buttons {
189
+ display: grid;
190
+ grid-template-columns: 1fr 1fr;
191
+ gap: 0.75rem;
192
+ }
193
+
194
+ .btn-toggle, .btn-reset {
195
+ padding: 0.75rem;
196
+ border-radius: 1rem;
197
+ font-weight: 700;
198
+ cursor: pointer;
199
+ display: flex;
200
+ align-items: center;
201
+ justify-content: center;
202
+ gap: 0.5rem;
203
+ transition: all 0.2s;
204
+ border: none;
205
+ }
206
+
207
+ .btn-toggle {
208
+ background: var(--kt-primary);
209
+ color: var(--kt-bg);
210
+ }
211
+
212
+ .btn-toggle:hover:not(:disabled) {
213
+ background: var(--kt-secondary);
214
+ transform: scale(1.02);
215
+ }
216
+
217
+ .btn-toggle:disabled {
218
+ opacity: 0.5;
219
+ cursor: not-allowed;
220
+ }
221
+
222
+ .btn-reset {
223
+ background: var(--kt-bg-secondary);
224
+ color: var(--kt-text);
225
+ border: 1px solid var(--kt-border);
226
+ }
227
+
228
+ .btn-reset:hover {
229
+ border-color: var(--kt-primary);
230
+ }
231
+
232
+ .timer-quick-buttons {
233
+ display: flex;
234
+ gap: 0.5rem;
235
+ }
236
+
237
+ .timer-quick-buttons button {
238
+ flex: 1;
239
+ padding: 0.5rem;
240
+ border-radius: 0.75rem;
241
+ background: var(--kt-bg-secondary);
242
+ border: 1px solid var(--kt-border);
243
+ font-size: 0.8rem;
244
+ font-weight: 600;
245
+ color: var(--kt-text-muted);
246
+ cursor: pointer;
247
+ transition: all 0.2s;
248
+ }
249
+
250
+ .timer-quick-buttons button:hover {
251
+ color: var(--kt-primary);
252
+ border-color: var(--kt-primary);
253
+ }
254
+
255
+ .add-timer-container {
256
+ padding: 1.5rem 2.5rem;
257
+ display: flex;
258
+ align-items: center;
259
+ justify-content: space-between;
260
+ background: var(--kt-bg-secondary);
261
+ border-top: 1px solid var(--kt-border);
262
+ gap: 1.5rem;
263
+ }
264
+
265
+ .add-timer-btn {
266
+ background: var(--kt-primary);
267
+ border: none;
268
+ border-radius: 1rem;
269
+ width: auto;
270
+ padding: 0.75rem 2rem;
271
+ height: auto;
272
+ display: flex;
273
+ flex-direction: row;
274
+ align-items: center;
275
+ justify-content: center;
276
+ gap: 0.75rem;
277
+ color: var(--kt-bg);
278
+ font-weight: 700;
279
+ font-size: 1rem;
280
+ cursor: pointer;
281
+ transition: all 0.2s;
282
+ box-shadow: 0 4px 6px -1px rgba(234, 88, 12, 0.2);
283
+ }
284
+
285
+ .add-timer-btn:hover {
286
+ background: var(--kt-secondary);
287
+ transform: translateY(-2px);
288
+ box-shadow: 0 10px 15px -3px rgba(234, 88, 12, 0.3);
289
+ }
290
+
291
+ .add-timer-icon {
292
+ font-size: 1.25rem;
293
+ display: flex;
294
+ align-items: center;
295
+ }
296
+
297
+ .stop-all-container {
298
+ flex-shrink: 0;
299
+ }
300
+
301
+ .stop-all-btn {
302
+ background: #1e293b;
303
+ padding: 0.75rem 1.5rem;
304
+ border-radius: 1rem;
305
+ color: var(--kt-bg);
306
+ border: 1px solid rgba(255, 255, 255, 0.1);
307
+ font-weight: 700;
308
+ font-size: 0.9rem;
309
+ display: flex;
310
+ align-items: center;
311
+ gap: 0.5rem;
312
+ cursor: pointer;
313
+ transition: all 0.2s;
314
+ }
315
+
316
+ .stop-all-btn:hover {
317
+ background: #000;
318
+ transform: translateY(-2px);
319
+ }
320
+
321
+ .timer-card.finished {
322
+ animation: pulse-border 1.5s infinite;
323
+ }
324
+
325
+ @keyframes pulse-border {
326
+ 0% {
327
+ border-color: var(--kt-primary);
328
+ box-shadow: 0 0 0 0 rgba(234, 88, 12, 0.4);
329
+ }
330
+ 70% {
331
+ border-color: var(--kt-secondary);
332
+ box-shadow: 0 0 0 15px rgba(234, 88, 12, 0);
333
+ }
334
+ 100% {
335
+ border-color: var(--kt-primary);
336
+ box-shadow: 0 0 0 0 rgba(234, 88, 12, 0);
337
+ }
338
+ }