@jjlmoya/utils-tabletop 1.21.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -0
  3. package/src/entries.ts +4 -0
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +1 -1
  6. package/src/tests/seo_translation_completeness.test.ts +69 -0
  7. package/src/tests/tool_validation.test.ts +1 -1
  8. package/src/tool/decision-wheel/i18n/de.ts +10 -10
  9. package/src/tool/decision-wheel/i18n/es.ts +10 -10
  10. package/src/tool/decision-wheel/i18n/fr.ts +10 -10
  11. package/src/tool/decision-wheel/i18n/id.ts +10 -10
  12. package/src/tool/decision-wheel/i18n/it.ts +10 -10
  13. package/src/tool/decision-wheel/i18n/ja.ts +10 -10
  14. package/src/tool/decision-wheel/i18n/ko.ts +10 -10
  15. package/src/tool/decision-wheel/i18n/nl.ts +10 -10
  16. package/src/tool/decision-wheel/i18n/pl.ts +10 -10
  17. package/src/tool/decision-wheel/i18n/pt.ts +10 -10
  18. package/src/tool/decision-wheel/i18n/sv.ts +10 -10
  19. package/src/tool/decision-wheel/i18n/tr.ts +10 -10
  20. package/src/tool/decision-wheel/i18n/zh.ts +10 -10
  21. package/src/tool/dungeon-map-generator/bibliography.astro +16 -0
  22. package/src/tool/dungeon-map-generator/bibliography.ts +12 -0
  23. package/src/tool/dungeon-map-generator/component.astro +134 -0
  24. package/src/tool/dungeon-map-generator/controller.ts +242 -0
  25. package/src/tool/dungeon-map-generator/document.ts +72 -0
  26. package/src/tool/dungeon-map-generator/dom-views.ts +139 -0
  27. package/src/tool/dungeon-map-generator/editor.ts +57 -0
  28. package/src/tool/dungeon-map-generator/entry.ts +28 -0
  29. package/src/tool/dungeon-map-generator/evaluator.ts +40 -0
  30. package/src/tool/dungeon-map-generator/i18n/de.ts +172 -0
  31. package/src/tool/dungeon-map-generator/i18n/en.ts +172 -0
  32. package/src/tool/dungeon-map-generator/i18n/es.ts +172 -0
  33. package/src/tool/dungeon-map-generator/i18n/fr.ts +172 -0
  34. package/src/tool/dungeon-map-generator/i18n/id.ts +172 -0
  35. package/src/tool/dungeon-map-generator/i18n/it.ts +172 -0
  36. package/src/tool/dungeon-map-generator/i18n/ja.ts +172 -0
  37. package/src/tool/dungeon-map-generator/i18n/ko.ts +172 -0
  38. package/src/tool/dungeon-map-generator/i18n/nl.ts +172 -0
  39. package/src/tool/dungeon-map-generator/i18n/pl.ts +172 -0
  40. package/src/tool/dungeon-map-generator/i18n/pt.ts +172 -0
  41. package/src/tool/dungeon-map-generator/i18n/ru.ts +172 -0
  42. package/src/tool/dungeon-map-generator/i18n/sv.ts +172 -0
  43. package/src/tool/dungeon-map-generator/i18n/tr.ts +172 -0
  44. package/src/tool/dungeon-map-generator/i18n/zh.ts +172 -0
  45. package/src/tool/dungeon-map-generator/index.ts +11 -0
  46. package/src/tool/dungeon-map-generator/logic.test.ts +75 -0
  47. package/src/tool/dungeon-map-generator/logic.ts +255 -0
  48. package/src/tool/dungeon-map-generator/random-dungeon-map-generator.css +678 -0
  49. package/src/tool/dungeon-map-generator/seo.astro +16 -0
  50. package/src/tool/dungeon-map-generator/storage.ts +18 -0
  51. package/src/tool/dungeon-map-generator/ui.ts +53 -0
  52. package/src/tool/dungeon-map-generator/validation.ts +40 -0
  53. package/src/tool/hidden-role-dealer/i18n/de.ts +6 -6
  54. package/src/tool/hidden-role-dealer/i18n/id.ts +6 -6
  55. package/src/tool/hidden-role-dealer/i18n/it.ts +6 -6
  56. package/src/tool/hidden-role-dealer/i18n/ja.ts +6 -6
  57. package/src/tool/hidden-role-dealer/i18n/ko.ts +6 -6
  58. package/src/tool/hidden-role-dealer/i18n/nl.ts +6 -6
  59. package/src/tool/hidden-role-dealer/i18n/pl.ts +7 -7
  60. package/src/tool/hidden-role-dealer/i18n/pt.ts +7 -7
  61. package/src/tool/hidden-role-dealer/i18n/ru.ts +7 -7
  62. package/src/tool/hidden-role-dealer/i18n/sv.ts +7 -7
  63. package/src/tool/hidden-role-dealer/i18n/tr.ts +7 -7
  64. package/src/tool/hidden-role-dealer/i18n/zh.ts +9 -9
  65. package/src/tool/scatter-direction-selector/i18n/de.ts +9 -9
  66. package/src/tool/scatter-direction-selector/i18n/es.ts +9 -9
  67. package/src/tool/scatter-direction-selector/i18n/fr.ts +12 -12
  68. package/src/tool/scatter-direction-selector/i18n/id.ts +9 -9
  69. package/src/tool/scatter-direction-selector/i18n/it.ts +11 -11
  70. package/src/tool/scatter-direction-selector/i18n/ja.ts +8 -8
  71. package/src/tool/scatter-direction-selector/i18n/ko.ts +8 -8
  72. package/src/tool/scatter-direction-selector/i18n/nl.ts +9 -10
  73. package/src/tool/scatter-direction-selector/i18n/pl.ts +9 -9
  74. package/src/tool/scatter-direction-selector/i18n/pt.ts +12 -12
  75. package/src/tool/scatter-direction-selector/i18n/ru.ts +7 -7
  76. package/src/tool/scatter-direction-selector/i18n/sv.ts +9 -9
  77. package/src/tool/scatter-direction-selector/i18n/tr.ts +8 -8
  78. package/src/tool/scatter-direction-selector/i18n/zh.ts +11 -11
  79. package/src/tools.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-tabletop",
