@jjlmoya/utils-developer 1.13.0 → 1.15.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 (184) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +1 -1
  3. package/src/category/i18n/ru.ts +1 -1
  4. package/src/layouts/PreviewLayout.astro +1 -0
  5. package/src/pages/[locale]/[slug].astro +29 -12
  6. package/src/tests/diacritics_density.test.ts +118 -0
  7. package/src/tests/inverted_punctuation.test.ts +113 -0
  8. package/src/tests/no_en_dash.test.ts +73 -0
  9. package/src/tests/script_density.test.ts +94 -0
  10. package/src/tests/shared-test-helpers.ts +56 -0
  11. package/src/tests/tool_exports.test.ts +34 -0
  12. package/src/tool/aspectRatio/aspect-ratio-calculator.css +1 -1
  13. package/src/tool/aspectRatio/i18n/de.ts +1 -1
  14. package/src/tool/aspectRatio/i18n/fr.ts +1 -1
  15. package/src/tool/aspectRatio/i18n/pl.ts +2 -2
  16. package/src/tool/aspectRatio/i18n/ru.ts +4 -4
  17. package/src/tool/aspectRatio/i18n/zh.ts +1 -1
  18. package/src/tool/aspectRatio/seo.astro +2 -1
  19. package/src/tool/calculadoraTiempoDatos/data-time-calculator-web-speed-impact.css +26 -26
  20. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +1 -1
  21. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +1 -1
  22. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +5 -5
  23. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +5 -5
  24. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +1 -1
  25. package/src/tool/calculadoraTiempoDatos/seo.astro +2 -1
  26. package/src/tool/colorConverter/color-converter-rgb-hex-hsl.css +9 -9
  27. package/src/tool/colorConverter/i18n/de.ts +1 -1
  28. package/src/tool/colorConverter/i18n/ru.ts +2 -2
  29. package/src/tool/colorConverter/seo.astro +2 -1
  30. package/src/tool/conversorExcelCsvHtml/excel-csv-html-table-converter.css +24 -24
  31. package/src/tool/conversorExcelCsvHtml/i18n/es.ts +1 -1
  32. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +1 -1
  33. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +2 -2
  34. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +2 -2
  35. package/src/tool/conversorExcelCsvHtml/seo.astro +2 -1
  36. package/src/tool/cronGenerator/cron.css +5 -5
  37. package/src/tool/cronGenerator/i18n/de.ts +4 -4
  38. package/src/tool/cronGenerator/i18n/en.ts +1 -1
  39. package/src/tool/cronGenerator/i18n/es.ts +2 -2
  40. package/src/tool/cronGenerator/i18n/fr.ts +5 -5
  41. package/src/tool/cronGenerator/i18n/id.ts +1 -1
  42. package/src/tool/cronGenerator/i18n/nl.ts +1 -1
  43. package/src/tool/cronGenerator/i18n/pl.ts +8 -8
  44. package/src/tool/cronGenerator/i18n/pt.ts +1 -1
  45. package/src/tool/cronGenerator/i18n/ru.ts +9 -9
  46. package/src/tool/cronGenerator/i18n/sv.ts +1 -1
  47. package/src/tool/cronGenerator/i18n/zh.ts +3 -3
  48. package/src/tool/cronGenerator/seo.astro +2 -1
  49. package/src/tool/cssSpecificityCalculator/css-specificity-calculator.css +1 -1
  50. package/src/tool/cssSpecificityCalculator/i18n/de.ts +1 -1
  51. package/src/tool/cssSpecificityCalculator/i18n/fr.ts +3 -3
  52. package/src/tool/cssSpecificityCalculator/i18n/pl.ts +2 -2
  53. package/src/tool/cssSpecificityCalculator/i18n/ru.ts +2 -2
  54. package/src/tool/cssSpecificityCalculator/seo.astro +2 -1
  55. package/src/tool/cssToInlineConverter/css-to-inline-converter.css +1 -1
  56. package/src/tool/cssToInlineConverter/i18n/de.ts +6 -6
  57. package/src/tool/cssToInlineConverter/i18n/es.ts +1 -1
  58. package/src/tool/cssToInlineConverter/i18n/fr.ts +3 -3
  59. package/src/tool/cssToInlineConverter/seo.astro +2 -1
  60. package/src/tool/duplicateCssRemover/duplicate-css-remover.css +2 -2
  61. package/src/tool/duplicateCssRemover/i18n/de.ts +7 -7
  62. package/src/tool/duplicateCssRemover/i18n/fr.ts +1 -1
  63. package/src/tool/duplicateCssRemover/i18n/id.ts +1 -1
  64. package/src/tool/duplicateCssRemover/i18n/nl.ts +1 -1
  65. package/src/tool/duplicateCssRemover/i18n/pl.ts +1 -1
  66. package/src/tool/duplicateCssRemover/i18n/pt.ts +1 -1
  67. package/src/tool/duplicateCssRemover/i18n/ru.ts +3 -3
  68. package/src/tool/duplicateCssRemover/i18n/sv.ts +1 -1
  69. package/src/tool/duplicateCssRemover/seo.astro +2 -1
  70. package/src/tool/generadorSecurityTxt/i18n/de.ts +5 -5
  71. package/src/tool/generadorSecurityTxt/i18n/ru.ts +2 -2
  72. package/src/tool/generadorSecurityTxt/security-txt-generator-rfc-9116.css +9 -9
  73. package/src/tool/generadorSecurityTxt/seo.astro +2 -1
  74. package/src/tool/hashGenerator/hash-generator.css +10 -10
  75. package/src/tool/hashGenerator/i18n/ru.ts +5 -5
  76. package/src/tool/hashGenerator/i18n/zh.ts +2 -2
  77. package/src/tool/hashGenerator/seo.astro +2 -1
  78. package/src/tool/inspectorCertificadosSsl/i18n/de.ts +6 -6
  79. package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +5 -5
  80. package/src/tool/inspectorCertificadosSsl/seo.astro +2 -1
  81. package/src/tool/inspectorCertificadosSsl/ssl-tls-certificate-inspector.css +9 -9
  82. package/src/tool/jsonFormatter/i18n/de.ts +4 -4
  83. package/src/tool/jsonFormatter/i18n/en.ts +4 -4
  84. package/src/tool/jsonFormatter/i18n/es.ts +4 -4
  85. package/src/tool/jsonFormatter/i18n/fr.ts +4 -4
  86. package/src/tool/jsonFormatter/i18n/id.ts +4 -4
  87. package/src/tool/jsonFormatter/i18n/it.ts +4 -4
  88. package/src/tool/jsonFormatter/i18n/ja.ts +4 -4
  89. package/src/tool/jsonFormatter/i18n/ko.ts +4 -4
  90. package/src/tool/jsonFormatter/i18n/nl.ts +4 -4
  91. package/src/tool/jsonFormatter/i18n/pl.ts +4 -4
  92. package/src/tool/jsonFormatter/i18n/pt.ts +4 -4
  93. package/src/tool/jsonFormatter/i18n/ru.ts +5 -5
  94. package/src/tool/jsonFormatter/i18n/sv.ts +4 -4
  95. package/src/tool/jsonFormatter/i18n/tr.ts +4 -4
  96. package/src/tool/jsonFormatter/i18n/zh.ts +5 -5
  97. package/src/tool/jsonFormatter/json-formatter.css +33 -33
  98. package/src/tool/jsonFormatter/seo.astro +2 -1
  99. package/src/tool/keycode/i18n/de.ts +7 -7
  100. package/src/tool/keycode/i18n/en.ts +5 -5
  101. package/src/tool/keycode/i18n/es.ts +5 -5
  102. package/src/tool/keycode/i18n/fr.ts +7 -7
  103. package/src/tool/keycode/i18n/id.ts +5 -5
  104. package/src/tool/keycode/i18n/it.ts +5 -5
  105. package/src/tool/keycode/i18n/ja.ts +5 -5
  106. package/src/tool/keycode/i18n/ko.ts +5 -5
  107. package/src/tool/keycode/i18n/nl.ts +5 -5
  108. package/src/tool/keycode/i18n/pl.ts +7 -7
  109. package/src/tool/keycode/i18n/pt.ts +5 -5
  110. package/src/tool/keycode/i18n/ru.ts +6 -6
  111. package/src/tool/keycode/i18n/sv.ts +5 -5
  112. package/src/tool/keycode/i18n/tr.ts +5 -5
  113. package/src/tool/keycode/i18n/zh.ts +5 -5
  114. package/src/tool/keycode/keycode.css +1 -1
  115. package/src/tool/keycode/seo.astro +2 -1
  116. package/src/tool/llmCostCalculator/i18n/de.ts +4 -4
  117. package/src/tool/llmCostCalculator/i18n/en.ts +3 -3
  118. package/src/tool/llmCostCalculator/i18n/fr.ts +3 -3
  119. package/src/tool/llmCostCalculator/i18n/id.ts +3 -3
  120. package/src/tool/llmCostCalculator/i18n/pt.ts +3 -3
  121. package/src/tool/llmCostCalculator/i18n/ru.ts +3 -3
  122. package/src/tool/llmCostCalculator/i18n/sv.ts +3 -3
  123. package/src/tool/llmCostCalculator/i18n/tr.ts +3 -3
  124. package/src/tool/llmCostCalculator/i18n/zh.ts +3 -3
  125. package/src/tool/llmCostCalculator/llm-cost-calculator.css +1 -1
  126. package/src/tool/llmCostCalculator/seo.astro +2 -1
  127. package/src/tool/mobileMockupGenerator/i18n/es.ts +1 -1
  128. package/src/tool/mobileMockupGenerator/mobile-mockup-generator.css +68 -68
  129. package/src/tool/mobileMockupGenerator/seo.astro +2 -1
  130. package/src/tool/musicalTypography/i18n/de.ts +1 -1
  131. package/src/tool/musicalTypography/i18n/fr.ts +1 -1
  132. package/src/tool/musicalTypography/i18n/id.ts +1 -1
  133. package/src/tool/musicalTypography/i18n/it.ts +1 -1
  134. package/src/tool/musicalTypography/i18n/ko.ts +1 -1
  135. package/src/tool/musicalTypography/i18n/ru.ts +3 -3
  136. package/src/tool/musicalTypography/musical-typography.css +8 -8
  137. package/src/tool/musicalTypography/seo.astro +2 -1
  138. package/src/tool/placeholderGenerator/i18n/de.ts +4 -4
  139. package/src/tool/placeholderGenerator/i18n/ru.ts +1 -1
  140. package/src/tool/placeholderGenerator/placeholder-image-generator.css +2 -2
  141. package/src/tool/placeholderGenerator/seo.astro +2 -1
  142. package/src/tool/promptLibrary/i18n/de.ts +1 -1
  143. package/src/tool/promptLibrary/prompt-library.css +30 -30
  144. package/src/tool/promptLibrary/seo.astro +2 -1
  145. package/src/tool/readabilityCalculator/i18n/de.ts +2 -2
  146. package/src/tool/readabilityCalculator/seo.astro +2 -1
  147. package/src/tool/readabilityCalculator/visual-readability-calculator-wcag-apca.css +98 -14
  148. package/src/tool/svgSanitizer/i18n/de.ts +2 -2
  149. package/src/tool/svgSanitizer/i18n/id.ts +1 -1
  150. package/src/tool/svgSanitizer/i18n/pl.ts +1 -1
  151. package/src/tool/svgSanitizer/i18n/ru.ts +7 -7
  152. package/src/tool/svgSanitizer/i18n/sv.ts +3 -3
  153. package/src/tool/svgSanitizer/i18n/tr.ts +3 -3
  154. package/src/tool/svgSanitizer/i18n/zh.ts +3 -3
  155. package/src/tool/svgSanitizer/seo.astro +2 -1
  156. package/src/tool/svgSanitizer/svg-sanitizer.css +7 -7
  157. package/src/tool/svgToCss/i18n/de.ts +2 -2
  158. package/src/tool/svgToCss/i18n/es.ts +1 -1
  159. package/src/tool/svgToCss/i18n/fr.ts +1 -1
  160. package/src/tool/svgToCss/i18n/pl.ts +1 -1
  161. package/src/tool/svgToCss/i18n/ru.ts +2 -2
  162. package/src/tool/svgToCss/i18n/zh.ts +2 -2
  163. package/src/tool/svgToCss/seo.astro +2 -1
  164. package/src/tool/svgToCss/svg-to-css-converter.css +2 -2
  165. package/src/tool/urlCleaner/component.astro +23 -5
  166. package/src/tool/urlCleaner/i18n/de.ts +3 -3
  167. package/src/tool/urlCleaner/i18n/es.ts +1 -1
  168. package/src/tool/urlCleaner/i18n/id.ts +1 -1
  169. package/src/tool/urlCleaner/i18n/nl.ts +1 -1
  170. package/src/tool/urlCleaner/seo.astro +2 -1
  171. package/src/tool/urlCleaner/url-tracking-cleaner.css +104 -14
  172. package/src/tool/urlEncoderDecoder/i18n/de.ts +5 -5
  173. package/src/tool/urlEncoderDecoder/i18n/fr.ts +2 -2
  174. package/src/tool/urlEncoderDecoder/i18n/pl.ts +5 -5
  175. package/src/tool/urlEncoderDecoder/i18n/ru.ts +8 -8
  176. package/src/tool/urlEncoderDecoder/i18n/sv.ts +5 -5
  177. package/src/tool/urlEncoderDecoder/i18n/zh.ts +5 -5
  178. package/src/tool/urlEncoderDecoder/seo.astro +2 -1
  179. package/src/tool/urlEncoderDecoder/url-encoder-decoder.css +1 -1
  180. package/src/tool/utmGenerator/i18n/de.ts +2 -2
  181. package/src/tool/utmGenerator/i18n/pl.ts +5 -5
  182. package/src/tool/utmGenerator/i18n/ru.ts +6 -6
  183. package/src/tool/utmGenerator/seo.astro +2 -1
  184. package/src/tool/utmGenerator/utm-generator.css +6 -6
