@jjlmoya/utils-health 1.23.0 → 1.25.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 (79) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +4 -1
  3. package/src/entries.ts +7 -1
  4. package/src/index.ts +3 -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/bunCreatinineCalculator/bibliography.astro +14 -0
  8. package/src/tool/bunCreatinineCalculator/bibliography.ts +20 -0
  9. package/src/tool/bunCreatinineCalculator/bun-creatinine-ratio-calculator.css +418 -0
  10. package/src/tool/bunCreatinineCalculator/component.astro +257 -0
  11. package/src/tool/bunCreatinineCalculator/entry.ts +27 -0
  12. package/src/tool/bunCreatinineCalculator/i18n/de.ts +313 -0
  13. package/src/tool/bunCreatinineCalculator/i18n/en.ts +313 -0
  14. package/src/tool/bunCreatinineCalculator/i18n/es.ts +313 -0
  15. package/src/tool/bunCreatinineCalculator/i18n/fr.ts +313 -0
  16. package/src/tool/bunCreatinineCalculator/i18n/id.ts +313 -0
  17. package/src/tool/bunCreatinineCalculator/i18n/it.ts +313 -0
  18. package/src/tool/bunCreatinineCalculator/i18n/ja.ts +313 -0
  19. package/src/tool/bunCreatinineCalculator/i18n/ko.ts +313 -0
  20. package/src/tool/bunCreatinineCalculator/i18n/nl.ts +313 -0
  21. package/src/tool/bunCreatinineCalculator/i18n/pl.ts +313 -0
  22. package/src/tool/bunCreatinineCalculator/i18n/pt.ts +313 -0
  23. package/src/tool/bunCreatinineCalculator/i18n/ru.ts +313 -0
  24. package/src/tool/bunCreatinineCalculator/i18n/sv.ts +313 -0
  25. package/src/tool/bunCreatinineCalculator/i18n/tr.ts +313 -0
  26. package/src/tool/bunCreatinineCalculator/i18n/zh.ts +313 -0
  27. package/src/tool/bunCreatinineCalculator/index.ts +12 -0
  28. package/src/tool/bunCreatinineCalculator/logic.ts +48 -0
  29. package/src/tool/bunCreatinineCalculator/seo.astro +15 -0
  30. package/src/tool/bunCreatinineCalculator/ui.ts +33 -0
  31. package/src/tool/macronutrientCalculator/bibliography.astro +14 -0
  32. package/src/tool/macronutrientCalculator/bibliography.ts +28 -0
  33. package/src/tool/macronutrientCalculator/component.astro +310 -0
  34. package/src/tool/macronutrientCalculator/entry.ts +27 -0
  35. package/src/tool/macronutrientCalculator/i18n/de.ts +415 -0
  36. package/src/tool/macronutrientCalculator/i18n/en.ts +415 -0
  37. package/src/tool/macronutrientCalculator/i18n/es.ts +415 -0
  38. package/src/tool/macronutrientCalculator/i18n/fr.ts +415 -0
  39. package/src/tool/macronutrientCalculator/i18n/id.ts +415 -0
  40. package/src/tool/macronutrientCalculator/i18n/it.ts +415 -0
  41. package/src/tool/macronutrientCalculator/i18n/ja.ts +415 -0
  42. package/src/tool/macronutrientCalculator/i18n/ko.ts +419 -0
  43. package/src/tool/macronutrientCalculator/i18n/nl.ts +415 -0
  44. package/src/tool/macronutrientCalculator/i18n/pl.ts +415 -0
  45. package/src/tool/macronutrientCalculator/i18n/pt.ts +415 -0
  46. package/src/tool/macronutrientCalculator/i18n/ru.ts +415 -0
  47. package/src/tool/macronutrientCalculator/i18n/sv.ts +415 -0
  48. package/src/tool/macronutrientCalculator/i18n/tr.ts +415 -0
  49. package/src/tool/macronutrientCalculator/i18n/zh.ts +415 -0
  50. package/src/tool/macronutrientCalculator/index.ts +12 -0
  51. package/src/tool/macronutrientCalculator/logic.ts +62 -0
  52. package/src/tool/macronutrientCalculator/macronutrient-calculator.css +492 -0
  53. package/src/tool/macronutrientCalculator/seo.astro +15 -0
  54. package/src/tool/macronutrientCalculator/ui.ts +39 -0
  55. package/src/tool/tdeeCalculator/bibliography.astro +14 -0
  56. package/src/tool/tdeeCalculator/bibliography.ts +28 -0
  57. package/src/tool/tdeeCalculator/component.astro +252 -0
  58. package/src/tool/tdeeCalculator/entry.ts +27 -0
  59. package/src/tool/tdeeCalculator/i18n/de.ts +320 -0
  60. package/src/tool/tdeeCalculator/i18n/en.ts +305 -0
  61. package/src/tool/tdeeCalculator/i18n/es.ts +305 -0
  62. package/src/tool/tdeeCalculator/i18n/fr.ts +305 -0
  63. package/src/tool/tdeeCalculator/i18n/id.ts +305 -0
  64. package/src/tool/tdeeCalculator/i18n/it.ts +305 -0
  65. package/src/tool/tdeeCalculator/i18n/ja.ts +305 -0
  66. package/src/tool/tdeeCalculator/i18n/ko.ts +305 -0
  67. package/src/tool/tdeeCalculator/i18n/nl.ts +305 -0
  68. package/src/tool/tdeeCalculator/i18n/pl.ts +305 -0
  69. package/src/tool/tdeeCalculator/i18n/pt.ts +305 -0
  70. package/src/tool/tdeeCalculator/i18n/ru.ts +305 -0
  71. package/src/tool/tdeeCalculator/i18n/sv.ts +305 -0
  72. package/src/tool/tdeeCalculator/i18n/tr.ts +305 -0
  73. package/src/tool/tdeeCalculator/i18n/zh.ts +305 -0
  74. package/src/tool/tdeeCalculator/index.ts +12 -0
  75. package/src/tool/tdeeCalculator/logic.ts +80 -0
  76. package/src/tool/tdeeCalculator/seo.astro +15 -0
  77. package/src/tool/tdeeCalculator/tdee-calculator.css +345 -0
  78. package/src/tool/tdeeCalculator/ui.ts +45 -0
  79. package/src/tools.ts +4 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-health",
