@jjlmoya/utils-cooking 1.9.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,5 @@
1
1
  ---
2
2
  import { Icon } from 'astro-icon/components';
3
- import './IngredientRescaler.css';
4
3
 
5
4
  interface Props {
6
5
  ui: Record<string, string>;
@@ -105,3 +104,296 @@ ${ui.exampleLine4}`;
105
104
  init();
106
105
  }
107
106
  </script>
107
+
108
+ <style is:global>
109
+ :root {
110
+ --ir-primary: hsl(220deg, 90%, 56%);
111
+ --ir-primary-light: hsl(220deg, 90%, 92%);
112
+ --ir-bg-card: hsl(0deg, 0%, 100%);
113
+ --ir-bg-app: hsl(210deg, 20%, 98%);
114
+ --ir-border: hsl(210deg, 20%, 90%);
115
+ --ir-text-main: hsl(210deg, 30%, 20%);
116
+ --ir-text-muted: hsl(210deg, 15%, 50%);
117
+ --ir-shadow-lg: 0 10px 15px -3px rgb(0, 0, 0, 0.1);
118
+ --ir-radius: 1rem;
119
+ }
120
+
121
+ .theme-dark {
122
+ --ir-bg-card: hsl(220deg, 25%, 12%);
123
+ --ir-bg-app: hsl(220deg, 30%, 7%);
124
+ --ir-border: hsl(220deg, 20%, 20%);
125
+ --ir-text-main: hsl(210deg, 20%, 95%);
126
+ --ir-text-muted: hsl(210deg, 15%, 70%);
127
+ --ir-primary-light: hsl(220deg, 90%, 12%);
128
+ }
129
+ </style>
130
+
131
+ <style>
132
+ .ingredient-rescaler-container {
133
+ max-width: 100%;
134
+ padding: 1.5rem;
135
+ background: var(--ir-bg-card);
136
+ border: 1px solid var(--ir-border);
137
+ border-radius: var(--ir-radius);
138
+ box-shadow: var(--ir-shadow-lg);
139
+ }
140
+
141
+ .ir-grid {
142
+ display: grid;
143
+ grid-template-columns: 1fr;
144
+ gap: 2rem;
145
+ margin-bottom: 2rem;
146
+ }
147
+
148
+ @media (min-width: 768px) {
149
+ .ir-grid {
150
+ grid-template-columns: 1fr 1fr;
151
+ }
152
+ }
153
+
154
+ .ir-section {
155
+ background: var(--ir-bg-app);
156
+ padding: 1.5rem;
157
+ border-radius: 1.25rem;
158
+ border: 1px solid var(--ir-border);
159
+ }
160
+
161
+ .ir-section-primary {
162
+ background: var(--ir-bg-card);
163
+ border: 2px solid var(--ir-primary);
164
+ }
165
+
166
+ .ir-section-title {
167
+ font-size: 1.125rem;
168
+ font-weight: 700;
169
+ color: var(--ir-text-main);
170
+ margin-bottom: 1rem;
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 0.5rem;
174
+ }
175
+
176
+ .ir-section-primary .ir-section-title {
177
+ color: var(--ir-primary);
178
+ }
179
+
180
+ .ir-fields {
181
+ display: grid;
182
+ grid-template-columns: 1fr 1fr;
183
+ gap: 1rem;
184
+ margin-bottom: 1.5rem;
185
+ }
186
+
187
+ .ir-field {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 0.5rem;
191
+ }
192
+
193
+ .ir-label {
194
+ font-size: 0.75rem;
195
+ font-weight: 700;
196
+ color: var(--ir-text-muted);
197
+ text-transform: uppercase;
198
+ letter-spacing: 0.05em;
199
+ }
200
+
201
+ .ir-input {
202
+ width: 100%;
203
+ padding: 0.75rem 1rem;
204
+ border-radius: 0.75rem;
205
+ border: 1px solid var(--ir-border);
206
+ background: var(--ir-bg-card);
207
+ color: var(--ir-text-main);
208
+ font-weight: 600;
209
+ font-size: 1.125rem;
210
+ text-align: center;
211
+ transition: all 0.3s ease;
212
+ }
213
+
214
+ .ir-input:focus {
215
+ outline: none;
216
+ border-color: var(--ir-primary);
217
+ box-shadow: 0 0 0 3px hsl(220deg, 90%, 56%, 0.1);
218
+ }
219
+
220
+ .ir-factor-display {
221
+ margin-top: 1rem;
222
+ padding: 1rem;
223
+ background: var(--ir-primary-light);
224
+ border-radius: 0.75rem;
225
+ border: 1px solid var(--ir-primary);
226
+ display: flex;
227
+ justify-content: space-between;
228
+ align-items: center;
229
+ }
230
+
231
+ .ir-factor-label {
232
+ font-size: 0.875rem;
233
+ font-weight: 600;
234
+ color: var(--ir-text-muted);
235
+ }
236
+
237
+ .ir-factor-value {
238
+ font-size: 2rem;
239
+ font-weight: 800;
240
+ color: var(--ir-primary);
241
+ }
242
+
243
+ .ir-textarea-container {
244
+ display: flex;
245
+ flex-direction: column;
246
+ height: 100%;
247
+ gap: 0.5rem;
248
+ }
249
+
250
+ .ir-textarea {
251
+ width: 100%;
252
+ flex: 1;
253
+ min-height: 200px;
254
+ padding: 1rem;
255
+ border-radius: 0.75rem;
256
+ border: 1px solid var(--ir-border);
257
+ background: var(--ir-bg-card);
258
+ color: var(--ir-text-main);
259
+ font-size: 0.875rem;
260
+ resize: none;
261
+ line-height: 1.6;
262
+ transition: all 0.3s ease;
263
+ }
264
+
265
+ .ir-textarea:focus {
266
+ outline: none;
267
+ border-color: var(--ir-primary);
268
+ box-shadow: 0 0 0 3px hsl(220deg, 90%, 56%, 0.1);
269
+ }
270
+
271
+ .ir-textarea::placeholder {
272
+ color: hsl(210deg, 15%, 75%);
273
+ }
274
+
275
+ .ir-results-card {
276
+ background: var(--ir-text-main);
277
+ border-radius: 1.25rem;
278
+ border: 1px solid var(--ir-border);
279
+ overflow: hidden;
280
+ box-shadow: var(--ir-shadow-lg);
281
+ }
282
+
283
+ .ir-results-header {
284
+ padding: 1rem 1.5rem;
285
+ background: hsl(210deg, 30%, 15%);
286
+ border-bottom: 1px solid hsl(210deg, 30%, 25%);
287
+ display: flex;
288
+ justify-content: space-between;
289
+ align-items: center;
290
+ }
291
+
292
+ :global(.theme-dark) .ir-results-header {
293
+ background: hsl(220deg, 25%, 8%);
294
+ border-bottom-color: hsl(220deg, 25%, 20%);
295
+ }
296
+
297
+ .ir-results-title {
298
+ color: var(--ir-bg-card);
299
+ font-weight: 700;
300
+ display: flex;
301
+ align-items: center;
302
+ gap: 0.5rem;
303
+ }
304
+
305
+ .ir-copy-btn {
306
+ font-size: 0.75rem;
307
+ background: hsl(210deg, 30%, 35%);
308
+ color: var(--ir-bg-card);
309
+ padding: 0.5rem 1rem;
310
+ border-radius: 0.5rem;
311
+ border: none;
312
+ cursor: pointer;
313
+ transition: all 0.3s ease;
314
+ font-weight: 600;
315
+ display: flex;
316
+ align-items: center;
317
+ gap: 0.5rem;
318
+ }
319
+
320
+ :global(.theme-dark) .ir-copy-btn {
321
+ background: hsl(220deg, 25%, 30%);
322
+ }
323
+
324
+ .ir-copy-btn:hover {
325
+ background: hsl(210deg, 30%, 45%);
326
+ }
327
+
328
+ :global(.theme-dark) .ir-copy-btn:hover {
329
+ background: hsl(220deg, 25%, 40%);
330
+ }
331
+
332
+ .ir-copy-btn.ir-copied {
333
+ background: hsl(142deg, 72%, 45%);
334
+ }
335
+
336
+ .ir-results-container {
337
+ padding: 2rem;
338
+ font-size: 1rem;
339
+ display: flex;
340
+ flex-direction: column;
341
+ gap: 0.75rem;
342
+ min-height: 200px;
343
+ background: var(--ir-bg-card);
344
+ color: var(--ir-text-main);
345
+ }
346
+
347
+ .ir-empty-state {
348
+ height: 100%;
349
+ display: flex;
350
+ flex-direction: column;
351
+ align-items: center;
352
+ justify-content: center;
353
+ gap: 1rem;
354
+ opacity: 0.5;
355
+ color: var(--ir-text-muted);
356
+ }
357
+
358
+ .ir-empty-icon {
359
+ width: 3rem;
360
+ height: 3rem;
361
+ }
362
+
363
+ .ir-result-row {
364
+ display: flex;
365
+ justify-content: space-between;
366
+ align-items: center;
367
+ background: var(--ir-bg-app);
368
+ padding: 0.75rem;
369
+ border-radius: 0.5rem;
370
+ border-left: 4px solid transparent;
371
+ transition: all 0.3s ease;
372
+ }
373
+
374
+ .ir-result-row:hover {
375
+ background: var(--ir-primary-light);
376
+ border-left-color: var(--ir-primary);
377
+ }
378
+
379
+ .ir-original-amount {
380
+ color: hsl(210deg, 15%, 75%);
381
+ font-size: 0.75rem;
382
+ text-decoration: line-through;
383
+ opacity: 0.75;
384
+ }
385
+
386
+ .ir-new-value {
387
+ color: var(--ir-primary);
388
+ font-weight: 800;
389
+ font-size: 1.125rem;
390
+ }
391
+
392
+ .ir-no-amount-row {
393
+ color: var(--ir-text-muted);
394
+ font-style: italic;
395
+ font-size: 0.875rem;
396
+ padding: 0.5rem;
397
+ background: transparent;
398
+ }
399
+ </style>
@@ -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>