{"id":4843,"date":"2025-09-09T11:52:01","date_gmt":"2025-09-09T16:52:01","guid":{"rendered":"https:\/\/visitquito.ec\/eventos\/"},"modified":"2026-07-31T15:32:36","modified_gmt":"2026-07-31T20:32:36","slug":"eventos","status":"publish","type":"page","link":"https:\/\/visitquito.ec\/es\/eventos\/","title":{"rendered":"Qu\u00e9 hacer en Quito hoy: agenda de eventos, conciertos y actividades"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4843\" class=\"elementor elementor-4843 elementor-4511\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-405816e e-flex e-con-boxed e-con e-parent\" data-id=\"405816e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-2687ac4 e-con-full e-flex e-con e-child\" data-id=\"2687ac4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bf1a9ca elementor-widget elementor-widget-image\" data-id=\"bf1a9ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/visitquito.ec\/es\/conciertos-y-grandes-eventos-en-quito\/\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1280\" height=\"259\" src=\"https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/04\/HeroShoot-grandes-eventos-es.jpg\" class=\"attachment-full size-full wp-image-9581\" alt=\"Quito ciudad de Grandes Eventos - VisitQuito - Quito turismo\" srcset=\"https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/04\/HeroShoot-grandes-eventos-es.jpg 1280w, https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/04\/HeroShoot-grandes-eventos-es-300x61.jpg 300w, https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/04\/HeroShoot-grandes-eventos-es-1024x207.jpg 1024w, https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/04\/HeroShoot-grandes-eventos-es-768x155.jpg 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-00ca843 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"00ca843\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6b813e elementor-widget elementor-widget-heading\" data-id=\"e6b813e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Qu\u00e9 hacer en Quito hoy: agenda de eventos en Quito<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c21d286 e-grid e-con-full e-con e-child\" data-id=\"c21d286\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e02fbb7 elementor-widget elementor-widget-text-editor\" data-id=\"e02fbb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Encuentra <strong>qu\u00e9 hacer en Quito hoy,<\/strong> esta semana y durante el mes en una sola agenda actualizada. Aqu\u00ed podr\u00e1s consultar conciertos, festivales, teatro, ferias, congresos, actividades culturales y eventos especiales en distintos recintos de la ciudad. Explora la agenda por fecha, categor\u00eda o lugar y descubre planes para disfrutar Quito en cualquier momento del a\u00f1o.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85229e9 elementor-widget elementor-widget-text-editor\" data-id=\"85229e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Si est\u00e1s buscando hoy en Quito conciertos, eventos culturales, festivales, ferias o actividades para hacer en familia, esta p\u00e1gina re\u00fane una selecci\u00f3n actualizada de eventos en Quito para ayudarte a encontrar planes seg\u00fan tus intereses. Desde grandes conciertos hasta agenda cultural, congresos y experiencias urbanas, aqu\u00ed puedes revisar los eventos del d\u00eda, de la semana y del mes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d173e1f elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"d173e1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-647db8e elementor-widget elementor-widget-heading\" data-id=\"647db8e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Agenda de Grandes Eventos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c378ec6 e-con-full e-flex e-con e-child\" data-id=\"c378ec6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-96d73ea elementor-skin-carousel elementor-arrows-yes elementor-pagination-type-bullets elementor-pagination-position-outside elementor-widget elementor-widget-media-carousel\" data-id=\"96d73ea\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;slides_per_view&quot;:&quot;3&quot;,&quot;slides_to_scroll&quot;:&quot;1&quot;,&quot;slides_per_view_mobile&quot;:&quot;1&quot;,&quot;space_between_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;skin&quot;:&quot;carousel&quot;,&quot;effect&quot;:&quot;slide&quot;,&quot;show_arrows&quot;:&quot;yes&quot;,&quot;pagination&quot;:&quot;bullets&quot;,&quot;speed&quot;:500,&quot;autoplay&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;loop&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;space_between&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]},&quot;space_between_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:10,&quot;sizes&quot;:[]}}\" data-widget_type=\"media-carousel.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-swiper\">\n\t\t\t\t\t<div class=\"elementor-main-swiper swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Slides\">\n\t\t\t\t<div class=\"swiper-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.instagram.com\/p\/DZYi3JwuR2M\/\">\t\t<div class=\"elementor-carousel-image\" role=\"img\" aria-label=\"GASTRO-FEST-11Y12JULIO\" style=\"background-image: url(&#039;https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/06\/GASTRO-FEST-11Y12JULIO.jpg&#039;)\">\n\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.instagram.com\/p\/DVfJPb8FXr_\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" role=\"img\" aria-label=\"SALSA-3-25JULIO\" style=\"background-image: url(&#039;https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/06\/SALSA-3-25JULIO.jpg&#039;)\">\n\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/visitquito.ec\/es\/grandes-eventos-calendario\/ftc-live-al-parque-29-agosto\/\">\t\t<div class=\"elementor-carousel-image\" role=\"img\" aria-label=\"ARCANGEL-1920X1080\" style=\"background-image: url(&#039;https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/07\/ARCANGEL-1920X1080.jpg&#039;)\">\n\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/visitquito.ec\/es\/grandes-eventos-calendario\/ftc-live-al-parque-29-agosto\/\">\t\t<div class=\"elementor-carousel-image\" role=\"img\" aria-label=\"FTC-29AGO\" style=\"background-image: url(&#039;https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/06\/FTC-29AGO.jpg&#039;)\">\n\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.feelthetickets.com\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" role=\"img\" aria-label=\"ROMEO-SANTOS-26-SEPTIEMBRE\" style=\"background-image: url(&#039;https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/06\/ROMEO-SANTOS-26-SEPTIEMBRE.jpg&#039;)\">\n\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.feelthetickets.com\/\" target=\"_blank\">\t\t<div class=\"elementor-carousel-image\" role=\"img\" aria-label=\"DEPLEPPARD-30OCT\" style=\"background-image: url(&#039;https:\/\/visitquito.ec\/wp-content\/uploads\/2026\/06\/DEPLEPPARD-30OCT.jpg&#039;)\">\n\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t<\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\" aria-label=\"Anterior\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-left\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z\"><\/path><\/svg>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\" aria-label=\"Siguiente\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-right\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z\"><\/path><\/svg>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-53aacc10 e-flex e-con-boxed e-con e-parent\" data-id=\"53aacc10\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-60e7b6c1 e-con-full e-flex e-con e-child\" data-id=\"60e7b6c1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1ca8183a elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"1ca8183a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38089a66 elementor-widget elementor-widget-heading\" data-id=\"38089a66\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Eventos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-25567285 e-con-full e-flex e-con e-child\" data-id=\"25567285\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-02251fc elementor-widget elementor-widget-html\" data-id=\"02251fc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Agenda Quito 2026 \u00b7 ES \/ EN<\/title>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Raleway:wght@400;500;600;700;800;900&display=swap\" rel=\"stylesheet\">\n  <style>\n    :root {\n      --accent: #22ffa5;\n      --accent-deep: #11d98a;\n      --accent-soft: rgba(34, 255, 165, .14);\n      --bg: #f3f5f4;\n      --panel: #ffffff;\n      --text: #111111;\n      --muted: #6b6f72;\n      --line: #e4e8e6;\n      --line-dark: #cfd7d3;\n      --chip: #f8faf9;\n      --shadow: 0 18px 40px rgba(17, 17, 17, .06);\n      --shadow-soft: 0 10px 20px rgba(17, 17, 17, .04);\n      --radius: 22px;\n    }\n    * { box-sizing: border-box; }\n    html { scroll-behavior: smooth; }\n    body {\n      margin: 0;\n      background:\n        radial-gradient(circle at top left, rgba(34,255,165,.12), transparent 25%),\n        linear-gradient(180deg, #f8faf9 0%, var(--bg) 100%);\n      color: var(--text);\n      font-family: 'Raleway', sans-serif;\n    }\n    a { color: inherit; }\n    .wrap {\n      max-width: 1440px;\n      margin: 0 auto;\n      padding: 24px 18px 42px;\n    }\n    .panel {\n      background: rgba(255,255,255,.88);\n      backdrop-filter: blur(8px);\n      border: 1px solid rgba(255,255,255,.65);\n      border-radius: 28px;\n      box-shadow: var(--shadow);\n      overflow: hidden;\n    }\n    .head {\n      position: relative;\n      padding: 30px 28px 10px;\n      border-bottom: 1px solid var(--line);\n      background:\n        linear-gradient(180deg, rgba(34,255,165,.08) 0%, rgba(255,255,255,.96) 70%);\n    }\n    .eyebrow {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      margin-bottom: 14px;\n      padding: 8px 12px;\n      background: rgba(17,17,17,.92);\n      color: #fff;\n      border-radius: 999px;\n      font-size: 11px;\n      font-weight: 800;\n      letter-spacing: .12em;\n      text-transform: uppercase;\n    }\n    .title {\n      margin: 0 0 10px;\n      font-size: clamp(28px, 3vw, 46px);\n      line-height: 1.02;\n      font-weight: 900;\n      letter-spacing: -.03em;\n      max-width: 900px;\n    }\n    .sub {\n      margin: 0;\n      max-width: 900px;\n      font-size: 15px;\n      color: var(--muted);\n      line-height: 1.55;\n    }\n    .summary {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 12px;\n      padding: 18px 28px 8px;\n    }\n    .summary-card {\n      background: linear-gradient(180deg, #ffffff 0%, #f9fbfa 100%);\n      border: 1px solid var(--line);\n      border-radius: 18px;\n      padding: 16px 16px 15px;\n      box-shadow: var(--shadow-soft);\n    }\n    .summary-label {\n      display: block;\n      margin-bottom: 8px;\n      font-size: 12px;\n      text-transform: uppercase;\n      letter-spacing: .08em;\n      font-weight: 800;\n      color: var(--muted);\n    }\n    .summary-value {\n      font-size: clamp(20px, 2vw, 30px);\n      font-weight: 900;\n      line-height: 1;\n      letter-spacing: -.03em;\n    }\n    .summary-help {\n      margin-top: 8px;\n      font-size: 13px;\n      color: var(--muted);\n      line-height: 1.45;\n    }\n    .controls {\n      padding: 14px 28px 12px;\n      display: grid;\n      gap: 10px;\n    }\n    .lang-switch {\n      display: flex;\n      justify-content: flex-end;\n      gap: 8px;\n    }\n    .lang-btn {\n      min-width: 54px;\n      height: 38px;\n      border-radius: 999px;\n      border: 1px solid var(--line);\n      background: #fff;\n      color: var(--text);\n      font: inherit;\n      font-size: 12px;\n      font-weight: 900;\n      cursor: pointer;\n      transition: transform .18s ease, border-color .18s ease, background .18s ease, box-shadow .18s ease;\n    }\n    .lang-btn:hover {\n      transform: translateY(-1px);\n      border-color: var(--accent);\n      box-shadow: 0 10px 22px rgba(17,17,17,.06);\n    }\n    .lang-btn.active {\n      background: linear-gradient(180deg, var(--accent) 0%, #b8ffd9 100%);\n      border-color: transparent;\n      box-shadow: 0 12px 26px rgba(34,255,165,.28);\n    }\n\n    .sub,\n    .summary,\n    .notice {\n      display: none !important;\n    }\n    .tabs-wrap {\n      display: flex;\n      gap: 10px;\n      overflow-x: auto;\n      padding-bottom: 2px;\n      scrollbar-width: thin;\n    }\n    .tabs-wrap::-webkit-scrollbar { height: 6px; }\n    .tabs-wrap::-webkit-scrollbar-thumb {\n      background: rgba(17,17,17,.18);\n      border-radius: 999px;\n    }\n    .tab {\n      flex: 0 0 auto;\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      border: 1px solid var(--line);\n      background: var(--chip);\n      color: var(--text);\n      border-radius: 999px;\n      padding: 11px 14px;\n      font: inherit;\n      font-size: 12px;\n      font-weight: 900;\n      text-transform: uppercase;\n      cursor: pointer;\n      transition: transform .18s ease, border-color .18s ease, background .18s ease, box-shadow .18s ease;\n      white-space: nowrap;\n    }\n    .tab:hover {\n      border-color: var(--accent);\n      transform: translateY(-1px);\n      box-shadow: 0 10px 22px rgba(17,17,17,.06);\n    }\n    .tab.active {\n      background: linear-gradient(180deg, var(--accent) 0%, #b8ffd9 100%);\n      border-color: transparent;\n      box-shadow: 0 12px 26px rgba(34,255,165,.28);\n    }\n    .tab-count {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      min-width: 22px;\n      height: 22px;\n      padding: 0 6px;\n      background: rgba(17,17,17,.08);\n      border-radius: 999px;\n      font-size: 11px;\n      font-weight: 900;\n    }\n    .tab.active .tab-count {\n      background: rgba(17,17,17,.14);\n    }\n    .filters {\n      display: grid;\n      grid-template-columns: minmax(0, 1.4fr) minmax(220px, .9fr) minmax(220px, .9fr);\n      gap: 12px;\n    }\n    .field {\n      position: relative;\n      display: flex;\n      align-items: center;\n      min-height: 54px;\n      border: 1px solid var(--line);\n      border-radius: 16px;\n      background: #fff;\n      box-shadow: var(--shadow-soft);\n    }\n    .field svg {\n      position: absolute;\n      left: 16px;\n      width: 18px;\n      height: 18px;\n      color: var(--muted);\n      pointer-events: none;\n    }\n    .field input,\n    .field select {\n      width: 100%;\n      min-height: 54px;\n      border: 0;\n      background: transparent;\n      outline: 0;\n      padding: 15px 16px 15px 48px;\n      font: inherit;\n      font-size: 14px;\n      color: var(--text);\n      border-radius: 16px;\n    }\n    .field select {\n      appearance: none;\n      cursor: pointer;\n      padding-right: 42px;\n    }\n    .field.select::after {\n      content: \"\u25be\";\n      position: absolute;\n      right: 16px;\n      color: var(--muted);\n      font-size: 14px;\n      pointer-events: none;\n    }\n    .meta {\n      display: flex;\n      justify-content: space-between;\n      gap: 12px;\n      align-items: center;\n      flex-wrap: wrap;\n    }\n    .meta p {\n      margin: 0;\n      color: var(--muted);\n      font-size: 14px;\n    }\n    .table-shell {\n      padding: 0 28px 10px;\n    }\n    .table-wrap {\n      border: 1px solid var(--line);\n      border-radius: 20px;\n      overflow: hidden;\n      background: #fff;\n      box-shadow: var(--shadow-soft);\n    }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      table-layout: fixed;\n    }\n    thead th {\n      padding: 14px 16px;\n      text-align: left;\n      font-size: 11.5px;\n      font-weight: 900;\n      text-transform: uppercase;\n      letter-spacing: .12em;\n      color: var(--muted);\n      border-bottom: 1px solid var(--line);\n      background: linear-gradient(180deg, #fbfcfc 0%, #f4f7f6 100%);\n      white-space: nowrap;\n    }\n    tbody tr {\n      transition: background .18s ease, transform .18s ease, box-shadow .18s ease;\n    }\n    tbody tr:nth-child(even) {\n      background: #fcfdfd;\n    }\n    tbody tr:hover {\n      background: #f7fffb;\n      box-shadow: inset 4px 0 0 var(--accent);\n    }\n    tbody td {\n      padding: 14px 16px;\n      font-size: 14px;\n      border-bottom: 1px solid #eef1ef;\n      vertical-align: middle;\n    }\n    tbody tr:last-child td {\n      border-bottom: 0;\n    }\n    .date-cell,\n    .time-cell,\n    .link-cell {\n      text-align: center;\n      vertical-align: middle;\n    }\n    .date-text {\n      display: inline-block;\n      font-family: 'Raleway', sans-serif;\n      font-size: 20px;\n      font-weight: 800;\n      color: #111111;\n      line-height: 1.1;\n      letter-spacing: -0.02em;\n      white-space: nowrap;\n    }\n    .artist {\n      font-weight: 900;\n      font-size: 15px;\n      line-height: 1.15;\n      margin-bottom: 2px;\n      letter-spacing: -.01em;\n    }\n    .tour {\n      color: var(--muted);\n      font-size: 12.5px;\n      line-height: 1.45;\n      white-space: normal;\n      overflow: visible;\n      text-overflow: initial;\n      display: block;\n      overflow-wrap: anywhere;\n      word-break: normal;\n    }\n    .venue {\n      font-weight: 800;\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n    .more {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      gap: 8px;\n      text-decoration: none;\n      color: #111;\n      font-weight: 900;\n      padding: 11px 14px;\n      border-radius: 999px;\n      border: 1px solid transparent;\n      transition: background .18s ease, border-color .18s ease, transform .18s ease;\n      margin: 0 auto;\n    }\n    .more svg {\n      width: 16px;\n      height: 16px;\n      flex: none;\n    }\n    .more:hover {\n      background: var(--accent-soft);\n      border-color: rgba(34,255,165,.4);\n      transform: translateY(-1px);\n    }\n    .action-stack {\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      justify-content: flex-start;\n      gap: 8px;\n      width: 100%;\n    }\n    .link-cell {\n      text-align: left;\n    }\n    .save-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: flex-start;\n      gap: 8px;\n      text-decoration: none;\n      color: #111;\n      font-weight: 900;\n      padding: 0;\n      border: 0;\n      background: transparent;\n      transition: opacity .18s ease, transform .18s ease;\n      font: inherit;\n      cursor: pointer;\n      text-align: left;\n      white-space: nowrap;\n      line-height: 1;\n      align-self: flex-start;\n    }\n    .save-btn:hover {\n      opacity: .8;\n      transform: translateY(-1px);\n    }\n    .more {\n      white-space: nowrap;\n      line-height: 1;\n      align-self: flex-start;\n      justify-content: flex-start;\n      text-align: left;\n    }\n    .more svg,\n    .save-btn svg {\n      width: 18px;\n      height: 18px;\n      flex: none;\n    }\n    @media print {\n      body {\n        background: #fff !important;\n      }\n      .controls,\n      .footerbar,\n      .notice,\n      .link-cell {\n        display: none !important;\n      }\n      .wrap {\n        max-width: none;\n        padding: 0;\n      }\n      .panel {\n        border: 0;\n        box-shadow: none;\n        border-radius: 0;\n        background: #fff;\n      }\n      .head {\n        border-bottom: 1px solid #ddd;\n        padding: 18px 0 12px;\n      }\n      .table-shell {\n        padding: 0;\n      }\n      .table-wrap {\n        border: 0;\n        box-shadow: none;\n      }\n      table {\n        table-layout: auto;\n      }\n      thead {\n        display: table-header-group !important;\n      }\n      tbody,\n      tr,\n      td {\n        display: table-row-group;\n      }\n      tbody tr {\n        page-break-inside: avoid;\n      }\n    }\n    .venue-mobile { display: none; }\n    .date-stack {\n      display: inline-flex;\n      flex-direction: column;\n      align-items: flex-start;\n      gap: 6px;\n    }\n    .multiday-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      padding: 6px 10px;\n      border-radius: 999px;\n      background: rgba(34,255,165,.12);\n      border: 1px solid rgba(34,255,165,.35);\n      font-size: 11px;\n      font-weight: 800;\n      line-height: 1;\n      color: #111;\n      white-space: nowrap;\n    }\n    .multiday-badge svg {\n      width: 13px;\n      height: 13px;\n      flex: none;\n      opacity: .75;\n    }\n    .multiday-note {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      margin-top: 4px;\n      font-size: 12px;\n      font-weight: 800;\n      color: var(--muted);\n      line-height: 1.3;\n    }\n    .multiday-note svg {\n      width: 13px;\n      height: 13px;\n      flex: none;\n      opacity: .75;\n    }\n    .meta {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 12px;\n    }\n    .footerbar {\n      padding: 10px 28px 26px;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 14px;\n      flex-wrap: wrap;\n    }\n    .pager-info {\n      color: var(--muted);\n      font-size: 14px;\n    }\n    .pagination {\n      display: flex;\n      gap: 8px;\n      flex-wrap: wrap;\n    }\n    .page-btn {\n      min-width: 44px;\n      height: 42px;\n      padding: 0 14px;\n      border-radius: 12px;\n      border: 1px solid var(--line);\n      background: #fff;\n      font: inherit;\n      font-weight: 900;\n      cursor: pointer;\n      transition: transform .18s ease, border-color .18s ease, background .18s ease;\n    }\n    .page-btn:hover:not(:disabled) {\n      transform: translateY(-1px);\n      border-color: var(--accent);\n    }\n    .page-btn.active {\n      background: linear-gradient(180deg, var(--accent) 0%, #b6ffd8 100%);\n      border-color: transparent;\n    }\n    .page-btn:disabled {\n      opacity: .45;\n      cursor: not-allowed;\n    }\n    .empty {\n      display: none;\n      margin: 0 28px 18px;\n      padding: 18px;\n      border: 1px dashed var(--line-dark);\n      border-radius: 16px;\n      background: #fbfbfb;\n      color: var(--muted);\n      font-weight: 700;\n    }\n    .notice {\n      margin: 0;\n      padding: 0 28px 28px;\n      color: var(--muted);\n      font-size: 13px;\n      line-height: 1.5;\n    }\n\n    @media (max-width: 991px) {\n      .summary {\n        grid-template-columns: 1fr;\n      }\n      .filters {\n        grid-template-columns: 1fr;\n      }\n      .date-pill {\n        min-width: 110px;\n      }\n    }\n\n    @media (max-width: 767px) {\n      .wrap {\n        padding: 10px 10px 22px;\n      }\n      .panel {\n        border-radius: 20px;\n      }\n      .head,\n      .controls,\n      .table-shell,\n      .footerbar,\n      .notice {\n        padding-left: 12px;\n        padding-right: 12px;\n      }\n      .summary {\n        padding: 12px 12px 6px;\n      }\n      .title {\n        font-size: 29px;\n      }\n      .sub,\n      .meta p,\n      .pager-info {\n        font-size: 13px;\n      }\n      .tabs-wrap {\n        gap: 8px;\n      }\n      .tab {\n        padding: 10px 12px;\n        font-size: 11px;\n      }\n      .field,\n      .field input,\n      .field select {\n        min-height: 50px;\n      }\n      .table-wrap {\n        border-radius: 16px;\n        overflow: visible;\n        border: 0;\n        background: transparent;\n        box-shadow: none;\n      }\n      table,\n      thead,\n      tbody,\n      tr,\n      td {\n        display: block;\n        width: 100%;\n      }\n      thead {\n        display: none;\n      }\n      tbody {\n        display: grid;\n        gap: 12px;\n      }\n      tbody tr {\n        background: linear-gradient(180deg, #ffffff 0%, #fbfcfc 100%) !important;\n        border: 1px solid var(--line);\n        border-radius: 18px;\n        box-shadow: var(--shadow-soft);\n        padding: 14px;\n      }\n      tbody tr:hover {\n        box-shadow: var(--shadow-soft);\n      }\n      tbody td {\n        border: 0;\n        padding: 0;\n      }\n      td.date-cell {\n        margin-bottom: 8px;\n      }\n      td.time-cell {\n        display: block;\n        margin-bottom: 10px;\n      }\n      td.artist-cell {\n        margin-bottom: 8px;\n      }\n      td.tour-cell {\n        margin-bottom: 10px;\n      }\n      td.venue-cell {\n        margin-bottom: 12px;\n      }\n      .date-text {\n        font-size: 18px;\n      }\n      .date-stack {\n        width: 100%;\n      }\n      .multiday-badge {\n        font-size: 10.5px;\n        padding: 6px 9px;\n      }\n      .multiday-note {\n        font-size: 12px;\n      }\n      .time-mobile {\n        display: inline-flex;\n        align-items: center;\n        gap: 8px;\n        padding: 8px 11px;\n        border-radius: 999px;\n        background: rgba(17,17,17,.06);\n        font-size: 12px;\n        font-weight: 800;\n        color: #111;\n        line-height: 1;\n      }\n      .time-mobile svg {\n        width: 14px;\n        height: 14px;\n        opacity: .7;\n      }\n      .artist {\n        font-size: 18px;\n        line-height: 1.22;\n        letter-spacing: -.01em;\n      }\n      .tour,\n      .venue {\n        white-space: normal;\n        overflow: visible;\n        text-overflow: initial;\n        font-size: 13px;\n        line-height: 1.45;\n      }\n      .venue-cell .venue {\n        display: none;\n      }\n      .venue-mobile {\n        display: inline-flex;\n        align-items: center;\n        gap: 8px;\n        font-size: 13px;\n        font-weight: 800;\n        line-height: 1.35;\n      }\n      .venue-mobile svg {\n        width: 14px;\n        height: 14px;\n        opacity: .7;\n        flex: none;\n        margin-top: 1px;\n      }\n      .mobile-meta {\n        display: flex;\n        align-items: center;\n        justify-content: stretch;\n        gap: 10px;\n        margin-top: 12px;\n        flex-wrap: wrap;\n        width: 100%;\n      }\n      .link-cell .more,\n      .link-cell .save-btn {\n        width: 100%;\n        min-height: 44px;\n        padding: 12px 14px;\n        border-radius: 999px;\n        justify-content: flex-start;\n        white-space: nowrap;\n        text-align: left;\n      }\n      .link-cell .more {\n        background: rgba(34,255,165,.12);\n        border: 1px solid rgba(34,255,165,.35);\n      }\n      .link-cell .save-btn {\n        background: #fff;\n        border: 1px solid rgba(17,17,17,.10);\n      }\n      .toolbar-actions {\n        padding: 0 0 12px;\n        justify-content: stretch;\n      }\n      .meta {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 12px;\n      }\n      .footerbar {\n        align-items: flex-start;\n      }\n      .pagination {\n        width: 100%;\n      }\n      .page-btn {\n        min-width: 40px;\n        height: 40px;\n      }\n    }\n  \n    .event-date-inline{\n      font-size: 18px;\n      font-weight: 800;\n      letter-spacing: -.02em;\n      line-height: 1.1;\n      white-space: nowrap;\n    }\n    .table td.col-fecha,\n    .table th.col-fecha{\n      width: 16%;\n      min-width: 150px;\n    }\n    .table td.col-masinfo,\n    .table th.col-masinfo{\n      width: 11%;\n      min-width: 120px;\n      text-align: center;\n    }\n    .info-link{\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      gap: 8px;\n      width: 100%;\n      text-align: center;\n    }\n\n  \n    .event-date-inline{\n      display: inline-block !important;\n      font-family: 'Raleway', sans-serif !important;\n      font-size: 20px !important;\n      font-weight: 800 !important;\n      color: #111111 !important;\n      line-height: 1.1 !important;\n      letter-spacing: -0.02em !important;\n      white-space: nowrap !important;\n      text-transform: none !important;\n      background: transparent !important;\n      padding: 0 !important;\n      border: 0 !important;\n      border-radius: 0 !important;\n      box-shadow: none !important;\n    }\n\n<\/style>\n<\/head>\n<body>\n  <section class=\"wrap\">\n    <div class=\"panel\">\n      <div class=\"head\">\n        <div class=\"eyebrow\" id=\"eyebrowText\">Agenda de Eventos 2026 \u00b7 Quito<\/div>\n        <h2 class=\"title\" id=\"titleText\">Qu\u00e9 hacer en Quito hoy: agenda de eventos, conciertos y actividades<\/h2>\n        \n      <\/div>\n\n      <div class=\"controls\">\n        <div class=\"lang-switch\" aria-label=\"Selector de idioma \/ Language selector\">\n          <button type=\"button\" class=\"lang-btn active\" id=\"langEsBtn\">ES<\/button>\n          <button type=\"button\" class=\"lang-btn\" id=\"langEnBtn\">EN<\/button>\n        <\/div>\n        <div class=\"tabs-wrap\" id=\"monthTabs\"><\/div>\n\n        <div class=\"filters\">\n          <label class=\"field\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle><path d=\"m21 21-4.35-4.35\"><\/path><\/svg>\n            <input id=\"searchInput\" type=\"text\" placeholder=\"Buscar por artista, tour, festival o congreso\" aria-label=\"Buscar por artista, tour, festival o congreso\">\n          <\/label>\n          <label class=\"field select\">\n            <select id=\"venueFilter\" aria-label=\"Filtrar por recinto\">\n              <option value=\"todos\">Todos los recintos<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"field select\">\n            <select id=\"categoryFilter\" aria-label=\"Filtrar por categor\u00eda\"><\/select>\n          <\/label>\n        <\/div>\n\n        <div class=\"meta\">\n          <p id=\"activeMonthLabel\">Mostrando: todos<\/p>\n          <p id=\"resultsLabel\"><\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"table-shell\">\n        <div class=\"table-wrap\">\n          <table>\n            <thead>\n              <tr>\n                <th style=\"width:18%\">Fecha<\/th>\n                <th style=\"width:8%\">Hora<\/th>\n                <th style=\"width:26%\">Artista \/ festival<\/th>\n                <th style=\"width:30%\">Tour \/ detalle<\/th>\n                <th style=\"width:18%\">Lugar<\/th>\n                <th style=\"width:14%\">M\u00e1s Info.<\/th>\n              <\/tr>\n            <\/thead>\n            <tbody id=\"concertTableBody\"><\/tbody>\n          <\/table>\n        <\/div>\n      <\/div>\n\n      <div class=\"empty\" id=\"emptyState\">No hay eventos disponibles con los filtros seleccionados.<\/div>\n\n      <div class=\"footerbar\">\n        <div class=\"pager-info\" id=\"pagerInfo\"><\/div>\n        <div class=\"pagination\" id=\"pagination\"><\/div>\n      <\/div>\n\n      <p class=\"notice\">En escritorio, cada concierto se mantiene en una sola l\u00ednea. En m\u00f3vil, cada fila se reorganiza en una tarjeta m\u00e1s legible para conservar toda la informaci\u00f3n sin comprimir el contenido.<\/p>\n    <\/div>\n  <\/section>\n\n    <script>\n    const concertData = [{\"date\": \"2026-01-23\", \"time\": \"20:00\", \"artist\": \"Santiago Cruz\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro Nacional CCE\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Santiago-Cruz-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro Nacional CCE\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-03-07\", \"time\": \"19:00\", \"artist\": \"Festival del Vallenato 25\", \"tour\": \"Hebert Vargas, Alex Manga, Los Inquietos y Alejandro Palacios\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/www.ticketmas.com.ec\/event-details\/festival-del-vallenato-25-quito\", \"sourceName\": \"TicketM\u00e1s\", \"tour_en\": \"Hebert Vargas, Alex Manga, Los Inquietos y Alejandro Palacios\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"TicketM\u00e1s\"}, {\"date\": \"2026-03-12\", \"time\": \"20:00\", \"artist\": \"Kudai y Kiruba\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/topshows.ec\/shows\/kudai-kiruba\/\", \"sourceName\": \"Top Shows\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"Top Shows\"}, {\"date\": \"2026-03-19\", \"time\": \"20:30\", \"artist\": \"Pablo Albor\u00e1n\", \"tour\": \"Km0\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Pablo-Albor%C3%A1n-en-Quito-Quito\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Km0\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-03-24\", \"time\": \"20:00\", \"artist\": \"USFQ Jazz Fest 2026\", \"tour\": \"Marzo 24-25-26 \u00b7 Abono general\", \"venue\": \"Shakespeare Performance Hall USFQ\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/usfq-jazz-fest-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"endDate\": \"2026-03-26\", \"tour_en\": \"Marzo 24-25-26 \u00b7 Abono general\", \"venue_en\": \"Shakespeare Performance Hall USFQ\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-03-27\", \"time\": \"19:00\", \"artist\": \"SNAP!\", \"tour\": \"LIVE THE 90'S - Quito, Ecuador\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/open.spotify.com\/concert\/5dgRGNVsLJeLrpTykY9brb\", \"sourceName\": \"Spotify\", \"tour_en\": \"LIVE THE 90'S - Quito, Ecuador\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"Spotify\"}, {\"date\": \"2026-04-10\", \"time\": \"19:00\", \"artist\": \"Street Fest\", \"tour\": \"Festival urbano en Quito 2026\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/www.ticketmas.com.ec\/event-details\/street-fest-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Festival urbano en Quito 2026\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-04-14\", \"time\": \"18:00\", \"artist\": \"Nach\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Quito Exhibition Center\", \"source\": \"https:\/\/music.apple.com\/us\/concerts\/ce.f42eac5c-0a20-418f-96b0-d1360b411d68\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Quito Exhibition Center\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-04-17\", \"time\": \"18:00\", \"artist\": \"Festival Herencia Viva\", \"tour\": \"Illapu, Kala Marka, Los Nocheros, Diableros Juje\u00f1os y Jarawi\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/ticketexito.com\/events\/herenciaviva-quito\", \"sourceName\": \"Ticket \u00c9xito\", \"tour_en\": \"Illapu, Kala Marka, Los Nocheros, Diableros Juje\u00f1os y Jarawi\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"Ticket \u00c9xito\"}, {\"date\": \"2026-04-17\", \"time\": \"20:00\", \"artist\": \"Covi Quintana\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Centro de Exposiciones Quito\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43058320-covi-quintana-at-centro-de-exposiciones-quito\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Centro de Exposiciones Quito\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-04-18\", \"time\": \"18:00\", \"artist\": \"El Mundial del Vallenato 2\", \"tour\": \"Festival con Hebert Vargas, Jean Carlos Centeno, Luis Mateus, Adriana Luc\u00eda y Los Embajadores\", \"venue\": \"Coliseo Rumi\u00f1ahui\", \"source\": \"https:\/\/elmundialdelvallenato.com\/\", \"sourceName\": \"Sitio oficial\", \"tour_en\": \"Festival con Hebert Vargas, Jean Carlos Centeno, Luis Mateus, Adriana Luc\u00eda y Los Embajadores\", \"venue_en\": \"Coliseo Rumi\u00f1ahui\", \"sourceName_en\": \"Sitio oficial\"}, {\"date\": \"2026-04-18\", \"time\": \"18:00\", \"artist\": \"Hebert Vargas\", \"tour\": \"Participaci\u00f3n en El Mundial del Vallenato 2\", \"venue\": \"Coliseo Rumi\u00f1ahui\", \"source\": \"https:\/\/www.shazam.com\/es-es\/event\/42e3a134-99df-4522-951d-370505842422\", \"sourceName\": \"Shazam\", \"tour_en\": \"Participaci\u00f3n en El Mundial del Vallenato 2\", \"venue_en\": \"Coliseo Rumi\u00f1ahui\", \"sourceName_en\": \"Shazam\"}, {\"date\": \"2026-04-22\", \"time\": \"20:00\", \"artist\": \"Non Servium\", \"tour\": \"Vuelve a Quito\", \"venue\": \"Centro de Exposiciones Quito\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/non-servium-2026-quito\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Vuelve a Quito\", \"venue_en\": \"Centro de Exposiciones Quito\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-04-23\", \"time\": \"21:00\", \"artist\": \"Daniel Toledo\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro Nacional Sucre\", \"source\": \"https:\/\/open.spotify.com\/concert\/7pEvP54NtvuIV800cECCiL\", \"sourceName\": \"Spotify\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro Nacional Sucre\", \"sourceName_en\": \"Spotify\"}, {\"date\": \"2026-04-24\", \"time\": \"17:00\", \"artist\": \"Pikota Rock\", \"tour\": \"The Pill is you Andres Strada Vazco\", \"venue\": \"Patio Norte CC Metropolitano\", \"source\": \"https:\/\/www.instagram.com\/p\/DXdESXljIcq\/\", \"sourceName\": \"TicketShow\", \"tour_en\": \"The Pill is you Andres Strada Vazco\", \"venue_en\": \"Patio Norte CC Metropolitano\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-04-24\", \"time\": \"20:00\", \"artist\": \"Laura Pausini\", \"tour\": \"Yo Canto World Tour 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Laura-Pausini-Quito-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Yo Canto World Tour 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-04-24\", \"time\": \"20:00\", \"artist\": \"Pablo Olivares\", \"tour\": \"Noche de Alabanza y Adoraci\u00f3n\", \"venue\": \"Teatro Edificio de las C\u00e1maras\", \"source\": \"https:\/\/www.ticketstar365.com\/ticket2\/index.php?modulo=publicacion&con=1758\", \"sourceName\": \"TicketStar365\", \"tour_en\": \"Noche de Alabanza y Adoraci\u00f3n\", \"venue_en\": \"Teatro Edificio de las C\u00e1maras\", \"sourceName_en\": \"TicketStar365\"}, {\"date\": \"2026-04-24\", \"time\": \"21:00\", \"artist\": \"Daniel Toledo\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro Nacional Sucre\", \"source\": \"https:\/\/music.apple.com\/ec\/concerts\/ce.a510d5ca-8987-4956-ae69-3d2b63fa5a5f\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro Nacional Sucre\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-04-25\", \"time\": \"21:00\", \"artist\": \"Daniel Toledo\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro Nacional Sucre\", \"source\": \"https:\/\/www.shazam.com\/es-es\/event\/4e0e0430-d16e-4962-aa98-6e64b88f088e\", \"sourceName\": \"Shazam\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro Nacional Sucre\", \"sourceName_en\": \"Shazam\"}, {\"date\": \"2026-04-30\", \"time\": \"20:00\", \"artist\": \"Steve Aoki\", \"tour\": \"Monster Music Festival 2026\", \"venue\": \"Arena Top Media\", \"source\": \"https:\/\/www.teleamazonas.com\/tendencias\/entretenimiento\/dj-steve-aoki-llega-quito-abril-2026-festival-monster-music-109995\/\", \"sourceName\": \"Teleamazonas\", \"tour_en\": \"Monster Music Festival 2026\", \"venue_en\": \"Arena Top Media\", \"sourceName_en\": \"Teleamazonas\"}, {\"date\": \"2026-04-30\", \"time\": \"20:00\", \"artist\": \"The Capo Mc 07\", \"tour\": \"Back To School Bway\", \"venue\": \"Parque Bicentenario de Quito\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43140980-capo-mc-07-at-parque-bicentenario-de-quito\", \"sourceName\": \"Songkick\", \"tour_en\": \"Back To School Bway\", \"venue_en\": \"Parque Bicentenario de Quito\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-04-30\", \"time\": \"20:30\", \"artist\": \"Sebasti\u00e1n Yatra\", \"tour\": \"Entre tanta gente Tour\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Sebastian-Yatra-Quito-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Entre tanta gente Tour\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-02\", \"time\": \"14:30\", \"artist\": \"Kadosh Punk\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"El Pan\u00f3ptico Casa de Arte\", \"source\": \"https:\/\/open.spotify.com\/concert\/37HZmNdWICTGbUJgKo9XvX\", \"sourceName\": \"Spotify\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"El Pan\u00f3ptico Casa de Arte\", \"sourceName_en\": \"Spotify\"}, {\"date\": \"2026-05-02\", \"time\": \"18:00\", \"artist\": \"J Quiles y Lenny Tav\u00e1rez\", \"tour\": \"Superarte\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Jquiles-y-Lenny-Tavares-Superarte-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Superarte\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-02\", \"time\": \"19:00\", \"artist\": \"Evaristo\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/EVARISTO-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-06\", \"time\": \"20:00\", \"artist\": \"Portugal. The Man\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"SoundGarden UIO\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43013730-portugal-the-man-at-soundgarden-uio\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"SoundGarden UIO\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-05-07\", \"time\": \"20:00\", \"artist\": \"Alberto Plaza\", \"tour\": \"Show Exclusivo\", \"venue\": \"Casa de la M\u00fasica\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/alberto-plaza-show-exclusivo-2026-quito\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Show Exclusivo\", \"venue_en\": \"Casa de la M\u00fasica\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-05-08\", \"time\": \"20:00\", \"artist\": \"Beret\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro Nacional C.C.E.\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43113375-beret-at-teatro-nacional-cce\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro Nacional C.C.E.\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-05-09\", \"time\": \"19:30\", \"artist\": \"MIEL\", \"tour\": \"Artista invitado en el concierto de The Lumineers\", \"venue\": \"Arena Top Media\", \"source\": \"https:\/\/www.instagram.com\/p\/DW7JQiADHz4\/\", \"sourceName\": \"Instagram\", \"tour_en\": \"Artista invitado en el concierto de The Lumineers\", \"venue_en\": \"Arena Top Media\", \"sourceName_en\": \"Instagram\"}, {\"date\": \"2026-05-09\", \"time\": \"20:00\", \"artist\": \"C.R.O\", \"tour\": \"Otra Vez en Tus Ruinas World Tour\", \"venue\": \"Centro de Exposiciones Quito\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/cro-2026-quito\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Otra Vez en Tus Ruinas World Tour\", \"venue_en\": \"Centro de Exposiciones Quito\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-05-09\", \"time\": \"20:00\", \"artist\": \"El Cuarteto de Nos\", \"tour\": \"Tour Puertas\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/music.apple.com\/us\/concerts\/ce.7e788e06-d04e-48ea-b2f8-609c119dd737\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Tour Puertas\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-05-09\", \"time\": \"20:00\", \"artist\": \"God Save The Queen\", \"tour\": \"World Tour 2026\", \"venue\": \"Teatro \u00c1gora CCE\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/God-Save-The-Queen-Quito-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"World Tour 2026\", \"venue_en\": \"Teatro \u00c1gora CCE\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-09\", \"time\": \"20:00\", \"artist\": \"Mujeres a la Plancha + Roberto Rub\u00e9n Rodr\u00edguez\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Quorum Paseo San Francisco\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/mujeres-a-la-plancha-2026-quito\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Quorum Paseo San Francisco\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-05-09\", \"time\": \"20:00\", \"artist\": \"Pxndx Vive + Desierto Drive\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Club La Campi\u00f1a\", \"source\": \"https:\/\/sale.ticketshow.com.ec\/rps\/synopsis.aspx?evento=8995&nombreEvento=Panda_Vive_y_Desierto_Drive_-_Quito_2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Club La Campi\u00f1a\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-09\", \"time\": \"20:00\", \"artist\": \"The Lumineers\", \"tour\": \"The Automatic World Tour\", \"venue\": \"Arena Top Media\", \"source\": \"https:\/\/www.primicias.ec\/entretenimiento\/musica\/concierto-the-lumineers-quito-fecha-entradas-feel-tickets-114724\/\", \"sourceName\": \"Primicias\", \"tour_en\": \"The Automatic World Tour\", \"venue_en\": \"Arena Top Media\", \"sourceName_en\": \"Primicias\"}, {\"date\": \"2026-05-12\", \"time\": \"20:00\", \"artist\": \"Mon Laferte\", \"tour\": \"Femme Fatale Tour\", \"venue\": \"Parque Bicentenario de Quito\", \"source\": \"https:\/\/sale.ticketshow.com.ec\/rps\/synopsis.aspx?evento=8970&nombreEvento=Mon_Laferte_Femme_Fatale_Tour_-_Quito_2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Femme Fatale Tour\", \"venue_en\": \"Parque Bicentenario de Quito\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-15\", \"time\": \"20:00\", \"artist\": \"Elena Rose\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Casa de la Cultura Ecuatoriana\", \"source\": \"https:\/\/music.apple.com\/us\/concerts\/ce.9c8fc797-b95a-4a82-bebc-3be5dc18cead\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Casa de la Cultura Ecuatoriana\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-05-15\", \"time\": \"20:00\", \"artist\": \"Magneto y Mercurio\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Quito Plaza de Toros Monumental\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43153218-magneto-at-quito-plaza-de-toros-monumental\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Quito Plaza de Toros Monumental\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-05-16\", \"time\": \"20:30\", \"artist\": \"Soda Stereo\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Soda-Stereo-Quito-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-17\", \"time\": \"11:00\", \"artist\": \"Lux Eterna\", \"tour\": \"Concierto por la Paz\", \"venue\": \"Teatro Bol\u00edvar\", \"source\": \"https:\/\/sale.ticketshow.com.ec\/rps\/synopsis.aspx?evento=9015&nombreEvento=Lux_Eterna_Sinfonia_Quito_2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Concierto por la Paz\", \"venue_en\": \"Teatro Bol\u00edvar\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-05-18\", \"time\": \"13:00\", \"artist\": \"VIVE LA TRI, EXPERIENCIA INMERSIVA\", \"tour\": \"Experiencia oficial de la Federaci\u00f3n Ecuatoriana de F\u00fatbol\", \"venue\": \"Quicentro Shopping\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/vive-la-tri-experiencia-inmersiva-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Experiencia oficial de la Federaci\u00f3n Ecuatoriana de F\u00fatbol\", \"venue_en\": \"Quicentro Shopping\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-05-21\", \"time\": \"20:00\", \"artist\": \"Caf\u00e9 Sostenible\", \"tour\": \"Cumbre Latinoamericana\", \"venue\": \"Origenes Ecuador - 21 al 23\", \"source\": \"https:\/\/www.facebook.com\/wolfpackecuador\/posts\/llega-la-cumbre-latinoamericana-de-caf%C3%A9-sostenible-or%C3%ADgenes-ecuador-2026-21-22-y\/1573865311410676\/\", \"M\u00e1s Info.\": \"Songkick\", \"endDate\": \"2026-05-23\", \"category\": \"congreso o acad\u00e9mico\", \"tour_en\": \"Cumbre Latinoamericana\", \"venue_en\": \"Origenes Ecuador - 21 al 23\", \"sourceName_en\": \"More Info.\"}, {\"date\": \"2026-05-21\", \"time\": \"20:00\", \"artist\": \"Ricardo Montaner\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/42886525-ricardo-montaner-at-coliseo-general-ruminahui\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-05-22\", \"time\": \"20:00\", \"artist\": \" 22 al 24 Mundial de Tango Quito\", \"tour\": \"Preliminar Mundial de Tango\", \"venue\": \"Leonidas Plaza N 24-300, Quito\", \"source\": \"https:\/\/linktr.ee\/tangoquito\", \"sourceName\": \"M\u00e1s Info.\", \"endDate\": \"2026-05-24\", \"category\": \"festival o feria\", \"tour_en\": \"Preliminar Mundial de Tango\", \"venue_en\": \"Leonidas Plaza N 24-300, Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-05-23\", \"time\": \"19:00\", \"artist\": \"RUGGERO\", \"tour\": \"La Dolce Vita Tour\", \"venue\": \"Auditorio de la C\u00e1mara de Comercio de Quito\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/ruggero-2026-quito\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"La Dolce Vita Tour\", \"venue_en\": \"Auditorio de la C\u00e1mara de Comercio de Quito\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-05-23\", \"time\": \"20:00\", \"artist\": \"Ed Sheeran\", \"tour\": \"Loop Tour\", \"venue\": \"Estadio Ol\u00edmpico Atahualpa\", \"source\": \"https:\/\/www.buenplan.com.ec\/edsheeran\/\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Loop Tour\", \"venue_en\": \"Estadio Ol\u00edmpico Atahualpa\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-05-25\", \"time\": \"20:00\", \"artist\": \"Ecuador Bike Fest 2026 - 25 al 31\", \"tour\": \"Epic Productions\", \"venue\": \"Hoster\u00eda Rincon de Puembo\", \"source\": \"https:\/\/www.facebook.com\/61573411247182\/posts\/quito-del-26-al-31-de-mayo-de-2026\/122105272898780374\/\", \"sourceName\": \"Mas Info\", \"endDate\": \"2026-05-31\", \"category\": \"festival o feria\", \"tour_en\": \"Epic Productions\", \"venue_en\": \"Hoster\u00eda Rincon de Puembo\", \"sourceName_en\": \"Mas Info\"}, {\"date\": \"2026-05-29\", \"time\": \"20:00\", \"artist\": \"No Te Va Gustar\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro San Gabriel\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/42909644-no-te-va-gustar-at-teatro-san-gabriel\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro San Gabriel\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-05-30\", \"time\": \"19:00\", \"artist\": \"Pizza Fest 2026\", \"tour\": \"Bacilos, Lalo Ebratt, Renn y Mach\", \"venue\": \"Parque Bicentenario de Quito\", \"source\": \"https:\/\/music.apple.com\/us\/concerts\/ce.46b7b373-51b8-4bc3-8275-75de97a5f8cb\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Bacilos, Lalo Ebratt, Renn y Mach\", \"venue_en\": \"Parque Bicentenario de Quito\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-05-31\", \"time\": \"19:00\", \"artist\": \"Media Maraton Quito 15K\", \"tour\": \"LA CARRERA M\u00c1S GRANDE E IC\u00d3NICA DEL ECUADOR\", \"venue\": \"Parque Bicentenario de Quito\", \"source\": \"https:\/\/www.quito15krace.com\/\", \"sourceName\": \"M\u00e1s info.\", \"tour_en\": \"LA CARRERA M\u00c1S GRANDE E IC\u00d3NICA DEL ECUADOR\", \"venue_en\": \"Parque Bicentenario de Quito\", \"sourceName_en\": \"M\u00e1s info.\"}, {\"date\": \"2026-06-02\", \"time\": \"20:00\", \"artist\": \"Natalia Lafourcade\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Teatro \u00c1gora CCE\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/42943281-natalia-lafourcade-at-teatro-agora-cce\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Teatro \u00c1gora CCE\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-06-04\", \"time\": \"20:00\", \"artist\": \"Verde 70\", \"tour\": \"Fulgorama Tour\", \"venue\": \"\u00c1gora Casa de la Cultura Ecuatoriana\", \"source\": \"https:\/\/sale.ticketshow.com.ec\/rps\/synopsis.aspx?evento=9001&nombreEvento=VERDE-70-FULGORAMA-TOUR-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Fulgorama Tour\", \"venue_en\": \"\u00c1gora Casa de la Cultura Ecuatoriana\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-06-05\", \"time\": \"20:00\", \"artist\": \"Bandalos Chinos\", \"tour\": \"V\u00e1ndalos Tour\", \"venue\": \"Quito\", \"source\": \"https:\/\/www.buenplan.com.ec\/\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"V\u00e1ndalos Tour\", \"venue_en\": \"Quito\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-06-06\", \"time\": \"20:00\", \"artist\": \"Tygers of Pan Tang\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Orion Club\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43098374-tygers-of-pan-tang-at-orion-club\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Orion Club\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-06-07\", \"time\": \"20:00\", \"artist\": \"Usted Se\u00f1alemelo\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"SoundGarden UIO\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43113406-usted-senalemelo-at-soundgarden-uio\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"SoundGarden UIO\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-06-12\", \"time\": \"19:30\", \"artist\": \"Alex Ponce\", \"tour\": \"La \u00daltima Noche\", \"venue\": \"Teatro San Gabriel\", \"source\": \"https:\/\/open.spotify.com\/concert\/0Zidl96ZIrqOLzK4Ii2Jcz\", \"sourceName\": \"Spotify\", \"tour_en\": \"La \u00daltima Noche\", \"venue_en\": \"Teatro San Gabriel\", \"sourceName_en\": \"Spotify\"}, {\"date\": \"2026-06-18\", \"time\": \"20:00\", \"artist\": \"Sin Bandera\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/music.apple.com\/us\/concerts\/ce.4a2cd180-de6c-4dcd-bd16-cf8e255d44f4\", \"sourceName\": \"Apple Music\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"Apple Music\"}, {\"date\": \"2026-06-19\", \"time\": \"20:00\", \"artist\": \"El Amo de la Cumbia DIGO YO\", \"tour\": \"Homenaje Oficial\", \"venue\": \"Agora de la Casa de la Cultura Ecuatoriana\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/el-amo-de-la-cumbia-digo-yo-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Homenaje Oficial\", \"venue_en\": \"Agora de la Casa de la Cultura Ecuatoriana\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-20\", \"time\": \"11:00\", \"artist\": \"Especial D\u00eda del Padre\", \"tour\": \"Pepe: Historias de Padres \u00b7 Ruta especial con fogata y narraci\u00f3n\", \"venue\": \"Jard\u00edn de la Capilla del Se\u00f1or de los Milagros (Loma Grande), Quito\", \"source\": \"https:\/\/clapzy.app\/event\/noches-de-fogat\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"rutas tur\u00edsticas\", \"tour_en\": \"Pepe: Historias de Padres \u00b7 Ruta especial con fogata y narraci\u00f3n\", \"venue_en\": \"Jard\u00edn de la Capilla del Se\u00f1or de los Milagros (Loma Grande), Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-20\", \"time\": \"12:00\", \"artist\": \"Festival Internacional Una Carta al Cielo\", \"tour\": \"La Despedida \u00b7 Alcolirikoz, Gonzalo Genek, Afaz Natural y Penyair\", \"venue\": \"Club La Campi\u00f1a - Antiguo Country Club de la FAE\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/una-carta-al-cielo-la-despedida-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"La Despedida \u00b7 Alcolirikoz, Gonzalo Genek, Afaz Natural y Penyair\", \"venue_en\": \"Club La Campi\u00f1a - Antiguo Country Club de la FAE\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-26\", \"time\": \"09:30-19:00 \u00b7 del 26 al 28 de junio\", \"artist\": \"Sal\u00f3n del Chocolate, Cacao y Caf\u00e9 Ecuador 2026\", \"tour\": \"16\u00aa edici\u00f3n con degustaciones, concursos, catas, talleres, experiencias gastron\u00f3micas y rueda de negocios B2B\", \"venue\": \"CCMQ\", \"source\": \"https:\/\/www.salondelchocolateecuador.com\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"festival o feria\", \"tour_en\": \"16\u00aa edici\u00f3n con degustaciones, concursos, catas, talleres, experiencias gastron\u00f3micas y rueda de negocios B2B\", \"venue_en\": \"CCMQ\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-26\", \"time\": \"20:00 \u00b7 del 26 al 28 de junio\", \"artist\": \"EL GRAN SHOWMAN\", \"tour\": \"Producci\u00f3n musical inspirada en The Greatest Showman, presentada por Forzav\u00fa\", \"venue\": \"Teatro Nacional Sucre\", \"source\": \"https:\/\/www.meet2go.com\/tour\/elogranshowmanuio\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"musical o artes esc\u00e9nicas\", \"endDate\": \"2026-06-28\", \"tour_en\": \"Producci\u00f3n musical inspirada en The Greatest Showman, presentada por Forzav\u00fa\", \"venue_en\": \"Teatro Nacional Sucre\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-27\", \"time\": \"07:00\", \"artist\": \"Sabores y Saberes de Pifo\", \"tour\": \"Ruta tur\u00edstica con experiencias gastron\u00f3micas y culturales en Pifo\", \"venue\": \"Pifo, Quito\", \"source\": \"https:\/\/visitquito.ec\/go\/saberes\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"rutas tur\u00edsticas\", \"tour_en\": \"Ruta tur\u00edstica con experiencias gastron\u00f3micas y culturales en Pifo\", \"venue_en\": \"Pifo, Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-27\", \"time\": \"17:00\", \"artist\": \"ADN Mixology Tour\", \"tour\": \"Ruta tur\u00edstica de cocteler\u00eda con ADN del Ron, ADN del Gin y ADN del Miske\", \"venue\": \"Quito\", \"source\": \"https:\/\/api.whatsapp.com\/send?phone=593991443160&text=Hola,%20vengo%20por%20el%20precio%20promocional%20por%20Pasaporte%20Experiencias%20Quito.%20Ruta%20Sabores%20y%20Ave%20Codigo%20UIOPASS26-ADN-MIXOLOGY\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"rutas tur\u00edsticas\", \"tour_en\": \"Ruta tur\u00edstica de cocteler\u00eda con ADN del Ron, ADN del Gin y ADN del Miske\", \"venue_en\": \"Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-06-27\", \"time\": \"20:00\", \"artist\": \"Lenny Tav\u00e1rez y Justin Quiles\", \"tour\": \"Superarte\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Jquiles-y-Lenny-Tavares-Superarte-QUITO-2026\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Superarte\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-03\", \"time\": \"20:00\", \"artist\": \"Sexores\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"The Cat Cave\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43137166-sexores-at-cat-cave\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"The Cat Cave\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-07-04\", \"time\": \"20:00\", \"artist\": \"Dayanara\", \"tour\": \"CortaVenas Tour\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/dayanara-cortavenas-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"CortaVenas Tour\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-04\", \"time\": \"21:00\", \"artist\": \"Matute\", \"tour\": \"Disco Stereo Tour\", \"venue\": \"Arena Top Media\", \"source\": \"https:\/\/open.spotify.com\/concert\/3xv7JPEVQRRzLc4fsBD6M6\", \"sourceName\": \"Spotify\", \"tour_en\": \"Disco Stereo Tour\", \"venue_en\": \"Arena Top Media\", \"sourceName_en\": \"Spotify\"}, {\"date\": \"2026-07-06\", \"endDate\": \"2026-07-08\", \"time\": \"08:30 \u00b7 del 6 al 8 de julio\", \"artist\": \"Quito Cocktail Week\", \"tour\": \"Quito Cocktail Week 2026, la primera gran semana de cocteler\u00eda y hospitalidad del Ecuador.\", \"venue\": \"USFQ Gastronom\u00eda y Hoteler\u00eda - Cumbay\u00e1\", \"source\": \"https:\/\/www.meet2go.com\/ev\/quitococktailweek\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Quito Cocktail Week 2026, a specialized event focused on hospitality, gastronomic experiences and industry trends in Ecuador.\", \"venue_en\": \"USFQ Gastronomy and Hospitality - Cumbay\u00e1\", \"sourceName_en\": \"More Info.\", \"category\": \"congreso o acad\u00e9mico\"}, {\"date\": \"2026-07-10\", \"time\": \"20:00\", \"artist\": \"Liv Kristine\", \"tour\": \"Ethereal y Don Craneos\", \"venue\": \"Miami Convenciones y Eventos\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43107159-liv-kristine-at-miami-convenciones-y-eventos\", \"sourceName\": \"Songkick\", \"tour_en\": \"Ethereal y Don Craneos\", \"venue_en\": \"Miami Convenciones y Eventos\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-07-11\", \"time\": \"11:00\", \"artist\": \"Gastro Fest 2026 \/ Copa Cervecera\", \"tour\": \"10 a\u00f1os \u00b7 festival cervecero y gastron\u00f3mico\", \"venue\": \"Ciudad Mitad del Mundo\", \"source\": \"https:\/\/www.instagram.com\/p\/DDKLmy2uBCf\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"festival o feria\", \"tour_en\": \"10 a\u00f1os \u00b7 festival cervecero y gastron\u00f3mico\", \"venue_en\": \"Ciudad Mitad del Mundo\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-12\", \"time\": \"11:00\", \"artist\": \"Gastro Fest 2026 \/ Copa Cervecera\", \"tour\": \"10 a\u00f1os \u00b7 festival cervecero y gastron\u00f3mico\", \"venue\": \"Ciudad Mitad del Mundo\", \"source\": \"https:\/\/www.instagram.com\/p\/DDKLmy2uBCf\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"festival o feria\", \"tour_en\": \"10 a\u00f1os \u00b7 festival cervecero y gastron\u00f3mico\", \"venue_en\": \"Ciudad Mitad del Mundo\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-16\", \"time\": \"19:00\", \"artist\": \"BLASFEMIA 10 a\u00f1os \/ GUANACO\", \"tour\": \"Obra concebida como un \u00e1lbum conceptual, con una narrativa \u00edntima y ritual a lo largo de diez escenas que mezclan m\u00fasica, teatro y danza.\", \"venue\": \"Teatro Nacional Sucre\", \"source\": \"https:\/\/teatrosucre.com\/event\/blasfemia-10-anos\/\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"A work conceived as a conceptual album, with an intimate and ritual narrative across ten scenes that blend music, theatre and dance.\", \"venue_en\": \"Teatro Nacional Sucre\", \"sourceName_en\": \"More Info.\", \"category\": \"musical o artes esc\u00e9nicas\"}, {\"date\": \"2026-07-17\", \"time\": \"20:00\", \"artist\": \"Kany Garc\u00eda\", \"tour\": \"Tour 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/kany-garcia-quito-2026\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Tour 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-07-18\", \"time\": \"12:00\", \"artist\": \"Asado Fest 2026 Quito\", \"tour\": \"Feria gastron\u00f3mica, m\u00fasica en vivo y final del Mundial\", \"venue\": \"ARENA TOP MEDIA CUMBAYA\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/asado-fest-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Feria gastron\u00f3mica, m\u00fasica en vivo y final del Mundial\", \"venue_en\": \"ARENA TOP MEDIA CUMBAYA\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-25\", \"time\": \"20:00\", \"artist\": \"Salsa 3 Para el Alma\", \"tour\": \"Guayac\u00e1n Orquesta, Grupo Gal\u00e9, Atrato River, Paolo Plaza y La Suprema Corte\", \"venue\": \"Plaza de Toros Quito\", \"source\": \"https:\/\/www.instagram.com\/p\/DVfJPb8FXr_\/\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Guayac\u00e1n Orquesta, Grupo Gal\u00e9, Atrato River, Paolo Plaza y La Suprema Corte\", \"venue_en\": \"Plaza de Toros Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-29\", \"time\": \"20:00\", \"artist\": \"Arc\u00e1ngel\", \"tour\": \"La 8va Maravilla World Tour \u00b7 2da funci\u00f3n\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/ARCANGEL-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"La 8va Maravilla World Tour \u00b7 2da funci\u00f3n\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-07-30\", \"time\": \"20:00\", \"artist\": \"Arc\u00e1ngel\", \"tour\": \"La 8va Maravilla World Tour\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/ARCANGEL-PRIMERA-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"La 8va Maravilla World Tour\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-07-30\", \"time\": \"20:30\", \"artist\": \"Mora\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Coliseo Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Mora-en-Quito-Quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Coliseo Rumi\u00f1ahui\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-07-31\", \"time\": \"Por Confirmar\", \"artist\": \"Llacta Flow Festival\", \"tour\": \"Festival\", \"venue\": \"P\/C\", \"source\": \"https:\/\/www.ticketstar365.com\/\", \"sourceName\": \"Songkick\", \"tour_en\": \"Festival\", \"venue_en\": \"P\/C\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-07-31\", \"endDate\": \"2026-08-02\", \"time\": \"Jornada completa \u00b7 del 31 de julio al 2 de agosto\", \"artist\": \"UTMB Quito\", \"tour\": \"Quito Trail by UTMB\u00ae \u00b7 carreras y actividades oficiales\", \"venue\": \"Quito\", \"source\": \"https:\/\/quito.utmb.world\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"festival o feria\", \"tour_en\": \"Quito Trail by UTMB\u00ae \u00b7 carreras y actividades oficiales\", \"venue_en\": \"Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-08-03\", \"time\": \"Jornada completa \u00b7 del 3 al 7 de agosto\", \"artist\": \"Ecuadorian Summer Camp on Telerobotics and Vehicular Technology 2026\", \"tour\": \"Campamento acad\u00e9mico internacional para estudiantes y young professionals en telerob\u00f3tica y tecnolog\u00eda vehicular\", \"venue\": \"Escuela Polit\u00e9cnica Nacional, Quito\", \"source\": \"https:\/\/events.vtools.ieee.org\/m\/560729\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"congreso o acad\u00e9mico\", \"tour_en\": \"Campamento acad\u00e9mico internacional para estudiantes y young professionals en telerob\u00f3tica y tecnolog\u00eda vehicular\", \"venue_en\": \"Escuela Polit\u00e9cnica Nacional, Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-08-06\", \"time\": \"20:00\", \"artist\": \"Ricardo Arjona\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Estadio Ol\u00edmpico Atahualpa\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/42943280-ricardo-arjona-at-estadio-olimpico-atahualpa\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Estadio Ol\u00edmpico Atahualpa\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-08-07\", \"endDate\": \"2026-08-10\", \"time\": \"19:00 \u00b7 del 7 al 10 de agosto\", \"artist\": \"Sabe a Ecuador\", \"tour\": \"Hueca Fest\", \"venue\": \"Centro Convenciones\", \"source\": \"https:\/\/huecafest.com.ec\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"festival o feria\", \"tour_en\": \"Hueca Fest - Platos ecuatorianos\", \"venue_en\": \"Centro Hist\u00f3rico de Quito\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-08-27\", \"time\": \"20:00\", \"artist\": \"Dante Gebel\", \"tour\": \"Conferencia \/ show en Quito 2026\", \"venue\": \"Teatro Nacional CCE\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Dante-Gebel-Quito-2026\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"congreso o acad\u00e9mico\", \"tour_en\": \"Conferencia \/ show en Quito 2026\", \"venue_en\": \"Teatro Nacional CCE\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-08-27\", \"time\": \"20:30\", \"artist\": \"Rawayana\", \"tour\": \"\u00bfD\u00f3nde es el After? Tour\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/RAWAYANA-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"\u00bfD\u00f3nde es el After? Tour\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-08-29\", \"time\": \"18:00\", \"artist\": \"FTC Live al Parque 2026\", \"tour\": \"MAROON 5 \u2219 YANDEL SINF\u00d3NICO \u2219 MYKE TOWERS \u2219 LOST FREQUENCIES \u2219 FRUKO Y SUS TESOS\", \"venue\": \"Parque Bicentenario de Quito\", \"source\": \"https:\/\/www.songkick.com\/es\/festivals\/3780332-ftc-live-al-parque\/id\/43154938-ftc-live-al-parque-2026\", \"sourceName\": \"Songkick\", \"tour_en\": \"MAROON 5 \u2219 YANDEL SINF\u00d3NICO \u2219 MYKE TOWERS \u2219 LOST FREQUENCIES \u2219 FRUKO Y SUS TESOS\", \"venue_en\": \"Parque Bicentenario de Quito\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-09-03\", \"time\": \"20:00\", \"artist\": \"Carlos Vives\", \"tour\": \"Tour al Sol\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/CARLOS-VIVES-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Tour al Sol\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-09-09\", \"time\": \"20:00\", \"artist\": \"WWE Live in Quito 2026\", \"tour\": \"Show 360\u00b0\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/wwe\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Show 360\u00b0\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-09-11\", \"time\": \"09:00\", \"artist\": \"EXPODENTAL 2026\", \"tour\": \"Feria especializada del sector dental \u00b7 11 al 13 de septiembre\", \"venue\": \"CCMQ\", \"source\": \"https:\/\/ccmq.ec\/calendario\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"congreso o acad\u00e9mico\", \"endDate\": \"2026-09-13\", \"tour_en\": \"Feria especializada del sector dental \u00b7 11 al 13 de septiembre\", \"venue_en\": \"CCMQ\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-09-11\", \"time\": \"20:00\", \"artist\": \"NASA Histoires\", \"tour\": \"D\u00edas Malos Tour\", \"venue\": \"Teatro San Gabriel\", \"source\": \"https:\/\/open.spotify.com\/concert\/1kqEH8hvCY8CIa1uYbcP02\", \"sourceName\": \"Spotify\", \"tour_en\": \"D\u00edas Malos Tour\", \"venue_en\": \"Teatro San Gabriel\", \"sourceName_en\": \"Spotify\"}, {\"date\": \"2026-09-17\", \"time\": \"09:00\", \"artist\": \"EXPOSMARTISP 2026\", \"tour\": \"Exposici\u00f3n especializada \u00b7 17 al 18 de septiembre\", \"venue\": \"CCMQ\", \"source\": \"https:\/\/ccmq.ec\/calendario\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"congreso o acad\u00e9mico\", \"endDate\": \"2026-09-18\", \"tour_en\": \"Exposici\u00f3n especializada \u00b7 17 al 18 de septiembre\", \"venue_en\": \"CCMQ\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-09-17\", \"time\": \"20:00\", \"artist\": \"Andr\u00e9s Cepeda\", \"tour\": \"Nuestra vida en canciones\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/ANDRES-CEPEDA-QUITO-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Nuestra vida en canciones\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-09-19\", \"time\": \"19:00\", \"artist\": \"Trueno\", \"tour\": \"Tour Turrazo 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/trueno-turrazo-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Tour Turrazo 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-09-23\", \"time\": \"20:00\", \"artist\": \"Sonata Arctica\", \"tour\": \"30th Anniversary Tour + Blacksun + Kill City\", \"venue\": \"Teatro San Gabriel\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/43079231-sonata-arctica-at-teatro-san-gabriel\", \"sourceName\": \"Songkick\", \"tour_en\": \"30th Anniversary Tour + Blacksun + Kill City\", \"venue_en\": \"Teatro San Gabriel\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-09-26\", \"time\": \"20:00\", \"artist\": \"Romeo Santos y Prince Royce\", \"tour\": \"Mas tarde que nunca\", \"venue\": \"Estadio Ol\u00edmpico Atahualpa\", \"source\": \"https:\/\/www.instagram.com\/p\/DYNH91WCebQ\/?img_index=2\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Mas tarde que nunca\", \"venue_en\": \"Estadio Ol\u00edmpico Atahualpa\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-09-30\", \"time\": \"20:00\", \"artist\": \"This Is Michael\", \"tour\": \"Espect\u00e1culo homenaje a Michael Jackson\", \"venue\": \"Teatro Nacional CCE\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/QUITO-THIS-IS-MICHAEL-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Espect\u00e1culo homenaje a Michael Jackson\", \"venue_en\": \"Teatro Nacional CCE\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-10-09\", \"time\": \"20:00\", \"artist\": \"Grupo Frontera\", \"tour\": \"Concierto en Quito 2026\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.songkick.com\/es\/concerts\/42943273-grupo-frontera-at-coliseo-general-ruminahui\", \"sourceName\": \"Songkick\", \"tour_en\": \"Concierto en Quito 2026\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"Songkick\"}, {\"date\": \"2026-10-14\", \"time\": \"19:30\", \"artist\": \"The Raven Age\", \"tour\": \"Invitado especial de Iron Maiden\", \"venue\": \"Estadio Ol\u00edmpico Atahualpa\", \"source\": \"https:\/\/www.buenplan.com.ec\/ironmaiden\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Invitado especial de Iron Maiden\", \"venue_en\": \"Estadio Ol\u00edmpico Atahualpa\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-10-14\", \"time\": \"21:00\", \"artist\": \"Iron Maiden\", \"tour\": \"Run For Your Lives World Tour\", \"venue\": \"Estadio Ol\u00edmpico Atahualpa\", \"source\": \"https:\/\/www.buenplan.com.ec\/ironmaiden\", \"sourceName\": \"BuenPlan\", \"tour_en\": \"Run For Your Lives World Tour\", \"venue_en\": \"Estadio Ol\u00edmpico Atahualpa\", \"sourceName_en\": \"BuenPlan\"}, {\"date\": \"2026-10-24\", \"time\": \"20:00\", \"artist\": \"Akriila\", \"tour\": \"El Tour de Lucy 2026\", \"venue\": \"Teatro San Gabriel\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/akriila-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"El Tour de Lucy 2026\", \"venue_en\": \"Teatro San Gabriel\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-10-24\", \"time\": \"20:00\", \"artist\": \"Humbe\", \"tour\": \"Due\u00f1o del Cielo Tour\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Humbe-en-Quito-2026\", \"sourceName\": \"TicketShow\", \"tour_en\": \"Due\u00f1o del Cielo Tour\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-10-30\", \"time\": \"19:00\", \"artist\": \"Def Leppard\", \"tour\": \"Concierto en Quito 2026 \u00b7 invitado especial: Extreme\", \"venue\": \"Estadio Ol\u00edmpico Atahualpa\", \"source\": \"https:\/\/www.livenation.lat\/def-leppard-tickets-adp3791\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Concierto en Quito 2026 \u00b7 invitado especial: Extreme\", \"venue_en\": \"Estadio Ol\u00edmpico Atahualpa\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-11-06\", \"time\": \"20:30\", \"artist\": \"Alejandro Fern\u00e1ndez\", \"tour\": \"De Rey a Rey\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Alejandro-Fernandez-en-Quito-Quito\", \"sourceName\": \"TicketShow\", \"tour_en\": \"De Rey a Rey\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"TicketShow\"}, {\"date\": \"2026-11-07\", \"time\": \"20:30\", \"artist\": \"Daniel Fern\u00e1ndez\", \"tour\": \"De Rey a Rey\", \"venue\": \"Coliseo General Rumi\u00f1ahui\", \"source\": \"https:\/\/www.ticketshow.com.ec\/evento\/Alejandro-Fernandez-en-Quito-Quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"De Rey a Rey\", \"venue_en\": \"Coliseo General Rumi\u00f1ahui\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-11-12\", \"time\": \"09:00\", \"artist\": \"OIL & POWER 2026\", \"tour\": \"Congreso y feria especializada \u00b7 12 al 14 de noviembre\", \"venue\": \"CCMQ\", \"source\": \"https:\/\/ccmq.ec\/calendario\/\", \"sourceName\": \"M\u00e1s Info.\", \"category\": \"congreso o acad\u00e9mico\", \"endDate\": \"2026-11-14\", \"tour_en\": \"Congreso y feria especializada \u00b7 12 al 14 de noviembre\", \"venue_en\": \"CCMQ\", \"sourceName_en\": \"M\u00e1s Info.\"}, {\"date\": \"2026-11-14\", \"time\": \"11:00\", \"artist\": \"ABRAKDABRA FEST\", \"tour\": \"Barones con Sherpa, Leo Jim\u00e9nez, Saratoga, Stravaganzza y 037\", \"venue\": \"Club La Campi\u00f1a - Antiguo Country Club De La Fae\", \"source\": \"https:\/\/www.buenplan.com.ec\/event\/abrakdbra-2026-quito\", \"sourceName\": \"M\u00e1s Info.\", \"tour_en\": \"Barones con Sherpa, Leo Jim\u00e9nez, Saratoga, Stravaganzza y 037\", \"venue_en\": \"Club La Campi\u00f1a - Antiguo Country Club De La Fae\", \"sourceName_en\": \"M\u00e1s Info.\"}];\n    const rowsPerPage = 5;\n    let currentLang = 'es';\n    const monthNamesEs = [\"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\", \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"];\n    const monthNamesEn = [\"january\", \"february\", \"march\", \"april\", \"may\", \"june\", \"july\", \"august\", \"september\", \"october\", \"november\", \"december\"];\n    const monthMap = {\n      enero: 1, febrero: 2, marzo: 3, abril: 4, mayo: 5, junio: 6,\n      julio: 7, agosto: 8, septiembre: 9, octubre: 10, noviembre: 11, diciembre: 12\n    };\n    const UI = {\n      es: {\n        eyebrow: 'Agenda de Eventos 2026 \u00b7 Quito',\n        title: 'Qu\u00e9 hacer en Quito hoy: agenda de eventos, conciertos y actividades',\n        searchPlaceholder: 'Buscar por artista, tour, festival o congreso',\n        searchAria: 'Buscar por artista, tour, festival o congreso',\n        venueAria: 'Filtrar por recinto',\n        categoryAria: 'Filtrar por categor\u00eda',\n        allVenues: 'Todos los recintos',\n        allCategories: 'Todas las categor\u00edas',\n        categories: {\n          'concierto o tour': 'Concierto o tour',\n          'festival o feria': 'Festival o feria',\n          'congreso o acad\u00e9mico': 'Congreso o acad\u00e9mico',\n          'musical o artes esc\u00e9nicas': 'Musical o artes esc\u00e9nicas',\n          'rutas tur\u00edsticas': 'Rutas Tur\u00edsticas'\n        },\n        tabsAll: 'Todos',\n        date: 'Fecha', time: 'Hora', event: 'Artista \/ festival', detail: 'Tour \/ detalle', venue: 'Lugar', more: 'M\u00e1s Info.',\n        noLink: 'Sin enlace', save: 'Guardar Evento',\n        noEvents: 'No hay eventos disponibles con los filtros seleccionados.',\n        multiDay: 'Multid\u00eda',\n        availableFrom: 'Disponible del', to: 'al',\n        resultsOne: 'evento disponible', resultsMany: 'eventos disponibles',\n        showingRange: 'Mostrando', of: 'de',\n        allMonths: 'todos los meses', allVenuesMeta: 'todos los recintos', allCategoriesMeta: 'todas las categor\u00edas'\n      },\n      en: {\n        eyebrow: '2026 Events Agenda \u00b7 Quito',\n        title: 'What to do in Quito today: events, concerts and activities agenda',\n        searchPlaceholder: 'Search by artist, tour, festival or congress',\n        searchAria: 'Search by artist, tour, festival or congress',\n        venueAria: 'Filter by venue',\n        categoryAria: 'Filter by category',\n        allVenues: 'All venues',\n        allCategories: 'All categories',\n        categories: {\n          'concierto o tour': 'Concert or tour',\n          'festival o feria': 'Festival or fair',\n          'congreso o acad\u00e9mico': 'Congress or academic',\n          'musical o artes esc\u00e9nicas': 'Musical or performing arts',\n          'rutas tur\u00edsticas': 'Tourist Routes'\n        },\n        tabsAll: 'All',\n        date: 'Date', time: 'Time', event: 'Artist \/ festival', detail: 'Tour \/ details', venue: 'Venue', more: 'More Info.',\n        noLink: 'No link', save: 'Save Event',\n        noEvents: 'No events are available with the selected filters.',\n        multiDay: 'Multi-day',\n        availableFrom: 'Available from', to: 'to',\n        resultsOne: 'event available', resultsMany: 'events available',\n        showingRange: 'Showing', of: 'of',\n        allMonths: 'all months', allVenuesMeta: 'all venues', allCategoriesMeta: 'all categories'\n      }\n    };\n    const VALID_CATEGORIES = new Set([\n      'concierto o tour',\n      'festival o feria',\n      'congreso o acad\u00e9mico',\n      'musical o artes esc\u00e9nicas',\n      'rutas tur\u00edsticas'\n    ]);\n    const collator = new Intl.Collator('es', { sensitivity: 'base', numeric: true });\n\n    let activeMonth = 'todos';\n    let currentPage = 1;\n    let searchTerm = '';\n    let activeVenue = 'todos';\n    let activeCategory = 'todos';\n\n    const tabsContainer = document.getElementById('monthTabs');\n    const tableBody = document.getElementById('concertTableBody');\n    const emptyState = document.getElementById('emptyState');\n    const monthLabelEl = document.getElementById('activeMonthLabel');\n    const resultsLabelEl = document.getElementById('resultsLabel');\n    const pagerInfoEl = document.getElementById('pagerInfo');\n    const paginationEl = document.getElementById('pagination');\n    const searchInputEl = document.getElementById('searchInput');\n    const venueFilterEl = document.getElementById('venueFilter');\n    const categoryFilterEl = document.getElementById('categoryFilter');\n    const tableWrapEl = document.querySelector('.table-wrap');\n\n    function normalizeText(value) {\n      return String(value || '')\n        .toLowerCase()\n        .normalize('NFD')\n        .replace(\/[\\u0300-\\u036f]\/g, '')\n        .replace(\/\\s+\/g, ' ')\n        .trim();\n    }\n\n    function isValidUrl(value) {\n      try {\n        new URL(String(value || ''));\n        return true;\n      } catch (error) {\n        return false;\n      }\n    }\n\n    function parseLocalDate(dateStr, endOfDay = true) {\n      if (!dateStr || !\/^\\d{4}-\\d{2}-\\d{2}$\/.test(dateStr)) return null;\n      const [year, month, day] = dateStr.split('-').map(Number);\n      return endOfDay\n        ? new Date(year, month - 1, day, 23, 59, 59, 999)\n        : new Date(year, month - 1, day, 0, 0, 0, 0);\n    }\n\n    function toIsoDate(year, month, day) {\n      return `${String(year)}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n    }\n\n    function extractEndDate(item) {\n      if (item.endDate && \/^\\d{4}-\\d{2}-\\d{2}$\/.test(item.endDate)) return item.endDate;\n\n      const baseDate = item.date;\n      if (!\/^\\d{4}-\\d{2}-\\d{2}$\/.test(baseDate)) return baseDate;\n      const [year, month] = baseDate.split('-').map(Number);\n      const haystack = normalizeText(`${item.time} ${item.tour} ${item.artist}`);\n\n      const rangeMonthMatch = haystack.match(\/(?:del\\s+)?(\\d{1,2})\\s+al\\s+(\\d{1,2})\\s+de\\s+(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)\/);\n      if (rangeMonthMatch) {\n        const endDay = Number(rangeMonthMatch[2]);\n        const monthName = rangeMonthMatch[3];\n        const endMonth = monthMap[monthName] || month;\n        return toIsoDate(year, endMonth, endDay);\n      }\n\n      const multiDaysMatch = haystack.match(\/(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)\\s+(\\d{1,2})-(\\d{1,2})-(\\d{1,2})\/);\n      if (multiDaysMatch) {\n        const endDay = Number(multiDaysMatch[4]);\n        const endMonth = monthMap[multiDaysMatch[1]] || month;\n        return toIsoDate(year, endMonth, endDay);\n      }\n\n      return baseDate;\n    }\n\n    function extractSortTime(value) {\n      const text = String(value || '');\n      const match = text.match(\/(\\d{1,2})[:hH](\\d{2})\/);\n      if (!match) return 9999;\n      const hours = Number(match[1]);\n      const minutes = Number(match[2]);\n      if (Number.isNaN(hours) || Number.isNaN(minutes)) return 9999;\n      return (hours * 60) + minutes;\n    }\n\n    function normalizeVenue(value) {\n      const venue = String(value || '').trim();\n      if (!venue) return 'Por confirmar';\n      if (venue.includes('Centro de Convenciones Metropolitano de Quito')) return 'CCMQ';\n      if (venue === 'P\/C') return 'Por confirmar';\n      return venue;\n    }\n\n    function normalizeCategoryValue(value) {\n      const normalized = normalizeText(value);\n      if (normalized === 'festival') return 'festival o feria';\n      if (normalized === 'congreso') return 'congreso o acad\u00e9mico';\n      if (VALID_CATEGORIES.has(normalized)) return normalized;\n      return '';\n    }\n\n    function inferCategory(item) {\n      const explicit = normalizeCategoryValue(item.category);\n      if (explicit) return explicit;\n\n      const text = normalizeText(`${item.artist} ${item.tour} ${item.venue}`);\n      const stageKeywords = ['musical', 'teatro', 'showman', 'artes escenicas', 'artes esc\u00e9nicas', 'opera', '\u00f3pera', 'danza', 'escenico', 'esc\u00e9nico', 'ballet'];\n      const academicKeywords = ['congreso', 'cumbre', 'conferencia', 'expo', 'summit', 'academic', 'academico', 'acad\u00e9mico', 'camp', 'campamento', 'technology', 'tecnologia', 'tecnolog\u00eda', 'telerobotics', 'vehicular', 'seminario', 'inmersiva', 'feria especializada'];\n      const festivalKeywords = ['festival', 'fest', 'feria', 'salon', 'sal\u00f3n', 'street fest', 'gastro fest', 'bike fest', 'llacta flow', 'live al parque', 'mundial del vallenato', 'pizza fest', 'tango', 'race', 'maraton', 'marat\u00f3n', 'chocolate', 'cacao', 'cafe', 'caf\u00e9', 'hueca fest', 'utmb', 'trail', 'copa cervecera'];\n      const routeKeywords = ['ruta', 'rutas', 'recorrido', 'itinerario', 'pasaporte experiencias', 'mixology tour', 'quito eterno', 'pifo'];\nif (stageKeywords.some(keyword => text.includes(keyword))) return 'musical o artes esc\u00e9nicas';\n      if (academicKeywords.some(keyword => text.includes(keyword))) return 'congreso o acad\u00e9mico';\n      if (routeKeywords.some(keyword => text.includes(keyword))) return 'rutas tur\u00edsticas';\n      if (festivalKeywords.some(keyword => text.includes(keyword))) return 'festival o feria';\n      return 'concierto o tour';\n    }\n\n    \n    function getMonthNames() {\n      return currentLang === 'en' ? monthNamesEn : monthNamesEs;\n    }\n\n    function displayTour(item) {\n      return currentLang === 'en' ? (item.tour_en || item.tour || '') : (item.tour || '');\n    }\n\n    function displayVenue(item) {\n      return currentLang === 'en' ? (item.venue_en || item.venue || '') : (item.venue || '');\n    }\n\n    function displaySourceName(item) {\n      return currentLang === 'en' ? (item.sourceName_en || item.sourceName || UI.en.more) : (item.sourceName || UI.es.more);\n    }\n\n    function updateUIText() {\n      const t = UI[currentLang];\n      document.documentElement.lang = currentLang;\n      document.getElementById('eyebrowText').textContent = t.eyebrow;\n      document.getElementById('titleText').textContent = t.title;\n      searchInputEl.placeholder = t.searchPlaceholder;\n      searchInputEl.setAttribute('aria-label', t.searchAria);\n      venueFilterEl.setAttribute('aria-label', t.venueAria);\n      categoryFilterEl.setAttribute('aria-label', t.categoryAria);\n      document.querySelector('thead th:nth-child(1)').textContent = t.date;\n      document.querySelector('thead th:nth-child(2)').textContent = t.time;\n      document.querySelector('thead th:nth-child(3)').textContent = t.event;\n      document.querySelector('thead th:nth-child(4)').textContent = t.detail;\n      document.querySelector('thead th:nth-child(5)').textContent = t.venue;\n      document.querySelector('thead th:nth-child(6)').textContent = t.more;\n      emptyState.textContent = t.noEvents;\n      document.getElementById('langEsBtn').classList.toggle('active', currentLang === 'es');\n      document.getElementById('langEnBtn').classList.toggle('active', currentLang === 'en');\n    }\n\nfunction normalizeEvent(item, index) {\n      const venue = normalizeVenue(item.venue);\n      const category = inferCategory(item);\n      const source = isValidUrl(item.source) ? item.source : '';\n      const endDate = extractEndDate(item);\n\n      return {\n        ...item,\n        id: normalizeText(`${item.date}__${item.artist}__${venue}`) || `evento-${index}`,\n        date: item.date,\n        endDate,\n        time: String(item.time || '').trim() || 'Por confirmar',\n        sortTime: extractSortTime(item.time),\n        artist: String(item.artist || '').trim(),\n        tour: String(item.tour || '').trim(),\n        tour_en: String(item.tour_en || item.tour || '').trim(),\n        venue,\n        venue_en: String(item.venue_en || venue || '').trim(),\n        source,\n        sourceName: String(item.sourceName || 'M\u00e1s Info.').trim() || 'M\u00e1s Info.',\n        sourceName_en: String(item.sourceName_en || item.sourceName || 'More Info.').trim() || 'More Info.',\n        category\n      };\n    }\n\n    function dedupeEvents(items) {\n      const map = new Map();\n      items.forEach((item) => {\n        if (!map.has(item.id)) map.set(item.id, item);\n      });\n      return Array.from(map.values());\n    }\n\n    const EVENTS = dedupeEvents(concertData.map(normalizeEvent));\n\n    function getMonthIndex(dateStr) {\n      const [, month] = dateStr.split('-').map(Number);\n      return month - 1;\n    }\n\n    function isMultiDay(item) {\n      return Boolean(item.endDate && item.endDate !== item.date);\n    }\n\n    function formatShortDateEs(dateStr) {\n      const [, month, day] = dateStr.split('-');\n      const monthName = getMonthNames()[Number(month) - 1];\n      return `${Number(day)} ${monthName.slice(0, 3)}`;\n    }\n\n    function desktopDateMarkup(item) {\n      const [, month, day] = item.date.split('-');\n      const monthName = getMonthNames()[Number(month) - 1];\n      const monthLabel = monthName.charAt(0).toUpperCase() + monthName.slice(1);\n      const multiDayMarkup = isMultiDay(item)\n        ? `<span class=\"multiday-badge\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"><\/rect><path d=\"M16 2v4M8 2v4M3 10h18\"><\/path><\/svg>${UI[currentLang].multiDay}<\/span>`\n        : '';\n      return `<div class=\"date-stack\"><div class=\"date-text\">${Number(day)} ${monthLabel}<\/div>${multiDayMarkup}<\/div>`;\n    }\n\n    function getMultiDayNote(item) {\n      if (!isMultiDay(item)) return '';\n      return `<div class=\"multiday-note\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M8 2v4M16 2v4M3 10h18\"><\/path><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"><\/rect><\/svg>${UI[currentLang].availableFrom} ${formatShortDateEs(item.date)} ${UI[currentLang].to} ${formatShortDateEs(item.endDate)}<\/div>`;\n    }\n\n    function getSearchBlob(item) {\n      return normalizeText(`${item.artist} ${item.tour} ${item.tour_en || \"\"} ${item.venue} ${item.venue_en || \"\"} ${item.category}`);\n    }\n\n    function upcomingEvents() {\n      const now = new Date();\n      return EVENTS\n        .filter(item => {\n          const endDate = parseLocalDate(item.endDate || item.date, true);\n          return endDate ? endDate.getTime() >= now.getTime() : false;\n        })\n        .sort((a, b) => {\n          if (a.date !== b.date) return a.date.localeCompare(b.date);\n          if (a.sortTime !== b.sortTime) return a.sortTime - b.sortTime;\n          return collator.compare(a.artist, b.artist);\n        });\n    }\n\n    function getAvailableMonths(events) {\n      return [...new Set(events.map(item => getMonthIndex(item.date)))];\n    }\n\n    function getMonthCount(events, monthIndex) {\n      return events.filter(item => getMonthIndex(item.date) === monthIndex).length;\n    }\n\n    \n    function populateCategoryOptions() {\n      const currentValue = categoryFilterEl.value || 'todos';\n      const t = UI[currentLang];\n      const options = [\n        ['todos', t.allCategories],\n        ['concierto o tour', t.categories['concierto o tour']],\n        ['festival o feria', t.categories['festival o feria']],\n        ['congreso o acad\u00e9mico', t.categories['congreso o acad\u00e9mico']],\n        ['musical o artes esc\u00e9nicas', t.categories['musical o artes esc\u00e9nicas']],\n        ['rutas tur\u00edsticas', t.categories['rutas tur\u00edsticas']]\n      ];\n      categoryFilterEl.innerHTML = options.map(([value, label]) => `<option value=\"${value}\">${label}<\/option>`).join('');\n      categoryFilterEl.value = options.some(([value]) => value === currentValue) ? currentValue : 'todos';\n    }\n\n    function populateVenueOptions(events) {\n      const currentValue = venueFilterEl.value || 'todos';\n      const venues = [...new Set(events.map(item => item.venue).filter(Boolean))]\n        .sort((a, b) => collator.compare(a, b));\n\n      venueFilterEl.innerHTML = `<option value=\"todos\">${UI[currentLang].allVenues}<\/option>` +\n        venues.map(venue => `<option value=\"${venue}\">${venue}<\/option>`).join('');\n\n      if (venues.includes(currentValue)) {\n        venueFilterEl.value = currentValue;\n      } else {\n        venueFilterEl.value = 'todos';\n        activeVenue = 'todos';\n      }\n    }\n\n    function renderTabs(events) {\n      const months = getAvailableMonths(events);\n      tabsContainer.innerHTML = '';\n\n      const addBtn = (label, value, count) => {\n        const btn = document.createElement('button');\n        btn.className = `tab ${activeMonth === value ? 'active' : ''}`;\n        btn.type = 'button';\n        btn.innerHTML = `<span>${label}<\/span><span class=\"tab-count\">${count}<\/span>`;\n        btn.addEventListener('click', () => {\n          activeMonth = value;\n          currentPage = 1;\n          update();\n        });\n        tabsContainer.appendChild(btn);\n      };\n\n      addBtn(UI[currentLang].tabsAll, 'todos', events.length);\n      const names = getMonthNames();\n      months.forEach(monthIndex => addBtn(names[monthIndex], monthIndex, getMonthCount(events, monthIndex)));\n    }\n\n    function filteredEvents() {\n      const events = upcomingEvents();\n      return events.filter(item => {\n        const monthPass = activeMonth === 'todos' ? true : getMonthIndex(item.date) === activeMonth;\n        const venuePass = activeVenue === 'todos' ? true : item.venue === activeVenue;\n        const categoryPass = activeCategory === 'todos' ? true : item.category === activeCategory;\n        const searchPass = !searchTerm ? true : getSearchBlob(item).includes(searchTerm);\n        return monthPass && venuePass && categoryPass && searchPass;\n      });\n    }\n\n    function renderInfoLink(item) {\n      if (!item.source) {\n        return `<span class=\"more\" style=\"opacity:.45; pointer-events:none;\">${UI[currentLang].noLink}<\/span>`;\n      }\n      return `\n        <a class=\"more\" href=\"${item.source}\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"${currentLang === 'en' ? `View more information about ${item.artist}` : `Ver m\u00e1s informaci\u00f3n de ${item.artist}`}\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M14 3h7v7\"><\/path><path d=\"M10 14L21 3\"><\/path><path d=\"M21 14v7H3V3h7\"><\/path><\/svg>\n          ${UI[currentLang].more}\n        <\/a>`;\n    }\n\n    function rowTemplate(item) {\n      return `\n        <tr>\n          <td class=\"date-cell\">${desktopDateMarkup(item)}<\/td>\n          <td class=\"time-cell\">\n            <div class=\"time-mobile\">${item.time}<\/div>\n          <\/td>\n          <td class=\"artist-cell\"><div class=\"artist\">${item.artist}<\/div><\/td>\n          <td class=\"tour-cell\">\n            <div class=\"tour\" title=\"${displayTour(item)}\">${displayTour(item)}<\/div>\n            ${getMultiDayNote(item)}\n          <\/td>\n          <td class=\"venue-cell\">\n            <div class=\"venue\" title=\"${displayVenue(item)}\">${displayVenue(item)}<\/div>\n            <div class=\"venue-mobile\" title=\"${displayVenue(item)}\">\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 21s-6-4.35-6-10a6 6 0 1 1 12 0c0 5.65-6 10-6 10Z\"><\/path><circle cx=\"12\" cy=\"11\" r=\"2.5\"><\/circle><\/svg>\n              <span>${displayVenue(item)}<\/span>\n            <\/div>\n          <\/td>\n          <td class=\"link-cell\">\n            <div class=\"mobile-meta action-stack\">\n              ${renderInfoLink(item)}\n              <button type=\"button\" class=\"save-btn\" data-event-id=\"${item.id}\" aria-label=\"${currentLang === 'en' ? `Save ${item.artist} to the calendar` : `Guardar ${item.artist} en el calendario`}\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"><\/path><path d=\"M15 3h6v6\"><\/path><path d=\"M10 14L21 3\"><\/path><\/svg>${UI[currentLang].save}<\/button>\n            <\/div>\n          <\/td>\n        <\/tr>\n      `;\n    }\n\n    function renderTable(events) {\n      const total = events.length;\n      const totalPages = Math.max(1, Math.ceil(total \/ rowsPerPage));\n      if (currentPage > totalPages) currentPage = totalPages;\n\n      const start = (currentPage - 1) * rowsPerPage;\n      const pageItems = events.slice(start, start + rowsPerPage);\n\n      tableBody.innerHTML = pageItems.map(rowTemplate).join('');\n      emptyState.style.display = total ? 'none' : 'block';\n      tableWrapEl.style.display = total ? 'block' : 'none';\n\n      resultsLabelEl.textContent = `${total} ${total === 1 ? UI[currentLang].resultsOne : UI[currentLang].resultsMany}`;\n      pagerInfoEl.textContent = total ? `${UI[currentLang].showingRange} ${start + 1}-${Math.min(start + rowsPerPage, total)} ${UI[currentLang].of} ${total}` : '';\n\n      paginationEl.innerHTML = '';\n      const totalPagesSafe = Math.max(1, totalPages);\n\n      const prev = document.createElement('button');\n      prev.className = 'page-btn';\n      prev.textContent = '\u2039';\n      prev.disabled = currentPage === 1 || !total;\n      prev.addEventListener('click', () => { currentPage--; update(false); });\n      paginationEl.appendChild(prev);\n\n      for (let i = 1; i <= totalPagesSafe; i++) {\n        const btn = document.createElement('button');\n        btn.className = `page-btn ${i === currentPage ? 'active' : ''}`;\n        btn.textContent = i;\n        btn.addEventListener('click', () => { currentPage = i; update(false); });\n        paginationEl.appendChild(btn);\n      }\n\n      const next = document.createElement('button');\n      next.className = 'page-btn';\n      next.textContent = '\u203a';\n      next.disabled = currentPage === totalPagesSafe || !total;\n      next.addEventListener('click', () => { currentPage++; update(false); });\n      paginationEl.appendChild(next);\n    }\n\n    function update(resetTabs = true) {\n      const upcoming = upcomingEvents();\n      const months = getAvailableMonths(upcoming);\n\n      if (activeMonth !== 'todos' && !months.includes(activeMonth)) {\n        activeMonth = months[0] ?? 'todos';\n        currentPage = 1;\n      }\n\n      if (resetTabs) renderTabs(upcoming);\n      populateVenueOptions(upcoming);\n      populateCategoryOptions();\n\n      const events = filteredEvents();\n      const monthText = activeMonth === 'todos' ? UI[currentLang].allMonths : getMonthNames()[activeMonth];\n      const venueText = activeVenue === 'todos' ? UI[currentLang].allVenuesMeta : activeVenue;\n      const categoryText = activeCategory === 'todos' ? UI[currentLang].allCategoriesMeta : UI[currentLang].categories[activeCategory];\n      monthLabelEl.textContent = `${UI[currentLang].showingRange}: ${monthText} \u00b7 ${venueText} \u00b7 ${categoryText}`;\n      renderTable(events);\n    }\n\n    searchInputEl.addEventListener('input', (event) => {\n      searchTerm = normalizeText(event.target.value.trim());\n      currentPage = 1;\n      update(false);\n    });\n\n    venueFilterEl.addEventListener('change', (event) => {\n      activeVenue = event.target.value;\n      currentPage = 1;\n      update(false);\n    });\n\n    categoryFilterEl.addEventListener('change', (event) => {\n      activeCategory = event.target.value;\n      currentPage = 1;\n      update(false);\n    });\n\n    document.getElementById('langEsBtn').addEventListener('click', () => {\n      currentLang = 'es';\n      updateUIText();\n      currentPage = 1;\n      update();\n    });\n\n    document.getElementById('langEnBtn').addEventListener('click', () => {\n      currentLang = 'en';\n      updateUIText();\n      currentPage = 1;\n      update();\n    });\n\n    function pad2(value) {\n      return String(value).padStart(2, '0');\n    }\n\n    function parseDateParts(dateStr) {\n      const [year, month, day] = String(dateStr).split('-').map(Number);\n      return { year, month, day };\n    }\n\n    function sanitizeIcsText(value) {\n      return String(value || '')\n        .replace(\/\\\\\/g, '\\\\\\\\')\n        .replace(\/\\r?\\n\/g, '\\\\n')\n        .replace(\/,\/g, '\\\\,')\n        .replace(\/;\/g, '\\\\;');\n    }\n\n    function parseEventTimes(item) {\n      const startParts = parseDateParts(item.date);\n      const endDateValue = item.endDate || item.date;\n      const endParts = parseDateParts(endDateValue);\n      const match = String(item.time || '').match(\/(\\d{1,2})[:hH](\\d{2})\/);\n\n      if (match) {\n        const hour = Number(match[1]);\n        const minute = Number(match[2]);\n        const start = new Date(startParts.year, startParts.month - 1, startParts.day, hour, minute, 0, 0);\n        const end = new Date(start);\n        end.setHours(end.getHours() + 2);\n\n        if (endDateValue !== item.date) {\n          end.setFullYear(endParts.year, endParts.month - 1, endParts.day);\n          end.setHours(hour + 2, minute, 0, 0);\n        }\n\n        return { allDay: false, start, end };\n      }\n\n      \/\/ All-day fallback for events without a parsable single-hour start\n      const start = new Date(startParts.year, startParts.month - 1, startParts.day, 0, 0, 0, 0);\n      const end = new Date(endParts.year, endParts.month - 1, endParts.day + 1, 0, 0, 0, 0);\n      return { allDay: true, start, end };\n    }\n\n    function formatICSDate(date, allDay = false) {\n      const year = date.getFullYear();\n      const month = pad2(date.getMonth() + 1);\n      const day = pad2(date.getDate());\n\n      if (allDay) return `${year}${month}${day}`;\n\n      const hours = pad2(date.getHours());\n      const minutes = pad2(date.getMinutes());\n      const seconds = pad2(date.getSeconds());\n      return `${year}${month}${day}T${hours}${minutes}${seconds}`;\n    }\n\n    function buildICSContent(item) {\n      const timing = parseEventTimes(item);\n      const uid = `${item.id}@visitquito-ec`;\n      const lines = [\n        'BEGIN:VCALENDAR',\n        'VERSION:2.0',\n        'PRODID:-\/\/Visit Quito\/\/Agenda Eventos\/\/ES',\n        'CALSCALE:GREGORIAN',\n        'BEGIN:VEVENT',\n        `UID:${sanitizeIcsText(uid)}`,\n        `SUMMARY:${sanitizeIcsText(item.artist)}`,\n      ];\n\n      if (timing.allDay) {\n        lines.push(`DTSTART;VALUE=DATE:${formatICSDate(timing.start, true)}`);\n        lines.push(`DTEND;VALUE=DATE:${formatICSDate(timing.end, true)}`);\n      } else {\n        lines.push(`DTSTART:${formatICSDate(timing.start, false)}`);\n        lines.push(`DTEND:${formatICSDate(timing.end, false)}`);\n      }\n\n      lines.push(`LOCATION:${sanitizeIcsText(displayVenue(item))}`);\n      lines.push(`DESCRIPTION:${sanitizeIcsText(displayTour(item))}`);\n      if (item.source) lines.push(`URL:${sanitizeIcsText(item.source)}`);\n      lines.push('END:VEVENT', 'END:VCALENDAR');\n\n      return lines.join('\\r\\n');\n    }\n\n    function downloadICS(itemId) {\n      const item = EVENTS.find(event => event.id === itemId);\n      if (!item) return;\n\n      const icsContent = buildICSContent(item);\n      const blob = new Blob([icsContent], { type: 'text\/calendar;charset=utf-8' });\n      const blobUrl = URL.createObjectURL(blob);\n      const link = document.createElement('a');\n      link.href = blobUrl;\n      link.download = `${normalizeText(item.artist).replace(\/\\s+\/g, '-') || 'evento'}.ics`;\n      document.body.appendChild(link);\n      link.click();\n      link.remove();\n      setTimeout(() => URL.revokeObjectURL(blobUrl), 1000);\n    }\n\n    tableBody.addEventListener('click', (event) => {\n      const saveButton = event.target.closest('.save-btn');\n      if (!saveButton) return;\n      downloadICS(saveButton.getAttribute('data-event-id'));\n    });\n\n    updateUIText();\n    update();\n  <\/script>\n\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Qu\u00e9 hacer en Quito hoy: agenda de eventos en Quito Encuentra qu\u00e9 hacer en Quito hoy, esta semana y durante el mes en una sola agenda actualizada. Aqu\u00ed podr\u00e1s consultar conciertos, festivales, teatro, ferias, congresos, actividades culturales y eventos especiales en distintos recintos de la ciudad. Explora la agenda por fecha, categor\u00eda o lugar y [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4843","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/pages\/4843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/comments?post=4843"}],"version-history":[{"count":154,"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/pages\/4843\/revisions"}],"predecessor-version":[{"id":11975,"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/pages\/4843\/revisions\/11975"}],"wp:attachment":[{"href":"https:\/\/visitquito.ec\/es\/wp-json\/wp\/v2\/media?parent=4843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}