3
- "version": "1.23.0",
3
+ "version": "1.25.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -10,6 +10,8 @@ import { breathingVisualizer } from '../tool/breathingVisualizer/entry';
10
10
  import { caffeineTracker } from '../tool/caffeineTracker/entry';
11
11
  import { caloricDeficitCalculator } from '../tool/caloricDeficitCalculator/entry';
12
12
  import { dailyProteinCalculator } from '../tool/dailyProteinCalculator/entry';
13
+ import { macronutrientCalculator } from '../tool/macronutrientCalculator/entry';
14
+ import { tdeeCalculator } from '../tool/tdeeCalculator/entry';
13
15
  import { waterPurifier } from '../tool/waterPurifier/entry';
14
16
  import { digestionStopwatch } from '../tool/digestionStopwatch/entry';
15
17
  import { binauralTuner } from '../tool/binauralTuner/entry';
@@ -18,10 +20,11 @@ import { peripheralVisionTrainer } from '../tool/peripheralVisionTrainer/entry';
18
20
  import { epworthSleepinessScale } from '../tool/epworthSleepinessScale/entry';
19
21
  import { leanBodyMassCalculator } from '../tool/leanBodyMassCalculator/entry';
20
22
  import { metabolicAgeCalculator } from '../tool/metabolicAgeCalculator/entry';
23
+ import { bunCreatinineCalculator } from '../tool/bunCreatinineCalculator/entry';
21
24
 
