@jjlmoya/utils-home 1.35.0 → 1.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/package.json +1 -1
  2. package/scripts/fix_ru.mjs +79 -0
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/layouts/PreviewLayout.astro +1 -0
  6. package/src/tests/diacritics_density.test.ts +118 -0
  7. package/src/tests/inverted_punctuation.test.ts +84 -0
  8. package/src/tests/locale_completeness.test.ts +2 -2
  9. package/src/tests/script_density.test.ts +94 -0
  10. package/src/tests/tool_validation.test.ts +2 -2
  11. package/src/tool/applianceCostCalculator/i18n/pl.ts +53 -53
  12. package/src/tool/applianceCostCalculator/i18n/pt.ts +48 -48
  13. package/src/tool/heatingComparator/heating-consumption-comparator.css +89 -4
  14. package/src/tool/humidityCalculator/bibliography.ts +2 -2
  15. package/src/tool/humidityCalculator/i18n/sv.ts +57 -57
  16. package/src/tool/projectorCalculator/i18n/es.ts +1 -1
  17. package/src/tool/tileLayoutCalculator/tile-layout-calculator.css +90 -5
  18. package/src/tool/waterSoftener/bibliography.astro +14 -0
  19. package/src/tool/waterSoftener/bibliography.ts +14 -0
  20. package/src/tool/waterSoftener/component.astro +321 -0
  21. package/src/tool/waterSoftener/entry.ts +29 -0
  22. package/src/tool/waterSoftener/i18n/de.ts +222 -0
  23. package/src/tool/waterSoftener/i18n/en.ts +222 -0
  24. package/src/tool/waterSoftener/i18n/es.ts +222 -0
  25. package/src/tool/waterSoftener/i18n/fr.ts +222 -0
  26. package/src/tool/waterSoftener/i18n/id.ts +222 -0
  27. package/src/tool/waterSoftener/i18n/it.ts +222 -0
  28. package/src/tool/waterSoftener/i18n/ja.ts +222 -0
  29. package/src/tool/waterSoftener/i18n/ko.ts +222 -0
  30. package/src/tool/waterSoftener/i18n/nl.ts +222 -0
  31. package/src/tool/waterSoftener/i18n/pl.ts +222 -0
  32. package/src/tool/waterSoftener/i18n/pt.ts +222 -0
  33. package/src/tool/waterSoftener/i18n/ru.ts +222 -0
  34. package/src/tool/waterSoftener/i18n/sv.ts +222 -0
  35. package/src/tool/waterSoftener/i18n/tr.ts +222 -0
  36. package/src/tool/waterSoftener/i18n/zh.ts +222 -0
  37. package/src/tool/waterSoftener/index.ts +9 -0
  38. package/src/tool/waterSoftener/logic.ts +103 -0
  39. package/src/tool/waterSoftener/seo.astro +15 -0
  40. package/src/tool/waterSoftener/ui.ts +34 -0
  41. package/src/tool/waterSoftener/water-softener.css +449 -0
  42. package/src/tool/wifiRangeSimulator/i18n/ru.ts +212 -212
  43. package/src/tools.ts +2 -0
@@ -6,65 +6,65 @@ import { bibliography } from '../bibliography';
6
6
  const slug = 'luftfuktighetskalkylator';
7
7
  const title = 'Hemluftfuktighet och Avfuktare Drifttid Estimator';
8
8
  const description =
9
- 'Berakna hur mycket vatten din avfuktare maste avlagsna for att fora ett fuktigt rum till en halsosam luftfuktighetsniva. Se beraknad drifttid, mogelriskvarningar och komfortzonsvisualiseringar i ett interaktivt verktyg.';
9
+ 'Beräkna hur mycket vatten din avfuktare måste avlägsna för att föra ett fuktigt rum till en hälsosam luftfuktighetsnivå. Se beräknad drifttid, mögelriskvarningar och komfortzonsvisualiseringar i ett interaktivt verktyg.';
10
10
 
