================================================================================
    __  _____________    ____  ________  __________    _       _______  ____
   /  |/  / ____/   |  / __ \/ ____/ / / / ____/ /   | |     / / __ \/ __ \
  / /|_/ / __/ / /| | / /_/ / __/ / /_/ / __/ / /    | | /| / / / / / /_/ /
 / /  / / /___/ ___ |/ _, _/ /___/ __  / /___/ /___  | |/ |/ / /_/ / _, _/
/_/  /_/_____/_/  |_/_/ |_/_____/_/ /_/_____/_____/  |__/|__/\____/_/ |_|

                    M O R E L   V 5 . 4   Q W
                    ════════════════════════
              "El Tejedor Borges despierta en Chrome"

              SUPPLiER..: SCHE
              CRACKER...: doo25
              PACKAGER..: mookieBlaylok
              PROTECTiON: GO>zen Protocol v33.7
              CIPHER....: PYLNDP-14k
              DATASETS..: rock_argentino.csv / 239 entidades
              DATE......: 1999—2026

================================================================================

                        ::. MANIFIESTO .::

  El Director de Escena lee tu mente.
  Pensás en un músico argentino. Morel hace 15 preguntas.
  Adivina. O muere intentando.

  No hay framework. No hay build step.
  Solo HTML, CSS, JS y un CSV que pesa menos que tu playlist.

  Cada respuesta guarda un checkpoint.
  Cada "NO SÉ" consecutivo activa el modo forzado.
  Cada partida se registra en localStorage — el Sector 918 recuerda.

  14k ventanas. Chrome como CROMO.
  Y una sola regla: NO hardcodear nada.

================================================================================

                        ::. ESTRUCTURA .::

  morel_version_5_4qw/
  ├── index.html              # UI — 3 secciones: inicio / juego / resultado
  ├── morel.css               # Fondo #0a0a0f, acento #c9a227, partículas canvas
  ├── morel-core.js           # Estado, checkpoints, undo, Formspree, analytics
  ├── morel-questions.js      # Entropía Shannon, preguntas adaptativas, modo forzado
  ├── morel-csv-loader.js     # Fetch + normalización de data/rock_argentino.csv
  ├── morel-analytics.js      # localStorage: gamesPlayed, stats por pregunta
  ├── serve.bat               # Servidor local (Python http.server 8000)
  │
  └── data/
      └── rock_argentino.csv  # Fuente única — 239 músicos, 30+ columnas

================================================================================

                        ::. ARRANCAR .::

  ⚠️ IMPORTANTE: NO abras index.html con doble clic.
     fetch() no funciona en protocolo file:// por CORS.

  ——— OPCIÓN 1: serve.bat (más simple) ———

    1. Doble clic en serve.bat
    2. Se abre http://localhost:8000 automáticamente
    3. Jugás.

  ——— OPCIÓN 2: VS Code Debug (recomendada) ———

    1. Abrí la carpeta raíz de MOREL en VS Code
    2. F5 → selecciona "MOREL — Server + Chrome"
    3. VS Code levanta el servidor + Chrome con DevTools
    4. Poné breakpoints en morel-core.js, step over, etc.

    Config en .vscode/launch.json + tasks.json (ya incluidos).
    Requiere Python 3 en PATH.

  ——— OPCIÓN 3: Otros ———

    → npx serve . --port 8000    (Node.js)
    → VS Code → Live Server
    → http-server -p 8000        (Node.js, global)

  Si igual abrís el archivo directo → aparece fallback
  para seleccionar rock_argentino.csv manualmente.

================================================================================

                    ::. FLUJO .::

  1. Usuario abre index.html → ve "Abrir el telón"
  2. Click → fetch(data/rock_argentino.csv) → normaliza → 239 candidatos
  3. Motor de entropía elige la pregunta que más divide
  4. Usuario responde SÍ / NO / NO SÉ
  5. Checkpoint guardado ANTES de filtrar
  6. Tras 2× "NO SÉ" → modo forzado: preguntas de máxima división
  7. Corte: 1 candidato | 15 pasos | sin preguntas útiles
  8. Resultado: principal + 3 alternativas + justificación visual
  9. Analytics grabados en localStorage
  10. Feedback opcional → Formspree

