@jjlmoya/utils-textiles 1.1.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 (134) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +76 -0
  3. package/src/category/i18n/es.ts +76 -0
  4. package/src/category/i18n/fr.ts +73 -0
  5. package/src/category/index.ts +17 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +32 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +253 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/seo_length.test.ts +22 -0
  21. package/src/tests/title_separators.test.ts +40 -0
  22. package/src/tests/tool_validation.test.ts +17 -0
  23. package/src/tool/burnTest/bibliography.astro +34 -0
  24. package/src/tool/burnTest/component.astro +602 -0
  25. package/src/tool/burnTest/i18n/en.ts +225 -0
  26. package/src/tool/burnTest/i18n/es.ts +225 -0
  27. package/src/tool/burnTest/i18n/fr.ts +225 -0
  28. package/src/tool/burnTest/index.ts +34 -0
  29. package/src/tool/burnTest/logic.ts +3 -0
  30. package/src/tool/burnTest/seo.astro +40 -0
  31. package/src/tool/burnTest/ui.ts +36 -0
  32. package/src/tool/clothingSizeConverter/bibliography.astro +34 -0
  33. package/src/tool/clothingSizeConverter/component.astro +1226 -0
  34. package/src/tool/clothingSizeConverter/i18n/en.ts +356 -0
  35. package/src/tool/clothingSizeConverter/i18n/es.ts +356 -0
  36. package/src/tool/clothingSizeConverter/i18n/fr.ts +356 -0
  37. package/src/tool/clothingSizeConverter/index.ts +34 -0
  38. package/src/tool/clothingSizeConverter/logic.ts +30 -0
  39. package/src/tool/clothingSizeConverter/seo.astro +40 -0
  40. package/src/tool/clothingSizeConverter/ui.ts +70 -0
  41. package/src/tool/fabricProjectCalculator/bibliography.astro +19 -0
  42. package/src/tool/fabricProjectCalculator/component.astro +914 -0
  43. package/src/tool/fabricProjectCalculator/i18n/en.ts +250 -0
  44. package/src/tool/fabricProjectCalculator/i18n/es.ts +250 -0
  45. package/src/tool/fabricProjectCalculator/i18n/fr.ts +250 -0
  46. package/src/tool/fabricProjectCalculator/index.ts +34 -0
  47. package/src/tool/fabricProjectCalculator/logic.ts +89 -0
  48. package/src/tool/fabricProjectCalculator/seo.astro +40 -0
  49. package/src/tool/fabricProjectCalculator/ui.ts +57 -0
  50. package/src/tool/fabricTruth/bibliography.astro +40 -0
  51. package/src/tool/fabricTruth/component.astro +708 -0
  52. package/src/tool/fabricTruth/i18n/en.ts +282 -0
  53. package/src/tool/fabricTruth/i18n/es.ts +316 -0
  54. package/src/tool/fabricTruth/i18n/fr.ts +282 -0
  55. package/src/tool/fabricTruth/index.ts +34 -0
  56. package/src/tool/fabricTruth/logic.ts +91 -0
  57. package/src/tool/fabricTruth/seo.astro +40 -0
  58. package/src/tool/fabricTruth/ui.ts +28 -0
  59. package/src/tool/fiberPrep/bibliography.astro +33 -0
  60. package/src/tool/fiberPrep/component.astro +987 -0
  61. package/src/tool/fiberPrep/i18n/en.ts +225 -0
  62. package/src/tool/fiberPrep/i18n/es.ts +225 -0
  63. package/src/tool/fiberPrep/i18n/fr.ts +225 -0
  64. package/src/tool/fiberPrep/index.ts +34 -0
  65. package/src/tool/fiberPrep/logic.ts +36 -0
  66. package/src/tool/fiberPrep/seo.astro +40 -0
  67. package/src/tool/fiberPrep/ui.ts +38 -0
  68. package/src/tool/knittingGauge/bibliography.astro +14 -0
  69. package/src/tool/knittingGauge/component.astro +828 -0
  70. package/src/tool/knittingGauge/i18n/en.ts +234 -0
  71. package/src/tool/knittingGauge/i18n/es.ts +234 -0
  72. package/src/tool/knittingGauge/i18n/fr.ts +234 -0
  73. package/src/tool/knittingGauge/index.ts +34 -0
  74. package/src/tool/knittingGauge/logic.ts +28 -0
  75. package/src/tool/knittingGauge/seo.astro +40 -0
  76. package/src/tool/knittingGauge/ui.ts +41 -0
  77. package/src/tool/laundryGuide/bibliography.astro +33 -0
  78. package/src/tool/laundryGuide/component.astro +486 -0
  79. package/src/tool/laundryGuide/data-en.ts +166 -0
  80. package/src/tool/laundryGuide/data-es.ts +166 -0
  81. package/src/tool/laundryGuide/data-fr.ts +103 -0
  82. package/src/tool/laundryGuide/i18n/en.ts +275 -0
  83. package/src/tool/laundryGuide/i18n/es.ts +275 -0
  84. package/src/tool/laundryGuide/i18n/fr.ts +291 -0
  85. package/src/tool/laundryGuide/index.ts +29 -0
  86. package/src/tool/laundryGuide/logic.ts +19 -0
  87. package/src/tool/laundryGuide/seo.astro +40 -0
  88. package/src/tool/needleConverter/bibliography.astro +14 -0
  89. package/src/tool/needleConverter/component.astro +518 -0
  90. package/src/tool/needleConverter/i18n/en.ts +217 -0
  91. package/src/tool/needleConverter/i18n/es.ts +217 -0
  92. package/src/tool/needleConverter/i18n/fr.ts +217 -0
  93. package/src/tool/needleConverter/index.ts +34 -0
  94. package/src/tool/needleConverter/logic.ts +31 -0
  95. package/src/tool/needleConverter/seo.astro +15 -0
  96. package/src/tool/needleConverter/ui.ts +17 -0
  97. package/src/tool/sewingPatternScaler/bibliography.astro +14 -0
  98. package/src/tool/sewingPatternScaler/component.astro +550 -0
  99. package/src/tool/sewingPatternScaler/i18n/en.ts +196 -0
  100. package/src/tool/sewingPatternScaler/i18n/es.ts +231 -0
  101. package/src/tool/sewingPatternScaler/i18n/fr.ts +187 -0
  102. package/src/tool/sewingPatternScaler/index.ts +34 -0
  103. package/src/tool/sewingPatternScaler/logic.ts +35 -0
  104. package/src/tool/sewingPatternScaler/seo.astro +49 -0
  105. package/src/tool/sewingPatternScaler/ui.ts +29 -0
  106. package/src/tool/shoeSizeConverter/bibliography.astro +34 -0
  107. package/src/tool/shoeSizeConverter/component.astro +437 -0
  108. package/src/tool/shoeSizeConverter/i18n/en.ts +188 -0
  109. package/src/tool/shoeSizeConverter/i18n/es.ts +188 -0
  110. package/src/tool/shoeSizeConverter/i18n/fr.ts +188 -0
  111. package/src/tool/shoeSizeConverter/index.ts +34 -0
  112. package/src/tool/shoeSizeConverter/logic.ts +8 -0
  113. package/src/tool/shoeSizeConverter/seo.astro +40 -0
  114. package/src/tool/shoeSizeConverter/ui.ts +21 -0
  115. package/src/tool/stainChemistry/bibliography.astro +40 -0
  116. package/src/tool/stainChemistry/component.astro +717 -0
  117. package/src/tool/stainChemistry/i18n/en.ts +303 -0
  118. package/src/tool/stainChemistry/i18n/es.ts +300 -0
  119. package/src/tool/stainChemistry/i18n/fr.ts +310 -0
  120. package/src/tool/stainChemistry/index.ts +34 -0
  121. package/src/tool/stainChemistry/logic.ts +11 -0
  122. package/src/tool/stainChemistry/seo.astro +40 -0
  123. package/src/tool/stainChemistry/ui.ts +51 -0
  124. package/src/tool/yarnCalculator/bibliography.astro +19 -0
  125. package/src/tool/yarnCalculator/component.astro +792 -0
  126. package/src/tool/yarnCalculator/i18n/en.ts +310 -0
  127. package/src/tool/yarnCalculator/i18n/es.ts +310 -0
  128. package/src/tool/yarnCalculator/i18n/fr.ts +310 -0
  129. package/src/tool/yarnCalculator/index.ts +34 -0
  130. package/src/tool/yarnCalculator/logic.ts +84 -0
  131. package/src/tool/yarnCalculator/seo.astro +14 -0
  132. package/src/tool/yarnCalculator/ui.ts +42 -0
  133. package/src/tools.ts +16 -0
  134. package/src/types.ts +72 -0