11
11
  const faqData = [
12
12
  {
13
- question: 'Hur lange ska en avfuktare ga per dag?',
13
+ question: 'Hur länge ska en avfuktare per dag?',
14
14
  answer:
15
- 'I ett mattligt fuktigt rum behover en standard hushallsavfuktare vanligtvis ga mellan 8 och 12 timmar per dag for att bibehalla 50 procent relativ luftfuktighet. Vid mycket fuktiga forhallanden eller efter vattenskador kan kontinuerlig drift i 24 till 48 timmar vara nodvandig for att uppna baslinjetorrhet.',
15
+ 'I ett måttligt fuktigt rum behöver en standard hushållsavfuktare vanligtvis mellan 8 och 12 timmar per dag för att bibehålla 50 procent relativ luftfuktighet. Vid mycket fuktiga förhållanden eller efter vattenskador kan kontinuerlig drift i 24 till 48 timmar vara nödvändig för att uppnå baslinjetorrhet.',
16
16
  },
17
17
  {
18
- question: 'Vilken inomhusluftfuktighetsniva forhindrar mogel?',
18
+ question: 'Vilken inomhusluftfuktighetsnivå förhindrar mögel?',
19
19
  answer:
20
- 'Mogelvaxt hammas nar inomhus relativ luftfuktighet halls under 60 procent. Den ideala komfortzonen for manniskors halsa och byggnadens bevarande ligger mellan 40 och 50 procent relativ luftfuktighet. Nivaer over 70 procent skapar en hogriskmiljo for mogelsporer att gro inom 24 till 48 timmar.',
20
+ 'Mögelväxt hämmas när inomhus relativ luftfuktighet hålls under 60 procent. Den ideala komfortzonen för människors hälsa och byggnadens bevarande ligger mellan 40 och 50 procent relativ luftfuktighet. Nivåer över 70 procent skapar en högriskmiljö för mögelsporer att gro inom 24 till 48 timmar.',
21
21
  },
22
22
  {
23
- question: 'Hur mycket vatten kan luft halla?',
23
+ question: 'Hur mycket vatten kan luft hålla?',
24
24
  answer:
25
- 'Mangden vattenanga luft kan halla beror pa temperaturen. Vid 20 grader Celsius innehaller mattad luft cirka 17 gram vatten per kubikmeter. Vid 25 grader Celsius stiger detta till ungefar 23 gram per kubikmeter. Ett 30 kvadratmeter stort rum vid 25 grader Celsius och 70 procent luftfuktighet innehaller ungefar 8 liter osynligt vatten i luften.',
25
+ 'Mängden vattenånga luft kan hålla beror temperaturen. Vid 20 grader Celsius innehåller mättad luft cirka 17 gram vatten per kubikmeter. Vid 25 grader Celsius stiger detta till ungefär 23 gram per kubikmeter. Ett 30 kvadratmeter stort rum vid 25 grader Celsius och 70 procent luftfuktighet innehåller ungefär 8 liter osynligt vatten i luften.',
26
26
  },
27
27
  {
28
- question: 'Paverkar temperatur avfuktarens effektivitet?',
28
+ question: 'Påverkar temperatur avfuktarens effektivitet?',
29
29
  answer:
30
- 'Ja. Kompressorbaserade avfuktare fungerar blast over 18 grader Celsius. Under 15 grader Celsius sjunker deras prestanda eftersom forangarspolar kan frysa over. Dessicant avfuktare ar battre lamplade for kalla utrymmen som garage eller kallare eftersom de anvander en kemisk torkningsprocess istallet for kondensering.',
30
+ 'Ja. Kompressorbaserade avfuktare fungerar bäst över 18 grader Celsius. Under 15 grader Celsius sjunker deras prestanda eftersom förångarspolar kan frysa över. Dessicant avfuktare är bättre lämpade för kalla utrymmen som garage eller källare eftersom de använder en kemisk torkningsprocess istället för kondensering.',
31
31
  },
32
32
  {
33
- question: 'Vilken storlek pa avfuktare behover jag?',
33
+ question: 'Vilken storlek avfuktare behöver jag?',
34
34
  answer:
35
- 'For ett mattligt fuktigt rum upp till 50 kvadratmeter racker vanligtvis en enhet pa 10 till 12 liter per dag. For mycket fuktiga rum eller utrymmen over 50 kvadratmeter, valj en 20 liter per dag modell. Efter oversvamning eller svar fuktighet aterstaller en industriell enhet pa 30 liter per dag forhallandena snabbare.',
35
+ 'För ett måttligt fuktigt rum upp till 50 kvadratmeter räcker vanligtvis en enhet 10 till 12 liter per dag. För mycket fuktiga rum eller utrymmen över 50 kvadratmeter, välj en 20 liter per dag modell. Efter översvämning eller svår fuktighet återställer en industriell enhet 30 liter per dag förhållandena snabbare.',
36
36
  },
37
37
  {
38
- question: 'Kan en avfuktare torka tvatt?',
38
+ question: 'Kan en avfuktare torka tvätt?',
39
39
  answer:
40
- 'Ja. En avfuktare med tvattlage kan effektivt torka klader inomhus samtidigt som den avlagsnar fukt fran omgivande luft. Den anvander mindre energi an en torktumlare och forhindrar kondens pa fonster och vaggar. Forvanta dig torktider liknande utomhus torkning i varmt vader.',
40
+ 'Ja. En avfuktare med tvättläge kan effektivt torka kläder inomhus samtidigt som den avlägsnar fukt från omgivande luft. Den använder mindre energi än en torktumlare och förhindrar kondens fönster och väggar. Förvänta dig torktider liknande utomhus torkning i varmt väder.',
41
41
  },
42
42
  ];
