@jjlmoya/utils-cooking 1.35.0 → 1.37.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 (80) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +6 -0
  3. package/src/entries.ts +7 -1
  4. package/src/index.ts +3 -0
  5. package/src/tests/brix-sorbet-density-calculator.test.ts +53 -0
  6. package/src/tests/i18n-titles.test.ts +2 -2
  7. package/src/tests/locale_completeness.test.ts +2 -2
  8. package/src/tests/tool_validation.test.ts +2 -2
  9. package/src/tool/brix-sorbet-density-calculator/bibliography.astro +6 -0
  10. package/src/tool/brix-sorbet-density-calculator/bibliography.ts +10 -0
  11. package/src/tool/brix-sorbet-density-calculator/brix-sorbet-density-calculator.css +878 -0
  12. package/src/tool/brix-sorbet-density-calculator/component.astro +220 -0
  13. package/src/tool/brix-sorbet-density-calculator/entry.ts +26 -0
  14. package/src/tool/brix-sorbet-density-calculator/helpers.ts +102 -0
  15. package/src/tool/brix-sorbet-density-calculator/i18n/de.ts +295 -0
  16. package/src/tool/brix-sorbet-density-calculator/i18n/en.ts +295 -0
  17. package/src/tool/brix-sorbet-density-calculator/i18n/es.ts +295 -0
  18. package/src/tool/brix-sorbet-density-calculator/i18n/fr.ts +295 -0
  19. package/src/tool/brix-sorbet-density-calculator/i18n/id.ts +295 -0
  20. package/src/tool/brix-sorbet-density-calculator/i18n/it.ts +295 -0
  21. package/src/tool/brix-sorbet-density-calculator/i18n/ja.ts +295 -0
  22. package/src/tool/brix-sorbet-density-calculator/i18n/ko.ts +295 -0
  23. package/src/tool/brix-sorbet-density-calculator/i18n/nl.ts +295 -0
  24. package/src/tool/brix-sorbet-density-calculator/i18n/pl.ts +295 -0
  25. package/src/tool/brix-sorbet-density-calculator/i18n/pt.ts +295 -0
  26. package/src/tool/brix-sorbet-density-calculator/i18n/ru.ts +295 -0
  27. package/src/tool/brix-sorbet-density-calculator/i18n/sv.ts +295 -0
  28. package/src/tool/brix-sorbet-density-calculator/i18n/tr.ts +295 -0
  29. package/src/tool/brix-sorbet-density-calculator/i18n/zh.ts +295 -0
  30. package/src/tool/brix-sorbet-density-calculator/index.ts +11 -0
  31. package/src/tool/brix-sorbet-density-calculator/logic.ts +180 -0
  32. package/src/tool/brix-sorbet-density-calculator/script.ts +114 -0
  33. package/src/tool/brix-sorbet-density-calculator/seo.astro +15 -0
  34. package/src/tool/macaron-drying-predictor/bibliography.astro +6 -0
  35. package/src/tool/macaron-drying-predictor/bibliography.ts +14 -0
  36. package/src/tool/macaron-drying-predictor/component.astro +319 -0
  37. package/src/tool/macaron-drying-predictor/entry.ts +26 -0
  38. package/src/tool/macaron-drying-predictor/i18n/de.ts +245 -0
  39. package/src/tool/macaron-drying-predictor/i18n/en.ts +247 -0
  40. package/src/tool/macaron-drying-predictor/i18n/es.ts +245 -0
  41. package/src/tool/macaron-drying-predictor/i18n/fr.ts +245 -0
  42. package/src/tool/macaron-drying-predictor/i18n/id.ts +245 -0
  43. package/src/tool/macaron-drying-predictor/i18n/it.ts +245 -0
  44. package/src/tool/macaron-drying-predictor/i18n/ja.ts +245 -0
  45. package/src/tool/macaron-drying-predictor/i18n/ko.ts +245 -0
  46. package/src/tool/macaron-drying-predictor/i18n/nl.ts +245 -0
  47. package/src/tool/macaron-drying-predictor/i18n/pl.ts +245 -0
  48. package/src/tool/macaron-drying-predictor/i18n/pt.ts +245 -0
  49. package/src/tool/macaron-drying-predictor/i18n/ru.ts +245 -0
  50. package/src/tool/macaron-drying-predictor/i18n/sv.ts +245 -0
  51. package/src/tool/macaron-drying-predictor/i18n/tr.ts +245 -0
  52. package/src/tool/macaron-drying-predictor/i18n/zh.ts +245 -0
  53. package/src/tool/macaron-drying-predictor/index.ts +11 -0
  54. package/src/tool/macaron-drying-predictor/logic.ts +58 -0
  55. package/src/tool/macaron-drying-predictor/macaron-drying-predictor.css +551 -0
  56. package/src/tool/macaron-drying-predictor/seo.astro +15 -0
  57. package/src/tool/oil-smoke-point-tracker/bibliography.astro +6 -0
  58. package/src/tool/oil-smoke-point-tracker/bibliography.ts +10 -0
  59. package/src/tool/oil-smoke-point-tracker/component.astro +445 -0
  60. package/src/tool/oil-smoke-point-tracker/entry.ts +26 -0
  61. package/src/tool/oil-smoke-point-tracker/i18n/de.ts +285 -0
  62. package/src/tool/oil-smoke-point-tracker/i18n/en.ts +285 -0
  63. package/src/tool/oil-smoke-point-tracker/i18n/es.ts +285 -0
  64. package/src/tool/oil-smoke-point-tracker/i18n/fr.ts +285 -0
  65. package/src/tool/oil-smoke-point-tracker/i18n/id.ts +244 -0
  66. package/src/tool/oil-smoke-point-tracker/i18n/it.ts +244 -0
  67. package/src/tool/oil-smoke-point-tracker/i18n/ja.ts +244 -0
  68. package/src/tool/oil-smoke-point-tracker/i18n/ko.ts +244 -0
  69. package/src/tool/oil-smoke-point-tracker/i18n/nl.ts +244 -0
  70. package/src/tool/oil-smoke-point-tracker/i18n/pl.ts +244 -0
  71. package/src/tool/oil-smoke-point-tracker/i18n/pt.ts +244 -0
  72. package/src/tool/oil-smoke-point-tracker/i18n/ru.ts +244 -0
  73. package/src/tool/oil-smoke-point-tracker/i18n/sv.ts +244 -0
  74. package/src/tool/oil-smoke-point-tracker/i18n/tr.ts +244 -0
  75. package/src/tool/oil-smoke-point-tracker/i18n/zh.ts +244 -0
  76. package/src/tool/oil-smoke-point-tracker/index.ts +11 -0
  77. package/src/tool/oil-smoke-point-tracker/logic.ts +70 -0
  78. package/src/tool/oil-smoke-point-tracker/oil-smoke-point-tracker.css +937 -0
  79. package/src/tool/oil-smoke-point-tracker/seo.astro +15 -0
  80. package/src/tools.ts +6 -0