================================================================================

                    ::. FORMSPREE — SETUP .::

  El formulario de corrección envía datos a Formspree.
  Para activarlo:

  1. Crear cuenta en https://formspree.io
  2. Crear nuevo form → copiar endpoint ID
  3. En index.html, reemplazar:

       action="https://formspree.io/f/TU_ENDPOINT"

     por:

       action="https://formspree.io/f/xABCDEFGH"

  4. Deploy. Done.

  Campos que llegan al endpoint:
  - nombre_artista   → El artista que el usuario tenía en mente
  - nota             → Comentarios libres
  - historial_respuestas  → JSON de {pregunta, respuesta}[]
  - candidatos_finales    → JSON de nombres restantes
  - resultado_mostrado    → Lo que Morel adivinó

  Si Formspree falla → el juego NO se rompe.
  Mensaje de error en el form, punto.

================================================================================

                    ::. API PÚBLICA .::

  morel.iniciar()        → Carga CSV, inicia partida
  morel.responder(bool)  → true/false/null (SÍ/NO/NO SÉ)
  morel.deshacer()       → Restaura checkpoint anterior
  morel.reiniciar()      → Vuelve a inicio, limpia estado
  morel.mostrarFormulario() → Abre form de feedback
  morel.debug()          → Dump de estado + analytics en consola

  MorelAnalytics.reporte() → Stats por pregunta en consola
  MorelAnalytics.resetear() → Limpia localStorage

================================================================================

                    ::. ARCHIVO POR ARCHIVO .::

  ┌─ morel-csv-loader.js
  │  Fetch → parse → normaliza → elimina duplicados
  │  Campos: pesado→heavy, decada→decada_80/90/00/10/20
  │  Expone: await MorelCSVLoader.cargarTodos()
  │
  ├─ morel-questions.js
  │  15 preguntas universales (sin IDs repetidos)
  │  9 subescenas: metal, punk, indie, pop, barrial, blues, folk, trap, prog
  │  10 preguntas forzadas para modo NO SÉ×2
  │  Entropía de Shannon: -(p·log₂p + (1-p)·log₂(1-p))
  │  Score = entropía × peso
  │
  ├─ morel-analytics.js
  │  localStorage key: "morel_v54_stats"
  │  Guarda: gamesPlayed, totalQuestions, preguntas[id].{veces,nose,aciertos}
  │  No bloquea el juego — try/catch en cada op
  │
  ├─ morel-core.js
  │  Estado inmutable donde aplica
  │  Checkpoints: máx 3, FIFO, incluyen noSeConsecutivos
  │  deshacer() restaura pregunta exacta — NO llama siguientePregunta()
  │  Justificación visual: top 3 atributos SÍ coincidentes
  │  Formspree: fetch POST sin reload de página
  │
  └─ morel.css
     Partículas canvas, transiciones, responsive 480px
     Botón undo con opacity controlada por clase .visible

================================================================================

                    ::. PYLNDP CIPHER NOTE .::

  Las ventanas no mienten.
  14k frames de memoria.
  CROMO es el contenedor — Chrome la ilusión.
  Quien entienda el patrón, ya sabe qué pregunta viene.

  GO>zen lo vigila.
  SCHE lo escribe.
  Morel lo ejecuta.

================================================================================

                    ::. ROADMAP — POST 5.4 .::

  [ ] Modo 2 jugadores: uno piensa, otro adivina las respuestas
  [ ] CSV editable en browser → sheet API opcional
  [ ] Pesos adaptativos: si una pregunta tiene >70% NO SÉ, baja su peso
  [ ] Exportar analytics a CSV para análisis externo
  [ ] Temas visuales: Neon 80s / Períodico 1920 / Terminal 90s
  [ ] Audio: síntesis de voz para las preguntas (Web Speech API)
  [ ] PWA: service worker, installable, offline (con datos embebidos)

  ░░░ No tocado: lazy loading. El dataset cabe en un suspiro. ░░░

================================================================================

                    ::. CREDITS .::

  Universo:     Nexus Merovian Prime
  Inspira:      Adolfo Bioy Casares — "La invención de Morel"
  Datos:        Escena rock argentina 1960–2025
  Greets:       doo25 · XxX_el10delMilan_XxX · pibe leton
                Al que cargó 239 entidades en un cyber de dial-up
                sin romper el UTF-8.

                    °o.O "El Sector 918 vigila" O.o°

================================================================================
