@jjlmoya/utils-social 1.14.0 → 1.16.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 (83) hide show
  1. package/package.json +4 -2
  2. package/src/category/i18n/fr.ts +2 -2
  3. package/src/category/i18n/ru.ts +1 -1
  4. package/src/category/index.ts +1 -1
  5. package/src/env.d.ts +5 -0
  6. package/src/layouts/PreviewLayout.astro +7 -2
  7. package/src/tests/diacritics_density.test.ts +118 -0
  8. package/src/tests/inverted_punctuation.test.ts +84 -0
  9. package/src/tests/no_en_dash.test.ts +70 -0
  10. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  11. package/src/tests/script_density.test.ts +94 -0
  12. package/src/tool/redditFormatter/i18n/fr.ts +2 -2
  13. package/src/tool/redditFormatter/i18n/pl.ts +4 -4
  14. package/src/tool/redditFormatter/i18n/ru.ts +2 -2
  15. package/src/tool/redditFormatter/i18n/zh.ts +1 -1
  16. package/src/tool/safeZones/component.astro +1 -1
  17. package/src/tool/safeZones/i18n/de.ts +2 -2
  18. package/src/tool/safeZones/i18n/en.ts +2 -2
  19. package/src/tool/safeZones/i18n/fr.ts +11 -11
  20. package/src/tool/safeZones/i18n/id.ts +2 -2
  21. package/src/tool/safeZones/i18n/it.ts +6 -6
  22. package/src/tool/safeZones/i18n/nl.ts +2 -2
  23. package/src/tool/safeZones/i18n/pl.ts +7 -7
  24. package/src/tool/safeZones/i18n/pt.ts +2 -2
  25. package/src/tool/safeZones/i18n/ru.ts +9 -9
  26. package/src/tool/safeZones/i18n/sv.ts +2 -2
  27. package/src/tool/safeZones/i18n/zh.ts +4 -4
  28. package/src/tool/socialImageResizer/component.astro +2 -2
  29. package/src/tool/socialImageResizer/i18n/de.ts +5 -5
  30. package/src/tool/socialImageResizer/i18n/en.ts +8 -8
  31. package/src/tool/socialImageResizer/i18n/es.ts +7 -7
  32. package/src/tool/socialImageResizer/i18n/fr.ts +11 -11
  33. package/src/tool/socialImageResizer/i18n/id.ts +8 -8
  34. package/src/tool/socialImageResizer/i18n/it.ts +16 -16
  35. package/src/tool/socialImageResizer/i18n/ja.ts +7 -7
  36. package/src/tool/socialImageResizer/i18n/ko.ts +7 -7
  37. package/src/tool/socialImageResizer/i18n/nl.ts +8 -8
  38. package/src/tool/socialImageResizer/i18n/pl.ts +9 -9
  39. package/src/tool/socialImageResizer/i18n/pt.ts +8 -8
  40. package/src/tool/socialImageResizer/i18n/ru.ts +14 -14
  41. package/src/tool/socialImageResizer/i18n/sv.ts +8 -8
  42. package/src/tool/socialImageResizer/i18n/tr.ts +7 -7
  43. package/src/tool/socialImageResizer/i18n/zh.ts +7 -7
  44. package/src/tool/socialValueCalculator/component.astro +1 -2
  45. package/src/tool/socialValueCalculator/i18n/de.ts +2 -2
  46. package/src/tool/socialValueCalculator/i18n/en.ts +1 -1
  47. package/src/tool/socialValueCalculator/i18n/es.ts +2 -2
  48. package/src/tool/socialValueCalculator/i18n/fr.ts +6 -6
  49. package/src/tool/socialValueCalculator/i18n/id.ts +1 -1
  50. package/src/tool/socialValueCalculator/i18n/it.ts +14 -14
  51. package/src/tool/socialValueCalculator/i18n/ja.ts +1 -1
  52. package/src/tool/socialValueCalculator/i18n/ko.ts +1 -1
  53. package/src/tool/socialValueCalculator/i18n/nl.ts +1 -1
  54. package/src/tool/socialValueCalculator/i18n/pl.ts +1 -1
  55. package/src/tool/socialValueCalculator/i18n/pt.ts +1 -1
  56. package/src/tool/socialValueCalculator/i18n/ru.ts +7 -7
  57. package/src/tool/socialValueCalculator/i18n/sv.ts +1 -1
  58. package/src/tool/socialValueCalculator/i18n/tr.ts +1 -1
  59. package/src/tool/socialValueCalculator/i18n/zh.ts +4 -4
  60. package/src/tool/tinderPhotoOptimizer/component.astro +23 -6
  61. package/src/tool/tinderPhotoOptimizer/i18n/de.ts +3 -3
  62. package/src/tool/tinderPhotoOptimizer/i18n/en.ts +1 -1
  63. package/src/tool/tinderPhotoOptimizer/i18n/es.ts +3 -3
  64. package/src/tool/tinderPhotoOptimizer/i18n/fr.ts +25 -25
  65. package/src/tool/tinderPhotoOptimizer/i18n/ru.ts +9 -9
  66. package/src/tool/tinderPhotoOptimizer/i18n/zh.ts +2 -2
  67. package/src/tool/youtubeThumbnail/bibliography.ts +1 -1
  68. package/src/tool/youtubeThumbnail/component.astro +1 -0
  69. package/src/tool/youtubeThumbnail/i18n/de.ts +3 -3
  70. package/src/tool/youtubeThumbnail/i18n/en.ts +1 -1
  71. package/src/tool/youtubeThumbnail/i18n/fr.ts +3 -3
  72. package/src/tool/youtubeThumbnail/i18n/ru.ts +3 -3
  73. package/src/tool/youtubeThumbnail/i18n/zh.ts +2 -2
  74. package/src/tool/youtubeThumbnailPreviewer/i18n/de.ts +8 -8
  75. package/src/tool/youtubeThumbnailPreviewer/i18n/en.ts +2 -2
  76. package/src/tool/youtubeThumbnailPreviewer/i18n/fr.ts +9 -9
  77. package/src/tool/youtubeThumbnailPreviewer/i18n/id.ts +2 -2
  78. package/src/tool/youtubeThumbnailPreviewer/i18n/it.ts +21 -21
  79. package/src/tool/youtubeThumbnailPreviewer/i18n/nl.ts +4 -4
  80. package/src/tool/youtubeThumbnailPreviewer/i18n/pl.ts +7 -7
  81. package/src/tool/youtubeThumbnailPreviewer/i18n/ru.ts +11 -11
  82. package/src/tool/youtubeThumbnailPreviewer/i18n/sv.ts +2 -2
  83. package/src/tool/youtubeThumbnailPreviewer/i18n/zh.ts +10 -10
