@jjlmoya/utils-cooking 1.2.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 (130) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +24 -0
  3. package/src/category/i18n/es.ts +208 -0
  4. package/src/category/i18n/fr.ts +24 -0
  5. package/src/category/index.ts +37 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +32 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/i18n-titles.test.ts +66 -0
  18. package/src/tests/locale_completeness.test.ts +42 -0
  19. package/src/tests/mocks/astro_mock.js +2 -0
  20. package/src/tests/no_h1_in_components.test.ts +48 -0
  21. package/src/tests/seo_length.test.ts +22 -0
  22. package/src/tests/tool_validation.test.ts +17 -0
  23. package/src/tool/american-kitchen-converter/AmericanKitchenEngine.ts +259 -0
  24. package/src/tool/american-kitchen-converter/bibliography.astro +6 -0
  25. package/src/tool/american-kitchen-converter/component.astro +838 -0
  26. package/src/tool/american-kitchen-converter/i18n/en.ts +282 -0
  27. package/src/tool/american-kitchen-converter/i18n/es.ts +281 -0
  28. package/src/tool/american-kitchen-converter/i18n/fr.ts +292 -0
  29. package/src/tool/american-kitchen-converter/index.ts +24 -0
  30. package/src/tool/american-kitchen-converter/seo.astro +8 -0
  31. package/src/tool/banana-ripeness/BananaCare.css +587 -0
  32. package/src/tool/banana-ripeness/BananaEngine.ts +79 -0
  33. package/src/tool/banana-ripeness/bibliography.astro +6 -0
  34. package/src/tool/banana-ripeness/component.astro +285 -0
  35. package/src/tool/banana-ripeness/i18n/en.ts +177 -0
  36. package/src/tool/banana-ripeness/i18n/es.ts +177 -0
  37. package/src/tool/banana-ripeness/i18n/fr.ts +177 -0
  38. package/src/tool/banana-ripeness/index.ts +24 -0
  39. package/src/tool/banana-ripeness/seo.astro +8 -0
  40. package/src/tool/brine/bibliography.astro +6 -0
  41. package/src/tool/brine/component.astro +884 -0
  42. package/src/tool/brine/i18n/en.ts +221 -0
  43. package/src/tool/brine/i18n/es.ts +222 -0
  44. package/src/tool/brine/i18n/fr.ts +221 -0
  45. package/src/tool/brine/index.ts +26 -0
  46. package/src/tool/brine/seo.astro +8 -0
  47. package/src/tool/cookware-guide/CookwareGuide.css +487 -0
  48. package/src/tool/cookware-guide/bibliography.astro +6 -0
  49. package/src/tool/cookware-guide/component.astro +164 -0
  50. package/src/tool/cookware-guide/i18n/en.ts +163 -0
  51. package/src/tool/cookware-guide/i18n/es.ts +163 -0
  52. package/src/tool/cookware-guide/i18n/fr.ts +164 -0
  53. package/src/tool/cookware-guide/index.ts +24 -0
  54. package/src/tool/cookware-guide/init.ts +174 -0
  55. package/src/tool/cookware-guide/seo.astro +8 -0
  56. package/src/tool/egg-timer/EggTimer.css +503 -0
  57. package/src/tool/egg-timer/bibliography.astro +14 -0
  58. package/src/tool/egg-timer/component.astro +281 -0
  59. package/src/tool/egg-timer/i18n/en.ts +230 -0
  60. package/src/tool/egg-timer/i18n/es.ts +222 -0
  61. package/src/tool/egg-timer/i18n/fr.ts +121 -0
  62. package/src/tool/egg-timer/index.ts +27 -0
  63. package/src/tool/egg-timer/seo.astro +39 -0
  64. package/src/tool/ingredient-rescaler/IngredientRescaler.css +308 -0
  65. package/src/tool/ingredient-rescaler/bibliography.astro +6 -0
  66. package/src/tool/ingredient-rescaler/component.astro +107 -0
  67. package/src/tool/ingredient-rescaler/i18n/en.ts +265 -0
  68. package/src/tool/ingredient-rescaler/i18n/es.ts +268 -0
  69. package/src/tool/ingredient-rescaler/i18n/fr.ts +207 -0
  70. package/src/tool/ingredient-rescaler/index.ts +24 -0
  71. package/src/tool/ingredient-rescaler/init.ts +200 -0
  72. package/src/tool/ingredient-rescaler/seo.astro +8 -0
  73. package/src/tool/kitchen-timer/KitchenTimer.css +325 -0
  74. package/src/tool/kitchen-timer/bibliography.astro +6 -0
  75. package/src/tool/kitchen-timer/component.astro +341 -0
  76. package/src/tool/kitchen-timer/i18n/en.ts +154 -0
  77. package/src/tool/kitchen-timer/i18n/es.ts +154 -0
  78. package/src/tool/kitchen-timer/i18n/fr.ts +154 -0
  79. package/src/tool/kitchen-timer/index.ts +26 -0
  80. package/src/tool/kitchen-timer/init.ts +55 -0
  81. package/src/tool/kitchen-timer/lib/AudioHelper.ts +27 -0
  82. package/src/tool/kitchen-timer/lib/DockManager.ts +97 -0
  83. package/src/tool/kitchen-timer/lib/KitchenTimer.ts +264 -0
  84. package/src/tool/kitchen-timer/seo.astro +8 -0
  85. package/src/tool/meringue-peak/MeringueCalculator.css +298 -0
  86. package/src/tool/meringue-peak/bibliography.astro +6 -0
  87. package/src/tool/meringue-peak/component.astro +169 -0
  88. package/src/tool/meringue-peak/i18n/en.ts +257 -0
  89. package/src/tool/meringue-peak/i18n/es.ts +234 -0
  90. package/src/tool/meringue-peak/i18n/fr.ts +234 -0
  91. package/src/tool/meringue-peak/index.ts +24 -0
  92. package/src/tool/meringue-peak/seo.astro +8 -0
  93. package/src/tool/mold-scaler/MoldScaler.css +406 -0
  94. package/src/tool/mold-scaler/bibliography.astro +6 -0
  95. package/src/tool/mold-scaler/component.astro +126 -0
  96. package/src/tool/mold-scaler/i18n/en.ts +268 -0
  97. package/src/tool/mold-scaler/i18n/es.ts +269 -0
  98. package/src/tool/mold-scaler/i18n/fr.ts +276 -0
  99. package/src/tool/mold-scaler/index.ts +26 -0
  100. package/src/tool/mold-scaler/init.ts +264 -0
  101. package/src/tool/mold-scaler/seo.astro +8 -0
  102. package/src/tool/pizza/Pizza.css +569 -0
  103. package/src/tool/pizza/bibliography.astro +6 -0
  104. package/src/tool/pizza/calculator.ts +143 -0
  105. package/src/tool/pizza/component.astro +237 -0
  106. package/src/tool/pizza/i18n/en.ts +288 -0
  107. package/src/tool/pizza/i18n/es.ts +289 -0
  108. package/src/tool/pizza/i18n/fr.ts +288 -0
  109. package/src/tool/pizza/index.ts +27 -0
  110. package/src/tool/pizza/seo.astro +8 -0
  111. package/src/tool/roux-guide/RouxGuide.css +483 -0
  112. package/src/tool/roux-guide/bibliography.astro +6 -0
  113. package/src/tool/roux-guide/component.astro +194 -0
  114. package/src/tool/roux-guide/i18n/en.ts +233 -0
  115. package/src/tool/roux-guide/i18n/es.ts +225 -0
  116. package/src/tool/roux-guide/i18n/fr.ts +225 -0
  117. package/src/tool/roux-guide/index.ts +24 -0
  118. package/src/tool/roux-guide/init.ts +187 -0
  119. package/src/tool/roux-guide/seo.astro +8 -0
  120. package/src/tool/sourdough-calculator/SourdoughCalculator.css +369 -0
  121. package/src/tool/sourdough-calculator/bibliography.astro +6 -0
  122. package/src/tool/sourdough-calculator/component.astro +198 -0
  123. package/src/tool/sourdough-calculator/i18n/en.ts +242 -0
  124. package/src/tool/sourdough-calculator/i18n/es.ts +243 -0
  125. package/src/tool/sourdough-calculator/i18n/fr.ts +248 -0
  126. package/src/tool/sourdough-calculator/index.ts +24 -0
  127. package/src/tool/sourdough-calculator/init.ts +131 -0
  128. package/src/tool/sourdough-calculator/seo.astro +8 -0
  129. package/src/tools.ts +29 -0
  130. package/src/types.ts +73 -0