43
43
 
44
44
  const howToData = [
45
45
  {
46
46
  name: 'Ange rumsstorlek',
47
- text: 'Skriv in golvytan pa rummet i kvadratmeter. Kalkylatorn forutsatter en standard takhojd pa 2,5 meter for att uppskatta total luftvolym.',
47
+ text: 'Skriv in golvytan rummet i kvadratmeter. Kalkylatorn förutsätter en standard takhöjd 2,5 meter för att uppskatta total luftvolym.',
48
48
  },
49
49
  {
50
- name: 'Stall in temperatur',
51
- text: 'Mata in aktuell rumstemperatur i grader Celsius. Varmare luft hallmer fukt, sa temperaturen paverkar direkt hur mycket vatten som maste avlagsnas.',
50
+ name: 'Ställ in temperatur',
51
+ text: 'Mata in aktuell rumstemperatur i grader Celsius. Varmare luft håller mer fukt, temperaturen påverkar direkt hur mycket vatten som måste avlägsnas.',
52
52
  },
53
53
  {
54
- name: 'Valj aktuell luftfuktighet',
55
- text: 'Anvand komfortreglaget eller numerisk inmatning for att stalla in aktuell procent relativ luftfuktighet. Varden over 60 procent markeras i varningsfarger.',
54
+ name: 'Välj aktuell luftfuktighet',
55
+ text: 'Använd komfortreglaget eller numerisk inmatning för att ställa in aktuell procent relativ luftfuktighet. Värden över 60 procent markeras i varningsfärger.',
56
56
  },
57
57
  {
58
- name: 'Valj malluftfuktighet',
59
- text: 'Stall in onskad relativ luftfuktighet. 50 procent rekommenderas for komfort och mogelforebyggande. 40 procent ar idealiskt for allergiker.',
58
+ name: 'Välj målluftfuktighet',
59
+ text: 'Ställ in önskad relativ luftfuktighet. 50 procent rekommenderas för komfort och mögelförebyggande. 40 procent är idealiskt för allergiker.',
60
60
  },
61
61
  {
62
62
  name: 'Mata in avfuktarkapacitet',
63
- text: 'Ange avfuktarens kapacitet i liter per dag. Detta star vanligtvis pa framsidans etikett eller i bruksanvisningen.',
63
+ text: 'Ange avfuktarens kapacitet i liter per dag. Detta står vanligtvis framsidans etikett eller i bruksanvisningen.',
64
64
  },
65
65
  {
66
66
  name: 'Granska resultat',
67
- text: 'Las vattenavlagsningssimuleringen, drifttidsuppskattningen och mogelriskbannern for att besluta hur lange du ska kora din apparat.',
67
+ text: 'Läs vattenavlagsningssimuleringen, drifttidsuppskattningen och mögelriskbannern för att besluta hur länge du ska köra din apparat.',
68
68
  },
69
69
  ];