@@ -0,0 +1,878 @@
1
+ .bsdc {
2
+ --bsdc-bg: #fff5f7;
3
+ --bsdc-bg-dark: #0f050b;
4
+ --bsdc-surface: #fff;
5
+ --bsdc-surface-dark: #1b0a15;
6
+ --bsdc-border: #ffd6e0;
7
+ --bsdc-border-dark: #3a1c2f;
8
+ --bsdc-ink: #2b001a;
9
+ --bsdc-ink-dark: #ffeef4;
10
+ --bsdc-muted: #8c6078;
11
+ --bsdc-muted-dark: #ab899c;
12
+ --bsdc-fuchsia: #d946ef;
13
+ --bsdc-orange: #f97316;
14
+ --bsdc-yellow: #eab308;
15
+ --bsdc-blue: #06b6d4;
16
+ --bsdc-green: #10b981;
17
+ --bsdc-gray: #6b7280;
18
+
19
+ width: 100%;
20
+ box-sizing: border-box;
21
+ }
22
+
23
+ .bsdc-card {
24
+ position: relative;
25
+ max-width: 850px;
26
+ margin: 0 auto;
27
+ background: var(--bsdc-surface);
28
+ border: 1px solid var(--bsdc-border);
29
+ border-radius: 2rem;
30
+ overflow: hidden;
31
+ box-shadow: 0 10px 30px rgba(217, 70, 239, 0.05);
32
+ }
33
+
34
+ .bsdc-unit-row {
35
+ position: absolute;
36
+ top: 0.75rem;
37
+ right: 0.75rem;
38
+ display: flex;
39
+ gap: 0;
40
+ border: 1px solid var(--bsdc-border);
41
+ border-radius: 6px;
42
+ overflow: hidden;
43
+ z-index: 2;
44
+ opacity: 0.65;
45
+ transition: opacity 0.2s;
46
+ }
47
+
48
+ .bsdc-unit-row:hover {
49
+ opacity: 1;
50
+ }
51
+
52
+ .theme-dark .bsdc-unit-row {
53
+ border-color: var(--bsdc-border-dark);
54
+ }
55
+
56
+ .bsdc-unit-btn {
57
+ font-size: 0.6rem;
58
+ font-weight: 700;
59
+ padding: 0.3rem 0.5rem;
60
+ border: none;
61
+ cursor: pointer;
62
+ background: transparent;
63
+ color: var(--bsdc-muted);
64
+ letter-spacing: 0.04em;
65
+ transition: all 0.2s;
66
+ line-height: 1;
67
+ }
68
+
69
+ .theme-dark .bsdc-unit-btn {
70
+ color: var(--bsdc-muted-dark);
71
+ }
72
+
73
+ .bsdc-unit-btn.active {
74
+ background: var(--bsdc-fuchsia);
75
+ color: var(--bsdc-surface);
76
+ }
77
+
78
+ .theme-dark .bsdc-unit-btn.active {
79
+ background: var(--bsdc-fuchsia);
80
+ color: var(--bsdc-surface-dark);
81
+ }
82
+
83
+ .theme-dark .bsdc-card {
84
+ background: var(--bsdc-surface-dark);
85
+ border-color: var(--bsdc-border-dark);
86
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
87
+ }
88
+
89
+ .bsdc-body {
90
+ display: grid;
91
+ grid-template-columns: 1fr;
92
+ gap: 0;
93
+ }
94
+
95
+ @media (min-width: 768px) {
96
+ .bsdc-body {
97
+ grid-template-columns: 1.2fr 1fr;
98
+ }
99
+ }
100
+
101
+ .bsdc-controls {
102
+ padding: 2rem;
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: 1.5rem;
106
+ border-bottom: 1px solid var(--bsdc-border);
107
+ }
108
+
109
+ @media (min-width: 768px) {
110
+ .bsdc-controls {
111
+ border-bottom: none;
112
+ border-right: 1px solid var(--bsdc-border);
113
+ }
114
+ .theme-dark .bsdc-controls {
115
+ border-right-color: var(--bsdc-border-dark);
116
+ }
117
+ }
118
+
119
+ .theme-dark .bsdc-controls {
120
+ border-bottom-color: var(--bsdc-border-dark);
121
+ }
122
+
123
+ .bsdc-input-group {
124
+ display: flex;
125
+ flex-direction: column;
126
+ gap: 0.5rem;
127
+ }
128
+
129
+ .bsdc-label {
130
+ font-size: 0.85rem;
131
+ font-weight: 800;
132
+ color: var(--bsdc-ink);
133
+ text-transform: uppercase;
134
+ letter-spacing: 0.05em;
135
+ }
136
+
137
+ .theme-dark .bsdc-label {
138
+ color: var(--bsdc-ink-dark);
139
+ }
140
+
141
+ .bsdc-slider-wrap {
142
+ display: flex;
143
+ align-items: center;
144
+ gap: 1rem;
145
+ }
146
+
147
+ .bsdc-slider {
148
+ -webkit-appearance: none;
149
+ appearance: none;
150
+ flex: 1;
151
+ height: 6px;
152
+ border-radius: 3px;
153
+ background: var(--bsdc-border);
154
+ outline: none;
155
+ cursor: pointer;
156
+ }
157
+
158
+ .theme-dark .bsdc-slider {
159
+ background: var(--bsdc-border-dark);
160
+ }
161
+
162
+ #bsdc-fruit-weight::-webkit-slider-runnable-track {
163
+ background: linear-gradient(90deg, #ffe4e6, #f43f5e);
164
+ height: 6px;
165
+ border-radius: 3px;
166
+ }
167
+ .theme-dark #bsdc-fruit-weight::-webkit-slider-runnable-track { background: linear-gradient(90deg, #4c0519, #f43f5e); }
168
+ #bsdc-fruit-brix::-webkit-slider-runnable-track {
169
+ background: linear-gradient(90deg, #fef9c3, #eab308);
170
+ height: 6px;
171
+ border-radius: 3px;
172
+ }
173
+ .theme-dark #bsdc-fruit-brix::-webkit-slider-runnable-track { background: linear-gradient(90deg, #422006, #eab308); }
174
+ #bsdc-sugar-weight::-webkit-slider-runnable-track {
175
+ background: linear-gradient(90deg, #f1f5f9, #cbd5e1);
176
+ height: 6px;
177
+ border-radius: 3px;
178
+ }
179
+ .theme-dark #bsdc-sugar-weight::-webkit-slider-runnable-track { background: linear-gradient(90deg, #1e293b, #64748b); }
180
+ #bsdc-dextrose-weight::-webkit-slider-runnable-track {
181
+ background: linear-gradient(90deg, #f3e8ff, #a855f7);
182
+ height: 6px;
183
+ border-radius: 3px;
184
+ }
185
+ .theme-dark #bsdc-dextrose-weight::-webkit-slider-runnable-track { background: linear-gradient(90deg, #3b0764, #a855f7); }
186
+ #bsdc-water-weight::-webkit-slider-runnable-track {
187
+ background: linear-gradient(90deg, #ecfeff, #06b6d4);
188
+ height: 6px;
189
+ border-radius: 3px;
190
+ }
191
+ .theme-dark #bsdc-water-weight::-webkit-slider-runnable-track { background: linear-gradient(90deg, #083344, #06b6d4); }
192
+ #bsdc-target-brix::-webkit-slider-runnable-track {
193
+ background: linear-gradient(90deg, #fdf4ff, #d946ef);
194
+ height: 6px;
195
+ border-radius: 3px;
196
+ }
197
+ .theme-dark #bsdc-target-brix::-webkit-slider-runnable-track { background: linear-gradient(90deg, #4a044e, #d946ef); }
198
+
199
+ #bsdc-fruit-weight::-moz-range-track {
200
+ background: linear-gradient(90deg, #ffe4e6, #f43f5e);
201
+ height: 6px;
202
+ border-radius: 3px;
203
+ }
204
+ .theme-dark #bsdc-fruit-weight::-moz-range-track { background: linear-gradient(90deg, #4c0519, #f43f5e); }
205
+ #bsdc-fruit-brix::-moz-range-track {
206
+ background: linear-gradient(90deg, #fef9c3, #eab308);
207
+ height: 6px;
208
+ border-radius: 3px;
209
+ }
210
+ .theme-dark #bsdc-fruit-brix::-moz-range-track { background: linear-gradient(90deg, #422006, #eab308); }
211
+ #bsdc-sugar-weight::-moz-range-track {
212
+ background: linear-gradient(90deg, #f1f5f9, #cbd5e1);
213
+ height: 6px;
214
+ border-radius: 3px;
215
+ }
216
+ .theme-dark #bsdc-sugar-weight::-moz-range-track { background: linear-gradient(90deg, #1e293b, #64748b); }
217
+ #bsdc-dextrose-weight::-moz-range-track {
218
+ background: linear-gradient(90deg, #f3e8ff, #a855f7);
219
+ height: 6px;
220
+ border-radius: 3px;
221
+ }
222
+ .theme-dark #bsdc-dextrose-weight::-moz-range-track { background: linear-gradient(90deg, #3b0764, #a855f7); }
223
+ #bsdc-water-weight::-moz-range-track {
224
+ background: linear-gradient(90deg, #ecfeff, #06b6d4);
225
+ height: 6px;
226
+ border-radius: 3px;
227
+ }
228
+ .theme-dark #bsdc-water-weight::-moz-range-track { background: linear-gradient(90deg, #083344, #06b6d4); }
229
+ #bsdc-target-brix::-moz-range-track {
230
+ background: linear-gradient(90deg, #fdf4ff, #d946ef);
231
+ height: 6px;
232
+ border-radius: 3px;
233
+ }
234
+ .theme-dark #bsdc-target-brix::-moz-range-track { background: linear-gradient(90deg, #4a044e, #d946ef); }
235
+
236
+ .bsdc-slider::-webkit-slider-thumb {
237
+ -webkit-appearance: none;
238
+ appearance: none;
239
+ width: 24px;
240
+ height: 24px;
241
+ border-radius: 50%;
242
+ border: 2px solid var(--bsdc-surface);
243
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
244
+ cursor: pointer;
245
+ transition: transform 0.1s;
246
+ margin-top: -9px;
247
+ }
248
+
249
+ #bsdc-fruit-weight::-webkit-slider-thumb {
250
+ background: linear-gradient(135deg, #f43f5e, #fda4af);
251
+ box-shadow: 0 2px 8px rgba(244, 63, 94, 0.4);
252
+ }
253
+
254
+ #bsdc-fruit-brix::-webkit-slider-thumb {
255
+ background: linear-gradient(135deg, var(--bsdc-yellow), #fef08a);
256
+ box-shadow: 0 2px 8px rgba(234, 179, 8, 0.4);
257
+ }
258
+
259
+ #bsdc-sugar-weight::-webkit-slider-thumb {
260
+ background: linear-gradient(135deg, #e2e8f0, var(--bsdc-surface));
261
+ box-shadow: 0 2px 8px rgba(148, 163, 184, 0.4);
262
+ }
263
+
264
+ #bsdc-dextrose-weight::-webkit-slider-thumb {
265
+ background: linear-gradient(135deg, #a855f7, #c084fc);
266
+ box-shadow: 0 2px 8px rgba(168, 85, 247, 0.4);
267
+ }
268
+
269
+ #bsdc-water-weight::-webkit-slider-thumb {
270
+ background: linear-gradient(135deg, #06b6d4, #67e8f9);
271
+ box-shadow: 0 2px 8px rgba(6, 182, 212, 0.4);
272
+ }
273
+
274
+ #bsdc-target-brix::-webkit-slider-thumb {
275
+ background: linear-gradient(135deg, var(--bsdc-fuchsia), #f472b6);
276
+ box-shadow: 0 2px 8px rgba(217, 70, 239, 0.4);
277
+ }
278
+
279
+ .theme-dark .bsdc-slider::-webkit-slider-thumb {
280
+ border-color: var(--bsdc-surface-dark);
281
+ }
282
+
283
+ .bsdc-slider::-webkit-slider-thumb:hover {
284
+ transform: scale(1.15);
285
+ }
286
+
287
+ .bsdc-slider::-moz-range-thumb {
288
+ width: 24px;
289
+ height: 24px;
290
+ border-radius: 50%;
291
+ border: 2px solid var(--bsdc-surface);
292
+ cursor: pointer;
293
+ }
294
+
295
+ #bsdc-fruit-weight::-moz-range-thumb { background: linear-gradient(135deg, #f43f5e, #fda4af); }
296
+ #bsdc-fruit-brix::-moz-range-thumb { background: linear-gradient(135deg, var(--bsdc-yellow), #fef08a); }
297
+ #bsdc-sugar-weight::-moz-range-thumb { background: linear-gradient(135deg, #e2e8f0, var(--bsdc-surface)); }
298
+ #bsdc-dextrose-weight::-moz-range-thumb { background: linear-gradient(135deg, #a855f7, #c084fc); }
299
+ #bsdc-water-weight::-moz-range-thumb { background: linear-gradient(135deg, #06b6d4, #67e8f9); }
300
+ #bsdc-target-brix::-moz-range-thumb { background: linear-gradient(135deg, var(--bsdc-fuchsia), #f472b6); }
301
+
302
+ .bsdc-value-display {
303
+ font-size: 1.1rem;
304
+ font-weight: 800;
305
+ color: var(--bsdc-ink);
306
+ min-width: 4rem;
307
+ text-align: right;
308
+ font-variant-numeric: tabular-nums;
309
+ }
310
+
311
+ .theme-dark .bsdc-value-display {
312
+ color: var(--bsdc-ink-dark);
313
+ }
314
+
315
+ .bsdc-unit {
316
+ font-size: 0.75rem;
317
+ font-weight: 700;
318
+ color: var(--bsdc-muted);
319
+ margin-left: 0.1rem;
320
+ }
321
+
322
+ .bsdc-custom-select {
323
+ position: relative;
324
+ width: 100%;
325
+ }
326
+
327
+ .bsdc-select-trigger {
328
+ width: 100%;
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: space-between;
332
+ padding: 0.75rem 1rem;
333
+ border-radius: 0.75rem;
334
+ border: 1px solid var(--bsdc-border);
335
+ background: var(--bsdc-surface);
336
+ color: var(--bsdc-ink);
337
+ font-weight: 700;
338
+ font-size: 0.9rem;
339
+ cursor: pointer;
340
+ outline: none;
341
+ transition: border-color 0.2s, box-shadow 0.2s;
342
+ box-sizing: border-box;
343
+ }
344
+
345
+ .theme-dark .bsdc-select-trigger {
346
+ border-color: var(--bsdc-border-dark);
347
+ background: var(--bsdc-surface-dark);
348
+ color: var(--bsdc-ink-dark);
349
+ }
350
+
351
+ .bsdc-select-trigger:focus,
352
+ .bsdc-select-trigger.open {
353
+ border-color: var(--bsdc-fuchsia);
354
+ box-shadow: 0 0 0 3px rgba(217, 70, 239, 0.15);
355
+ }
356
+
357
+ .bsdc-select-trigger-content {
358
+ display: flex;
359
+ align-items: center;
360
+ gap: 0.6rem;
361
+ }
362
+
363
+ .bsdc-select-arrow {
364
+ font-size: 0.7rem;
365
+ color: var(--bsdc-muted);
366
+ transition: transform 0.2s;
367
+ }
368
+
369
+ .bsdc-select-trigger.open .bsdc-select-arrow {
370
+ transform: rotate(180deg);
371
+ }
372
+
373
+ .bsdc-select-dropdown {
374
+ position: absolute;
375
+ top: 100%;
376
+ left: 0;
377
+ width: 100%;
378
+ margin-top: 0.4rem;
379
+ background: var(--bsdc-surface);
380
+ border: 1px solid var(--bsdc-border);
381
+ border-radius: 0.75rem;
382
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
383
+ display: none;
384
+ flex-direction: column;
385
+ z-index: 10;
386
+ overflow: hidden;
387
+ box-sizing: border-box;
388
+ }
389
+
390
+ .theme-dark .bsdc-select-dropdown {
391
+ background: var(--bsdc-surface-dark);
392
+ border-color: var(--bsdc-border-dark);
393
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4);
394
+ }
395
+
396
+ .bsdc-select-dropdown.open {
397
+ display: flex;
398
+ }
399
+
400
+ .bsdc-select-option {
401
+ width: 100%;
402
+ display: flex;
403
+ align-items: center;
404
+ gap: 0.6rem;
405
+ padding: 0.75rem 1rem;
406
+ background: transparent;
407
+ border: none;
408
+ color: var(--bsdc-ink);
409
+ font-weight: 700;
410
+ font-size: 0.9rem;
411
+ cursor: pointer;
412
+ text-align: left;
413
+ transition: background 0.15s;
414
+ box-sizing: border-box;
415
+ }
416
+
417
+ .theme-dark .bsdc-select-option {
418
+ color: var(--bsdc-ink-dark);
419
+ }
420
+
421
+ .bsdc-select-option:hover {
422
+ background: rgba(217, 70, 239, 0.08);
423
+ }
424
+
425
+ .bsdc-select-option.selected {
426
+ background: rgba(217, 70, 239, 0.12);
427
+ color: var(--bsdc-fuchsia);
428
+ }
429
+
430
+ .bsdc-preset-icon {
431
+ width: 20px;
432
+ height: 20px;
433
+ display: flex;
434
+ align-items: center;
435
+ justify-content: center;
436
+ flex-shrink: 0;
437
+ }
438
+
439
+ .bsdc-result-panel {
440
+ padding: 2rem;
441
+ display: flex;
442
+ flex-direction: column;
443
+ align-items: center;
444
+ gap: 1.5rem;
445
+ background: radial-gradient(circle at top right, rgba(217, 70, 239, 0.03), transparent 70%);
446
+ }
447
+
448
+ .bsdc-refractometer-view {
449
+ position: relative;
450
+ width: 180px;
451
+ height: 180px;
452
+ border-radius: 50%;
453
+ background: #000;
454
+ border: 6px solid #2b001a;
455
+ box-shadow: inset 0 0 20px rgba(0,0,0,0.8), 0 8px 20px rgba(0,0,0,0.3);
456
+ overflow: hidden;
457
+ }
458
+
459
+ .bsdc-refractometer-view::after {
460
+ content: '';
461
+ position: absolute;
462
+ top: 0;
463
+ left: 0;
464
+ width: 100%;
465
+ height: 100%;
466
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0) 100%);
467
+ pointer-events: none;
468
+ border-radius: 50%;
469
+ }
470
+
471
+ .bsdc-refractometer-lens {
472
+ position: absolute;
473
+ top: 0;
474
+ left: 0;
475
+ width: 100%;
476
+ height: 200%;
477
+ background: linear-gradient(to bottom, #101f30 0%, #1e40af 49%, #38bdf8 50%, var(--bsdc-surface) 51%, #f8fafc 100%);
478
+ transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
479
+ }
480
+
481
+ .bsdc-card.status-optimal .bsdc-result-panel {
482
+ background: radial-gradient(circle at top right, rgba(16, 185, 129, 0.08), transparent 70%);
483
+ }
484
+ .bsdc-card.status-soft .bsdc-result-panel {
485
+ background: radial-gradient(circle at top right, rgba(217, 70, 239, 0.08), transparent 70%);
486
+ }
487
+ .bsdc-card.status-hard .bsdc-result-panel {
488
+ background: radial-gradient(circle at top right, rgba(249, 115, 22, 0.08), transparent 70%);
489
+ }
490
+
491
+ .bsdc-card.status-optimal .bsdc-stat-box-large {
492
+ border-color: rgba(16, 185, 129, 0.3);
493
+ box-shadow: 0 4px 20px rgba(16, 185, 129, 0.1);
494
+ }
495
+ .bsdc-card.status-soft .bsdc-stat-box-large {
496
+ border-color: rgba(217, 70, 239, 0.3);
497
+ box-shadow: 0 4px 20px rgba(217, 70, 239, 0.1);
498
+ }
499
+ .bsdc-card.status-hard .bsdc-stat-box-large {
500
+ border-color: rgba(249, 115, 22, 0.3);
501
+ box-shadow: 0 4px 20px rgba(249, 115, 22, 0.1);
502
+ }
503
+
504
+ .bsdc-refractometer-scale {
505
+ position: absolute;
506
+ top: 0;
507
+ left: 0;
508
+ width: 100%;
509
+ height: 100%;
510
+ pointer-events: none;
511
+ display: flex;
512
+ flex-direction: column;
513
+ justify-content: space-between;
514
+ align-items: center;
515
+ padding: 10px 0;
516
+ box-sizing: border-box;
517
+ }
518
+
519
+ .bsdc-scale-mark {
520
+ position: relative;
521
+ width: 100%;
522
+ display: flex;
523
+ justify-content: center;
524
+ }
525
+
526
+ .bsdc-scale-line {
527
+ position: absolute;
528
+ left: 50%;
529
+ transform: translateX(-50%);
530
+ width: 20px;
531
+ height: 1px;
532
+ background: rgba(255, 255, 255, 0.5);
533
+ }
534
+
535
+ .bsdc-scale-label {
536
+ font-size: 0.65rem;
537
+ font-weight: 700;
538
+ color: var(--bsdc-surface);
539
+ text-shadow: 0 1px 2px #000;
540
+ }
541
+
542
+ .bsdc-refractometer-crosshair {
543
+ position: absolute;
544
+ top: 0;
545
+ left: 0;
546
+ width: 100%;
547
+ height: 100%;
548
+ border-radius: 50%;
549
+ pointer-events: none;
550
+ background: radial-gradient(circle, transparent 40%, rgba(0,0,0,0.2) 100%);
551
+ }
552
+
553
+ .bsdc-refractometer-crosshair::before {
554
+ content: '';
555
+ position: absolute;
556
+ top: 50%;
557
+ left: 10%;
558
+ width: 80%;
559
+ height: 1px;
560
+ background: rgba(239, 68, 68, 0.6);
561
+ }
562
+
563
+ .bsdc-refractometer-crosshair::after {
564
+ content: '';
565
+ position: absolute;
566
+ left: 50%;
567
+ top: 10%;
568
+ width: 1px;
569
+ height: 80%;
570
+ background: rgba(239, 68, 68, 0.6);
571
+ }
572
+
573
+ .bsdc-stats-grid {
574
+ width: 100%;
575
+ display: grid;
576
+ grid-template-columns: 1fr 1fr;
577
+ gap: 1rem;
578
+ }
579
+
580
+ .bsdc-stat-box {
581
+ background: var(--bsdc-bg);
582
+ border: 1px solid var(--bsdc-border);
583
+ padding: 1.25rem;
584
+ border-radius: 1.25rem;
585
+ text-align: center;
586
+ display: flex;
587
+ flex-direction: column;
588
+ justify-content: center;
589
+ align-items: center;
590
+ gap: 0.35rem;
591
+ box-shadow: 0 4px 12px rgba(217, 70, 239, 0.02);
592
+ }
593
+
594
+ .bsdc-stat-box-large {
595
+ grid-column: span 2;
596
+ }
597
+
598
+ .theme-dark .bsdc-stat-box {
599
+ background: var(--bsdc-surface-dark);
600
+ border-color: var(--bsdc-border-dark);
601
+ }
602
+
603
+ .bsdc-stat-label {
604
+ font-size: 0.75rem;
605
+ font-weight: 800;
606
+ color: var(--bsdc-muted);
607
+ text-transform: uppercase;
608
+ letter-spacing: 0.05em;
609
+ }
610
+
611
+ .bsdc-stat-value {
612
+ font-size: 1.6rem;
613
+ font-weight: 900;
614
+ color: var(--bsdc-ink);
615
+ font-variant-numeric: tabular-nums;
616
+ }
617
+
618
+ .theme-dark .bsdc-stat-value {
619
+ color: var(--bsdc-ink-dark);
620
+ }
621
+
622
+ .bsdc-badge {
623
+ display: inline-flex;
624
+ padding: 0.4rem 1rem;
625
+ border-radius: 100px;
626
+ font-size: 0.8rem;
627
+ font-weight: 800;
628
+ text-transform: uppercase;
629
+ letter-spacing: 0.05em;
630
+ }
631
+
632
+ .bsdc-badge.optimal {
633
+ background: rgba(16, 185, 129, 0.1);
634
+ color: var(--bsdc-green);
635
+ border: 1px solid rgba(16, 185, 129, 0.2);
636
+ }
637
+
638
+ .bsdc-badge.soft {
639
+ background: rgba(217, 70, 239, 0.1);
640
+ color: var(--bsdc-fuchsia);
641
+ border: 1px solid rgba(217, 70, 239, 0.2);
642
+ }
643
+
644
+ .bsdc-badge.hard {
645
+ background: rgba(249, 115, 22, 0.1);
646
+ color: var(--bsdc-orange);
647
+ border: 1px solid rgba(249, 115, 22, 0.2);
648
+ }
649
+
650
+ .bsdc-temp-gauge {
651
+ width: 100%;
652
+ background: var(--bsdc-bg);
653
+ border: 1px solid var(--bsdc-border);
654
+ border-radius: 1.25rem;
655
+ padding: 1.25rem;
656
+ box-sizing: border-box;
657
+ }
658
+
659
+ .theme-dark .bsdc-temp-gauge {
660
+ background: var(--bsdc-surface-dark);
661
+ border-color: var(--bsdc-border-dark);
662
+ }
663
+
664
+ .bsdc-gauge-title {
665
+ font-size: 0.8rem;
666
+ font-weight: 800;
667
+ color: var(--bsdc-ink);
668
+ text-transform: uppercase;
669
+ letter-spacing: 0.05em;
670
+ text-align: center;
671
+ margin-bottom: 0.75rem;
672
+ }
673
+
674
+ .theme-dark .bsdc-gauge-title {
675
+ color: var(--bsdc-ink-dark);
676
+ }
677
+
678
+ .bsdc-gauge-bar-wrap {
679
+ position: relative;
680
+ height: 24px;
681
+ background: linear-gradient(to right, #1e3a8a 0%, #0284c7 35%, #10b981 65%, #f97316 100%);
682
+ border-radius: 12px;
683
+ overflow: hidden;
684
+ box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);
685
+ }
686
+
687
+ .bsdc-gauge-marker {
688
+ position: absolute;
689
+ top: 0;
690
+ height: 100%;
691
+ width: 30%;
692
+ left: 35%;
693
+ background: rgba(255, 255, 255, 0.3);
694
+ border: 2px solid var(--bsdc-surface);
695
+ box-shadow: 0 0 10px rgba(255, 255, 255, 0.8), inset 0 0 4px rgba(255, 255, 255, 0.5);
696
+ box-sizing: border-box;
697
+ border-radius: 12px;
698
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: center;
702
+ color: var(--bsdc-surface);
703
+ }
704
+
705
+ .bsdc-gauge-marker.out-of-range-cold::before {
706
+ content: '◀';
707
+ font-size: 0.65rem;
708
+ }
709
+
710
+ .bsdc-gauge-marker.out-of-range-warm::before {
711
+ content: '▶';
712
+ font-size: 0.65rem;
713
+ }
714
+
715
+ .bsdc-gauge-labels {
716
+ display: flex;
717
+ justify-content: space-between;
718
+ margin-top: 0.4rem;
719
+ font-size: 0.65rem;
720
+ font-weight: 700;
721
+ color: var(--bsdc-muted);
722
+ }
723
+
724
+ .theme-dark .bsdc-gauge-labels {
725
+ color: var(--bsdc-muted-dark);
726
+ }
727
+
728
+ .bsdc-recommendation {
729
+ width: 100%;
730
+ background: linear-gradient(135deg, rgba(217, 70, 239, 0.05), rgba(249, 115, 22, 0.05));
731
+ border: 1px dashed var(--bsdc-border);
732
+ border-radius: 1.25rem;
733
+ padding: 1.25rem;
734
+ box-sizing: border-box;
735
+ }
736
+
737
+ .theme-dark .bsdc-recommendation {
738
+ border-color: var(--bsdc-border-dark);
739
+ background: linear-gradient(135deg, rgba(217, 70, 239, 0.02), rgba(249, 115, 22, 0.02));
740
+ }
741
+
742
+ .bsdc-rec-title {
743
+ font-size: 0.85rem;
744
+ font-weight: 800;
745
+ color: var(--bsdc-ink);
746
+ text-transform: uppercase;
747
+ margin-bottom: 0.75rem;
748
+ text-align: center;
749
+ letter-spacing: 0.05em;
750
+ }
751
+
752
+ .theme-dark .bsdc-rec-title {
753
+ color: var(--bsdc-ink-dark);
754
+ }
755
+
756
+ .bsdc-rec-values {
757
+ display: flex;
758
+ justify-content: space-around;
759
+ gap: 1rem;
760
+ }
761
+
762
+ .bsdc-rec-item {
763
+ display: flex;
764
+ flex-direction: column;
765
+ align-items: center;
766
+ }
767
+
768
+ .bsdc-rec-label {
769
+ font-size: 0.7rem;
770
+ font-weight: 700;
771
+ color: var(--bsdc-muted);
772
+ }
773
+
774
+ .bsdc-rec-val {
775
+ font-size: 1.3rem;
776
+ font-weight: 800;
777
+ color: var(--bsdc-fuchsia);
778
+ transition: color 0.3s, text-shadow 0.3s;
779
+ }
780
+
781
+ .bsdc-card.status-optimal .bsdc-rec-val {
782
+ color: var(--bsdc-green);
783
+ text-shadow: 0 0 10px rgba(16, 185, 129, 0.2);
784
+ }
785
+ .bsdc-card.status-soft .bsdc-rec-val {
786
+ color: var(--bsdc-fuchsia);
787
+ text-shadow: 0 0 10px rgba(217, 70, 239, 0.2);
788
+ }
789
+ .bsdc-card.status-hard .bsdc-rec-val {
790
+ color: var(--bsdc-orange);
791
+ text-shadow: 0 0 10px rgba(249, 115, 22, 0.2);
792
+ }
793
+
794
+ .bsdc-card-group {
795
+ background: rgba(217, 70, 239, 0.015);
796
+ border: 1px solid var(--bsdc-border);
797
+ border-radius: 1.25rem;
798
+ padding: 1.25rem;
799
+ display: flex;
800
+ flex-direction: column;
801
+ gap: 0.6rem;
802
+ box-shadow: 0 4px 10px rgba(0,0,0,0.01);
803
+ }
804
+
805
+ .theme-dark .bsdc-card-group {
806
+ background: rgba(0, 0, 0, 0.1);
807
+ border-color: var(--bsdc-border-dark);
808
+ }
809
+
810
+ .bsdc-adjuster-btn {
811
+ width: 28px;
812
+ height: 28px;
813
+ border-radius: 50%;
814
+ border: 1px solid var(--bsdc-border);
815
+ background: var(--bsdc-surface);
816
+ color: var(--bsdc-ink);
817
+ font-weight: 800;
818
+ font-size: 1rem;
819
+ cursor: pointer;
820
+ display: flex;
821
+ align-items: center;
822
+ justify-content: center;
823
+ transition: all 0.15s;
824
+ }
825
+
826
+ .theme-dark .bsdc-adjuster-btn {
827
+ border-color: var(--bsdc-border-dark);
828
+ background: var(--bsdc-surface-dark);
829
+ color: var(--bsdc-ink-dark);
830
+ }
831
+
832
+ .bsdc-adjuster-btn:hover {
833
+ background: var(--bsdc-fuchsia);
834
+ color: var(--bsdc-surface);
835
+ border-color: var(--bsdc-fuchsia);
836
+ transform: scale(1.1);
837
+ }
838
+
839
+ .bsdc-desc {
840
+ font-size: 0.72rem;
841
+ color: var(--bsdc-muted);
842
+ line-height: 1.4;
843
+ }
844
+
845
+ .theme-dark .bsdc-desc {
846
+ color: var(--bsdc-muted-dark);
847
+ }
848
+
849
+ .bsdc-gauge-status {
850
+ margin-top: 0.75rem;
851
+ font-size: 0.75rem;
852
+ font-weight: 700;
853
+ text-align: center;
854
+ padding: 0.35rem 0.75rem;
855
+ border-radius: 6px;
856
+ line-height: 1.3;
857
+ }
858
+
859
+ .bsdc-gauge-status.status-soft-melt {
860
+ background: rgba(249, 115, 22, 0.1);
861
+ color: var(--bsdc-orange);
862
+ }
863
+
864
+ .bsdc-gauge-status.status-ideal-cabinet {
865
+ background: rgba(234, 179, 8, 0.1);
866
+ color: var(--bsdc-yellow);
867
+ }
868
+
869
+ .bsdc-gauge-status.status-home-freezer {
870
+ background: rgba(16, 185, 129, 0.1);
871
+ color: var(--bsdc-green);
872
+ }
873
+
874
+ .bsdc-gauge-status.status-liquid {
875
+ background: rgba(217, 70, 239, 0.1);
876
+ color: var(--bsdc-fuchsia);
877
+ }
878
+