@jjlmoya/utils-cooking 1.36.0 → 1.38.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 +1 -1
- package/src/category/index.ts +6 -0
- package/src/entries.ts +7 -1
- package/src/index.ts +3 -0
- package/src/tests/brix-sorbet-density-calculator.test.ts +53 -0
- package/src/tests/i18n-titles.test.ts +2 -2
- package/src/tests/leavener-acid-neutralizer.test.ts +42 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/brix-sorbet-density-calculator/bibliography.astro +6 -0
- package/src/tool/brix-sorbet-density-calculator/bibliography.ts +10 -0
- package/src/tool/brix-sorbet-density-calculator/brix-sorbet-density-calculator.css +878 -0
- package/src/tool/brix-sorbet-density-calculator/component.astro +220 -0
- package/src/tool/brix-sorbet-density-calculator/entry.ts +26 -0
- package/src/tool/brix-sorbet-density-calculator/helpers.ts +102 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/de.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/en.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/es.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/fr.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/id.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/it.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/ja.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/ko.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/nl.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/pl.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/pt.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/ru.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/sv.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/tr.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/i18n/zh.ts +295 -0
- package/src/tool/brix-sorbet-density-calculator/index.ts +11 -0
- package/src/tool/brix-sorbet-density-calculator/logic.ts +180 -0
- package/src/tool/brix-sorbet-density-calculator/script.ts +114 -0
- package/src/tool/brix-sorbet-density-calculator/seo.astro +15 -0
- package/src/tool/leavener-acid-neutralizer/bibliography.astro +6 -0
- package/src/tool/leavener-acid-neutralizer/bibliography.ts +10 -0
- package/src/tool/leavener-acid-neutralizer/component.astro +335 -0
- package/src/tool/leavener-acid-neutralizer/entry.ts +26 -0
- package/src/tool/leavener-acid-neutralizer/i18n/de.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/en.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/es.ts +275 -0
- package/src/tool/leavener-acid-neutralizer/i18n/fr.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/id.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/it.ts +275 -0
- package/src/tool/leavener-acid-neutralizer/i18n/ja.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/ko.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/nl.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/pl.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/pt.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/ru.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/sv.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/tr.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/i18n/zh.ts +279 -0
- package/src/tool/leavener-acid-neutralizer/index.ts +10 -0
- package/src/tool/leavener-acid-neutralizer/leavener-acid-neutralizer.css +424 -0
- package/src/tool/leavener-acid-neutralizer/logic.ts +57 -0
- package/src/tool/leavener-acid-neutralizer/seo.astro +15 -0
- package/src/tool/oil-smoke-point-tracker/bibliography.astro +6 -0
- package/src/tool/oil-smoke-point-tracker/bibliography.ts +10 -0
- package/src/tool/oil-smoke-point-tracker/component.astro +445 -0
- package/src/tool/oil-smoke-point-tracker/entry.ts +26 -0
- package/src/tool/oil-smoke-point-tracker/i18n/de.ts +285 -0
- package/src/tool/oil-smoke-point-tracker/i18n/en.ts +285 -0
- package/src/tool/oil-smoke-point-tracker/i18n/es.ts +285 -0
- package/src/tool/oil-smoke-point-tracker/i18n/fr.ts +285 -0
- package/src/tool/oil-smoke-point-tracker/i18n/id.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/it.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/ja.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/ko.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/nl.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/pl.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/pt.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/ru.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/sv.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/tr.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/i18n/zh.ts +244 -0
- package/src/tool/oil-smoke-point-tracker/index.ts +11 -0
- package/src/tool/oil-smoke-point-tracker/logic.ts +70 -0
- package/src/tool/oil-smoke-point-tracker/oil-smoke-point-tracker.css +937 -0
- package/src/tool/oil-smoke-point-tracker/seo.astro +15 -0
- package/src/tools.ts +6 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
interface Props {
|
|
3
|
+
ui: Record<string, string>;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const { ui } = Astro.props;
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<div class="bsdc">
|
|
10
|
+
<div class="bsdc-card">
|
|
11
|
+
<div class="bsdc-unit-row">
|
|
12
|
+
<button type="button" id="bsdc-unit-metric" class="bsdc-unit-btn active">Metric</button>
|
|
13
|
+
<button type="button" id="bsdc-unit-imperial" class="bsdc-unit-btn">Imperial</button>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="bsdc-body">
|
|
16
|
+
<div class="bsdc-controls">
|
|
17
|
+
<div class="bsdc-input-group">
|
|
18
|
+
<label class="bsdc-label">{ui.fruitPresetLabel}</label>
|
|
19
|
+
<div class="bsdc-custom-select" id="bsdc-fruit-selector">
|
|
20
|
+
<button type="button" class="bsdc-select-trigger" id="bsdc-select-trigger">
|
|
21
|
+
<span class="bsdc-select-trigger-content">
|
|
22
|
+
<span class="bsdc-preset-icon" id="bsdc-selected-icon">
|
|
23
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M12 2C8 2 5 5 5 10C5 16 9 22 12 22C15 22 19 16 19 10C19 5 16 2 12 2Z" fill="currentColor"/></svg>
|
|
24
|
+
</span>
|
|
25
|
+
<span id="bsdc-selected-name">{ui.presetMango}</span>
|
|
26
|
+
</span>
|
|
27
|
+
<span class="bsdc-select-arrow">▼</span>
|
|
28
|
+
</button>
|
|
29
|
+
<div class="bsdc-select-dropdown" id="bsdc-select-dropdown">
|
|
30
|
+
<button type="button" class="bsdc-select-option" data-value="custom">
|
|
31
|
+
<span class="bsdc-preset-icon">
|
|
32
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 14c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z" fill="currentColor"/></svg>
|
|
33
|
+
</span>
|
|
34
|
+
<span>{ui.presetCustom}</span>
|
|
35
|
+
</button>
|
|
36
|
+
<button type="button" class="bsdc-select-option" data-value="2">
|
|
37
|
+
<span class="bsdc-preset-icon">
|
|
38
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><ellipse cx="12" cy="12" rx="9" ry="6" fill="currentColor"/></svg>
|
|
39
|
+
</span>
|
|
40
|
+
<span>{ui.presetLemon}</span>
|
|
41
|
+
</button>
|
|
42
|
+
<button type="button" class="bsdc-select-option" data-value="8">
|
|
43
|
+
<span class="bsdc-preset-icon">
|
|
44
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M12 22C12 22 4 14 4 9C4 5 7 3 12 3C17 3 20 5 20 9C20 14 12 22 12 22Z" fill="currentColor"/></svg>
|
|
45
|
+
</span>
|
|
46
|
+
<span>{ui.presetStrawberry}</span>
|
|
47
|
+
</button>
|
|
48
|
+
<button type="button" class="bsdc-select-option" data-value="10">
|
|
49
|
+
<span class="bsdc-preset-icon">
|
|
50
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><circle cx="12" cy="12" r="8" fill="currentColor"/></svg>
|
|
51
|
+
</span>
|
|
52
|
+
<span>{ui.presetOrange}</span>
|
|
53
|
+
</button>
|
|
54
|
+
<button type="button" class="bsdc-select-option selected" data-value="14">
|
|
55
|
+
<span class="bsdc-preset-icon">
|
|
56
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M12 2C8 2 5 5 5 10C5 16 9 22 12 22C15 22 19 16 19 10C19 5 16 2 12 2Z" fill="currentColor"/></svg>
|
|
57
|
+
</span>
|
|
58
|
+
<span>{ui.presetMango}</span>
|
|
59
|
+
</button>
|
|
60
|
+
<button type="button" class="bsdc-select-option" data-value="21">
|
|
61
|
+
<span class="bsdc-preset-icon">
|
|
62
|
+
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M19 4C14 4 7 8 4 13C2.5 15.5 2 18 2 20C4.5 20 7 19.5 9.5 18C14.5 15 19 8 19 4Z" fill="currentColor"/></svg>
|
|
63
|
+
</span>
|
|
64
|
+
<span>{ui.presetBanana}</span>
|
|
65
|
+
</button>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<div class="bsdc-card-group">
|
|
71
|
+
<div class="bsdc-input-group">
|
|
72
|
+
<label class="bsdc-label" for="bsdc-fruit-weight">{ui.fruitWeightLabel}</label>
|
|
73
|
+
<div class="bsdc-slider-wrap">
|
|
74
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="down" data-target="bsdc-fruit-weight">-</button>
|
|
75
|
+
<input type="range" id="bsdc-fruit-weight" class="bsdc-slider" min="100" max="2000" step="50" value="500" />
|
|
76
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="up" data-target="bsdc-fruit-weight">+</button>
|
|
77
|
+
<span class="bsdc-value-display"><span id="bsdc-fruit-weight-val">500</span><span class="bsdc-unit bsdc-weight-unit">{ui.gramsUnit}</span></span>
|
|
78
|
+
</div>
|
|
79
|
+
<div class="bsdc-desc">Provides the main flavor, color, natural sugars, and pulp texture.</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<div class="bsdc-card-group">
|
|
84
|
+
<div class="bsdc-input-group">
|
|
85
|
+
<label class="bsdc-label" for="bsdc-fruit-brix">{ui.fruitBrixLabel}</label>
|
|
86
|
+
<div class="bsdc-slider-wrap">
|
|
87
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="down" data-target="bsdc-fruit-brix">-</button>
|
|
88
|
+
<input type="range" id="bsdc-fruit-brix" class="bsdc-slider" min="0" max="30" step="1" value="14" />
|
|
89
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="up" data-target="bsdc-fruit-brix">+</button>
|
|
90
|
+
<span class="bsdc-value-display"><span id="bsdc-fruit-brix-val">14</span><span class="bsdc-unit">{ui.brixUnit}</span></span>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="bsdc-desc">Natural sugar percentage in the fruit. Measured using a refractometer.</div>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
<div class="bsdc-card-group">
|
|
97
|
+
<div class="bsdc-input-group">
|
|
98
|
+
<label class="bsdc-label" for="bsdc-sugar-weight">{ui.sugarWeightLabel}</label>
|
|
99
|
+
<div class="bsdc-slider-wrap">
|
|
100
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="down" data-target="bsdc-sugar-weight">-</button>
|
|
101
|
+
<input type="range" id="bsdc-sugar-weight" class="bsdc-slider" min="0" max="1000" step="10" value="150" />
|
|
102
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="up" data-target="bsdc-sugar-weight">+</button>
|
|
103
|
+
<span class="bsdc-value-display"><span id="bsdc-sugar-weight-val">150</span><span class="bsdc-unit bsdc-weight-unit">{ui.gramsUnit}</span></span>
|
|
104
|
+
</div>
|
|
105
|
+
<div class="bsdc-desc">Adds sweetness, baseline solids, and lowers the freezing point (PAC = 100).</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<div class="bsdc-card-group">
|
|
110
|
+
<div class="bsdc-input-group">
|
|
111
|
+
<label class="bsdc-label" for="bsdc-dextrose-weight">{ui.dextroseWeightLabel}</label>
|
|
112
|
+
<div class="bsdc-slider-wrap">
|
|
113
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="down" data-target="bsdc-dextrose-weight">-</button>
|
|
114
|
+
<input type="range" id="bsdc-dextrose-weight" class="bsdc-slider" min="0" max="1000" step="10" value="0" />
|
|
115
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="up" data-target="bsdc-dextrose-weight">+</button>
|
|
116
|
+
<span class="bsdc-value-display"><span id="bsdc-dextrose-weight-val">0</span><span class="bsdc-unit bsdc-weight-unit">{ui.gramsUnit}</span></span>
|
|
117
|
+
</div>
|
|
118
|
+
<div class="bsdc-desc">Boosts softness and anti-freezing capacity (PAC = 190) with 30% less sweetness than sucrose.</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div class="bsdc-card-group">
|
|
123
|
+
<div class="bsdc-input-group">
|
|
124
|
+
<label class="bsdc-label" for="bsdc-water-weight">{ui.waterWeightLabel}</label>
|
|
125
|
+
<div class="bsdc-slider-wrap">
|
|
126
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="down" data-target="bsdc-water-weight">-</button>
|
|
127
|
+
<input type="range" id="bsdc-water-weight" class="bsdc-slider" min="0" max="2000" step="50" value="350" />
|
|
128
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="up" data-target="bsdc-water-weight">+</button>
|
|
129
|
+
<span class="bsdc-value-display"><span id="bsdc-water-weight-val">350</span><span class="bsdc-unit bsdc-weight-unit">{ui.gramsUnit}</span></span>
|
|
130
|
+
</div>
|
|
131
|
+
<div class="bsdc-desc">Balances density and sweetness to hit the targeted Brix concentration.</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<div class="bsdc-card-group">
|
|
136
|
+
<div class="bsdc-input-group">
|
|
137
|
+
<label class="bsdc-label" for="bsdc-target-brix">{ui.targetBrixLabel}</label>
|
|
138
|
+
<div class="bsdc-slider-wrap">
|
|
139
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="down" data-target="bsdc-target-brix">-</button>
|
|
140
|
+
<input type="range" id="bsdc-target-brix" class="bsdc-slider" min="20" max="40" step="1" value="28" />
|
|
141
|
+
<button type="button" class="bsdc-adjuster-btn" data-dir="up" data-target="bsdc-target-brix">+</button>
|
|
142
|
+
<span class="bsdc-value-display"><span id="bsdc-target-brix-val">28</span><span class="bsdc-unit">{ui.brixUnit}</span></span>
|
|
143
|
+
</div>
|
|
144
|
+
<div class="bsdc-desc">Target total sugar percentage. Professional pastry standard is 28% Brix.</div>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<div class="bsdc-result-panel">
|
|
150
|
+
<div class="bsdc-refractometer-view">
|
|
151
|
+
<div class="bsdc-refractometer-lens" id="bsdc-lens"></div>
|
|
152
|
+
<div class="bsdc-refractometer-scale">
|
|
153
|
+
<div class="bsdc-scale-mark" style="top: 0%"><span class="bsdc-scale-line"></span><span class="bsdc-scale-label">50</span></div>
|
|
154
|
+
<div class="bsdc-scale-mark" style="top: 20%"><span class="bsdc-scale-line"></span><span class="bsdc-scale-label">40</span></div>
|
|
155
|
+
<div class="bsdc-scale-mark" style="top: 40%"><span class="bsdc-scale-line"></span><span class="bsdc-scale-label">30</span></div>
|
|
156
|
+
<div class="bsdc-scale-mark" style="top: 60%"><span class="bsdc-scale-line"></span><span class="bsdc-scale-label">20</span></div>
|
|
157
|
+
<div class="bsdc-scale-mark" style="top: 80%"><span class="bsdc-scale-line"></span><span class="bsdc-scale-label">10</span></div>
|
|
158
|
+
<div class="bsdc-scale-mark" style="top: 100%"><span class="bsdc-scale-line"></span><span class="bsdc-scale-label">0</span></div>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="bsdc-refractometer-crosshair"></div>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<div class="bsdc-stats-grid">
|
|
164
|
+
<div class="bsdc-stat-box bsdc-stat-box-large">
|
|
165
|
+
<span class="bsdc-stat-label">{ui.totalBrixLabel}</span>
|
|
166
|
+
<span class="bsdc-stat-value" id="bsdc-total-brix">0%</span>
|
|
167
|
+
<span class="bsdc-badge" id="bsdc-status-badge">OPTIMAL</span>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<div class="bsdc-stat-box">
|
|
171
|
+
<span class="bsdc-stat-label">{ui.totalWeightLabel}</span>
|
|
172
|
+
<span class="bsdc-stat-value" id="bsdc-total-weight">0 g</span>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<div class="bsdc-stat-box">
|
|
176
|
+
<span class="bsdc-stat-label">{ui.totalPACLabel}</span>
|
|
177
|
+
<span class="bsdc-stat-value" id="bsdc-total-pac">0</span>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<div class="bsdc-temp-gauge">
|
|
182
|
+
<div class="bsdc-gauge-title">Optimal Scoopable Range: <span id="bsdc-temp-range-val"></span></div>
|
|
183
|
+
<div class="bsdc-gauge-bar-wrap">
|
|
184
|
+
<div class="bsdc-gauge-marker" id="bsdc-temp-marker"></div>
|
|
185
|
+
</div>
|
|
186
|
+
<div class="bsdc-gauge-labels" id="bsdc-temp-labels">
|
|
187
|
+
<span>-25°C</span>
|
|
188
|
+
<span>-20°C</span>
|
|
189
|
+
<span>-15°C</span>
|
|
190
|
+
<span>-10°C</span>
|
|
191
|
+
<span>-5°C</span>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="bsdc-gauge-status" id="bsdc-temp-status"></div>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<div class="bsdc-recommendation">
|
|
197
|
+
<div class="bsdc-rec-title">{ui.recommendedTitle}</div>
|
|
198
|
+
<div class="bsdc-rec-values">
|
|
199
|
+
<div class="bsdc-rec-item">
|
|
200
|
+
<span class="bsdc-rec-label">{ui.recommendedSugarLabel}</span>
|
|
201
|
+
<span class="bsdc-rec-val" id="bsdc-rec-sugar">0 g</span>
|
|
202
|
+
</div>
|
|
203
|
+
<div class="bsdc-rec-item">
|
|
204
|
+
<span class="bsdc-rec-label">{ui.recommendedWaterLabel}</span>
|
|
205
|
+
<span class="bsdc-rec-val" id="bsdc-rec-water">0 g</span>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<script type="application/json" id="bsdc-data">{JSON.stringify(ui)}</script>
|
|
215
|
+
<script>
|
|
216
|
+
import { initBrixCalculator } from './script';
|
|
217
|
+
const dataEl = document.getElementById('bsdc-data');
|
|
218
|
+
const ui = dataEl ? JSON.parse(dataEl.textContent || '{}') : {};
|
|
219
|
+
initBrixCalculator(ui);
|
|
220
|
+
</script>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CookingToolEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const brixSorbetDensity: CookingToolEntry = {
|
|
4
|
+
id: 'brix-sorbet-density-calculator',
|
|
5
|
+
icons: {
|
|
6
|
+
bg: 'mdi:fruit-grapes',
|
|
7
|
+
fg: 'mdi:opacity',
|
|
8
|
+
},
|
|
9
|
+
i18n: {
|
|
10
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
11
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
12
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
13
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
14
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
15
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
16
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
17
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
18
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
19
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
20
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
21
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
22
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
23
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
24
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export interface SorbetInputs {
|
|
2
|
+
fruitWeight: number;
|
|
3
|
+
fruitBrix: number;
|
|
4
|
+
sugarWeight: number;
|
|
5
|
+
waterWeight: number;
|
|
6
|
+
dextroseWeight: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface SorbetResult {
|
|
10
|
+
totalBrix: number;
|
|
11
|
+
totalWeight: number;
|
|
12
|
+
totalPAC: number;
|
|
13
|
+
status: 'soft' | 'optimal' | 'hard';
|
|
14
|
+
recommendedSugar: number;
|
|
15
|
+
recommendedWater: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class SorbetLogic {
|
|
19
|
+
static calculate(inputs: SorbetInputs, targetBrix: number = 28): SorbetResult {
|
|
20
|
+
const fruitSugar = inputs.fruitWeight * (inputs.fruitBrix / 100);
|
|
21
|
+
const totalSugar = fruitSugar + inputs.sugarWeight + inputs.dextroseWeight;
|
|
22
|
+
const totalWeight = inputs.fruitWeight + inputs.waterWeight + inputs.sugarWeight + inputs.dextroseWeight;
|
|
23
|
+
const totalBrix = totalWeight > 0 ? (totalSugar / totalWeight) * 100 : 0;
|
|
24
|
+
const fruitPAC = fruitSugar * 1.9;
|
|
25
|
+
const sugarPAC = inputs.sugarWeight * 1.0;
|
|
26
|
+
const dextrosePAC = inputs.dextroseWeight * 1.9;
|
|
27
|
+
const totalPAC = fruitPAC + sugarPAC + dextrosePAC;
|
|
28
|
+
let status: 'soft' | 'optimal' | 'hard' = 'optimal';
|
|
29
|
+
if (totalBrix < 25) status = 'hard';
|
|
30
|
+
else if (totalBrix > 30) status = 'soft';
|
|
31
|
+
const tFraction = targetBrix / 100;
|
|
32
|
+
const fFraction = inputs.fruitBrix / 100;
|
|
33
|
+
const recSugar = Math.max(0, inputs.fruitWeight * (2 * tFraction - fFraction));
|
|
34
|
+
const recWater = Math.max(0, inputs.fruitWeight - recSugar);
|
|
35
|
+
return {
|
|
36
|
+
totalBrix: parseFloat(totalBrix.toFixed(1)),
|
|
37
|
+
totalWeight: Math.round(totalWeight),
|
|
38
|
+
totalPAC: parseFloat(totalPAC.toFixed(1)),
|
|
39
|
+
status,
|
|
40
|
+
recommendedSugar: Math.round(recSugar),
|
|
41
|
+
recommendedWater: Math.round(recWater),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface BrixState {
|
|
47
|
+
activeUnit: string;
|
|
48
|
+
activePreset: string;
|
|
49
|
+
ui: Record<string, string>;
|
|
50
|
+
elements: {
|
|
51
|
+
selectTrigger: HTMLElement;
|
|
52
|
+
selectDropdown: HTMLElement;
|
|
53
|
+
selectOptions: NodeListOf<Element>;
|
|
54
|
+
selectedIcon: HTMLElement;
|
|
55
|
+
selectedName: HTMLElement;
|
|
56
|
+
fruitWeight: HTMLInputElement;
|
|
57
|
+
fruitBrix: HTMLInputElement;
|
|
58
|
+
sugarWeight: HTMLInputElement;
|
|
59
|
+
dextroseWeight: HTMLInputElement;
|
|
60
|
+
waterWeight: HTMLInputElement;
|
|
61
|
+
targetBrix: HTMLInputElement;
|
|
62
|
+
fruitWeightVal: HTMLElement;
|
|
63
|
+
fruitBrixVal: HTMLElement;
|
|
64
|
+
sugarWeightVal: HTMLElement;
|
|
65
|
+
dextroseWeightVal: HTMLElement;
|
|
66
|
+
waterWeightVal: HTMLElement;
|
|
67
|
+
targetBrixVal: HTMLElement;
|
|
68
|
+
totalBrixDisp: HTMLElement;
|
|
69
|
+
totalWeightDisp: HTMLElement;
|
|
70
|
+
totalPacDisp: HTMLElement;
|
|
71
|
+
statusBadge: HTMLElement;
|
|
72
|
+
lens: HTMLElement;
|
|
73
|
+
recSugarDisp: HTMLElement;
|
|
74
|
+
recWaterDisp: HTMLElement;
|
|
75
|
+
unitMetricBtn: HTMLElement;
|
|
76
|
+
unitImperialBtn: HTMLElement;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function getUnitLabel(state: BrixState): string {
|
|
81
|
+
return state.activeUnit === 'metric' ? state.ui.gramsUnit : state.ui.ouncesUnit;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function formatWeight(g: number, state: BrixState): string {
|
|
85
|
+
if (state.activeUnit === 'imperial') return (g * 0.035274).toFixed(2) + ' ' + state.ui.ouncesUnit;
|
|
86
|
+
return Math.round(g) + ' ' + state.ui.gramsUnit;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function formatWeightVal(g: number, state: BrixState): number | string {
|
|
90
|
+
return state.activeUnit === 'imperial' ? (g * 0.035274).toFixed(2) : g;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function cToF(c: number): number {
|
|
94
|
+
return c * 9 / 5 + 32;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function getTempStatusDash(tIdeal: number): { text: string; className: string } {
|
|
98
|
+
if (tIdeal > -10) return { text: 'Soft/Melting - Serve very cold', className: 'bsdc-gauge-status status-soft-melt' };
|
|
99
|
+
if (tIdeal > -16) return { text: 'Ideal Serving Cabinet - Temper if stored in home freezer', className: 'bsdc-gauge-status status-ideal-cabinet' };
|
|
100
|
+
if (tIdeal >= -22) return { text: 'Home Freezer Ready - Scoopable straight from the freezer', className: 'bsdc-gauge-status status-home-freezer' };
|
|
101
|
+
return { text: 'Over-concentrated - Extremely soft/Liquid at normal freezer temps', className: 'bsdc-gauge-status status-liquid' };
|
|
102
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
|
|
4
|
+
const title = 'Sorbet Brix Rechner: Zucker zu Frucht Verhältnis & Gefrierpunktkontrolle für perfekte Portionierbarkeit';
|
|
5
|
+
const description = 'Stimme die exakte Zucker-, Fruchtpüree- und Wasserbalance für jedes Mal portionierbares Sorbet ab. Berechne Brix, PAC-Gefrierpunktsenkung und behebe eisige oder suppige Texturprobleme mit präzisen Messungen.';
|
|
6
|
+
|
|
7
|
+
const faq = [
|
|
8
|
+
{
|
|
9
|
+
question: 'Was ist Brix und warum ist es bei Sorbet wichtig?',
|
|
10
|
+
answer: 'Brix (°Bx) misst den Prozentsatz gelöster Feststoffe - hauptsächlich Zucker - in einer flüssigen Lösung. Bei Sorbets ist ein Brix-Wert zwischen 25 % und 30 % (idealerweise 28 %) entscheidend für die richtige Textur. Unter 25 % gefriert das Sorbet zu einem steinharten, eisigen Block, da nicht genug Zucker vorhanden ist, um die Bildung von Eiskristallen zu stören. Über 30 % sinkt der Gefrierpunkt so stark, dass das Sorbet suppig bleibt und in einem Standard-Gefrierschrank nie vollständig fest wird.',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
question: 'Wie berechne ich die richtige Zuckermenge für mein Sorbet-Rezept?',
|
|
14
|
+
answer: 'Beginne damit, dein Fruchtpüree zu wiegen und seinen natürlichen Brix-Wert mit einem Refraktometer zu messen (oder einen voreingestellten Wert auszuwählen). Gib diese zusammen mit deiner gewünschten Chargengröße und dem Ziel-Brix (Standard 28 %) in den Rechner ein. Der Rechner ermittelt, wie viel Saccharose und Wasser du hinzufügen musst, um die Gesamtmischung in den optimalen Brix-Bereich von 25-30 % zu bringen. Er berücksichtigt auch die Gefrierpunktsenkung (PAC), sodass du Dextrose einsetzen kannst, falls das Sorbet sonst zu hart wäre.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Warum ist mein selbstgemachtes Sorbet immer zu hart oder eisig?',
|
|
18
|
+
answer: 'Ein eisiges, steinhartes Sorbet bedeutet fast immer, dass die Gesamtzuckerkonzentration zu niedrig ist (unter 25 % Brix). Das Wasser in der Frucht gefriert zu großen Eiskristallen, anstatt teilweise flüssig zu bleiben. Die Lösung: Füge mehr Saccharose hinzu, um den Brix-Wert zu erhöhen, oder ersetze einen Teil der Saccharose durch Dextrose - Dextrose hat fast die doppelte Gefrierschutzwirkung (PAC 190 vs. 100) und ist 30 % weniger süß, sodass du den Gefrierpunkt senken kannst, ohne das Sorbet übermäßig süß zu machen.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
question: 'Was ist der Unterschied zwischen der Verwendung von Saccharose und Dextrose in Sorbet?',
|
|
22
|
+
answer: 'Saccharose (Haushaltszucker) ist das Standard-Süßungsmittel mit einem PAC von 100 und POD von 100. Dextrose (Glukosepulver) hat einen PAC von 190 - fast die doppelte Gefrierpunktsenkung - aber nur 70 % der Süßkraft (POD 70). Das bedeutet, Dextrose macht Sorbet pro Gramm weitaus effektiver weich, ohne es zu übersüßen. Verwende Dextrose, wenn deine Frucht bereits von Natur aus süß ist (z. B. Mango, Banane) und du mehr Gefrierschutzwirkung ohne zusätzliche Süße benötigst.',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
question: 'Wie beeinflusst der natürliche Fruchtzucker die Berechnung?',
|
|
26
|
+
answer: 'Verschiedene Früchte haben stark variierende natürliche Zuckergehalte: Zitronen und Limetten liegen bei etwa 2 % Brix, Erdbeeren bei etwa 8 %, Mangos und Trauben bei 14-18 % und Bananen bei bis zu 22 %. Der Rechner berücksichtigt den natürlichen Brix-Wert deiner Frucht, damit du die Gesamtzuckerkonzentration nicht versehentlich über- oder unterschreitest. Deshalb wird empfohlen, ein Refraktometer zur Messung deiner tatsächlichen Frucht zu verwenden - saisonale Schwankungen können den Brix-Wert um 3-4 Punkte verschieben.',
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
const howTo = [
|
|
31
|
+
{
|
|
32
|
+
name: 'Fruchtpüree abwiegen',
|
|
33
|
+
text: 'Miss das genaue Gewicht deines Fruchtpürees oder -safts in Gramm.',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'Frucht-Brix schätzen oder messen',
|
|
37
|
+
text: 'Verwende ein Refraktometer, um den genauen Brix-Wert deiner Frucht zu ermitteln, oder wähle einen typischen Wert aus unserer Datenbank (z. B. Mango: 14 %, Erdbeere: 8 %).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Gewichte in den Rechner eingeben',
|
|
41
|
+
text: 'Gib dein Fruchtgewicht, den Frucht-Brix und den Ziel-Brix-Wert ein (Standard ist 28 %).',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Empfohlene Sirupzugaben prüfen',
|
|
45
|
+
text: 'Der Rechner zeigt sofort den empfohlenen Zucker- und Wasserzusatz an, um den 28-%-Brix-Zielwert zu erreichen.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Zuckerarten bei Bedarf anpassen',
|
|
49
|
+
text: 'Falls die Mischung eine unzureichende Gefrierpunktsenkung aufweist, ersetze Saccharose durch Dextrose.',
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
const faqSchema = {
|
|
54
|
+
'@context': 'https://schema.org' as const,
|
|
55
|
+
'@type': 'FAQPage' as const,
|
|
56
|
+
mainEntity: faq.map((item) => ({
|
|
57
|
+
'@type': 'Question' as const,
|
|
58
|
+
name: item.question,
|
|
59
|
+
acceptedAnswer: { '@type': 'Answer' as const, text: item.answer },
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const howToSchema = {
|
|
64
|
+
'@context': 'https://schema.org' as const,
|
|
65
|
+
'@type': 'HowTo' as const,
|
|
66
|
+
name: title,
|
|
67
|
+
description,
|
|
68
|
+
step: howTo.map((step) => ({
|
|
69
|
+
'@type': 'HowToStep' as const,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema = {
|
|
76
|
+
'@context': 'https://schema.org' as const,
|
|
77
|
+
'@type': 'SoftwareApplication' as const,
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilitiesApplication',
|
|
81
|
+
operatingSystem: 'Web',
|
|
82
|
+
offers: { '@type': 'Offer' as const, price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const content: ToolLocaleContent = {
|
|
86
|
+
slug: 'brix-sorbet-dichte-rechner',
|
|
87
|
+
title: 'Brix Sorbet Dichte Rechner',
|
|
88
|
+
description: 'Stimme die exakte Zucker-, Fruchtpüree- und Wasserbalance für jedes Mal portionierbares Sorbet ab. Behebe eisige oder suppige Textur mit präzisen Brix- und PAC-Berechnungen.',
|
|
89
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
90
|
+
ui: {
|
|
91
|
+
fruitWeightLabel: 'Fruchtpüree-Gewicht',
|
|
92
|
+
fruitBrixLabel: 'Frucht-Brix',
|
|
93
|
+
sugarWeightLabel: 'Saccharose-Gewicht (Zucker)',
|
|
94
|
+
dextroseWeightLabel: 'Dextrose-Gewicht',
|
|
95
|
+
waterWeightLabel: 'Zugegebenes Wassergewicht',
|
|
96
|
+
targetBrixLabel: 'Ziel-Brix',
|
|
97
|
+
gramsUnit: 'g',
|
|
98
|
+
ouncesUnit: 'oz',
|
|
99
|
+
brixUnit: '% Bx',
|
|
100
|
+
totalBrixLabel: 'Gesamtmischung Brix',
|
|
101
|
+
totalWeightLabel: 'Gesamtchargengewicht',
|
|
102
|
+
totalPACLabel: 'Gefrierpunktsenkung (PAC)',
|
|
103
|
+
statusLabel: 'Sorbet-Texturprofil',
|
|
104
|
+
statusSoft: 'Zu weich / Suppig',
|
|
105
|
+
statusOptimal: 'Optimale Portionierbarkeit',
|
|
106
|
+
statusHard: 'Zu hart / Eisig',
|
|
107
|
+
recommendedTitle: 'Sirup-Empfehlung (50 % Frucht)',
|
|
108
|
+
recommendedSugarLabel: 'Benötigte Saccharose',
|
|
109
|
+
recommendedWaterLabel: 'Benötigtes Wasser',
|
|
110
|
+
fruitPresetLabel: 'Frucht-Voreinstellung',
|
|
111
|
+
presetCustom: 'Eigene Frucht',
|
|
112
|
+
presetLemon: 'Zitrone / Limette (2 % Bx)',
|
|
113
|
+
presetStrawberry: 'Erdbeere / Himbeere (8 % Bx)',
|
|
114
|
+
presetOrange: 'Orange / Pfirsich (10 % Bx)',
|
|
115
|
+
presetMango: 'Mango / Traube / Kirsche (14 % Bx)',
|
|
116
|
+
presetBanana: 'Banane (21 % Bx)',
|
|
117
|
+
},
|
|
118
|
+
faq,
|
|
119
|
+
howTo,
|
|
120
|
+
seo: [
|
|
121
|
+
{
|
|
122
|
+
type: 'title',
|
|
123
|
+
text: 'Die Wissenschaft der Sorbet Balance: Brix, PAC und Feststoffe',
|
|
124
|
+
level: 2,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'paragraph',
|
|
128
|
+
html: 'Ein professionelles Sorbet herzustellen ist eine Übung in Lebensmittelwissenschaft. Anders als Eiscreme, die auf Milchfetten und -proteinen für Struktur und Weichheit setzt, ist Sorbet vollständig auf gelöste Zucker und Stabilisatoren angewiesen. Die Konzentration dieser gelösten Zucker wird in Grad Brix (°Bx) gemessen. Eine perfekte Sorbet-Mischung benötigt eine Zuckerkonzentration von 25 % bis 30 % Brix. Ist der Zuckergehalt zu niedrig, gefriert das Wasser zu großen, nadelförmigen Eiskristallen, die einen körnigen, steinharten Block erzeugen. Ist er zu hoch, wird der Gefrierpunkt zu stark gesenkt und das Sorbet bleibt in typischen Haushalts- oder Gewerbegefrierschränken ein halbflüssiger Sirup.',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'stats',
|
|
132
|
+
columns: 4,
|
|
133
|
+
items: [
|
|
134
|
+
{
|
|
135
|
+
value: '28%',
|
|
136
|
+
label: 'Idealer Ziel-Brix',
|
|
137
|
+
icon: 'mdi:target',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
value: '25-30%',
|
|
141
|
+
label: 'Sicherer Brix-Bereich',
|
|
142
|
+
icon: 'mdi:gauge',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
value: '≈50%',
|
|
146
|
+
label: 'Optimales Fruchtverhältnis',
|
|
147
|
+
icon: 'mdi:fruit-grapes',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
value: 'PAC 100/190',
|
|
151
|
+
label: 'Saccharose / Dextrose',
|
|
152
|
+
icon: 'mdi:molecule',
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'PAC verstehen: Der Gefrierpunktsenkungsfaktor',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'PAC (Potere Anticongelante oder Gefrierschutzwirkung) ist eine Kennzahl, die von Patissiers verwendet wird, um zu beziffern, wie stark eine Zutat den Gefrierpunkt von Wasser senkt. Saccharose, also normaler Haushaltszucker, ist die Basisreferenz mit einem PAC-Wert von 100. Allerdings ist Saccharose sehr süß. Wenn du mehr Feststoffe hinzufügen oder die Gefrierschutzwirkung erhöhen musst, ohne das Sorbet unangenehm süß zu machen, kannst du einen Teil der Saccharose durch Dextrose ersetzen. Dextrose hat einen PAC von 190, ist also fast doppelt so wirksam wie Saccharose bei der Verhinderung von Eiskristallbildung und dabei nur 70 % so süß.',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: 'title',
|
|
167
|
+
text: 'Saccharose vs. Dextrose: Den richtigen Zucker für Sorbet wählen',
|
|
168
|
+
level: 3,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'comparative',
|
|
172
|
+
columns: 2,
|
|
173
|
+
items: [
|
|
174
|
+
{
|
|
175
|
+
title: 'Saccharose (Haushaltszucker)',
|
|
176
|
+
icon: 'mdi:cube-outline',
|
|
177
|
+
description: 'Das Standard-Süßungsmittel und die Basis für alle PAC- und POD-Berechnungen. Bietet klare Süße und Körper.',
|
|
178
|
+
points: [
|
|
179
|
+
'PAC-Wert: 100 (Basis)',
|
|
180
|
+
'POD-Wert: 100 (volle Süßkraft)',
|
|
181
|
+
'Ideal für: Hauptsüßungsmittel',
|
|
182
|
+
'Verleiht Körper und Standardtextur',
|
|
183
|
+
],
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
title: 'Dextrose (Glukosepulver)',
|
|
187
|
+
icon: 'mdi:grain',
|
|
188
|
+
description: 'Ein Monosaccharid mit fast doppelter Gefrierpunktsenkungskraft und deutlich weniger Süße.',
|
|
189
|
+
highlight: true,
|
|
190
|
+
points: [
|
|
191
|
+
'PAC-Wert: 190 (fast 2� - Saccharose)',
|
|
192
|
+
'POD-Wert: 70 (30 % weniger süß)',
|
|
193
|
+
'Ideal für: Weichmachen harter Sorbets',
|
|
194
|
+
'Ideal, wenn die Frucht bereits sehr süß ist',
|
|
195
|
+
],
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
type: 'title',
|
|
201
|
+
text: 'Referenztabelle typischer Frucht Brix Werte',
|
|
202
|
+
level: 3,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
type: 'table',
|
|
206
|
+
headers: ['Fruchtart', 'Durchschnittlicher Brix-Wert', 'Wassergehalt', 'Säuregrad'],
|
|
207
|
+
rows: [
|
|
208
|
+
['Zitrone / Limette', '2 % - 4 % Bx', 'Sehr hoch', 'Extrem hoch'],
|
|
209
|
+
['Erdbeere / Himbeere', '7 % - 9 % Bx', 'Hoch', 'Mäßig'],
|
|
210
|
+
['Orange / Pfirsich', '9 % - 11 % Bx', 'Mittel-hoch', 'Niedrig-mäßig'],
|
|
211
|
+
['Apfel / Birne', '11 % - 13 % Bx', 'Mittel', 'Niedrig'],
|
|
212
|
+
['Mango / Traube / Kirsche', '14 % - 18 % Bx', 'Mittel-niedrig', 'Sehr niedrig'],
|
|
213
|
+
['Banane', '20 % - 22 % Bx', 'Niedrig', 'Vernachlässigbar'],
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
type: 'title',
|
|
218
|
+
text: 'So kalibrierst du deine Sorbet Mischung',
|
|
219
|
+
level: 3,
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
type: 'paragraph',
|
|
223
|
+
html: 'Um ein Sorbet auszubalancieren, miss zunächst das Gewicht und die Zuckerkonzentration deines Fruchtpürees. Die Verwendung eines Refraktometers wird für Genauigkeit dringend empfohlen, da die Fruchtsüße je nach Saison und Reifegrad variiert. Wenn du kein Refraktometer hast, kannst du anhand der obigen Tabelle schätzen. Sobald du diese Werte hast, gib sie in unseren Rechner ein, um die genaue Menge an Zuckersirup (Wasser und Zucker) zu ermitteln, die benötigt wird, um die Gesamtmischung auf den Zielwert von 28 % Brix zu bringen. Für eine optimale Textur strebe einen Fruchtanteil von etwa 50 % des Gesamtchargengewichts an.',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
type: 'diagnostic',
|
|
227
|
+
variant: 'warning',
|
|
228
|
+
title: 'Warum ist mein Sorbet eisig oder zu hart?',
|
|
229
|
+
html: 'Ein Sorbet, das steinhart gefriert, hat fast immer <strong>zu wenig Zucker</strong> (Brix unter 25 %). Das Wasser im Fruchtpüree kristallisiert zu großen, gezackten Eissplittern. Behebe dies, indem du mehr Saccharose hinzufügst, um den Gesamt-Brix zu erhöhen, oder tausche einen Teil der Saccharose gegen Dextrose aus, um den PAC zu erhöhen, ohne zu übersüßen. Überprüfe auch, ob dein Fruchtanteil nicht zu hoch ist - mehr als 60 % Frucht lässt zu wenig Raum für Zuckerfeststoffe.',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
type: 'diagnostic',
|
|
233
|
+
variant: 'info',
|
|
234
|
+
title: 'Warum ist mein Sorbet suppig oder gefriert nicht?',
|
|
235
|
+
html: 'Ein Sorbet, das weich oder suppenartig bleibt, hat <strong>zu viel Zucker</strong> (Brix über 30 %). Der Gefrierpunkt wurde so stark gesenkt, dass dein Gefrierschrank die Mischung nicht verfestigen kann. Reduziere die Gesamtzuckerzufuhr oder verwende, falls die Frucht von Natur aus sehr süß ist (z. B. Banane oder Mango), proportional weniger zugesetzte Saccharose. Überprüfe deine Zieltemperatur: Haushaltsgefrierschränke laufen bei −18 °C; ein PAC, der für −12 °C geeignet ist, ist für Standard-Gefrierschränke zu hoch.',
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
type: 'tip',
|
|
239
|
+
title: 'Brix genau mit einem Refraktometer messen',
|
|
240
|
+
html: 'Ein digitales oder optisches Refraktometer ist die beste Einzelinvestition für gleichmäßige Sorbets. Der Reifegrad von Früchten variiert stark je nach Saison, Sorte und Herkunft - eine Erdbeere im Juni kann 6 °Bx messen, während dieselbe Sorte im August 10 °Bx erreicht. Gib einen Tropfen Püree auf das Prisma, lies den Wert ab und gib ihn in den Rechner ein. Alleiniges Schätzen anhand von Tabellen führt zu uneinheitlichen Ergebnissen.',
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
type: 'title',
|
|
244
|
+
text: 'Schritt für Schritt: So verwendest du diesen Rechner',
|
|
245
|
+
level: 3,
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
type: 'list',
|
|
249
|
+
items: [
|
|
250
|
+
'<strong>Fruchtpüree abwiegen</strong> - Verwende eine digitale Waage, um das genaue Gewicht deines passierten Fruchtpürees oder -safts in Gramm zu messen.',
|
|
251
|
+
'<strong>Frucht-Brix messen oder schätzen</strong> - Verwende ein Refraktometer für Präzision oder wähle eine Voreinstellung aus dem Dropdown (Zitrone 2 %, Erdbeere 8 %, Mango 14 % usw.).',
|
|
252
|
+
'<strong>Ziel-Brix festlegen</strong> - Der Standard ist 28 %, der ideale Sweet Spot. Passe den Wert je nach Vorliebe zwischen 25 % und 30 % an.',
|
|
253
|
+
'<strong>Sirup-Empfehlung prüfen</strong> - Der Rechner zeigt sofort an, wie viel Saccharose und Wasser hinzugefügt werden muss, um dein Ziel zu erreichen.',
|
|
254
|
+
'<strong>Texturindikator prüfen</strong> - Die PAC-Anzeige zeigt dir, ob das Sorbet bei deiner Gefrierschranktemperatur zu hart, optimal portionierbar oder zu weich sein wird.',
|
|
255
|
+
'<strong>Bei Bedarf mit Dextrose anpassen</strong> - Wenn das Sorbet als hart vorhergesagt wird, aber bereits süß genug ist, ersetze einen Teil der Saccharose durch Dextrose, um den PAC zu erhöhen, ohne zusätzliche Süße hinzuzufügen.',
|
|
256
|
+
],
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
type: 'title',
|
|
260
|
+
text: 'Wichtige Begriffe der Sorbet Herstellung',
|
|
261
|
+
level: 3,
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
type: 'glossary',
|
|
265
|
+
items: [
|
|
266
|
+
{
|
|
267
|
+
term: 'Brix (°Bx)',
|
|
268
|
+
definition: 'Der Prozentsatz gelöster Feststoffe (hauptsächlich Zucker) in einer flüssigen Lösung. Bei Sorbets ist 25-30 °Bx der Zielbereich für ideale Textur und Portionierbarkeit.',
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
term: 'PAC (Potere Anticongelante)',
|
|
272
|
+
definition: 'Gefrierschutzwirkung - ein Maß dafür, wie stark eine Zutat den Gefrierpunkt von Wasser senkt. Saccharose hat einen Basis-PAC von 100; Dextrose liegt bei 190.',
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
term: 'POD (Potere Dolcificante)',
|
|
276
|
+
definition: 'Süßkraft relativ zu Saccharose (Basis 100). Dextrose hat einen POD von 70, ist also Gramm für Gramm 30 % weniger süß als Haushaltszucker.',
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
term: 'Dextrose',
|
|
280
|
+
definition: 'Ein Monosaccharid (Glukosepulver), das in der Sorbet-Formulierung verwendet wird, um den Gefrierpunkt zu senken, ohne übermäßige Süße hinzuzufügen. PAC 190, POD 70.',
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
term: 'Refraktometer',
|
|
284
|
+
definition: 'Ein optisches oder digitales Instrument, das den Brix-Wert einer Flüssigkeit misst, indem es abliest, wie Licht durch die Probe gebrochen (refraktiert) wird. Unverzichtbar für gleichmäßige Sorbet-Qualität.',
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
term: 'Zuckersirup',
|
|
288
|
+
definition: 'Eine 50/50-Mischung nach Gewicht aus Saccharose und Wasser, erhitzt bis zur Auflösung. Das Standardmittel zur Zugabe von Zucker zu Sorbet-Basen.',
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
bibliography,
|
|
294
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
295
|
+
};
|