@jjlmoya/utils-science 1.37.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.
Files changed (53) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +5 -1
  4. package/src/index.ts +2 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/dyson-sphere-energy-capture/bibliography.astro +14 -0
  8. package/src/tool/dyson-sphere-energy-capture/bibliography.ts +16 -0
  9. package/src/tool/dyson-sphere-energy-capture/component.astro +253 -0
  10. package/src/tool/dyson-sphere-energy-capture/dyson-sphere-energy-capture.css +502 -0
  11. package/src/tool/dyson-sphere-energy-capture/entry.ts +26 -0
  12. package/src/tool/dyson-sphere-energy-capture/i18n/de.ts +195 -0
  13. package/src/tool/dyson-sphere-energy-capture/i18n/en.ts +195 -0
  14. package/src/tool/dyson-sphere-energy-capture/i18n/es.ts +195 -0
  15. package/src/tool/dyson-sphere-energy-capture/i18n/fr.ts +195 -0
  16. package/src/tool/dyson-sphere-energy-capture/i18n/id.ts +195 -0
  17. package/src/tool/dyson-sphere-energy-capture/i18n/it.ts +195 -0
  18. package/src/tool/dyson-sphere-energy-capture/i18n/ja.ts +71 -0
  19. package/src/tool/dyson-sphere-energy-capture/i18n/ko.ts +71 -0
  20. package/src/tool/dyson-sphere-energy-capture/i18n/nl.ts +197 -0
  21. package/src/tool/dyson-sphere-energy-capture/i18n/pl.ts +197 -0
  22. package/src/tool/dyson-sphere-energy-capture/i18n/pt.ts +195 -0
  23. package/src/tool/dyson-sphere-energy-capture/i18n/ru.ts +195 -0
  24. package/src/tool/dyson-sphere-energy-capture/i18n/sv.ts +195 -0
  25. package/src/tool/dyson-sphere-energy-capture/i18n/tr.ts +195 -0
  26. package/src/tool/dyson-sphere-energy-capture/i18n/zh.ts +71 -0
  27. package/src/tool/dyson-sphere-energy-capture/index.ts +11 -0
  28. package/src/tool/dyson-sphere-energy-capture/logic.ts +120 -0
  29. package/src/tool/dyson-sphere-energy-capture/seo.astro +15 -0
  30. package/src/tool/global-albedo-snowball-simulator/bibliography.astro +14 -0
  31. package/src/tool/global-albedo-snowball-simulator/bibliography.ts +16 -0
  32. package/src/tool/global-albedo-snowball-simulator/component.astro +278 -0
  33. package/src/tool/global-albedo-snowball-simulator/entry.ts +26 -0
  34. package/src/tool/global-albedo-snowball-simulator/global-albedo-snowball-simulator.css +530 -0
  35. package/src/tool/global-albedo-snowball-simulator/i18n/de.ts +169 -0
  36. package/src/tool/global-albedo-snowball-simulator/i18n/en.ts +169 -0
  37. package/src/tool/global-albedo-snowball-simulator/i18n/es.ts +169 -0
  38. package/src/tool/global-albedo-snowball-simulator/i18n/fr.ts +169 -0
  39. package/src/tool/global-albedo-snowball-simulator/i18n/id.ts +169 -0
  40. package/src/tool/global-albedo-snowball-simulator/i18n/it.ts +87 -0
  41. package/src/tool/global-albedo-snowball-simulator/i18n/ja.ts +87 -0
  42. package/src/tool/global-albedo-snowball-simulator/i18n/ko.ts +169 -0
  43. package/src/tool/global-albedo-snowball-simulator/i18n/nl.ts +169 -0
  44. package/src/tool/global-albedo-snowball-simulator/i18n/pl.ts +169 -0
  45. package/src/tool/global-albedo-snowball-simulator/i18n/pt.ts +169 -0
  46. package/src/tool/global-albedo-snowball-simulator/i18n/ru.ts +169 -0
  47. package/src/tool/global-albedo-snowball-simulator/i18n/sv.ts +169 -0
  48. package/src/tool/global-albedo-snowball-simulator/i18n/tr.ts +169 -0
  49. package/src/tool/global-albedo-snowball-simulator/i18n/zh.ts +169 -0
  50. package/src/tool/global-albedo-snowball-simulator/index.ts +11 -0
  51. package/src/tool/global-albedo-snowball-simulator/logic.ts +88 -0
  52. package/src/tool/global-albedo-snowball-simulator/seo.astro +15 -0
  53. package/src/tools.ts +4 -0