70
70
 
@@ -112,45 +112,45 @@ export const content: ToolLocaleContent<HumidityCalculatorUI> = {
112
112
  seo: [
113
113
  {
114
114
  type: 'title',
115
- text: 'Det dolda vattnet i dina vaggar',
115
+ text: 'Det dolda vattnet i dina väggar',
116
116
  level: 2,
117
117
  },
118
118
  {
119
119
  type: 'paragraph',
120
- html: 'De flesta husagare inser aldrig att fuktig luft inte bara ar obekvam, utan ocksa dyr och farlig. Ett enda fuktigt rum kan halla flera liter osynlig vattenanga. Med tiden kondenserar denna fukt pa kalla ytor, ger naring at mogelkolonier och forsamar puts, farg och timmer. Att forsta exakt hur mycket vatten som maste avlagsnas och hur lang tid det tar ar det forsta steget for att skydda ditt hem och din halsa.',
120
+ html: 'De flesta husägare inser aldrig att fuktig luft inte bara är obekväm, utan också dyr och farlig. Ett enda fuktigt rum kan hålla flera liter osynlig vattenånga. Med tiden kondenserar denna fukt kalla ytor, ger näring åt mögelkolonier och försämrar puts, färg och timmer. Att förstå exakt hur mycket vatten som måste avlägsnas och hur lång tid det tar är det första steget för att skydda ditt hem och din hälsa.',
121
121
  },
122
122
  {
123
123
  type: 'stats',
124
124
  items: [
125
125
  { value: '50%', label: 'Ideal inomhusluftfuktighet', icon: 'mdi:water-percent' },
126
126
  { value: '8h', label: 'Genomsnittlig daglig drifttid', icon: 'mdi:timer-outline' },
127
- { value: '70%', label: 'Mogelriskgrans', icon: 'mdi:alert-outline' },
127
+ { value: '70%', label: 'Mögelriskgräns', icon: 'mdi:alert-outline' },
128
128
  ],
129
129
  columns: 3,
130
130
  },
131
131
  {
132
132
  type: 'title',
133
- text: 'Varfor relativ luftfuktighet spelar roll',
133
+ text: 'Varför relativ luftfuktighet spelar roll',
134
134
  level: 3,
135
135
  },
136
136
  {
137
137
  type: 'paragraph',
138
- html: 'Relativ luftfuktighet ar inte mangden vatten i luften, det ar procentandelen vatten som luften haller i forhallande till maximalt vad den skulle kunna halla vid den temperaturen. Varm luft ar som en storre svamp. Vid 30 grader Celsius kan luft halla nastan dubbelt sa mycket fukt som vid 15 grader Celsius. Det ar darfor ett rum kannas klibbigt aven efter att du har oppnat fonstren. Fuktigheten ar fortfarande dar, bara mindre synlig.',
138
+ html: 'Relativ luftfuktighet är inte mängden vatten i luften, det är procentandelen vatten som luften håller i förhållande till maximalt vad den skulle kunna hålla vid den temperaturen. Varm luft är som en större svamp. Vid 30 grader Celsius kan luft hålla nästan dubbelt mycket fukt som vid 15 grader Celsius. Det är därför ett rum känns klibbigt även efter att du har öppnat fönstren. Fuktigheten är fortfarande där, bara mindre synlig.',
139
139
  },
140
140
  {
141
141
  type: 'comparative',
142
142
  items: [
143
143
  {
144
- title: 'Hog luftfuktighet',
145
- description: 'Over 60 procent relativ luftfuktighet. Risk for mogel, kvalster och kondensationsskador.',
144
+ title: 'Hög luftfuktighet',
145
+ description: 'Över 60 procent relativ luftfuktighet. Risk för mögel, kvalster och kondensationsskador.',
146
146
  icon: 'mdi:alert',
147
- points: ['Kondens pa fonster och vaggar', 'Instangda lukter och mikrobiell tillvaxt', 'Okad andningsirritation', 'Hogre uppvarmningskostnader pa grund av termisk ledningsformaga hos fuktig luft'],
147
+ points: ['Kondens fönster och väggar', 'Instängda lukter och mikrobiell tillväxt', 'Ökad andningsirritation', 'Högre uppvärmningskostnader grund av termisk ledningsförmåga hos fuktig luft'],
148
148
  },
149
149
  {
150
150
  title: 'Optimal luftfuktighet',
151
- description: 'Mellan 40 och 50 procent relativ luftfuktighet. Bekvamt, halsosamt och energieffektivt.',
151
+ description: 'Mellan 40 och 50 procent relativ luftfuktighet. Bekvämt, hälsosamt och energieffektivt.',
152
152
  icon: 'mdi:check-circle',
153
- points: ['Ingen kondens pa kalla ytor', 'Mogelsporer forblir vilande', 'Hud och andningskomfort', 'Bevarande av mobler och virke'],
153
+ points: ['Ingen kondens kalla ytor', 'Mögelsporer förblir vilande', 'Hud och andningskomfort', 'Bevarande av möbler och virke'],
154
154
  },
155
155
  ],
156
156
  columns: 2,
@@ -160,58 +160,58 @@ export const content: ToolLocaleContent<HumidityCalculatorUI> = {
160
160
  variant: 'info',
161
161
  title: 'Snabb fuktighetskontroll',
162
162
  icon: 'mdi:clipboard-check',
163
- badge: 'Atgard',
164
- html: '<p style="margin:0">Kontrollera fonster efter kondensering varje morgon. Om droppar visas regelbundet ar din luftfuktighet for hog. Kor en avfuktare i 12 timmar dagligen tills kondenseringen upphor. Flytta enheten till det fuktigaste rummet, vanligtvis koket, badrummet eller kallaren. Tom tanken dagligen och rengor filtret varannan vecka.</p>',
163
+ badge: 'Åtgärd',
164
+ html: '<p style="margin:0">Kontrollera fönster efter kondensering varje morgon. Om droppar visas regelbundet är din luftfuktighet för hög. Kör en avfuktare i 12 timmar dagligen tills kondenseringen upphör. Flytta enheten till det fuktigaste rummet, vanligtvis köket, badrummet eller källaren. Töm tanken dagligen och rengör filtret varannan vecka.</p>',
165
165
  },
166
166
  {
167
167
  type: 'title',
168
- text: 'Ratt dimensionering av din avfuktare',
168
+ text: 'Rätt dimensionering av din avfuktare',
169
169
  level: 3,
170
170
  },
171
171
  {
172
172
  type: 'paragraph',
173
- html: 'Ett vanligt misstag ar att kopa en avfuktare som ar for liten for utrymmet. En 10 liter per dag maskin i en 60 kvadratmeter fuktig kallare kommer att ga kontinuerligt utan att nagonsin na malluftfuktigheten. Anvand denna kalkylator for att se den exakta avfuktningsvolymen ditt rum kraver. Om drifttidsuppskattningen overstiger 20 timmar per dag behover du en enhet med storre kapacitet eller battre ventilation.',
173
+ html: 'Ett vanligt misstag är att köpa en avfuktare som är för liten för utrymmet. En 10 liter per dag maskin i en 60 kvadratmeter fuktig källare kommer att kontinuerligt utan att någonsin målluftfuktigheten. Använd denna kalkylator för att se den exakta avfuktningsvolymen ditt rum kräver. Om drifttidsuppskattningen överstiger 20 timmar per dag behöver du en enhet med större kapacitet eller bättre ventilation.',
174
174
  },
175
175
  {
176
176
  type: 'summary',
177
- title: 'Hur du haller ditt hem torrt',
177
+ title: 'Hur du håller ditt hem torrt',
178
178
  items: [
179
- 'Anvand denna kalkylator for att faststalla den exakta vattenavfuktning som behovs for varje rum.',
180
- 'Underhall inomhus relativ luftfuktighet mellan 40 och 50 procent for halsa och komfort.',
181
- 'Kor avfuktaren tills mogelriskbannern blir gron.',
182
- 'Tom vattentanken innan den fylls for att forhindra automatisk avstangning.',
183
- 'Rengor filter regelbundet for att halla luftflode och avfuktningstakt pa maximum.',
184
- 'Forbattr rumsventilationen vid sidan av avfuktning for snabbare resultat.',
179
+ 'Använd denna kalkylator för att fastställa den exakta vattenavfuktning som behövs för varje rum.',
180
+ 'Underhåll inomhus relativ luftfuktighet mellan 40 och 50 procent för hälsa och komfort.',
181
+ 'Kör avfuktaren tills mögelriskbannern blir grön.',
182
+ 'Töm vattentanken innan den fylls för att förhindra automatisk avstängning.',
183
+ 'Rengör filter regelbundet för att hålla luftflöde och avfuktningstakt maximum.',
184
+ 'Förbättra rumsventilationen vid sidan av avfuktning för snabbare resultat.',
185
185
  ],
186
186
  },
187
187
  ],
188
188
  ui: {
189
189
  labelRoomSize: 'Rumsstorlek',
190
- unitM2: 'm2',
190
+ unitM2: '',
191
191
  labelTemperature: 'Temperatur',
192
192
  unitCelsius: '°C',
193
193
  labelCurrentHumidity: 'Aktuell luftfuktighet',
194
- labelTargetHumidity: 'Malluftfuktighet',
194
+ labelTargetHumidity: 'Målluftfuktighet',
195
195
  labelCapacity: 'Avfuktarkapacitet',
196
196
  unitLitersDay: 'L/dag',
197
197
  comfortDialTitle: 'Komfortzon',
198
198
  comfortCurrent: 'Aktuell',
199
- comfortTarget: 'Mal',
199
+ comfortTarget: 'Mål',
200
200
  tankTitle: 'Vatten i luften',
201
201
  tankLiters: 'liter',
202
- runtimeTitle: 'Beraknad drifttid',
202
+ runtimeTitle: 'Beräknad drifttid',
203
203
  runtimeUnitH: 't',
204
204
  runtimeUnitM: 'm',
205
- moldRiskTitle: 'Mogelrisk',
206
- moldRiskHigh: 'Hog risk',
207
- moldRiskMedium: 'Mattlig risk',
208
- moldRiskLow: 'Lag risk',
209
- extractionLabel: 'att avlagsna',
210
- tipEnergy: 'Att kora din avfuktare under laglasttimmar kan sanka elrakningen avsevart.',
211
- tipMold: 'Att halla luftfuktigheten under 50 procent forhindrar att mogelsporer gror pa ytor.',
205
+ moldRiskTitle: 'Mögelrisk',
206
+ moldRiskHigh: 'Hög risk',
207
+ moldRiskMedium: 'Måttlig risk',
208
+ moldRiskLow: 'Låg risk',
209
+ extractionLabel: 'att avlägsna',
210
+ tipEnergy: 'Att köra din avfuktare under låglasttimmar kan sänka elräkningen avsevärt.',
211
+ tipMold: 'Att hålla luftfuktigheten under 50 procent förhindrar att mögelsporer gror ytor.',
212
212
  unitPercent: '%',
213
- badgeHigh: 'Hog',
214
- badgeMedium: 'Mattlig',
215
- badgeLow: 'Lag',
213
+ badgeHigh: 'Hög',
214
+ badgeMedium: 'Måttlig',
215
+ badgeLow: 'Låg',
216
216
  },
217
217
  };
@@ -20,7 +20,7 @@ const faqData = [
20
20
  'Depende del Throw Ratio de tu proyector. Con un ratio estándar de 1.5:1 necesitarías unos 3.3m. Con un proyector de tiro corto (Short Throw) podrías lograrlo a menos de 1m.',
21
21
  },
22
22
  {
23
- question: '¿Qué diferencia hay entre 16:9 y 4:3?',
23
+ question: '¿Qué diferencia hay entre el formato 16/9 y el 4/3?',
24
24
  answer:
25
25
  '16:9 es el formato panorámico para películas y series modernas. 4:3 es el formato clásico para presentaciones y retroproyectores. Elegir el correcto evita bordes negros excesivos.',
26
26
  },
@@ -26,6 +26,7 @@
26
26
  border: 1px solid var(--border-color);
27
27
  color: var(--text-main);
28
28
  position: relative;
29
+ min-width: 0;
29
30
  }