22
25
  export const healthCategory: HealthCategoryEntry = {
23
26
  icon: 'mdi:heart-pulse',
24
- tools: [bmiCalculator, bodyAdiposityIndexCalculator, bodyFatPercentageCalculator, waistHipRatioCalculator, waistHeightRatioCalculator, leanBodyMassCalculator, metabolicAgeCalculator, caloricDeficitCalculator, dailyProteinCalculator, daltonismSimulator, tinnitusReliever, breathingVisualizer, caffeineTracker, waterPurifier, digestionStopwatch, binauralTuner, pelliRobsonTest, peripheralVisionTrainer, epworthSleepinessScale],
27
+ tools: [bmiCalculator, bodyAdiposityIndexCalculator, bodyFatPercentageCalculator, waistHipRatioCalculator, waistHeightRatioCalculator, leanBodyMassCalculator, metabolicAgeCalculator, caloricDeficitCalculator, dailyProteinCalculator, macronutrientCalculator, tdeeCalculator, bunCreatinineCalculator, daltonismSimulator, tinnitusReliever, breathingVisualizer, caffeineTracker, waterPurifier, digestionStopwatch, binauralTuner, pelliRobsonTest, peripheralVisionTrainer, epworthSleepinessScale],
25
28
  i18n: {
26
29
  en: () => import('./i18n/en').then((m) => m.content),
27
30
  es: () => import('./i18n/es').then((m) => m.content),
package/src/entries.ts CHANGED
@@ -15,6 +15,9 @@ export { epworthSleepinessScale } from './tool/epworthSleepinessScale/entry';
15
15
  export { hydrationCalculator } from './tool/hydrationCalculator/entry';
16
16
  export { leanBodyMassCalculator } from './tool/leanBodyMassCalculator/entry';
17
17
  export { metabolicAgeCalculator } from './tool/metabolicAgeCalculator/entry';
18
+ export { macronutrientCalculator } from './tool/macronutrientCalculator/entry';
19
+ export { tdeeCalculator } from './tool/tdeeCalculator/entry';
20
+ export { bunCreatinineCalculator } from './tool/bunCreatinineCalculator/entry';
18
21
  export { pelliRobsonTest } from './tool/pelliRobsonTest/entry';
19
22
  export { peripheralVisionTrainer } from './tool/peripheralVisionTrainer/entry';
20
23
  export { readingDistanceCalculator } from './tool/readingDistanceCalculator/entry';
@@ -40,6 +43,9 @@ import { epworthSleepinessScale } from './tool/epworthSleepinessScale/entry';
40
43
  import { hydrationCalculator } from './tool/hydrationCalculator/entry';
41
44
  import { leanBodyMassCalculator } from './tool/leanBodyMassCalculator/entry';
42
45
  import { metabolicAgeCalculator } from './tool/metabolicAgeCalculator/entry';
46
+ import { macronutrientCalculator } from './tool/macronutrientCalculator/entry';
47
+ import { tdeeCalculator } from './tool/tdeeCalculator/entry';
48
+ import { bunCreatinineCalculator } from './tool/bunCreatinineCalculator/entry';
43
49
  import { pelliRobsonTest } from './tool/pelliRobsonTest/entry';
44
50
  import { peripheralVisionTrainer } from './tool/peripheralVisionTrainer/entry';
45
51
  import { readingDistanceCalculator } from './tool/readingDistanceCalculator/entry';
@@ -47,4 +53,4 @@ import { screenDecompressionTime } from './tool/screenDecompressionTime/entry';
47
53
  import { tinnitusReliever } from './tool/tinnitusReliever/entry';
48
54
  import { ubeCalculator } from './tool/ubeCalculator/entry';
49
55
  import { waterPurifier } from './tool/waterPurifier/entry';
50
- export const ALL_ENTRIES = [binauralTuner, bloodUnitConverter, bmiCalculator, bodyAdiposityIndexCalculator, bodyFatPercentageCalculator, waistHipRatioCalculator, waistHeightRatioCalculator, breathingVisualizer, caffeineTracker, caloricDeficitCalculator, dailyProteinCalculator, daltonismSimulator, digestionStopwatch, epworthSleepinessScale, hydrationCalculator, leanBodyMassCalculator, metabolicAgeCalculator, pelliRobsonTest, peripheralVisionTrainer, readingDistanceCalculator, screenDecompressionTime, tinnitusReliever, ubeCalculator, waterPurifier];
56
+ export const ALL_ENTRIES = [binauralTuner, bloodUnitConverter, bmiCalculator, bodyAdiposityIndexCalculator, bodyFatPercentageCalculator, waistHipRatioCalculator, waistHeightRatioCalculator, breathingVisualizer, caffeineTracker, caloricDeficitCalculator, dailyProteinCalculator, macronutrientCalculator, tdeeCalculator, bunCreatinineCalculator, daltonismSimulator, digestionStopwatch, epworthSleepinessScale, hydrationCalculator, leanBodyMassCalculator, metabolicAgeCalculator, pelliRobsonTest, peripheralVisionTrainer, readingDistanceCalculator, screenDecompressionTime, tinnitusReliever, ubeCalculator, waterPurifier];
package/src/index.ts CHANGED
@@ -22,6 +22,9 @@ export * from './tool/dailyProteinCalculator';
22
22
  export * from './tool/leanBodyMassCalculator';
23
23
  export * from './tool/metabolicAgeCalculator';
24
24
  export * from './tool/bodyFatPercentageCalculator';
25
+ export * from './tool/macronutrientCalculator';
26
+ export * from './tool/tdeeCalculator';
27
+ export * from './tool/bunCreatinineCalculator';
25
28
 
26
29
  export { healthCategory } from './category';
27
30
  export const healthCategorySEO = () => import('./category/seo.astro').then((m) => m.default);
@@ -35,7 +35,7 @@ describe('Locale Completeness Validation', () => {
35
35
  });
36
36
  });
