@jjlmoya/utils-cooking 1.23.0 → 1.24.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-cooking",
3
- "version": "1.23.0",
3
+ "version": "1.24.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -1,22 +1,473 @@
1
1
  :root {
2
- --cw-primary: hsl(240deg, 94%, 60%);
3
- --cw-primary-light: hsl(240deg, 100%, 95%);
4
- --cw-bg-card: hsl(0deg, 0%, 100%);
5
- --cw-bg-app: hsl(210deg, 40%, 98%);
6
- --cw-border: hsl(210deg, 14%, 89%);
7
- --cw-text-main: hsl(210deg, 40%, 14%);
8
- --cw-text-muted: hsl(210deg, 8%, 40%);
9
- --cw-text-light: hsl(210deg, 40%, 98%);
10
- --cw-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);
11
- --cw-radius: 1.5rem;
2
+ --cw-primary: hsl(240deg, 94%, 60%);
3
+ --cw-primary-light: hsl(240deg, 100%, 95%);
4
+ --cw-bg-card: hsl(0deg, 0%, 100%);
5
+ --cw-bg-app: hsl(210deg, 40%, 98%);
6
+ --cw-border: hsl(210deg, 14%, 89%);
7
+ --cw-text-main: hsl(210deg, 40%, 14%);
8
+ --cw-text-muted: hsl(210deg, 8%, 40%);
9
+ --cw-text-light: hsl(210deg, 40%, 98%);
10
+ --cw-shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1);
11
+ --cw-radius: 1.5rem;
12
+ }
13
+
14
+ .theme-dark {
15
+ --cw-bg-card: hsl(217deg, 33%, 12%);
16
+ --cw-bg-app: hsl(217deg, 39%, 8%);
17
+ --cw-border: hsl(217deg, 33%, 25%);
18
+ --cw-text-main: hsl(210deg, 40%, 98%);
19
+ --cw-text-muted: hsl(210deg, 14%, 75%);
20
+ --cw-text-light: hsl(210deg, 40%, 98%);
21
+ --cw-primary-light: hsl(240deg, 100%, 20%);
22
+ }
23
+
24
+ .cw-container {
25
+ width: 100%;
26
+ max-width: 100%;
27
+ padding: 1rem;
28
+ }
29
+
30
+ .cw-card {
31
+ background: var(--cw-bg-card);
32
+ border: 1px solid var(--cw-border);
33
+ border-radius: var(--cw-radius);
34
+ box-shadow: var(--cw-shadow-xl);
35
+ overflow: hidden;
36
+ transition: all 0.3s ease;
37
+ }
38
+
39
+ .cw-progress-bar {
40
+ height: 0.375rem;
41
+ width: 0%;
42
+ background: linear-gradient(to right, var(--cw-primary), hsl(270deg, 94%, 60%));
43
+ transition: width 0.5s ease;
44
+ }
45
+
46
+ .cw-content {
47
+ padding: 2rem;
48
+ }
49
+
50
+ @media (max-width: 1024px) {
51
+ .cw-content {
52
+ padding: 1.5rem;
53
+ }
54
+ }
55
+
56
+ @media (max-width: 640px) {
57
+ .cw-content {
58
+ padding: 1rem;
59
+ }
60
+ }
61
+
62
+ .cw-grid {
63
+ display: grid;
64
+ grid-template-columns: 1fr;
65
+ gap: 2rem;
66
+ }
67
+
68
+ @media (min-width: 1024px) {
69
+ .cw-grid {
70
+ grid-template-columns: 1.4fr 1fr;
71
+ gap: 2rem;
12
72
  }
73
+ }
74
+
75
+ .cw-left {
76
+ display: flex;
77
+ flex-direction: column;
78
+ gap: 2rem;
79
+ }
80
+
81
+ .cw-right {
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: 1.5rem;
85
+ }
86
+
87
+ .cw-section {
88
+ display: flex;
89
+ flex-direction: column;
90
+ gap: 1rem;
91
+ }
92
+
93
+ .cw-step-label {
94
+ display: flex;
95
+ align-items: center;
96
+ gap: 0.75rem;
97
+ font-size: 0.625rem;
98
+ font-weight: 900;
99
+ color: var(--cw-text-muted);
100
+ text-transform: uppercase;
101
+ letter-spacing: 0.2em;
102
+ }
103
+
104
+ .cw-step-number {
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ width: 1.25rem;
109
+ height: 1.25rem;
110
+ border-radius: 50%;
111
+ background: var(--cw-primary-light);
112
+ color: var(--cw-primary);
113
+ font-weight: 900;
114
+ font-size: 0.625rem;
115
+ flex-shrink: 0;
116
+ }
117
+
118
+ .theme-dark .cw-step-number {
119
+ background: hsl(240deg, 100%, 20%);
120
+ }
121
+
122
+ .cw-style-grid {
123
+ display: grid;
124
+ grid-template-columns: repeat(2, 1fr);
125
+ gap: 0.75rem;
126
+ }
127
+
128
+ .cw-style-btn {
129
+ display: flex;
130
+ flex-direction: column;
131
+ align-items: flex-start;
132
+ gap: 0.5rem;
133
+ padding: 1rem;
134
+ border: 2px solid var(--cw-border);
135
+ border-radius: 0.75rem;
136
+ background: var(--cw-bg-card);
137
+ color: var(--cw-text-muted);
138
+ cursor: pointer;
139
+ transition: all 0.3s ease;
140
+ text-align: left;
141
+ font-size: inherit;
142
+ }
143
+
144
+ .cw-style-btn:hover {
145
+ border-color: var(--cw-primary-light);
146
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
147
+ }
148
+
149
+ .cw-style-btn.active {
150
+ background: var(--cw-primary-light);
151
+ border-color: var(--cw-primary);
152
+ color: var(--cw-primary);
153
+ }
154
+
155
+ .theme-dark .cw-style-btn.active {
156
+ background: hsl(240deg, 100%, 35%);
157
+ color: hsl(0deg, 0%, 100%);
158
+ }
159
+
160
+ .theme-dark .cw-style-btn.active .cw-style-name {
161
+ color: hsl(0deg, 0%, 100%);
162
+ }
163
+
164
+ .theme-dark .cw-style-btn.active .cw-style-desc {
165
+ color: hsl(0deg, 0%, 100%);
166
+ }
167
+
168
+ .cw-icon {
169
+ width: 1.5rem;
170
+ height: 1.5rem;
171
+ }
172
+
173
+ .cw-icon-large {
174
+ width: 6rem;
175
+ height: 6rem;
176
+ color: var(--cw-text-light);
177
+ }
178
+
179
+ .cw-icon-orange {
180
+ color: hsl(33deg, 100%, 50%);
181
+ }
182
+
183
+ .cw-icon-yellow {
184
+ color: hsl(45deg, 100%, 50%);
185
+ }
186
+
187
+ .cw-icon-red {
188
+ color: hsl(0deg, 100%, 50%);
189
+ }
190
+
191
+ .cw-icon-blue {
192
+ color: hsl(217deg, 100%, 50%);
193
+ }
194
+
195
+ .cw-style-name {
196
+ font-size: 0.75rem;
197
+ font-weight: 900;
198
+ display: block;
199
+ color: var(--cw-text-main);
200
+ }
201
+
202
+ .cw-style-btn.active .cw-style-name {
203
+ color: var(--cw-primary);
204
+ }
205
+
206
+ .cw-style-desc {
207
+ font-weight: 600;
208
+ opacity: 0.7;
209
+ display: block;
210
+ text-transform: uppercase;
211
+ }
212
+
213
+ .cw-maint-grid {
214
+ display: grid;
215
+ grid-template-columns: 1fr;
216
+ gap: 0.75rem;
217
+ }
218
+
219
+ @media (min-width: 640px) {
220
+ .cw-maint-grid {
221
+ grid-template-columns: repeat(3, 1fr);
222
+ }
223
+ }
224
+
225
+ .cw-maint-btn {
226
+ display: flex;
227
+ flex-direction: column;
228
+ align-items: center;
229
+ text-align: center;
230
+ gap: 0.75rem;
231
+ padding: 1.25rem;
232
+ border: 2px solid var(--cw-border);
233
+ border-radius: 0.75rem;
234
+ background: var(--cw-bg-card);
235
+ color: var(--cw-text-muted);
236
+ cursor: pointer;
237
+ transition: all 0.3s ease;
238
+ font-size: inherit;
239
+ }
240
+
241
+ .cw-maint-btn:hover {
242
+ border-color: var(--cw-primary-light);
243
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
244
+ }
245
+
246
+ .cw-maint-btn.active {
247
+ background: var(--cw-primary-light);
248
+ border-color: var(--cw-primary);
249
+ }
250
+
251
+ .theme-dark .cw-maint-btn.active {
252
+ background: hsl(240deg, 100%, 20%);
253
+ }
254
+
255
+ .cw-maint-icon {
256
+ width: 3rem;
257
+ height: 3rem;
258
+ border-radius: 0.75rem;
259
+ background: var(--cw-bg-app);
260
+ display: flex;
261
+ align-items: center;
262
+ justify-content: center;
263
+ color: var(--cw-text-muted);
264
+ transition: all 0.3s ease;
265
+ }
266
+
267
+ .cw-maint-btn.active .cw-maint-icon {
268
+ color: var(--cw-primary);
269
+ }
270
+
271
+ .cw-maint-btn:hover .cw-maint-icon {
272
+ color: var(--cw-primary);
273
+ }
274
+
275
+ .cw-maint-name {
276
+ font-size: 0.75rem;
277
+ font-weight: 900;
278
+ display: block;
279
+ color: var(--cw-text-main);
280
+ }
281
+
282
+ .cw-maint-btn.active .cw-maint-name {
283
+ color: var(--cw-primary);
284
+ }
285
+
286
+ .cw-maint-desc {
287
+ font-size: 0.625rem;
288
+ font-weight: 500;
289
+ opacity: 0.7;
290
+ display: block;
291
+ line-height: 1.3;
292
+ }
293
+
294
+ .cw-result-card {
295
+ background: hsl(217deg, 33%, 17%);
296
+ border-radius: var(--cw-radius);
297
+ padding: 2rem;
298
+ color: hsl(0deg, 0%, 100%);
299
+ box-shadow: var(--cw-shadow-xl);
300
+ position: relative;
301
+ overflow: hidden;
302
+ min-height: 320px;
303
+ display: flex;
304
+ flex-direction: column;
305
+ justify-content: center;
306
+ transition: all 0.3s ease;
307
+ }
308
+
309
+ .cw-card-bg {
310
+ position: absolute;
311
+ inset: 0;
312
+ background: linear-gradient(135deg, hsl(217deg, 33%, 17%), hsl(217deg, 33%, 7%));
313
+ transition: background 1s ease;
314
+ }
315
+
316
+ .cw-card-glow {
317
+ position: absolute;
318
+ right: -3rem;
319
+ top: -3rem;
320
+ width: 12rem;
321
+ height: 12rem;
322
+ background: rgba(255, 255, 255, 0.1);
323
+ border-radius: 50%;
324
+ filter: blur(3rem);
325
+ transition: transform 0.7s ease;
326
+ }
327
+
328
+ .cw-result-card:hover .cw-card-glow {
329
+ transform: scale(1.25);
330
+ }
331
+
332
+ .cw-card-content {
333
+ position: relative;
334
+ z-index: 10;
335
+ display: flex;
336
+ flex-direction: column;
337
+ gap: 1.5rem;
338
+ text-align: center;
339
+ }
340
+
341
+ .cw-icon-container {
342
+ display: flex;
343
+ justify-content: center;
344
+ align-items: center;
345
+ height: 6rem;
346
+ }
347
+
348
+ .cw-result-icon {
349
+ display: none;
350
+ }
351
+
352
+ .cw-result-icon:not(.cw-hidden) {
353
+ display: block;
354
+ }
355
+
356
+ .cw-result-label {
357
+ font-size: 0.625rem;
358
+ font-weight: 900;
359
+ text-transform: uppercase;
360
+ letter-spacing: 0.3em;
361
+ color: rgba(255, 255, 255, 0.4);
362
+ margin-bottom: 0.5rem;
363
+ }
364
+
365
+ .cw-result-name {
366
+ font-size: 1.875rem;
367
+ font-weight: 900;
368
+ letter-spacing: -0.02em;
369
+ margin: 0;
370
+ }
371
+
372
+ .cw-result-tag {
373
+ font-size: 0.75rem;
374
+ font-weight: 500;
375
+ color: rgba(255, 255, 255, 0.6);
376
+ margin: 0;
377
+ }
378
+
379
+ .cw-result-details {
380
+ display: none;
381
+ grid-template-columns: 1fr 1fr;
382
+ gap: 0.75rem;
383
+ padding-top: 1rem;
384
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
385
+ }
386
+
387
+ .cw-result-details:not(.cw-hidden) {
388
+ display: grid;
389
+ }
390
+
391
+ .cw-detail-box {
392
+ background: rgba(255, 255, 255, 0.05);
393
+ border: 1px solid rgba(255, 255, 255, 0.05);
394
+ border-radius: 0.75rem;
395
+ padding: 0.75rem;
396
+ }
397
+
398
+ .cw-detail-label {
399
+ font-size: 0.5rem;
400
+ font-weight: 900;
401
+ text-transform: uppercase;
402
+ letter-spacing: 0.1em;
403
+ display: block;
404
+ margin-bottom: 0.25rem;
405
+ }
406
+
407
+ .cw-detail-text {
408
+ font-size: 0.625rem;
409
+ line-height: 1.4;
410
+ color: rgba(255, 255, 255, 0.9);
411
+ margin: 0;
412
+ }
413
+
414
+ .cw-tip-card {
415
+ background: var(--cw-bg-app);
416
+ border: 1px solid var(--cw-border);
417
+ border-radius: var(--cw-radius);
418
+ padding: 1.5rem;
419
+ display: flex;
420
+ flex-direction: column;
421
+ gap: 1rem;
422
+ }
423
+
424
+ .cw-tip-header {
425
+ display: flex;
426
+ align-items: center;
427
+ gap: 0.75rem;
428
+ }
429
+
430
+ .cw-tip-icon {
431
+ padding: 0.5rem;
432
+ background: var(--cw-primary-light);
433
+ border-radius: 0.75rem;
434
+ display: flex;
435
+ align-items: center;
436
+ justify-content: center;
437
+ color: var(--cw-primary);
438
+ flex-shrink: 0;
439
+ }
440
+
441
+ .theme-dark .cw-tip-icon {
442
+ background: hsl(240deg, 100%, 20%);
443
+ }
444
+
445
+ .cw-tip-title {
446
+ font-size: 0.875rem;
447
+ font-weight: 900;
448
+ color: var(--cw-text-main);
449
+ text-transform: uppercase;
450
+ letter-spacing: 0.05em;
451
+ }
452
+
453
+ .cw-tip-text {
454
+ font-size: 0.6875rem;
455
+ line-height: 1.6;
456
+ color: var(--cw-text-muted);
457
+ font-weight: 400;
458
+ font-style: italic;
459
+ background: rgba(var(--cw-primary-rgb, 99, 102, 241), 0.03);
460
+ padding: 1.25rem;
461
+ border-radius: 0.75rem;
462
+ border: 1px solid var(--cw-border);
463
+ margin: 0;
464
+ }
465
+
466
+ .theme-dark .cw-tip-text {
467
+ color: var(--cw-text-main);
468
+ background: rgba(255, 255, 255, 0.03);
469
+ }
13
470
 