@@ -0,0 +1,166 @@
1
+ import type { TextileData } from './logic';
2
+
3
+ export const TEXTILE_CARE_DATA_ES: Record<string, TextileData> = {
4
+ cotton: {
5
+ name: "Algodón",
6
+ description: "Fibra vegetal natural, suave y transpirable. El rey de los básicos.",
7
+ family: "natural",
8
+ origin: "Cápsula de la planta de algodón",
9
+ breathability: 9,
10
+ durability: 7,
11
+ warmth: 4,
12
+ washing: "Agua fría o templada (encoge con calor). Permite centrifugado fuerte.",
13
+ drying: "Secadora a temp media o aire libre.",
14
+ ironing: "Plancha alta con vapor mientras está húmedo.",
15
+ donts: ["Dejar húmedo mucho tiempo (moho)", "Lejía excesiva (debilita fibra)"],
16
+ sos: "¿Encogido? Remoja en agua tibia con acondicionador para pelo y estira suavemente.",
17
+ icon: "mdi:tshirt-crew",
18
+ color: "#60A5FA",
19
+ maxTemp: "40-60°C",
20
+ isNoble: false,
21
+ },
22
+ linen: {
23
+ name: "Lino",
24
+ description: "Fibra vegetal muy fuerte, fresca y con arruga característica.",
25
+ family: "natural",
26
+ origin: "Tallo de la planta de lino",
27
+ breathability: 10,
28
+ durability: 9,
29
+ warmth: 2,
30
+ washing: "Ciclo delicado, no llenar mucho el tambor (necesita agua para no romperse).",
31
+ drying: "Aire libre. NUNCA secadora (rompe las fibras).",
32
+ ironing: "Plancha máxima temperatura, siempre con la prenda muy húmeda.",
33
+ donts: ["Centrifugado fuerte", "Doblar siempre por el mismo sitio (se corta)"],
34
+ sos: "¿Brillo por planchado? Pasa un paño con vinagre blanco.",
35
+ icon: "mdi:leaf",
36
+ color: "#A7F3D0",
37
+ maxTemp: "60°C",
38
+ isNoble: true,
39
+ },
40
+ wool: {
41
+ name: "Lana / Merino",
42
+ description: "Fibra animal proteica, aislante térmico excelente y elástica.",
43
+ family: "natural",
44
+ origin: "Vellón de oveja",
45
+ breathability: 8,
46
+ durability: 6,
47
+ warmth: 10,
48
+ washing: "A mano o ciclo lana. Jabón neutro. NUNCA agua caliente (se afieltra).",
49
+ drying: "Horizontal sobre toalla. Nunca colgar (se deforma).",
50
+ ironing: "Vapor vertical o plancha media con paño encima.",
51
+ donts: ["Agua caliente", "Frotar o retorcer", "Lejía (la disuelve)"],
52
+ sos: "¿Afieltrada? Casi imposible, pero remojo con suavizante puede relajar algo.",
53
+ icon: "mdi:sheep",
54
+ color: "#FCD34D",
55
+ maxTemp: "30°C",
56
+ isNoble: true,
57
+ },
58
+ silk: {
59
+ name: "Seda",
60
+ description: "Fibra animal de filamento continuo. Brillo natural y tacto seco.",
61
+ family: "natural",
62
+ origin: "Capullo del gusano de seda",
63
+ breathability: 7,
64
+ durability: 5,
65
+ warmth: 6,
66
+ washing: "A mano en agua fría con champú neutro. No retorcer.",
67
+ drying: "Enrollar en toalla para quitar humedad. Secar a la sombra.",
68
+ ironing: "Plancha baja, del revés y sin vapor directo.",
69
+ donts: ["Sol directo (quema)", "Perfume/Desodorante (mancha)", "Agua (hace cercos)"],
70
+ sos: "¿Mancha de agua? Frota suavemente la seda contra sí misma.",
71
+ icon: "mdi:ticket-percent",
72
+ color: "#F472B6",
73
+ maxTemp: "20°C",
74
+ isNoble: true,
75
+ },
76
+ cashmere: {
77
+ name: "Cashmere",
78
+ description: "Fibra de lujo de cabra de Cachemira. Extremadamente suave y cálida.",
79
+ family: "natural",
80
+ origin: "Capa inferior del pelo de la cabra Hircus",
81
+ breathability: 9,
82
+ durability: 5,
83
+ warmth: 10,
84
+ washing: "ESTRICTAMENTE a mano con champú de bebé. Agua fría. Nunca frotar.",
85
+ drying: "Horizontal sobre toalla, dándole forma. Jamás colgar.",
86
+ ironing: "Vapor vertical sin tocar la prenda o plancha tibia con paño.",
87
+ donts: ["Lavadora (incluso programa lana)", "Suavizante", "Roces continuos (bolitas)"],
88
+ sos: "¿Pilling (bolitas)? Usa un peine específico o quítalas a mano.",
89
+ icon: "mdi:crown",
90
+ color: "#F59E0B",
91
+ maxTemp: "20°C",
92
+ isNoble: true,
93
+ },
94
+ polyester: {
95
+ name: "Poliéster",
96
+ description: "Fibra sintética de petróleo. Resistente, no arruga, no respira.",
97
+ family: "synthetic",
98
+ origin: "Polímeros derivados del petróleo",
99
+ breathability: 2,
100
+ durability: 10,
101
+ warmth: 5,
102
+ washing: "Agua tibia/fría. Admite todo, pero atrapa olores y grasas.",
103
+ drying: "Secadora baja o aire. Seca muy rápido.",
104
+ ironing: "Plancha baja/media. Cuidado, se funde.",
105
+ donts: ["Calor excesivo", "Suavizante (crea capa cerosa que atrapa más olor)"],
106
+ sos: "¿Olor persistente? Remojo en agua con vinagre antes de lavar.",
107
+ icon: "mdi:oil",
108
+ color: "#94A3B8",
109
+ maxTemp: "40°C",
110
+ isNoble: false,
111
+ },
112
+ viscose: {
113
+ name: "Viscosa / Rayón",
114
+ description: "Semisintética de celulosa regenerada. Tacto seda, muy absorbente.",
115
+ family: "artificial",
116
+ origin: "Pulpa de madera tratada químicamente",
117
+ breathability: 8,
118
+ durability: 4,
119
+ warmth: 3,
120
+ washing: "Delicado en frío. Se vuelve muy débil mojada.",
121
+ drying: "Horizontal o percha acolchada. No secadora.",
122
+ ironing: "Media, del revés. Sin vapor directo si es posible.",
123
+ donts: ["Retorcer mojada (se rompe)", "Remojos largos"],
124
+ sos: "¿Encogida y dura? Plancha con mucho vapor para relajar la fibra.",
125
+ icon: "mdi:forest",
126
+ color: "#C084FC",
127
+ maxTemp: "30°C",
128
+ isNoble: false,
129
+ },
130
+ nylon: {
131
+ name: "Nailon (Poliamida)",
132
+ description: "Sintética muy resistente a tracción y abrasión.",
133
+ family: "synthetic",
134
+ origin: "Derivado del petróleo (poliamida)",
135
+ breathability: 3,
136
+ durability: 10,
137
+ warmth: 4,
138
+ washing: "Ciclo normal. Cuidado con mezclar colores (los absorbe).",
139
+ drying: "Aire libre. Secadora baja.",
140
+ ironing: "Muy baja. Se funde rapidísimo.",
141
+ donts: ["Lejía (amarillea)", "Secar al sol directo"],
142
+ sos: "¿Grisáceo? Lavar con blanqueador oxigenado.",
143
+ icon: "mdi:parachute",
144
+ color: "#2DD4BF",
145
+ maxTemp: "40°C",
146
+ isNoble: false,
147
+ },
148
+ acrylic: {
149
+ name: "Acrílico",
150
+ description: "Sintético imitación lana. Suave, caliente, hace bolas.",
151
+ family: "synthetic",
152
+ origin: "Poliacupacrilonitrilo",
153
+ breathability: 4,
154
+ durability: 6,
155
+ warmth: 8,
156
+ washing: "Agua templada. Mucho suavizante para estática.",
157
+ drying: "Aire. El calor deforma la prenda permanentemente.",
158
+ ironing: "No planchar",
159
+ donts: ["Suavizante (rompe fibras)", "Escurrir fuerte", "Calor"],
160
+ sos: "Si ha perdido elasticidad, es irreversible (las fibras se han roto).",
161
+ icon: "mdi:resize",
162
+ color: "#450A0A",
163
+ maxTemp: "30°C",
164
+ isNoble: false,
165
+ },
166
+ };
@@ -0,0 +1,103 @@
1
+ import type { TextileData } from './logic';
2
+
3
+ export const TEXTILE_CARE_DATA_FR: Record<string, TextileData> = {
4
+ cotton: {
5
+ name: 'Coton',
6
+ icon: 'mdi:tshirt-crew',
7
+ color: '#60A5FA',
8
+ maxTemp: '40-60°C',
9
+ ironing: 'Élevé',
10
+ drying: 'Sèche-linge OK',
11
+ donts: ['Eau de Javel (sauf blanc)', 'Séchage excessif'],
12
+ sos: 'Tache de graisse ? Appliquez du bicarbonate de soude avant de laver.',
13
+ description: 'Fibre naturelle résistante et respirante. Le roi du confort quotidien.',
14
+ },
15
+ linen: {
16
+ name: 'Lin',
17
+ icon: 'mdi:leaf',
18
+ color: '#A7F3D0',
19
+ maxTemp: '30-40°C',
20
+ ironing: 'Très Élevé (Humide)',
21
+ drying: 'À l\'ombre',
22
+ donts: ['Essorage fort', 'Plier toujours au même endroit'],
23
+ sos: 'Repassez pendant que le tissu est encore légèrement humide.',
24
+ description: 'Fibre végétale très fraîche. Se froisse avec élégance.',
25
+ },
26
+ wool: {
27
+ name: 'Laine / Mérino',
28
+ icon: 'mdi:sheep',
29
+ color: '#FCD34D',
30
+ maxTemp: 'Froid / Laine',
31
+ ironing: 'Vapeur uniquement',
32
+ drying: 'À plat',
33
+ donts: ['Eau chaude', 'Agitation forte', 'Sèche-linge'],
34
+ sos: 'Besoin d\'un rafraîchissement ? Suspendez-la dans la salle de bain pendant que vous vous douchez.',
35
+ description: 'Fibre animale thermorégulatrice. N\'a pas besoin de lavages fréquents.',
36
+ },
37
+ silk: {
38
+ name: 'Soie',
39
+ icon: 'mdi:ticket-percent',
40
+ color: '#F472B6',
41
+ maxTemp: 'Main / Froid',
42
+ ironing: 'Bas (Envers)',
43
+ drying: 'À plat / Ombre',
44
+ donts: ['Lumière directe du soleil', 'Parfum/Déodorant', 'Eau (fait des cernes)'],
45
+ sos: 'Tache d\'eau ? Frottez doucement la soie contre elle-même.',
46
+ description: 'Fibre animale en filament continu. Brillance naturelle et toucher sec.',
47
+ },
48
+ cashmere: {
49
+ name: 'Cachemire',
50
+ icon: 'mdi:crown',
51
+ color: '#F59E0B',
52
+ maxTemp: 'Main / Froid',
53
+ ironing: 'Vapeur / Bas',
54
+ drying: 'À plat sur serviette',
55
+ donts: ['Suspendre (se déforme)', 'Frotter fort'],
56
+ sos: 'Enroulez dans une serviette pour enlever l\'humidité. Séchez à l\'ombre.',
57
+ description: 'Laine ultra-fine et luxueuse. Très délicate mais extrêmement chaude.',
58
+ },
59
+ polyester: {
60
+ name: 'Polyester',
61
+ icon: 'mdi:oil',
62
+ color: '#94A3B8',
63
+ maxTemp: '30-40°C',
64
+ ironing: 'Bas',
65
+ drying: 'Rapide / Sèche-linge bas',
66
+ donts: ['Température élevée (fond)', 'Repassage direct sans vapeur'],
67
+ sos: 'Utilisez un adoucissant pour réduire l\'électricité statique.',
68
+ description: 'Fibre synthétique dérivée du pétrole. Durable et ne se froisse pas.',
69
+ },
70
+ viscose: {
71
+ name: 'Viscosa / Rayonne',
72
+ icon: 'mdi:forest',
73
+ color: '#C084FC',
74
+ maxTemp: '30°C / Délicat',
75
+ ironing: 'Moyen',
76
+ drying: 'À plat',
77
+ donts: ['Essorage fort', 'Tordre quand c\'est mouillé'],
78
+ sos: 'Elle rétrécit souvent au lavage mais retrouve sa forme au repassage.',
79
+ description: 'Fibre artificielle d\'origine cellulosique. Douce et avec beaucoup de drapé.',
80
+ },
81
+ nylon: {
82
+ name: 'Nylon (Polyamide)',
83
+ icon: 'mdi:parachute',
84
+ color: '#2DD4BF',
85
+ maxTemp: '30°C',
86
+ ironing: 'Très Bas',
87
+ drying: 'Air libre',
88
+ donts: ['Sèche-linge chaud', 'Eau de Javel'],
89
+ sos: 'Lavez dans un sac en filet pour éviter les accrocs.',
90
+ description: 'Fibre synthétique très résistante et élastique. Séchage ultra-rapide.',
91
+ },
92
+ acrylic: {
93
+ name: 'Acrylique',
94
+ icon: 'mdi:resize',
95
+ color: '#450A0A',
96
+ maxTemp: '30°C',
97
+ ironing: 'Froid / Non',
98
+ drying: 'À plat',
99
+ donts: ['Chaleur directe', 'Vapeur excessive'],
100
+ sos: 'Lavez à l\'envers pour éviter la formation de boulettes.',
101
+ description: 'Fibre synthétique imitant la laine. Chaude mais peu respirante.',
102
+ },
103
+ };
@@ -0,0 +1,275 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+
4
+ const slug = 'laundry-guide';
5
+ const title = 'Textile Care Guide: How to Wash Every Fabric Type';
6
+ const description = 'Scientific guide to washing and caring for cotton, wool, silk, linen, and synthetics. Prevent shrinkage, fading, and damage with proper care instructions.';
7
+
8
+ const faqData = [
9
+ {
10
+ question: 'How do I prevent colors from fading?',
11
+ answer: 'Wash in cold water (maximum 30°C), turn garments inside out, use detergent for dark colors, and avoid direct sunlight when drying.',
12
+ },
13
+ {
14
+ question: 'Can I wash wool in a washing machine?',
15
+ answer: 'Yes, but only with a wool cycle (cold water, gentle agitation). Use wool-specific detergent and never use a regular cycle.',
16
+ },
17
+ {
18
+ question: 'Why is my silk getting water stains?',
19
+ answer: 'Silk reacts to water minerals. Use distilled water for the final rinse or lightly rub the stain with pure silk fabric.',
20
+ },
21
+ ];
22
+
23
+ const howToData = [
24
+ { name: 'Check the label', text: 'Always read the care instructions on the garment label before washing.' },
25
+ { name: 'Sort by fiber type', text: 'Wash natural fibers separately from synthetics when possible.' },
26
+ { name: 'Choose water temperature', text: 'Use cold water for delicate fabrics and hot water only for sturdy materials.' },
27
+ ];
28
+
29
+ const faqSchema: WithContext<FAQPage> = {
30
+ '@context': 'https://schema.org',
31
+ '@type': 'FAQPage',
32
+ mainEntity: faqData.map((item) => ({
33
+ '@type': 'Question',
34
+ name: item.question,
35
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
36
+ })),
37
+ };
38
+
39
+ const howToSchema: WithContext<HowTo> = {
40
+ '@context': 'https://schema.org',
41
+ '@type': 'HowTo',
42
+ name: title,
43
+ description: description,
44
+ step: howToData.map((step) => ({
45
+ '@type': 'HowToStep',
46
+ name: step.name,
47
+ text: step.text,
48
+ })),
49
+ };
50
+
51
+ const appSchema: WithContext<SoftwareApplication> = {
52
+ '@context': 'https://schema.org',
53
+ '@type': 'SoftwareApplication',
54
+ name: title,
55
+ description: description,
56
+ applicationCategory: 'UtilityApplication',
57
+ operatingSystem: 'All',
58
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
59
+ inLanguage: 'en',
60
+ };
61
+
62
+ export const content: ToolLocaleContent = {
63
+ slug,
64
+ title,
65
+ description,
66
+ ui: {
67
+ selectMaterialTitle: 'Select Fabric',
68
+ selectMaterialPrompt: 'Select a fabric to see care instructions',
69
+ careInstructions: 'Premium care instructions',
70
+ maxTemp: 'Max Temperature',
71
+ ironing: 'Ironing',
72
+ drying: 'Drying',
73
+ avoidLabel: 'Things to AVOID',
74
+ sosLabel: 'Maintenance Tip',
75
+ textileData: {
76
+ cotton: {
77
+ name: "Cotton",
78
+ description: "Natural plant fiber, soft and breathable. The king of basics.",
79
+ family: "natural",
80
+ origin: "Cotton plant capsule",
81
+ breathability: 9,
82
+ durability: 7,
83
+ warmth: 4,
84
+ washing: "Cold or lukewarm water (shrinks with heat). Allows strong spinning.",
85
+ drying: "Dryer on medium heat or air dry.",
86
+ ironing: "High heat with steam while still damp.",
87
+ donts: ["Leave wet for long (mold risk)", "Excess bleach (weakens fibers)"],
88
+ sos: "Shrunk? Soak in lukewarm water with hair conditioner and gently stretch.",
89
+ icon: "mdi:tshirt-crew",
90
+ color: "#60A5FA",
91
+ maxTemp: "40-60°C",
92
+ isNoble: false,
93
+ },
94
+ linen: {
95
+ name: "Linen",
96
+ description: "Very strong plant fiber, fresh and with characteristic wrinkle.",
97
+ family: "natural",
98
+ origin: "Linen plant stem",
99
+ breathability: 10,
100
+ durability: 9,
101
+ warmth: 2,
102
+ washing: "Delicate cycle, don't overfill drum (needs water to avoid breaking).",
103
+ drying: "Air dry only. NEVER use dryer (breaks fibers).",
104
+ ironing: "Maximum temperature, always with very damp garment.",
105
+ donts: ["Strong spinning", "Always folding same way (fibers break)"],
106
+ sos: "Shine from ironing? Wipe with cloth dampened in white vinegar.",
107
+ icon: "mdi:leaf",
108
+ color: "#A7F3D0",
109
+ maxTemp: "60°C",
110
+ isNoble: true,
111
+ },
112
+ wool: {
113
+ name: "Wool / Merino",
114
+ description: "Protein fiber, excellent thermal insulator and elastic.",
115
+ family: "natural",
116
+ origin: "Sheep fleece",
117
+ breathability: 8,
118
+ durability: 6,
119
+ warmth: 10,
120
+ washing: "Hand wash or wool cycle. Neutral soap. NEVER hot water (felts).",
121
+ drying: "Flat on towel. Never hang (deforms).",
122
+ ironing: "Vertical steam or medium heat with cloth on top.",
123
+ donts: ["Hot water", "Rubbing or wringing", "Bleach (dissolves)"],
124
+ sos: "Felted? Almost impossible, but soaking with conditioner may help slightly.",
125
+ icon: "mdi:sheep",
126
+ color: "#FCD34D",
127
+ maxTemp: "30°C",
128
+ isNoble: true,
129
+ },
130
+ silk: {
131
+ name: "Silk",
132
+ description: "Continuous filament animal fiber. Natural sheen and dry feel.",
133
+ family: "natural",
134
+ origin: "Silkworm cocoon",
135
+ breathability: 7,
136
+ durability: 5,
137
+ warmth: 6,
138
+ washing: "Hand wash in cold water with neutral shampoo. Don't wring.",
139
+ drying: "Roll in towel to remove moisture. Air dry in shade.",
140
+ ironing: "Low heat, inside out, no direct steam.",
141
+ donts: ["Direct sunlight (burns)", "Perfume/Deodorant (stains)", "Water (water marks)"],
142
+ sos: "Water stain? Gently rub silk against itself.",
143
+ icon: "mdi:ticket-percent",
144
+ color: "#F472B6",
145
+ maxTemp: "20°C",
146
+ isNoble: true,
147
+ },
148
+ cashmere: {
149
+ name: "Cashmere",
150
+ description: "Luxury fiber from Cashmere goat. Extremely soft and warm.",
151
+ family: "natural",
152
+ origin: "Undercoat of Hircus goat",
153
+ breathability: 9,
154
+ durability: 5,
155
+ warmth: 10,
156
+ washing: "STRICTLY hand wash with baby shampoo. Cold water. Never rub.",
157
+ drying: "Flat on towel, shaping as it dries. Never hang.",
158
+ ironing: "Vertical steam without touching or mild heat with cloth.",
159
+ donts: ["Washing machine (even wool cycle)", "Fabric softener", "Continuous friction (pilling)"],
160
+ sos: "Pilling? Use specialized comb or remove by hand.",
161
+ icon: "mdi:crown",
162
+ color: "#F59E0B",
163
+ maxTemp: "20°C",
164
+ isNoble: true,
165
+ },
166
+ polyester: {
167
+ name: "Polyester",
168
+ description: "Synthetic petroleum fiber. Resistant, wrinkle-free, doesn't breathe.",
169
+ family: "synthetic",
170
+ origin: "Petroleum-derived polymers",
171
+ breathability: 2,
172
+ durability: 10,
173
+ warmth: 5,
174
+ washing: "Warm/cold water. Tolerates everything, but traps odors and oils.",
175
+ drying: "Low dryer or air dry. Dries very quickly.",
176
+ ironing: "Low/medium heat. Be careful, it melts.",
177
+ donts: ["Excess heat", "Fabric softener (creates waxy film that traps odor)"],
178
+ sos: "Persistent odor? Soak in water with vinegar before washing.",
179
+ icon: "mdi:oil",
180
+ color: "#94A3B8",
181
+ maxTemp: "40°C",
182
+ isNoble: false,
183
+ },
184
+ viscose: {
185
+ name: "Viscose / Rayon",
186
+ description: "Semi-synthetic regenerated cellulose. Silky feel, very absorbent.",
187
+ family: "artificial",
188
+ origin: "Chemically treated wood pulp",
189
+ breathability: 8,
190
+ durability: 4,
191
+ warmth: 3,
192
+ washing: "Delicate in cold. Becomes very weak when wet.",
193
+ drying: "Flat or padded hanger. No dryer.",
194
+ ironing: "Medium, inside out. No direct steam if possible.",
195
+ donts: ["Wring when wet (breaks)", "Long soaks"],
196
+ sos: "Shrunken and stiff? Iron with lots of steam to relax fibers.",
197
+ icon: "mdi:forest",
198
+ color: "#C084FC",
199
+ maxTemp: "30°C",
200
+ isNoble: false,
201
+ },
202
+ nylon: {
203
+ name: "Nylon (Polyamide)",
204
+ description: "Highly resistant to tension and abrasion.",
205
+ family: "synthetic",
206
+ origin: "Petroleum-derived (polyamide)",
207
+ breathability: 3,
208
+ durability: 10,
209
+ warmth: 4,
210
+ washing: "Normal cycle. Be careful mixing colors (absorbs dyes).",
211
+ drying: "Air dry. Low dryer.",
212
+ ironing: "Very low. Melts quickly.",
213
+ donts: ["Bleach (yellows)", "Direct sunlight (fades)"],
214
+ sos: "Grayish? Wash with oxygen-based whitener.",
215
+ icon: "mdi:parachute",
216
+ color: "#2DD4BF",
217
+ maxTemp: "40°C",
218
+ isNoble: false,
219
+ },
220
+ acrylic: {
221
+ name: "Acrylic",
222
+ description: "Synthetic wool imitation. Soft, warm, pills easily.",
223
+ family: "synthetic",
224
+ origin: "Polyacrylonitrile",
225
+ breathability: 4,
226
+ durability: 6,
227
+ warmth: 8,
228
+ washing: "Lukewarm water. Use fabric softener to reduce static.",
229
+ drying: "Air dry. Heat permanently deforms garment.",
230
+ ironing: "Don't iron",
231
+ donts: ["Fabric softener (breaks fibers)", "Strong wringing", "Heat"],
232
+ sos: "Lost elasticity? It's irreversible (fibers are broken).",
233
+ icon: "mdi:resize",
234
+ color: "#450A0A",
235
+ maxTemp: "30°C",
236
+ isNoble: false,
237
+ },
238
+ },
239
+ },
240
+ seo: [
241
+ { type: 'title', text: 'Textile Care Mastery: A Scientific Guide to Extending the Life of Your Garments', level: 2 },
242
+ { type: 'paragraph', html: 'How many garments have you ruined without knowing it? An accidental shrink in wool, color fading in cotton, a stain that never comes out of silk. Most people wash their clothes without understanding that each fiber has specific needs.' },
243
+ { type: 'paragraph', html: 'Our <strong>Laundry Guide</strong> provides scientific instructions based on the actual composition of your garment. It\'s not generic; it\'s specific. It\'s not advice; it\'s science.' },
244
+ { type: 'title', text: 'Why Traditional Methods Fail', level: 2 },
245
+ { type: 'paragraph', html: 'Your grandmother probably washed everything in hot water with strong soap. It worked for the thick cotton sheets of the 1950s, but the textile world has changed. Modern fibers—from <strong>Lyocell</strong> to <strong>Elastane</strong>—require completely different protocols.' },
246
+ { type: 'list', items: ['<strong>Cotton</strong> tolerates hot water but needs gentle cycles to avoid shrinkage.', '<strong>Silk</strong> is fragile above 30°C and requires distilled water.', '<strong>Wool</strong> can feel like a stone if a standard washing machine processes it.', '<strong>Synthetics</strong> don\'t need much care, but they generate static and pill easily.'] },
247
+ { type: 'title', text: 'Protocols by Fiber Type', level: 2 },
248
+ { type: 'title', text: 'Cotton: The Resilient One', level: 3 },
249
+ { type: 'paragraph', html: 'Cotton is forgiving. It can handle water at 40-60°C without problems. The real enemy is chlorine (which weakens the fiber) and high-temperature dryer heat (which causes permanent shrinkage). The rule: always wash inside-out to preserve color.' },
250
+ { type: 'title', text: 'Silk: The Diva', level: 3 },
251
+ { type: 'paragraph', html: 'Silk requires cold water (maximum 30°C), gentle detergent, and rinse with distilled water if possible. The problem: minerals in tap water leave deposits that make silk look dull and rough. The solution is simple but costly: use distilled water on the final rinse.' },
252
+ { type: 'title', text: 'Wool: The Delicate One', level: 3 },
253
+ { type: 'paragraph', html: 'Wool is protein, like your hair. Wash at maximum 30°C with wool-specific detergent. Never, ever use a standard cycle: the agitation will shrink it irreversibly. The golden rule: always dry flat, never hanging (it stretches).' },
254
+ { type: 'title', text: 'Synthetics: The Easy Ones', level: 3 },
255
+ { type: 'paragraph', html: 'Polyester, acrylic, and nylon are resilient. They can handle water at 40°C without problems. The only enemy is static, which causes garments to become electrically charged. The trick: add fabric softener or use a dryer sheet in the dryer.' },
256
+ { type: 'title', text: 'Uncomfortable Truths About Drying', level: 2 },
257
+ { type: 'paragraph', html: '90% of garment damage happens during drying, not washing. Here\'s why:' },
258
+ { type: 'card', title: 'Lint in the Filter', icon: 'mdi:alert', html: 'That lint you see is <strong>fibers detaching</strong> from your clothes. Every dryer cycle destroys a bit more. Synthetics are worse: they pill within weeks.' },
259
+ { type: 'card', title: 'Silent Shrinkage', icon: 'mdi:warning', html: 'Dryer heat shrinks most natural fibers permanently. A garment that shrinks 5% in one drying will never return to its original size.' },
260
+ { type: 'tip', title: 'Best Drying Practice', html: 'Air dry whenever possible. If you must use a dryer, use low heat and remove clothes while still slightly damp.' },
261
+ { type: 'title', text: 'Stains: The Survival Guide', level: 2 },
262
+ { type: 'paragraph', html: 'Each fiber reacts differently to chemicals. A wine stain on cotton is treated with cold water; on silk, you need distilled water and pure silk cloth. Here are the basic protocols:' },
263
+ { type: 'list', items: ['<strong>Grease:</strong> Use dry soap before washing. Never hot water (sets the stain).', '<strong>Ink/Pen:</strong> Isopropyl alcohol for synthetics; cold water for naturals.', '<strong>Blood:</strong> Cold water ALWAYS. Heat sets it permanently.', '<strong>Wine/Drinks:</strong> Cold water immediately, followed by salt to absorb.'] },
264
+ { type: 'paragraph', html: '"Buy less, choose better, and make it last." A well-cared-for garment can last decades. A neglected one, months.' },
265
+ ],
266
+ faqTitle: 'Frequently Asked Questions',
267
+ faq: faqData,
268
+ bibliographyTitle: 'References',
269
+ bibliography: [
270
+ { name: 'ISO 3758 - Textile Care Symbols', url: 'https://www.iso.org/standard/60465.html' },
271
+ { name: 'FTC - Textile Care Labels', url: 'https://www.ftc.gov/' },
272
+ ],
273
+ howTo: howToData,
274
+ schemas: [faqSchema, howToSchema, appSchema],
275
+ };