@@ -0,0 +1,530 @@
1
+ .albedo-lab {
2
+ --albedo-ink: #101817;
3
+ --albedo-muted: rgba(16, 24, 23, 0.62);
4
+ --albedo-line: rgba(16, 24, 23, 0.13);
5
+ --albedo-panel: rgba(255, 255, 255, 0.42);
6
+ --albedo-track: rgba(16, 24, 23, 0.14);
7
+ --albedo-sea: #1d8da0;
8
+ --albedo-land: #4f9a68;
9
+ --albedo-ice: #f1fdff;
10
+ --albedo-warm: #ef8f35;
11
+ --solar-intensity: 0.566;
12
+ --greenhouse-intensity: 0.179;
13
+ --atmosphere-intensity: 0.36;
14
+ --ice-cover: 22%;
15
+ --initial-ice-cover: 22%;
16
+ --north-ice-height: 16.58%;
17
+ --south-ice-height: 18.46%;
18
+ --mid-ice-height: 2.86%;
19
+ --mid-ice-opacity: 0;
20
+ --north-ice-tilt: -3.45deg;
21
+ --south-ice-tilt: 4.43deg;
22
+ --albedo-glow: 0.42;
23
+ --chart-ice-opacity: 0.22;
24
+ --solar-panel-alpha: 0.22;
25
+ --solar-panel-alpha-dark: 0.31;
26
+ --atmosphere-panel-alpha: 0.11;
27
+ --atmosphere-panel-alpha-dark: 0.12;
28
+ --sun-size: 211px;
29
+ --sun-glow-near: 91px;
30
+ --sun-glow-far: 216px;
31
+ --sun-glow-alpha-near: 0.58;
32
+ --sun-glow-alpha-far: 0.24;
33
+ --sun-saturation: 1.14;
34
+ --earth-atmosphere-glow: 49px;
35
+ --earth-atmosphere-alpha: 0.3;
36
+ --earth-albedo-glow: 42px;
37
+ --earth-albedo-alpha: 0.21;
38
+ --earth-saturation: 0.86;
39
+ --earth-brightness: 1;
40
+ --atmosphere-inset: -12px;
41
+ --atmosphere-border-width: 4px;
42
+ --atmosphere-border-alpha: 0.25;
43
+ --glint-alpha: 0.23;
44
+ --snowball-reflection: 0;
45
+
46
+ position: relative;
47
+ max-width: 1160px;
48
+ margin: 0 auto;
49
+ display: grid;
50
+ overflow: hidden;
51
+ color: var(--albedo-ink);
52
+ border: 1px solid rgba(255, 255, 255, 0.42);
53
+ border-radius: 8px;
54
+ background:
55
+ radial-gradient(circle at 10% 38%, rgba(239, 143, 53, var(--solar-panel-alpha)), transparent 32%),
56
+ radial-gradient(circle at 64% 16%, rgba(0, 168, 204, 0.15), transparent 36%),
57
+ radial-gradient(circle at 64% 16%, rgba(29, 141, 160, var(--atmosphere-panel-alpha)), transparent 44%),
58
+ var(--albedo-panel);
59
+ box-shadow: 0 26px 90px rgba(16, 24, 23, 0.13);
60
+ backdrop-filter: blur(24px);
61
+ }
62
+
63
+ .theme-dark .albedo-lab,
64
+ body.theme-dark .albedo-lab,
65
+ html.theme-dark .albedo-lab {
66
+ --albedo-ink: #fff;
67
+ --albedo-muted: rgba(255, 255, 255, 0.64);
68
+ --albedo-line: rgba(255, 255, 255, 0.13);
69
+ --albedo-panel: rgba(15, 23, 42, 0.3);
70
+ --albedo-track: rgba(255, 255, 255, 0.16);
71
+
72
+ border-color: rgba(255, 255, 255, 0.12);
73
+ background:
74
+ radial-gradient(circle at 8% 42%, rgba(239, 143, 53, var(--solar-panel-alpha-dark)), transparent 34%),
75
+ radial-gradient(circle at 67% 12%, rgba(90, 200, 220, var(--atmosphere-panel-alpha-dark)), transparent 38%),
76
+ var(--albedo-panel);
77
+ box-shadow: 0 28px 96px rgba(0, 0, 0, 0.44);
78
+ }
79
+
80
+ .albedo-lab::before {
81
+ content: "";
82
+ position: absolute;
83
+ inset: 0;
84
+ pointer-events: none;
85
+ background:
86
+ linear-gradient(90deg, transparent 0 38%, var(--albedo-line) 38% calc(38% + 1px), transparent calc(38% + 1px)),
87
+ linear-gradient(180deg, transparent 0 68%, var(--albedo-line) 68% calc(68% + 1px), transparent calc(68% + 1px));
88
+ opacity: 0.72;
89
+ }
90
+
91
+ .albedo-planet {
92
+ position: relative;
93
+ min-height: 430px;
94
+ display: grid;
95
+ place-items: center;
96
+ overflow: hidden;
97
+ }
98
+
99
+ .albedo-guide {
100
+ position: absolute;
101
+ background: var(--albedo-line);
102
+ pointer-events: none;
103
+ }
104
+
105
+ .albedo-guide-horizontal {
106
+ left: 1rem;
107
+ right: 1rem;
108
+ bottom: 5.4rem;
109
+ height: 1px;
110
+ }
111
+
112
+ .albedo-guide-vertical {
113
+ top: 1rem;
114
+ bottom: 1rem;
115
+ left: 24%;
116
+ width: 1px;
117
+ }
118
+
119
+ .albedo-sun {
120
+ position: absolute;
121
+ left: clamp(-112px, -14vw, -72px);
122
+ width: var(--sun-size);
123
+ aspect-ratio: 1;
124
+ border-radius: 50%;
125
+ background: radial-gradient(circle, #fff9d6 0 16%, #f8c65a 52%, #df672f 100%);
126
+ box-shadow:
127
+ 0 0 var(--sun-glow-near) rgba(239, 143, 53, var(--sun-glow-alpha-near)),
128
+ 0 0 var(--sun-glow-far) rgba(239, 143, 53, var(--sun-glow-alpha-far));
129
+ filter: saturate(var(--sun-saturation));
130
+ transition: width 220ms ease, box-shadow 220ms ease, filter 220ms ease;
131
+ }
132
+
133
+ .albedo-lab[data-state="snowball"] .albedo-sun {
134
+ box-shadow:
135
+ 0 0 calc(var(--sun-glow-near) + 34px) rgba(255, 255, 255, 0.62),
136
+ 0 0 calc(var(--sun-glow-far) + 120px) rgba(188, 232, 245, 0.28),
137
+ 0 0 220px rgba(239, 143, 53, 0.16);
138
+ filter: saturate(0.82) brightness(1.18);
139
+ }
140
+
141
+ .albedo-orbit {
142
+ width: min(78vw, 420px);
143
+ aspect-ratio: 1;
144
+ display: grid;
145
+ place-items: center;
146
+ border: 1px solid rgba(29, 141, 160, 0.18);
147
+ border-radius: 50%;
148
+ transform: translateX(4%);
149
+ }
150
+
151
+ .albedo-earth {
152
+ position: relative;
153
+ width: min(58vw, 278px);
154
+ aspect-ratio: 1;
155
+ overflow: hidden;
156
+ border-radius: 50%;
157
+ background:
158
+ radial-gradient(circle at 32% 24%, rgba(255, 255, 255, 0.38), transparent 16%),
159
+ radial-gradient(circle at 56% 44%, var(--albedo-land) 0 13%, transparent 14%),
160
+ radial-gradient(circle at 36% 58%, #3d875e 0 10%, transparent 11%),
161
+ linear-gradient(135deg, #166178 0 26%, var(--albedo-sea) 26% 58%, #126e8b 58% 100%);
162
+ box-shadow:
163
+ inset -34px -24px 52px rgba(4, 19, 28, 0.42),
164
+ inset 20px 16px 34px rgba(255, 255, 255, 0.12),
165
+ 0 0 var(--earth-atmosphere-glow) rgba(83, 209, 226, var(--earth-atmosphere-alpha)),
166
+ 0 0 var(--earth-albedo-glow) rgba(241, 253, 255, var(--earth-albedo-alpha));
167
+ transition: box-shadow 220ms ease, filter 220ms ease;
168
+ filter: saturate(var(--earth-saturation)) brightness(var(--earth-brightness));
169
+ }
170
+
171
+ .albedo-lab[data-state="snowball"] .albedo-earth {
172
+ box-shadow:
173
+ inset -28px -22px 54px rgba(47, 83, 105, 0.34),
174
+ inset 24px 18px 38px rgba(255, 255, 255, 0.28),
175
+ 0 0 54px rgba(255, 255, 255, 0.62),
176
+ 0 0 104px rgba(173, 216, 230, 0.42);
177
+ filter: saturate(0.68) brightness(1.12);
178
+ }
179
+
180
+ .albedo-atmosphere {
181
+ position: absolute;
182
+ inset: var(--atmosphere-inset);
183
+ border-radius: 50%;
184
+ border: var(--atmosphere-border-width) solid rgba(106, 222, 235, var(--atmosphere-border-alpha));
185
+ box-shadow: inset 0 0 36px rgba(106, 222, 235, 0.18);
186
+ }
187
+
188
+ .albedo-ice {
189
+ position: absolute;
190
+ left: -13%;
191
+ width: 126%;
192
+ background:
193
+ linear-gradient(90deg, rgba(255, 255, 255, 0.98), rgba(207, 240, 247, 0.92)),
194
+ repeating-linear-gradient(105deg, transparent 0 16px, rgba(29, 141, 160, 0.12) 16px 19px);
195
+ filter: drop-shadow(0 7px 12px rgba(222, 250, 255, 0.26));
196
+ transition: height 220ms ease, opacity 220ms ease, transform 220ms ease;
197
+ }
198
+
199
+ .albedo-ice-north {
200
+ top: -1%;
201
+ height: var(--north-ice-height);
202
+ border-radius: 0 0 54% 46%;
203
+ transform: rotate(var(--north-ice-tilt));
204
+ }
205
+
206
+ .albedo-ice-mid {
207
+ top: 48%;
208
+ height: var(--mid-ice-height);
209
+ opacity: var(--mid-ice-opacity);
210
+ border-radius: 48% 52%;
211
+ transform: rotate(-12deg);
212
+ }
213
+
214
+ .albedo-ice-south {
215
+ bottom: -1%;
216
+ height: var(--south-ice-height);
217
+ border-radius: 48% 58% 0 0;
218
+ transform: rotate(var(--south-ice-tilt));
219
+ }
220
+
221
+ .albedo-glint {
222
+ position: absolute;
223
+ inset: 0;
224
+ background:
225
+ linear-gradient(115deg, transparent 10%, rgba(255, 255, 255, var(--glint-alpha)), transparent 42%),
226
+ radial-gradient(circle at 28% 26%, rgba(255, 255, 255, 0.34), transparent 17%);
227
+ mix-blend-mode: screen;
228
+ }
229
+
230
+ .albedo-lab[data-state="snowball"] .albedo-glint {
231
+ background:
232
+ linear-gradient(112deg, transparent 4%, rgba(255, 255, 255, 0.62), transparent 46%),
233
+ radial-gradient(circle at 28% 26%, rgba(255, 255, 255, 0.58), transparent 22%);
234
+ }
235
+
236
+ .albedo-state-pill {
237
+ position: absolute;
238
+ left: 50%;
239
+ width: min(58vw, 278px);
240
+ bottom: 1.2rem;
241
+ display: grid;
242
+ grid-template-columns: 1fr;
243
+ gap: 1rem;
244
+ align-items: end;
245
+ transform: translateX(calc(-50% + 4%));
246
+ }
247
+
248
+ .albedo-state-pill span,
249
+ .albedo-slider span,
250
+ .albedo-readouts span,
251
+ .albedo-chart-head span {
252
+ color: var(--albedo-muted);
253
+ font-size: 0.76rem;
254
+ text-transform: uppercase;
255
+ letter-spacing: 0.05em;
256
+ }
257
+
258
+ .albedo-state-pill strong {
259
+ max-width: 100%;
260
+ text-align: left;
261
+ font-size: clamp(1.35rem, 4.8vw, 2.7rem);
262
+ font-weight: 300;
263
+ line-height: 0.95;
264
+ }
265
+
266
+ .albedo-lab[data-state="snowball"] .albedo-state-pill strong {
267
+ color: #f8fdff;
268
+ font-size: clamp(1.55rem, 5.4vw, 3.1rem);
269
+ text-shadow:
270
+ -1px 0 rgba(130, 219, 242, 0.38),
271
+ 1px 0 rgba(255, 255, 255, 0.32),
272
+ 0 0 22px rgba(210, 245, 255, 0.32);
273
+ animation: albedo-snowball-pulse 2.4s ease-in-out infinite;
274
+ }
275
+
276
+ .albedo-controls,
277
+ .albedo-readouts,
278
+ .albedo-chart-panel {
279
+ position: relative;
280
+ padding: 1.1rem;
281
+ border-top: 1px solid var(--albedo-line);
282
+ }
283
+
284
+ .albedo-controls {
285
+ display: grid;
286
+ gap: 1.25rem;
287
+ }
288
+
289
+ .albedo-slider {
290
+ --track-color: var(--albedo-sea);
291
+ --accent-color: var(--albedo-sea);
292
+
293
+ display: grid;
294
+ grid-template-columns: minmax(0, 0.82fr) minmax(7.5rem, 0.18fr);
295
+ gap: 0.42rem 1rem;
296
+ align-items: center;
297
+ min-height: 72px;
298
+ }
299
+
300
+ .albedo-slider output {
301
+ color: var(--albedo-ink);
302
+ font-size: clamp(1.55rem, 7vw, 2.55rem);
303
+ font-weight: 300;
304
+ line-height: 1;
305
+ justify-self: end;
306
+ padding-right: 0.28rem;
307
+ text-align: right;
308
+ white-space: nowrap;
309
+ }
310
+
311
+ .albedo-slider output sup,
312
+ .albedo-readouts strong sup {
313
+ font-size: 0.48em;
314
+ line-height: 0;
315
+ margin-left: 0.04em;
316
+ position: relative;
317
+ top: -0.42em;
318
+ vertical-align: baseline;
319
+ }
320
+
321
+ .albedo-slider input {
322
+ grid-column: 1 / -1;
323
+ width: 100%;
324
+ height: 22px;
325
+ appearance: none;
326
+ background: transparent;
327
+ cursor: pointer;
328
+ }
329
+
330
+ .albedo-slider-solar {
331
+ --track-color: #ef8f35;
332
+ --accent-color: #ef8f35;
333
+ }
334
+
335
+ .albedo-slider-greenhouse {
336
+ --track-color: #8aa274;
337
+ --accent-color: #8aa274;
338
+ }
339
+
340
+ .albedo-slider-ice {
341
+ --track-color: #88ddeb;
342
+ --accent-color: #dff9ff;
343
+ }
344
+
345
+ .albedo-slider input::-webkit-slider-runnable-track {
346
+ height: 2px;
347
+ background: linear-gradient(90deg, var(--track-color) 0 var(--fill, 50%), var(--albedo-track) var(--fill, 50%) 100%);
348
+ }
349
+
350
+ .albedo-slider input::-webkit-slider-thumb {
351
+ width: 17px;
352
+ height: 17px;
353
+ margin-top: -7.5px;
354
+ appearance: none;
355
+ border: 2px solid var(--accent-color);
356
+ border-radius: 50%;
357
+ background: rgba(255, 255, 255, 0.94);
358
+ box-shadow: 0 0 14px rgba(0, 0, 0, 0.12);
359
+ transition: transform 100ms ease, box-shadow 100ms ease;
360
+ }
361
+
362
+ .albedo-slider input:active::-webkit-slider-thumb {
363
+ transform: scale(1.3);
364
+ box-shadow: 0 0 22px rgba(0, 0, 0, 0.18);
365
+ }
366
+
367
+ .albedo-slider input::-moz-range-track {
368
+ height: 2px;
369
+ background: var(--albedo-track);
370
+ }
371
+
372
+ .albedo-slider input::-moz-range-progress {
373
+ height: 2px;
374
+ background: var(--accent-color);
375
+ }
376
+
377
+ .albedo-slider input::-moz-range-thumb {
378
+ width: 17px;
379
+ height: 17px;
380
+ border: 2px solid var(--accent-color);
381
+ border-radius: 50%;
382
+ background: rgba(255, 255, 255, 0.94);
383
+ }
384
+
385
+ .albedo-readouts {
386
+ display: grid;
387
+ grid-template-columns: repeat(2, minmax(0, 1fr));
388
+ gap: 1px;
389
+ padding: 0;
390
+ border-top: 1px solid var(--albedo-line);
391
+ background: var(--albedo-line);
392
+ }
393
+
394
+ .albedo-readouts article {
395
+ min-height: 124px;
396
+ display: grid;
397
+ align-content: space-between;
398
+ padding: 1.15rem 1.05rem 1.02rem;
399
+ background: rgba(255, 255, 255, 0.2);
400
+ }
401
+
402
+ .theme-dark .albedo-readouts article,
403
+ body.theme-dark .albedo-readouts article,
404
+ html.theme-dark .albedo-readouts article {
405
+ background: rgba(15, 23, 42, 0.18);
406
+ }
407
+
408
+ .albedo-readouts strong {
409
+ font-size: clamp(2.05rem, 8vw, 3.45rem);
410
+ font-weight: 300;
411
+ line-height: 0.88;
412
+ align-self: end;
413
+ }
414
+
415
+ @keyframes albedo-snowball-pulse {
416
+ 0%,
417
+ 100% {
418
+ opacity: 0.82;
419
+ filter: blur(0);
420
+ }
421
+
422
+ 48% {
423
+ opacity: 1;
424
+ filter: blur(0.2px);
425
+ }
426
+
427
+ 52% {
428
+ text-shadow:
429
+ -2px 0 rgba(130, 219, 242, 0.42),
430
+ 2px 0 rgba(255, 255, 255, 0.36),
431
+ 0 0 30px rgba(210, 245, 255, 0.44);
432
+ }
433
+ }
434
+
435
+ .albedo-chart-panel {
436
+ display: grid;
437
+ gap: 0.7rem;
438
+ }
439
+
440
+ .albedo-chart-head {
441
+ display: flex;
442
+ justify-content: space-between;
443
+ gap: 1rem;
444
+ align-items: end;
445
+ }
446
+
447
+ .albedo-chart-head strong {
448
+ font-weight: 400;
449
+ }
450
+
451
+ .albedo-chart {
452
+ width: 100%;
453
+ min-height: 200px;
454
+ overflow: visible;
455
+ }
456
+
457
+ .albedo-chart-grid {
458
+ fill: none;
459
+ stroke: var(--albedo-line);
460
+ stroke-width: 1;
461
+ }
462
+
463
+ .albedo-chart-band {
464
+ fill: url("#albedo-ice-gradient");
465
+ }
466
+
467
+ .albedo-chart-line {
468
+ fill: none;
469
+ stroke: var(--albedo-sea);
470
+ stroke-linecap: round;
471
+ stroke-width: 4;
472
+ filter: drop-shadow(0 0 10px rgba(29, 141, 160, 0.25));
473
+ }
474
+
475
+ .albedo-chart-dot {
476
+ fill: var(--albedo-warm);
477
+ stroke: rgba(255, 255, 255, 0.88);
478
+ stroke-width: 3;
479
+ }
480
+
481
+ .albedo-chart text {
482
+ fill: var(--albedo-muted);
483
+ font-size: 0.82rem;
484
+ }
485
+
486
+ .albedo-lab[data-state="snowball"] {
487
+ --albedo-sea: #74bdd2;
488
+ --albedo-land: #9cc7bd;
489
+ --albedo-warm: #bfefff;
490
+ }
491
+
492
+ .albedo-lab[data-state="hothouse"] {
493
+ --albedo-sea: #267c82;
494
+ --albedo-land: #6f9b59;
495
+ --albedo-warm: #e86f37;
496
+ }
497
+
498
+ @media (min-width: 780px) {
499
+ .albedo-lab {
500
+ grid-template-columns: minmax(0, 1.22fr) minmax(360px, 0.78fr);
501
+ }
502
+
503
+ .albedo-planet {
504
+ grid-row: span 3;
505
+ min-height: 730px;
506
+ }
507
+
508
+ .albedo-controls {
509
+ border-top: 0;
510
+ }
511
+
512
+ .albedo-chart-panel {
513
+ padding-bottom: 1.25rem;
514
+ }
515
+ }
516
+
517
+ @media (max-width: 520px) {
518
+ .albedo-state-pill {
519
+ display: grid;
520
+ }
521
+
522
+ .albedo-state-pill strong {
523
+ max-width: none;
524
+ text-align: left;
525
+ }
526
+
527
+ .albedo-readouts {
528
+ grid-template-columns: 1fr;
529
+ }
530
+ }
@@ -0,0 +1,169 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+
4
+ const slug = 'globaler-albedo-schneeball-simulator';
5
+ const title = 'Globaler Albedo und Schneeball Erde Simulator';
6
+ const description = 'Erkunden Sie die Strahlungsbilanz der Erde, Änderungen der Solarkonstante, Treibhausgaskonzentrationen und die Eis-Albedo-Rückkopplung, um zu sehen, ob sich Eisflächen zurückziehen, stabilisieren oder ein Schneeballklima auslösen.';
7
+
8
+ const howTo = [
9
+ {
10
+ name: 'Einstrahlung der Sonne einstellen',
11
+ text: 'Bewegen Sie den Regler für die Solarkonstante, um Szenarien mit schwächerer junger Sonne, heutiger Sonneneinstrahlung oder stärkerem zukünftigen Antrieb zu testen.',
12
+ },
13
+ {
14
+ name: 'Treibhauskonzentration anpassen',
15
+ text: 'Ändern Sie die Treibhausgaskonzentration, um zu sehen, wie der Strahlungsantrieb mit der höheren planetaren Albedo konkurriert.',
16
+ },
17
+ {
18
+ name: 'Planeten mit Eis besiedeln',
19
+ text: 'Beginnen Sie mit einer kleinen Polkappe oder einer stark vereisten Welt. Das Modell durchläuft die Rückkopplungsschleife und zeigt, ob das Eis vorrückt oder sich zurückzieht.',
20
+ },
21
+ {
22
+ name: 'Klimazustand ablesen',
23
+ text: 'Nutzen Sie Temperatur, absorbierte Strahlung, endgültige Eisbedeckung und die Zeitverlaufskurve, um gemäßigte, Schneeball- und Treibhausergebnisse zu vergleichen.',
24
+ },
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ question: 'Was ist die Eis-Albedo-Rückkopplung?',
30
+ answer: 'Eis und Schnee reflektieren mehr Sonnenlicht als Ozean oder Land. Wenn sich Eis ausdehnt, steigt die planetare Albedo, die absorbierte Sonnenenergie sinkt, und die Abkühlung kann die Bildung von weiterem Eis begünstigen. Wenn Eis zurückgeht, absorbiert die dunklere Oberfläche mehr Energie, und die Erwärmung beschleunigt sich.',
31
+ },
32
+ {
33
+ question: 'Was bedeutet Schneeball Erde?',
34
+ answer: 'Schneeball Erde ist ein hypothetischer Klimazustand, in dem Eis niedrige Breiten oder nahezu globale Bedeckung erreicht. Geologische Hinweise deuten darauf hin, dass die Erde während des Neoproterozoikums solche Zustände erreicht haben könnte.',
35
+ },
36
+ {
37
+ question: 'Ist dies ein vollständiges Klimamodell?',
38
+ answer: 'Nein. Es ist ein kompaktes Energiebilanzmodell zu Lernzwecken. Es ignoriert atmosphärische Zirkulation, Wolken, ozeanischen Wärmetransport, Jahreszeiten, Geografie und Kohlenstoffkreislauf-Rückkopplungen, erfasst jedoch die grundlegende Strahlungslogik der Albedo-Rückkopplung.',
39
+ },
40
+ {
41
+ question: 'Warum können Treibhausgase einen Schneeballzustand durchbrechen?',
42
+ answer: 'Treibhausgase reduzieren die ausgehende langwellige Kühlung, indem sie einen Strahlungsantrieb hinzufügen. In Schneeballerde-Szenarien kann sich vulkanisches Kohlendioxid ansammeln, wenn die Silikatverwitterung nachlässt, und schließlich den Planeten genug erwärmen, um das Eis in niedrigen Breiten zu schmelzen.',
43
+ },
44
+ ];
45
+
46
+ export const content: ToolLocaleContent = {
47
+ slug,
48
+ title,
49
+ description,
50
+ ui: {
51
+ controls: 'Klimasteuerung',
52
+ solarConstant: 'Solarkonstante',
53
+ greenhouse: 'Treibhausgase',
54
+ initialIce: 'Anfängliche Eisbedeckung',
55
+ temperature: 'Gleichgewichtstemperatur',
56
+ absorbed: 'Absorbierte Sonnenstrahlung',
57
+ finalIce: 'Endgültige Eisbedeckung',
58
+ albedo: 'Planetarische Albedo',
59
+ forcing: 'Treibhausantrieb',
60
+ state: 'Klimazustand',
61
+ timeline: 'Eisentwicklung',
62
+ years: 'Modelljahre',
63
+ snowball: 'Schneeballblockade',
64
+ temperate: 'Gemäßigtes Gleichgewicht',
65
+ hothouse: 'Treibhausrückzug',
66
+ retreating: 'Eis im Rückzug',
67
+ advancing: 'Eis im Vormarsch',
68
+ stable: 'Nahe am Gleichgewicht',
69
+ watts: '{value} W/m2',
70
+ ppm: '{value} ppm',
71
+ percent: '{value}%',
72
+ celsius: '{value} C',
73
+ diagnostics: 'Strahlungsdiagnostik',
74
+ },
75
+ seo: [
76
+ {
77
+ type: 'title',
78
+ text: 'Globaler Albedosimulator für Eis-Albedo-Rückkopplung und Schneeball Erde',
79
+ level: 2,
80
+ },
81
+ {
82
+ type: 'paragraph',
83
+ html: 'Dieser Simulator untersucht eine der wichtigsten Rückkopplungsschleifen im Planetenklima: die Verbindung zwischen Eisbedeckung, Reflexionsvermögen und absorbierter Sonnenstrahlung. Ein Planet mit hellem Eis reflektiert mehr einfallende Sonnenstrahlung zurück ins All. Diese Abkühlung kann das Eis erhalten oder ausdehnen, wodurch die Albedo weiter steigt und das System in einen Schneeballerde-Zustand gedrückt wird. Ein Planet mit weniger Eis absorbiert mehr Sonnenlicht, was die Enteisung beschleunigen kann.',
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Nutzen Sie die Regler, um die Solarkonstante, die Treibhausgaskonzentration und die anfängliche Eisbedeckung zu verändern. Das Modell durchläuft dann eine einfache globale Energiebilanz und zeigt, ob sich das Klima in Richtung ausgedehnter Vereisung, eines gemäßigten Gleichgewichts oder eines heißen Zustands mit wenig Eis bewegt. Es ist für schnelle Intuition ausgelegt: Jeder Regler greift direkt in einen physikalischen Term der Strahlungsbilanz ein.',
88
+ },
89
+ {
90
+ type: 'title',
91
+ text: 'Wie die Energiebilanz geschätzt wird',
92
+ level: 3,
93
+ },
94
+ {
95
+ type: 'paragraph',
96
+ html: 'Die absorbierte kurzwellige Strahlung wird als S(1 - a) / 4 geschätzt, wobei S die Solarkonstante und a die planetare Albedo ist. Die Division durch vier wandelt das von der Erdscheibe aufgefangene Sonnenlicht in einen Durchschnitt über die gesamte Kugeloberfläche um. Eine höhere Albedo senkt die absorbierte Energie; eine höhere Treibhauskonzentration erhöht den positiven Strahlungsantrieb, der die geschätzte Oberflächentemperatur anhebt.',
97
+ },
98
+ {
99
+ type: 'table',
100
+ headers: ['Steuerung', 'Physikalische Bedeutung', 'Klimaeffekt'],
101
+ rows: [
102
+ ['Solarkonstante', 'Einstrahlende Sternenenergie in Erdumlaufbahn', 'Höhere Werte erwärmen den Planeten und lassen Eis schrumpfen.'],
103
+ ['Treibhausgase', 'Langwelliger Strahlungsantrieb relativ zu einer Referenzatmosphäre', 'Höhere Werte erschweren die Schneeballblockade.'],
104
+ ['Anfängliche Eisbedeckung', 'Startreflexionsvermögen des Planeten', 'Hohe Werte können durch Albedo-Rückkopplung eine davonlaufende Abkühlung auslösen.'],
105
+ ],
106
+ },
107
+ {
108
+ type: 'title',
109
+ text: 'Warum die Albedo-Rückkopplung nichtlinear werden kann',
110
+ level: 3,
111
+ },
112
+ {
113
+ type: 'paragraph',
114
+ html: 'Die Eis-Albedo-Schleife ist keine sanfte lineare Anpassung. Sobald Eis einen ausreichenden Teil des Planeten bedeckt, kann die hellere Oberfläche so viel Sonnenlicht absorbieren, dass die sommerliche Schmelze schwach wird. In die entgegengesetzte Richtung legt zurückweichendes Eis dunkleren Ozean und Land frei, was die Absorption erhöht und den Planeten von der Vereisung wegbewegt. Deshalb können ähnliche Antriebe je nach anfänglicher Eisbedeckung zu unterschiedlichen Ergebnissen führen.',
115
+ },
116
+ {
117
+ type: 'paragraph',
118
+ html: 'Die reale Erde bringt viele Komplikationen mit sich: Wolken, Staub auf Eis, ozeanischen Wärmetransport, Kontinentallagen, jahreszeitliches Sonnenlicht, Meereisdynamik und den Kohlenstoffkreislauf. Ein einfaches Modell hat dennoch seinen Wert, weil es die Strahlungsbilanz erster Ordnung isoliert. Es zeigt, warum Schneeballerde-Hypothesen sowohl von schwachem Sonnenlicht oder hohen Albedo-Auslösern als auch von späterem Treibhausaufbau für die Entkommung abhängen.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ text: 'Den Simulator interpretieren',
123
+ level: 3,
124
+ },
125
+ {
126
+ type: 'list',
127
+ items: [
128
+ '<strong>Schneeballblockade:</strong> Die endgültige Eisbedeckung ist sehr hoch und die Gleichgewichtstemperatur bleibt weit unter dem Gefrierpunkt.',
129
+ '<strong>Gemäßigtes Gleichgewicht:</strong> Das Modell stabilisiert sich mit teilweiser Eisbedeckung und moderater absorbierter Strahlung.',
130
+ '<strong>Treibhausrückzug:</strong> Das Eis schrumpft auf einen sehr kleinen Anteil, während der Treibhausantrieb und die absorbierte Sonnenstrahlung hoch bleiben.',
131
+ ],
132
+ },
133
+ ],
134
+ faq,
135
+ bibliography,
136
+ howTo,
137
+ schemas: [
138
+ {
139
+ '@context': 'https://schema.org',
140
+ '@type': 'SoftwareApplication',
141
+ name: title,
142
+ description,
143
+ applicationCategory: 'ScientificApplication',
144
+ operatingSystem: 'Any',
145
+ },
146
+ {
147
+ '@context': 'https://schema.org',
148
+ '@type': 'FAQPage',
149
+ mainEntity: faq.map((item) => ({
150
+ '@type': 'Question',
151
+ name: item.question,
152
+ acceptedAnswer: {
153
+ '@type': 'Answer',
154
+ text: item.answer,
155
+ },
156
+ })),
157
+ },
158
+ {
159
+ '@context': 'https://schema.org',
160
+ '@type': 'HowTo',
161
+ name: title,
162
+ step: howTo.map((step) => ({
163
+ '@type': 'HowToStep',
164
+ name: step.name,
165
+ text: step.text,
166
+ })),
167
+ },
168
+ ],
169
+ };