Actúa como un desarrollador web senior, experto en HTML5, CSS3 y JavaScript ES6+ vainilla (sin librerías ni frameworks externos). Genera el código completo, modular y funcional para un juego web de mecanografía, listo para subir a un repositorio de GitHub y desplegar en GitHub Pages, dividido en 3 archivos: index.html, styles.css y script.js.
### OBJETIVO DEL JUEGO
Carrera de 2 autos (Jugador vs. Máquina/IA) en una pista horizontal de 2 carriles. El auto del jugador avanza escribiendo correctamente palabras y frases de temática argentina. El auto de la IA avanza a velocidad constante según la dificultad elegida.
### PANTALLA INICIAL (FORMULARIO)
1. Campo de texto: nombre del jugador (obligatorio, si está vacío usar "Jugador" por defecto).
2. Selección de duración de la carrera: 30s / 60s / 90s.
3. Selección de dificultad de la IA:
- Baja: 30 WPM
- Media: 50 WPM
- Alta: 70 WPM
4. Botón "Iniciar Carrera".
5. Antes de comenzar, mostrar una cuenta regresiva de 3 segundos ("3, 2, 1, ¡Ya!") sobre la pista ya visible.
### BANCO DE PALABRAS
- Array de al menos 30 palabras/frases sobre provincias, próceres, personajes históricos y cultura argentina (ej: "Santa Fe", "San Martín", "Buenos Aires", "Belgrano", "Messi", "Malvinas Argentinas", "Mate", "Asado", "Córdoba", "Tucumán", "Dulce de Leche").
- Selección aleatoria SIN repetir la misma palabra dos veces seguidas. Si se agota el array, reiniciar el ciclo mezclando el orden (shuffle).
### LÓGICA DE ESCRITURA
1. Se muestra una sola palabra/frase objetivo a la vez, encima de un `<input>` de texto enfocado automáticamente.
2. Validación estricta y sensible a mayúsculas, minúsculas, espacios y tildes.
3. Feedback visual carácter por carácter mientras el jugador escribe:
- Verde: carácter correcto.
- Rojo: carácter incorrecto.
- El input NO bloquea el tipeo ante un error: el jugador puede seguir escribiendo o borrar con backspace para corregir.
4. La palabra se da por completada únicamente cuando coincide el 100% con el texto objetivo (no alcanza con presionar espacio si hay error). Al completarse, se limpia el input y aparece la siguiente palabra.
5. Cada palabra completada correctamente avanza al auto del jugador un porcentaje fijo de la pista, calculado como: 100 / 20 (es decir, se necesitan 20 palabras completadas para recorrer el 100% de la pista y cruzar la meta).
### LÓGICA DE LA IA
- El auto de la IA avanza de forma continua (no por palabras), calculando su progreso en función del WPM asignado y el tiempo transcurrido, de modo que complete el 100% de la pista en un tiempo teórico consistente con su velocidad (ej: a 50 WPM, estimar cuántas palabras "escribiría" en el tiempo total de carrera y repartir el avance proporcionalmente).
### CONDICIÓN DE FIN DE PARTIDA
La carrera termina cuando ocurra la PRIMERA de estas dos condiciones:
1. Un auto (jugador o IA) alcanza el 100% de la pista → ese auto gana.
2. Se agota el tiempo de la cuenta regresiva → gana quien tenga mayor porcentaje de avance en ese momento. Si el porcentaje es idéntico, declarar "Empate".
### CÁLCULO DE MÉTRICAS (al finalizar)
- PPM (Pulsaciones Por Minuto): total de caracteres tipeados (incluyendo errores) / tiempo transcurrido en minutos.
- WPM neto: palabras completadas correctamente / tiempo transcurrido en minutos.
- Precisión (%): (total de caracteres correctos ingresados / total de caracteres ingresados) × 100. Contar cada carácter tipeado, incluidos los que luego se corrigen con backspace.
- Total de palabras completadas correctamente.
### PANTALLA DE RESULTADOS
1. Declarar ganador ("¡[Nombre] gana!", "¡Gana la Máquina!" o "¡Empate!").
2. Mostrar panel con las 4 métricas anteriores, claramente etiquetadas.
3. Botón "Volver a jugar" que reinicia el estado y vuelve al formulario inicial (sin recargar la página).
### PISTA (INTERFAZ VISUAL)
- 2 carriles horizontales con línea de meta visible al final.
- Carril 1: auto del jugador, con su nombre encima.
- Carril 2: auto de la IA, etiquetado "Máquina".
- Temporizador en cuenta regresiva, visible durante toda la carrera.
- Barra o indicador de progreso porcentual opcional debajo de cada carril.
### REQUISITOS TÉCNICOS Y DE ENTREGA
- HTML5 semántico.
- CSS moderno (Flexbox/Grid), responsive (mobile-first), estilo visual arcade/deportivo.
- En mobile: el input debe mantenerse enfocado automáticamente para activar el teclado virtual sin que el usuario deba tocarlo manualmente.
- JavaScript ES6+ modular (funciones separadas por responsabilidad: manejo de estado, render, cálculo de métricas, etc.), sin librerías externas, sin errores de consola.
- Guardar el mejor tiempo/puntaje del jugador en localStorage y mostrarlo en la pantalla inicial (ej: "Récord: [nombre] - [WPM] WPM").
- Entregar cada archivo en un bloque de código independiente y correctamente etiquetado (```html, ```css, ```javascript), en este orden: index.html, styles.css, script.js.