Add 22 word pools with impostor variants, multi-pool selection, and mobile-optimized UI

Features:
- Impostor-specific words: Each civilian word now has a related impostor word
- 22 word pools total (2 local offline, 20 remote)
- Multi-pool selection: Combine multiple categories simultaneously
- Descriptive category names based on content analysis

Word pools added:
- Local: Animales y Naturaleza (88), Objetos Cotidianos (99)
- Remote: Marcas y Empresas, Profesiones, Comida y Bebidas, Lugares del Mundo,
  Deportes, Películas y Series, Escuela, Tecnología, Vehículos, Instrumentos,
  Videojuegos, Personajes (Anime, Disney, Ficción), Artistas Latinos,
  Marcas de Lujo, Cuerpo Humano, Playa y Verano, Amor y Romance, Navidad

UI improvements:
- Mobile-first: No scrolling on main setup screen
- Compact layout: Reduced padding, margins, and font sizes
- Hidden scrollbar: Pool selector with gradient fade effect
- Responsive grid: 2-column pool buttons with smooth touch scrolling
- Updated labels: Shortened for better mobile fit

Technical changes:
- New word format: civilian_word|impostor_word in .txt files
- Updated manifest.json with all 22 pools
- Enhanced pickWords() to merge multiple selected pools
- Improved caching system for remote pools
- Cross-browser scrollbar hiding

Documentation:
- Updated README.md with all 22 pools and new features
- Added CHANGELOG.md with detailed changes
- Documented impostor word format and usage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-31 16:27:28 +01:00
parent a238c42573
commit 3693804d4e
36 changed files with 2757 additions and 666 deletions

View File

@@ -12,25 +12,27 @@
<!-- Pantalla de configuración -->
<div id="setup-screen" class="screen active">
<h1>🎭 Juego del Impostor</h1>
<div class="form-group">
<label for="num-players">Número de jugadores:</label>
<div class="form-group compact">
<label for="num-players">Jugadores:</label>
<input type="number" id="num-players" min="3" max="10" value="6">
</div>
<div class="form-group">
<label for="num-impostors">Número de impostores:</label>
<div class="form-group compact">
<label for="num-impostors">Impostores:</label>
<input type="number" id="num-impostors" min="1" max="5" value="1">
</div>
<div class="form-group">
<label for="game-time">Tiempo de partida (segundos):</label>
<div class="form-group compact">
<label for="game-time">Tiempo de partida (seg):</label>
<input type="number" id="game-time" min="60" max="900" step="30" value="180">
</div>
<div class="form-group">
<label for="deliberation-time">Tiempo de deliberación (segundos):</label>
<div class="form-group compact">
<label for="deliberation-time">Deliberación (seg):</label>
<input type="number" id="deliberation-time" min="30" max="300" step="10" value="60">
</div>
<div class="form-group">
<label>Pool de palabras:</label>
<div id="pool-buttons" class="pool-buttons"></div>
<label>Pools (toca para seleccionar):</label>
<div class="pool-buttons-wrapper">
<div id="pool-buttons" class="pool-buttons"></div>
</div>
</div>
<button onclick="goToNames()">Siguiente: nombres</button>
</div>