@@ -16,7 +16,7 @@ const faqData = [
16
16
  {
17
17
  question: 'Почему важно соблюдать правильные пропорции?',
18
18
  answer:
19
- 'Игнорирование соотношения сторон приводит к сплющенным или растянутым изображениям, появлению нежелательных черных полос (letterboxing) в видео и нарушению макета веб-компонентов на экранах разного размера. Соблюдение правильных пропорций залог профессионального вида.',
19
+ 'Игнорирование соотношения сторон приводит к сплющенным или растянутым изображениям, появлению нежелательных черных полос (letterboxing) в видео и нарушению макета веб-компонентов на экранах разного размера. Соблюдение правильных пропорций - залог профессионального вида.',
20
20
  },
21
21
  {
22
22
  question: 'Как рассчитать высоту на основе ширины при заданном соотношении?',
@@ -26,7 +26,7 @@ const faqData = [
26
26
  {
27
27
  question: 'Какое стандартное соотношение сторон используется для видео на YouTube?',
28
28
  answer:
29
- '16:9 это стандартное соотношение для YouTube и большинства современных видеоплатформ. Оно соответствует таким разрешениям, как 1280×720 (HD), 1920×1080 (Full HD) или 3840×2160 (4K UHD).',
29
+ '16:9 - это стандартное соотношение для YouTube и большинства современных видеоплатформ. Оно соответствует таким разрешениям, как 1280×720 (HD), 1920×1080 (Full HD) или 3840×2160 (4K UHD).',
30
30
  },
31
31
  {
32
32
  question: 'Какое соотношение сторон используется для вертикальных видео в соцсетях?',
@@ -42,7 +42,7 @@ const howToData = [
42
42
  },
43
43
  {
44
44
  name: 'Настройте масштаб',
45
- text: 'Измените значение ширины или высоты в разделе «Реальный масштаб». Инструмент автоматически рассчитает противоположное значение для сохранения пропорций.',
45
+ text: 'Измените значение ширины или высоты в разделе "Реальный масштаб". Инструмент автоматически рассчитает противоположное значение для сохранения пропорций.',
46
46
  },
47
47
  {
48
48
  name: 'Проверьте результат',
@@ -137,7 +137,7 @@ export const content: ToolLocaleContent<AspectRatioUI> = {
137
137
  },
138
138
  {
139
139
  type: 'paragraph',
140
- html: 'Несоблюдение соотношения сторон частая причина сплющенных фотографий, видео с неожиданной обрезкой (letterboxing) или веб-компонентов, макет которых нарушается при просмотре на разных устройствах от мобильных телефонов до ультрашироких мониторов.',
140
+ html: 'Несоблюдение соотношения сторон - частая причина сплющенных фотографий, видео с неожиданной обрезкой (letterboxing) или веб-компонентов, макет которых нарушается при просмотре на разных устройствах - от мобильных телефонов до ультрашироких мониторов.',
141
141
  },
142
142
  {
143
143
  type: 'title',
@@ -42,7 +42,7 @@ const howToData = [
42
42
  },
43
43
  {
44
44
  name: '调整缩放',
45
- text: '在“实际缩放”部分更改宽度或高度值。工具将自动计算对应的数值以保持比例。',
45
+ text: '在"实际缩放"部分更改宽度或高度值。工具将自动计算对应的数值以保持比例。',
46
46
  },
47
47
  {
48
48
  name: '查看预览',
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await aspectRatio.i18n[locale]?.();
12
+ if (!content) return null;
12
13
  ---
13
14
 
14
- {content && <SEORenderer content={{ locale, sections: content.seo }} />}
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -19,7 +19,7 @@
19
19
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
20
20
  }
21
21
 
22
- :global(.theme-dark) .ctd-card {
22
+ .theme-dark .ctd-card {
23
23
  background: rgb(30, 41, 59);
24
24
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
25
25
  }
@@ -44,7 +44,7 @@
44
44
  flex-shrink: 0;
45
45
  }
46
46
 
47
- .ctd-icon :global(svg) {
47
+ .ctd-icon svg {
48
48
  width: 32px;
49
49
  height: 32px;
50
50
  }
@@ -57,7 +57,7 @@
57
57
  letter-spacing: -0.02em;
58
58
  }
59
59
 
60
- :global(.theme-dark) .ctd-header h2 {
60
+ .theme-dark .ctd-header h2 {
61
61
  color: rgb(241, 245, 249);
62
62
  }
63
63
 
@@ -75,7 +75,7 @@
75
75
  letter-spacing: 0.05em;
76
76
  }
77
77
 
78
- :global(.theme-dark) .ctd-input-section > label {
78
+ .theme-dark .ctd-input-section > label {
79
79
  color: rgb(203, 213, 225);
80
80
  }
81
81
 
@@ -100,7 +100,7 @@
100
100
  box-sizing: border-box;
101
101
  }
102
102
 
103
- :global(.theme-dark) .ctd-input {
103
+ .theme-dark .ctd-input {
104
104
  background: rgb(15, 23, 42);
105
105
  border-color: rgb(51, 65, 85);
106
106
  color: rgb(241, 245, 249);
@@ -112,7 +112,7 @@
112
112
  box-shadow: 0 0 0 6px rgba(99, 102, 241, 0.1);
113
113
  }
114
114
 
115
- :global(.theme-dark) .ctd-input:focus {
115
+ .theme-dark .ctd-input:focus {
116
116
  background: rgb(30, 41, 59);
117
117
  }
118
118
 
@@ -123,7 +123,7 @@
123
123
  white-space: nowrap;
124
124
  }
125
125
 
126
- :global(.theme-dark) .ctd-input-unit {
126
+ .theme-dark .ctd-input-unit {
127
127
  color: rgb(203, 213, 225);
128
128
  }
129
129
 
@@ -158,7 +158,7 @@
158
158
  gap: 0.5rem;
159
159
  }
160
160
 
161
- :global(.theme-dark) .ctd-preset {
161
+ .theme-dark .ctd-preset {
162
162
  background: rgb(15, 23, 42);
163
163
  border-color: rgb(51, 65, 85);
164
164
  color: rgb(241, 245, 249);
@@ -171,7 +171,7 @@
171
171
  box-shadow: 0 8px 16px rgba(99, 102, 241, 0.2);
172
172
  }
173
173
 
174
- :global(.theme-dark) .ctd-preset:hover {
174
+ .theme-dark .ctd-preset:hover {
175
175
  background: rgba(99, 102, 241, 0.1);
176
176
  }
177
177
 
@@ -196,7 +196,7 @@
196
196
  letter-spacing: 0.05em;
197
197
  }
198
198
 
199
- :global(.theme-dark) .ctd-speed-section > label {
199
+ .theme-dark .ctd-speed-section > label {
200
200
  color: rgb(203, 213, 225);
201
201
  }
202
202
 
@@ -219,7 +219,7 @@
219
219
  transition: all 0.3s;
220
220
  }
221
221
 
222
- :global(.theme-dark) .ctd-speed-btn {
222
+ .theme-dark .ctd-speed-btn {
223
223
  background: rgb(15, 23, 42);
224
224
  border-color: rgb(51, 65, 85);
225
225
  }
@@ -230,7 +230,7 @@
230
230
  color: rgb(15, 23, 42);
231
231
  }
232
232
 
233
- :global(.theme-dark) .ctd-speed-label {
233
+ .theme-dark .ctd-speed-label {
234
234
  color: rgb(241, 245, 249);
235
235
  }
236
236
 
@@ -240,7 +240,7 @@
240
240
  color: rgb(100, 116, 139);
241
241
  }
242
242
 
243
- :global(.theme-dark) .ctd-speed-value {
243
+ .theme-dark .ctd-speed-value {
244
244
  color: rgb(203, 213, 225);
245
245
  }
246
246
 
@@ -251,7 +251,7 @@
251
251
  box-shadow: 0 8px 16px rgba(99, 102, 241, 0.2);
252
252
  }
253
253
 
254
- :global(.theme-dark) .ctd-speed-btn:hover {
254
+ .theme-dark .ctd-speed-btn:hover {
255
255
  background: rgba(99, 102, 241, 0.1);
256
256
  }
257
257
 
@@ -284,7 +284,7 @@
284
284
  letter-spacing: 0.05em;
285
285
  }
286
286
 
287
- :global(.theme-dark) .ctd-multiplier-section > label {
287
+ .theme-dark .ctd-multiplier-section > label {
288
288
  color: rgb(203, 213, 225);
289
289
  }
290
290
 
@@ -307,7 +307,7 @@
307
307
  transition: all 0.2s;
308
308
  }
309
309
 
310
- :global(.theme-dark) .ctd-times-btn {
310
+ .theme-dark .ctd-times-btn {
311
311
  background: rgb(15, 23, 42);
312
312
  border-color: rgb(51, 65, 85);
313
313
  color: rgb(241, 245, 249);
@@ -318,7 +318,7 @@
318
318
  background: rgb(219, 234, 254);
319
319
  }
320
320
 
321
- :global(.theme-dark) .ctd-times-btn:hover {
321
+ .theme-dark .ctd-times-btn:hover {
322
322
  background: rgba(99, 102, 241, 0.1);
323
323
  }
324
324
 
@@ -342,7 +342,7 @@
342
342
  box-sizing: border-box;
343
343
  }
344
344
 
345
- :global(.theme-dark) .ctd-times-input {
345
+ .theme-dark .ctd-times-input {
346
346
  background: rgb(15, 23, 42);
347
347
  border-color: rgb(51, 65, 85);
348
348
  color: rgb(241, 245, 249);
@@ -364,7 +364,7 @@
364
364
  align-items: center;
365
365
  }
366
366
 
367
- :global(.theme-dark) .ctd-results {
367
+ .theme-dark .ctd-results {
368
368
  background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(16, 185, 129, 0.05));
369
369
  }
370
370
 
@@ -384,7 +384,7 @@
384
384
  letter-spacing: 0.05em;
385
385
  }
386
386
 
387
- :global(.theme-dark) .ctd-result-label {
387
+ .theme-dark .ctd-result-label {
388
388
  color: rgb(203, 213, 225);
389
389
  }
390
390
 
@@ -403,8 +403,8 @@
403
403
  color: rgb(100, 116, 139);
404
404
  }
405
405
 
406
- :global(.theme-dark) .ctd-result-life,
407
- :global(.theme-dark) .ctd-result-life-total {
406
+ .theme-dark .ctd-result-life,
407
+ .theme-dark .ctd-result-life-total {
408
408
  color: rgb(203, 213, 225);
409
409
  }
410
410
 
@@ -414,7 +414,7 @@
414
414
  background: linear-gradient(180deg, transparent, rgb(203, 213, 225), transparent);
415
415
  }
416
416
 
417
- :global(.theme-dark) .ctd-divider {
417
+ .theme-dark .ctd-divider {
418
418
  background: linear-gradient(180deg, transparent, rgba(203, 213, 225, 0.2), transparent);
419
419
  }
420
420
 
@@ -434,7 +434,7 @@
434
434
  transition: all 0.3s;
435
435
  }
436
436
 
437
- :global(.theme-dark) .ctd-impact-card {
437
+ .theme-dark .ctd-impact-card {
438
438
  background: linear-gradient(135deg, rgba(99, 102, 241, 0.05), rgba(255, 140, 0, 0.05));
439
439
  border-color: rgba(99, 102, 241, 0.1);
440
440
  }
@@ -461,7 +461,7 @@
461
461
  color: rgb(100, 116, 139);
462
462
  }
463
463
 
464
- :global(.theme-dark) .ctd-impact-text {
464
+ .theme-dark .ctd-impact-text {
465
465
  color: rgb(203, 213, 225);
466
466
  }
467
467
 
@@ -477,7 +477,7 @@
477
477
  line-height: 1.6;
478
478
  }
479
479
 
480
- :global(.theme-dark) .ctd-message {
480
+ .theme-dark .ctd-message {
481
481
  background: linear-gradient(135deg, rgba(254, 243, 199, 0.1), rgba(254, 202, 202, 0.1));
482
482
  border-color: rgba(251, 191, 36, 0.3);
483
483
  color: rgb(251, 191, 36);
@@ -36,7 +36,7 @@ const faqData = [
36
36
  const howToData = [
37
37
  { name: 'Website-Gewicht eingeben', text: 'Verwenden Sie Browser-Entwicklertools oder WebPageTest, um das Gewicht Ihrer Seite zu ermitteln. Geben Sie diesen Wert in MB ein.' },
38
38
  { name: 'Ladezeiten beobachten', text: 'Der Rechner zeigt an, wie viele Sekunden Ihre Website zum Laden bei 3G, 4G und 5G benötigt. Die realen Zeiten sind meist höher.' },
39
- { name: 'Lebenszeitauswirkung verstehen', text: 'Der Prozentsatz der Lebenszeit zeigt, wie viel Zeit jemand mit Warten verbringt. Nutzen Sie dies als Motivation zur Optimierung.' },
39
+ { name: 'Lebenszeitauswirkung verstehen', text: 'Der Prozentsatz der "Lebenszeit" zeigt, wie viel Zeit jemand mit Warten verbringt. Nutzen Sie dies als Motivation zur Optimierung.' },
40
40
  { name: 'Optimieren und neu berechnen', text: 'Messen Sie nach der Optimierung erneut und berechnen Sie neu. Sehen Sie, wie kleine Verbesserungen große Auswirkungen haben.' },
41
41
  ];
42
42
 
@@ -36,7 +36,7 @@ const faqData = [
36
36
  const howToData = [
37
37
  { name: 'Wpisz wagę swojej strony', text: 'Użyj narzędzi deweloperskich przeglądarki lub WebPageTest, aby sprawdzić wagę strony. Wpisz tę wartość w MB.' },
38
38
  { name: 'Obserwuj czasy ładowania', text: 'Kalkulator pokazuje, ile sekund zajmuje ładowanie strony w sieciach 3G, 4G i 5G. Czasy w rzeczywistości są zazwyczaj wyższe.' },
39
- { name: 'Zrozum wpływ na czas życia', text: 'Procent czasu życia pokazuje, ile czyjegoś życia mija na czekaniu. Użyj tego jako motywacji do optymalizacji.' },
39
+ { name: 'Zrozum wpływ na czas życia', text: 'Procent "czasu życia" pokazuje, ile czyjegoś życia mija na czekaniu. Użyj tego jako motywacji do optymalizacji.' },
40
40
  { name: 'Optymalizuj i oblicz ponownie', text: 'Po optymalizacji zmierz ponownie i wykonaj obliczenia. Zobacz, jak małe ulepszenia mają duży wpływ.' },
41
41
  ];
42
42
 
@@ -36,7 +36,7 @@ const faqData = [
36
36
  const howToData = [
37
37
  { name: 'Введите вес вашего сайта', text: 'Используйте инструменты разработчика браузера или WebPageTest, чтобы узнать вес вашей страницы. Введите это значение в МБ.' },
38
38
  { name: 'Наблюдайте за временем загрузки', text: 'Калькулятор показывает, сколько секунд требуется вашему сайту для загрузки на 3G, 4G и 5G. Реальное время обычно выше.' },
39
- { name: 'Поймите влияние на продолжительность жизни', text: 'Процент «времени жизни» показывает, сколько времени чьей-то жизни тратится на ожидание. Используйте это как мотивацию для оптимизации.' },
39
+ { name: 'Поймите влияние на продолжительность жизни', text: 'Процент "времени жизни" показывает, сколько времени чьей-то жизни тратится на ожидание. Используйте это как мотивацию для оптимизации.' },
40
40
  { name: 'Оптимизируйте и пересчитайте', text: 'После оптимизации измерьте показатели снова и сделайте перерасчет. Посмотрите, как небольшие улучшения приносят значительный результат.' },
41
41
  ];
42
42
 
@@ -114,7 +114,7 @@ export const content: ToolLocaleContent<CalculadoraTiempoDatosUI> = {
114
114
  { type: 'title', text: 'Почему скорость загрузки сайта критически важна', level: 2 },
115
115
  {
116
116
  type: 'paragraph',
117
- html: 'В сегодняшнюю цифровую эпоху скорость загрузки сайта это не роскошь, а необходимость. Каждая миллисекунда имеет значение для удержания пользователей, улучшения рейтинга в поиске и максимизации конверсии. Современные пользователи ожидают, что страницы загрузятся менее чем за 3 секунды.',
117
+ html: 'В сегодняшнюю цифровую эпоху скорость загрузки сайта - это не роскошь, а необходимость. Каждая миллисекунда имеет значение для удержания пользователей, улучшения рейтинга в поиске и максимизации конверсии. Современные пользователи ожидают, что страницы загрузятся менее чем за 3 секунды.',
118
118
  },
119
119
  { type: 'title', text: 'Влияние на пользовательский опыт', level: 3 },
120
120
  {
@@ -125,9 +125,9 @@ export const content: ToolLocaleContent<CalculadoraTiempoDatosUI> = {
125
125
  {
126
126
  type: 'list',
127
127
  items: [
128
- '<strong>3G:</strong> 0,4 Мбит/с часто встречается в сельской местности и развивающихся странах',
129
- '<strong>4G/LTE:</strong> 10 Мбит/с стандарт в развитых странах',
130
- '<strong>5G:</strong> 100+ Мбит/с постепенно расширяется, но все еще ограничен',
128
+ '<strong>3G:</strong> 0,4 Мбит/с - часто встречается в сельской местности и развивающихся странах',
129
+ '<strong>4G/LTE:</strong> 10 Мбит/с - стандарт в развитых странах',
130
+ '<strong>5G:</strong> 100+ Мбит/с - постепенно расширяется, но все еще ограничен',
131
131
  ],
132
132
  },
133
133
  { type: 'title', text: 'Стратегии по уменьшению веса сайта', level: 3 },
@@ -21,11 +21,11 @@ const faqData = [
21
21
  },
22
22
  {
23
23
  question: 'Hur mycket bör min webbplats väga?',
24
- answer: 'Google rekommenderar att startsidan laddas på mindre än 3 sekunder via en typisk 4G-anslutning. För detta bör en webbplats helst väga mellan 1 och 2 MB. Det globala genomsnittet ligger dock nära 23 MB.',
24
+ answer: 'Google rekommenderar att startsidan laddas på mindre än 3 sekunder via en typisk 4G-anslutning. För detta bör en webbplats helst väga mellan 1 och 2 MB. Det globala genomsnittet ligger dock nära 2-3 MB.',
25
25
  },
26
26
  {
27
27
  question: 'Hur kan jag minska min webbplats vikt?',
28
- answer: 'Huvudstrategier: optimera bilder (5080 % av vikten), minifiera CSS och JavaScript, använda lazy loading, implementera webbläsarcache och använda en CDN. Bildoptimering är vanligtvis den mest effektiva faktorn.',
28
+ answer: 'Huvudstrategier: optimera bilder (50-80 % av vikten), minifiera CSS och JavaScript, använda lazy loading, implementera webbläsarcache och använda en CDN. Bildoptimering är vanligtvis den mest effektiva faktorn.',
29
29
  },
30
30
  {
31
31
  question: 'Påverkar laddningshastigheten Google-rankningen?',
@@ -36,7 +36,7 @@ const faqData = [
36
36
  const howToData = [
37
37
  { name: 'Ange din webbplats vikt', text: 'Använd webbläsarens utvecklarverktyg eller WebPageTest för att hitta din sidas vikt. Ange det värdet i MB.' },
38
38
  { name: 'Observera laddningstider', text: 'Kalkylatorn visar hur många sekunder det tar för din webbplats att ladda via 3G, 4G och 5G. Tiderna i verkligheten är vanligtvis högre.' },
39
- { name: 'Förstå livstidspåverkan', text: 'Procentandelen livstid visar hur mycket av någons liv som spenderas på att vänta. Använd detta som motivation för att optimera.' },
39
+ { name: 'Förstå livstidspåverkan', text: 'Procentandelen "livstid" visar hur mycket av någons liv som spenderas på att vänta. Använd detta som motivation för att optimera.' },
40
40
  { name: 'Optimera och beräkna om', text: 'Mät igen och beräkna om efter optimeringen. Se hur små förbättringar har stor betydelse.' },
41
41
  ];
42
42
 
@@ -134,8 +134,8 @@ export const content: ToolLocaleContent<CalculadoraTiempoDatosUI> = {
134
134
  {
135
135
  type: 'list',
136
136
  items: [
137
- '<strong>Bildoptimering:</strong> Representerar 5080 % av vikten. Minska med 4060 % med verktyg som TinyPNG.',
138
- '<strong>Minifiering:</strong> Ta bort onödig kod från CSS och JavaScript. Spara 3050 %.',
137
+ '<strong>Bildoptimering:</strong> Representerar 50-80 % av vikten. Minska med 40-60 % med verktyg som TinyPNG.',
138
+ '<strong>Minifiering:</strong> Ta bort onödig kod från CSS och JavaScript. Spara 30-50 %.',
139
139
  '<strong>Lazy Loading:</strong> Ladda bilder först när användaren scrollar till dem.',
140
140
  '<strong>Webbläsarcache:</strong> Cachelagra statiska filer i användarnas webbläsare.',
141
141
  '<strong>CDN:</strong> Leverera innehåll från servrar som ligger geografiskt nära.',
@@ -36,7 +36,7 @@ const faqData = [
36
36
  const howToData = [
37
37
  { name: '输入您的网站权重', text: '使用浏览器开发者工具或 WebPageTest 获取页面权重。以 MB 为单位输入该值。' },
38
38
  { name: '观察加载时间', text: '计算器显示网站在 3G、4G 和 5G 下加载所需的秒数。现实中的时间通常更高。' },
39
- { name: '了解对寿命的影响', text: '“寿命”百分比显示了一个人有多少生命花在了等待上。以此作为优化的动力。' },
39
+ { name: '了解对寿命的影响', text: '"寿命"百分比显示了一个人有多少生命花在了等待上。以此作为优化的动力。' },
40
40
  { name: '优化并重新计算', text: '优化后,再次测量并重新计算。观察微小的改进如何产生重大影响。' },
41
41
  ];
42
42
 
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await calculadoraTiempoDatos.i18n[locale]?.();
12
+ if (!content) return null;
12
13
  ---
13
14
 
14
- {content && <SEORenderer content={{ locale, sections: content.seo }} />}
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -30,7 +30,7 @@
30
30
  box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.07);
31
31
  }
32
32
 
33
- :global(.theme-dark) .cc-card {
33
+ .theme-dark .cc-card {
34
34
  background: rgba(30, 41, 59, 0.7);
35
35
  border: 1px solid rgba(255, 255, 255, 0.1);
36
36
  box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3);
@@ -62,7 +62,7 @@
62
62
  letter-spacing: 0.05em;
63
63
  }
64
64
 
65
- :global(.theme-dark) .cc-label {
65
+ .theme-dark .cc-label {
66
66
  color: rgb(148, 163, 184);
67
67
  }
68
68
 
@@ -79,7 +79,7 @@
79
79
  box-sizing: border-box;
80
80
  }
81
81
 
82
- :global(.theme-dark) .cc-text-input {
82
+ .theme-dark .cc-text-input {
83
83
  background: rgba(15, 23, 42, 0.5);
84
84
  border-color: rgb(51, 65, 85);
85
85
  color: rgb(241, 245, 249);
@@ -105,7 +105,7 @@
105
105
  transition: all 0.2s ease;
106
106
  }
107
107
 
108
- :global(.theme-dark) .cc-copy-badge {
108
+ .theme-dark .cc-copy-badge {
109
109
  background: rgba(255, 255, 255, 0.05);
110
110
  border-color: rgba(255, 255, 255, 0.1);
111
111
  color: rgb(148, 163, 184);
@@ -118,7 +118,7 @@
118
118
  transform: translateY(-1px);
119
119
  }
120
120
 
121
- :global(.theme-dark) .cc-copy-badge:hover {
121
+ .theme-dark .cc-copy-badge:hover {
122
122
  background: rgba(99, 102, 241, 0.1);
123
123
  }
124
124
 
@@ -130,8 +130,8 @@
130
130
  transform: none;
131
131
  }
132
132
 
133
- :global(.theme-dark) .cc-copy-badge.cc-copied,
134
- :global(.theme-dark) .cc-copy-badge.cc-copied:hover {
133
+ .theme-dark .cc-copy-badge.cc-copied,
134
+ .theme-dark .cc-copy-badge.cc-copied:hover {
135
135
  background: rgba(34, 197, 94, 0.1);
136
136
  }
137
137
 
@@ -165,7 +165,7 @@
165
165
  outline: none;
166
166
  }
167
167
 
168
- :global(.theme-dark) .cc-range {
168
+ .theme-dark .cc-range {
169
169
  background: rgb(51, 65, 85);
170
170
  }
171
171
 
@@ -202,7 +202,7 @@
202
202
  cursor: pointer;
203
203
  }
204
204
 
205
- :global(.theme-dark) .cc-main-preview {
205
+ .theme-dark .cc-main-preview {
206
206
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
207
207
  }
208
208
 
@@ -28,7 +28,7 @@ const faqData = [
28
28
  const howToData = [
29
29
  { name: 'Farbe auswählen', text: 'Verwenden Sie die Schieberegler für Rot, Grün und Blau oder geben Sie einen HEX-Code direkt in das Textfeld ein.' },
30
30
  { name: 'RGB-Kanäle anpassen', text: 'Bewegen Sie die Schieberegler, um die Intensität jedes Kanals zu ändern und die Aktualisierung in Echtzeit zu sehen.' },
31
- { name: 'Format kopieren', text: 'Klicken Sie auf die Schaltfläche Kopieren neben dem HEX-, RGB- oder HSL-Format, das Sie benötigen.' },
31
+ { name: 'Format kopieren', text: 'Klicken Sie auf die Schaltfläche "Kopieren" neben dem HEX-, RGB- oder HSL-Format, das Sie benötigen.' },
32
32
  { name: 'Harmonien erkunden', text: 'Klicken Sie auf die Harmoniefarben (komplementär, analog, triadisch), um sie in die Zwischenablage zu kopieren.' },
33
33
  ];
34
34
 
@@ -28,7 +28,7 @@ const faqData = [
28
28
  const howToData = [
29
29
  { name: 'Выберите цвет', text: 'Используйте ползунки красного, зеленого и синего или введите HEX-код прямо в текстовое поле.' },
30
30
  { name: 'Настройте каналы RGB', text: 'Передвигайте ползунки, чтобы изменить интенсивность каждого канала и увидеть обновление в режиме реального времени.' },
31
- { name: 'Скопируйте формат', text: 'Нажмите кнопку «Копировать» рядом с нужным форматом HEX, RGB или HSL.' },
31
+ { name: 'Скопируйте формат', text: 'Нажмите кнопку "Копировать" рядом с нужным форматом HEX, RGB или HSL.' },
32
32
  { name: 'Исследуйте гармонии', text: 'Нажмите на гармоничные цвета (комплементарные, аналогичные, триадические), чтобы скопировать их в буфер обмена.' },
33
33
  ];
34
34
 
@@ -97,7 +97,7 @@ export const content: ToolLocaleContent<ColorConverterUI> = {
97
97
  { type: 'title', text: 'Конвертер цветов RGB в HEX и HSL для разработчиков', level: 2 },
98
98
  {
99
99
  type: 'paragraph',
100
- html: 'В мире <strong>frontend-разработки</strong> и <strong>UI/UX дизайна</strong> управление цветом это постоянная задача. Наш <strong>онлайн-конвертер цветов</strong> позволяет мгновенно и с математической точностью преобразовывать значения между <strong>HEX, RGB и HSL</strong>.',
100
+ html: 'В мире <strong>frontend-разработки</strong> и <strong>UI/UX дизайна</strong> управление цветом - это постоянная задача. Наш <strong>онлайн-конвертер цветов</strong> позволяет мгновенно и с математической точностью преобразовывать значения между <strong>HEX, RGB и HSL</strong>.',
101
101
  },
102
102
  { type: 'title', text: 'Форматы цветов: HEX, RGB и HSL', level: 3 },
103
103
  {
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await colorConverter.i18n[locale]?.();
12
+ if (!content) return null;
12
13
  ---
13
14
 
14
- {content && <SEORenderer content={{ locale, sections: content.seo }} />}
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -28,7 +28,7 @@
28
28
  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.05);
29
29
  }
30
30
 
31
- :global(.theme-dark) .cec-converter-card {
31
+ .theme-dark .cec-converter-card {
32
32
  background: rgba(15, 23, 42, 0.6);
33
33
  border-color: rgba(255, 255, 255, 0.05);
34
34
  }
@@ -59,7 +59,7 @@
59
59
  letter-spacing: 0.05em;
60
60
  }
61
61
 
62
- :global(.theme-dark) .cec-input-label {
62
+ .theme-dark .cec-input-label {
63
63
  color: rgb(148, 163, 184);
64
64
  }
65
65
 
@@ -76,7 +76,7 @@
76
76
  transition: all 0.2s;
77
77
  }
78
78
 
79
- :global(.theme-dark) .cec-csv-textarea {
79
+ .theme-dark .cec-csv-textarea {
80
80
  background: rgb(2, 6, 23);
81
81
  border-color: rgb(30, 41, 59);
82
82
  color: var(--cec-text-light);
@@ -102,7 +102,7 @@
102
102
  background: rgba(248, 250, 252, 0.5);
103
103
  }
104
104
 
105
- :global(.theme-dark) .cec-drop-zone {
105
+ .theme-dark .cec-drop-zone {
106
106
  border-color: var(--cec-border-dark);
107
107
  background: rgba(30, 41, 59, 0.2);
108
108
  }
@@ -113,7 +113,7 @@
113
113
  background: rgba(139, 92, 246, 0.05);
114
114
  }
115
115
 
116
- .cec-drop-zone :global(svg) {
116
+ .cec-drop-zone svg {
117
117
  color: var(--cec-primary);
118
118
  }
119
119
 
@@ -132,7 +132,7 @@
132
132
  border-top: 1px solid rgba(0, 0, 0, 0.05);
133
133
  }
134
134
 
135
- :global(.theme-dark) .cec-options-row {
135
+ .theme-dark .cec-options-row {
136
136
  border-top-color: rgba(255, 255, 255, 0.05);
137
137
  }
138
138
 
@@ -164,7 +164,7 @@
164
164
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
165
165
  }
166
166
 
167
- :global(.theme-dark) .cec-option-item input[type="checkbox"] {
167
+ .theme-dark .cec-option-item input[type="checkbox"] {
168
168
  background: rgb(15, 23, 42);
169
169
  border-color: var(--cec-border-dark);
170
170
  }
@@ -193,7 +193,7 @@
193
193
  color: var(--cec-text-secondary);
194
194
  }
195
195
 
196
- :global(.theme-dark) .cec-option-item span {
196
+ .theme-dark .cec-option-item span {
197
197
  color: rgb(148, 163, 184);
198
198
  }
199
199
 
@@ -201,7 +201,7 @@
201
201
  color: rgb(88, 28, 135);
202
202
  }
203
203
 
204
- :global(.theme-dark) .cec-option-item input[type="checkbox"]:checked + span {
204
+ .theme-dark .cec-option-item input[type="checkbox"]:checked + span {
205
205
  color: rgb(196, 181, 253);
206
206
  }
207
207
 
@@ -217,7 +217,7 @@
217
217
  border-bottom: 2px solid var(--cec-border);
218
218
  }
219
219
 
220
- :global(.theme-dark) .cec-result-tabs {
220
+ .theme-dark .cec-result-tabs {
221
221
  border-bottom-color: rgb(30, 41, 59);
222
222
  }
223
223
 
@@ -248,7 +248,7 @@
248
248
  padding: 1rem;
249
249
  }
250
250
 
251
- :global(.theme-dark) .cec-preview-container {
251
+ .theme-dark .cec-preview-container {
252
252
  background: rgb(15, 23, 42);
253
253
  border-color: rgb(30, 41, 59);
254
254
  }
@@ -291,13 +291,13 @@
291
291
  background: var(--cec-primary-hover);
292
292
  }
293
293
 
294
- .cec-preview-container :global(table) {
294
+ .cec-preview-container table {
295
295
  width: 100%;
296
296
  border-collapse: collapse;
297
297
  font-size: 0.875rem;
298
298
  }
299
299
 
300
- .cec-preview-container :global(th) {
300
+ .cec-preview-container th {
301
301
  background: var(--cec-bg-light);
302
302
  border-bottom: 2px solid var(--cec-border);
303
303
  padding: 0.75rem;
@@ -306,19 +306,19 @@
306
306
  color: var(--cec-text-primary);
307
307
  }
308
308
 
309
- :global(.theme-dark) .cec-preview-container :global(th) {
309
+ .theme-dark .cec-preview-container th {
310
310
  background: rgb(30, 41, 59);
311
311
  border-bottom-color: var(--cec-border-dark);
312
312
  color: var(--cec-text-light);
313
313
  }
314
314
 
315
- .cec-preview-container :global(td) {
315
+ .cec-preview-container td {
316
316
  padding: 0.75rem;
317
317
  border-bottom: 1px solid rgb(241, 245, 249);
318
318
  color: var(--cec-text-secondary);
319
319
  }
320
320
 
321
- :global(.theme-dark) .cec-preview-container :global(td) {
321
+ .theme-dark .cec-preview-container td {
322
322
  border-bottom-color: rgb(30, 41, 59);
323
323
  color: rgb(148, 163, 184);
324
324
  }
@@ -334,25 +334,25 @@
334
334
  gap: 1rem;
335
335
  }
336
336
 
337
- .cec-preview-container :global(table.bordered) {
337
+ .cec-preview-container table.bordered {
338
338
  border: 1px solid var(--cec-border);
339
339
  }
340
340
 
341
- .cec-preview-container :global(table.bordered th),
342
- .cec-preview-container :global(table.bordered td) {
341
+ .cec-preview-container table.bordered th,
342
+ .cec-preview-container table.bordered td {
343
343
  border: 1px solid var(--cec-border);
344
344
  }
345
345
 
346
- :global(.theme-dark) .cec-preview-container :global(table.bordered),
347
- :global(.theme-dark) .cec-preview-container :global(table.bordered th),
348
- :global(.theme-dark) .cec-preview-container :global(table.bordered td) {
346
+ .theme-dark .cec-preview-container table.bordered,
347
+ .theme-dark .cec-preview-container table.bordered th,
348
+ .theme-dark .cec-preview-container table.bordered td {
349
349
  border-color: var(--cec-border-dark);
350
350
  }
351
351
 
352
- .cec-preview-container :global(table.zebra tbody tr:nth-child(even)) {
352
+ .cec-preview-container table.zebra tbody tr:nth-child(even) {
353
353
  background: var(--cec-bg-light);
354
354
  }
355
355
 
356
- :global(.theme-dark) .cec-preview-container :global(table.zebra tbody tr:nth-child(even)) {
356
+ .theme-dark .cec-preview-container table.zebra tbody tr:nth-child(even) {
357
357
  background: rgba(30, 41, 59, 0.5);
358
358
  }