@@ -0,0 +1,838 @@
1
+ ---
2
+ import { Icon } from "astro-icon/components";
3
+
4
+ interface Props {
5
+ ui: Record<string, string>;
6
+ }
7
+
8
+ const { ui } = Astro.props;
9
+ ---
10
+
11
+ <div class="akc-wrapper">
12
+ <div class="akc-main-card">
13
+ <div class="akc-tabs">
14
+ <button class="akc-tab-btn active" data-tab="cups" aria-label={ui.tabCupsAriaLabel}>
15
+ <Icon name="mdi:cup-outline" class="w-6 h-6" />
16
+ <span>{ui.tabCups}</span>
17
+ </button>
18
+ <button class="akc-tab-btn" data-tab="spoons" aria-label={ui.tabSpoonsAriaLabel}>
19
+ <Icon name="mdi:silverware-spoon" class="w-6 h-6" />
20
+ <span>{ui.tabSpoons}</span>
21
+ </button>
22
+ <button class="akc-tab-btn" data-tab="temps" aria-label={ui.tabTempsAriaLabel}>
23
+ <Icon name="mdi:thermometer" class="w-6 h-6" />
24
+ <span>{ui.tabTemperatures}</span>
25
+ </button>
26
+ </div>
27
+
28
+ <div class="akc-tab-content active" id="content-cups">
29
+ <div class="akc-step-title">
30
+ <span class="akc-step-number">1</span>
31
+ <span>{ui.stepSelectIngredient}</span>
32
+ </div>
33
+ <div class="akc-grid">
34
+ <button
35
+ class="akc-item-card cup-item active"
36
+ data-density="120"
37
+ aria-label={ui.cupFlourAriaLabel}
38
+ >
39
+ <div class="akc-item-icon">
40
+ <Icon name="mdi:sack-outline" class="w-8 h-8" />
41
+ </div>
42
+ <div>
43
+ <div class="akc-item-name">{ui.cupFlour}</div>
44
+ <div class="akc-item-sub">{ui.cupFlourSub}</div>
45
+ </div>
46
+ </button>
47
+ <button
48
+ class="akc-item-card cup-item"
49
+ data-density="200"
50
+ aria-label={ui.cupWhiteSugarAriaLabel}
51
+ >
52
+ <div class="akc-item-icon"><Icon name="mdi:shaker-outline" class="w-8 h-8" /></div>
53
+ <div>
54
+ <div class="akc-item-name">{ui.cupWhiteSugar}</div>
55
+ <div class="akc-item-sub">{ui.cupWhiteSugarSub}</div>
56
+ </div>
57
+ </button>
58
+ <button
59
+ class="akc-item-card cup-item"
60
+ data-density="220"
61
+ aria-label={ui.cupBrownSugarAriaLabel}
62
+ >
63
+ <div class="akc-item-icon">
64
+ <Icon name="mdi:shaker-outline" class="w-8 h-8" />
65
+ </div>
66
+ <div>
67
+ <div class="akc-item-name">{ui.cupBrownSugar}</div>
68
+ <div class="akc-item-sub">{ui.cupBrownSugarSub}</div>
69
+ </div>
70
+ </button>
71
+ <button class="akc-item-card cup-item" data-density="115" aria-label={ui.cupPowderSugarAriaLabel}>
72
+ <div class="akc-item-icon"><Icon name="mdi:snowflake" class="w-8 h-8" /></div>
73
+ <div>
74
+ <div class="akc-item-name">{ui.cupPowderSugar}</div>
75
+ <div class="akc-item-sub">{ui.cupPowderSugarSub}</div>
76
+ </div>
77
+ </button>
78
+ <button class="akc-item-card cup-item" data-density="227" aria-label={ui.cupButterAriaLabel}>
79
+ <div class="akc-item-icon">
80
+ <Icon name="mdi:cube-outline" class="w-8 h-8" />
81
+ </div>
82
+ <div>
83
+ <div class="akc-item-name">{ui.cupButter}</div>
84
+ <div class="akc-item-sub">{ui.cupButterSub}</div>
85
+ </div>
86
+ </button>
87
+ <button class="akc-item-card cup-item" data-density="85" aria-label={ui.cupCocoaAriaLabel}>
88
+ <div class="akc-item-icon">
89
+ <Icon name="mdi:coffee-outline" class="w-8 h-8" />
90
+ </div>
91
+ <div>
92
+ <div class="akc-item-name">{ui.cupCocoa}</div>
93
+ <div class="akc-item-sub">{ui.cupCocoaSub}</div>
94
+ </div>
95
+ </button>
96
+ <button class="akc-item-card cup-item" data-density="240" aria-label={ui.cupLiquidsAriaLabel}>
97
+ <div class="akc-item-icon">
98
+ <Icon name="mdi:water-outline" class="w-8 h-8" />
99
+ </div>
100
+ <div>
101
+ <div class="akc-item-name">{ui.cupLiquids}</div>
102
+ <div class="akc-item-sub">{ui.cupLiquidsSub}</div>
103
+ </div>
104
+ </button>
105
+ <button class="akc-item-card cup-item" data-density="90" aria-label={ui.cupOatsAriaLabel}>
106
+ <div class="akc-item-icon">
107
+ <Icon name="mdi:bowl-outline" class="w-8 h-8" />
108
+ </div>
109
+ <div>
110
+ <div class="akc-item-name">{ui.cupOats}</div>
111
+ <div class="akc-item-sub">{ui.cupOatsSub}</div>
112
+ </div>
113
+ </button>
114
+ </div>
115
+
116
+ <div class="akc-step-title">
117
+ <span class="akc-step-number">2</span>
118
+ <span>{ui.stepHowManyCups}</span>
119
+ </div>
120
+ <div class="akc-amount-control">
121
+ <div class="akc-stepper">
122
+ <button class="akc-step-btn" id="cup-minus" aria-label={ui.stepperMinus}>-</button>
123
+ <input
124
+ type="number"
125
+ class="akc-step-input"
126
+ id="cup-input"
127
+ value="1"
128
+ min="0"
129
+ step="0.25"
130
+ aria-label={ui.cupsAmountLabel}
131
+ />
132
+ <button class="akc-step-btn" id="cup-plus" aria-label={ui.stepperPlus}>+</button>
133
+ </div>
134
+ <div class="akc-quick-amounts">
135
+ <button class="akc-quick-btn cup-quick" data-val="0.25">{ui.cupQuick1_4}</button>
136
+ <button class="akc-quick-btn cup-quick" data-val="0.3333">{ui.cupQuick1_3}</button>
137
+ <button class="akc-quick-btn cup-quick" data-val="0.5">{ui.cupQuick1_2}</button>
138
+ <button class="akc-quick-btn cup-quick" data-val="1">{ui.cupQuick1}</button>
139
+ </div>
140
+ </div>
141
+
142
+ <div class="akc-result-display">
143
+ <div class="akc-result-value" id="cup-result">120</div>
144
+ <div class="akc-result-unit">{ui.unitGrams}</div>
145
+ </div>
146
+ </div>
147
+
148
+ <div class="akc-tab-content" id="content-spoons">
149
+ <div class="akc-step-title">
150
+ <span class="akc-step-number">1</span>
151
+ <span>{ui.stepSelectMeasure}</span>
152
+ </div>
153
+ <div class="akc-toggle">
154
+ <button
155
+ class="akc-toggle-btn spoon-toggle active"
156
+ data-multiplier="1"
157
+ aria-label={ui.spoonTablespoonAriaLabel}
158
+ >
159
+ {ui.spoonTablespoon}
160
+ </button>
161
+ <button
162
+ class="akc-toggle-btn spoon-toggle"
163
+ data-multiplier="0.3333"
164
+ aria-label={ui.spoonTeaspoonAriaLabel}
165
+ >
166
+ {ui.spoonTeaspoon}
167
+ </button>
168
+ </div>
169
+
170
+ <div class="akc-step-title">
171
+ <span class="akc-step-number">2</span>
172
+ <span>{ui.stepSelectIngredient}</span>
173
+ </div>
174
+ <div class="akc-grid">
175
+ <button
176
+ class="akc-item-card spoon-item active"
177
+ data-density="15"
178
+ aria-label={ui.spoonLeavingAriaLabel}
179
+ >
180
+ <div class="akc-item-icon">
181
+ <Icon name="mdi:flask-outline" class="w-8 h-8" />
182
+ </div>
183
+ <div>
184
+ <div class="akc-item-name">{ui.spoonLeavening}</div>
185
+ <div class="akc-item-sub">{ui.spoonLeaveningSub}</div>
186
+ </div>
187
+ </button>
188
+ <button class="akc-item-card spoon-item" data-density="18" aria-label={ui.spoonSaltAriaLabel}>
189
+ <div class="akc-item-icon"><Icon name="mdi:shaker" class="w-8 h-8" /></div>
190
+ <div>
191
+ <div class="akc-item-name">{ui.spoonSalt}</div>
192
+ <div class="akc-item-sub">{ui.spoonSaltSub}</div>
193
+ </div>
194
+ </button>
195
+ <button
196
+ class="akc-item-card spoon-item"
197
+ data-density="15"
198
+ aria-label={ui.spoonSugarAriaLabel}
199
+ >
200
+ <div class="akc-item-icon"><Icon name="mdi:shaker-outline" class="w-8 h-8" /></div>
201
+ <div>
202
+ <div class="akc-item-name">{ui.spoonSugar}</div>
203
+ <div class="akc-item-sub">{ui.spoonSugarSub}</div>
204
+ </div>
205
+ </button>
206
+ <button class="akc-item-card spoon-item" data-density="15" aria-label={ui.spoonLiquidsAriaLabel}>
207
+ <div class="akc-item-icon">
208
+ <Icon name="mdi:water-outline" class="w-8 h-8" />
209
+ </div>
210
+ <div>
211
+ <div class="akc-item-name">{ui.spoonLiquids}</div>
212
+ <div class="akc-item-sub">{ui.spoonLiquidsSub}</div>
213
+ </div>
214
+ </button>
215
+ </div>
216
+
217
+ <div class="akc-step-title">
218
+ <span class="akc-step-number">3</span>
219
+ <span>{ui.stepQuantity}</span>
220
+ </div>
221
+ <div class="akc-amount-control">
222
+ <div class="akc-stepper">
223
+ <button class="akc-step-btn" id="spoon-minus" aria-label={ui.stepperMinus}>-</button>
224
+ <input
225
+ type="number"
226
+ class="akc-step-input"
227
+ id="spoon-input"
228
+ value="1"
229
+ min="0"
230
+ step="0.25"
231
+ aria-label={ui.spoonQuantityLabel}
232
+ />
233
+ <button class="akc-step-btn" id="spoon-plus" aria-label={ui.stepperPlus}>+</button>
234
+ </div>
235
+ <div class="akc-quick-amounts">
236
+ <button class="akc-quick-btn spoon-quick" data-val="0.25">{ui.spoonQuick1_4}</button>
237
+ <button class="akc-quick-btn spoon-quick" data-val="0.5">{ui.spoonQuick1_2}</button>
238
+ <button class="akc-quick-btn spoon-quick" data-val="1">{ui.spoonQuick1}</button>
239
+ <button class="akc-quick-btn spoon-quick" data-val="2">{ui.spoonQuick2}</button>
240
+ </div>
241
+ </div>
242
+
243
+ <div class="akc-result-display">
244
+ <div class="akc-result-value" id="spoon-result">15</div>
245
+ <div class="akc-result-unit">{ui.unitGramsML}</div>
246
+ </div>
247
+ </div>
248
+
249
+ <div class="akc-tab-content" id="content-temps">
250
+ <div class="akc-step-title">
251
+ <span class="akc-step-number"><Icon name="mdi:fire" class="w-5 h-5" /></span>
252
+ <span>{ui.stepOvenConversion}</span>
253
+ </div>
254
+ <div class="akc-temps-container">
255
+ <div class="akc-temp-box">
256
+ <div class="akc-temp-label">{ui.tempFahrenheit}</div>
257
+ <input
258
+ type="number"
259
+ class="akc-temp-input"
260
+ id="temp-f-input"
261
+ value="350"
262
+ aria-label={ui.tempFahrenheitAriaLabel}
263
+ />
264
+ </div>
265
+ <div class="akc-temp-middle">
266
+ <Icon name="mdi:swap-horizontal" class="w-8 h-8" />
267
+ </div>
268
+ <div class="akc-temp-box">
269
+ <div class="akc-temp-label">{ui.tempCelsius}</div>
270
+ <input
271
+ type="number"
272
+ class="akc-temp-input"
273
+ id="temp-c-input"
274
+ value="177"
275
+ aria-label={ui.tempCelsiusAriaLabel}
276
+ />
277
+ </div>
278
+ </div>
279
+
280
+ <div class="akc-step-title">
281
+ <span class="akc-step-number"
282
+ ><Icon name="mdi:book-open-outline" class="w-5 h-5" /></span
283
+ >
284
+ <span>{ui.stepFrequentTemps}</span>
285
+ </div>
286
+ <div class="akc-presets">
287
+ <button
288
+ class="akc-preset-card temp-preset"
289
+ data-f="275"
290
+ aria-label={ui.tempPreset275AriaLabel}
291
+ >
292
+ <div class="akc-preset-temp">{ui.tempPreset275}</div>
293
+ <div class="akc-preset-desc">{ui.tempPreset275Desc}</div>
294
+ </button>
295
+ <button
296
+ class="akc-preset-card temp-preset"
297
+ data-f="325"
298
+ aria-label={ui.tempPreset325AriaLabel}
299
+ >
300
+ <div class="akc-preset-temp">{ui.tempPreset325}</div>
301
+ <div class="akc-preset-desc">{ui.tempPreset325Desc}</div>
302
+ </button>
303
+ <button
304
+ class="akc-preset-card temp-preset"
305
+ data-f="350"
306
+ aria-label={ui.tempPreset350AriaLabel}
307
+ >
308
+ <div class="akc-preset-temp">{ui.tempPreset350}</div>
309
+ <div class="akc-preset-desc">{ui.tempPreset350Desc}</div>
310
+ </button>
311
+ <button
312
+ class="akc-preset-card temp-preset"
313
+ data-f="400"
314
+ aria-label={ui.tempPreset400AriaLabel}
315
+ >
316
+ <div class="akc-preset-temp">{ui.tempPreset400}</div>
317
+ <div class="akc-preset-desc">{ui.tempPreset400Desc}</div>
318
+ </button>
319
+ <button
320
+ class="akc-preset-card temp-preset"
321
+ data-f="425"
322
+ aria-label={ui.tempPreset425AriaLabel}
323
+ >
324
+ <div class="akc-preset-temp">{ui.tempPreset425}</div>
325
+ <div class="akc-preset-desc">{ui.tempPreset425Desc}</div>
326
+ </button>
327
+ </div>
328
+ </div>
329
+ </div>
330
+ </div>
331
+
332
+ <style is:inline define:vars={{}}>
333
+ :root {
334
+ --akc-primary: #ea580c;
335
+ --akc-secondary: #f97316;
336
+ --akc-text: #0f172a;
337
+ --akc-text-muted: #475569;
338
+ --akc-bg: #fff;
339
+ --akc-bg-secondary: #f8fafc;
340
+ --akc-bg-tertiary: #f1f5f9;
341
+ --akc-border: #e2e8f0;
342
+ }
343
+
344
+ .theme-dark {
345
+ --akc-primary: #fb923c;
346
+ --akc-secondary: #fb923c;
347
+ --akc-text: #fff;
348
+ --akc-text-muted: #a0aec0;
349
+ --akc-bg: #0f172a;
350
+ --akc-bg-secondary: #1c1f2e;
351
+ --akc-bg-tertiary: #151720;
352
+ --akc-border: #2d3748;
353
+ }
354
+
355
+ .akc-wrapper {
356
+ max-width: 800px;
357
+ margin: 0 auto;
358
+ }
359
+
360
+ .akc-main-card {
361
+ background: var(--akc-bg);
362
+ backdrop-filter: blur(20px);
363
+ -webkit-backdrop-filter: blur(20px);
364
+ border: 1px solid var(--akc-border);
365
+ border-radius: 2rem;
366
+ padding: 2.5rem;
367
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
368
+ color: var(--akc-text);
369
+ }
370
+
371
+ .theme-dark .akc-main-card {
372
+ background: rgba(15, 23, 42, 0.4);
373
+ border-color: rgba(255, 255, 255, 0.05);
374
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
375
+ }
376
+
377
+ .akc-tabs {
378
+ display: flex;
379
+ gap: 1rem;
380
+ background: rgba(0, 0, 0, 0.04);
381
+ padding: 0.5rem;
382
+ border-radius: 1.5rem;
383
+ margin-bottom: 2.5rem;
384
+ }
385
+
386
+ .theme-dark .akc-tabs {
387
+ background: rgba(0, 0, 0, 0.2);
388
+ }
389
+
390
+ .akc-tab-btn {
391
+ flex: 1;
392
+ border: none;
393
+ background: transparent;
394
+ padding: 1rem;
395
+ border-radius: 1.2rem;
396
+ font-size: 1rem;
397
+ font-weight: 600;
398
+ color: inherit;
399
+ opacity: 0.6;
400
+ cursor: pointer;
401
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
402
+ display: flex;
403
+ align-items: center;
404
+ justify-content: center;
405
+ gap: 0.5rem;
406
+ }
407
+
408
+ .akc-tab-btn:hover {
409
+ opacity: 1;
410
+ background: rgba(255, 255, 255, 0.05);
411
+ }
412
+
413
+ .akc-tab-btn.active {
414
+ opacity: 1;
415
+ background: var(--akc-primary);
416
+ color: var(--akc-text);
417
+ box-shadow: 0 8px 20px rgba(234, 88, 12, 0.3);
418
+ transform: translateY(-2px);
419
+ }
420
+
421
+ .akc-tab-content {
422
+ display: none;
423
+ animation: slide-up 0.4s ease-out forwards;
424
+ }
425
+
426
+ .akc-tab-content.active {
427
+ display: block;
428
+ }
429
+
430
+ @keyframes slide-up {
431
+ from {
432
+ opacity: 0;
433
+ transform: translateY(15px);
434
+ }
435
+
436
+ to {
437
+ opacity: 1;
438
+ transform: translateY(0);
439
+ }
440
+ }
441
+
442
+ .akc-step-title {
443
+ font-size: 1.25rem;
444
+ font-weight: 700;
445
+ margin-bottom: 1.5rem;
446
+ display: flex;
447
+ align-items: center;
448
+ gap: 0.75rem;
449
+ color: var(--akc-text);
450
+ }
451
+
452
+ .akc-step-number {
453
+ background: var(--akc-primary);
454
+ color: var(--akc-text);
455
+ width: 2rem;
456
+ height: 2rem;
457
+ display: flex;
458
+ align-items: center;
459
+ justify-content: center;
460
+ border-radius: 50%;
461
+ font-size: 1rem;
462
+ }
463
+
464
+ .akc-grid {
465
+ display: grid;
466
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
467
+ gap: 1rem;
468
+ margin-bottom: 2.5rem;
469
+ }
470
+
471
+ .akc-item-card {
472
+ background: var(--akc-bg-secondary);
473
+ border: 1px solid var(--akc-border);
474
+ border-radius: 1.5rem;
475
+ padding: 1.5rem 1rem;
476
+ text-align: center;
477
+ cursor: pointer;
478
+ transition: all 0.3s ease;
479
+ display: flex;
480
+ flex-direction: column;
481
+ align-items: center;
482
+ gap: 1rem;
483
+ color: inherit;
484
+ }
485
+
486
+ .theme-dark .akc-item-card {
487
+ background: rgba(0, 0, 0, 0.2);
488
+ border-color: rgba(255, 255, 255, 0.05);
489
+ }
490
+
491
+ .akc-item-card:hover {
492
+ border-color: rgba(234, 88, 12, 0.5);
493
+ }
494
+
495
+ .akc-item-card.active {
496
+ background: rgba(234, 88, 12, 0.1);
497
+ border-color: var(--akc-primary);
498
+ box-shadow: 0 10px 25px rgba(234, 88, 12, 0.15);
499
+ transform: translateY(-4px);
500
+ }
501
+
502
+ .akc-item-icon {
503
+ width: 56px;
504
+ height: 56px;
505
+ border-radius: 50%;
506
+ background: rgba(0, 0, 0, 0.05);
507
+ display: flex;
508
+ align-items: center;
509
+ justify-content: center;
510
+ color: var(--akc-primary);
511
+ font-size: 1.5rem;
512
+ transition: all 0.3s ease;
513
+ }
514
+
515
+ .theme-dark .akc-item-icon {
516
+ background: rgba(255, 255, 255, 0.05);
517
+ }
518
+
519
+ .akc-item-card.active .akc-item-icon {
520
+ background: var(--akc-primary);
521
+ color: var(--akc-text);
522
+ transform: scale(1.1);
523
+ }
524
+
525
+ .akc-item-name {
526
+ font-weight: 600;
527
+ font-size: 0.95rem;
528
+ line-height: 1.2;
529
+ }
530
+
531
+ .akc-item-sub {
532
+ font-size: 0.75rem;
533
+ opacity: 0.6;
534
+ margin-top: 0.25rem;
535
+ }
536
+
537
+ .akc-amount-control {
538
+ display: flex;
539
+ flex-direction: column;
540
+ gap: 1.5rem;
541
+ margin-bottom: 3rem;
542
+ align-items: center;
543
+ }
544
+
545
+ .akc-stepper {
546
+ display: flex;
547
+ align-items: center;
548
+ background: rgba(0, 0, 0, 0.03);
549
+ border-radius: 2rem;
550
+ padding: 0.5rem;
551
+ border: 1px solid rgba(0, 0, 0, 0.05);
552
+ }
553
+
554
+ .theme-dark .akc-stepper {
555
+ background: rgba(0, 0, 0, 0.3);
556
+ border-color: rgba(255, 255, 255, 0.05);
557
+ }
558
+
559
+ .akc-step-btn {
560
+ width: 3.5rem;
561
+ height: 3.5rem;
562
+ border-radius: 50%;
563
+ border: none;
564
+ background: white;
565
+ color: var(--akc-primary);
566
+ font-size: 1.5rem;
567
+ cursor: pointer;
568
+ display: flex;
569
+ align-items: center;
570
+ justify-content: center;
571
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05);
572
+ transition: all 0.2s ease;
573
+ }
574
+
575
+ .theme-dark .akc-step-btn {
576
+ background: rgba(255, 255, 255, 0.1);
577
+ color: var(--akc-text);
578
+ }
579
+
580
+ .akc-step-btn:hover {
581
+ transform: scale(1.05);
582
+ background: var(--akc-primary);
583
+ color: var(--akc-text);
584
+ }
585
+
586
+ .akc-step-input {
587
+ width: 120px;
588
+ text-align: center;
589
+ font-size: 2.5rem;
590
+ font-weight: 800;
591
+ background: transparent;
592
+ border: none;
593
+ color: inherit;
594
+ outline: none;
595
+ }
596
+
597
+ .akc-quick-amounts {
598
+ display: flex;
599
+ gap: 0.75rem;
600
+ flex-wrap: wrap;
601
+ justify-content: center;
602
+ }
603
+
604
+ .akc-quick-btn {
605
+ padding: 0.5rem 1rem;
606
+ border-radius: 1rem;
607
+ border: 1px solid var(--akc-border);
608
+ background: transparent;
609
+ color: inherit;
610
+ font-weight: 600;
611
+ cursor: pointer;
612
+ transition: all 0.2s ease;
613
+ }
614
+
615
+ .theme-dark .akc-quick-btn {
616
+ border-color: rgba(255, 255, 255, 0.1);
617
+ }
618
+
619
+ .akc-quick-btn:hover {
620
+ background: rgba(234, 88, 12, 0.1);
621
+ color: var(--akc-primary);
622
+ border-color: var(--akc-primary);
623
+ }
624
+
625
+ .akc-result-display {
626
+ background: linear-gradient(135deg, rgba(234, 88, 12, 0.1), rgba(249, 115, 22, 0.05));
627
+ border: 2px solid rgba(234, 88, 12, 0.2);
628
+ border-radius: 2rem;
629
+ padding: 3rem 2rem;
630
+ text-align: center;
631
+ position: relative;
632
+ overflow: hidden;
633
+ }
634
+
635
+ .theme-dark .akc-result-display {
636
+ background: linear-gradient(135deg, rgba(234, 88, 12, 0.15), rgba(249, 115, 22, 0.05));
637
+ border-color: rgba(234, 88, 12, 0.3);
638
+ }
639
+
640
+ .akc-result-display::before {
641
+ content: '';
642
+ position: absolute;
643
+ top: 0;
644
+ left: 0;
645
+ right: 0;
646
+ bottom: 0;
647
+ background: radial-gradient(circle at top right, rgba(234, 88, 12, 0.1), transparent 70%);
648
+ pointer-events: none;
649
+ }
650
+
651
+ .akc-result-value {
652
+ font-size: 6rem;
653
+ font-weight: 900;
654
+ line-height: 1;
655
+ background: linear-gradient(to right, var(--akc-primary), var(--akc-secondary));
656
+ -webkit-background-clip: text;
657
+ background-clip: text;
658
+ -webkit-text-fill-color: transparent;
659
+ margin-bottom: 0.5rem;
660
+ }
661
+
662
+ .akc-result-unit {
663
+ font-size: 1.5rem;
664
+ font-weight: 700;
665
+ opacity: 0.8;
666
+ text-transform: uppercase;
667
+ letter-spacing: 0.2em;
668
+ color: var(--akc-text-muted);
669
+ }
670
+
671
+ .akc-toggle {
672
+ display: flex;
673
+ background: rgba(0, 0, 0, 0.05);
674
+ border-radius: 1.5rem;
675
+ padding: 0.5rem;
676
+ margin-bottom: 2.5rem;
677
+ }
678
+
679
+ .theme-dark .akc-toggle {
680
+ background: rgba(0, 0, 0, 0.3);
681
+ }
682
+
683
+ .akc-toggle-btn {
684
+ flex: 1;
685
+ padding: 1rem;
686
+ border: none;
687
+ background: transparent;
688
+ color: inherit;
689
+ font-weight: 600;
690
+ border-radius: 1rem;
691
+ cursor: pointer;
692
+ transition: all 0.3s ease;
693
+ opacity: 0.6;
694
+ }
695
+
696
+ .akc-toggle-btn.active {
697
+ background: var(--akc-primary);
698
+ color: var(--akc-text);
699
+ opacity: 1;
700
+ box-shadow: 0 4px 15px rgba(234, 88, 12, 0.3);
701
+ }
702
+
703
+ .akc-temps-container {
704
+ display: flex;
705
+ align-items: center;
706
+ justify-content: space-between;
707
+ gap: 2rem;
708
+ margin-bottom: 3rem;
709
+ }
710
+
711
+ .akc-temp-box {
712
+ flex: 1;
713
+ background: var(--akc-bg-secondary);
714
+ border: 1px solid var(--akc-border);
715
+ border-radius: 2rem;
716
+ padding: 2rem;
717
+ text-align: center;
718
+ transition: all 0.3s ease;
719
+ }
720
+
721
+ .theme-dark .akc-temp-box {
722
+ background: rgba(0, 0, 0, 0.2);
723
+ border-color: rgba(255, 255, 255, 0.05);
724
+ }
725
+
726
+ .akc-temp-box:focus-within {
727
+ border-color: var(--akc-primary);
728
+ box-shadow: 0 10px 30px rgba(234, 88, 12, 0.1);
729
+ transform: translateY(-5px);
730
+ }
731
+
732
+ .akc-temp-label {
733
+ font-size: 1rem;
734
+ font-weight: 700;
735
+ opacity: 0.7;
736
+ margin-bottom: 1rem;
737
+ text-transform: uppercase;
738
+ letter-spacing: 0.1em;
739
+ }
740
+
741
+ .akc-temp-input {
742
+ width: 100%;
743
+ text-align: center;
744
+ font-size: 4rem;
745
+ font-weight: 900;
746
+ background: transparent;
747
+ border: none;
748
+ color: inherit;
749
+ outline: none;
750
+ }
751
+
752
+ .akc-temp-middle {
753
+ display: flex;
754
+ align-items: center;
755
+ justify-content: center;
756
+ color: var(--akc-primary);
757
+ background: rgba(234, 88, 12, 0.1);
758
+ width: 4rem;
759
+ height: 4rem;
760
+ border-radius: 50%;
761
+ flex-shrink: 0;
762
+ }
763
+
764
+ .akc-presets {
765
+ display: grid;
766
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
767
+ gap: 1rem;
768
+ }
769
+
770
+ .akc-preset-card {
771
+ background: var(--akc-bg-secondary);
772
+ border: 1px solid var(--akc-border);
773
+ border-radius: 1rem;
774
+ padding: 1rem;
775
+ text-align: center;
776
+ cursor: pointer;
777
+ transition: all 0.2s ease;
778
+ color: inherit;
779
+ }
780
+
781
+ .theme-dark .akc-preset-card {
782
+ background: rgba(0, 0, 0, 0.2);
783
+ border-color: rgba(255, 255, 255, 0.05);
784
+ }
785
+
786
+ .akc-preset-card:hover {
787
+ background: rgba(234, 88, 12, 0.05);
788
+ border-color: var(--akc-primary);
789
+ transform: translateY(-2px);
790
+ }
791
+
792
+ .akc-preset-temp {
793
+ font-weight: 800;
794
+ font-size: 1.25rem;
795
+ color: var(--akc-primary);
796
+ margin-bottom: 0.25rem;
797
+ }
798
+
799
+ .akc-preset-desc {
800
+ font-size: 0.8rem;
801
+ opacity: 0.7;
802
+ font-weight: 500;
803
+ }
804
+
805
+ @media (max-width: 768px) {
806
+ .akc-tabs {
807
+ flex-direction: column;
808
+ gap: 0.5rem;
809
+ }
810
+
811
+ .akc-temps-container {
812
+ flex-direction: column;
813
+ }
814
+
815
+ .akc-temp-middle {
816
+ height: 3rem;
817
+ width: 3rem;
818
+ transform: rotate(90deg);
819
+ }
820
+
821
+ .akc-result-value {
822
+ font-size: 4.5rem;
823
+ }
824
+
825
+ .akc-main-card {
826
+ padding: 1.5rem;
827
+ }
828
+ }
829
+ </style>
830
+
831
+ <script>
832
+ import { AmericanKitchenEngine } from "./AmericanKitchenEngine";
833
+
834
+ AmericanKitchenEngine.initTabs();
835
+ AmericanKitchenEngine.initCups();
836
+ AmericanKitchenEngine.initSpoons();
837
+ AmericanKitchenEngine.initTemperatures();
838
+ </script>