@jjlmoya/utils-cooking 1.8.0 → 1.10.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,6 +1,4 @@
1
1
  ---
2
- import "./MeringueCalculator.css";
3
-
4
2
  interface Props {
5
3
  ui: Record<string, string>;
6
4
  }
@@ -167,3 +165,304 @@ const { ui } = Astro.props;
167
165
 
168
166
  calculate();
169
167
  </script>
168
+
169
+ <style>
170
+ .meringue-calculator-container {
171
+ --primary: #f472b6;
172
+ --primary-dark: #db2777;
173
+ --text-dark: #1e293b;
174
+ --text-muted: #64748b;
175
+ --text-light: #cbd5e1;
176
+ --bg-light: #f1f5f9;
177
+ --border-dark: #334155;
178
+ --border-muted: #e2e8f0;
179
+ --pink-light: #f472b6;
180
+ --card-bg: #fff;
181
+ --card-border: #e2e8f0;
182
+ --card-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.1);
183
+ --card-hover-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.15);
184
+ --input-bg: #fff;
185
+ --input-border: #e2e8f0;
186
+ --input-dark-bg: #334155;
187
+ --input-dark-border: #475569;
188
+ --time-bg: #f1f5f9;
189
+ --pro-tip-bg: #fdf2f8;
190
+ --pro-tip-border: #f472b6;
191
+
192
+ max-width: 800px;
193
+ margin: 2rem auto;
194
+ padding: 1rem;
195
+ display: flex;
196
+ flex-direction: column;
197
+ gap: 2rem;
198
+ }
199
+
200
+ :global(.theme-dark) .meringue-calculator-container {
201
+ --text-dark: #f1f5f9;
202
+ --text-muted: #94a3b8;
203
+ --text-light: #cbd5e1;
204
+ --bg-light: #1e293b;
205
+ --border-dark: #475569;
206
+ --border-muted: #334155;
207
+ --card-bg: #1e293b;
208
+ --card-border: #334155;
209
+ --card-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.5);
210
+ --card-hover-shadow: 0 12px 40px 0 rgba(0, 0, 0, 0.3);
211
+ --input-bg: #334155;
212
+ --input-border: #475569;
213
+ --input-dark-bg: #1e293b;
214
+ --input-dark-border: #475569;
215
+ --time-bg: #1e293b;
216
+ --pro-tip-bg: #4c1d3a;
217
+ --pro-tip-border: #db2777;
218
+ }
219
+
220
+ .meringue-card {
221
+ background: var(--card-bg);
222
+ backdrop-filter: blur(12px);
223
+ -webkit-backdrop-filter: blur(12px);
224
+ border: 1px solid var(--card-border);
225
+ border-radius: 24px;
226
+ padding: 2.5rem;
227
+ box-shadow: var(--card-shadow);
228
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
229
+ }
230
+
231
+ .meringue-card:hover {
232
+ transform: translateY(-4px);
233
+ box-shadow: var(--card-hover-shadow);
234
+ }
235
+
236
+ .meringue-input-section {
237
+ display: grid;
238
+ grid-template-columns: 1fr 1fr;
239
+ gap: 2rem;
240
+ margin-bottom: 2.5rem;
241
+ }
242
+
243
+ @media (max-width: 640px) {
244
+ .meringue-input-section {
245
+ grid-template-columns: 1fr;
246
+ }
247
+ }
248
+
249
+ .meringue-input-group {
250
+ display: flex;
251
+ flex-direction: column;
252
+ gap: 0.75rem;
253
+ }
254
+
255
+ .meringue-input-group label {
256
+ font-size: 0.875rem;
257
+ font-weight: 700;
258
+ color: var(--text-muted);
259
+ text-transform: uppercase;
260
+ letter-spacing: 0.05em;
261
+ }
262
+
263
+ .meringue-input-wrapper {
264
+ position: relative;
265
+ display: flex;
266
+ align-items: center;
267
+ }
268
+
269
+ .meringue-input-wrapper input {
270
+ width: 100%;
271
+ padding: 1rem 1.25rem;
272
+ padding-right: 3rem;
273
+ border-radius: 16px;
274
+ border: 2px solid var(--input-border);
275
+ background: var(--input-bg);
276
+ font-size: 1.125rem;
277
+ font-weight: 600;
278
+ color: var(--text-dark);
279
+ transition: all 0.2s ease;
280
+ outline: none;
281
+ }
282
+
283
+ .meringue-input-wrapper input:focus {
284
+ border-color: var(--primary);
285
+ box-shadow: 0 0 0 4px rgba(244, 114, 182, 0.1);
286
+ }
287
+
288
+ :global(.theme-dark) .meringue-input-wrapper input:focus {
289
+ box-shadow: 0 0 0 4px rgba(244, 114, 182, 0.2);
290
+ }
291
+
292
+ .meringue-input-unit {
293
+ position: absolute;
294
+ right: 1.25rem;
295
+ font-weight: 700;
296
+ color: var(--text-light);
297
+ pointer-events: none;
298
+ }
299
+
300
+ .meringue-type-selector {
301
+ display: flex;
302
+ background: var(--bg-light);
303
+ padding: 0.5rem;
304
+ border-radius: 16px;
305
+ gap: 0.25rem;
306
+ }
307
+
308
+ .meringue-type-btn {
309
+ flex: 1;
310
+ padding: 0.75rem;
311
+ border: none;
312
+ background: transparent;
313
+ border-radius: 12px;
314
+ font-size: 0.875rem;
315
+ font-weight: 600;
316
+ color: var(--text-muted);
317
+ cursor: pointer;
318
+ transition: all 0.2s ease;
319
+ }
320
+
321
+ .meringue-type-btn.active {
322
+ background: var(--card-bg);
323
+ color: var(--primary-dark);
324
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
325
+ }
326
+
327
+ :global(.theme-dark) .meringue-type-btn.active {
328
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
329
+ }
330
+
331
+ .meringue-results-grid {
332
+ display: grid;
333
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
334
+ gap: 1.5rem;
335
+ }
336
+
337
+ .meringue-result-item {
338
+ background: var(--time-bg);
339
+ border: 1px solid var(--card-border);
340
+ border-radius: 20px;
341
+ padding: 1.5rem;
342
+ display: flex;
343
+ flex-direction: column;
344
+ gap: 0.5rem;
345
+ transition: all 0.2s ease;
346
+ }
347
+
348
+ .meringue-result-item:hover {
349
+ background: var(--card-bg);
350
+ transform: scale(1.02);
351
+ }
352
+
353
+ .meringue-result-label {
354
+ font-size: 0.75rem;
355
+ font-weight: 700;
356
+ color: var(--text-light);
357
+ text-transform: uppercase;
358
+ }
359
+
360
+ .meringue-result-value {
361
+ font-size: 1.5rem;
362
+ font-weight: 800;
363
+ color: var(--text-dark);
364
+ display: flex;
365
+ align-items: baseline;
366
+ gap: 0.25rem;
367
+ }
368
+
369
+ .meringue-result-unit {
370
+ font-size: 0.875rem;
371
+ font-weight: 600;
372
+ color: var(--text-light);
373
+ }
374
+
375
+ .meringue-time-section {
376
+ margin-top: 2.5rem;
377
+ padding-top: 2.5rem;
378
+ border-top: 1px solid var(--card-border);
379
+ }
380
+
381
+ .meringue-time-grid {
382
+ display: flex;
383
+ flex-direction: column;
384
+ gap: 1rem;
385
+ }
386
+
387
+ .meringue-time-row {
388
+ display: flex;
389
+ align-items: center;
390
+ justify-content: space-between;
391
+ padding: 1rem 1.5rem;
392
+ border-radius: 16px;
393
+ background: var(--time-bg);
394
+ transition: all 0.2s ease;
395
+ }
396
+
397
+ .meringue-time-info {
398
+ display: flex;
399
+ flex-direction: column;
400
+ }
401
+
402
+ .meringue-time-stage {
403
+ font-weight: 700;
404
+ color: var(--border-dark);
405
+ }
406
+
407
+ .meringue-time-desc {
408
+ font-size: 0.75rem;
409
+ color: var(--text-muted);
410
+ }
411
+
412
+ .meringue-time-val {
413
+ font-weight: 800;
414
+ color: var(--primary-dark);
415
+ font-size: 1.125rem;
416
+ }
417
+
418
+ :global(.theme-dark) .meringue-time-val {
419
+ color: var(--primary);
420
+ }
421
+
422
+ .meringue-pro-tip {
423
+ margin-top: 2rem;
424
+ padding: 1.25rem;
425
+ border-radius: 16px;
426
+ background: var(--pro-tip-bg);
427
+ border: 1px dashed var(--pro-tip-border);
428
+ display: flex;
429
+ gap: 1rem;
430
+ align-items: center;
431
+ }
432
+
433
+ .meringue-pro-tip svg {
434
+ color: var(--primary-dark);
435
+ flex-shrink: 0;
436
+ }
437
+
438
+ :global(.theme-dark) .meringue-pro-tip svg {
439
+ color: var(--primary);
440
+ }
441
+
442
+ .meringue-pro-tip p {
443
+ font-size: 0.875rem;
444
+ color: var(--primary-dark);
445
+ line-height: 1.5;
446
+ margin: 0;
447
+ }
448
+
449
+ :global(.theme-dark) .meringue-pro-tip p {
450
+ color: var(--pink-light);
451
+ }
452
+
453
+ .meringue-fade-in {
454
+ animation: meringue-fade-in 0.5s ease forwards;
455
+ }
456
+
457
+ @keyframes meringue-fade-in {
458
+ from {
459
+ opacity: 0;
460
+ transform: translateY(10px);
461
+ }
462
+
463
+ to {
464
+ opacity: 1;
465
+ transform: translateY(0);
466
+ }
467
+ }
468
+ </style>
@@ -1,5 +1,4 @@
1
1
  ---