30
31
 
31
32
  @media (min-width: 768px) {
@@ -43,6 +44,7 @@
43
44
  display: flex;
44
45
  flex-direction: column;
45
46
  gap: 20px;
47
+ min-width: 0;
46
48
  }
47
49
 
48
50
  @media (min-width: 768px) {
@@ -63,6 +65,7 @@
63
65
  gap: 28px;
64
66
  padding: 40px 32px;
65
67
  min-height: 360px;
68
+ min-width: 0;
66
69
  }
67
70
 
68
71
  .tile-section-title {
@@ -77,6 +80,7 @@
77
80
  .tile-unit-toggle {
78
81
  display: flex;
79
82
  gap: 8px;
83
+ flex-wrap: wrap;
80
84
  }
81
85
 
82
86
  .tile-unit-btn {
@@ -89,6 +93,7 @@
89
93
  font-weight: 700;
90
94
  cursor: pointer;
91
95
  transition: all 0.2s;
96
+ min-width: 0;
92
97
  }
93
98
 
94
99
  .tile-unit-btn:hover {
@@ -120,11 +125,13 @@
120
125
  display: flex;
121
126
  align-items: baseline;
122
127
  gap: 8px;
128
+ min-width: 0;
123
129
  }
124
130
 
125
131
  .tile-number-input {
126
- width: 100px;
127
- font-size: 2.5rem;
132
+ width: min(100%, 120px);
133
+ min-width: 0;
134
+ font-size: clamp(1.8rem, 8vw, 2.5rem);
128
135
  font-weight: 900;
129
136
  color: var(--text-main);
130
137
  background: transparent;
@@ -140,8 +147,9 @@
140
147
  }
141
148
 
142
149
  .tile-price-input {
143
- width: 90px;
144
- font-size: 1.5rem;
150
+ width: min(100%, 120px);
151
+ min-width: 0;
152
+ font-size: clamp(1.25rem, 6vw, 1.5rem);
145
153
  font-weight: 900;
146
154
  color: var(--text-main);
147
155
  background: transparent;
@@ -159,6 +167,7 @@
159
167
  .tile-number-unit {
160
168
  font-size: 0.875rem;
161
169
  color: var(--text-muted);
170
+ overflow-wrap: anywhere;
162
171
  }
163
172
 
164
173
  .tile-slider {
@@ -186,6 +195,7 @@
186
195
  .tile-pattern-toggle {
187
196
  display: flex;
188
197
  gap: 8px;
198
+ flex-wrap: wrap;
189
199
  }
190
200
 
191
201
  .tile-pattern-btn {
@@ -198,6 +208,7 @@
198
208
  font-weight: 700;
199
209
  cursor: pointer;
200
210
  transition: all 0.2s;
211
+ min-width: 0;
201
212
  }
202
213
 
203
214
  .tile-pattern-btn:hover {
@@ -280,10 +291,12 @@
280
291
  width: 100%;
281
292
  max-width: 320px;
282
293
  justify-content: center;
294
+ min-width: 0;
283
295
  }
284
296
 
285
297
  .tile-stat {
286
298
  text-align: center;
299
+ min-width: 0;
287
300
  }
288
301
 
289
302
  .tile-stat-label {
@@ -300,6 +313,7 @@
300
313
  font-weight: 700;
301
314
  color: var(--text-main);
302
315
  margin: 0;
316
+ overflow-wrap: anywhere;
303
317
  }
304
318
 
305
319
  .tile-stat-divider {
@@ -328,6 +342,7 @@
328
342
  letter-spacing: 0.1em;
329
343
  color: var(--text-muted);
330
344
  margin: 0;
345
+ min-width: 0;
331
346
  }
332
347
 
333
348
  .tile-waste-value {
@@ -335,6 +350,76 @@
335
350
  font-weight: 900;
336
351
  color: var(--tile-p);
337
352
  margin: 0;
353
+ margin-left: auto;
354
+ overflow-wrap: anywhere;
355
+ }
356
+
357
+ @media (max-width: 520px) {
358
+ .tile-wrapper {
359
+ padding: 0.5rem 0;
360
+ }
361
+
362
+ .tile-card {
363
+ width: calc(100% - 16px);
364
+ border-radius: 20px;
365
+ }
366
+
367
+ .tile-left {
368
+ padding: 20px 16px;
369
+ gap: 16px;
370
+ }
371
+
372
+ .tile-right {
373
+ padding: 24px 16px;
374
+ gap: 20px;
375
+ min-height: 320px;
376
+ }
377
+
378
+ .tile-unit-btn,
379
+ .tile-pattern-btn {
380
+ flex: 1 1 auto;
381
+ padding: 8px 10px;
382
+ border-radius: 10px;
383
+ }
384
+
385
+ .tile-field {
386
+ gap: 8px;
387
+ }
388
+
389
+ .tile-svg-wrap {
390
+ max-width: 100%;
391
+ border-radius: 12px;
392
+ }
393
+
394
+ .tile-result-badge {
395
+ width: 100%;
396
+ text-align: center;
397
+ line-height: 1.35;
398
+ border-radius: 10px;
399
+ }
400
+
401
+ .tile-stats {
402
+ display: grid;
403
+ grid-template-columns: repeat(2, minmax(0, 1fr));
404
+ gap: 12px;
405
+ max-width: none;
406
+ }
407
+
408
+ .tile-stat {
409
+ padding: 10px;
410
+ border: 1px solid var(--border-color);
411
+ border-radius: 12px;
412
+ background: var(--bg-surface);
413
+ }
414
+
415
+ .tile-stat-divider {
416
+ display: none;
417
+ }
418
+
419
+ .tile-waste-row {
420
+ max-width: none;
421
+ align-items: flex-start;
422
+ }
338
423
  }
339
424
 
340
425
  @keyframes tile-pulse-success {
@@ -401,4 +486,4 @@
401
486
  transform: translate(var(--tx), var(--ty)) scale(0);
402
487
  opacity: 0;
403
488
  }
404
- }
489
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { waterSoftener } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await waterSoftener.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SharedBibliography links={content.bibliography} />}
@@ -0,0 +1,14 @@
1
+ export const bibliography = [
2
+ {
3
+ name: 'WQA: Water Hardness and Softening Basics',
4
+ url: 'https://wqa.org/resources/getting-smart-with-softeners/',
5
+ },
6
+ {
7
+ name: 'U.S. EPA: Home Water Treatment Facts',
8
+ url: 'https://www.epa.gov/ground-water-and-drinking-water/home-drinking-water-filtration-fact-sheet',
9
+ },
10
+ {
11
+ name: 'Energy.gov: Water Heating and Hard Water Scaling',
12
+ url: 'https://www.energy.gov/energysaver/purchasing-and-maintaining-water-softener',
13
+ },
14
+ ];