14
- .theme-dark {
15
- --cw-bg-card: hsl(217deg, 33%, 12%);
16
- --cw-bg-app: hsl(217deg, 39%, 8%);
17
- --cw-border: hsl(217deg, 33%, 25%);
18
- --cw-text-main: hsl(210deg, 40%, 98%);
19
- --cw-text-muted: hsl(210deg, 14%, 75%);
20
- --cw-text-light: hsl(210deg, 40%, 98%);
21
- --cw-primary-light: hsl(240deg, 100%, 20%);
22
- }
471
+ .cw-hidden {
472
+ display: none;
473
+ }
@@ -1,20 +1,293 @@
1
1
  :root {
2
- --ir-primary: hsl(220deg, 90%, 56%);
3
- --ir-primary-light: hsl(220deg, 90%, 92%);
4
- --ir-bg-card: hsl(0deg, 0%, 100%);
5
- --ir-bg-app: hsl(210deg, 20%, 98%);
6
- --ir-border: hsl(210deg, 20%, 90%);
7
- --ir-text-main: hsl(210deg, 30%, 20%);
8
- --ir-text-muted: hsl(210deg, 15%, 50%);
9
- --ir-shadow-lg: 0 10px 15px -3px rgb(0, 0, 0, 0.1);
10
- --ir-radius: 1rem;
2
+ --ir-primary: hsl(220deg, 90%, 56%);
3
+ --ir-primary-light: hsl(220deg, 90%, 92%);
4
+ --ir-bg-card: hsl(0deg, 0%, 100%);
5
+ --ir-bg-app: hsl(210deg, 20%, 98%);
6
+ --ir-border: hsl(210deg, 20%, 90%);
7
+ --ir-text-main: hsl(210deg, 30%, 20%);
8
+ --ir-text-muted: hsl(210deg, 15%, 50%);
9
+ --ir-shadow-lg: 0 10px 15px -3px rgb(0, 0, 0, 0.1);
10
+ --ir-radius: 1rem;
11
+ }
12
+
13
+ .theme-dark {
14
+ --ir-bg-card: hsl(220deg, 25%, 12%);
15
+ --ir-bg-app: hsl(220deg, 30%, 7%);
16
+ --ir-border: hsl(220deg, 20%, 20%);
17
+ --ir-text-main: hsl(210deg, 20%, 95%);
18
+ --ir-text-muted: hsl(210deg, 15%, 70%);
19
+ --ir-primary-light: hsl(220deg, 90%, 12%);
20
+ }
21
+
22
+ .ingredient-rescaler-container {
23
+ max-width: 100%;
24
+ padding: 1.5rem;
25
+ background: var(--ir-bg-card);
26
+ border: 1px solid var(--ir-border);
27
+ border-radius: var(--ir-radius);
28
+ box-shadow: var(--ir-shadow-lg);
29
+ }
30
+
31
+ .ir-grid {
32
+ display: grid;
33
+ grid-template-columns: 1fr;
34
+ gap: 2rem;
35
+ margin-bottom: 2rem;
36
+ }
37
+
38
+ @media (min-width: 768px) {
39
+ .ir-grid {
40
+ grid-template-columns: 1fr 1fr;
11
41
  }
42
+ }
43
+
44
+ .ir-section {
45
+ background: var(--ir-bg-app);
46
+ padding: 1.5rem;
47
+ border-radius: 1.25rem;
48
+ border: 1px solid var(--ir-border);
49
+ }
50
+
51
+ .ir-section-primary {
52
+ background: var(--ir-bg-card);
53
+ border: 2px solid var(--ir-primary);
54
+ }
55
+
56
+ .ir-section-title {
57
+ font-size: 1.125rem;
58
+ font-weight: 700;
59
+ color: var(--ir-text-main);
60
+ margin-bottom: 1rem;
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 0.5rem;
64
+ }
65
+
66
+ .ir-section-primary .ir-section-title {
67
+ color: var(--ir-primary);
68
+ }
69
+
70
+ .ir-fields {
71
+ display: grid;
72
+ grid-template-columns: 1fr 1fr;
73
+ gap: 1rem;
74
+ margin-bottom: 1.5rem;
75
+ }
76
+
77
+ .ir-field {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 0.5rem;
81
+ }
82
+
83
+ .ir-label {
84
+ font-size: 0.75rem;
85
+ font-weight: 700;
86
+ color: var(--ir-text-muted);
87
+ text-transform: uppercase;
88
+ letter-spacing: 0.05em;
89
+ }
90
+
91
+ .ir-input {
92
+ width: 100%;
93
+ padding: 0.75rem 1rem;
94
+ border-radius: 0.75rem;
95
+ border: 1px solid var(--ir-border);
96
+ background: var(--ir-bg-card);
97
+ color: var(--ir-text-main);
98
+ font-weight: 600;
99
+ font-size: 1.125rem;
100
+ text-align: center;
101
+ transition: all 0.3s ease;
102
+ }
103
+
104
+ .ir-input:focus {
105
+ outline: none;
106
+ border-color: var(--ir-primary);
107
+ box-shadow: 0 0 0 3px hsl(220deg, 90%, 56%, 0.1);
108
+ }
109
+
110
+ .ir-factor-display {
111
+ margin-top: 1rem;
112
+ padding: 1rem;
113
+ background: var(--ir-primary-light);
114
+ border-radius: 0.75rem;
115
+ border: 1px solid var(--ir-primary);
116
+ display: flex;
117
+ justify-content: space-between;
118
+ align-items: center;
119
+ }
120
+
121
+ .ir-factor-label {
122
+ font-size: 0.875rem;
123
+ font-weight: 600;
124
+ color: var(--ir-text-muted);
125
+ }
126
+
127
+ .ir-factor-value {
128
+ font-size: 2rem;
129
+ font-weight: 800;
130
+ color: var(--ir-primary);
131
+ }
132
+
133
+ .ir-textarea-container {
134
+ display: flex;
135
+ flex-direction: column;
136
+ height: 100%;
137
+ gap: 0.5rem;
138
+ }
139
+
140
+ .ir-textarea {
141
+ width: 100%;
142
+ flex: 1;
143
+ min-height: 200px;
144
+ padding: 1rem;
145
+ border-radius: 0.75rem;
146
+ border: 1px solid var(--ir-border);
147
+ background: var(--ir-bg-card);
148
+ color: var(--ir-text-main);
149
+ font-size: 0.875rem;
150
+ resize: none;
151
+ line-height: 1.6;
152
+ transition: all 0.3s ease;
153
+ }
154
+
155
+ .ir-textarea:focus {
156
+ outline: none;
157
+ border-color: var(--ir-primary);
158
+ box-shadow: 0 0 0 3px hsl(220deg, 90%, 56%, 0.1);
159
+ }
160
+
161
+ .ir-textarea::placeholder {
162
+ color: hsl(210deg, 15%, 75%);
163
+ }
164
+
165
+ .ir-results-card {
166
+ background: var(--ir-text-main);
167
+ border-radius: 1.25rem;
168
+ border: 1px solid var(--ir-border);
169
+ overflow: hidden;
170
+ box-shadow: var(--ir-shadow-lg);
171
+ }
172
+
173
+ .ir-results-header {
174
+ padding: 1rem 1.5rem;
175
+ background: hsl(210deg, 30%, 15%);
176
+ border-bottom: 1px solid hsl(210deg, 30%, 25%);
177
+ display: flex;
178
+ justify-content: space-between;
179
+ align-items: center;
180
+ }
181
+
182
+ .theme-dark .ir-results-header {
183
+ background: hsl(220deg, 25%, 8%);
184
+ border-bottom-color: hsl(220deg, 25%, 20%);
185
+ }
186
+
187
+ .ir-results-title {
188
+ color: var(--ir-bg-card);
189
+ font-weight: 700;
190
+ display: flex;
191
+ align-items: center;
192
+ gap: 0.5rem;
193
+ }
194
+
195
+ .theme-dark .ir-results-title {
196
+ color: var(--ir-text-main);
197
+ }
198
+
199
+ .ir-copy-btn {
200
+ font-size: 0.75rem;
201
+ background: hsl(210deg, 30%, 35%);
202
+ color: var(--ir-bg-card);
203
+ padding: 0.5rem 1rem;
204
+ border-radius: 0.5rem;
205
+ border: none;
206
+ cursor: pointer;
207
+ transition: all 0.3s ease;
208
+ font-weight: 600;
209
+ display: flex;
210
+ align-items: center;
211
+ gap: 0.5rem;
212
+ }
213
+
214
+ .theme-dark .ir-copy-btn {
215
+ background: hsl(220deg, 25%, 30%);
216
+ color: var(--ir-text-main);
217
+ }
218
+
219
+ .ir-copy-btn:hover {
220
+ background: hsl(210deg, 30%, 45%);
221
+ }
222
+
223
+ .theme-dark .ir-copy-btn:hover {
224
+ background: hsl(220deg, 25%, 40%);
225
+ }
226
+
227
+ .ir-copy-btn.ir-copied {
228
+ background: hsl(142deg, 72%, 45%);
229
+ }
230
+
231
+ .ir-results-container {
232
+ padding: 2rem;
233
+ font-size: 1rem;
234
+ display: flex;
235
+ flex-direction: column;
236
+ gap: 0.75rem;
237
+ min-height: 200px;
238
+ background: var(--ir-bg-card);
239
+ color: var(--ir-text-main);
240
+ }
241
+
242
+ .ir-empty-state {
243
+ height: 100%;
244
+ display: flex;
245
+ flex-direction: column;
246
+ align-items: center;
247
+ justify-content: center;
248
+ gap: 1rem;
249
+ opacity: 0.5;
250
+ color: var(--ir-text-muted);
251
+ }
252
+
253
+ .ir-empty-icon {
254
+ width: 3rem;
255
+ height: 3rem;
256
+ }
257
+
258
+ .ir-result-row {
259
+ display: flex;
260
+ justify-content: space-between;
261
+ align-items: center;
262
+ background: var(--ir-bg-app);
263
+ padding: 0.75rem;
264
+ border-radius: 0.5rem;
265
+ border-left: 4px solid transparent;
266
+ transition: all 0.3s ease;
267
+ }
268
+
269
+ .ir-result-row:hover {
270
+ background: var(--ir-primary-light);
271
+ border-left-color: var(--ir-primary);
272
+ }
273
+
274
+ .ir-original-amount {
275
+ color: hsl(210deg, 15%, 75%);
276
+ font-size: 0.75rem;
277
+ text-decoration: line-through;
278
+ opacity: 0.75;
279
+ }
280
+
281
+ .ir-new-value {
282
+ color: var(--ir-primary);
283
+ font-weight: 800;
284
+ font-size: 1.125rem;
285
+ }
12
286
 