3
- "version": "1.21.0",
3
+ "version": "1.22.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -1,5 +1,6 @@
1
1
  import { diceRollerSimulator } from '../tool/dice-roller-simulator/entry';
2
2
  import { boardGameTimer } from '../tool/board-game-timer/entry';
3
+ import { dungeonMapGenerator } from '../tool/dungeon-map-generator/entry';
3
4
  import type { CategoryLocaleContent, KnownLocale } from '../types';
4
5
 
5
6
  export const tabletopCategory = {
@@ -7,6 +8,7 @@ export const tabletopCategory = {
7
8
  tools: [
8
9
  diceRollerSimulator,
9
10
  boardGameTimer,
11
+ dungeonMapGenerator,
10
12
  ],
11
13
  i18n: {
12
14
  de: () => import('./i18n/de').then((m) => m.content),
package/src/entries.ts CHANGED
@@ -18,6 +18,8 @@ export { hiddenRoleDealer } from './tool/hidden-role-dealer/entry';
18
18
  export type { HiddenRoleDealerUI, HiddenRoleDealerLocaleContent } from './tool/hidden-role-dealer/entry';
19
19
  export { scatterDirectionSelector } from './tool/scatter-direction-selector/entry';
20
20
  export type { ScatterSelectorUI, ScatterSelectorLocaleContent } from './tool/scatter-direction-selector/entry';
21
+ export { dungeonMapGenerator } from './tool/dungeon-map-generator/entry';
22
+ export type { DungeonMapGeneratorUI, DungeonMapGeneratorLocaleContent } from './tool/dungeon-map-generator/entry';
21
23
  export { tabletopCategory } from './category';
22
24
 
23
25
  import { diceRollerSimulator } from './tool/dice-roller-simulator/entry';
@@ -31,6 +33,7 @@ import { investigationBoard } from './tool/investigation-board/entry';
31
33
  import { lunarTideTracker } from './tool/lunar-tide-tracker/entry';
32
34
  import { hiddenRoleDealer } from './tool/hidden-role-dealer/entry';
33
35
  import { scatterDirectionSelector } from './tool/scatter-direction-selector/entry';
36
+ import { dungeonMapGenerator } from './tool/dungeon-map-generator/entry';
34
37
 
35
38
  export const ALL_ENTRIES = [
36
39
  diceRollerSimulator,
@@ -44,5 +47,6 @@ export const ALL_ENTRIES = [
44
47
  lunarTideTracker,
45
48
  hiddenRoleDealer,
46
49
  scatterDirectionSelector,
50
+ dungeonMapGenerator,
47
51
  ];
48
52
 
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ export { boardGameTimer, BOARD_GAME_TIMER_TOOL } from './tool/board-game-timer';
6
6
  export { fantasyRunesTranslator, FANTASY_RUNES_TRANSLATOR_TOOL } from './tool/fantasy-runes-translator';
7
7
  export { investigationBoard, INVESTIGATION_BOARD_TOOL } from './tool/investigation-board';
8
8
  export { lunarTideTracker, LUNAR_TIDE_TRACKER_TOOL } from './tool/lunar-tide-tracker';
9
+ export { dungeonMapGenerator, DUNGEON_MAP_GENERATOR_TOOL } from './tool/dungeon-map-generator';
9
10
 
10
11
 
11
12
  export type {
@@ -22,7 +22,7 @@ describe('Locale Completeness Validation', () => {
22
22
  });
23
23
 
24
24
  it('all tools registered', () => {
25
- expect(ALL_TOOLS.length).toBe(11);
25
+ expect(ALL_TOOLS.length).toBe(12);
26
26
  });
27
27
 
28
28
 
@@ -0,0 +1,69 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+
4
+ const ASIAN_LOCALES = ['ja', 'ko', 'zh'];
5
+
6
+ function getSimpleSectionLength(section: any): number {
7
+ if (section.type === 'title') return section.text ? section.text.length : 0;
8
+ if (section.type === 'paragraph') return section.html ? section.html.replace(/<[^>]*>/g, '').length : 0;
9
+ if (section.type === 'list') return section.items ? section.items.join('').length : 0;
10
+ return 0;
11
+ }
12
+
13
+ function getComplexSectionLength(section: any): number {
14
+ if (section.type === 'diagnostic' || section.type === 'tip') {
15
+ return (section.title ? section.title.length : 0) + (section.html ? section.html.replace(/<[^>]*>/g, '').length : 0);
16
+ }
17
+ if (section.type === 'table') {
18
+ return ((section.headers || []).join('').length) + ((section.rows || []).flat().join('').length);
19
+ }
20
+ return 0;
21
+ }
22
+
23
+ function getSectionLength(section: any): number {
24
+ return getSimpleSectionLength(section) || getComplexSectionLength(section);
25
+ }
26
+
27
+ function calculateSeoTextLength(seoSections: any[]): number {
28
+ return seoSections.reduce((acc, section) => acc + getSectionLength(section), 0);
29
+ }
30
+
31
+ function checkLocaleSeoLength(toolId: string, locale: string, localeLen: number, enLen: number): void {
32
+ const isAsian = ASIAN_LOCALES.includes(locale);
33
+ const minLength = Math.floor(enLen * (isAsian ? 0.25 : 0.70));
34
+ const msgType = isAsian ? 'suspiciously short' : 'truncated/lazy';
35
+
36
+ expect(
37
+ localeLen,
38
+ `[LAZY SEO TRANSLATION] Tool "${toolId}" locale "${locale}" SEO text is ${msgType} (${localeLen} chars vs EN ${enLen} chars, expected min ${minLength})`,
39
+ ).toBeGreaterThanOrEqual(minLength);
40
+ }
41
+
42
+ async function auditSingleLocale(toolId: string, locale: string, loader: any, enSeoLength: number): Promise<void> {
43
+ if (locale === 'en' || !loader) return;
44
+ const content = await loader();
45
+ if (!content.seo || !Array.isArray(content.seo)) return;
46
+
47
+ checkLocaleSeoLength(toolId, locale, calculateSeoTextLength(content.seo), enSeoLength);
48
+ }
49
+
50
+ describe('SEO Translation Completeness & Laziness Audit', () => {
51
+ ALL_TOOLS.forEach(({ entry }) => {
52
+ describe(`Tool: ${entry.id}`, () => {
53
+ it('should not have lazy or truncated SEO content compared to English reference', async () => {
54
+ const enLoader = entry.i18n['en' as keyof typeof entry.i18n];
55
+ if (!enLoader) return;
56
+
57
+ const enContent = await enLoader();
58
+ if (!enContent.seo || !Array.isArray(enContent.seo)) return;
59
+
60
+ const enSeoLength = calculateSeoTextLength(enContent.seo);
61
+
62
+ for (const [locale, loader] of Object.entries(entry.i18n)) {
63
+ await auditSingleLocale(entry.id, locale, loader, enSeoLength);
64
+ }
65
+ });
66
+ });
67
+ });
68
+ });
69
+
@@ -5,7 +5,7 @@ import { tabletopCategory } from '../data';
5
5
  describe('Tool Validation Suite', () => {
6
6
  describe('Library Registration', () => {
7
7
  it('should have tools in ALL_TOOLS', () => {
8
- expect(ALL_TOOLS.length).toBe(11);
8
+ expect(ALL_TOOLS.length).toBe(12);
9
9
  });
10
10
 
11
11
 
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Entscheidungsrad für Brettspiele und Gruppenaktivitäten', level: 2 },
32
- { type: 'paragraph', html: 'Das Entscheidungsrad ist ein vielseitiges Werkzeug für Brettspiele und Gruppenaktivitäten. Passen Sie die Segmente mit eigenen Namen und Farben an.' },
32
+ { type: 'paragraph', html: 'Das Entscheidungsrad ist ein vielseitiges Werkzeug für Brettspiele, Rollenspiele und Gruppenentscheidungen am Spieltisch. Mit diesem Zufallsgenerator lassen sich beliebige Optionen rasch und fair auslosen. Sie können jedes Segment mit individuellen Bezeichnungen, Farben und Gewichtungen gestalten, um Wahrscheinlichkeiten exakt an Ihre Spielregeln anzupassen.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'So Verwenden Sie das Entscheidungsrad', level: 2 },
43
- { type: 'paragraph', html: 'Wählen Sie eine Vorlage oder erstellen Sie eigene Segmente mit Gewichtungen, um die Gewinnwahrscheinlichkeiten anzupassen.' },
44
- { type: 'title', text: "Weitere Szenarien", level: 3 },
45
- { type: 'paragraph', html: "Nutzen Sie das Rad für Abstimmungen, Zufallsbegegnungen und Spielaktionen." },
46
- { type: 'title', text: "Vorlagen nutzen", level: 3 },
47
- { type: 'paragraph', html: "Vorlagen laden häufige Entscheidungen für Brettspiele sofort." },
48
- { type: 'title', text: "Gewichtungen einstellen", level: 3 },
49
- { type: 'paragraph', html: "Gewichtungen machen einzelne Ergebnisse häufiger oder seltener." },
50
- { type: 'title', text: "Verlauf prüfen", level: 3 },
51
- { type: 'paragraph', html: "Der Verlauf hält die letzten Drehungen für die Gruppe fest." },
43
+ { type: 'paragraph', html: 'Wählen Sie eine der vordefinierten Vorlagen wie Ja/Nein, D20, Gesinnungen oder Beuteseltenheit, oder erstellen Sie eine komplett benutzerdefinierte Liste. Über die Gewichtung von 1 bis 5 steuern Sie die Chance für jedes einzelne Feld. Ein Physikmodell simuliert Schwung und Reibung beim Drehen des Rades.' },
44
+ { type: 'title', text: 'Weitere Szenarien', level: 3 },
45
+ { type: 'paragraph', html: 'Nutzen Sie das Rad für spontane Gruppenabstimmungen, zufällige Begegnungen in Rollenspielen, die Vergabe von Spielzügen oder die zufällige Verteilung von Aufgaben und Beute unter den Spielern.' },
46
+ { type: 'title', text: 'Vorlagen nutzen', level: 3 },
47
+ { type: 'paragraph', html: 'Die integrierten Vorlagen laden häufig benötigte Brettspiel- und Pen-and-Paper-Entscheidungen mit einem einzigen Klick. Das spart wertvolle Vorbereitungszeit beim Spielabend.' },
48
+ { type: 'title', text: 'Gewichtungen einstellen', level: 3 },
49
+ { type: 'paragraph', html: 'Mit der Gewichtungsfunktion bestimmen Sie, wie groß einzelne Abschnitte auf dem Rad dargestellt werden. Höhere Werte erhöhen die Wahrscheinlichkeit, dass die Nadel auf diesem Segment landet.' },
50
+ { type: 'title', text: 'Verlauf prüfen', level: 3 },
51
+ { type: 'paragraph', html: 'Der integrierte Drehverlauf speichert die letzten Ergebnisse für alle Mitspieler transparent ab. Dadurch lässt sich jederzeit nachvollziehen, welche Entscheidungen in vorangegangenen Runden getroffen wurden.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Ruleta de Decisiones para Juegos de Mesa y Actividades', level: 2 },
32
- { type: 'paragraph', html: 'La ruleta de decisiones es una herramienta versátil para juegos de mesa y actividades grupales. Personaliza las secciones con tus propios textos y colores, luego gira para seleccionar un resultado aleatorio.' },
32
+ { type: 'paragraph', html: 'La ruleta de decisiones es una herramienta digital versátil para juegos de mesa, rol y dinámicas de grupo. Permite sortear opciones de manera rápida, imparcial y totalmente aleatoria. Puedes personalizar cada sección con textos, colores y pesos configurables para adaptar las probabilidades exactas a las reglas de tu partida.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Cómo Usar la Ruleta de Decisiones', level: 2 },
43
- { type: 'paragraph', html: 'La ruleta facilita elegir al azar entre un conjunto de opciones. Elige un preajuste o crea tus propias secciones con diferentes pesos para ajustar las probabilidades.' },
44
- { type: 'title', text: "Más escenarios de decisión", level: 3 },
45
- { type: 'paragraph', html: "Usa la ruleta para votaciones, encuentros aleatorios y acciones de la partida." },
46
- { type: 'title', text: "Plantillas para juegos de mesa", level: 3 },
47
- { type: 'paragraph', html: "Las plantillas cargan rápidamente decisiones habituales de juegos de mesa." },
48
- { type: 'title', text: "Ajustar pesos de resultado", level: 3 },
49
- { type: 'paragraph', html: "Los pesos hacen que determinados resultados aparezcan más o menos veces." },
50
- { type: 'title', text: "Revisar el historial", level: 3 },
51
- { type: 'paragraph', html: "El historial conserva los últimos giros para que el grupo los revise." },
43
+ { type: 'paragraph', html: 'Selecciona una de las plantillas integradas como Sí/No, D20, Alineamientos o Botín, o construye tu propia lista personalizada. Ajusta los pesos de 1 a 5 para modificar la frecuencia con la que aparece cada resultado. El motor de físicas simula la inercia y fricción de giro para dar emoción a cada tirada.' },
44
+ { type: 'title', text: 'Más escenarios de decisión', level: 3 },
45
+ { type: 'paragraph', html: 'Utiliza la ruleta para organizar votaciones rápidas en el grupo, generar encuentros aleatorios en partidas de rol, repartir turnos de juego o decidir qué jugador escoge primero su personaje.' },
46
+ { type: 'title', text: 'Plantillas para juegos de mesa', level: 3 },
47
+ { type: 'paragraph', html: 'Las plantillas prediseñadas te permiten cargar decisiones frecuentes en segundos, ahorrando tiempo durante tus sesiones de juego de mesa y reduciendo las discusiones en la mesa.' },
48
+ { type: 'title', text: 'Ajustar pesos de resultado', level: 3 },
49
+ { type: 'paragraph', html: 'Los pesos permiten equilibrar o sesgar los resultados de la ruleta. Al aumentar el peso de una sección, esta ocupará un arco proporcionalmente mayor en el círculo, incrementando la probabilidad de ser seleccionada.' },
50
+ { type: 'title', text: 'Revisar el historial', level: 3 },
51
+ { type: 'paragraph', html: 'El panel de historial conserva los últimos giros para que todos los jugadores puedan comprobar los resultados anteriores con total transparencia durante la partida.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Roue de Décision pour Jeux de Société et Activités de Groupe', level: 2 },
32
- { type: 'paragraph', html: 'La roue de décision est un outil polyvalent pour les jeux de rôle et de plateau. Personnalisez les textes et couleurs des segments et lancez la roue.' },
32
+ { type: 'paragraph', html: 'La roue de décision est un outil numérique polyvalent pour les jeux de rôle, jeux de plateau et animations de groupe. Elle permet de tirer au sort des options de manière rapide, équitable et totalement aléatoire. Personnalisez chaque secteur avec vos propres textes, couleurs et poids configurables pour adapter les probabilités exactes aux règles de votre partie.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Comment Utiliser la Roue de Décision', level: 2 },
43
- { type: 'paragraph', html: 'Choisissez un modèle prédéfini ou créez vos propres options avec des poids personnalisés pour ajuster les probabilités de chaque secteur.' },
44
- { type: 'title', text: "Autres scénarios de décision", level: 3 },
45
- { type: 'paragraph', html: "Utilisez la roue pour les votes, les rencontres aléatoires et les actions de partie." },
46
- { type: 'title', text: "Modèles pour les jeux de plateau", level: 3 },
47
- { type: 'paragraph', html: "Les modèles chargent rapidement les décisions courantes des jeux de plateau." },
48
- { type: 'title', text: "Régler les pondérations", level: 3 },
49
- { type: 'paragraph', html: "Les pondérations rendent certains résultats plus ou moins fréquents." },
50
- { type: 'title', text: "Consulter l'historique", level: 3 },
51
- { type: 'paragraph', html: "L'historique conserve les derniers tours pour le groupe." },
43
+ { type: 'paragraph', html: 'Choisissez un modèle prédéfini comme Oui/Non, D20, Alignements ou Butin, ou créez votre propre liste personnalisée. Réglez les poids de 1 à 5 pour modifier la fréquence d apparition de chaque résultat. Le moteur physique simule l inertie et le frottement de rotation pour ajouter du suspense à chaque tirage.' },
44
+ { type: 'title', text: 'Autres scénarios de décision', level: 3 },
45
+ { type: 'paragraph', html: 'Utilisez la roue pour organiser des votes rapides au sein du groupe, générer des rencontres aléatoires en jeu de rôle, distribuer les tours de jeu ou désigner le joueur qui choisit son personnage en premier.' },
46
+ { type: 'title', text: 'Modèles pour les jeux de plateau', level: 3 },
47
+ { type: 'paragraph', html: 'Les modèles préconçus vous permettent de charger les décisions fréquentes en quelques secondes, ce qui gagne un temps précieux pendant vos soirées jeux et évite les hésitations inutiles.' },
48
+ { type: 'title', text: 'Régler les pondérations', level: 3 },
49
+ { type: 'paragraph', html: 'Les pondérations vous permettent de balancer ou d orienter les tirages. En augmentant le poids d un segment, celui-ci occupe un arc proportionnellement plus grand sur la roue, augmentant sa chance d être désigné.' },
50
+ { type: 'title', text: 'Consulter l historique', level: 3 },
51
+ { type: 'paragraph', html: 'L historique conserve les dix derniers tirages pour que l ensemble des joueurs puisse vérifier les résultats précédents en toute transparence au fil de la session.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Roda Keputusan untuk Permainan Papan and Aktivitas Kelompok', level: 2 },
32
- { type: 'paragraph', html: 'Roda keputusan adalah alat serbaguna untuk permainan papan. Sesuaikan label dan warna segmen, lalu putar untuk memilih hasil secara acak.' },
32
+ { type: 'paragraph', html: 'Roda keputusan adalah alat digital serbaguna untuk permainan papan, RPG tabletop, dan aktivitas kelompok. Alat ini memungkinkan Anda menentukan pilihan acak secara cepat, adil, dan tanpa prasangka. Setiap segmen dapat disesuaikan dengan nama kustom, warna, dan bobot probabilitas yang dapat diatur sesuai kebutuhan permainan Anda.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Cara Menggunakan Roda Keputusan', level: 2 },
43
- { type: 'paragraph', html: 'Pilih prasetel atau buat segmen Anda sendiri dengan bobot untuk menyesuaikan probabilitas setiap pilihan.' },
44
- { type: 'title', text: "Skenario tambahan", level: 3 },
45
- { type: 'paragraph', html: "Gunakan roda untuk pemungutan suara, pertemuan acak, dan aksi permainan." },
46
- { type: 'title', text: "Preset permainan meja", level: 3 },
47
- { type: 'paragraph', html: "Preset memuat keputusan umum permainan meja dengan cepat." },
48
- { type: 'title', text: "Mengatur bobot hasil", level: 3 },
49
- { type: 'paragraph', html: "Bobot membuat hasil tertentu lebih sering atau lebih jarang muncul." },
50
- { type: 'title', text: "Meninjau riwayat", level: 3 },
51
- { type: 'paragraph', html: "Riwayat menyimpan putaran terbaru untuk ditinjau bersama." },
43
+ { type: 'paragraph', html: 'Pilih salah satu prasetel siap pakai seperti Ya/Tidak, D20, Aliansi, atau Kelangkaan Jarahan, atau buat daftar kustom Anda sendiri. Atur bobot dari 1 hingga 5 untuk menentukan frekuensi kemunculan setiap opsi. Mesin simulasi fisik memberikan sensasi putaran yang realistis saat roda berputar.' },
44
+ { type: 'title', text: 'Skenario tambahan', level: 3 },
45
+ { type: 'paragraph', html: 'Gunakan roda acak ini untuk voting kelompok dengan cepat, menentukan pertemuan acak dalam permainan peran (RPG), membagikan giliran pemain, atau memilih tantangan seru secara adil.' },
46
+ { type: 'title', text: 'Preset permainan meja', level: 3 },
47
+ { type: 'paragraph', html: 'Prasetel bawaan memungkinkan Anda memuat keputusan umum dalam hitungan detik, menghemat waktu persiapan permainan dan menghindari perdebatan antar pemain.' },
48
+ { type: 'title', text: 'Mengatur bobot hasil', level: 3 },
49
+ { type: 'paragraph', html: 'Fitur bobot memungkinkan Anda menyesuaikan peluang setiap segmen. Menambah bobot akan memperbesar area segmen pada roda, meningkatkan probabilitas segmen tersebut terpilih saat roda berhenti.' },
50
+ { type: 'title', text: 'Meninjau riwayat', level: 3 },
51
+ { type: 'paragraph', html: 'Panel riwayat menyimpan sepuluh putaran terakhir secara transparan agar seluruh pemain dapat memverifikasi hasil-hasil sebelumnya selama sesi permainan berlangsung.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Ruota delle Decisioni per Giochi da Tavolo e Attività di Gruppo', level: 2 },
32
- { type: 'paragraph', html: 'La ruota delle decisioni è uno strumento versatile per giochi di ruolo e da tavolo. Personalizza gli spicchi con testi e colori.' },
32
+ { type: 'paragraph', html: 'La ruota delle decisioni è uno strumento digitale versatile per giochi da tavolo, RPG e attività di gruppo. Permette di sorteggiare opzioni casuali in modo rapido, equo e completamente imparziale. Ogni spicchio può essere personalizzato con testi, colori e pesi di probabilità configurabili secondo le regole del tuo gioco.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Come Usare la Ruota delle Decisioni', level: 2 },
43
- { type: 'paragraph', html: 'Scegli un set preimpostato o crea i tuoi spicchi personali impostando pesi diversi per calibrare le probabilità.' },
44
- { type: 'title', text: "Altri scenari decisionali", level: 3 },
45
- { type: 'paragraph', html: "Usa la ruota per votazioni, incontri casuali e azioni durante la partita." },
46
- { type: 'title', text: "Preset per giochi da tavolo", level: 3 },
47
- { type: 'paragraph', html: "I preset caricano rapidamente le decisioni comuni dei giochi da tavolo." },
48
- { type: 'title', text: "Regolare i pesi", level: 3 },
49
- { type: 'paragraph', html: "I pesi rendono alcuni risultati più o meno frequenti." },
50
- { type: 'title', text: "Consultare la cronologia", level: 3 },
51
- { type: 'paragraph', html: "La cronologia conserva gli ultimi giri per il gruppo." },
43
+ { type: 'paragraph', html: 'Scegli uno dei preset pronti all uso come Sì/No, D20, Allineamenti o Bottino, oppure crea la tua lista personalizzata. Regola i pesi da 1 a 5 per modificare la frequenza di comparsa di ciascun risultato. Il motore fisico simula inerzia e attrito di rotazione per aggiungere suspense a ogni tiro.' },
44
+ { type: 'title', text: 'Altri scenari decisionali', level: 3 },
45
+ { type: 'paragraph', html: 'Utilizza la ruota per organizzare votazioni rapide del gruppo, generare incontri casuali nei giochi di ruolo, distribuire i turni di gioco o scegliere quale giocatore seleziona per primo il personaggio.' },
46
+ { type: 'title', text: 'Preset per giochi da tavolo', level: 3 },
47
+ { type: 'paragraph', html: 'I preset predefiniti ti consentono di caricare decisioni comuni in pochi secondi, risparmiando tempo prezioso durante le serate di gioco ed evitando discussioni al tavolo.' },
48
+ { type: 'title', text: 'Regolare i pesi', level: 3 },
49
+ { type: 'paragraph', html: 'I pesi ti permettono di bilanciare o orientare i risultati. Aumentando il peso di uno spicchio, questo occuperà un arco proporzionalmente maggiore sulla ruota, incrementando la probabilità di selezione.' },
50
+ { type: 'title', text: 'Consultare la cronologia', level: 3 },
51
+ { type: 'paragraph', html: 'Il pannello della cronologia conserva i dieci giri recenti affinché tutti i giocatori possano verificare i risultati precedenti in totale trasparenza durante la sessione.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'ボードゲームやグループ活動で使える意思決定ホイール', level: 2 },
32
- { type: 'paragraph', html: '意思決定ホイールは、ボードゲームやグループのアクティビティで役立つ多目的ツールです。項目と色を自由に設定できます。' },
32
+ { type: 'paragraph', html: '意思決定ホイールは、ボードゲーム、TRPG、グループのアクティビティで役立つデジタル抽選ツールです。公正かつ完全なランダムで選択肢を決定できます。セグメントごとにラベル、カラー、当選確率の重み(ウェイト)を自由自在にカスタマイズ可能です。' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: '意思決定ホイールの使い方', level: 2 },
43
- { type: 'paragraph', html: 'プリセットを選ぶか、独自の項目を作成して重みを設定し、当選確率を自由にコントロールできます。' },
44
- { type: 'title', text: "その他のシナリオ", level: 3 },
45
- { type: 'paragraph', html: "投票、ランダムイベント、ゲーム中の行動選択にホイールを使えます。" },
46
- { type: 'title', text: "卓上ゲームのプリセット", level: 3 },
47
- { type: 'paragraph', html: "プリセットで卓上ゲームの一般的な選択肢をすぐに読み込めます。" },
48
- { type: 'title', text: "重みを調整する", level: 3 },
49
- { type: 'paragraph', html: "重みを変えると結果の出やすさを調整できます。" },
50
- { type: 'title', text: "履歴を確認する", level: 3 },
51
- { type: 'paragraph', html: "履歴には最近のスピンが残り、グループで確認できます。" },
43
+ { type: 'paragraph', html: '「はい/いいえ」「D20」「属性」「戦利品」などの便利なプリセットを選択するか、オリジナルの項目を自由に作成してください。重みを1から5まで調整することで、特定の選択肢が出やすくなる確率を細かくコントロールできます。物理シミュレーションによる回転アニメーションが緊張感を高めます。' },
44
+ { type: 'title', text: 'その他のシナリオ', level: 3 },
45
+ { type: 'paragraph', html: 'グループでのクイック投票、TRPGでのランダムエンカウント決定、プレイヤーの順番決め、罰ゲームの選定など、幅広い用途で活用いただけます。' },
46
+ { type: 'title', text: '卓上ゲームのプリセット', level: 3 },
47
+ { type: 'paragraph', html: 'よく使われる判定用プリセットが最初から用意されているため、ゲーム準備の時間を短縮し、ゲームセッションをスムーズに進行できます。' },
48
+ { type: 'title', text: '重みを調整する', level: 3 },
49
+ { type: 'paragraph', html: '重み(ウェイト)を増やすと、ホイール上の面積が大きくなり、その項目が選ばれる確率が比例して高くなります。' },
50
+ { type: 'title', text: '履歴を確認する', level: 3 },
51
+ { type: 'paragraph', html: 'スピン履歴パネルには直近10回の結果が保存されるため、グループ全員で過去の抽選結果を透明性をもって確認できます。' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: '보드게임 및 그룹 모임을 위한 결정 휠 선택기', level: 2 },
32
- { type: 'paragraph', html: '결정 휠은 보드게임에 유용한 다목적 랜덤 선택 툴입니다. 자신만의 라벨과 색상으로 휠을 자유롭게 디자인해보세요.' },
32
+ { type: 'paragraph', html: '결정 휠은 보드게임, TRPG, 파티 모임에서 유용한 디지털 무작위 추첨 도구입니다. 공정하고 완전히 무작위로 선택지를 결정할 수 있습니다. 항목별 라벨, 색상, 당첨 확률 가중치를 자유롭게 설정해 플레이 규칙에 맞게 맞춤형 휠을 구성할 수 있습니다.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: '결정 휠 사용법', level: 2 },
43
- { type: 'paragraph', html: '준비된 프리셋을 불러오거나 직접 항목을 만들고 가중치를 조절해 당첨 확률을 다르게 구성할 수 있습니다.' },
44
- { type: 'title', text: "추가 시나리오", level: 3 },
45
- { type: 'paragraph', html: "투표, 무작위 만남, 게임 행동 선택에 룰렛을 사용할 수 있습니다." },
46
- { type: 'title', text: "테이블탑 게임 프리셋", level: 3 },
47
- { type: 'paragraph', html: "프리셋으로 테이블탑 게임의 일반적인 선택지를 빠르게 불러옵니다." },
48
- { type: 'title', text: "결과 가중치 조정", level: 3 },
49
- { type: 'paragraph', html: "가중치를 바꾸면 결과가 나올 가능성을 조절할 있습니다." },
50
- { type: 'title', text: "회전 기록 확인", level: 3 },
51
- { type: 'paragraph', html: "기록에는 최근 회전 결과가 남아 그룹이 확인할 수 있습니다." },
43
+ { type: 'paragraph', html: '예/아니오, D20, 성향, 전리품 등 미리 준비된 템플릿을 선택하거나 나만의 무작위 항목을 생성해보세요. 가중치를 1부터 5까지 조정하여 특정 선택지가 당첨될 확률을 세밀하게 제어할 수 있습니다. 감속 물리가 적용된 부드러운 회전 애니메이션이 긴장감을 더해줍니다.' },
44
+ { type: 'title', text: '추가 시나리오', level: 3 },
45
+ { type: 'paragraph', html: '모임 내 빠른 투표, TRPG 무작위 인카운터 결정, 플레이 순서 정하기, 벌칙 수행자 선정 등 다양한 상황에서 편리하게 활용할 수 있습니다.' },
46
+ { type: 'title', text: '테이블탑 게임 프리셋', level: 3 },
47
+ { type: 'paragraph', html: '자주 쓰이는 결정 템플릿이 미리 준비되어 있어 게임 준비 시간을 단축하고 세션을 매끄럽게 진행할 수 있습니다.' },
48
+ { type: 'title', text: '결과 가중치 조정', level: 3 },
49
+ { type: 'paragraph', html: '가중치를 높이면 휠에서 차지하는 영역이 넓어져 해당 항목이 선택될 확률이 높아집니다.' },
50
+ { type: 'title', text: '회전 기록 확인', level: 3 },
51
+ { type: 'paragraph', html: '최근 10회의 회전 기록이 저장되므로 그룹 구성원 모두가 결과를 투명하게 확인할 수 있습니다.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Beslissingsrad voor Bordspellen en Groepsactiviteiten', level: 2 },
32
- { type: 'paragraph', html: 'Het beslissingsrad is een veelzijdige tool voor bordspellen en groepen. Pas segmenten aan met uw eigen labels en kleuren.' },
32
+ { type: 'paragraph', html: 'Het beslissingsrad is een veelzijdige digitale tool voor bordspellen, RPGs en groepsactiviteiten. Het maakt het mogelijk om snel, eerlijk en volkomen willekeurig keuzes te maken. Elk segment kan worden aangepast met uw eigen teksten, kleuren en gewichten om de exacte kansen per optie in te stellen.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Hoe het Beslissingsrad te Gebruiken', level: 2 },
43
- { type: 'paragraph', html: 'Kies een voorinstelling of maak uw eigen segmenten met gewichten om de kansen per keuze te bepalen.' },
44
- { type: 'title', text: "Meer beslisscenario's", level: 3 },
45
- { type: 'paragraph', html: "Gebruik het rad voor stemmingen, willekeurige ontmoetingen en spelacties." },
46
- { type: 'title', text: "Sjablonen voor bordspellen", level: 3 },
47
- { type: 'paragraph', html: "Sjablonen laden veelvoorkomende keuzes voor bordspellen snel." },
48
- { type: 'title', text: "Uitkomsten wegen", level: 3 },
49
- { type: 'paragraph', html: "Met gewichten maak je uitkomsten vaker of zeldzamer." },
50
- { type: 'title', text: "De geschiedenis bekijken", level: 3 },
51
- { type: 'paragraph', html: "De geschiedenis bewaart recente draaien voor de groep." },
43
+ { type: 'paragraph', html: 'Kies een kant-en-klare voorinstelling zoals Ja/Nee, D20, Alignment of Buit, of stel uw eigen aangepaste lijst samen. Pas het gewicht aan van 1 tot 5 om de frequentie van elke optie te beïnvloeden. De natuurkundige animatie simuleert wrijving en vertraging voor extra spanning bij elke draai.' },
44
+ { type: 'title', text: 'Meer beslisscenarios', level: 3 },
45
+ { type: 'paragraph', html: 'Gebruik het rad voor snelle stemmingen in de groep, willekeurige ontmoetingen in rollenspellen, het verdelen van beurten of het kiezen van een startspeler.' },
46
+ { type: 'title', text: 'Sjablonen voor bordspellen', level: 3 },
47
+ { type: 'paragraph', html: 'Met de ingebouwde sjablonen laadt u veelvoorkomende spelbeslissingen in enkele seconden, wat tijd bespaart tijdens spelsessies en discussies aan tafel voorkomt.' },
48
+ { type: 'title', text: 'Uitkomsten wegen', level: 3 },
49
+ { type: 'paragraph', html: 'Door gewichten aan te passen kunt u de kansen van uitkomsten beïnvloeden. Een hoger gewicht vergroot het oppervlak op het rad, waardoor de kans dat die optie wordt gekozen toeneemt.' },
50
+ { type: 'title', text: 'De geschiedenis bekijken', level: 3 },
51
+ { type: 'paragraph', html: 'Het geschiedenispaneel bewaart de laatste tien draaien zodat alle spelers eerdere uitkomsten in volledige transparantie kunnen controleren.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Koło Decyzyjne do Gier Planszowych i Zabaw Grupowych', level: 2 },
32
- { type: 'paragraph', html: 'Koło decyzyjne to uniwersalne narzędzie do gier planszowych. Dostosuj wycinki za pomocą własnych etykiet i kolorów.' },
32
+ { type: 'paragraph', html: 'Koło decyzyjne to uniwersalne cyfrowe narzędzie do gier planszowych, RPG oraz zabaw grupowych. Pozwala na szybkie, sprawiedliwe i całkowicie losowe wybieranie opcji. Każdy wycinek można dostosować za pomocą własnych etykiet, kolorów i wag prawdopodobieństwa dopasowanych do zasad Waszej gry.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Jak Używać Koła Decyzyjnego', level: 2 },
43
- { type: 'paragraph', html: 'Wybierz gotowy szablon lub stwórz własne wycinki z wagami określającymi szansę wylosowania każdej opcji.' },
44
- { type: 'title', text: "Dodatkowe scenariusze", level: 3 },
45
- { type: 'paragraph', html: "Użyj koła do głosowań, losowych spotkań i wyboru działań w grze." },
46
- { type: 'title', text: "Szablony do gier planszowych", level: 3 },
47
- { type: 'paragraph', html: "Szablony szybko wczytują typowe wybory w grach planszowych." },
48
- { type: 'title', text: "Ustawianie wag", level: 3 },
49
- { type: 'paragraph', html: "Wagi sprawiają, że wyniki pojawiają się częściej lub rzadziej." },
50
- { type: 'title', text: "Sprawdzanie historii", level: 3 },
51
- { type: 'paragraph', html: "Historia zachowuje ostatnie losowania dla całej grupy." },
43
+ { type: 'paragraph', html: 'Wybierz gotowy szablon taki jak Tak/Nie, D20, Charakter czy Łupy, albo stwórz własną listę opcji. Ustaw wagi od 1 do 5, aby modyfikować częstotliwość pojawiania się poszczególnych wyników. Fizyczna animacja obrotu symuluje tarcie i zwalnianie dla maksymalnych emocji.' },
44
+ { type: 'title', text: 'Dodatkowe scenariusze', level: 3 },
45
+ { type: 'paragraph', html: 'Użyj koła do szybkich głosowań w grupie, losowych spotkań w grach fabularnych, przydzielania kolejności graczy lub wyznaczania wyzwań na imprezie.' },
46
+ { type: 'title', text: 'Szablony do gier planszowych', level: 3 },
47
+ { type: 'paragraph', html: 'Wbudowane szablony pozwalają wczytać najczęstsze wybory planszowe w kilka sekund, oszczędzając czas i zapobiegając niepotrzebnym dyskusjom przy stole.' },
48
+ { type: 'title', text: 'Ustawianie wag', level: 3 },
49
+ { type: 'paragraph', html: 'Modyfikacja wag pozwala zbalansować szanse. Wyższa waga zwiększa łuk wycinka na kole, podnosząc prawdopodobieństwo jego wylosowania.' },
50
+ { type: 'title', text: 'Sprawdzanie historii', level: 3 },
51
+ { type: 'paragraph', html: 'Panel historii zachowuje 10 ostatnich losowań, aby wszyscy gracze mogli przejrzyście weryfikować wcześniejsze wyniki w trakcie rozgrywki.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Roleta de Decisões para Jogos de Tabuleiro e Atividades', level: 2 },
32
- { type: 'paragraph', html: 'A roleta de decisões é uma ferramenta versátil para jogos de mesa. Personalize as fatias com seus textos e cores e gire.' },
32
+ { type: 'paragraph', html: 'A roleta de decisões é uma ferramenta digital versátil para jogos de tabuleiro, RPGs e dinâmicas de grupo. Ela permite sortear opções de forma rápida, justa e totalmente aleatória. Cada fatia pode ser personalizada com seus próprios textos, cores e pesos configuráveis para ajustar as probabilidades exatas do seu jogo.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Como Usar a Roleta de Decisões', level: 2 },
43
- { type: 'paragraph', html: 'Selecione uma configuração padrão ou crie fatias com pesos diferentes para alterar as chances de vitória.' },
44
- { type: 'title', text: "Mais cenários de decisão", level: 3 },
45
- { type: 'paragraph', html: "Use a roda para votações, encontros aleatórios e ações durante a partida." },
46
- { type: 'title', text: "Predefinições para jogos de mesa", level: 3 },
47
- { type: 'paragraph', html: "As predefinições carregam rapidamente escolhas comuns dos jogos de mesa." },
48
- { type: 'title', text: "Ajustar os pesos", level: 3 },
49
- { type: 'paragraph', html: "Os pesos tornam certos resultados mais ou menos frequentes." },
50
- { type: 'title', text: "Consultar o histórico", level: 3 },
51
- { type: 'paragraph', html: "O histórico guarda os giros recentes para o grupo." },
43
+ { type: 'paragraph', html: 'Escolha uma das predefinições prontas como Sim/Não, D20, Alinhamento ou Saque de Tesouros, ou crie sua própria lista personalizada. Ajuste os pesos de 1 a 5 para alterar a frequência com que cada opção é sorteada. O motor de física simula a inércia e o atrito de rotação para trazer emoção a cada giro.' },
44
+ { type: 'title', text: 'Mais cenários de decisão', level: 3 },
45
+ { type: 'paragraph', html: 'Use a roda para organizar votações rápidas no grupo, gerar encontros aleatórios em jogos de RPG, distribuir os turnos de jogo ou escolher qual jogador escolhe o personagem primeiro.' },
46
+ { type: 'title', text: 'Predefinições para jogos de mesa', level: 3 },
47
+ { type: 'paragraph', html: 'As predefinições permitem carregar decisões frequentes em segundos, economizando tempo precioso durante suas sessões de jogo e evitando discussões desnecessárias à mesa.' },
48
+ { type: 'title', text: 'Ajustar os pesos', level: 3 },
49
+ { type: 'paragraph', html: 'Os pesos permitem balancear ou direcionar os resultados. Aumentar o peso de uma fatia fará com que ela ocupe um arco proporcionalmente maior na roleta, aumentando a chance de ser sorteada.' },
50
+ { type: 'title', text: 'Consultar o histórico', level: 3 },
51
+ { type: 'paragraph', html: 'O painel de histórico guarda os dez giros mais recentes para que todos os jogadores possam verificar os resultados anteriores com total transparência ao longo da partida.' },
52
52
  ],
53
53
  faq: [
54
54
  {
@@ -29,7 +29,7 @@ export const content: DecisionWheelLocaleContent = {
29
29
  },
30
30
  seo: [
31
31
  { type: 'title', text: 'Beslutshjul för Brädspel och Gruppaktiviteter', level: 2 },
32
- { type: 'paragraph', html: 'Beslutshjulet är ett mångsidigt verktyg för brädspel. Anpassa segmenten med dina egna texter och färger.' },
32
+ { type: 'paragraph', html: 'Beslutshjulet är ett mångsidigt digitalt verktyg för brädspel, rollspel och gruppaktiviteter. Det gör det möjligt att avgöra val snabbt, rättvist och helt slumpmässigt. Varje segment kan anpassas med egna etiketter, färger och sannolikhetsvikter för att passa just ditt spel.' },
33
33
  {
34
34
  type: 'stats',
35
35
  items: [
@@ -40,15 +40,15 @@ export const content: DecisionWheelLocaleContent = {
40
40
  columns: 3,
41
41
  },
42
42
  { type: 'title', text: 'Hur du Använder Beslutshjulet', level: 2 },
43
- { type: 'paragraph', html: 'Välj en mall eller skapa dina egna segment med vikter för att justera chanserna för varje val.' },
44
- { type: 'title', text: "Fler beslutsscenarier", level: 3 },
45
- { type: 'paragraph', html: "Använd hjulet för omröstningar, slumpmöten och handlingsval i spelet." },
46
- { type: 'title', text: "Mallar för sällskapsspel", level: 3 },
47
- { type: 'paragraph', html: "Mallar laddar vanliga val för sällskapsspel snabbt." },
48
- { type: 'title', text: "Justera resultatvikter", level: 3 },
49
- { type: 'paragraph', html: "Vikter gör vissa resultat vanligare eller mer sällsynta." },
50
- { type: 'title', text: "Granska historiken", level: 3 },
51
- { type: 'paragraph', html: "Historiken sparar de senaste snurren för gruppen." },
43
+ { type: 'paragraph', html: 'Välj en färdig mall som Ja/Nej, D20, Alignment eller Bytesskatter, eller skapa din egen anpassade lista. Justera vikterna från 1 till 5 för att ändra hur ofta varje alternativ dras. Fysikmotorn simulerar friktion och inbromsning för att ge spänning åt varje snurr.' },
44
+ { type: 'title', text: 'Fler beslutsscenarier', level: 3 },
45
+ { type: 'paragraph', html: 'Använd hjulet för snabba omröstningar i gruppen, slumpmässiga möten i rollspel, fördelning av spelturer eller för att välja vilken spelare som väljer karaktär först.' },
46
+ { type: 'title', text: 'Mallar för sällskapsspel', level: 3 },
47
+ { type: 'paragraph', html: 'De inbyggda mallarna låter dig ladda vanliga beslut ett par sekunder, vilket sparar värdefull tid under spelsessioner och undviker onödiga diskussioner runt bordet.' },
48
+ { type: 'title', text: 'Justera resultatvikter', level: 3 },
49
+ { type: 'paragraph', html: 'Genom att ändra vikter kan du balansera eller styra dragningschanserna. En högre vikt ger segmentet en större yta på hjulet, vilket ökar sannolikheten att det väljs.' },
50
+ { type: 'title', text: 'Granska historiken', level: 3 },
51
+ { type: 'paragraph', html: 'Historikpanelen sparar de senaste tio snurren att alla spelare kan kontrollera tidigare resultat i full transparens under spelets gång.' },
52
52
  ],
53
53
  faq: [
54
54
  {