@@ -46,7 +46,7 @@ const howToData = [
46
46
  },
47
47
  {
48
48
  name: 'Skopiuj i opublikuj',
49
- text: 'Kliknij „Kopiuj tekst” i wklej go bezpośrednio na Reddit lub dowolne forum.',
49
+ text: 'Kliknij \"Kopiuj tekst\" i wklej go bezpośrednio na Reddit lub dowolne forum.',
50
50
  },
51
51
  ];
52
52
 
@@ -113,7 +113,7 @@ export const content: ToolLocaleContent<RedditFormatterUI> = {
113
113
  },
114
114
  {
115
115
  type: 'paragraph',
116
- html: 'Po drugie, narzędzie usuwa niewidoczne znaki i wielokrotne spacje. Podczas kopiowania tekstu ze stron internetowych często „przeciąga się” znaki o zerowej szerokości, które psują formatowanie lub powodują dziwne zachowanie na forach. Czyścik usuwa te intruzywne elementy i normalizuje powtarzające się spacje do pojedynczej, czystej spacji. Opcjonalnie możesz usunąć wszystkie surowe hiperłącza ze swojej treści, aby opublikować całkowicie neutralny tekst.',
116
+ html: 'Po drugie, narzędzie usuwa niewidoczne znaki i wielokrotne spacje. Podczas kopiowania tekstu ze stron internetowych często \"przeciąga się\" znaki o zerowej szerokości, które psują formatowanie lub powodują dziwne zachowanie na forach. Czyścik usuwa te intruzywne elementy i normalizuje powtarzające się spacje do pojedynczej, czystej spacji. Opcjonalnie możesz usunąć wszystkie surowe hiperłącza ze swojej treści, aby opublikować całkowicie neutralny tekst.',
117
117
  },
118
118
  {
119
119
  type: 'title',
@@ -136,7 +136,7 @@ export const content: ToolLocaleContent<RedditFormatterUI> = {
136
136
  },
137
137
  {
138
138
  type: 'paragraph',
139
- html: 'Aplikacje takie jak Microsoft Word czy Google Docs dodają niewidoczną warstwę bogatego formatowania do tekstu. Gdy kopiujesz i wklejasz tę treść bezpośrednio do podstawowego edytora lub trybu Markdown na Reddit, bogate formatowanie znika, a to, co pozostaje, to często bezkształtna mieszanina. Reddit używa dość rygorystycznego wariantu Markdown. Jeśli nie znasz składni Reddit lub po prostu chcesz usprawnić proces przenoszenia esejów lub opowiadań na forum, wcześniejsze wyczyszczenie tekstu tutaj zapobiega otrzymywaniu przez Twój post „downvote’ów” tylko dlatego, że nie da się go wygodnie przeczytać.',
139
+ html: 'Aplikacje takie jak Microsoft Word czy Google Docs dodają niewidoczną warstwę bogatego formatowania do tekstu. Gdy kopiujesz i wklejasz tę treść bezpośrednio do podstawowego edytora lub trybu Markdown na Reddit, bogate formatowanie znika, a to, co pozostaje, to często bezkształtna mieszanina. Reddit używa dość rygorystycznego wariantu Markdown. Jeśli nie znasz składni Reddit lub po prostu chcesz usprawnić proces przenoszenia esejów lub opowiadań na forum, wcześniejsze wyczyszczenie tekstu tutaj zapobiega otrzymywaniu przez Twój post \"downvote\'ów\" tylko dlatego, że nie da się go wygodnie przeczytać.',
140
140
  },
141
141
  {
142
142
  type: 'title',
@@ -164,7 +164,7 @@ export const content: ToolLocaleContent<RedditFormatterUI> = {
164
164
  },
165
165
  {
166
166
  type: 'paragraph',
167
- html: 'Znalezienie właściwych odpowiedzi na temat interakcji z zasadami redakcyjnymi Reddit nie zawsze jest oczywiste. Sprawdź sekcję FAQ, w której omawiamy główne pytania dotyczące poprawnych formatów i sposobów unikania kar za potężne „ściany tekstu”.',
167
+ html: 'Znalezienie właściwych odpowiedzi na temat interakcji z zasadami redakcyjnymi Reddit nie zawsze jest oczywiste. Sprawdź sekcję FAQ, w której omawiamy główne pytania dotyczące poprawnych formatów i sposobów unikania kar za potężne \"ściany tekstu\".',
168
168
  },
169
169
  ],
170
170
  ui: {
@@ -46,7 +46,7 @@ const howToData = [
46
46
  },
47
47
  {
48
48
  name: 'Скопируйте и опубликуйте',
49
- text: 'Нажмите «Копировать текст» и вставьте его прямо в Reddit или на любой форум.',
49
+ text: 'Нажмите \"Копировать текст\" и вставьте его прямо в Reddit или на любой форум.',
50
50
  },
51
51
  ];
52
52
 
@@ -164,7 +164,7 @@ export const content: ToolLocaleContent<RedditFormatterUI> = {
164
164
  },
165
165
  {
166
166
  type: 'paragraph',
167
- html: 'Найти правильные ответы на вопросы о том, как взаимодействовать с правилами редактирования Reddit, не всегда просто. Ознакомьтесь с разделом часто задаваемых вопросов, где мы рассматриваем основные вопросы о допустимых форматах и о том, как избежать штрафов за огромные «стены текста».',
167
+ html: 'Найти правильные ответы на вопросы о том, как взаимодействовать с правилами редактирования Reddit, не всегда просто. Ознакомьтесь с разделом часто задаваемых вопросов, где мы рассматриваем основные вопросы о допустимых форматах и о том, как избежать штрафов за огромные \"стены текста\".',
168
168
  },
169
169
  ],
170
170
  ui: {
@@ -46,7 +46,7 @@ const howToData = [
46
46
  },
47
47
  {
48
48
  name: '复制并发布',
49
- text: '点击“复制文本”并直接粘贴到 Reddit 或任何论坛。',
49
+ text: '点击\"复制文本\"并直接粘贴到 Reddit 或任何论坛。',
50
50
  },
51
51
  ];
52
52
 
