{
  "_comment": "Datos de Find us & Events. Un sitio nuevo = un objeto en 'lugares'; un tipo nuevo = una linea en 'tipos' y su etiqueta en js/translations.json (es, en, nl). ll va SIEMPRE como [longitud, latitud], con la coordenada buscada a mano una vez (nada de geocodificar en tiempo real). Lo valida scripts/test-find-us-datos.js.",
  "config": {
    "_comment": "Una ciudad sin sitios toma tipo_sin_sitios. Desde zoom_sitios, la chincheta de una ciudad con sitios deja paso a las de sus sitios. caducan: un sitio con fecha deja de contar cuando su fin (o su inicio, si no tiene fin) ya paso en la hora de su ciudad (ciudades.X.zona); false lo conserva todo, y \"caduca\": false en un sitio conserva solo ese. agrupar_desde: bajo el mapa, en la vista de ciudad, la lista de sus sitios va abierta hasta agrupar_desde - 1 sitios; desde agrupar_desde, agrupada por tipo y plegable, con el numero de sitios en cada cabecera.",
    "tipo_sin_sitios": "proximamente",
    "zoom_sitios": 10,
    "caducan": true,
    "agrupar_desde": 4
  },
  "tipos": {
    "_comment": "orden decide que tipo representa a la ciudad en la vista de pais (el menor gana) y el orden de la leyenda. color es un token CSS de la pagina (@citrus = var(--citrus)). forma: circulo, cuadrado, rombo, triangulo, hexagono o anillo (hueco).",
    "evento":       { "orden": 1, "color": "@citrus",    "forma": "rombo",     "etiqueta": "fu_tipo_evento" },
    "tienda":       { "orden": 2, "color": "@mint",      "forma": "cuadrado",  "etiqueta": "fu_tipo_tienda" },
    "horeca":       { "orden": 3, "color": "@mango",     "forma": "circulo",   "etiqueta": "fu_tipo_horeca" },
    "deporte":      { "orden": 4, "color": "@blueberry", "forma": "triangulo", "etiqueta": "fu_tipo_deporte" },
    "proximamente": { "orden": 9, "color": "@ocean",     "forma": "anillo",    "etiqueta": "fu_tipo_proximamente" }
  },
  "ciudades": {
    "amsterdam": { "pais": "NL", "region": "Noord-Holland", "zona": "Europe/Amsterdam", "ll": [4.8970, 52.3710],
                   "nombre": { "es": "Ámsterdam", "en": "Amsterdam", "nl": "Amsterdam" } },
    "malaga":    { "pais": "ES", "region": "Málaga", "zona": "Europe/Madrid", "ll": [-4.4210, 36.7210],
                   "nombre": { "es": "Málaga", "en": "Málaga", "nl": "Málaga" }, "cuando": "fu_cuando_finales_2026" },
    "madrid":    { "pais": "ES", "region": "Madrid", "zona": "Europe/Madrid", "ll": [-3.7030, 40.4170],
                   "nombre": { "es": "Madrid", "en": "Madrid", "nl": "Madrid" }, "cuando": "fu_cuando_finales_2026" },
    "barcelona": { "pais": "ES", "region": "Barcelona", "zona": "Europe/Madrid", "ll": [2.1730, 41.3850],
                   "nombre": { "es": "Barcelona", "en": "Barcelona", "nl": "Barcelona" }, "cuando": "fu_cuando_finales_2026" }
  },
  "lugares": [
    { "id": "milessime-2026-10-22", "tipo": "evento", "ciudad": "amsterdam",
      "nombre": "We Mate x Milessime Vintage x Toka Music",
      "sitio": "Milessime Vintage", "direccion": "Leidsestraat 64, 1017 PD Amsterdam",
      "ll": [4.8851573, 52.3654283],
      "inicio": "2026-10-22T17:00", "fin": "2026-10-22T20:00",
      "caduca": false }
  ]
}