37
37
 
38
- it('all 24 tools registered', () => {
39
- expect(ALL_TOOLS.length).toBe(24);
38
+ it('all tools registered', () => {
39
+ expect(ALL_TOOLS.length).toBe(27);
40
40
  });
41
41
  });
@@ -4,8 +4,8 @@ import { healthCategory } from '../data';
4
4
 
5
5
  describe('Tool Validation Suite', () => {
6
6
  describe('Library Registration', () => {
7
- it('should have 24 tools in ALL_TOOLS', () => {
8
- expect(ALL_TOOLS.length).toBe(24);
7
+ it('should have 27 tools in ALL_TOOLS', () => {
8
+ expect(ALL_TOOLS.length).toBe(27);
9
9
  });
10
10
 
11
11
  it('healthCategory should be defined', () => {
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography } from '@jjlmoya/utils-shared';
3
+ import { bunCreatinineCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const content = await bunCreatinineCalculator.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <Bibliography links={content.bibliography} />}
@@ -0,0 +1,20 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'National Kidney Foundation: KDIGO Clinical Practice Guidelines for Acute Kidney Injury.',
6
+ url: 'https://kdigo.org/guidelines/acute-kidney-injury/',
7
+ },
8
+ {
9
+ name: 'Wikipedia: Blood urea nitrogen',
10
+ url: 'https://en.wikipedia.org/wiki/Blood_urea_nitrogen',
11
+ },
12
+ {
13
+ name: 'Wikipedia: Creatinine',
14
+ url: 'https://en.wikipedia.org/wiki/Creatinine',
15
+ },
16
+ {
17
+ name: 'MedlinePlus / NIH: BUN (Blood Urea Nitrogen) Test',
18
+ url: 'https://medlineplus.gov/lab-tests/bun-blood-urea-nitrogen/',
19
+ },
20
+ ];
@@ -0,0 +1,418 @@
1
+ .bun {
2
+ --c-bg: #f8f9fc;
3
+ --c-surface: #fff;
4
+ --c-border: #e4e8f0;
5
+ --c-ink: #1a1d27;
6
+ --c-muted: #6b7291;
7
+ --c-prerenal: #3b6fd4;
8
+ --c-prerenal-bg: #eef3fc;
9
+ --c-prerenal-border: #c2d3f5;
10
+ --c-normal: #2a9e6f;
11
+ --c-normal-bg: #eafaf3;
12
+ --c-normal-border: #b8ead5;
13
+ --c-intrinsic: #d95f3b;
14
+ --c-intrinsic-bg: #fdf1ee;
15
+ --c-intrinsic-border: #f5c5b6;
16
+ --c-input-bg: #fff;
17
+ --r: 10px;
18
+
19
+ background: var(--c-bg);
20
+ border: 1px solid var(--c-border);
21
+ border-radius: 16px;
22
+ overflow: hidden;
23
+ width: 100%;
24
+ display: grid;
25
+ }
26
+
27
+ .bun [hidden] {
28
+ display: none;
29
+ }
30
+
31
+ .bun__disclaimer {
32
+ display: flex;
33
+ gap: 1rem;
34
+ align-items: flex-start;
35
+ padding: 1rem 1.5rem;
36
+ background: #fffbeb;
37
+ border-bottom: 1px solid #fcd34d;
38
+ color: #92400e;
39
+ }
40
+
41
+ .theme-dark .bun__disclaimer {
42
+ background: #1c1708;
43
+ border-bottom-color: #78350f;
44
+ color: #fcd34d;
45
+ }
46
+
47
+ .bun__disclaimer-icon {
48
+ width: 22px;
49
+ height: 22px;
50
+ flex-shrink: 0;
51
+ margin-top: 0.1rem;
52
+ color: #b45309;
53
+ }
54
+
55
+ .theme-dark .bun__disclaimer-icon {
56
+ color: #fcd34d;
57
+ }
58
+
59
+ .bun__disclaimer-text {
60
+ display: grid;
61
+ gap: 0.25rem;
62
+ font-size: 0.8rem;
63
+ line-height: 1.5;
64
+ }
65
+
66
+ .bun__disclaimer-text strong {
67
+ font-size: 0.82rem;
68
+ font-weight: 800;
69
+ color: #92400e;
70
+ text-transform: uppercase;
71
+ letter-spacing: 0.05em;
72
+ }
73
+
74
+ .theme-dark .bun__disclaimer-text strong {
75
+ color: #fcd34d;
76
+ }
77
+
78
+ .bun__disclaimer-text span {
79
+ color: #78350f;
80
+ }
81
+
82
+ .theme-dark .bun__disclaimer-text span {
83
+ color: #d97706;
84
+ }
85
+
86
+ .theme-dark .bun {
87
+ --c-bg: #0e0f16;
88
+ --c-surface: #161822;
89
+ --c-border: #252838;
90
+ --c-ink: #e8eaf5;
91
+ --c-muted: #7880a6;
92
+ --c-prerenal: #5b8de8;
93
+ --c-prerenal-bg: #131b30;
94
+ --c-prerenal-border: #1e3060;
95
+ --c-normal: #3ec98a;
96
+ --c-normal-bg: #0e2018;
97
+ --c-normal-border: #1a4530;
98
+ --c-intrinsic: #f07653;
99
+ --c-intrinsic-bg: #251510;
100
+ --c-intrinsic-border: #4a2015;
101
+ --c-input-bg: #161822;
102
+ }
103
+
104
+ .bun__inputs {
105
+ display: grid;
106
+ gap: 1px;
107
+ background: var(--c-border);
108
+ }
109
+
110
+ @media (min-width: 640px) {
111
+ .bun__inputs {
112
+ grid-template-columns: 1fr 1fr;
113
+ }
114
+ }
115
+
116
+ .bun__field {
117
+ background: var(--c-surface);
118
+ padding: 1.25rem 1.5rem 1rem;
119
+ display: grid;
120
+ gap: 0.6rem;
121
+ }
122
+
123
+ .bun__field-label {
124
+ font-size: 0.68rem;
125
+ font-weight: 700;
126
+ letter-spacing: 0.1em;
127
+ text-transform: uppercase;
128
+ color: var(--c-muted);
129
+ }
130
+
131
+ .bun__field-row {
132
+ display: grid;
133
+ grid-template-columns: 1fr auto;
134
+ gap: 0.75rem;
135
+ align-items: center;
136
+ }
137
+
138
+ .bun__input {
139
+ width: 100%;
140
+ padding: 0.55rem 0.75rem;
141
+ font-size: 1.5rem;
142
+ font-weight: 700;
143
+ color: var(--c-ink);
144
+ background: var(--c-input-bg);
145
+ border: 1.5px solid var(--c-border);
146
+ border-radius: var(--r);
147
+ outline: none;
148
+ transition: border-color 0.15s, box-shadow 0.15s;
149
+ min-width: 0;
150
+ }
151
+
152
+ .bun__input::placeholder {
153
+ font-weight: 400;
154
+ color: var(--c-border);
155
+ font-size: 1.1rem;
156
+ }
157
+
158
+ .bun__input:focus {
159
+ border-color: var(--c-ink);
160
+ box-shadow: 0 0 0 3px rgba(26, 29, 39, 0.08);
161
+ }
162
+
163
+ .theme-dark .bun__input:focus {
164
+ box-shadow: 0 0 0 3px rgba(232, 234, 245, 0.08);
165
+ }
166
+
167
+ .bun__unit-toggle {
168
+ display: flex;
169
+ flex-direction: column;
170
+ gap: 3px;
171
+ flex-shrink: 0;
172
+ }
173
+
174
+ .bun__unit-btn {
175
+ padding: 0.3rem 0.65rem;
176
+ font-size: 0.7rem;
177
+ font-weight: 700;
178
+ border: 1.5px solid var(--c-border);
179
+ border-radius: 6px;
180
+ background: transparent;
181
+ color: var(--c-muted);
182
+ cursor: pointer;
183
+ transition: background 0.12s, color 0.12s, border-color 0.12s;
184
+ white-space: nowrap;
185
+ line-height: 1.4;
186
+ letter-spacing: 0.02em;
187
+ }
188
+
189
+ .bun__unit-btn--active {
190
+ background: var(--c-ink);
191
+ color: var(--c-bg);
192
+ border-color: var(--c-ink);
193
+ }
194
+
195
+ .bun__converted {
196
+ font-size: 0.71rem;
197
+ color: var(--c-muted);
198
+ min-height: 1em;
199
+ font-style: italic;
200
+ }
201
+
202
+ .bun__empty {
203
+ display: flex;
204
+ flex-direction: column;
205
+ align-items: center;
206
+ justify-content: center;
207
+ gap: 0.75rem;
208
+ padding: 3rem 1.5rem;
209
+ background: var(--c-surface);
210
+ border-top: 1px solid var(--c-border);
211
+ color: var(--c-muted);
212
+ font-size: 0.85rem;
213
+ text-align: center;
214
+ }
215
+
216
+ .bun__empty-icon {
217
+ width: 40px;
218
+ height: 40px;
219
+ opacity: 0.3;
220
+ color: var(--c-ink);
221
+ }
222
+
223
+ .bun__result-hero {
224
+ display: grid;
225
+ background: var(--c-surface);
226
+ border-top: 1px solid var(--c-border);
227
+ }
228
+
229
+ @media (min-width: 600px) {
230
+ .bun__result-hero {
231
+ grid-template-columns: 1fr 1fr;
232
+ align-items: center;
233
+ }
234
+ }
235
+
236
+ .bun__result-main {
237
+ padding: 2rem 1.5rem 1.5rem;
238
+ display: grid;
239
+ gap: 0.4rem;
240
+ }
241
+
242
+ .bun__result-label {
243
+ font-size: 0.68rem;
244
+ font-weight: 700;
245
+ letter-spacing: 0.1em;
246
+ text-transform: uppercase;
247
+ color: var(--c-muted);
248
+ }
249
+
250
+ .bun__result-number {
251
+ display: flex;
252
+ align-items: baseline;
253
+ gap: 0.1rem;
254
+ }
255
+
256
+ .bun__result-value {
257
+ font-size: clamp(4rem, 12vw, 6.5rem);
258
+ font-weight: 900;
259
+ line-height: 1;
260
+ letter-spacing: -0.04em;
261
+ color: var(--c-ink);
262
+ transition: color 0.3s;
263
+ }
264
+
265
+ .bun__result-value--prerenal { color: var(--c-prerenal); }
266
+ .bun__result-value--normal { color: var(--c-normal); }
267
+ .bun__result-value--intrinsic { color: var(--c-intrinsic); }
268
+
269
+ .bun__result-colon {
270
+ font-size: 1.5rem;
271
+ font-weight: 700;
272
+ color: var(--c-muted);
273
+ align-self: flex-end;
274
+ padding-bottom: 0.6rem;
275
+ }
276
+
277
+ .bun__result-zone {
278
+ font-size: 0.95rem;
279
+ font-weight: 700;
280
+ padding: 0.3rem 0.8rem;
281
+ border-radius: 999px;
282
+ display: inline-block;
283
+ width: fit-content;
284
+ transition: background 0.3s, color 0.3s;
285
+ }
286
+
287
+ .bun__result-zone--prerenal { background: var(--c-prerenal-bg); color: var(--c-prerenal); }
288
+ .bun__result-zone--normal { background: var(--c-normal-bg); color: var(--c-normal); }
289
+ .bun__result-zone--intrinsic { background: var(--c-intrinsic-bg); color: var(--c-intrinsic); }
290
+
291
+ .bun__gauge {
292
+ display: flex;
293
+ flex-direction: column;
294
+ align-items: center;
295
+ padding: 1rem 1.5rem 0.5rem;
296
+ }
297
+
298
+ .bun__gauge-arc {
299
+ width: 100%;
300
+ max-width: 200px;
301
+ color: var(--c-ink);
302
+ }
303
+
304
+ .bun__gauge-bg {
305
+ stroke: #e4e8f0;
306
+ opacity: 0.4;
307
+ }
308
+
309
+ .theme-dark .bun__gauge-bg {
310
+ stroke: #252838;
311
+ opacity: 0.6;
312
+ }
313
+
314
+ .bun__gauge-bg--intrinsic { stroke: var(--c-intrinsic); }
315
+ .bun__gauge-bg--normal { stroke: var(--c-normal); }
316
+ .bun__gauge-bg--prerenal { stroke: var(--c-prerenal); }
317
+
318
+ .bun__gauge-arc--intrinsic .bun__gauge-bg { opacity: 0.18; }
319
+ .bun__gauge-arc--intrinsic .bun__gauge-bg--intrinsic { opacity: 1; }
320
+
321
+ .bun__gauge-arc--normal .bun__gauge-bg { opacity: 0.18; }
322
+ .bun__gauge-arc--normal .bun__gauge-bg--normal { opacity: 1; }
323
+
324
+ .bun__gauge-arc--prerenal .bun__gauge-bg { opacity: 0.18; }
325
+ .bun__gauge-arc--prerenal .bun__gauge-bg--prerenal { opacity: 1; }
326
+
327
+ .bun__gauge-labels {
328
+ display: flex;
329
+ justify-content: space-between;
330
+ width: 100%;
331
+ max-width: 200px;
332
+ font-size: 0.65rem;
333
+ font-weight: 700;
334
+ color: var(--c-muted);
335
+ margin-top: 0.25rem;
336
+ }
337
+
338
+ .bun__gauge-label--intrinsic { color: var(--c-intrinsic); }
339
+ .bun__gauge-label--normal { color: var(--c-normal); }
340
+ .bun__gauge-label--prerenal { color: var(--c-prerenal); }
341
+
342
+ .bun__zones {
343
+ display: grid;
344
+ gap: 1px;
345
+ background: var(--c-border);
346
+ }
347
+
348
+ @media (min-width: 640px) {
349
+ .bun__zones {
350
+ grid-template-columns: repeat(3, 1fr);
351
+ }
352
+ }
353
+
354
+ .bun__zone {
355
+ background: var(--c-surface);
356
+ padding: 1rem 1.25rem;
357
+ display: flex;
358
+ gap: 0.75rem;
359
+ align-items: flex-start;
360
+ transition: background 0.2s;
361
+ }
362
+
363
+ .bun__zone-dot {
364
+ width: 10px;
365
+ height: 10px;
366
+ border-radius: 50%;
367
+ flex-shrink: 0;
368
+ margin-top: 0.15rem;
369
+ transition: transform 0.2s;
370
+ }
371
+
372
+ .bun__zone--intrinsic .bun__zone-dot { background: var(--c-intrinsic); }
373
+ .bun__zone--normal .bun__zone-dot { background: var(--c-normal); }
374
+ .bun__zone--prerenal .bun__zone-dot { background: var(--c-prerenal); }
375
+
376
+ .bun__zone-content {
377
+ display: grid;
378
+ gap: 0.2rem;
379
+ }
380
+
381
+ .bun__zone-name {
382
+ font-size: 0.72rem;
383
+ font-weight: 800;
384
+ letter-spacing: 0.06em;
385
+ text-transform: uppercase;
386
+ }
387
+
388
+ .bun__zone--intrinsic .bun__zone-name { color: var(--c-intrinsic); }
389
+ .bun__zone--normal .bun__zone-name { color: var(--c-normal); }
390
+ .bun__zone--prerenal .bun__zone-name { color: var(--c-prerenal); }
391
+
392
+ .bun__zone-threshold {
393
+ font-size: 0.75rem;
394
+ font-weight: 700;
395
+ color: var(--c-ink);
396
+ }
397
+
398
+ .bun__zone-desc {
399
+ font-size: 0.7rem;
400
+ color: var(--c-muted);
401
+ line-height: 1.45;
402
+ }
403
+
404
+ .bun__zone--active {
405
+ background: var(--c-prerenal-bg);
406
+ }
407
+
408
+ .bun__zone--active.bun__zone--intrinsic {
409
+ background: var(--c-intrinsic-bg);
410
+ }
411
+
412
+ .bun__zone--active.bun__zone--normal {
413
+ background: var(--c-normal-bg);
414
+ }
415
+
416
+ .bun__zone--active .bun__zone-dot {
417
+ transform: scale(1.5);
418
+ }