@@ -86,7 +86,7 @@ const YOUTUBE_SVG = `<svg viewBox="0 0 24 24" fill="currentColor" width="24" hei
86
86
  <span class="szl-section-label">{t.labelOpacity}</span>
87
87
  <span class="szl-opacity-val" data-szl-opacity-val>85%</span>
88
88
  </div>
89
- <input type="range" class="szl-slider" data-szl-slider min="0" max="100" value="85" />
89
+ <input type="range" class="szl-slider" data-szl-slider min="0" max="100" value="85" aria-label={t.labelOpacity} />
90
90
  </div>
91
91
 
92
92
  <div class="szl-toggles">
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Bild oder Video laden',
37
- text: 'Laden Sie die Datei hoch, die Sie in der Vorschau sehen möchten. Die Verarbeitung erfolgt lokal und privat – es wird nichts ins Internet hochgeladen.',
37
+ text: 'Laden Sie die Datei hoch, die Sie in der Vorschau sehen möchten. Die Verarbeitung erfolgt lokal und privat - es wird nichts ins Internet hochgeladen.',
38
38
  },
39
39
  {
40
40
  name: 'Plattform auswählen',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Design für soziale Medien ist nicht nur Ästhetik – es ist <strong>Benutzerfreundlichkeit</strong>. Wenn ein Benutzer kämpfen muss, um Text zu lesen, weil die Symbole der Plattform ihn verdecken, wischt er einfach zum nächsten Video weiter. Die Verweildauer (Watch Time) sinkt drastisch, wenn es visuelle Reibung gibt.',
180
+ html: 'Design für soziale Medien ist nicht nur Ästhetik - es ist <strong>Benutzerfreundlichkeit</strong>. Wenn ein Benutzer kämpfen muss, um Text zu lesen, weil die Symbole der Plattform ihn verdecken, wischt er einfach zum nächsten Video weiter. Die Verweildauer (Watch Time) sinkt drastisch, wenn es visuelle Reibung gibt.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Load your image or video',
37
- text: 'Upload the file you want to preview. Processing is local and private — nothing is uploaded to the internet.',
37
+ text: 'Upload the file you want to preview. Processing is local and private - nothing is uploaded to the internet.',
38
38
  },
39
39
  {
40
40
  name: 'Select the platform',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Designing for social media is not just aesthetics — it is <strong>usability</strong>. If a user has to struggle to read text because the platform\'s icons are covering it, they will simply swipe to the next video. Retention (Watch Time) drops sharply when there is visual friction.',
180
+ html: 'Designing for social media is not just aesthetics - it is <strong>usability</strong>. If a user has to struggle to read text because the platform\'s icons are covering it, they will simply swipe to the next video. Retention (Watch Time) drops sharply when there is visual friction.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -4,7 +4,7 @@ import type { ToolLocaleContent } from '../../../types';
4
4
  import type { SafeZonesUI } from '../ui';
5
5
 
6
6
  const slug = 'simulateur-reseaux';
7
- const title = 'Safe Zones Réseaux Sociaux : Simulateur Vidéo TikTok, Reels et Shorts';
7
+ const title = 'Safe Zones Réseaux Sociaux: Simulateur Vidéo TikTok, Reels et Shorts';
8
8
  const description =
9
9
  'Prévisualisez vos images et vidéos avec la vraie interface des réseaux sociaux. Assurez-vous que votre contenu est toujours visible et évitez les recadrages accidentels.';
10
10
 
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Charger votre image ou vidéo',
37
- text: "Téléchargez le fichier que vous souhaitez prévisualiser. Le traitement est local et privé — rien n'est envoyé sur internet.",
37
+ text: "Téléchargez le fichier que vous souhaitez prévisualiser. Le traitement est local et privé - rien n'est envoyé sur internet.",
38
38
  },
39
39
  {
40
40
  name: 'Sélectionner la plateforme',
@@ -95,7 +95,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
95
95
  seo: [
96
96
  {
97
97
  type: 'title',
98
- text: 'Guide Maître des Zones Sécurisées : Optimisez vos Reels, TikToks et Shorts',
98
+ text: 'Guide Maître des Zones Sécurisées: Optimisez vos Reels, TikToks et Shorts',
99
99
  level: 2,
100
100
  },
101
101
  {
@@ -111,19 +111,19 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
111
111
  columns: [
112
112
  {
113
113
  type: 'card',
114
- title: "TikTok : L'interface la plus invasive",
115
- html: "<p>TikTok possède l'interface la plus dense. Sur la droite, une colonne d'icônes occupe environ 15% de la largeur. En bas, la description peut s'étendre sur 4 ou 5 lignes si elle est longue, couvrant presque un tiers de l'écran depuis le bas.</p><ul><li><strong>Marge inférieure :</strong> Laissez libres les 250 derniers pixels pour éviter le texte de la description et le nom d'utilisateur.</li><li><strong>Marge droite :</strong> Évitez de placer du texte à moins de 100px du bord droit.</li><li><strong>Haut :</strong> Les boutons « Abonnements » et « Pour toi » occupent la bande supérieure centrale.</li></ul>",
114
+ title: "TikTok: L'interface la plus invasive",
115
+ html: "<p>TikTok possède l'interface la plus dense. Sur la droite, une colonne d'icônes occupe environ 15% de la largeur. En bas, la description peut s'étendre sur 4 ou 5 lignes si elle est longue, couvrant presque un tiers de l'écran depuis le bas.</p><ul><li><strong>Marge inférieure :</strong> Laissez libres les 250 derniers pixels pour éviter le texte de la description et le nom d'utilisateur.</li><li><strong>Marge droite :</strong> Évitez de placer du texte à moins de 100px du bord droit.</li><li><strong>Haut :</strong> Les boutons \" Abonnements \" et \" Pour toi \" occupent la bande supérieure centrale.</li></ul>",
116
116
  },
117
117
  {
118
118
  type: 'card',
119
- title: 'IG Reels : Le facteur du fil',
119
+ title: 'IG Reels: Le facteur du fil',
120
120
  html: "<p>Contrairement à TikTok, Instagram Reels recadre la vidéo au format 4:5 lorsqu'elle est visualisée depuis le fil principal (pas depuis l'onglet Reels). Cela signifie que si vous placez des informations vitales dans les 15% supérieurs ou inférieurs de votre vidéo 9:16, elles disparaîtront dans le fil.</p><ul><li><strong>La règle du 4:5 :</strong> Gardez les titres et éléments clés dans la zone centrale pour assurer la visibilité dans le fil.</li><li><strong>Interface :</strong> Les icônes de Reels sont plus subtiles que celles de TikTok, permettant un peu plus de marge latérale.</li><li><strong>Bouton audio :</strong> Situé en bas à droite, il couvre généralement bien moins que le disque tournant de TikTok.</li></ul>",
121
121
  },
122
122
  ],
123
123
  },
124
124
  {
125
125
  type: 'title',
126
- text: 'YouTube Shorts : Attention à la droite',
126
+ text: 'YouTube Shorts: Attention à la droite',
127
127
  level: 3,
128
128
  },
129
129
  {
@@ -135,7 +135,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
135
135
  items: [
136
136
  '<strong>Marge droite :</strong> Évitez de placer du texte ou des éléments importants dans les 20% inférieurs droits.',
137
137
  "<strong>Marge inférieure :</strong> Laissez libres les 150 derniers pixels pour éviter le texte de la description et le nom d'utilisateur.",
138
- "<strong>Haut :</strong> Les boutons « S'abonner » et « Plus » occupent la bande supérieure centrale.",
138
+ "<strong>Haut :</strong> Les boutons \" S'abonner \" et \" Plus \" occupent la bande supérieure centrale.",
139
139
  ],
140
140
  },
141
141
  {
@@ -150,7 +150,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
150
150
  },
151
151
  {
152
152
  type: 'paragraph',
153
- html: 'La « Zone d\'Or » pour l\'action principale est le tiers central de la vidéo. Si vous filmez une personne, assurez-vous que ses yeux et sa bouche se trouvent dans cette zone. Les éléments graphiques importants doivent être légèrement décalés vers le haut par rapport au centre géométrique pour éviter la description inférieure.',
153
+ html: 'La \" Zone d\'Or \" pour l\'action principale est le tiers central de la vidéo. Si vous filmez une personne, assurez-vous que ses yeux et sa bouche se trouvent dans cette zone. Les éléments graphiques importants doivent être légèrement décalés vers le haut par rapport au centre géométrique pour éviter la description inférieure.',
154
154
  },
155
155
  {
156
156
  type: 'title',
@@ -168,7 +168,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
168
168
  },
169
169
  {
170
170
  type: 'paragraph',
171
- html: 'Rappelez-vous que les téléphones modernes ont des « encoches » ou des trous de caméra à l\'écran. Cet outil inclut une marge de sécurité supérieure pour que votre contenu n\'entre pas en conflit avec l\'horloge ou les icônes système (batterie, signal).',
171
+ html: 'Rappelez-vous que les téléphones modernes ont des \" encoches \" ou des trous de caméra à l\'écran. Cet outil inclut une marge de sécurité supérieure pour que votre contenu n\'entre pas en conflit avec l\'horloge ou les icônes système (batterie, signal).',
172
172
  },
173
173
  {
174
174
  type: 'title',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: "Concevoir pour les réseaux sociaux n'est pas seulement esthétique — c'est de l'<strong>utilisabilité</strong>. Si un utilisateur doit faire un effort pour lire un texte parce que les icônes de la plateforme le couvrent, il passera simplement à la vidéo suivante. La rétention (Watch Time) chute brutalement en cas de friction visuelle.",
180
+ html: "Concevoir pour les réseaux sociaux n'est pas seulement esthétique - c'est de l'<strong>utilisabilité</strong>. Si un utilisateur doit faire un effort pour lire un texte parce que les icônes de la plateforme le couvrent, il passera simplement à la vidéo suivante. La rétention (Watch Time) chute brutalement en cas de friction visuelle.",
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Muat gambar atau video Anda',
37
- text: 'Unggah file yang ingin Anda pratinjau. Pemrosesan bersifat lokal dan pribadi — tidak ada yang diunggah ke internet.',
37
+ text: 'Unggah file yang ingin Anda pratinjau. Pemrosesan bersifat lokal dan pribadi - tidak ada yang diunggah ke internet.',
38
38
  },
39
39
  {
40
40
  name: 'Pilih platform',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Mendesain untuk media sosial bukan hanya tentang estetika — ini tentang <strong>kegunaan</strong>. Jika pengguna harus berjuang untuk membaca teks karena ikon platform menutupinya, mereka akan langsung beralih ke video berikutnya. Retensi (Watch Time) turun tajam saat terjadi gesekan visual.',
180
+ html: 'Mendesain untuk media sosial bukan hanya tentang estetika - ini tentang <strong>kegunaan</strong>. Jika pengguna harus berjuang untuk membaca teks karena ikon platform menutupinya, mereka akan langsung beralih ke video berikutnya. Retensi (Watch Time) turun tajam saat terjadi gesekan visual.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -25,7 +25,7 @@ const faqData = [
25
25
  "Sono molto simili ma non identiche. I pulsanti di YouTube Shorts sono posizionati diversamente rispetto a quelli di Reels. Il nostro strumento ti consente di passare da una piattaforma all'altra per verificare il tuo design su ognuna di esse.",
26
26
  },
27
27
  {
28
- question: 'Cosa succede se metto del testo nell’angolo in basso a destra?',
28
+ question: 'Cosa succede se metto del testo nell\'angolo in basso a destra?',
29
29
  answer:
30
30
  "Probabilmente sarà invisibile o molto difficile da leggere, poiché è lì che si trovano le icone del profilo, del cuore e dei commenti. Idealmente, tieni testi e volti nell'area centrale superiore (Zona Sicura).",
31
31
  },
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Carica la tua immagine o il tuo video',
37
- text: "Carica il file che desideri visualizzare in anteprima. L'elaborazione è locale e privata — nulla viene caricato su internet.",
37
+ text: "Carica il file che desideri visualizzare in anteprima. L'elaborazione è locale e privata - nulla viene caricato su internet.",
38
38
  },
39
39
  {
40
40
  name: 'Seleziona la piattaforma',
@@ -111,8 +111,8 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
111
111
  columns: [
112
112
  {
113
113
  type: 'card',
114
- title: 'TikTok: L’interfaccia più invasiva',
115
- html: "<p>TikTok ha l'interfaccia più densa. Sul lato destro, c’è una colonna di icone che occupa circa il 15% della larghezza. In basso, la descrizione può estendersi su 4 o 5 righe, coprendo quasi un terzo dello schermo dal basso.</p><ul><li><strong>Margine inferiore:</strong> Lascia liberi gli ultimi 250px per evitare il testo della descrizione e il nome utente.</li><li><strong>Margine destro:</strong> Evita di posizionare il testo entro 100px dal bordo destro.</li><li><strong>In alto:</strong> I pulsanti \"Seguiti\" e \"Per te\" occupano la fascia centrale superiore.</li></ul>",
114
+ title: 'TikTok: L\'interfaccia più invasiva',
115
+ html: "<p>TikTok ha l'interfaccia più densa. Sul lato destro, c\'è una colonna di icone che occupa circa il 15% della larghezza. In basso, la descrizione può estendersi su 4 o 5 righe, coprendo quasi un terzo dello schermo dal basso.</p><ul><li><strong>Margine inferiore:</strong> Lascia liberi gli ultimi 250px per evitare il testo della descrizione e il nome utente.</li><li><strong>Margine destro:</strong> Evita di posizionare il testo entro 100px dal bordo destro.</li><li><strong>In alto:</strong> I pulsanti \"Seguiti\" e \"Per te\" occupano la fascia centrale superiore.</li></ul>",
116
116
  },
117
117
  {
118
118
  type: 'card',
@@ -128,7 +128,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
128
128
  },
129
129
  {
130
130
  type: 'paragraph',
131
- html: "YouTube Shorts ha un’interfaccia asimmetrica. Il pulsante iscriviti è molto visibile e di colore solido (solitamente nero o bianco), creando un importante punto cieco visivo in basso a destra.",
131
+ html: "YouTube Shorts ha un\'interfaccia asimmetrica. Il pulsante iscriviti è molto visibile e di colore solido (solitamente nero o bianco), creando un importante punto cieco visivo in basso a destra.",
132
132
  },
133
133
  {
134
134
  type: 'list',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: "Progettare per i social media non è solo estetica — è <strong>usabilità</strong>. Se un utente deve sforzarsi per leggere il testo perché le icone della piattaforma lo coprono, passerà semplicemente al video successivo. La ritenzione (Watch Time) cala drasticamente quando c'è un attrito visivo.",
180
+ html: "Progettare per i social media non è solo estetica - è <strong>usabilità</strong>. Se un utente deve sforzarsi per leggere il testo perché le icone della piattaforma lo coprono, passerà semplicemente al video successivo. La ritenzione (Watch Time) cala drasticamente quando c'è un attrito visivo.",
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Laad uw afbeelding of video',
37
- text: 'Upload het bestand waarvan u een voorbeeld wilt zien. De verwerking is lokaal en privé — er wordt niets naar internet geüpload.',
37
+ text: 'Upload het bestand waarvan u een voorbeeld wilt zien. De verwerking is lokaal en privé - er wordt niets naar internet geüpload.',
38
38
  },
39
39
  {
40
40
  name: 'Selecteer het platform',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Ontwerpen voor sociale media gaat niet alleen over esthetiek — het gaat over <strong>gebruiksvriendelijkheid</strong>. Als een gebruiker moeite moet doen om tekst te lezen omdat de iconen van het platform deze bedekken, zullen ze simpelweg naar de volgende video swipen. Retentie (kijkduur) daalt scherp als er visuele wrijving is.',
180
+ html: 'Ontwerpen voor sociale media gaat niet alleen over esthetiek - het gaat over <strong>gebruiksvriendelijkheid</strong>. Als een gebruiker moeite moet doen om tekst te lezen omdat de iconen van het platform deze bedekken, zullen ze simpelweg naar de volgende video swipen. Retentie (kijkduur) daalt scherp als er visuele wrijving is.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -10,7 +10,7 @@ const description =
10
10
 
11
11
  const faqData = [
12
12
  {
13
- question: "Czym są „strefy bezpieczne” (Safe Zones) w mediach społecznościowych?",
13
+ question: "Czym są \"strefy bezpieczne\" (Safe Zones) w mediach społecznościowych?",
14
14
  answer:
15
15
  "Są to obszary ekranu, w których treść jest widoczna bez ryzyka zasłonięcia przez elementy interfejsu, takie jak nazwa użytkownika, opis, przyciski interakcji (polubienie, udostępnienie) lub automatyczne przycięcia stosowane przez niektóre urządzenia.",
16
16
  },
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Wczytaj zdjęcie lub film',
37
- text: "Prześlij plik, który chcesz podejrzeć. Przetwarzanie odbywa się lokalnie i prywatnie — nic nie jest wysyłane do Internetu.",
37
+ text: "Prześlij plik, który chcesz podejrzeć. Przetwarzanie odbywa się lokalnie i prywatnie - nic nie jest wysyłane do Internetu.",
38
38
  },
39
39
  {
40
40
  name: 'Wybierz platformę',
@@ -104,7 +104,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
104
104
  },
105
105
  {
106
106
  type: 'paragraph',
107
- html: "To narzędzie pozwala wczytać pliki multimedialne i podejrzeć dokładnie, które części kadru zostaną pochłonięte przez interfejs. Nie chodzi tylko o <strong>napisy</strong>; chodzi o upewnienie się, że twarze, produkty lub główne akcje w Twoim filmie nie zostaną pogrzebane pod przyciskiem „Lubię to” lub długim opisem.",
107
+ html: "To narzędzie pozwala wczytać pliki multimedialne i podejrzeć dokładnie, które części kadru zostaną pochłonięte przez interfejs. Nie chodzi tylko o <strong>napisy</strong>; chodzi o upewnienie się, że twarze, produkty lub główne akcje w Twoim filmie nie zostaną pogrzebane pod przyciskiem \"Lubię to\" lub długim opisem.",
108
108
  },
109
109
  {
110
110
  type: 'grid',
@@ -112,7 +112,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
112
112
  {
113
113
  type: 'card',
114
114
  title: 'TikTok: Najbardziej inwazyjny interfejs',
115
- html: "<p>TikTok posiada najbardziej zagęszczony interfejs. Po prawej stronie znajduje się kolumna ikon zajmująca około 15% szerokości. Na dole opis może rozciągać się na 4 lub 5 linii, zakrywając od dołu prawie jedną trzecią ekranu.</p><ul><li><strong>Dolny margines:</strong> Pozostaw ostatnie 250px wolne, aby uniknąć tekstu opisu i nazwy użytkownika.</li><li><strong>Prawy margines:</strong> Unikaj umieszczania tekstu w odległości mniejszej niż 100px od prawej krawędzi.</li><li><strong>Góra:</strong> Przyciski „Obserwujesz” i „Dla Ciebie” zajmują górny środkowy pas.</li></ul>",
115
+ html: "<p>TikTok posiada najbardziej zagęszczony interfejs. Po prawej stronie znajduje się kolumna ikon zajmująca około 15% szerokości. Na dole opis może rozciągać się na 4 lub 5 linii, zakrywając od dołu prawie jedną trzecią ekranu.</p><ul><li><strong>Dolny margines:</strong> Pozostaw ostatnie 250px wolne, aby uniknąć tekstu opisu i nazwy użytkownika.</li><li><strong>Prawy margines:</strong> Unikaj umieszczania tekstu w odległości mniejszej niż 100px od prawej krawędzi.</li><li><strong>Góra:</strong> Przyciski \"Obserwujesz\" i \"Dla Ciebie\" zajmują górny środkowy pas.</li></ul>",
116
116
  },
117
117
  {
118
118
  type: 'card',
@@ -135,7 +135,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
135
135
  items: [
136
136
  '<strong>Prawy margines:</strong> Unikaj umieszczania tekstu lub ważnych elementów w prawym dolnym obszarze 20%.',
137
137
  '<strong>Dolny margines:</strong> Pozostaw ostatnie 150px wolne, aby uniknąć tekstu opisu i nazwy użytkownika.',
138
- '<strong>Góra:</strong> Przyciski „Subskrybuj” i inne zajmują górny środkowy pas.',
138
+ '<strong>Góra:</strong> Przyciski \"Subskrybuj\" i inne zajmują górny środkowy pas.',
139
139
  ],
140
140
  },
141
141
  {
@@ -150,7 +150,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
150
150
  },
151
151
  {
152
152
  type: 'paragraph',
153
- html: '„Złota Strefa” dla głównej akcji to środkowa jedna trzecia filmu. Jeśli filmujesz osobę, upewnij się, że jej oczy i usta znajdują się w tej strefie. Ważne elementy graficzne powinny być nieco przesunięte w górę od geometrycznego środka, aby uniknąć dolnego opisu.',
153
+ html: '\"Złota Strefa\" dla głównej akcji to środkowa jedna trzecia filmu. Jeśli filmujesz osobę, upewnij się, że jej oczy i usta znajdują się w tej strefie. Ważne elementy graficzne powinny być nieco przesunięte w górę od geometrycznego środka, aby uniknąć dolnego opisu.',
154
154
  },
155
155
  {
156
156
  type: 'title',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: "Projektowanie dla mediów społecznościowych to nie tylko estetyka — to <strong>użyteczność</strong>. Jeśli użytkownik musi walczyć o przeczytanie tekstu, ponieważ ikony platformy go zasłaniają, po prostu przejdzie do następnego filmu. Retencja (Watch Time) gwałtownie spada, gdy pojawia się wizualne tarcie.",
180
+ html: "Projektowanie dla mediów społecznościowych to nie tylko estetyka - to <strong>użyteczność</strong>. Jeśli użytkownik musi walczyć o przeczytanie tekstu, ponieważ ikony platformy go zasłaniają, po prostu przejdzie do następnego filmu. Retencja (Watch Time) gwałtownie spada, gdy pojawia się wizualne tarcie.",
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Carrega a tua imagem ou vídeo',
37
- text: 'Faz o upload do ficheiro que desejas pré-visualizar. O processamento é local e privado — nada é carregado para a internet.',
37
+ text: 'Faz o upload do ficheiro que desejas pré-visualizar. O processamento é local e privado - nada é carregado para a internet.',
38
38
  },
39
39
  {
40
40
  name: 'Seleciona a plataforma',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Desenhar para redes sociais não é apenas estética — é <strong>usabilidade</strong>. Se um utilizador tiver de lutar para ler texto porque os ícones da plataforma o cobrem, ele simplesmente passará para o vídeo seguinte. A retenção (Watch Time) cai drasticamente quando há fricção visual.',
180
+ html: 'Desenhar para redes sociais não é apenas estética - é <strong>usabilidade</strong>. Se um utilizador tiver de lutar para ler texto porque os ícones da plataforma o cobrem, ele simplesmente passará para o vídeo seguinte. A retenção (Watch Time) cai drasticamente quando há fricção visual.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -10,7 +10,7 @@ const description =
10
10
 
11
11
  const faqData = [
12
12
  {
13
- question: 'Что такое «безопасные зоны» в социальных сетях?',
13
+ question: 'Что такое \"безопасные зоны\" в социальных сетях?',
14
14
  answer:
15
15
  'Это области экрана, где контент виден без риска быть перекрытым элементами интерфейса, такими как имя пользователя, описание, кнопки взаимодействия (лайк, репост) или автоматическая обрезка, применяемая некоторыми устройствами.',
16
16
  },
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Загрузите изображение или видео',
37
- text: 'Загрузите файл, который хотите просмотреть. Обработка происходит локально и конфиденциально — ничего не загружается в интернет.',
37
+ text: 'Загрузите файл, который хотите просмотреть. Обработка происходит локально и конфиденциально - ничего не загружается в интернет.',
38
38
  },
39
39
  {
40
40
  name: 'Выберите платформу',
@@ -100,11 +100,11 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
100
100
  },
101
101
  {
102
102
  type: 'paragraph',
103
- html: 'В перенасыщенном мире вертикального контента первое впечатление — техническое. Самая большая ошибка авторов — игнорирование того, как их <strong>видео или изображение</strong> взаимодействует с нативным интерфейсом платформы. Каждая социальная сеть (TikTok, Instagram Reels и YouTube Shorts) накладывает слои кнопок, текста и профилей, которые могут свести на нет визуальный эффект вашей композиции.',
103
+ html: 'В перенасыщенном мире вертикального контента первое впечатление - техническое. Самая большая ошибка авторов - игнорирование того, как их <strong>видео или изображение</strong> взаимодействует с нативным интерфейсом платформы. Каждая социальная сеть (TikTok, Instagram Reels и YouTube Shorts) накладывает слои кнопок, текста и профилей, которые могут свести на нет визуальный эффект вашей композиции.',
104
104
  },
105
105
  {
106
106
  type: 'paragraph',
107
- html: 'Этот инструмент позволяет загружать медиафайлы и просматривать, какие именно части вашего кадра будут перекрыты интерфейсом. Речь идет не только о <strong>субтитрах</strong>; речь идет о том, чтобы лица, продукты или основные действия в вашем видео не оказались погребены под кнопкой «Нравится» или длинным описанием.',
107
+ html: 'Этот инструмент позволяет загружать медиафайлы и просматривать, какие именно части вашего кадра будут перекрыты интерфейсом. Речь идет не только о <strong>субтитрах</strong>; речь идет о том, чтобы лица, продукты или основные действия в вашем видео не оказались погребены под кнопкой \"Нравится\" или длинным описанием.',
108
108
  },
109
109
  {
110
110
  type: 'grid',
@@ -112,7 +112,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
112
112
  {
113
113
  type: 'card',
114
114
  title: 'TikTok: самый навязчивый интерфейс',
115
- html: '<p>TikTok имеет самый плотный интерфейс. С правой стороны находится колонка иконок, занимающая примерно 15% ширины. Внизу описание может растягиваться на 4 или 5 строк, закрывая почти треть экрана снизу.</p><ul><li><strong>Нижний отступ:</strong> оставляйте последние 250 пикселей свободными, чтобы избежать перекрытия текстом описания и именем пользователя.</li><li><strong>Правый отступ:</strong> избегайте размещения текста в пределах 100 пикселей от правого края.</li><li><strong>Верх:</strong> кнопки «Подписки» и «Рекомендации» занимают верхнюю центральную полосу.</li></ul>',
115
+ html: '<p>TikTok имеет самый плотный интерфейс. С правой стороны находится колонка иконок, занимающая примерно 15% ширины. Внизу описание может растягиваться на 4 или 5 строк, закрывая почти треть экрана снизу.</p><ul><li><strong>Нижний отступ:</strong> оставляйте последние 250 пикселей свободными, чтобы избежать перекрытия текстом описания и именем пользователя.</li><li><strong>Правый отступ:</strong> избегайте размещения текста в пределах 100 пикселей от правого края.</li><li><strong>Верх:</strong> кнопки \"Подписки\" и \"Рекомендации\" занимают верхнюю центральную полосу.</li></ul>',
116
116
  },
117
117
  {
118
118
  type: 'card',
@@ -150,7 +150,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
150
150
  },
151
151
  {
152
152
  type: 'paragraph',
153
- html: '«Золотая зона» для основного действия — центральная треть видео. Если вы снимаете человека, убедитесь, что его глаза и рот находятся в этой зоне. Важные графические элементы должны быть слегка смещены вверх от геометрического центра, чтобы избежать перекрытия нижним описанием.',
153
+ html: '\"Золотая зона\" для основного действия - центральная треть видео. Если вы снимаете человека, убедитесь, что его глаза и рот находятся в этой зоне. Важные графические элементы должны быть слегка смещены вверх от геометрического центра, чтобы избежать перекрытия нижним описанием.',
154
154
  },
155
155
  {
156
156
  type: 'title',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Дизайн для социальных сетей — это не только эстетика, но и <strong>удобство использования</strong>. Если пользователю приходится изо всех сил пытаться прочитать текст, потому что иконки платформы закрывают его, он просто перелистнет к следующему видео. Удержание (Watch Time) резко падает при наличии визуального дискомфорта.',
180
+ html: 'Дизайн для социальных сетей - это не только эстетика, но и <strong>удобство использования</strong>. Если пользователю приходится изо всех сил пытаться прочитать текст, потому что иконки платформы закрывают его, он просто перелистнет к следующему видео. Удержание (Watch Time) резко падает при наличии визуального дискомфорта.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -209,14 +209,14 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
209
209
  ttFollowing: 'Подписки',
210
210
  ttForYou: 'Рекомендации',
211
211
  ttDescription: 'Реальный дизайн интерфейса для создателей контента. #uxdesign #socialmedia',
212
- ttAudio: 'jjlmoya — оригинальный звук',
212
+ ttAudio: 'jjlmoya - оригинальный звук',
213
213
  ttNavHome: 'Главная',
214
214
  ttNavFriends: 'Друзья',
215
215
  ttNavInbox: 'Входящие',
216
216
  ttNavProfile: 'Профиль',
217
217
  reelsFollow: 'Подписаться',
218
218
  reelsDescription: 'Этот интерфейс идентичен реальному. #reels #ux #simulator',
219
- reelsAudio: 'Trending Music — оригинальное аудио',
219
+ reelsAudio: 'Trending Music - оригинальное аудио',
220
220
  shortsSubscribe: 'ПОДПИСАТЬСЯ',
221
221
  shortsDislike: 'Не нравится',
222
222
  shortsShare: 'Поделиться',
@@ -34,7 +34,7 @@ const faqData = [
34
34
  const howToData = [
35
35
  {
36
36
  name: 'Ladda upp din bild eller video',
37
- text: 'Ladda upp filen du vill förhandsgranska. Bearbetningen sker lokalt och privat – inget laddas upp till internet.',
37
+ text: 'Ladda upp filen du vill förhandsgranska. Bearbetningen sker lokalt och privat - inget laddas upp till internet.',
38
38
  },
39
39
  {
40
40
  name: 'Välj plattform',
@@ -177,7 +177,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
177
177
  },
178
178
  {
179
179
  type: 'paragraph',
180
- html: 'Att designa för sociala medier handlar inte bara om estetik – det handlar om <strong>användbarhet</strong>. Om en användare måste kämpa för att läsa text för att plattformens ikoner täcker den, kommer de helt enkelt att svepa vidare till nästa video. Behållningen (Watch Time) sjunker kraftigt när det finns visuell friktion.',
180
+ html: 'Att designa för sociala medier handlar inte bara om estetik - det handlar om <strong>användbarhet</strong>. Om en användare måste kämpa för att läsa text för att plattformens ikoner täcker den, kommer de helt enkelt att svepa vidare till nästa video. Behållningen (Watch Time) sjunker kraftigt när det finns visuell friktion.',
181
181
  },
182
182
  {
183
183
  type: 'paragraph',
@@ -10,7 +10,7 @@ const description =
10
10
 
11
11
  const faqData = [
12
12
  {
13
- question: '什么是社交媒体上的“安全区域”?',
13
+ question: '什么是社交媒体上的\"安全区域\"?',
14
14
  answer:
15
15
  '安全区域是指屏幕上内容可见且不会被界面元素(如用户名、描述、交互按钮(点赞、分享))或某些设备应用的自动裁剪所遮挡的区域。',
16
16
  },
@@ -104,7 +104,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
104
104
  },
105
105
  {
106
106
  type: 'paragraph',
107
- html: '此工具允许您加载媒体文件,并准确预览画面的哪些部分会被界面遮挡。这不仅仅关乎<strong>字幕</strong>;它还关乎确保视频中的脸部、产品或主要动作不会被嵌入“点赞”按钮或冗长的描述之下。',
107
+ html: '此工具允许您加载媒体文件,并准确预览画面的哪些部分会被界面遮挡。这不仅仅关乎<strong>字幕</strong>;它还关乎确保视频中的脸部、产品或主要动作不会被嵌入\"点赞\"按钮或冗长的描述之下。',
108
108
  },
109
109
  {
110
110
  type: 'grid',
@@ -112,7 +112,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
112
112
  {
113
113
  type: 'card',
114
114
  title: 'TikTok:最具侵入性的界面',
115
- html: '<p>TikTok 的界面最为密集。在右侧,有一列图标占据了约 15% 的宽度。在底部,描述可以扩展到 4 或 5 行,从下方遮挡了近三分之一的屏幕。</p><ul><li><strong>底部边距:</strong>保留最后 250px 的自由空间,以避开描述文字和用户名。</li><li><strong>右侧边距:</strong>避免在距离右边缘 100px 范围内放置文字。</li><li><strong>顶部:</strong>“关注”和“推荐”按钮占据了顶部中央条案。</li></ul>',
115
+ html: '<p>TikTok 的界面最为密集。在右侧,有一列图标占据了约 15% 的宽度。在底部,描述可以扩展到 4 或 5 行,从下方遮挡了近三分之一的屏幕。</p><ul><li><strong>底部边距:</strong>保留最后 250px 的自由空间,以避开描述文字和用户名。</li><li><strong>右侧边距:</strong>避免在距离右边缘 100px 范围内放置文字。</li><li><strong>顶部:</strong>\"关注\"和\"推荐\"按钮占据了顶部中央条案。</li></ul>',
116
116
  },
117
117
  {
118
118
  type: 'card',
@@ -150,7 +150,7 @@ export const content: ToolLocaleContent<SafeZonesUI> = {
150
150
  },
151
151
  {
152
152
  type: 'paragraph',
153
- html: '主要动作的“黄金区域”是视频的中央三分之一。如果您正在拍摄人物,请确保他们的眼睛和嘴巴在这个区域内。重要的图形元素应从几何中心略微向上移动,以避开底部的描述。',
153
+ html: '主要动作的\"黄金区域\"是视频的中央三分之一。如果您正在拍摄人物,请确保他们的眼睛和嘴巴在这个区域内。重要的图形元素应从几何中心略微向上移动,以避开底部的描述。',
154
154
  },
155
155
  {
156
156
  type: 'title',
@@ -73,7 +73,7 @@ const icons: Record<string, string> = {
73
73
  <h2>{t.uploadTitle}</h2>
74
74
  <p>{t.uploadSubtitle}</p>
75
75
  </div>
76
- <input type="file" id="sri-file-input" accept="image/*" hidden />
76
+ <input type="file" id="sri-file-input" class="file-input" accept="image/*" hidden />
77
77
  </div>
78
78
 
79
79
  <div class="sri-editor-view" id="sri-editor-view">
@@ -84,7 +84,7 @@ const icons: Record<string, string> = {
84
84
  <div class="sri-editor-actions">
85
85
  <div class="sri-zoom-control">
86
86
  <span set:html={icons.zoomOut} />
87
- <input type="range" id="sri-zoom-range" min="10" max="300" value="100" />
87
+ <input type="range" id="sri-zoom-range" min="10" max="300" value="100" aria-label="Zoom" />
88
88
  <span set:html={icons.zoomIn} />
89
89
  </div>
90
90
 
@@ -91,7 +91,7 @@ export const content: ToolLocaleContent<SocialImageResizerUI> = {
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
94
- html: 'Im heutigen digitalen Ökosystem ist der erste Eindruck visuell. Jedes soziale Netzwerk arbeitet mit spezifischen Algorithmen, die Inhalte bevorzugen, die nativ an ihre Proportionen angepasst sind. Unser Social Media Image Resizer ist nicht nur ein technisches Werkzeug – er ist Ihr Partner, um sicherzustellen, dass Ihre Botschaft ohne unerwünschte Zuschnitte oder Qualitätsverluste ankommt.',
94
+ html: 'Im heutigen digitalen Ökosystem ist der erste Eindruck visuell. Jedes soziale Netzwerk arbeitet mit spezifischen Algorithmen, die Inhalte bevorzugen, die nativ an ihre Proportionen angepasst sind. Unser Social Media Image Resizer ist nicht nur ein technisches Werkzeug - er ist Ihr Partner, um sicherzustellen, dass Ihre Botschaft ohne unerwünschte Zuschnitte oder Qualitätsverluste ankommt.',
95
95
  },
96
96
  {
97
97
  type: 'paragraph',
@@ -105,10 +105,10 @@ export const content: ToolLocaleContent<SocialImageResizerUI> = {
105
105
  {
106
106
  type: 'grid',
107
107
  columns: [
108
- { title: 'Instagram — Quadratischer Post', body: '1080 × 1080 px · Verhältnis 1:1' },
109
- { title: 'Instagram — Vertikaler Post', body: '1080 × 1350 px · Verhältnis 4:5' },
110
- { title: 'TikTok / Reels — Vertikal', body: '1080 × 1920 px · Verhältnis 9:16' },
111
- { title: 'YouTube — Thumbnail', body: '1280 × 720 px · Verhältnis 16:9' },
108
+ { title: 'Instagram: Quadratischer Post', body: '1080 × 1080 px · Verhältnis 1:1' },
109
+ { title: 'Instagram: Vertikaler Post', body: '1080 × 1350 px · Verhältnis 4:5' },
110
+ { title: 'TikTok / Reels: Vertikal', body: '1080 × 1920 px · Verhältnis 9:16' },
111
+ { title: 'YouTube: Thumbnail', body: '1280 × 720 px · Verhältnis 16:9' },
112
112
  { title: 'YouTube Kanal Banner', body: '2560 × 1440 px · Verhältnis 16:9' },
113
113
  { title: 'X (Twitter) Standard Post', body: '1200 × 675 px · Verhältnis 16:9' },
114
114
  { title: 'LinkedIn Profil Header', body: '1584 × 396 px · Verhältnis 4:1' },
@@ -91,7 +91,7 @@ export const content: ToolLocaleContent<SocialImageResizerUI> = {
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
94
- html: "In today's digital ecosystem, first impressions are visual. Each social network operates under specific algorithms that prioritize content natively adapted to its proportions. Our social media image resizer is not just a technical tool — it is your ally to ensure your message arrives without unwanted crops or quality loss.",
94
+ html: "In today's digital ecosystem, first impressions are visual. Each social network operates under specific algorithms that prioritize content natively adapted to its proportions. Our social media image resizer is not just a technical tool - it is your ally to ensure your message arrives without unwanted crops or quality loss.",
95
95
  },
96
96
  {
97
97
  type: 'paragraph',
@@ -105,13 +105,13 @@ export const content: ToolLocaleContent<SocialImageResizerUI> = {
105
105
  {
106
106
  type: 'grid',
107
107
  columns: [
108
- { title: 'Instagram — Square Post', body: '1080 × 1080 px · Ratio 1:1' },
109
- { title: 'Instagram — Vertical Post', body: '1080 × 1350 px · Ratio 4:5' },
110
- { title: 'TikTok / Reels — Vertical', body: '1080 × 1920 px · Ratio 9:16' },
111
- { title: 'YouTube — Thumbnail', body: '1280 × 720 px · Ratio 16:9' },
112
- { title: 'YouTube — Channel Banner', body: '2560 × 1440 px · Ratio 16:9' },
113
- { title: 'X (Twitter) — Standard Post', body: '1200 × 675 px · Ratio 16:9' },
114
- { title: 'LinkedIn — Profile Cover', body: '1584 × 396 px · Ratio 4:1' },
108
+ { title: 'Instagram: Square Post', body: '1080 × 1080 px · Ratio 1:1' },
109
+ { title: 'Instagram: Vertical Post', body: '1080 × 1350 px · Ratio 4:5' },
110
+ { title: 'TikTok / Reels: Vertical', body: '1080 × 1920 px · Ratio 9:16' },
111
+ { title: 'YouTube: Thumbnail', body: '1280 × 720 px · Ratio 16:9' },
112
+ { title: 'YouTube: Channel Banner', body: '2560 × 1440 px · Ratio 16:9' },
113
+ { title: 'X (Twitter): Standard Post', body: '1200 × 675 px · Ratio 16:9' },
114
+ { title: 'LinkedIn: Profile Cover', body: '1584 × 396 px · Ratio 4:1' },
115
115
  ],
116
116
  },
117
117
  {