{"id":14,"date":"2025-06-27T07:47:53","date_gmt":"2025-06-27T07:47:53","guid":{"rendered":"https:\/\/hopeful-mahavira.46-231-5-246.plesk.page\/?page_id=14"},"modified":"2026-10-05T11:40:38","modified_gmt":"2026-10-05T11:40:38","slug":"conciertos","status":"publish","type":"page","link":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/","title":{"rendered":"Concerts"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"14\" class=\"elementor elementor-14\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14c7166 e-con-full e-flex e-con e-parent\" data-id=\"14c7166\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ecafef1 elementor-widget elementor-widget-html\" data-id=\"ecafef1\" 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 <style>\n        :root {\n            --blue-950: #07153f;\n            --blue-900: #052f76;\n            --blue-700: #007fbb;\n            --blue-500: #08b6dc;\n            --cyan: #10c9ec;\n            --yellow: #fff52e;\n            --pink: #f6008d;\n            --white: #ffffff;\n            --ink: #17304f;\n            --muted: #5d728c;\n            --radius: 8px;\n        }\n\n        * {\n            box-sizing: border-box;\n        }\n\n        body {\n            margin: 0;\n            font-family: \"Open Sans\", Arial, sans-serif;\n            background: var(--blue-950);\n            color: var(--white);\n        }\n\n        a {\n            color: inherit;\n            text-decoration: none;\n        }\n\n        button {\n            font: inherit;\n        }\n\n        .mascot-actor {\n            position: absolute;\n            top: 0;\n            left: 0;\n            z-index: 1;\n            width: clamp(86px, 10vw, 132px);\n            opacity: 0;\n            pointer-events: none;\n            user-select: none;\n            will-change: transform, opacity;\n            transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.2s ease;\n            filter: drop-shadow(0 12px 14px rgba(7, 21, 63, 0.28));\n        }\n\n        .mascot-actor.is-visible {\n            opacity: 1;\n        }\n\n        .mascot-image-wrap {\n            transition: transform 0.18s ease;\n        }\n\n        .mascot-actor.is-facing-left .mascot-image-wrap {\n            transform: scaleX(-1);\n        }\n\n        .mascot-actor img {\n            display: block;\n            width: 100%;\n            height: auto;\n            aspect-ratio: 1 \/ 1;\n            object-fit: contain;\n            transform-origin: 50% 82%;\n        }\n\n        .mascot-actor.is-peeking img {\n            animation: mascot-peek 0.85s ease-in-out infinite alternate;\n        }\n\n        .mascot-actor.is-peeking,\n        .mascot-actor.is-jumping,\n        .mascot-actor.is-celebrating {\n            z-index: 4;\n        }\n\n        .mascot-actor.is-jumping img {\n            animation: mascot-jump 0.72s ease-in-out;\n        }\n\n        .mascot-actor.is-celebrating img {\n            animation: mascot-celebrate 0.32s ease-in-out infinite alternate;\n        }\n\n        .mascot-message {\n            position: absolute;\n            left: 50%;\n            bottom: 88%;\n            min-width: 150px;\n            max-width: 190px;\n            padding: 9px 12px;\n            border: 2px solid var(--pink);\n            border-radius: 16px;\n            background: var(--yellow);\n            color: var(--pink);\n            font-size: 0.76rem;\n            font-weight: 900;\n            line-height: 1.25;\n            text-align: center;\n            opacity: 0;\n            transform: translate(-50%, 8px) scale(0.85);\n            transition: opacity 0.2s ease, transform 0.2s ease;\n            box-shadow: 4px 4px 0 var(--pink);\n            white-space: normal;\n        }\n\n        .mascot-message::after {\n            content: \"\";\n            position: absolute;\n            left: 50%;\n            bottom: -9px;\n            width: 14px;\n            height: 14px;\n            background: var(--yellow);\n            border-right: 2px solid var(--pink);\n            border-bottom: 2px solid var(--pink);\n            transform: translateX(-50%) rotate(45deg);\n        }\n\n        .mascot-actor.show-message .mascot-message {\n            opacity: 1;\n            transform: translate(-50%, 0) scale(1);\n        }\n\n        .mascot-confetti-piece {\n            position: absolute;\n            z-index: 6;\n            width: 9px;\n            height: 14px;\n            border-radius: 2px;\n            pointer-events: none;\n            animation: mascot-confetti 0.95s cubic-bezier(0.16, 0.84, 0.44, 1) forwards;\n        }\n\n        @keyframes mascot-peek {\n            0% {\n                transform: translateY(3px) rotate(-5deg);\n            }\n\n            100% {\n                transform: translateY(-5px) rotate(5deg);\n            }\n        }\n\n        @keyframes mascot-jump {\n            0%, 100% {\n                transform: rotate(0) scale(1);\n            }\n\n            50% {\n                transform: rotate(12deg) scale(1.12, 0.92);\n            }\n        }\n\n        @keyframes mascot-celebrate {\n            0% {\n                transform: translateY(0) rotate(-10deg) scale(1);\n            }\n\n            100% {\n                transform: translateY(-12px) rotate(10deg) scale(1.08, 0.94);\n            }\n        }\n\n        @keyframes mascot-confetti {\n            from {\n                opacity: 1;\n                transform: translate(0, 0) rotate(0deg);\n            }\n\n            to {\n                opacity: 0;\n                transform: translate(var(--confetti-x), var(--confetti-y)) rotate(var(--confetti-r));\n            }\n        }\n\n        @media (prefers-reduced-motion: reduce) {\n            .mascot-actor {\n                transition: none;\n            }\n\n            .mascot-actor img,\n            .mascot-confetti-piece {\n                animation: none !important;\n            }\n        }\n\n        .music-section {\n            position: relative;\n            min-height: 100vh;\n            padding: 72px 20px;\n            background:\n                radial-gradient(circle at 8% 18%, rgba(255, 245, 46, 0.2) 0 3px, transparent 4px) 0 0 \/ 28px 28px,\n                radial-gradient(circle at 88% 12%, rgba(255, 255, 255, 0.2), transparent 23%),\n                linear-gradient(145deg, #08b9df 0%, #029fd3 48%, #0569b4 100%);\n            overflow-x: hidden;\n            box-shadow: inset 0 10px 0 var(--yellow), inset 0 -10px 0 var(--pink);\n        }\n\n        .music-wrapper {\n            position: relative;\n            z-index: 1;\n            width: min(1120px, 100%);\n            margin: 0 auto;\n        }\n\n        .music-header {\n            display: grid;\n            grid-template-columns: minmax(0, 1fr) minmax(180px, 230px);\n            gap: clamp(28px, 5vw, 60px);\n            align-items: center;\n            margin-bottom: 34px;\n        }\n\n        .music-header-copy {\n            min-width: 0;\n        }\n\n        .music-kicker {\n            display: inline-flex;\n            width: fit-content;\n            margin-bottom: 14px;\n            padding: 8px 12px;\n            border-radius: 999px;\n            background: var(--yellow);\n            border: 2px solid var(--pink);\n            color: var(--pink);\n            font-size: 0.82rem;\n            font-weight: 900;\n            text-transform: uppercase;\n            box-shadow: 5px 5px 0 var(--pink);\n        }\n\n        .music-title {\n            margin: 0;\n            font-family: \"Montserrat\", Arial, sans-serif;\n            font-size: clamp(2.4rem, 6vw, 5.5rem);\n            line-height: 0.98;\n            color: var(--white);\n            text-transform: uppercase;\n            letter-spacing: 0;\n            text-shadow: 0 16px 38px rgba(6, 27, 69, 0.28);\n        }\n\n        .music-title span {\n            display: block;\n            color: transparent;\n            -webkit-text-stroke: 2px var(--yellow);\n            text-shadow: 4px 4px 0 var(--pink);\n        }\n\n        .music-subtitle {\n            max-width: 680px;\n            margin: 20px 0 0;\n            color: rgba(255, 255, 255, 0.82);\n            font-size: 1.08rem;\n            font-weight: 700;\n        }\n\n        .music-hero-poster {\n            width: min(100%, 230px);\n            margin: 0;\n            justify-self: end;\n            padding: 10px;\n            border-radius: var(--radius);\n            border: 3px solid var(--yellow);\n            background: rgba(7, 21, 63, 0.2);\n            box-shadow: 12px 12px 0 rgba(246, 0, 141, 0.82), 0 24px 48px rgba(7, 21, 63, 0.26);\n            backdrop-filter: blur(16px);\n        }\n\n        .music-hero-poster img {\n            display: block;\n            width: 100%;\n            max-height: 300px;\n            object-fit: contain;\n            border-radius: calc(var(--radius) - 2px);\n        }\n\n        .music-hero-poster figcaption {\n            padding: 9px 4px 2px;\n            color: var(--yellow);\n            font-size: 0.74rem;\n            font-weight: 800;\n            line-height: 1.3;\n            text-align: center;\n            text-transform: uppercase;\n            letter-spacing: 0.04em;\n        }\n\n        .concerts-grid {\n            position: relative;\n            display: grid;\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n            gap: 16px;\n        }\n\n        .concert-card {\n            position: relative;\n            z-index: 2;\n            min-height: 248px;\n            display: flex;\n            flex-direction: column;\n            justify-content: space-between;\n            gap: 24px;\n            width: 100%;\n            padding: 22px;\n            overflow: hidden;\n            border-radius: var(--radius);\n            border: 2px solid rgba(255, 245, 46, 0.68);\n            background: rgba(7, 21, 63, 0.88);\n            color: var(--white);\n            box-shadow: 0 22px 44px rgba(6, 27, 69, 0.2);\n            backdrop-filter: blur(16px);\n            cursor: pointer;\n            text-align: left;\n            transition: transform 0.25s ease, border-color 0.25s ease, background 0.25s ease, box-shadow 0.25s ease;\n        }\n\n        .concert-card::before {\n            content: \"\";\n            position: absolute;\n            inset: 0;\n            background: rgba(255, 245, 46, 0.04);\n            pointer-events: none;\n        }\n\n        .concert-card:nth-child(even) {\n            border-color: rgba(246, 0, 141, 0.78);\n            background: rgba(5, 47, 118, 0.9);\n        }\n\n        .concert-card:hover {\n            transform: translateY(-6px);\n            border-color: var(--yellow);\n            box-shadow: 8px 8px 0 var(--pink), 0 30px 64px rgba(7, 21, 63, 0.32);\n        }\n\n        .concert-date {\n            position: relative;\n            z-index: 1;\n            width: fit-content;\n            padding: 8px 12px;\n            border-radius: 999px;\n            background: var(--yellow);\n            border: 2px solid var(--pink);\n            color: var(--pink);\n            font-size: 0.8rem;\n            font-weight: 900;\n            text-transform: uppercase;\n        }\n\n        .artist-visual {\n            position: relative;\n            z-index: 1;\n            display: grid;\n            gap: 14px;\n            align-content: end;\n            min-height: 142px;\n        }\n\n        .artist-logo {\n            max-width: 190px;\n            max-height: 92px;\n            object-fit: contain;\n            filter: brightness(0) invert(1) drop-shadow(0 12px 20px rgba(0, 0, 0, 0.26));\n        }\n\n        .artist-logo.no-invert {\n            filter: drop-shadow(0 12px 20px rgba(0, 0, 0, 0.28));\n        }\n\n        .artist-logo.logo-la-tribu {\n            max-width: 220px;\n            max-height: 112px;\n            transform: scale(2.25);\n            transform-origin: left center;\n        }\n\n        .artist-logo.logo-marta-santos {\n            max-width: 220px;\n            max-height: 112px;\n            transform: scale(2.35);\n            transform-origin: left center;\n        }\n\n        .artist-name {\n            display: block;\n            font-family: \"Montserrat\", Arial, sans-serif;\n            font-size: 1.5rem;\n            font-weight: 900;\n            color: var(--white);\n            line-height: 1.05;\n        }\n\n        .artist-meta {\n            display: block;\n            margin-top: 5px;\n            color: var(--yellow);\n            font-size: 0.92rem;\n            font-weight: 700;\n        }\n\n        .info-card {\n            display: none;\n            position: relative;\n            margin: 22px auto 0;\n            max-width: 780px;\n            padding: 22px 58px 22px 22px;\n            border-radius: var(--radius);\n            background: rgba(255, 255, 255, 0.95);\n            color: var(--ink);\n            border: 4px solid var(--yellow);\n            box-shadow: 10px 10px 0 var(--pink), 0 24px 54px rgba(7, 21, 63, 0.24);\n        }\n\n        .info-card.show {\n            display: block;\n        }\n\n        .info-card p {\n            margin: 0;\n            color: var(--muted);\n            font-size: 1rem;\n            line-height: 1.65;\n        }\n\n        .info-card-layout {\n            display: grid;\n            grid-template-columns: minmax(0, 250px) minmax(0, 1fr);\n            gap: 24px;\n            align-items: center;\n        }\n\n        .info-card-layout.no-poster {\n            grid-template-columns: 1fr;\n        }\n\n        .info-card-poster {\n            display: block;\n            width: 100%;\n            max-height: 360px;\n            object-fit: contain;\n            border-radius: var(--radius);\n            box-shadow: 0 16px 34px rgba(6, 27, 69, 0.2);\n        }\n\n        .info-card-close {\n            position: absolute;\n            top: 14px;\n            right: 14px;\n            width: 34px;\n            height: 34px;\n            border: 0;\n            border-radius: 50%;\n            background: var(--pink);\n            color: var(--yellow);\n            font-size: 1.25rem;\n            line-height: 1;\n            cursor: pointer;\n        }\n\n        .button {\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            gap: 10px;\n            min-height: 44px;\n            margin-top: 16px;\n            padding: 0 20px;\n            border-radius: 999px;\n            background: var(--yellow);\n            color: var(--pink);\n            font-weight: 900;\n            border: 2px solid var(--pink);\n            box-shadow: 5px 5px 0 var(--pink), 0 16px 32px rgba(7, 21, 63, 0.24);\n        }\n\n        .music-bottom {\n            display: grid;\n            grid-template-columns: minmax(0, 1fr) auto;\n            align-items: center;\n            gap: 18px;\n            margin-top: 26px;\n            padding: 18px;\n            border-radius: var(--radius);\n            background: rgba(7, 21, 63, 0.56);\n            border: 1px solid rgba(255, 255, 255, 0.24);\n            box-shadow: 0 16px 36px rgba(7, 21, 63, 0.18);\n            backdrop-filter: blur(12px);\n        }\n\n        .music-bottom p {\n            margin: 0;\n            color: rgba(255, 255, 255, 0.9);\n            font-weight: 600;\n        }\n\n        .music-bottom strong {\n            color: var(--yellow);\n        }\n\n        .music-bottom .button {\n            margin-top: 0;\n            background: rgba(255, 255, 255, 0.94);\n            color: var(--blue-900);\n            border: 0;\n            box-shadow: none;\n        }\n\n        @media (max-width: 960px) {\n            .music-header {\n                grid-template-columns: minmax(0, 1fr) minmax(160px, 200px);\n            }\n\n            .music-hero-poster {\n                width: min(100%, 200px);\n            }\n\n            .concerts-grid {\n                grid-template-columns: repeat(2, minmax(0, 1fr));\n            }\n        }\n\n        @media (max-width: 680px) {\n            .music-section {\n                padding: 44px 14px;\n            }\n\n            .music-title span {\n                -webkit-text-stroke-width: 1px;\n            }\n\n            .music-header {\n                grid-template-columns: 1fr;\n                gap: 26px;\n            }\n\n            .music-hero-poster {\n                width: min(68vw, 210px);\n                justify-self: center;\n            }\n\n            .concerts-grid,\n            .music-bottom {\n                grid-template-columns: 1fr;\n            }\n\n            .concert-card {\n                min-height: 190px;\n            }\n\n            .info-card {\n                width: 100%;\n                margin: 2px auto 10px;\n                padding: 18px 54px 18px 18px;\n            }\n\n            .info-card-layout {\n                grid-template-columns: 1fr;\n            }\n\n            .info-card-poster {\n                width: min(100%, 320px);\n                max-height: none;\n                margin: 0 auto;\n            }\n\n            .music-bottom .button {\n                width: 100%;\n            }\n        }\n    <\/style>\n<body>\n    <section class=\"music-section\">\n        <div class=\"music-wrapper\">\n\n            <header class=\"music-header\">\n                <div class=\"music-header-copy\">\n                    <div class=\"music-kicker\">Programaci\u00f3 musical<\/div>\n\n                    <h1 class=\"music-title\">\n                        Esdeveniments Musicals\n                        <span>Fira d'Onda 2026<\/span>\n                    <\/h1>\n\n                    <p class=\"music-subtitle\">\n                        Sis grans cites entre el 17 i el 24 d'octubre amb concerts,\n                        orquestres i propostes per a tots els p\u00fablics.\n                    <\/p>\n                <\/div>\n\n                <figure class=\"music-hero-poster\">\n                    <img decoding=\"async\"\n                        src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/06\/Conciertos-Fira.png\"\n                        alt=\"Cartell de concerts de la Fira d'Onda 2026\"\n                    >\n                    <figcaption>\n                        Cartell de concerts \u00b7 Fira d'Onda 2026\n                    <\/figcaption>\n                <\/figure>\n            <\/header>\n\n\n            <div class=\"concerts-grid\">\n\n                <!-- MASCOTA -->\n                <div id=\"mascotActor\" class=\"mascot-actor\">\n                    <div\n                        id=\"mascotMessage\"\n                        class=\"mascot-message\"\n                        role=\"status\"\n                        aria-live=\"polite\"\n                    ><\/div>\n\n                    <div class=\"mascot-image-wrap\">\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/09\/mascota-conciertos.png\"\n                            alt=\"\"\n                        >\n                    <\/div>\n                <\/div>\n\n\n                <!-- LA PEGATINA -->\n                <button\n                    class=\"concert-card\"\n                    type=\"button\"\n                    data-info=\"La Pegatina actuar\u00e0 el dissabte 17 d'octubre al Recinte Multiusos. Concert gratu\u00eft amb entrada lliure fins a completar l'aforament i \u00fanic concert del grup a la prov\u00edncia de Castell\u00f3.\"\n                    data-href=\"#\"\n                    aria-label=\"Veure informaci\u00f3 de La Pegatina\"\n                >\n\n                    <span class=\"concert-date\">\n                        Ds. 17 oct.\n                    <\/span>\n\n                    <span class=\"artist-visual\">\n\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/03\/la-pegatina-header-1.png\"\n                            alt=\"Logotip de La Pegatina\"\n                            class=\"artist-logo\"\n                        >\n\n                        <span>\n                            <span class=\"artist-name\">\n                                La Pegatina\n                            <\/span>\n\n                            <span class=\"artist-meta\">\n                                Recinte Multiusos\n                            <\/span>\n                        <\/span>\n\n                    <\/span>\n\n                <\/button>\n\n\n                <!-- LOS REBELDES SINF\u00d3NICO -->\n                <button\n                    class=\"concert-card\"\n                    type=\"button\"\n                    data-info=\"Los Rebeldes Sinf\u00f3nico arribar\u00e0 el diumenge 18 d'octubre al Teatre M\u00f2naco junt amb l'Orquestra Simf\u00f2nica de la SAMVO i la participaci\u00f3 especial del saxofonista Dani Nel\u00b7lo. La venda d'entrades i els horaris s'anunciaran pr\u00f2ximament als canals oficials de la SAMVO i de l'Ajuntament.\"\n                    data-href=\"https:\/\/www.instagram.com\/samvo_onda\/\"\n                    aria-label=\"Veure informaci\u00f3 de Los Rebeldes Sinf\u00f3nico\"\n                >\n\n                    <span class=\"concert-date\">\n                        Dg. 18 oct.\n                    <\/span>\n\n                    <span class=\"artist-visual\">\n\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/05\/los-rebeldes.png\"\n                            alt=\"Logotip de Los Rebeldes\"\n                            class=\"artist-logo\"\n                        >\n\n                        <span>\n                            <span class=\"artist-name\">\n                                Los Rebeldes Sinf\u00f3nico\n                            <\/span>\n\n                            <span class=\"artist-meta\">\n                                Teatre M\u00f2naco\n                            <\/span>\n                        <\/span>\n\n                    <\/span>\n\n                <\/button>\n\n\n                <!-- ORQUESTA PANORAMA -->\n                <button\n                    class=\"concert-card\"\n                    type=\"button\"\n                    data-info=\"L'Orquestra Panorama actuar\u00e0 el dimarts 20 d'octubre a la pla\u00e7a Miralpeix durant la nit del Sopar de Fira. Un espectacle de gran format amb acc\u00e9s gratu\u00eft.\"\n                    data-href=\"#\"\n                    aria-label=\"Veure informaci\u00f3 de l'Orquestra Panorama\"\n                >\n\n                    <span class=\"concert-date\">\n                        Dt. 20 oct.\n                    <\/span>\n\n                    <span class=\"artist-visual\">\n\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/04\/Logo-Panorama-1.png\"\n                            alt=\"Logotip de l'Orquestra Panorama\"\n                            class=\"artist-logo\"\n                        >\n\n                        <span>\n                            <span class=\"artist-name\">\n                                Orquestra Panorama\n                            <\/span>\n\n                            <span class=\"artist-meta\">\n                                Pla\u00e7a Miralpeix\n                            <\/span>\n                        <\/span>\n\n                    <\/span>\n\n                <\/button>\n\n\n                <!-- ORQUESTA LA TRIBU -->\n                <button\n                    class=\"concert-card\"\n                    type=\"button\"\n                    data-info=\"L'Orquestra La Tribu actuar\u00e0 el dijous 22 d'octubre en la tradicional nit de disfresses. Reconeguda per l'espectacularitat dels seus muntatges i la qualitat dels seus directes, oferir\u00e0 una nit de m\u00fasica i entreteniment per a tots els p\u00fablics.\"\n                    data-href=\"#\"\n                    aria-label=\"Veure informaci\u00f3 de l'Orquestra La Tribu\"\n                >\n\n                    <span class=\"concert-date\">\n                        Dj. 22 oct.\n                    <\/span>\n\n                    <span class=\"artist-visual\">\n\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/06\/LOGO-LA-TRIBU.png\"\n                            alt=\"Logotip de l'Orquestra La Tribu\"\n                            class=\"artist-logo no-invert logo-la-tribu\"\n                        >\n\n                        <span>\n                            <span class=\"artist-name\">\n                                Orquestra La Tribu\n                            <\/span>\n\n                            <span class=\"artist-meta\">\n                                Nit de disfresses\n                            <\/span>\n                        <\/span>\n\n                    <\/span>\n\n                <\/button>\n\n\n                <!-- \u00c1LVARO DE LUNA -->\n                <button\n                    class=\"concert-card\"\n                    type=\"button\"\n                    data-info=\"\u00c1lvaro de Luna actuar\u00e0 el divendres 23 d'octubre al Recinte Multiusos d'Onda. Les entrades per al p\u00fablic general ja estan disponibles per 20 euros m\u00e9s despeses de gesti\u00f3 en entradascastellon.com. Les entrades per a persones empadronades a Onda estaran disponibles a partir del dimarts 1 de setembre, a les 9.00 h, a un preu simb\u00f2lic de 5 euros mitjan\u00e7ant el mateix sistema de venda en l\u00ednia.\"\n                    data-href=\"https:\/\/www.entradascastellon.com\/2026\/10\/23\/concierto-de-alvaro-de-luna-en-onda?cs=tickets-castellon\"\n                    data-poster=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/08\/Alvaro-de-Luna-en-Onda.png\"\n                    data-poster-alt=\"Cartell del concert d'\u00c1lvaro de Luna a Onda\"\n                    data-link-label=\"Compra les teues entrades\"\n                    aria-label=\"Veure informaci\u00f3 d'\u00c1lvaro de Luna\"\n                >\n\n                    <span class=\"concert-date\">\n                        Dv. 23 oct.\n                    <\/span>\n\n                    <span class=\"artist-visual\">\n\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/05\/CARTEL-ALVARO-DE-LUNA-ONDA-1.png\"\n                            alt=\"Cartell d'\u00c1lvaro de Luna\"\n                            class=\"artist-logo\"\n                        >\n\n                        <span>\n                            <span class=\"artist-name\">\n                                \u00c1lvaro de Luna\n                            <\/span>\n\n                            <span class=\"artist-meta\">\n                                Recinte Multiusos\n                            <\/span>\n                        <\/span>\n\n                    <\/span>\n\n                <\/button>\n\n\n                <!-- MARTA SANTOS -->\n                <button\n                    class=\"concert-card\"\n                    type=\"button\"\n                    data-info=\"Marta Santos tancar\u00e0 el cartell musical el dissabte 24 d'octubre. L'artista sevillana, amb m\u00e9s de 2,3 milions d'oients mensuals a Spotify, arriba amb una proposta que combina flamenc, pop i m\u00fasica urbana. Les entrades generals estan disponibles per 20 euros m\u00e9s despeses de gesti\u00f3. Les entrades per a persones empadronades a Onda estaran disponibles a partir del dimarts 1 de setembre, a les 9.00 h, per 5 euros.\"\n                    data-href=\"https:\/\/www.entradascastellon.com\/2026\/10\/24\/concierto-marta-santos-en-onda?cs=tickets-castellon\"\n                    data-poster=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/08\/Marta-Santos-en-Onda.png\"\n                    data-poster-alt=\"Cartell del concert de Marta Santos a Onda\"\n                    data-link-label=\"Compra les teues entrades\"\n                    aria-label=\"Veure informaci\u00f3 de Marta Santos\"\n                >\n\n                    <span class=\"concert-date\">\n                        Ds. 24 oct.\n                    <\/span>\n\n                    <span class=\"artist-visual\">\n\n                        <img decoding=\"async\"\n                            src=\"https:\/\/fira.onda.es\/wp-content\/uploads\/2026\/06\/Logo-Marta-Santos.png\"\n                            alt=\"Logotip de Marta Santos\"\n                            class=\"artist-logo no-invert logo-marta-santos\"\n                        >\n\n                        <span>\n                            <span class=\"artist-name\">\n                                Marta Santos\n                            <\/span>\n\n                            <span class=\"artist-meta\">\n                                Recinte Multiusos\n                            <\/span>\n                        <\/span>\n\n                    <\/span>\n\n                <\/button>\n\n            <\/div>\n\n\n            <!-- FITXA D'INFORMACI\u00d3 -->\n            <div\n                id=\"infoCard\"\n                class=\"info-card\"\n                aria-live=\"polite\"\n            >\n\n                <button\n                    class=\"info-card-close\"\n                    type=\"button\"\n                    aria-label=\"Tancar informaci\u00f3\"\n                >\n                    \u00d7\n                <\/button>\n\n                <div\n                    id=\"infoCardLayout\"\n                    class=\"info-card-layout no-poster\"\n                >\n\n                    <img decoding=\"async\"\n                        id=\"infoCardPoster\"\n                        class=\"info-card-poster\"\n                        src=\"\"\n                        alt=\"\"\n                        hidden\n                    >\n\n                    <div>\n\n                        <p id=\"infoCardText\"><\/p>\n\n                        <a\n                            id=\"infoCardLink\"\n                            href=\"#\"\n                            target=\"_blank\"\n                            rel=\"noopener\"\n                            class=\"button\"\n                            style=\"display:none;\"\n                        >\n                            M\u00e9s informaci\u00f3\n                        <\/a>\n\n                    <\/div>\n\n                <\/div>\n\n            <\/div>\n\n\n            <!-- INFORMACI\u00d3 D'ENTRADES -->\n            <div class=\"music-bottom\">\n\n                <p>\n                    <strong>Entrades:<\/strong>\n                    \u00c1lvaro de Luna i Marta Santos compten amb venda general\n                    a 20 euros m\u00e9s despeses de gesti\u00f3. Les entrades per a\n                    persones empadronades estaran disponibles a partir del\n                    dimarts 1 de setembre, a les 9.00 h, per 5 euros.\n                <\/p>\n\n                <a\n                    href=\"https:\/\/fira.onda.es\"\n                    target=\"_blank\"\n                    rel=\"noopener\"\n                    class=\"button\"\n                >\n                    M\u00e9s info\n                <\/a>\n\n            <\/div>\n\n        <\/div>\n    <\/section>\n\n\n    <script>\n        (function () {\n\n            var mascotController = null;\n\n\n            function startDancingMascot() {\n\n                var grid = document.querySelector(\".concerts-grid\");\n                var mascot = document.getElementById(\"mascotActor\");\n                var message = document.getElementById(\"mascotMessage\");\n\n                var cards = Array.prototype.slice.call(\n                    document.querySelectorAll(\".concert-card\")\n                );\n\n                var reduceMotion = window.matchMedia(\n                    \"(prefers-reduced-motion: reduce)\"\n                ).matches;\n\n\n                \/* FRASES DE LA MASCOTA EN VALENCI\u00c0 *\/\n                var phrases = [\n                    \"Ens veiem a la Fira!\",\n                    \"Passa-t'ho genial a la Fira!\",\n                    \"Ens veiem a Onda!\",\n                    \"Que comence la m\u00fasica!\",\n                    \"A cantar i ballar!\",\n                    \"Onda ja sona a festa!\",\n                    \"Gaudix de cada concert!\"\n                ];\n\n\n                var colors = [\n                    \"#fff52e\",\n                    \"#f6008d\",\n                    \"#10c9ec\",\n                    \"#ffffff\",\n                    \"#052f76\"\n                ];\n\n                var timers = [];\n                var messageTimer = null;\n                var activeAnimation = null;\n\n                var currentIndex = Math.floor(\n                    Math.random() * Math.max(cards.length, 1)\n                );\n\n                var currentX = 0;\n                var currentY = 0;\n                var state = \"hidden\";\n\n\n                if (!grid || !mascot || !message || !cards.length) {\n                    return null;\n                }\n\n\n                function schedule(callback, delay) {\n\n                    var timer = window.setTimeout(\n                        callback,\n                        delay\n                    );\n\n                    timers.push(timer);\n\n                    return timer;\n\n                }\n\n\n                function clearTimers() {\n\n                    timers.forEach(function (timer) {\n                        window.clearTimeout(timer);\n                    });\n\n                    timers = [];\n\n                }\n\n\n                function cancelAnimation() {\n\n                    if (activeAnimation) {\n\n                        activeAnimation.cancel();\n                        activeAnimation = null;\n\n                    }\n\n                }\n\n\n                function getPosition(index, mode) {\n\n                    var card = cards[index];\n\n                    var width =\n                        mascot.offsetWidth || 110;\n\n                    var height =\n                        mascot.offsetHeight || width;\n\n                    var x =\n                        card.offsetLeft +\n                        card.offsetWidth * 0.55 -\n                        width \/ 2;\n\n                    var y =\n                        mode === \"peek\"\n                            ? card.offsetTop - height * 0.58\n                            : card.offsetTop +\n                              Math.min(\n                                  54,\n                                  card.offsetHeight * 0.22\n                              );\n\n\n                    return {\n\n                        x: Math.max(\n                            4,\n                            Math.min(\n                                x,\n                                grid.clientWidth - width - 4\n                            )\n                        ),\n\n                        y: y\n\n                    };\n\n                }\n\n\n                function moveTo(position) {\n\n                    currentX = position.x;\n                    currentY = position.y;\n\n                    mascot.style.transform =\n                        \"translate3d(\" +\n                        currentX +\n                        \"px,\" +\n                        currentY +\n                        \"px,0)\";\n\n                }\n\n\n                function setState(nextState) {\n\n                    mascot.classList.remove(\n                        \"is-peeking\",\n                        \"is-jumping\",\n                        \"is-celebrating\"\n                    );\n\n\n                    if (nextState === \"peeking\") {\n\n                        mascot.classList.add(\n                            \"is-peeking\"\n                        );\n\n                    } else if (nextState === \"jumping\") {\n\n                        mascot.classList.add(\n                            \"is-jumping\"\n                        );\n\n                    } else if (nextState === \"celebrating\") {\n\n                        mascot.classList.add(\n                            \"is-celebrating\"\n                        );\n\n                    }\n\n\n                    state = nextState;\n\n                }\n\n\n                function showMessage(text, duration) {\n\n                    window.clearTimeout(\n                        messageTimer\n                    );\n\n                    message.textContent = text;\n\n                    mascot.classList.add(\n                        \"show-message\"\n                    );\n\n                    messageTimer =\n                        window.setTimeout(\n                            function () {\n\n                                mascot.classList.remove(\n                                    \"show-message\"\n                                );\n\n                            },\n                            duration || 1800\n                        );\n\n                }\n\n\n                function chooseAnotherCard() {\n\n                    if (cards.length < 2) {\n                        return currentIndex;\n                    }\n\n\n                    var nextIndex =\n                        currentIndex;\n\n\n                    while (\n                        nextIndex === currentIndex\n                    ) {\n\n                        nextIndex =\n                            Math.floor(\n                                Math.random() *\n                                cards.length\n                            );\n\n                    }\n\n\n                    return nextIndex;\n\n                }\n\n\n                function peekAt(index) {\n\n                    currentIndex = index;\n\n                    setState(\"peeking\");\n\n                    mascot.classList.add(\n                        \"is-visible\"\n                    );\n\n                    moveTo(\n                        getPosition(\n                            index,\n                            \"peek\"\n                        )\n                    );\n\n\n                    if (Math.random() > 0.42) {\n\n                        showMessage(\n                            phrases[\n                                Math.floor(\n                                    Math.random() *\n                                    phrases.length\n                                )\n                            ],\n                            1900\n                        );\n\n                    }\n\n\n                    if (!reduceMotion) {\n\n                        schedule(\n                            hideAndJump,\n                            2800\n                        );\n\n                    }\n\n                }\n\n\n                function finishJump(\n                    index,\n                    target\n                ) {\n\n                    currentIndex = index;\n\n                    moveTo(target);\n\n                    setState(\"hidden\");\n\n                    activeAnimation = null;\n\n\n                    schedule(\n                        function () {\n\n                            peekAt(index);\n\n                        },\n                        260\n                    );\n\n                }\n\n\n                function jumpTo(index) {\n\n                    var target =\n                        getPosition(\n                            index,\n                            \"hidden\"\n                        );\n\n                    var middleX =\n                        (currentX + target.x) \/\n                        2;\n\n                    var middleY =\n                        Math.min(\n                            currentY,\n                            target.y\n                        ) -\n                        Math.min(\n                            150,\n                            grid.clientWidth *\n                            0.14\n                        );\n\n\n                    setState(\"jumping\");\n\n                    mascot.classList.add(\n                        \"is-visible\"\n                    );\n\n\n                    if (\n                        typeof mascot.animate !==\n                        \"function\"\n                    ) {\n\n                        moveTo(target);\n\n                        finishJump(\n                            index,\n                            target\n                        );\n\n                        return;\n\n                    }\n\n\n                    activeAnimation =\n                        mascot.animate(\n                            [\n                                {\n                                    transform:\n                                        \"translate3d(\" +\n                                        currentX +\n                                        \"px,\" +\n                                        currentY +\n                                        \"px,0)\"\n                                },\n\n                                {\n                                    transform:\n                                        \"translate3d(\" +\n                                        middleX +\n                                        \"px,\" +\n                                        middleY +\n                                        \"px,0)\",\n\n                                    offset: 0.5\n                                },\n\n                                {\n                                    transform:\n                                        \"translate3d(\" +\n                                        target.x +\n                                        \"px,\" +\n                                        target.y +\n                                        \"px,0)\"\n                                }\n                            ],\n                            {\n                                duration: 820,\n                                easing:\n                                    \"cubic-bezier(0.45, 0, 0.25, 1)\"\n                            }\n                        );\n\n\n                    activeAnimation.onfinish =\n                        function () {\n\n                            finishJump(\n                                index,\n                                target\n                            );\n\n                        };\n\n                }\n\n\n                function hideAndJump() {\n\n                    if (\n                        reduceMotion ||\n                        state === \"celebrating\" ||\n                        state === \"jumping\"\n                    ) {\n                        return;\n                    }\n\n\n                    clearTimers();\n\n                    mascot.classList.remove(\n                        \"show-message\"\n                    );\n\n                    setState(\"hidden\");\n\n                    moveTo(\n                        getPosition(\n                            currentIndex,\n                            \"hidden\"\n                        )\n                    );\n\n\n                    schedule(\n                        function () {\n\n                            jumpTo(\n                                chooseAnotherCard()\n                            );\n\n                        },\n                        480\n                    );\n\n                }\n\n\n                function throwConfetti() {\n\n                    if (reduceMotion) {\n                        return;\n                    }\n\n\n                    for (\n                        var i = 0;\n                        i < 28;\n                        i += 1\n                    ) {\n\n                        var piece =\n                            document.createElement(\n                                \"span\"\n                            );\n\n                        var angle =\n                            (Math.PI * 2 * i) \/\n                            28 +\n                            Math.random() *\n                            0.28;\n\n                        var distance =\n                            75 +\n                            Math.random() *\n                            115;\n\n\n                        piece.className =\n                            \"mascot-confetti-piece\";\n\n                        piece.style.left =\n                            (\n                                currentX +\n                                mascot.offsetWidth \/\n                                2\n                            ) +\n                            \"px\";\n\n                        piece.style.top =\n                            (\n                                currentY +\n                                mascot.offsetHeight *\n                                0.42\n                            ) +\n                            \"px\";\n\n                        piece.style.background =\n                            colors[\n                                i %\n                                colors.length\n                            ];\n\n                        piece.style.setProperty(\n                            \"--confetti-x\",\n                            Math.cos(angle) *\n                            distance +\n                            \"px\"\n                        );\n\n                        piece.style.setProperty(\n                            \"--confetti-y\",\n                            (\n                                Math.sin(angle) *\n                                distance +\n                                45\n                            ) +\n                            \"px\"\n                        );\n\n                        piece.style.setProperty(\n                            \"--confetti-r\",\n                            (\n                                180 +\n                                Math.random() *\n                                540\n                            ) +\n                            \"deg\"\n                        );\n\n\n                        grid.appendChild(\n                            piece\n                        );\n\n\n                        window.setTimeout(\n                            function (confetti) {\n\n                                confetti.remove();\n\n                            },\n                            1100,\n                            piece\n                        );\n\n                    }\n\n                }\n\n\n                function celebrate(card) {\n\n                    var index =\n                        cards.indexOf(card);\n\n                    var hiddenPosition;\n                    var peekPosition;\n                    var phrase;\n\n\n                    if (index < 0) {\n                        return;\n                    }\n\n\n                    if (\n                        state === \"hovered\" &&\n                        currentIndex === index\n                    ) {\n                        return;\n                    }\n\n\n                    clearTimers();\n\n                    cancelAnimation();\n\n                    currentIndex = index;\n\n                    hiddenPosition =\n                        getPosition(\n                            index,\n                            \"hidden\"\n                        );\n\n                    peekPosition =\n                        getPosition(\n                            index,\n                            \"peek\"\n                        );\n\n                    phrase =\n                        phrases[\n                            Math.floor(\n                                Math.random() *\n                                phrases.length\n                            )\n                        ];\n\n\n                    mascot.classList.remove(\n                        \"show-message\",\n                        \"is-visible\",\n                        \"is-peeking\",\n                        \"is-jumping\",\n                        \"is-celebrating\"\n                    );\n\n                    mascot.style.transition =\n                        \"none\";\n\n                    moveTo(\n                        hiddenPosition\n                    );\n\n                    mascot.offsetWidth;\n\n                    mascot.style.transition =\n                        \"\";\n\n                    mascot.classList.add(\n                        \"is-visible\"\n                    );\n\n                    setState(\"peeking\");\n\n                    state = \"hovered\";\n\n                    showMessage(\n                        phrase,\n                        2500\n                    );\n\n\n                    window.requestAnimationFrame(\n                        function () {\n\n                            moveTo(\n                                peekPosition\n                            );\n\n                        }\n                    );\n\n\n                    schedule(\n                        function () {\n\n                            setState(\n                                \"hidden\"\n                            );\n\n                            mascot.classList.remove(\n                                \"show-message\"\n                            );\n\n                            moveTo(\n                                getPosition(\n                                    currentIndex,\n                                    \"hidden\"\n                                )\n                            );\n\n\n                            schedule(\n                                function () {\n\n                                    mascot.classList.remove(\n                                        \"is-visible\"\n                                    );\n\n                                },\n                                520\n                            );\n\n                        },\n                        2850\n                    );\n\n                }\n\n\n                grid.addEventListener(\n                    \"pointermove\",\n                    function (event) {\n\n                        var gridRect;\n                        var centerX;\n                        var centerY;\n                        var distance;\n\n\n                        if (\n                            state !== \"peeking\"\n                        ) {\n                            return;\n                        }\n\n\n                        gridRect =\n                            grid.getBoundingClientRect();\n\n                        centerX =\n                            gridRect.left +\n                            currentX +\n                            mascot.offsetWidth \/\n                            2;\n\n                        centerY =\n                            gridRect.top +\n                            currentY +\n                            mascot.offsetHeight \/\n                            2;\n\n\n                        mascot.classList.toggle(\n                            \"is-facing-left\",\n                            event.clientX <\n                            centerX\n                        );\n\n\n                        distance =\n                            Math.hypot(\n                                event.clientX -\n                                centerX,\n\n                                event.clientY -\n                                centerY\n                            );\n\n\n                        if (\n                            !reduceMotion &&\n                            distance < 135\n                        ) {\n\n                            hideAndJump();\n\n                        }\n\n                    }\n                );\n\n\n                window.addEventListener(\n                    \"resize\",\n                    function () {\n\n                        if (\n                            state === \"peeking\" ||\n                            state === \"hovered\"\n                        ) {\n\n                            moveTo(\n                                getPosition(\n                                    currentIndex,\n                                    \"peek\"\n                                )\n                            );\n\n                        } else if (\n                            state !== \"celebrating\" &&\n                            state !== \"jumping\"\n                        ) {\n\n                            moveTo(\n                                getPosition(\n                                    currentIndex,\n                                    \"hidden\"\n                                )\n                            );\n\n                        }\n\n                    }\n                );\n\n\n                moveTo(\n                    getPosition(\n                        currentIndex,\n                        \"hidden\"\n                    )\n                );\n\n\n                return {\n\n                    celebrate: celebrate\n\n                };\n\n            }\n\n\n            function startMusicCards() {\n\n                var infoCard =\n                    document.getElementById(\n                        \"infoCard\"\n                    );\n\n                var infoCardLayout =\n                    document.getElementById(\n                        \"infoCardLayout\"\n                    );\n\n                var infoCardPoster =\n                    document.getElementById(\n                        \"infoCardPoster\"\n                    );\n\n                var infoCardText =\n                    document.getElementById(\n                        \"infoCardText\"\n                    );\n\n                var infoCardLink =\n                    document.getElementById(\n                        \"infoCardLink\"\n                    );\n\n                var closeButton =\n                    infoCard\n                        ? infoCard.querySelector(\n                            \".info-card-close\"\n                        )\n                        : null;\n\n                var concertItems =\n                    document.querySelectorAll(\n                        \".concert-card[data-info]\"\n                    );\n\n                var infoCardHome =\n                    document.createComment(\n                        \"Ubicaci\u00f3 original de la fitxa d'informaci\u00f3\"\n                    );\n\n                var activeItem = null;\n\n\n                if (\n                    !infoCard ||\n                    !infoCardLayout ||\n                    !infoCardPoster ||\n                    !infoCardText ||\n                    !infoCardLink ||\n                    !concertItems.length\n                ) {\n                    return;\n                }\n\n\n                infoCard.parentNode.insertBefore(\n                    infoCardHome,\n                    infoCard\n                );\n\n\n                function positionInfoCard(\n                    item\n                ) {\n\n                    if (\n                        window.matchMedia(\n                            \"(max-width: 680px)\"\n                        ).matches &&\n                        item\n                    ) {\n\n                        item.insertAdjacentElement(\n                            \"afterend\",\n                            infoCard\n                        );\n\n                    } else if (\n                        infoCardHome.parentNode\n                    ) {\n\n                        infoCardHome.parentNode\n                            .insertBefore(\n                                infoCard,\n                                infoCardHome\n                                    .nextSibling\n                            );\n\n                    }\n\n                }\n\n\n                function showInfoCard(\n                    message,\n                    externalHref,\n                    posterSrc,\n                    posterAlt,\n                    linkLabel,\n                    sourceItem\n                ) {\n\n                    activeItem =\n                        sourceItem;\n\n                    positionInfoCard(\n                        activeItem\n                    );\n\n                    infoCardText.textContent =\n                        message;\n\n\n                    if (posterSrc) {\n\n                        infoCardPoster.src =\n                            posterSrc;\n\n                        infoCardPoster.alt =\n                            posterAlt ||\n                            \"Cartell del concert\";\n\n                        infoCardPoster.hidden =\n                            false;\n\n                        infoCardLayout.classList\n                            .remove(\n                                \"no-poster\"\n                            );\n\n                    } else {\n\n                        infoCardPoster.hidden =\n                            true;\n\n                        infoCardPoster\n                            .removeAttribute(\n                                \"src\"\n                            );\n\n                        infoCardPoster.alt =\n                            \"\";\n\n                        infoCardLayout.classList\n                            .add(\n                                \"no-poster\"\n                            );\n\n                    }\n\n\n                    if (\n                        externalHref &&\n                        externalHref !== \"#\"\n                    ) {\n\n                        infoCardLink.href =\n                            externalHref;\n\n                        infoCardLink.textContent =\n                            linkLabel ||\n                            \"M\u00e9s informaci\u00f3\";\n\n                        infoCardLink.style.display =\n                            \"inline-flex\";\n\n                    } else {\n\n                        infoCardLink.style.display =\n                            \"none\";\n\n                    }\n\n\n                    infoCard.classList.add(\n                        \"show\"\n                    );\n\n                }\n\n\n                function hideInfoCard() {\n\n                    infoCard.classList.remove(\n                        \"show\"\n                    );\n\n                    infoCardText.textContent =\n                        \"\";\n\n                    infoCardPoster.hidden =\n                        true;\n\n                    infoCardPoster\n                        .removeAttribute(\n                            \"src\"\n                        );\n\n                    infoCardPoster.alt =\n                        \"\";\n\n                    infoCardLayout.classList.add(\n                        \"no-poster\"\n                    );\n\n                    infoCardLink.style.display =\n                        \"none\";\n\n                }\n\n\n                concertItems.forEach(\n                    function (item) {\n\n                        item.addEventListener(\n                            \"click\",\n                            function () {\n\n                                showInfoCard(\n                                    item.getAttribute(\n                                        \"data-info\"\n                                    ),\n\n                                    item.getAttribute(\n                                        \"data-href\"\n                                    ),\n\n                                    item.getAttribute(\n                                        \"data-poster\"\n                                    ),\n\n                                    item.getAttribute(\n                                        \"data-poster-alt\"\n                                    ),\n\n                                    item.getAttribute(\n                                        \"data-link-label\"\n                                    ),\n\n                                    item\n                                );\n\n                            }\n                        );\n\n\n                        item.addEventListener(\n                            \"mouseenter\",\n                            function () {\n\n                                if (\n                                    mascotController\n                                ) {\n\n                                    mascotController\n                                        .celebrate(\n                                            item\n                                        );\n\n                                }\n\n                            }\n                        );\n\n\n                        item.addEventListener(\n                            \"focus\",\n                            function () {\n\n                                if (\n                                    mascotController\n                                ) {\n\n                                    mascotController\n                                        .celebrate(\n                                            item\n                                        );\n\n                                }\n\n                            }\n                        );\n\n                    }\n                );\n\n\n                if (closeButton) {\n\n                    closeButton.addEventListener(\n                        \"click\",\n                        hideInfoCard\n                    );\n\n                }\n\n\n                window.addEventListener(\n                    \"resize\",\n                    function () {\n\n                        if (\n                            activeItem &&\n                            infoCard.classList\n                                .contains(\n                                    \"show\"\n                                )\n                        ) {\n\n                            positionInfoCard(\n                                activeItem\n                            );\n\n                        }\n\n                    }\n                );\n\n            }\n\n\n            if (\n                document.readyState ===\n                \"loading\"\n            ) {\n\n                document.addEventListener(\n                    \"DOMContentLoaded\",\n                    function () {\n\n                        mascotController =\n                            startDancingMascot();\n\n                        startMusicCards();\n\n                    }\n                );\n\n            } else {\n\n                mascotController =\n                    startDancingMascot();\n\n                startMusicCards();\n\n            }\n\n        })();\n    <\/script>\n\n<\/body>\n<\/html>\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","protected":false},"excerpt":{"rendered":"<p>Programaci\u00f3 musical Esdeveniments Musicals Fira d&#8217;Onda 2026 Sis grans cites entre el 17 i el 24 d&#8217;octubre amb concerts, orquestres i propostes per a tots els p\u00fablics. Cartell de concerts \u00b7 Fira d&#8217;Onda 2026 Ds. 17 oct. La Pegatina Recinte Multiusos Dg. 18 oct. Los Rebeldes Sinf\u00f3nico Teatre M\u00f2naco Dt. 20 oct. Orquestra Panorama Pla\u00e7a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_templately_pack_id":"","_templately_imported_at":"","_templately_source":"","_templately_import_session_id":"","_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Concerts - Fira d&#039;Onda 2026<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Concerts - Fira d&#039;Onda 2026\" \/>\n<meta property=\"og:description\" content=\"Programaci\u00f3 musical Esdeveniments Musicals Fira d&#8217;Onda 2026 Sis grans cites entre el 17 i el 24 d&#8217;octubre amb concerts, orquestres i propostes per a tots els p\u00fablics. Cartell de concerts \u00b7 Fira d&#8217;Onda 2026 Ds. 17 oct. La Pegatina Recinte Multiusos Dg. 18 oct. Los Rebeldes Sinf\u00f3nico Teatre M\u00f2naco Dt. 20 oct. Orquestra Panorama Pla\u00e7a...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/\" \/>\n<meta property=\"og:site_name\" content=\"Fira d&#039;Onda 2026\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-05T11:40:38+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fira.onda.es\\\/index.php\\\/va\\\/conciertos\\\/\",\"url\":\"https:\\\/\\\/fira.onda.es\\\/index.php\\\/va\\\/conciertos\\\/\",\"name\":\"Concerts - Fira d&#039;Onda 2026\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fira.onda.es\\\/#website\"},\"datePublished\":\"2025-06-27T07:47:53+00:00\",\"dateModified\":\"2026-10-05T11:40:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fira.onda.es\\\/index.php\\\/va\\\/conciertos\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fira.onda.es\\\/index.php\\\/va\\\/conciertos\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fira.onda.es\\\/index.php\\\/va\\\/conciertos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/fira.onda.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Concerts\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fira.onda.es\\\/#website\",\"url\":\"https:\\\/\\\/fira.onda.es\\\/\",\"name\":\"Fira d&#039;Onda 2026\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/fira.onda.es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fira.onda.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fira.onda.es\\\/#organization\",\"name\":\"Fira d&#039;Onda 2026\",\"url\":\"https:\\\/\\\/fira.onda.es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/fira.onda.es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fira.onda.es\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/cropped-AJUNTAMENT-ONDA-NEGRE.png\",\"contentUrl\":\"https:\\\/\\\/fira.onda.es\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/cropped-AJUNTAMENT-ONDA-NEGRE.png\",\"width\":888,\"height\":402,\"caption\":\"Fira d&#039;Onda 2026\"},\"image\":{\"@id\":\"https:\\\/\\\/fira.onda.es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Concerts - Fira d&#039;Onda 2026","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/","og_locale":"es_ES","og_type":"article","og_title":"Concerts - Fira d&#039;Onda 2026","og_description":"Programaci\u00f3 musical Esdeveniments Musicals Fira d&#8217;Onda 2026 Sis grans cites entre el 17 i el 24 d&#8217;octubre amb concerts, orquestres i propostes per a tots els p\u00fablics. Cartell de concerts \u00b7 Fira d&#8217;Onda 2026 Ds. 17 oct. La Pegatina Recinte Multiusos Dg. 18 oct. Los Rebeldes Sinf\u00f3nico Teatre M\u00f2naco Dt. 20 oct. Orquestra Panorama Pla\u00e7a...","og_url":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/","og_site_name":"Fira d&#039;Onda 2026","article_modified_time":"2026-10-05T11:40:38+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/","url":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/","name":"Concerts - Fira d&#039;Onda 2026","isPartOf":{"@id":"https:\/\/fira.onda.es\/#website"},"datePublished":"2025-06-27T07:47:53+00:00","dateModified":"2026-10-05T11:40:38+00:00","breadcrumb":{"@id":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fira.onda.es\/index.php\/va\/conciertos\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fira.onda.es\/index.php\/va\/conciertos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/fira.onda.es\/"},{"@type":"ListItem","position":2,"name":"Concerts"}]},{"@type":"WebSite","@id":"https:\/\/fira.onda.es\/#website","url":"https:\/\/fira.onda.es\/","name":"Fira d&#039;Onda 2026","description":"","publisher":{"@id":"https:\/\/fira.onda.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fira.onda.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/fira.onda.es\/#organization","name":"Fira d&#039;Onda 2026","url":"https:\/\/fira.onda.es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/fira.onda.es\/#\/schema\/logo\/image\/","url":"https:\/\/fira.onda.es\/wp-content\/uploads\/2025\/07\/cropped-AJUNTAMENT-ONDA-NEGRE.png","contentUrl":"https:\/\/fira.onda.es\/wp-content\/uploads\/2025\/07\/cropped-AJUNTAMENT-ONDA-NEGRE.png","width":888,"height":402,"caption":"Fira d&#039;Onda 2026"},"image":{"@id":"https:\/\/fira.onda.es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":47,"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":1593,"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/pages\/14\/revisions\/1593"}],"wp:attachment":[{"href":"https:\/\/fira.onda.es\/index.php\/wp-json\/wp\/v2\/media?parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}