13
- .theme-dark {
14
- --ir-bg-card: hsl(220deg, 25%, 12%);
15
- --ir-bg-app: hsl(220deg, 30%, 7%);
16
- --ir-border: hsl(220deg, 20%, 20%);
17
- --ir-text-main: hsl(210deg, 20%, 95%);
18
- --ir-text-muted: hsl(210deg, 15%, 70%);
19
- --ir-primary-light: hsl(220deg, 90%, 12%);
20
- }
287
+ .ir-no-amount-row {
288
+ color: var(--ir-text-muted);
289
+ font-style: italic;
290
+ font-size: 0.875rem;
291
+ padding: 0.5rem;
292
+ background: transparent;
293
+ }
@@ -1,21 +1,483 @@
1
1
  :root {
2
- --rg-primary: hsl(38deg, 92%, 50%);
3
- --rg-primary-light: hsl(38deg, 92%, 90%);
4
- --rg-secondary: hsl(25deg, 95%, 53%);
5
- --rg-bg-card: hsl(0deg, 0%, 100%);
6
- --rg-bg-app: hsl(210deg, 20%, 98%);
7
- --rg-border: hsl(210deg, 20%, 90%);
8
- --rg-text-main: hsl(210deg, 30%, 20%);
9
- --rg-text-muted: hsl(210deg, 15%, 50%);
10
- --rg-shadow-lg: 0 10px 15px -3px rgb(0, 0, 0, 0.1);
11
- --rg-radius: 1rem;
2
+ --rg-primary: hsl(38deg, 92%, 50%);
3
+ --rg-primary-light: hsl(38deg, 92%, 90%);
4
+ --rg-secondary: hsl(25deg, 95%, 53%);
5
+ --rg-bg-card: hsl(0deg, 0%, 100%);
6
+ --rg-bg-app: hsl(210deg, 20%, 98%);
7
+ --rg-border: hsl(210deg, 20%, 90%);
8
+ --rg-text-main: hsl(210deg, 30%, 20%);
9
+ --rg-text-muted: hsl(210deg, 15%, 50%);
10
+ --rg-shadow-lg: 0 10px 15px -3px rgb(0, 0, 0, 0.1);
11
+ --rg-radius: 1rem;
12
+ }
13
+
14
+ .theme-dark {
15
+ --rg-bg-card: hsl(220deg, 25%, 12%);
16
+ --rg-bg-app: hsl(220deg, 30%, 7%);
17
+ --rg-border: hsl(220deg, 20%, 20%);
18
+ --rg-text-main: hsl(210deg, 20%, 95%);
19
+ --rg-text-muted: hsl(210deg, 15%, 70%);
20
+ --rg-primary-light: hsl(38deg, 92%, 12%);
21
+ }
22
+
23
+ input[type='number']::-webkit-outer-spin-button,
24
+ input[type='number']::-webkit-inner-spin-button {
25
+ -webkit-appearance: none;
26
+ margin: 0;
27
+ }
28
+
29
+ .rg-container {
30
+ width: 100%;
31
+ max-width: 100%;
32
+ padding: 1rem;
33
+ }
34
+
35
+ .rg-card {
36
+ background: var(--rg-bg-card);
37
+ border: 1px solid var(--rg-border);
38
+ border-radius: var(--rg-radius);
39
+ box-shadow: var(--rg-shadow-lg);
40
+ overflow: hidden;
41
+ }
42
+
43
+ .rg-progress-wrapper {
44
+ height: 0.375rem;
45
+ width: 100%;
46
+ background: var(--rg-bg-app);
47
+ position: relative;
48
+ }
49
+
50
+ .rg-progress-bar {
51
+ height: 100%;
52
+ background: linear-gradient(to right, var(--rg-primary), var(--rg-secondary));
53
+ transition: width 0.3s ease;
54
+ width: 50%;
55
+ }
56
+
57
+ .rg-content {
58
+ padding: 2rem;
59
+ }
60
+
61
+ @media (max-width: 1024px) {
62
+ .rg-content {
63
+ padding: 1.5rem;
64
+ }
65
+ }
66
+
67
+ @media (max-width: 640px) {
68
+ .rg-content {
69
+ padding: 1rem;
70
+ }
71
+ }
72
+
73
+ .rg-grid {
74
+ display: grid;
75
+ grid-template-columns: 1fr;
76
+ gap: 3rem;
77
+ }
78
+
79
+ @media (min-width: 1024px) {
80
+ .rg-grid {
81
+ grid-template-columns: 1fr 1fr;
82
+ }
83
+ }
84
+
85
+ .rg-controls {
86
+ display: flex;
87
+ flex-direction: column;
88
+ gap: 2.5rem;
89
+ }
90
+
91
+ .rg-control-group {
92
+ display: flex;
93
+ flex-direction: column;
94
+ gap: 1rem;
95
+ }
96
+
97
+ .rg-label {
98
+ font-size: 0.75rem;
99
+ font-weight: 700;
100
+ color: var(--rg-text-muted);
101
+ text-transform: uppercase;
102
+ letter-spacing: 0.05em;
103
+ display: flex;
104
+ align-items: center;
105
+ gap: 0.75rem;
106
+ }
107
+
108
+ .rg-step {
109
+ width: 1.5rem;
110
+ height: 1.5rem;
111
+ border-radius: 50%;
112
+ background: hsl(38deg, 92%, 90%);
113
+ color: var(--rg-primary);
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ font-weight: 700;
118
+ font-size: 0.75rem;
119
+ }
120
+
121
+ .theme-dark .rg-step {
122
+ background: hsl(38deg, 92%, 12%);
123
+ }
124
+
125
+ .rg-volume-wrapper {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: 1rem;
129
+ }
130
+
131
+ @media (min-width: 640px) {
132
+ .rg-volume-wrapper {
133
+ flex-direction: row;
134
+ gap: 1rem;
135
+ }
136
+ }
137
+
138
+ .rg-input-group {
139
+ position: relative;
140
+ flex: 1;
141
+ }
142
+
143
+ .rg-input {
144
+ width: 100%;
145
+ padding: 1rem 2rem 1rem 1rem;
146
+ border: 2px solid var(--rg-border);
147
+ border-radius: 0.75rem;
148
+ background: var(--rg-bg-app);
149
+ color: var(--rg-text-main);
150
+ font-weight: 600;
151
+ font-size: 1.875rem;
152
+ text-align: center;
153
+ transition: all 0.3s ease;
154
+ }
155
+
156
+ .rg-input:focus {
157
+ outline: none;
158
+ border-color: var(--rg-primary);
159
+ box-shadow: 0 0 0 3px hsl(38deg, 92%, 50%, 0.1);
160
+ }
161
+
162
+ .rg-unit {
163
+ position: absolute;
164
+ right: 1rem;
165
+ top: 50%;
166
+ transform: translateY(-50%);
167
+ color: var(--rg-text-muted);
168
+ font-weight: 600;
169
+ font-size: 0.875rem;
170
+ text-transform: uppercase;
171
+ letter-spacing: 0.05em;
172
+ pointer-events: none;
173
+ }
174
+
175
+ .rg-liquid-buttons {
176
+ display: grid;
177
+ grid-template-columns: repeat(4, 1fr);
178
+ gap: 0.5rem;
179
+ }
180
+
181
+ @media (max-width: 640px) {
182
+ .rg-liquid-buttons {
183
+ grid-template-columns: repeat(2, 1fr);
184
+ }
185
+ }
186
+
187
+ .rg-liquid-btn {
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ padding: 0.75rem;
192
+ border: 2px solid var(--rg-border);
193
+ border-radius: 0.75rem;
194
+ background: var(--rg-bg-card);
195
+ color: var(--rg-text-muted);
196
+ cursor: pointer;
197
+ transition: all 0.3s ease;
198
+ }
199
+
200
+ .rg-liquid-btn:hover {
201
+ border-color: var(--rg-primary);
202
+ color: var(--rg-primary);
203
+ }
204
+
205
+ .rg-liquid-btn.active {
206
+ background: var(--rg-bg-app);
207
+ border-color: var(--rg-primary);
208
+ color: var(--rg-primary);
209
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
210
+ }
211
+
212
+ .rg-btn-icon {
213
+ width: 1.5rem;
214
+ height: 1.5rem;
215
+ }
216
+
217
+ .rg-texture-grid {
218
+ display: grid;
219
+ grid-template-columns: repeat(2, 1fr);
220
+ gap: 0.75rem;
221
+ }
222
+
223
+ @media (min-width: 640px) {
224
+ .rg-texture-grid {
225
+ grid-template-columns: repeat(4, 1fr);
12
226
  }
227
+ }
228
+
229
+ .rg-texture-btn {
230
+ display: flex;
231
+ flex-direction: column;
232
+ align-items: center;
233
+ gap: 0.75rem;
234
+ padding: 1rem 0.75rem;
235
+ border: 2px solid var(--rg-border);
236
+ border-radius: 0.75rem;
237
+ background: var(--rg-bg-card);
238
+ color: var(--rg-text-muted);
239
+ cursor: pointer;
240
+ transition: all 0.3s ease;
241
+ text-align: center;
242
+ }
243
+
244
+ .rg-texture-btn:hover {
245
+ border-color: var(--rg-primary);
246
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
247
+ }
248
+
249
+ .rg-texture-btn.active {
250
+ background: var(--rg-primary-light);
251
+ border-color: var(--rg-primary);
252
+ color: var(--rg-primary);
253
+ }
254
+
255
+ .rg-texture-visual {
256
+ width: 1.5rem;
257
+ height: 1.5rem;
258
+ border: 1px solid currentcolor;
259
+ border-radius: 0.25rem;
260
+ overflow: hidden;
261
+ display: flex;
262
+ align-items: flex-end;
263
+ }
264
+
265
+ .rg-texture-bar {
266
+ width: 100%;
267
+ background: currentcolor;
268
+ transition: height 0.3s ease;
269
+ }
270
+
271
+ .rg-texture-btn[data-level="1"] .rg-texture-bar {
272
+ height: 25%;
273
+ }
274
+
275
+ .rg-texture-btn[data-level="2"] .rg-texture-bar {
276
+ height: 50%;
277
+ }
278
+
279
+ .rg-texture-btn[data-level="3"] .rg-texture-bar {
280
+ height: 75%;
281
+ }
282
+
283
+ .rg-texture-btn[data-level="4"] .rg-texture-bar {
284
+ height: 100%;
285
+ }
286
+
287
+ .rg-texture-label {
288
+ font-size: 0.75rem;
289
+ font-weight: 600;
290
+ line-height: 1.2;
291
+ }
292
+
293
+ .rg-results {
294
+ display: flex;
295
+ flex-direction: column;
296
+ gap: 1.5rem;
297
+ }
298
+
299
+ .rg-result-hero {
300
+ background: linear-gradient(135deg, var(--rg-primary), var(--rg-secondary));
301
+ border-radius: var(--rg-radius);
302
+ padding: 2rem;
303
+ color: var(--rg-bg-card);
304
+ box-shadow: var(--rg-shadow-lg);
305
+ position: relative;
306
+ overflow: hidden;
307
+ }
308
+
309
+ .rg-result-hero::before {
310
+ content: '';
311
+ position: absolute;
312
+ top: -50%;
313
+ left: -50%;
314
+ width: 200%;
315
+ height: 200%;
316
+ background: radial-gradient(circle, hsla(0deg, 0%, 100%, 0.1), transparent 60%);
317
+ pointer-events: none;
318
+ }
319
+
320
+ .rg-result-header {
321
+ display: flex;
322
+ justify-content: space-between;
323
+ align-items: center;
324
+ margin-bottom: 1.5rem;
325
+ position: relative;
326
+ z-index: 1;
327
+ }
328
+
329
+ .rg-result-label {
330
+ font-size: 0.75rem;
331
+ font-weight: 700;
332
+ text-transform: uppercase;
333
+ letter-spacing: 0.1em;
334
+ opacity: 0.8;
335
+ }
336
+
337
+ .rg-roux-type {
338
+ font-size: 0.75rem;
339
+ font-weight: 600;
340
+ background: hsla(0deg, 0%, 0%, 0.2);
341
+ padding: 0.5rem 1rem;
342
+ border-radius: 0.5rem;
343
+ text-transform: capitalize;
344
+ }
345
+
346
+ .rg-result-amounts {
347
+ display: flex;
348
+ align-items: center;
349
+ justify-content: space-around;
350
+ margin-bottom: 1.5rem;
351
+ position: relative;
352
+ z-index: 1;
353
+ text-align: center;
354
+ }
355
+
356
+ .rg-amount {
357
+ flex: 1;
358
+ }
359
+
360
+ .rg-amount-value {
361
+ font-size: 2.5rem;
362
+ font-weight: 800;
363
+ margin-bottom: 0.5rem;
364
+ line-height: 1;
365
+ }
366
+
367
+ .rg-amount-unit {
368
+ font-size: 0.75rem;
369
+ font-weight: 600;
370
+ text-transform: uppercase;
371
+ opacity: 0.8;
372
+ }
373
+
374
+ .rg-amount-plus {
375
+ font-size: 1.5rem;
376
+ opacity: 0.3;
377
+ margin: 0 1rem;
378
+ }
379
+
380
+ .rg-instructions-box {
381
+ background: hsla(0deg, 0%, 0%, 0.2);
382
+ border-radius: 0.75rem;
383
+ border: 1px solid hsla(0deg, 0%, 100%, 0.1);
384
+ padding: 1rem;
385
+ position: relative;
386
+ z-index: 1;
387
+ backdrop-filter: blur(4px);
388
+ }
389
+
390
+ .rg-instructions-header {
391
+ display: flex;
392
+ align-items: center;
393
+ gap: 0.5rem;
394
+ margin-bottom: 0.75rem;
395
+ color: hsl(38deg, 92%, 90%);
396
+ }
397
+
398
+ .rg-instructions-icon {
399
+ width: 1rem;
400
+ height: 1rem;
401
+ }
402
+
403
+ .rg-instructions-title {
404
+ font-size: 0.75rem;
405
+ font-weight: 700;
406
+ text-transform: uppercase;
407
+ letter-spacing: 0.1em;
408
+ }
409
+
410
+ .rg-instructions-text {
411
+ font-size: 0.875rem;
412
+ font-weight: 500;
413
+ line-height: 1.5;
414
+ color: hsl(38deg, 92%, 95%);
415
+ margin: 0;
416
+ }
417
+
418
+ .rg-sauce-info {
419
+ background: var(--rg-bg-app);
420
+ border: 1px solid var(--rg-border);
421
+ border-radius: var(--rg-radius);
422
+ padding: 1.5rem;
423
+ display: flex;
424
+ flex-direction: column;
425
+ gap: 1rem;
426
+ }
427
+
428
+ .rg-sauce-header {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 1rem;
432
+ margin-bottom: 0.5rem;
433
+ }
434
+
435
+ .rg-sauce-icon {
436
+ width: 2.5rem;
437
+ height: 2.5rem;
438
+ border-radius: 0.5rem;
439
+ background: hsl(38deg, 92%, 90%);
440
+ color: var(--rg-primary);
441
+ display: flex;
442
+ align-items: center;
443
+ justify-content: center;
444
+ flex-shrink: 0;
445
+ }
446
+
447
+ .theme-dark .rg-sauce-icon {
448
+ background: hsl(38deg, 92%, 12%);
449
+ }
450
+
451
+ .rg-icon-lg {
452
+ width: 1.25rem;
453
+ height: 1.25rem;
454
+ }
455
+
456
+ .rg-sauce-name {
457
+ font-size: 1rem;
458
+ font-weight: 700;
459
+ color: var(--rg-text-main);
460
+ flex: 1;
461
+ }
462
+
463
+ .rg-sauce-ratio {
464
+ font-size: 0.75rem;
465
+ font-weight: 700;
466
+ color: var(--rg-text-muted);
467
+ text-transform: uppercase;
468
+ letter-spacing: 0.05em;
469
+ white-space: nowrap;
470
+ }
13
471
 
14
- .theme-dark {
15
- --rg-bg-card: hsl(220deg, 25%, 12%);
16
- --rg-bg-app: hsl(220deg, 30%, 7%);
17
- --rg-border: hsl(220deg, 20%, 20%);
18
- --rg-text-main: hsl(210deg, 20%, 95%);
19
- --rg-text-muted: hsl(210deg, 15%, 70%);
20
- --rg-primary-light: hsl(38deg, 92%, 12%);
21
- }
472
+ .rg-sauce-tip {
473
+ font-size: 0.875rem;
474
+ font-weight: 500;
475
+ line-height: 1.6;
476
+ color: var(--rg-text-muted);
477
+ font-style: italic;
478
+ background: var(--rg-bg-card);
479
+ padding: 1rem;
480
+ border-radius: 0.75rem;
481
+ border: 1px solid var(--rg-border);
482
+ margin: 0;
483
+ }