2
- import './MoldScaler.css';
3
2
 
4
3
  interface Props {
5
4
  ui: Record<string, string>;
@@ -124,3 +123,364 @@ const { ui } = Astro.props;
124
123
  }
125
124
  </script>
126
125
 
126
+ <style>
127
+ :root {
128
+ --ms-primary: hsl(262deg, 83%, 58%);
129
+ --ms-primary-light: hsl(262deg, 83%, 95%);
130
+ --ms-primary-dark: hsl(262deg, 83%, 45%);
131
+ --ms-bg-card: hsl(0deg, 0%, 100%);
132
+ --ms-bg-app: hsl(210deg, 20%, 98%);
133
+ --ms-border: hsl(210deg, 20%, 90%);
134
+ --ms-text-main: hsl(210deg, 30%, 20%);
135
+ --ms-text-muted: hsl(210deg, 15%, 50%);
136
+ --ms-shadow-lg: 0 10px 15px -3px rgb(0, 0, 0, 0.1);
137
+ --ms-radius: 1rem;
138
+ --ms-transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
139
+ }
140
+
141
+ :global(.theme-dark) {
142
+ --ms-bg-card: hsl(220deg, 25%, 12%);
143
+ --ms-bg-app: hsl(220deg, 30%, 7%);
144
+ --ms-border: hsl(220deg, 20%, 20%);
145
+ --ms-text-main: hsl(210deg, 20%, 95%);
146
+ --ms-text-muted: hsl(210deg, 15%, 70%);
147
+ --ms-primary-light: hsl(262deg, 83%, 15%);
148
+ }
149
+
150
+ .mold-scaler-container {
151
+ max-width: 1000px;
152
+ margin: 0 auto;
153
+ padding: 1rem;
154
+ }
155
+
156
+ .ms-card {
157
+ background: var(--ms-bg-card);
158
+ border: 1px solid var(--ms-border);
159
+ border-radius: var(--ms-radius);
160
+ box-shadow: var(--ms-shadow-lg);
161
+ overflow: hidden;
162
+ display: flex;
163
+ flex-direction: column;
164
+ }
165
+
166
+ @media (min-width: 1024px) {
167
+ .ms-card {
168
+ flex-direction: row;
169
+ min-height: 700px;
170
+ }
171
+ }
172
+
173
+ .ms-sidebar {
174
+ flex: 1;
175
+ padding: 2rem;
176
+ border-bottom: 1px solid var(--ms-border);
177
+ background: linear-gradient(to bottom, var(--ms-bg-card), var(--ms-primary-light));
178
+ }
179
+
180
+ @media (min-width: 1024px) {
181
+ .ms-sidebar {
182
+ border-bottom: none;
183
+ border-right: 1px solid var(--ms-border);
184
+ max-width: 450px;
185
+ }
186
+ }
187
+
188
+ .ms-main {
189
+ flex: 1.5;
190
+ padding: 2rem;
191
+ display: flex;
192
+ flex-direction: column;
193
+ gap: 2rem;
194
+ }
195
+
196
+ .ms-section {
197
+ margin-bottom: 2rem;
198
+ }
199
+
200
+ .ms-section-title {
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 0.75rem;
204
+ font-size: 1.25rem;
205
+ font-weight: 700;
206
+ color: var(--ms-text-main);
207
+ margin-bottom: 1.5rem;
208
+ }
209
+
210
+ .ms-section-badge {
211
+ display: flex;
212
+ align-items: center;
213
+ justify-content: center;
214
+ width: 1.75rem;
215
+ height: 1.75rem;
216
+ background: var(--ms-primary);
217
+ color: var(--ms-bg-card);
218
+ border-radius: 50%;
219
+ font-size: 0.875rem;
220
+ }
221
+
222
+ .ms-shape-selector {
223
+ display: grid;
224
+ grid-template-columns: repeat(3, 1fr);
225
+ gap: 0.75rem;
226
+ margin-bottom: 1.25rem;
227
+ }
228
+
229
+ .ms-shape-btn {
230
+ display: flex;
231
+ flex-direction: column;
232
+ align-items: center;
233
+ padding: 0.75rem;
234
+ border-radius: 0.75rem;
235
+ border: 1px solid var(--ms-border);
236
+ background: var(--ms-bg-card);
237
+ color: var(--ms-text-muted);
238
+ cursor: pointer;
239
+ transition: var(--ms-transition);
240
+ font-size: 0.875rem;
241
+ font-weight: 600;
242
+ }
243
+
244
+ .ms-shape-btn:hover {
245
+ border-color: var(--ms-primary);
246
+ color: var(--ms-primary);
247
+ }
248
+
249
+ .ms-shape-btn.active {
250
+ background: var(--ms-primary);
251
+ color: var(--ms-bg-card);
252
+ border-color: var(--ms-primary);
253
+ box-shadow: 0 4px 12px hsla(262deg, 83%, 58%, 0.3);
254
+ }
255
+
256
+ .ms-shape-icon {
257
+ width: 2rem;
258
+ height: 2rem;
259
+ margin-bottom: 0.5rem;
260
+ border: 2px solid currentcolor;
261
+ transition: var(--ms-transition);
262
+ }
263
+
264
+ .ms-shape-btn[data-shape="round"] .ms-shape-icon {
265
+ border-radius: 50%;
266
+ }
267
+
268
+ .ms-shape-btn[data-shape="square"] .ms-shape-icon {
269
+ border-radius: 4px;
270
+ }
271
+
272
+ .ms-shape-btn[data-shape="rectangular"] .ms-shape-icon {
273
+ border-radius: 2px;
274
+ width: 2.5rem;
275
+ }
276
+
277
+ .ms-input-group {
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: 0.5rem;
281
+ }
282
+
283
+ .ms-label {
284
+ font-size: 0.75rem;
285
+ font-weight: 700;
286
+ color: var(--ms-text-muted);
287
+ text-transform: uppercase;
288
+ letter-spacing: 0.05em;
289
+ }
290
+
291
+ .ms-input {
292
+ width: 100%;
293
+ padding: 0.75rem 1rem;
294
+ border-radius: 0.5rem;
295
+ border: 1px solid var(--ms-border);
296
+ background: var(--ms-bg-card);
297
+ color: var(--ms-text-main);
298
+ font-weight: 600;
299
+ transition: var(--ms-transition);
300
+ }
301
+
302
+ .ms-input:focus {
303
+ outline: none;
304
+ border-color: var(--ms-primary);
305
+ box-shadow: 0 0 0 3px hsla(262deg, 83%, 58%, 0.1);
306
+ }
307
+
308
+ .ms-hero-result {
309
+ text-align: center;
310
+ padding: 2.5rem;
311
+ background: linear-gradient(135deg, var(--ms-primary), var(--ms-primary-dark));
312
+ color: var(--ms-bg-card);
313
+ border-radius: var(--ms-radius);
314
+ box-shadow: var(--ms-shadow-md);
315
+ position: relative;
316
+ overflow: hidden;
317
+ }
318
+
319
+ .ms-result-label {
320
+ font-size: 0.875rem;
321
+ font-weight: 600;
322
+ text-transform: uppercase;
323
+ letter-spacing: 0.1em;
324
+ opacity: 0.8;
325
+ margin-bottom: 0.5rem;
326
+ }
327
+
328
+ .ms-result-value {
329
+ font-size: 4rem;
330
+ font-weight: 800;
331
+ margin-bottom: 0.5rem;
332
+ line-height: 1;
333
+ }
334
+
335
+ .ms-result-text {
336
+ font-size: 1rem;
337
+ opacity: 0.9;
338
+ max-width: 300px;
339
+ margin: 0 auto;
340
+ }
341
+
342
+ .ms-viz-container {
343
+ background: var(--ms-bg-app);
344
+ border: 1px solid var(--ms-border);
345
+ border-radius: var(--ms-radius);
346
+ padding: 1.5rem;
347
+ position: relative;
348
+ aspect-ratio: 4 / 3;
349
+ display: flex;
350
+ flex-direction: column;
351
+ }
352
+
353
+ .ms-viz-svg {
354
+ flex: 1;
355
+ width: 100%;
356
+ height: 100%;
357
+ }
358
+
359
+ .ms-viz-legend {
360
+ display: flex;
361
+ justify-content: center;
362
+ gap: 1.5rem;
363
+ padding-top: 1rem;
364
+ font-size: 0.75rem;
365
+ font-weight: 600;
366
+ }
367
+
368
+ .ms-legend-item {
369
+ display: flex;
370
+ align-items: center;
371
+ gap: 0.5rem;
372
+ }
373
+
374
+ .ms-dot {
375
+ width: 0.75rem;
376
+ height: 0.75rem;
377
+ border-radius: 50%;
378
+ }
379
+
380
+ .ms-dot.original {
381
+ background: var(--ms-primary);
382
+ opacity: 0.5;
383
+ border: 1px dashed var(--ms-primary);
384
+ }
385
+
386
+ .ms-dot.target {
387
+ background: hsl(150deg, 80%, 40%);
388
+ opacity: 0.8;
389
+ border: 1px solid hsl(150deg, 80%, 40%);
390
+ }
391
+
392
+ .ms-ingredients-card {
393
+ border: 1px solid var(--ms-border);
394
+ border-radius: var(--ms-radius);
395
+ padding: 1.5rem;
396
+ }
397
+
398
+ .ms-ingredients-list {
399
+ display: flex;
400
+ flex-direction: column;
401
+ gap: 0.75rem;
402
+ margin-bottom: 1.5rem;
403
+ }
404
+
405
+ .ms-ingredient-row {
406
+ display: grid;
407
+ grid-template-columns: 1fr;
408
+ gap: 0.75rem;
409
+ padding: 1rem;
410
+ background: var(--ms-bg-app);
411
+ border-radius: 0.75rem;
412
+ border: 1px solid var(--ms-border);
413
+ position: relative;
414
+ animation: slide-in 0.3s ease-out;
415
+ }
416
+
417
+ @keyframes slide-in {
418
+ from {
419
+ opacity: 0;
420
+ transform: translateY(10px);
421
+ }
422
+ to {
423
+ opacity: 1;
424
+ transform: translateY(0);
425
+ }
426
+ }
427
+
428
+ @media (min-width: 640px) {
429
+ .ms-ingredient-row {
430
+ grid-template-columns: 2fr 1fr 1fr auto;
431
+ align-items: center;
432
+ }
433
+ }
434
+
435
+ .ms-ingredient-final {
436
+ font-weight: 800;
437
+ color: hsl(150deg, 80%, 40%);
438
+ font-size: 1.125rem;
439
+ padding: 0.5rem;
440
+ text-align: center;
441
+ }
442
+
443
+ .ms-del-btn {
444
+ background: transparent;
445
+ border: none;
446
+ color: var(--ms-text-muted);
447
+ cursor: pointer;
448
+ padding: 0.5rem;
449
+ border-radius: 0.5rem;
450
+ transition: var(--ms-transition);
451
+ }
452
+
453
+ .ms-del-btn:hover {
454
+ background: hsl(0deg, 85%, 60%);
455
+ color: var(--ms-bg-card);
456
+ }
457
+
458
+ .ms-add-btn {
459
+ width: 100%;
460
+ padding: 1rem;
461
+ background: transparent;
462
+ border: 2px dashed var(--ms-primary);
463
+ color: var(--ms-primary);
464
+ border-radius: 0.75rem;
465
+ font-weight: 700;
466
+ cursor: pointer;
467
+ transition: var(--ms-transition);
468
+ display: flex;
469
+ align-items: center;
470
+ justify-content: center;
471
+ gap: 0.5rem;
472
+ }
473
+
474
+ .ms-add-btn:hover {
475
+ background: var(--ms-primary-light);
476
+ border-style: solid;
477
+ }
478
+
479
+ .ms-empty-state {
480
+ text-align: center;
481
+ padding: 2rem;
482
+ color: var(--ms-text-muted);
483
+ font-style: italic;
484
+ }
485
+ </style>
486
+