PageSourceSearch

https://isolina.pe/experiencias/?

html isolina.pe collected 2026-09-30 06:18:00 UTC 88,947 bytes, 1,747 lines download raw bytes

1<!doctype html>
2<html lang="es">
3	<head>
4		<meta charset="utf-8">
5		<meta http-equiv="X-UA-Compatible" content="IE=edge">
6		<meta name="viewport" content="width=device-width, initial-scale=0.86, maximum-scale=0.86, user-scalable=yes">
7		<meta name="description" content="Restaurante  - Experiencias">
8		<meta name="keywords" content="Experiencias Gastronómicas, Experiencias en Restaurantes, Experiencias de comida, Clases de cocina, Menús degustación">
9		<meta name="author" content="MESA 24/7">
10
11		<meta name="google-site-verification" content="JFIP3jfS03fXvpBAhAtP18u1foL1iXVbGnfFNuGbFXQ" />
12<meta property="og:url" content="https://experiencias.mesa247.pe/experiencias" />
13<meta property="og:title" content="Experiencias Gastronómicas | " />
14<meta property="og:image" content="https://cdn.mesa247.io/archivos/web202101/img/logo_mesa200.jpg" />
15<meta property="og:image:secure_url" content="https://cdn.mesa247.io/archivos/web202101/img/logo_mesa200.jpg" />
16<meta property="og:image:type" content="image/jpeg" />
17<meta property="og:image:width" content="400" />
18<meta property="og:image:height" content="300" />
19<meta property="og:image:alt" content="Experiencias Gastronómicas | " />
20<meta property="og:description" content="Restaurante  - Experiencias" />
21<meta property="og:type" content="website" />
22<link rel="canonical" href="https://experiencias.mesa247.pe/experiencias">
23
24		<title>Experiencias Gastronómicas | </title>
25
26        <link rel="preconnect" href="https://cdn.mesa247.io" crossorigin>
27        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/icons.woff2?66fd5b566833312924e222d2fa402c8a" type="font/ttf"  crossorigin="anonymous">
28
29				        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/Manrope-Regular.ttf" type="font/ttf"  crossorigin="anonymous">
30        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/Manrope-Bold.ttf" type="font/ttf" crossorigin="anonymous">
31        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/Manrope-SemiBold.ttf" type="font/ttf" crossorigin="anonymous">
32        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/Manrope-Light.ttf" type="font/ttf" crossorigin="anonymous">
33        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/Manrope-Medium.ttf" type="font/ttf" crossorigin="anonymous">
34        <link rel="preload" as="font" href="https://cdn.mesa247.io/archivos/web202101/fonts/Manrope-ExtraLight.ttf" type="font/ttf" crossorigin="anonymous">
35		
36		<link href="https://experiencias.mesa247.pe/experiencias/css/app.css?id=3ccaeaed34f5eb6355f6" rel="stylesheet" type="text/css" >
37		<link href="https://experiencias.mesa247.pe/experiencias/css/font-awesome.css" rel="stylesheet" type="text/css" >
38		<meta name="csrf-token" content="FGHfBtjiYbIzxPH4ekALpJnA1wfiwl7AzGxjLmna">
39		<meta name="locale" content="es">
40		<link href="https://cdn.mesa247.io/archivos/mesa247/favicon.ico" rel="shortcut icon" type="image/x-icon">
41
42                                                    <!-- START Webpages Styles -->
43                <style type="text/css">
44                    @font-face {
45  font-family: 'Courier-Regular';
46  src: url('https://cdn.mesa247.io/archivos/webpages/fonts/custom/Courier/Courier-Regular.ttf');
47  font-weight: normal;
48  font-style: normal;
49  font-display: swap;
50}
51@font-face {
52  font-family: 'Courier-Regular';
53  src: url('https://cdn.mesa247.io/archivos/webpages/fonts/custom/Courier/Courier-Regular.ttf');
54  font-weight: normal;
55  font-style: normal;
56  font-display: swap;
57}
58@font-face {
59  font-family: 'Courier-Regular';
60  src: url('https://cdn.mesa247.io/archivos/webpages/fonts/custom/Courier/Courier-Regular.ttf');
61  font-weight: normal;
62  font-style: normal;
63  font-display: swap;
64}
65
66/* common styles */
67body {
68  color: #222;
69  font-size: 1em;
70  line-height: 1.4;
71  font-family: 'Courier-Regular', 'PublicSans', sans-serif !important;
72}
73
74h1, h2, h3, h4, h5, h6 {
75  font-family: 'Courier-Regular';
76}
77
78p, li, span {
79  font-family: 'Courier-Regular';
80}
81
82.btn-cta, .menu-list > li {
83  font-family: 'Courier-Regular';
84}
85
86b, strong {
87  font-family:  'Courier-Regular';
88}
89
90.form-restaurant .submit {
91  font-family: 'Courier-Regular';
92}
93
94.discount-plates .food-plates .box-food .prices .price-money {
95  font-family: 'Courier-Regular';
96}
97
98.discount-plates .food-plates .box-food .prices .price-money span {
99  font-family: 'Courier-Regular';
100}
101
102.wrap-food-plates .food-plates-items .box-food-plate .food-header .food-title {
103  font-family: 'Courier-Regular';
104}
105
106.wrap-food-plates .food-plates-items .box-food-plate .food-body p {
107  font-family: 'Courier-Regular';
108}
109
110.banner-description .slogan {
111  font-family: 'Courier-Regular';
112}
113
114.panel-home header .buttons .btn-cta,
115.panel-home .wrap-description .buttons .btn-cta {
116  font-family: 'Courier-Regular';
117}
118
119/* Custom Fixes */
120.panel .panel-content .panel-description h2,
121.panel .panel-content .the-menu-container .the-menu-content h2 {
122  font-family: 'Courier-Regular';
123}
124
125.editor-container {
126  font-family: 'Courier-Regular';
127}
128
129.banner-description h1 {
130  font-family: 'Courier-Regular';
131}
132
133.wrap-popular-foods .box-popular-food .food-body .food-description p {
134  font-family: 'Courier-Regular';
135}
136
137.wrap-popular-foods .box-popular-food .food-body .food-title {
138  font-family:  'Courier-Regular';
139}
140
141.wrap-popular-foods .box-popular-food .food-body .food-price,
142.wrap-food-plates .food-plates-items .box-food-plate .food-header
143.food-price .price {
144  font-family: 'Courier-Regular';
145}
146
147/* Extras */
148.panel .panel-content .panel-description:after {
149  display: none
150}
151
152.section-break { display: none; }
153
154.back-to-top {
155  background-color: rgb(13, 64, 58);
156}
157
158#atendemos {
159  max-width: 100%;
160  margin: 0 auto;
161}
162
163#atendemos .order-md-2 {
164  order: 1;
165  flex: 0 0 100% !important;
166  max-width: 100% !important;
167}
168
169#atendemos .order-md-1 {
170  order: 2;
171  flex: 0 0 100% !important;
172  max-width: 100% !important;
173}
174
175#atendemos  .panel .panel-content .panel-description {
176  padding: 30px 50px 30px;
177}
178
179#somos {
180  max-width: 100%;
181  margin: 0 auto;
182}
183
184#somos .order-md-2 {
185  order: 1;
186  flex: 0 0 100% !important;
187  max-width: 100% !important;
188}
189
190#somos .order-md-1 {
191  order: 2;
192  flex: 0 0 100% !important;
193  max-width: 100% !important;
194}
195
196#somos .panel .panel-content .panel-description {
197  padding: 30px 50px 30px;
198}
199
200.panel-home header .buttons .btn-cta.light {
201    color: #ffffff;
202    background-color: #0d403a;
203                </style>
204                <!-- END Webpages Styles -->
205                
206                <!-- START Webpages Head Scripts -->
207                
208                <!-- END Webpages Head Scripts -->
209                    
210        <link id="bsdp-css" href="https://experiencias.mesa247.pe/experiencias/css/datepicker.min.css" rel="stylesheet">
211<link rel="stylesheet" href="https://experiencias.mesa247.pe/experiencias/libs/splide/css/splide.min.css">
212
213    
214
215	</head>
216	<body  class="home" >
217
218                        <!-- START Webpages Body Scripts -->
219            
220            <!-- END Webpages Body Scripts -->
221            
222    
223    <div id="bg-cover"></div>
224
225    <div id="app">
226    <div class="main-bg-overlay"></div>
227		
228	<div class="container-fluid navbar-header navbar-name-"  style="background-color: #000000;" >
229    <div class="row">
230        <div class="col-4">
231                            <a href="/experiencias/">
232                    <img class="img-logo" src="https://cdn.mesa247.io/archivos/w-agrupation-logo-isolina-1632508255.png">
233                </a>
234                    </div>
235        <div class="col-8 text-right">
236            <div class="dropdown dd-lang">
237                <button class="btn dropdown-toggle btn-language" type="button" id="dd-lang" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
238                    <i class="fa fa-globe"></i>
239                    ES
240                </button>
241                <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dd-lang">
242                                        <a class="dropdown-item" href="https://experiencias.mesa247.pe/experiences/">EN</a>
243                </div>
244            </div>
245        </div>
246    </div>
247</div>
248
249    
250        <div class="experiences-header-wrapper experiences-filters-sticky">
251        <div class="experiences-filters-content">
252            <div class="mobile-control-filters">
253                <div class="control-filter">
254                    <button id="btnControlFilter" class="btn btn-control-secondary"><i class="icon-filter"></i> <span class="name">Ver filtros</span></button>
255                </div>
256                <div class="control-filter">
257                    <button class="btn btn-control dropdown-toggle" type="button" id="dd-orderbyMobile" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Ordenado <span class="sorting-selected">por Relevancia</span></button>
258                    <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dd-orderbyMobile">
259                        <a class="dropdown-header"><span>Ordenado por</span><i class="icon-close"></i></a>
260                        <div class="dropdown-divider"></div>
261                        <a class="dropdown-item">
262                            <div class="custom-control custom-radio">
263                                <input type="radio" checked id="mobile-order-by-1" name="mobile-order-by" class="custom-control-input sorting-input" value="relevance">
264                                <label class="custom-control-label" for="mobile-order-by-1">Relevancia</label>
265                            </div>
266                        </a>
267                        <a class="dropdown-item">
268                            <div class="custom-control custom-radio">
269                                <input type="radio" id="mobile-order-by-3" name="mobile-order-by" class="custom-control-input sorting-input" value="lowprice">
270                                <label class="custom-control-label" for="mobile-order-by-3">Menor precio</label>
271                            </div>
272                        </a>
273                        <a class="dropdown-item">
274                            <div class="custom-control custom-radio">
275                                <input type="radio" id="mobile-order-by-4" name="mobile-order-by" class="custom-control-input sorting-input" value="highprice">
276                                <label class="custom-control-label" for="mobile-order-by-4">Mayor precio</label>
277                            </div>
278                        </a>
279                        <a class="dropdown-item">
280                            <div class="custom-control custom-radio">
281                                <input type="radio" id="mobile-order-by-discount" name="mobile-order-by" class="custom-control-input sorting-input" value="discount">
282                                <label class="custom-control-label" for="mobile-order-by-discount">Descuento</label>
283                            </div>
284                        </a>
285                        <a class="dropdown-item">
286                            <div class="custom-control custom-radio">
287                                <input type="radio" id="mobile-order-by-5" name="mobile-order-by" class="custom-control-input sorting-input" value="a-z">
288                                <label class="custom-control-label" for="mobile-order-by-5">A - Z</label>
289                            </div>
290                        </a>
291                        <a class="dropdown-item">
292                            <div class="custom-control custom-radio">
293                                <input type="radio" id="mobile-order-by-6" name="mobile-order-by" class="custom-control-input sorting-input" value="z-a">
294                                <label class="custom-control-label" for="mobile-order-by-6">Z - A</label>
295                            </div>
296                        </a>
297                    </div>
298                </div>
299            </div>
300            <div class="filter-buttons-wrapper">
301                <div class="filters-title-content">
302                    <div class="title">Experiencias gastronómicas</div>
303                </div>
304                <div class="filter-buttons-content">
305                    <div class="sorting-actions">
306                        <button id="btnToggleFilter" class="btn btn-control-secondary"><i class="icon-filter"></i> <span class="name">Filtros</span></button>
307                        <button class="btn btn-control dropdown-toggle" type="button" id="dd-orderby" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
307Ordenado <span class="sorting-selected">por Relevancia</span></button>
308                        <div class="dropdown-menu dropdown-menu-left" aria-labelledby="dd-orderby">
309                            <a class="dropdown-header"><span>Ordenado por</span><i class="icon-close"></i></a>
310                            <div class="dropdown-divider"></div>
311                            <a class="dropdown-item">
312                                <div class="custom-control custom-radio">
313                                    <input type="radio" checked id="rb-order-by-1" name="rb-order-by" class="custom-control-input sorting-input" value="relevance">
314                                    <label class="custom-control-label" for="rb-order-by-1">Relevancia</label>
315                                </div>
316                            </a>
317                            <a class="dropdown-item">
318                                <div class="custom-control custom-radio">
319                                    <input type="radio" id="rb-order-by-3" name="rb-order-by" class="custom-control-input sorting-input" value="lowprice">
320                                    <label class="custom-control-label" for="rb-order-by-3">Menor precio</label>
321                                </div>
322                            </a>
323                            <a class="dropdown-item">
324                                <div class="custom-control custom-radio">
325                                    <input type="radio" id="rb-order-by-4" name="rb-order-by" class="custom-control-input sorting-input" value="highprice">
326                                    <label class="custom-control-label" for="rb-order-by-4">Mayor precio</label>
327                                </div>
328                            </a>
329                            <a class="dropdown-item">
330                                <div class="custom-control custom-radio">
331                                    <input type="radio" id="rb-order-by-discount" name="rb-order-by" class="custom-control-input sorting-input" value="discount">
332                                    <label class="custom-control-label" for="rb-order-by-discount">Descuento</label>
333                                </div>
334                            </a>
335                            <a class="dropdown-item">
336                                <div class="custom-control custom-radio">
337                                    <input type="radio" id="rb-order-by-5" name="rb-order-by" class="custom-control-input sorting-input" value="a-z">
338                                    <label class="custom-control-label" for="rb-order-by-5">A - Z</label>
339                                </div>
340                            </a>
341                            <a class="dropdown-item">
342                                <div class="custom-control custom-radio">
343                                    <input type="radio" id="rb-order-by-6" name="rb-order-by" class="custom-control-input sorting-input" value="z-a">
344                                    <label class="custom-control-label" for="rb-order-by-6">Z - A</label>
345                                </div>
346                            </a>
347                        </div>
348                    </div>
349                </div>
350            </div>
351        </div>
352    </div>
353                <div class="filters-popup">
354                    <div class="filters-popup-header">
355                        <h2 class="filters-popup-title">Filtrar y ordenar</h2>
356                        <button type="button" class="btn btn-filter-close-popup"><i class="icon-close"></i></button>
357                    </div>
358                    <div class="filters-popup-count">
359                        <span class="filters-count-text">4 experiencias</span>
360                    </div>
361                    <div class="filters-popup-active">
362                        <!-- Los filtros activos se generarán dinámicamente con JavaScript -->
363                    </div>
364                    <div class="filters-popup-content">
365                        <div class="filter-section expanded">
366                            <div class="filter-section-header">
367                                <h3 class="filter-section-title">Ocasión</h3>
368                                <button type="button" class="filter-section-toggle" aria-expanded="true">
369                                    <i class="icon-arrow-up-gross"></i>
370                                </button>
371                            </div>
372                            <div class="filter-section-content show">
373                                <div class="filter-buttons-group">
374                                                                                                            <button type="button" class="filter-btn by-category-btn" data-value="bjKZMypGxpv1r7zOmngL" data-input-id="ocasionbjKZMypGxpv1r7zOmngL">
375                                        Experiencia para dos
376                                    </button>
377                                                                        <button type="button" class="filter-btn by-category-btn" data-value="obYPg8rnw36xak3AXqKz" data-input-id="ocasionobYPg8rnw36xak3AXqKz">
378                                        General
379                                    </button>
380                                                                        <button type="button" class="filter-btn by-category-btn" data-value="gjW8poNYwXA14rL96AGa" data-input-id="ocasiongjW8poNYwXA14rL96AGa">
381                                        Menú degustación
382                                    </button>
383                                                                    </div>
384                                <!-- Checkboxes ocultos para mantener la funcionalidad (opción múltiple) -->
385                                                                <input type="checkbox" id="ocasionbjKZMypGxpv1r7zOmngL" name="ocasion" class="filter-input by-category" value="bjKZMypGxpv1r7zOmngL" style="display: none;">
386                                                                <input type="checkbox" id="ocasionobYPg8rnw36xak3AXqKz" name="ocasion" class="filter-input by-category" value="obYPg8rnw36xak3AXqKz" style="display: none;">
387                                                                <input type="checkbox" id="ocasiongjW8poNYwXA14rL96AGa" name="ocasion" class="filter-input by-category" value="gjW8poNYwXA14rL96AGa" style="display: none;">
388                                                            </div>
389                        </div>
390                        <div class="filter-section expanded">
391                            <div class="filter-section-header">
392                                <h3 class="filter-section-title">Precio</h3>
393                                <button type="button" class="filter-section-toggle" aria-expanded="true">
394                                    <i class="icon-arrow-up-gross"></i>
395                                </button>
396                            </div>
397                            <div class="filter-section-content show">
398                                <div class="filter-buttons-group">
399                                                                        <button type="button" class="filter-btn by-price-btn" data-value="S/ 50 - 150" data-input-id="byPrice0" data-min="50" data-max="150">
400                                        S/ 50 - 150
401                                    </button>
402                                                                        <button type="button" class="filter-btn by-price-btn" data-value="S/ 150 - 250" data-input-id="byPrice1" data-min="150" data-max="250">
403                                        S/ 150 - 250
404                                    </button>
405                                                                        <button type="button" class="filter-btn by-price-btn" data-value="S/ 250+" data-input-id="byPrice2" data-min="250" data-max="">
406                                        S/ 250+
407                                    </button>
408                                                                        <button type="button" class="filter-btn by-discount-btn" data-input-id="byDiscount">Con descuento</button>
409                                </div>
410                                <!-- Checkboxes ocultos para mantener la funcionalidad -->
411                                                                <input type="checkbox" class="filter-input by-price" id="byPrice0" value="S/ 50 - 150" data-min="50" data-max="150" style="display: none;">
412                                                                <input type="checkbox" class="filter-input by-price" id="byPrice1" value="S/ 150 - 250" data-min="150" data-max="250" style="display: none;">
413                                                                <input type="checkbox" class="filter-input by-price" id="byPrice2" value="S/ 250+" data-min="250" data-max="" style="display: none;">
414                                                                <input type="checkbox" class="filter-input by-discount" id="byDiscount" value="1" style="display: none;">
415                            </div>
416                        </div>
417                        <div class="filter-section expanded">
418                            <div class="filter-section-header">
419                                <h3 class="filter-section-title">Fecha</h3>
420                                <button type="button" class="filter-section-toggle" aria-expanded="true">
421                                    <i class="icon-arrow-up-gross"></i>
422                                </button>
423                                    </div>
424                            <div class="filter-section-content show">
425                                <div class="filter-buttons-group">
426                                    <button type="button" class="filter-btn by-month-btn" data-value="today" data-input-id="byDateToday">Hoy</button>
427                                    <button type="button" class="filter-btn by-month-btn" data-value="tomorrow" data-input-id="byDateTomorrow">Mañana</button>
428                                    <button type="button" class="filter-btn by-month-btn" data-value="weekend" data-input-id="byDateWeekend">Fin de semana</button>
429                                    <button type="button" class="filter-btn by-month-btn" data-value="next_week" data-input-id="byDateNextWeek">Próx. semana</button>
430                                                                        <button type="button" class="filter-btn by-month-btn" data-value="2026-10" data-input-id="byMonth0">
431                                        Octubre
432                                    </button>
433                                                                        <button type="button" class="filter-btn by-month-btn" data-value="2026-11" data-input-id="byMonth1">
434                                        Noviembre
435                                    </button>
436                                                                    </div>
437                                <!-- Checkboxes ocultos para mantener la funcionalidad -->
438                                <input type="checkbox" class="filter-input by-month" id="byDateToday" value="today" style="display: none;">
439                                <input type="checkbox" class="filter-input by-month" id="byDateTomorrow" value="tomorrow" style="display: none;">
440                                <input type="checkbox" class="filter-input by-month" id="byDateWeekend" value="weekend" style="display: none;">
441                                <input type="checkbox" class="filter-input by-month" id="byDateNextWeek" value="next_week" style="display: none;">
442                                                                <input type="checkbox" class="filter-input by-month" id="byMonth0" value="2026-10" style="display: none;">
443                                                                <input type="checkbox" class="filter-input by-month" id="byMonth1" value="2026-11" style="display: none;">
444                                                            </div>
445                        </div>
446                        <div class="filter-section expanded">
447                            <div class="filter-section-header">
448                                <h3 class="filter-section-title">Distrito</h3>
449                                <button type="button" class="filter-section-toggle" aria-expanded="true">
450                                    <i class="icon-arrow-up-gross"></i>
451                                </button>
452                            </div>
453                            <div class="filter-section-content show">
454                                <div class="filter-buttons-group">
455                                                                                                            <button type="button" class="filter-btn by-district-btn" data-value="Barranco" data-input-id="byDistrict0">
456                                        Barranco
457                                    </button>
458                                                                        <button type="button" class="filter-btn by-district-btn" data-value="Santiago de Surco" data-input-id="byDistrict1">
459                                        Santiago de Surco
460                                    </button>
461                                                                    </div>
462                                <!-- Checkboxes ocultos para mantener la funcionalidad -->
463                                                                <input type="checkbox" class="filter-input by-district" id="byDistrict0" value="Barranco" style="display: none;">
464                                                                <input type="checkbox" class="filter-input by-district" id="byDistrict1" value="Santiago de Surco" style="display: none;">
465                                                            </div>
466                        </div>
467                                            </div>
468                    <div class="filters-popup-footer">
469                        <button type="button" class="btn btn-clear-filters">Limpiar filtros</button>
470                    </div>
471                </div>
472    
473		<div class="experiences-list-alt">
474    		<div class="experiences-body-wrapper">
475                <div class="experiences-body-content">
476            <div class="experience-boxes">
477                                <div class="category-buttons-wrapper">
478                    <div class="category-buttons-content">
479                                                <div id="layoutCategory" class="filter-buttons">
480                                                                                                                        <button id="btnFilterbjKZMypGxpv1r7zOmngL" data-value="bjKZMypGxpv1r7zOmngL" data-seo-heading="Experiencias Gastronómicas y Cenas para Dos" data-seo-text="El plan perfecto para compartir: cenas, almuerzos y actividades para dos personas en los mejores restaurantes." class="btn btn-filter">
481                                    Experiencia para dos
482                                </button>
483                                                                                            <button id="btnFiltergjW8poNYwXA14rL96AGa" data-value="gjW8poNYwXA14rL96AGa" data-seo-heading="Los Mejores Menús de Degustación y Alta Cocina" data-seo-text="Reserva exclusivos menús de degustación, experiencias de pasos y de alta cocina en los mejores restaurantes." class="btn btn-filter">
484                                    Menú degustación
485                                </button>
486                                                                                            <button id="btnFilterobYPg8rnw36xak3AXqKz" data-value="obYPg8rnw36xak3AXqKz" data-seo-heading="Las Mejores Experiencias Gastronómicas y Eventos" data-seo-text="Planes únicos en los restaurantes top. Exclusivas cenas románticas, catas, menús de degustación y más." class="btn btn-filter">
487                                    General
488                                </button>
489                            
490                                                </div>
491                        <div class="btn-controls-wrapper btn-control-left" style="display: none;">
492                            <div class="btn-controls-content">
493                                <a rel="nofollow" hre
493f="#" class="btn-control">
494                                    <i class="icon-arrow-left-gross"></i>
495                                </a>
496                            </div>
497                        </div>
498                        <div class="btn-controls-wrapper btn-control-right" style="display: none;">
499                            <div class="btn-controls-content">
500                                <a rel="nofollow" href="#" class="btn-control">
501                                    <i class="icon-arrow-right-gross"></i>
502                                </a>
503                            </div>
504                        </div>
505                    </div>
506                </div>
507                                                <div id="experiencesMain" class="experience-cards-wrapper">
508                    <div class="experience-cards-content">
509                        <div id="categorySeoHeader" class="category-seo-header">
510                            <h1 class="category-seo-title"></h1>
511                            <p class="category-seo-text"></p>
512                        </div>
513                        <div id="mainExperiencesContainer" class="search-results">
514                                                                                                                        <div class="experience-card"
515                                id="experienceCardjVOJvNY14Y025E7kXymL"
516                                data-title="Amores de Taberna, Cena Romántica por Isolina"
517                                data-priority="20260724"
518                                data-category="bjKZMypGxpv1r7zOmngL"
519                                data-price="250.00"
520                                data-local="XKGEpq2wNKQ01LAzYn9v"
521                                data-local-name="Isolina - Surco"
522                                data-location="Santiago de Surco"
523                                data-months=""
524                                data-has-discount="0">
525                                    <div class="experience-info">
526                                        <div class="bg-image">
527                                                                                        <a class="btn-see-experience"
528                                            data-title="Amores de Taberna, Cena Romántica por Isolina"
529                                                                                        href="/experiencias/isolina-surco/amores-de-taberna-cena-romantica-por-isolina-en-isolina-surco-jVOJvNY14Y025E7kXymL"
530                                                                                        >
531                                                <div class="main-image" data-src="background-image:url(https://cdn.mesa247.io/archivos/exp-amores-de-taberna-cena-romantica-por-isolina-1760467591867.jpg)" style="background-image:url(https://cdn.mesa247.io/archivos/exp-amores-de-taberna-cena-romantica-por-isolina-1760467591867.jpg)">
532                                                                                                        <img class="mx-auto logo" src="https://cdn.mesa247.io/archivos/restaurante/logo/2021/09/restaurante-isolina-3.png" style="display: none">
533                                                                                                    </div>
534                                            </a>
535                                        </div>
536                                        <div class="media">
537                                            <div class="media-body">
538                                                <span style="display:none" class="see-in-marketplace">1</span>
539                                                                                                <a href="/experiencias/isolina-surco/" class="local-name-prefix">
540                                                    <span>Isolina - Surco</span>
541                                                </a>
542                                                                                                <a class="btn-see-experience" data-title="Amores de Taberna, Cena Romántica por Isolina" href="/experiencias/isolina-surco/amores-de-taberna-cena-romantica-por-isolina-en-isolina-surco-jVOJvNY14Y025E7kXymL">
543                                                    <h2 class="mt-0">Amores de Taberna, Cena Romántica por Isolina</h2>
544                                                </a>
545                                                <div class="local-location"><i class="icon-marker"></i> Santiago de Surco</div>
546                                                
547                                                
548                                            </div>
549                                        </div>
550                                        
551
552                                        
553
554                                        <div class="checkout-wrapper">
555                                            <div class="checkout-content">
556                                                
557                                                                                                <div class="action-buttons  soldout ">
558                                                                                                        <a data-title="Amores de Taberna, Cena Romántica por Isolina" class="btn-see-experience btn btn-gray btn-action" href="/experiencias/isolina-surco/amores-de-taberna-cena-romantica-por-isolina-en-isolina-surco-jVOJvNY14Y025E7kXymL" role="button">Agotado</a>
559                                                                                                    </div>
560                                                                                                <div class="result-errors text-danger small mt-2"></div>
561                                            </div>
562                                        </div>
563                                    </div>
564                                </div>
565                                                                                            <div class="experience-card"
566                                id="experienceCardgZG68lo1kD9a5RQL3nyD"
567                                data-title="Entre Copas y Piqueos en el Bar de Isolina"
568                                data-priority="20260724"
569                                data-category="obYPg8rnw36xak3AXqKz"
570                                data-price="220.00"
571                                data-local="XKGEpq2wNKQ01LAzYn9v"
572                                data-local-name="Isolina - Surco"
573                                data-location="Santiago de Surco"
574                                data-months=""
575                                data-has-discount="0">
576                                    <div class="experience-info">
577                                        <div class="bg-image">
578                                                                                        <a class="btn-see-experience"
579                                            data-title="Entre Copas y Piqueos en el Bar de Isolina"
580                                                                                        href="/experiencias/isolina-surco/entre-copas-y-piqueos-en-el-bar-de-isolina-en-isolina-surco-gZG68lo1kD9a5RQL3nyD"
581                                                                                        >
582                                                <div class="main-image" data-src="background-image:url(https://cdn.mesa247.io/archivos/exp-entre-copas-y-piqueos-en-el-bar-de-isolina-1760466105163.jpg)" style="background-image:url(https://cdn.mesa247.io/archivos/exp-entre-copas-y-piqueos-en-el-bar-de-isolina-1760466105163.jpg)">
583                                                                                                        <img class="mx-auto logo" src="https://cdn.mesa247.io/archivos/restaurante/logo/2021/09/restaurante-isolina-3.png" style="display: none">
584                                                                                                    </div>
585                                            </a>
586                                        </div>
587                                        <div class="media">
588                                            <div class="media-body">
589                                                <span style="display:none" class="see-in-marketplace">1</span>
590                                                                                                <a href="/experiencias/isolina-surco/" class="local-name-prefix">
591                                                    <span>Isolina - Surco</span>
592                                                </a>
593                                                                                                <a class="btn-see-experience" data-title="Entre Copas y Piqueos en el Bar de Isolina" href="/experiencias/isolina-surco/entre-copas-y-piqueos-en-el-bar-de-isolina-en-isolina-surco-gZG68lo1kD9a5RQL3nyD">
594                                                    <h2 class="mt-0">Entre Copas y Piqueos en el Bar de Isolina</h2>
595                                                </a>
596                                                <div class="local-location"><i class="icon-marker"></i> Santiago de Surco</div>
597                                                
598                                                
599                                            </div>
600                                        </div>
601                                        
602
603                                        
604
605                                        <div class="checkout-wrapper">
606                                            <div class="checkout-content">
607                                                
608                                                                                                <div class="action-buttons  soldout ">
609                                                                                                        <a data-title="Entre Copas y Piqueos en el Bar de Isolina" class="btn-see-experience btn btn-gray btn-action" href="/experiencias/isolina-surco/entre-copas-y-piqueos-en-el-bar-de-isolina-en-isolina-surco-gZG68lo1kD9a5RQL3nyD" role="button">Agotado</a>
610                                                                                                    </div>
611                                                                                                <div class="result-errors text-danger small mt-2"></div>
612                                            </div>
613                                        </div>
614                                    </div>
615                                </div>
616                                                                                            <div class="experience-card"
617                                id="experienceCardMLq8lKE5LbLzwJGgvPyb"
618                                data-title="Mini degustación Criolla en Isolina Barranco"
619                                data-priority="20260724"
620                                data-category="gjW8poNYwXA14rL96AGa"
621                                data-price="125.00"
622                                data-local="XRvYa03n1Gdl5PNVe2jz"
623                                data-local-name="Isolina - Barranco"
624                                data-location="Barranco"
625                                data-months="2026-10-05,2026-10-06,2026-10-07,2026-10-08,2026-10-09,2026-10-12,2026-10-13,2026-10-14,2026-10-15,2026-10-16,2026-10-19,2026-10-20,2026-10-21,2026-10-22,2026-10-23,2026-10-26,2026-10-27,2026-10-28,2026-10-29,2026-10-30,2026-11-02,2026-11-03,2026-11-04,2026-11-05,2026-11-06,2026-11-09,2026-11-10,2026-11-11,2026-11-12,2026-11-13,2026-11-16,2026-11-17,2026-11-18,2026-11-19,2026-11-20,2026-11-23,2026-11-24,2026-11-25,2026-11-26,2026-11-27"
626                                data-has-discount="0">
627                                    <div class="experience-info">
628                                        <div class="bg-image">
629                                                                                        <a class="btn-see-experience"
630                                            data-title="Mini degustación Criolla en Isolina Barranco"
631                                                                                        href="/experiencias/isolina/mini-degustacion-criolla-en-isolina-barranco-en-isolina-barranco-MLq8lKE5LbLzwJGgvPyb"
632                                                                                        >
633                                                <div class="main-image" data-src="background-image:url(https://cdn.mesa247.io/archivos/exp-mini-degustacion-criolla-en-isolina-barranco-1762469712493.jpg)" style="background-image:url(https://cdn.mesa247.io/archivos/exp-mini-degustacion-criolla-en-isolina-barranco-1762469712493.jpg)">
634                                                                                                        <img class="mx-auto logo" src="https://cdn.mesa247.io/archivos/restaurante/logo/2021/09/restaurante-isolina-3.png" style="display: none">
635                                                                                                    </div>
636                                            </a>
637                                        </div>
638                                        <div class="media">
639                                            <div class="media-body">
640                                                <span style="display:none" class="see-in-marketplace">1</span>
641                                                                                                <a href="/experiencias/isolina/" class="local-name-prefix">
642                                                    <span>Isolina - Barranco</span>
643                                                </a>
644                                                                                                <a class="btn-see-experience" data-title="Mini degustación Criolla en Isolina Barranco" href="/experiencias/isolina/mini-degustacion-criolla-en-isolina-barranco-en-isolina-barranco-MLq8lKE5LbLzwJGgvPyb">
645                                                    <h2 class="mt-0">Mini degustación Criolla en Isolina Barranco</h2>
646                                                </a>
647                                                <div class="local-location"><i class="icon-marker"></i> Barranco - 5 de Oct.</div>
648                                                
649                                                
650                                            </div>
651                                        </div>
652                                        
653
654                                        
655
656                                        <div class="checkout-wrapper">
657                                            <div class="checkout-content">
658                                                
659                                                                                                <div class="action-buttons ">
660                                                    
661                                                                                                            <div class="final-price">S/ 125</div>
662                                                                                                        
663                                                        <a href="/experiencias/isolina/mini-degustacion-criolla-en-isolina-barranco-en-isolina-barranco-MLq8lKE5LbLzwJGgvPyb" class="btn btn-green-main btn-action">Comprar ahora</a>
664                                                        
665                                                                                                    </div>
666                                                                                                <div class="result-errors text-danger small mt-2"></div>
667                                            </div>
668                                        </div>
669                                    </div>
670                                </div>
671                                                                                            <div class="experience-card"
672                                id="experienceCardVq26Rma5mk9zwyYWgXz9"
673                                data-title="Desayuno Criollo en Isolina Barranco"
674                                data-priority="20260725"
675                                data-category="obYPg8rnw36xak3AXqKz"
676                                data-price="120.00"
677                                data-local="XRvYa03n1Gdl5PNVe2jz"
678                                data-local-name="Isolina - Barranco"
679                                data-location="Barranco"
680                                data-months="2026-10-04,2026-10-10,2026-10-11,2026-10-17,2026-10-18,2026-10-24,2026-10-25,2026-10-31,2026-11-01,2026-11-07,2026-11-08,2026-11-14,2026-11-15,2026-11-21,2026-11-22,2026-11-28,2026-11-29"
681                                data-has-discount="0">
682                                    <div class="experience-info">
683                                        <div class="bg-image">
684                                                                                        <a class="btn-see-experience"
685                                            data-title="Desayuno Criollo en Isolina Barranco"
686                                                                                        href="/experiencias/isolina/desayuno-criollo-en-isolina-barranco-en-isolina-barranco-Vq26Rma5mk9zwyYWgXz9"
687                                                                                        >
688                                                <div class="main-image" data-src="background-image:url(https://cdn.mesa247.io/archivos/exp-desayuno-criollo-en-isolina-barranco-1761082621215.jpg)" style="background-image:url(https://cdn.mesa247.io/archivos/exp-desayuno-criollo-en-isolina-barranco-1761082621215.jpg)">
689                                                                                                        <img class="mx-auto logo" src="https://cdn.mesa247.io/archivos/restaurante/logo/2021/09/restaurante-isolina-3.png" style="display: none">
690                                                                                                    </div>
691                                            </a>
692                                        </div>
693                                        <div class="media">
694                                            <div class="media-body">
695                                                <span style="display:none" class="see-in-marketplace">1</span>
696                                                                                                <a href="/experiencias/isolina/" class="local-name-prefix">
697                                                    <span>Isolina - Barranco</span>
698                                                </a>
699                                                                                                <a class="btn-see-experience" data-title="Desayuno Criollo en Isolina Barranco" href="/experiencias/isolina/desayuno-criollo-en-isolina-barranco-en-isolina-barranco-Vq26Rma5mk9zwyYWgXz9">
700                                                    <h2 class="mt-0">Desayuno Criollo en Isolina Barranco</h2>
701                                                </a>
702                                                <div class="local-location"><i class="icon-marker"></i> Barranco - 4 de Oct.</div>
703                                                
704                                                
705                                            </div>
706                                        </div>
707                                        
708
709                                        
710
711                                        <div class="checkout-wrapper">
712                                            <div class="checkout-content">
713                                                
714                                                                                                <div class="action-buttons ">
715                                                    
716                                                                                                            <div class="final-price">S/ 120</div>
717                                                                                                        
718                                                        <a href="/experiencias/isolina/desayuno-criollo-en-isolina-barranco-en-isolina-barranco-Vq26Rma5mk9zwyYWgXz9" class="btn btn-green-main btn-action">Comprar ahora</a>
719                                                        
720                                                                                                    </div>
721                                                                                                <div class="result-errors text-danger small mt-2"></div>
722                                            </div>
723                                        </div>
724                                    </div>
725                                </div>
726                                                                                </div>
727                        <div class="search-no-results">
728                            No se encontraron experiencias que se ajusten a los filtros escogidos.
729                        </div>
730                    </div>
731                </div>
732            </div>
733        </div>
734        
735
736
737		</div>
738	</div>
739	</div>
740
741	
741<script type="text/javascript">
742   localStorage.setItem('expToken',"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImY5ZGY5MDdjNDEwMDlmY2JiOGYyOTAyNGNlYmYwMTQ4YTQ3OWFhYWMwMjViN2VjOTMyZDhiNjFjMGJmMDgyYzM2MWU5YjY2MTI4MWUxNjhjIn0.eyJhdWQiOiI3MDgiLCJqdGkiOiJmOWRmOTA3YzQxMDA5ZmNiYjhmMjkwMjRjZWJmMDE0OGE0NzlhYWFjMDI1YjdlYzkzMmQ4YjYxYzBiZjA4MmMzNjFlOWI2NjEyODFlMTY4YyIsImlhdCI6MTc5MDc0OTA3OCwibmJmIjoxNzkwNzQ5MDc4LCJleHAiOjE4MjIyODUwNzgsInN1YiI6IjQ4NDk2Iiwic2NvcGVzIjpbXX0.Box9FJP3xa8v2Iy7KuUJ6boOns6j7sc__jYyCwiU23iBKieVPQ-uJcWCxFCBITZzrHzErjU9bLIcXmB4_A2p80TE7t7mdsWthh6XsIrEQ70g2A5fYPA0m_GQ9ftSWtkbTmt2zrTSgI70RaPFKLFtzDDOXp-iMGUsntG89z6G8qiyz7EZ5Cs5PEIDmmEj53Jl7O9nwlFuibex-qQ-t1Bs1Xm9uqvEGN8z53PO55pWzv7dubGsGbw54xgzO8h90gRGhWN3LWkoBeINYE7BgjFMi58krmWiGt03tRPFAhmQnp5mdlPDE7CUq7c9_vMr7rgtMhWKVo1Ja3eBpKuwnMSN-HxInlyYXBLg3HsJUsIYG_ee8ktD6t7IveRreni68XIAhAXz7YX0OfNZWQfNh96Z4-sQq2JmwL0SCQFRjF3rYZPkLHooI-rQ1TFV32R0IJERR6KSCIHxchlKtHWT_4oi1OVNNiGtncv9mdhxcKHiX_olo_7-flwFRy8vu5v00H67wRswX3RmWCU3FUvtAtMjwLfQtQsi2ugVC0Pj8eGjFhI-gpBfi57UaMZNgVFK4mFLDBT3hDqkEbaGJoskNP9DgTLAzS_sonLhz92sg-2asHKIfXNJD8i29jMs2flSr6r-37qihhk3heJ1gCK0FqViyIwL1MdXRK8kauSP_bRb_gM");
743localStorage.setItem('local_image',"https://cdn.mesa247.io/archivos/w-agrupation-bg-isolina-1595007125.jpg");
744document.getElementById('bg-cover').style.backgroundImage = 'url(' + localStorage.getItem('local_image') + ')';
745document.getElementById('bg-cover').style.display = 'block';
746   localStorage.setItem('lang',"es");
747localStorage.removeItem('last_people_number');
748</script>
748
749	
749<script type="text/javascript" src="https://experiencias.mesa247.pe/experiencias/js/app.js?id=23f705f29d9bb1338e01"></script>
749
750    
750<script>
751        //Utils
752        function mainShuffle(array) {
753            let currentIndex = array.length;
754
755            // While there remain elements to shuffle...
756            while (currentIndex != 0) {
757
758                // Pick a remaining element...
759                let randomIndex = Math.floor(Math.random() * currentIndex);
760                currentIndex--;
761
762                // And swap it with the current element.
763                [array[currentIndex], array[randomIndex]] = [
764                array[randomIndex], array[currentIndex]];
765            }
766        }
767    </script>
767
768	
768<script src="https://experiencias.mesa247.pe/experiencias/js/datepicker.min.js"></script>
vendor: 1 bytes, line 768
768
769<script src="https://experiencias.mesa247.pe/experiencias/js/datepicker.es-ES.js"></script>
vendor: 1 bytes, line 769
769
770<script src="https://experiencias.mesa247.pe/experiencias/libs/splide/js/splide.min.js"></script>
vendor: 1 bytes, line 770
770
771<script type="text/javascript">
772$(document).ready(function(){
773    const $stickyApp = $('#app');
774    const $stickyNav = $stickyApp.children('nav').first();
775
776    if ($stickyNav.length) {
777        const stickyApp = $stickyApp[0];
778        const filtersEl = document.querySelector('.experiences-filters-sticky');
779        let navHeight = 0;
780        let condensed = false;
781        let io = null;
782        let sentinel = null;
783
784        function setCondensed(state) {
785            if (state === condensed) return;
786            condensed = state;
787            $stickyApp.toggleClass('is-condensed', condensed);
788            if (filtersEl) {
789                stickyApp.style.setProperty('--sticky-filters-h', filtersEl.offsetHeight + 'px');
790            }
791        }
792
793        function measureStickyOffsets() {
794            navHeight = $stickyNav.outerHeight() || 0;
795            stickyApp.style.setProperty('--sticky-nav-h', navHeight + 'px');
796            stickyApp.style.setProperty('--sticky-filters-h', (filtersEl ? filtersEl.offsetHeight : 0) + 'px');
797        }
798
799        function setupObserver() {
800            if (!filtersEl || !('IntersectionObserver' in window)) return;
801            if (io) io.disconnect();
802            if (!sentinel) {
803                sentinel = document.createElement('div');
804                sentinel.setAttribute('aria-hidden', 'true');
805                sentinel.style.cssText = 'display:block;height:0;margin:0;padding:0;border:0;';
806                filtersEl.parentNode.insertBefore(sentinel, filtersEl);
807            }
808            io = new IntersectionObserver(function(entries) {
809                setCondensed(!entries[0].isIntersecting);
810            }, { rootMargin: (-(navHeight + 1)) + 'px 0px 0px 0px', threshold: 0 });
811            io.observe(sentinel);
812        }
813
814        measureStickyOffsets();
815        $stickyApp.addClass('sticky-bars-on');
816        setupObserver();
817
818        let resizeTimer;
819        $(window).on('resize', function() {
820            clearTimeout(resizeTimer);
821            resizeTimer = setTimeout(function() {
822                measureStickyOffsets();
823                setupObserver();
824            }, 150);
825        });
826        window.addEventListener('load', function() {
827            measureStickyOffsets();
828            setupObserver();
829        });
830    }
831
832    let experiencesData = [];
833    let currentSorting = 'relevance';
834
835    $('.experience-card').each(function() {
836        const $card = $(this);
837        experiencesData.push({
838            dom: $card.detach(),
839            title: $card.data('title'),
840            price: parseFloat($card.data('price')),
841            category: $card.data('category'),
842            local: $card.data('local'),
843            location: $card.data('location'),
844            months: ($card.data('months') || '').split(','),
845            hasDiscount: $card.data('hasDiscount') == 1 || $card.data('has-discount') == 1
846        });
847    });
848
849    // Guardar una referencia del dataset original para asegurar que nunca se modifique
850    const originalExperiencesData = [...experiencesData];
851
852    function renderExperiences(list) {
853        const container = $('#mainExperiencesContainer');
854        container.empty();
855
856        if (list.length === 0) {
857            $('.search-no-results').addClass('show');
858        } else {
859            $('.search-no-results').removeClass('show');
860            list.forEach(item => container.append(item.dom));
861        }
862
863        // Actualizar contador si el popup está abierto
864        if ($('.filters-popup').hasClass('show')) {
865            updateFiltersCount(list.length);
866        }
867    }
868
869    // Inicializar renderizando directamente (sin filtros)
870    renderExperiences([...originalExperiencesData]);
871    updateActiveFilters();
872
873    // Función para actualizar el contador de experiencias
874    function updateFiltersCount(count) {
875        const finalCount = count !== undefined ? count : 0;
876        const singular = "experiencia";
877        const plural = "experiencias";
878        const text = finalCount === 1 ? '1 ' + singular : finalCount + ' ' + plural;
879        $('.filters-count-text').text(text);
880    }
881
882    const sortingLabels = {
883        'a-z': "Alfabéticamente",
884        'z-a': "Alfabéticamente",
885        'lowprice': "por Precio",
886        'highprice': "por Precio",
887        'discount': "por Descuento",
888        'relevance': "por Relevancia"
889    };
890
891    function applySorting(data, sortingOption) {
892        if (!data || !Array.isArray(data) || data.length === 0) {
893            return data;
894        }
895
896        let sortedData = [...data];
897
898        switch (sortingOption) {
899            case 'a-z':
900                sortedData.sort((a, b) => a.title.localeCompare(b.title));
901                break;
902            case 'z-a':
903                sortedData.sort((a, b) => b.title.localeCompare(a.title));
904                break;
905            case 'lowprice':
906                sortedData.sort((a, b) => a.price - b.price);
907                break;
908            case 'highprice':
909                sortedData.sort((a, b) => b.price - a.price);
910                break;
911            case 'discount':
912                sortedData.sort((a, b) => (b.hasDiscount ? 1 : 0) - (a.hasDiscount ? 1 : 0));
913                break;
914            case 'relevance':
915            default:
916                // No ordenar, mantener orden original
917                break;
918        }
919
920        return sortedData;
921    }
922
923    $('.sorting-input').on('change', function() {
924        const sortingOption = $(this).val();
925        currentSorting = sortingOption;
926
927        $('input[name=mobile-order-by]').prop('checked', false);
928        $('input[name=rb-order-by]').prop('checked', false);
929        $('input[value="' + sortingOption + '"]').prop('checked', true);
930
931        $('.sorting-selected').html(sortingLabels[sortingOption]);
932
933        // Aplicar filtros (que luego aplicará el ordenamiento)
934        applyFilters();
935    });
936
937    // Listener general para todos los filtros (excepto categorías que tienen su propio handler)
938    $('.filter-input:not(.by-category)').on('change', function() {
939        applyFilters();
940    });
941
942    function applyFilters(dataset) {
943        let baseDataset;
944        if (dataset && Array.isArray(dataset) && dataset.length > 0) {
945            baseDataset = [...dataset];
946        } else {
947            baseDataset = originalExperiencesData && originalExperiencesData.length > 0
948                ? [...originalExperiencesData]
949                : (experiencesData && experiencesData.length > 0 ? [...experiencesData] : []);
950        }
951
952        // Si no hay datos, no hacer nada
953        if (!baseDataset || baseDataset.length === 0) {
954            return;
955        }
956
957        // Normalizador para comparar sin acentos / mayúsculas / espacios
958        const norm = (s) =>
959            (s || '')
960                .toString()
961                .trim()
962                .toLowerCase()
963                .normalize('NFD')
964                .replace(/[\u0300-\u036f]/g, '');
965
966        // Siempre empezar con el dataset original completo (no filtrado)
967        let filteredData = [...baseDataset];
968
969        // Categoría (opción múltiple - si no hay ninguna seleccionad
969a, muestra todo)
970        const activeCategories = $('.by-category:checked');
971
972        if (activeCategories.length > 0) {
973            const selectedCategoryIds = [...activeCategories]
974                .map(el => $(el).val().toString())
975                .filter(id => id !== 'all'); // Excluir 'all' si existe
976
977            // Si después de filtrar 'all' no quedan categorías, mostrar todo
978            if (selectedCategoryIds.length > 0) {
979                filteredData = filteredData.filter(item => {
980                    // Convertir category a string para comparar correctamente
981                    const itemCategory = item.category ? item.category.toString() : '';
982                    return selectedCategoryIds.includes(itemCategory);
983                });
984            }
985        }
986        // Si activeCategories.length === 0 o solo quedaba 'all', no se filtra por categoría (muestra todo - comportamiento implícito de "Todas")
987
988        // Precio
989        const activePrices = $('.by-price:checked');
990        if (activePrices.length > 0) {
991            filteredData = filteredData.filter(item => {
992                return [...activePrices].some(el => {
993                    const $el = $(el);
994                    const min = parseFloat($el.data('min'));
995                    const max = parseFloat($el.data('max'));
996                    return item.price >= min && (!max || item.price <= max);
997                });
998            });
999        }
1000
1001        // Con descuento
1002        if ($('.by-discount:checked').length > 0) {
1003            filteredData = filteredData.filter(item => item.hasDiscount === true);
1004        }
1005
1006        // Fecha: opciones especiales (hoy, mañana, fin de semana, próx semana) y meses (YYYY-MM)
1007        const activeMonths = $('.by-month:checked');
1008        if (activeMonths.length > 0) {
1009            const specialValues = ['today', 'tomorrow', 'weekend', 'next_week'];
1010            const selectedValues = [...activeMonths].map(el => $(el).val());
1011            const specialSelected = selectedValues.filter(v => specialValues.indexOf(v) !== -1);
1012            const monthSelected = selectedValues.filter(v => specialValues.indexOf(v) === -1);
1013
1014            function toYMD(d) {
1015                const y = d.getFullYear();
1016                const m = String(d.getMonth() + 1).padStart(2, '0');
1017                const day = String(d.getDate()).padStart(2, '0');
1018                return y + '-' + m + '-' + day;
1019            }
1020
1021            function getSpecialDateRanges() {
1022                const today = new Date();
1023                const ranges = { today: [], tomorrow: [], weekend: [], next_week: [] };
1024                ranges.today.push(toYMD(today));
1025                const tomorrow = new Date(today);
1026                tomorrow.setDate(tomorrow.getDate() + 1);
1027                ranges.tomorrow.push(toYMD(tomorrow));
1028                const day = today.getDay();
1029                const sat = new Date(today);
1030                const daysToSat = (6 - day + 7) % 7;
1031                sat.setDate(sat.getDate() + (daysToSat === 0 && day !== 6 ? 7 : daysToSat));
1032                const sun = new Date(sat);
1033                sun.setDate(sun.getDate() + 1);
1034                ranges.weekend.push(toYMD(sat), toYMD(sun));
1035                const daysUntilNextMon = day === 1 ? 7 : (8 - day + 7) % 7;
1036                const nextMon = new Date(today);
1037                nextMon.setDate(nextMon.getDate() + daysUntilNextMon);
1038                for (let i = 0; i < 7; i++) {
1039                    const d = new Date(nextMon);
1040                    d.setDate(d.getDate() + i);
1041                    ranges.next_week.push(toYMD(d));
1042                }
1043                return ranges;
1044            }
1045
1046            const specialRanges = getSpecialDateRanges();
1047
1048            function itemMatchesSpecialDate(item, specialKind) {
1049                const dates = specialRanges[specialKind] || [];
1050                return (item.months || []).some(m => {
1051                    const s = (m || '').trim();
1052                    if (s.length >= 10) return dates.indexOf(s) !== -1;
1053                    if (s.length === 7) return dates.some(d => d.startsWith(s));
1054                    return false;
1055                });
1056            }
1057
1058            filteredData = filteredData.filter(item => {
1059                const matchSpecial = specialSelected.length > 0 && specialSelected.some(kind => itemMatchesSpecialDate(item, kind));
1060                const matchMonth = monthSelected.length > 0 && item.months.some(m => monthSelected.some(sel => (m || '').startsWith(sel)));
1061                return matchSpecial || matchMonth;
1062            });
1063        }
1064
1065        // Restaurante (Local)
1066        const activeLocals = $('.by-local:checked');
1067        if (activeLocals.length > 0) {
1068            filteredData = filteredData.filter(item => {
1069                return [...activeLocals].some(el => item.local == $(el).val());
1070            });
1071        }
1072
1073        // Distrito
1074        const activeDistricts = $('.by-district:checked');
1075        if (activeDistricts.length > 0) {
1076            const selectedDistricts = [...activeDistricts].map(el => norm($(el).val())); // p.ej. "miraflores"
1077            filteredData = filteredData.filter(item => selectedDistricts.includes(norm(item.location)));
1078        }
1079
1080        filteredData = applySorting(filteredData, currentSorting);
1081
1082        renderExperiences(filteredData);
1083        updateActiveFilters();
1084    }
1085
1086    function createActiveFilterTag(type, label, dataAttrs) {
1087        const attrs = Object.keys(dataAttrs).map(key => 'data-' + key + '="' + dataAttrs[key] + '"').join(' ');
1088        return $('<span class="active-filter-tag" data-type="' + type + '" ' + attrs + '">' +
1089            '<button type="button" class="active-filter-remove" data-type="' + type + '" ' + attrs + '">' +
1090            '<i class="icon-close"></i>' +
1091            '</button>' +
1092            '<span>' + label + '</span>' +
1093            '</span>');
1094    }
1095
1096    function processActiveFilters(selector, type, btnSelector, defaultLabel, getLabelFn) {
1097        const $activeContainer = $('.filters-popup-active');
1098        let hasActive = false;
1099
1100        $(selector + ':checked').each(function() {
1101            const $checkbox = $(this);
1102            const value = $checkbox.val();
1103
1104            if (type === 'category' && value === 'all') return;
1105
1106            hasActive = true;
1107            const inputId = $checkbox.attr('id');
1108            let label = defaultLabel;
1109            let dataAttrs = {};
1110
1111            if (type === 'category') {
1112                const $btn = $(btnSelector.replace('{value}', value));
1113                label = $btn.length ? $btn.text() : defaultLabel;
1114                dataAttrs = { value: value };
1115            } else {
1116                const $btn = $(btnSelector.replace('{inputId}', inputId));
1117                label = $btn.length ? $btn.text() : defaultLabel;
1118                dataAttrs = { 'input-id': inputId };
1119            }
1120
1121            if (getLabelFn) {
1122                label = getLabelFn($checkbox, label);
1123            }
1124
1125            const $tag = createActiveFilterTag(type, label, dataAttrs);
1126            $activeContainer.append($tag);
1127        });
1128
1129        return hasActive;
1130    }
1131
1132    function updateActiveFilters() {
1133        const $activeContainer = $('.filters-popup-active');
1134        $activeContainer.empty();
1135
1136        let hasActiveFilters = false;
1137
1138        hasActiveFilters = processActiveFilters('.by-category', 'category', '.by-category-btn[data-value="{value}"]', 'Categoría') || hasActiveFilters;
1139        hasActiveFilters = processActiveFilters('.by-price', 'price', '.by-price-btn[data-input-id="{inputId}"]', 'Precio') || hasActiveFilters;
1140        hasActiveFilters = processActiveFilters('.by-discount', 'discount', '.by-discount-btn[data-input-id="{inputId}"]', "Con descuento") || hasActiveFilters;
1141        hasActiveFilters = processActiveFilters('.by-month', 'month', '.by-month-btn[data-input-id="{inputId}"]', 'Mes') || hasActiveFilters;
1142        hasActiveFilters = processActiveFilters('.by-district', 'district', '.by-district-btn[data-input-id="{inputId}"]', 'Distrito') || hasActiveFilters;
1143        hasActiveFilters = processActiveFilters('.by-local', 'local', '.by-local-btn[data-input-id="{inputId}"]', 'Restaurante') || hasActiveFilters;
1144
1145        $activeContainer.toggle(hasActiveFilters);
1146    }
1147
1148    function deactivateFilter(type, value, inputId) {
1149        let $checkbox, $btnSelector, $carruselBtn;
1150
1151        if (type === 'category') {
1152            $checkbox = $('#ocasion' + value);
1153            $btnSelector = '.by-category-btn[data-value="' + value + '"]';
1154            $carruselBtn = $('#btnFilter' + value);
1155        } else {
1156            $checkbox = $('#' + inputId);
1157            const btnClassMap = {
1158                'price': '.by-price-btn',
1159                'discount': '.by-discount-btn',
1160                'month': '.by-month-btn',
1161                'district': '.by-district-btn',
1162                'local': '.by-local-btn'
1163            };
1164            $btnSelector = (btnClassMap[type] || '') + '[data-input-id="' + inputId + '"]';
1165        }
1166
1167        if ($checkbox.length) {
1168            $checkbox.prop('checked', false);
1169        }
1170
1171        if ($btnSelector) {
1172            $($btnSelector).removeClass('active');
1173        }
1174
1175        if ($carruselBtn && $carruselBtn.length) {
1176            $carruselBtn.removeClass('active');
1177        }
1178    }
1179
1180    $(document).on('click', '.active-filter-remove', function(e) {
1181        e.preventDefault();
1182        e.stopPropagation();
1183
1184        const $btn = $(this);
1185        const type = $btn.data('type');
1186        const value = $btn.data('value');
1187        const inputId = $btn.data('input-id');
1188
1189        deactivateFilter(type, value, inputId);
1190        applyFilters();
1191    });
1192
1193    function openFiltersPopup() {
1194        const $popup = $('.filters-popup');
1195        if (!$popup.length) return;
1196
1197        $popup.addClass('show');
1198        $('.main-bg-overlay').addClass('show');
1199        $('body').addClass('popup-mode');
1200        const currentCount = $('#mainExperiencesContainer .experience-card').length;
1201        updateFiltersCount(currentCount);
1202
1203        const $filterWrapper = $('.filter-buttons-wrapper');
1204        if ($filterWrapper.length) {
1205            $filterWrapper[0].scrollIntoView({
1206                behavior: 'smooth',
1207                block: 'start'
1208            });
1209        }
1210    }
1211
1212    function closeFiltersPopup() {
1213        const $popup = $('.filters-popup');
1214        if (!$popup.length) return;
1215
1216        $popup.removeClass('show');
1217        $('.main-bg-overlay').removeClass('show');
1218        $('body').removeClass('popup-mode');
1219    }
1220
1221    if ($('#btnToggleFilter').length) {
1222        $('#btnToggleFilter').on('click', function(e) {
1223            e.preventDefault();
1224            const isShowing = $('.filters-popup').hasClass('show');
1225
1226            if (!isShowing) {
1227                openFiltersPopup();
1228            } else {
1229                closeFiltersPopup();
1230            }
1231        });
1232    }
1233
1234    if ($('#btnControlFilter').length) {
1235        $('#btnControlFilter').on('click', function(e) {
1236            e.preventDefault();
1237            e.stopPropagation();
1238            openFiltersPopup();
1239        });
1240    }
1241
1242    $('.main-bg-overlay').on('click', function(e) {
1243        if ($('.filters-popup').hasClass('show')) {
1244            closeFiltersPopup();
1245        }
1246    });
1247
1248    $(document).on('click', '.btn-filter-close-popup', function(e) {
1249        e.preventDefault();
1250        e.stopPropagation();
1251        closeFiltersPopup();
1252    });
1253
1254    //FIX the fail click around on the radio input
1255    $('body').on('click', '.dropdown-item', function(e){
1256        const sortingOption = $(this).find('.sorting-input').get(0);
1257        if (sortingOption) {
1258            sortingOption.click();
1259        }
1260    });
1261
1262    $('.toggle-options').on('click', function() {
1263        const $toggleBtn = $(this);
1264        const $box = $toggleBtn.closest('.box');
1265
1266        const isExpanded = $box.hasClass('expanded');
1267        $box.toggleClass('expanded', !isExpanded);
1268        $toggleBtn.html(isExpanded ? 'Ver más <i class="icon-arrow-down"></i>' : 'Ver menos <i class="icon-arrow-up-gross"></i>');
1269    });
1270
1271    $('.btn-filter').on('click', function(e) {
1272        const btnSelected = $(this);
1273        const categoryId = btnSelected.data('value');
1274
1275        if (!categoryId) {
1276            return;
1277        }
1278
1279        e.preventDefault();
1280        e.stopPropagation();
1281
1282        const $checkbox = $('#ocasion' + categoryId);
1283        const isChecked = $checkbox.is(':checked');
1284
1285        $('.by-category').prop('checked', false);
1286        $('.by-category-btn').removeClass('active');
1287        $('.btn-filter').removeClass('active');
1288
1289        if (!isChecked) {
1290            $checkbox.prop('checked', true);
1291            btnSelected.addClass('active');
1292            $('.by-category-btn[data-value="' + categoryId + '"]').addClass('active');
1293        }
1294
1295        applyFilters();
1296    });
1297
1298    $('input.by-category').on('change', function() {
1299        const $checkbox = $(this);
1300        const categoryId = $checkbox.val();
1301        const isChecked = $checkbox.is(':checked');
1302
1303        // Sincronizar botones del nuevo popup
1304        const $popupBtn = $('.by-category-btn[data-value="' + categoryId + '"]');
1305        $popupBtn.toggleClass('active', isChecked);
1306
1307        // Sincronizar botones del carrusel de arriba
1308        const $carruselBtn = $('#btnFilter' + categoryId);
1309        $carruselBtn.toggleClass('active', isChecked);
1310
1311        // Aplicar filtros
1312        applyFilters();
1313    });
1314
1315    // Funcionalidad del accordion en el nuevo popup
1316    $('.filter-section-header').on('click', function() {
1317        const $section = $(this).closest('.filter-section');
1318        const $content = $section.find('.filter-section-content');
1319        const isExpanded = $section.hasClass('expanded');
1320
1321        $section.toggleClass('expanded', !isExpanded);
1322        $content.toggleClass('show', !isExpanded);
1323    });
1324
1325    // Funcionalidad de los botones de filtro en el nuevo popup (Categoría - opción múltiple)
1326    $('.by-category-btn').on('click', function(e) {
1327        e.preventDefault();
1328        e.stopPropagation();
1329        const $btn = $(this);
1330        const inputId = $btn.data('input-id');
1331        const $checkbox = $('#' + inputId);
1332        const isChecked = $checkbox.is(':checked');
1333        const categoryId = $checkbox.val();
1334
1335        // Toggle del checkbox sin trigger para evitar doble ejecución
1336        $checkbox.prop('checked', !isChecked);
1337
1338        // Actualizar estado visual del botón
1339        $btn.toggleClass('active', !isChecked);
1340
1341        // Sincronizar botones del carrusel de arriba
1342        const $carruselBtn = $('#btnFilter' + categoryId);
1343        $carruselBtn.toggleClass('active', !isChecked);
1344
1345        // Aplicar filtros manualmente
1346        applyFilters();
1347    });
1348
1349    // Funcionalidad de los botones de filtro de precio (opción múltiple)
1350    $('.by-price-btn').on('click', function() {
1351        const $btn = $(this);
1352        const inputId = $btn.data('input-id');
1353        const $checkbox = $('#' + inputId);
1354        const isChecked = $checkbox.is(':checked');
1355
1356        // Toggle del checkbox
1357        $checkbox.prop('checked', !isChecked).trigger('change');
1358
1359        // Actualizar estado visual del botón
1360        $btn.toggleClass('active', !isChecked);
1361    });
1362
1363    $('.by-discount-btn').on('click', function() {
1364        const $btn = $(this);
1365        const inputId = $btn.data('input-id');
1366        const $checkbox = $('#' + inputId);
1367        const isChecked = $checkbox.is(':checked');
1368
1369        $checkbox.prop('checked', !isChecked).trigger('change');
1370        $btn.toggleClass('active', !isChecked);
1371    });
1372
1373    // Funcionalidad de los botones de filtro de mes (opción múltiple)
1374    $('.by-month-btn').on('click', function() {
1375        const $btn = $(this);
1376        const inputId = $btn.data('input-id');
1377        const $checkbox = $('#' + inputId);
1378        const isChecked = $checkbox.is(':checked');
1379
1380        $checkbox.prop('checked', !isChecked).trigger('change');
1381        $btn.toggleClass('active', !isChecked);
1382    });
1383
1384    // Funcionalidad de los botones de filtro de distrito (opción múltiple)
1385    $('.by-district-btn').on('click', function() {
1386        const $btn = $(this);
1387        const inputId = $btn.data('input-id');
1388        const $checkbox = $('#' + inputId);
1389        const isChecked = $checkbox.is(':checked');
1390
1391        $checkbox.prop('checked', !isChecked).trigger('change');
1392        $btn.toggleClass('active', !isChecked);
1393    });
1394
1395    // Funcionalidad de los botones de filtro de restaurante (opción múltiple)
1396    $('.by-local-btn').on('click', function() {
1397        const $btn = $(this);
1398        const inputId = $btn.data('input-id');
1399        const $checkbox = $('#' + inputId);
1400        const isChecked = $checkbox.is(':checked');
1401
1402        $checkbox.prop('checked', !isChecked).trigger('change');
1403        $btn.toggleClass('active', !isChecked);
1404    });
1405
1406    // Sincronizar botones cuando cambian los checkboxes
1407    $('.by-price, .by-discount, .by-month, .by-district, .by-local').on('change', function() {
1408        const $checkbox = $(this);
1409        const inputId = $checkbox.attr('id');
1410        const $btn = $('.by-price-btn[data-input-id="' + inputId + '"], .by-discount-btn[data-input-id="' + inputId + '"], .by-month-btn[data-input-id="' + inputId + '"], .by-district-btn[data-input-id="' + inputId + '"], .by-local-btn[data-input-id="' + inputId + '"]');
1411        $btn.toggleClass('active', $checkbox.is(':checked'));
1412    });
1413
1414    // Inicializar estado de los botones al cargar
1415    $('.by-category-btn').each(function() {
1416        const $btn = $(this);
1417        const inputId = $btn.data('input-id');
1418        if ($('#' + inputId).is(':checked')) {
1419            $btn.addClass('active');
1420        }
1421    });
1422
1423    // Inicializar estado de los botones de precio al cargar
1424    $('.by-price-btn').each(function() {
1425        const $btn = $(this);
1426        const inputId = $btn.data('input-id');
1427        if ($('#' + inputId).is(':checked')) {
1428            $btn.addClass('active');
1429        }
1430    });
1431
1432    $('.by-discount-btn').each(function() {
1433        const $btn = $(this);
1434        const inputId = $btn.data('input-id');
1435        if ($('#' + inputId).is(':checked')) {
1436            $btn.addClass('active');
1437        }
1438    });
1439
1440    // Inicializar estado de los botones de mes al cargar
1441    $('.by-month-btn').each(function() {
1442        const $btn = $(this);
1443        const inputId = $btn.data('input-id');
1444        if ($('#' + inputId).is(':checked')) {
1445            $btn.addClass('active');
1446        }
1447    });
1448
1449    // Inicializar estado de los botones de distrito al cargar
1450    $('.by-district-btn').each(function() {
1451        const $btn = $(this);
1452        const inputId = $btn.data('input-id');
1453        if ($('#' + inputId).is(':checked')) {
1454            $btn.addClass('active');
1455        }
1456    });
1457
1458    // Inicializar estado de los botones de restaurante al cargar
1459    $('.by-local-btn').each(function() {
1460        const $btn = $(this);
1461        const inputId = $btn.data('input-id');
1462        if ($('#' + inputId).is(':checked')) {
1463            $btn.addClass('active');
1464        }
1465    });
1466
1467    // Función para limpiar todos los filtros (estado original)
1468    function clearAllFilters() {
1469        // Limpiar categorías
1470        $('.by-category').prop('checked', false);
1471        $('.by-category-btn').removeClass('active');
1472        $('.btn-filter').removeClass('active');
1473
1474        // Limpiar precio
1475        $('.by-price').prop('checked', false);
1476        $('.by-price-btn').removeClass('active');
1477
1478        $('.by-discount').prop('checked', false);
1479        $('.by-discount-btn').removeClass('active');
1480
1481        // Limpiar mes
1482        $('.by-month').prop('checked', false);
1483        $('.by-month-btn').removeClass('active');
1484
1485        // Limpiar distrito
1486        $('.by-district').prop('checked', false);
1487        $('.by-district-btn').removeClass('active');
1488
1489        // Limpiar restaurante
1490        $('.by-local').prop('checked', false);
1491        $('.by-local-btn').removeClass('active');
1492
1493        // Aplicar filtros (mostrar todo)
1494        applyFilters();
1495    }
1496
1497    // Botón limpiar filtros
1498    $('.btn-clear-filters').on('click', function(e) {
1499        e.preventDefault();
1500        clearAllFilters();
1501    });
1502
1503	$('#experience-date').datepicker({
1504		format:'dd/mm/yyyy',
1505		autoHide: true,
1506		language: 'es-ES'
1507	}).on('change', function(e){
1508	   // app.refreshValue($(this).val());
1509	});
1510
1511	$('#categoryExperiences').on('change', function () {
1512        $('#categoryForm').submit();
1513    });
1514
1515    $(document).on('click', '.btn-confirm-experience', function() {
1516		$('.result-errors').html(
1516'');
1517        let element = $(this);
1518        const expDate = element.data('expdate');
1519        const localSlug = element.data('explocal');
1520        const expId = element.data('expid');
1521
1522		let boxResultserror = element.parent().find('.result-errors');
1523        element.addClass('readonly');
1524        element.addClass('loading-dots');
1525
1526        window.axios.defaults.baseURL = 'https://mesa-backend-prod-370098395535.us-east4.run.app/v1/';
1527        window.axios.defaults.params['language'] = localStorage.getItem('lang')!=null ? localStorage.getItem('lang') : 'es';
1528        window.axios.defaults.headers.common = {'Authorization': "Bearer " + localStorage.getItem('expToken')};
1529        window.axios.defaults.headers.common['Content-Type'] = 'application/json';
1530        window.axios.defaults.headers.common['Accept'] = 'application/json';
1531
1532        axios.post('ecommerce/experiencies/' + expId + '/date',
1533        {"schedule":{"_id":expDate},"clean":1,"origin": 'isolina.pe'}
1534        ).then(function (response) {
1535            element.removeClass('readonly');
1536            element.removeClass('loading-dots');
1537            if (response) {
1538                location.href = `/experiencias/${localSlug}/${expId}/asistentes`;
1539            }
1540        }).catch(error => {
1541			if (error.response && error.response.data) {
1542				boxResultserror.html(error.response.data.message);
1543			} else {
1544				console.log('Error', error.message);
1545				boxResultserror.html('Ocurrió un error: ' + error.message);
1546			}
1547
1548            element.removeClass('readonly');
1549            element.removeClass('loading-dots');
1550        });
1551    });
1552
1553    
1554    function smoothScroll(element, target, duration) {
1555        const start = element.scrollLeft();
1556        const change = target - start;
1557        const startTime = performance.now();
1558
1559        function easeInOutQuad(t) {
1560            return t < 0.5
1561                ? 2 * t * t
1562                : -1 + (4 - 2 * t) * t;
1563        }
1564
1565        function animateScroll(currentTime) {
1566            const elapsed = (currentTime - startTime) / duration;
1567            const progress = Math.min(elapsed, 1);
1568            const easedProgress = easeInOutQuad(progress);
1569            element.scrollLeft(start + change * easedProgress);
1570
1571            if (progress < 1) {
1572                requestAnimationFrame(animateScroll);
1573            } else {
1574                toggleScrollCategories();
1575            }
1576        }
1577
1578        requestAnimationFrame(animateScroll);
1579    }
1580
1581    
1582});
1583</script>
1583
1584
1585	
1585<script type="text/javascript">
1586$(document).ready(function(){
1587    function trackPush(payload) {
1588        window.dataLayer = window.dataLayer || [];
1589        window.dataLayer.push(payload);
1590    }
1591
1592    function trackActiveFilters() {
1593        return $('.filters-popup-active .active-filter-tag').map(function() {
1594            return $(this).data('type') + ':' + $(this).text().trim();
1595        }).get().join(' | ');
1596    }
1597
1598    function trackDevice() {
1599        return $('#btnControlFilter').is(':visible') ? 'mobile' : 'desktop';
1600    }
1601
1602    function trackFilterPush(params) {
1603        trackPush($.extend({ event: 'experience_filter_click' }, params, {
1604            device: trackDevice(),
1605            active_filters: trackActiveFilters()
1606        }));
1607    }
1608
1609    $(document).on('click', '.experience-card a:not(.local-name-prefix)', function() {
1610        const $card = $(this).closest('.experience-card');
1611        const $collection = $card.closest('.ec-collection');
1612        const inCollection = $collection.length > 0;
1613        let position;
1614
1615        if (inCollection) {
1616            const $slide = $card.closest('.splide__slide');
1617            position = $slide.closest('.splide__list').children('.splide__slide').not('.splide__slide--clone').index($slide) + 1;
1618        } else {
1619            position = $('#mainExperiencesContainer').children('.experience-card').index($card) + 1;
1620        }
1621
1622        window.dataLayer = window.dataLayer || [];
1623        window.dataLayer.push({
1624            event: "experience_click",
1625            experience_name: $card.data('title'),
1626            restaurant_name: $card.data('local-name'),
1627            collection_name: inCollection ? $collection.data('collection-name') : 'Todas las experiencias',
1628            collection_type: inCollection ? $collection.data('collection-type') : 'listado',
1629            position: position
1630        });
1631    });
1632
1633    $('.btn-filter').on('click', function() {
1634        const $btn = $(this);
1635
1636        if (!$btn.data('value')) {
1637            return;
1638        }
1639
1640        trackFilterPush({
1641            filter_source: 'carrusel',
1642            filter_type: 'category',
1643            filter_name: $btn.text().trim(),
1644            action: $btn.hasClass('active') ? 'select' : 'deselect'
1645        });
1646    });
1647
1648    [
1649        { selector: '.by-category-btn', type: 'category' },
1650        { selector: '.by-price-btn', type: 'price' },
1651        { selector: '.by-discount-btn', type: 'discount' },
1652        { selector: '.by-month-btn', type: 'month' },
1653        { selector: '.by-district-btn', type: 'district' },
1654        { selector: '.by-local-btn', type: 'local' }
1655    ].forEach(function(filter) {
1656        $(filter.selector).on('click', function() {
1657            const $btn = $(this);
1658            trackFilterPush({
1659                filter_source: 'popup',
1660                filter_type: filter.type,
1661                filter_name: $btn.text().trim(),
1662                action: $btn.hasClass('active') ? 'select' : 'deselect'
1663            });
1664        });
1665    });
1666
1667    $(document).on('click', '.active-filter-remove', function() {
1668        const $btn = $(this);
1669        trackFilterPush({
1670            filter_source: 'quitar_filtro',
1671            filter_type: $btn.data('type'),
1672            filter_name: $btn.closest('.active-filter-tag').text().trim(),
1673            action: 'remove'
1674        });
1675    });
1676
1677    $('#btnFilterAll').on('click', function() {
1678        trackFilterPush({
1679            filter_source: 'limpiar_filtros',
1680            filter_type: 'category',
1681            filter_name: $(this).text().trim(),
1682            action: 'clear'
1683        });
1684    });
1685
1686    $('.btn-clear-filters').on('click', function() {
1687        trackFilterPush({
1688            filter_source: 'limpiar_filtros',
1689            filter_name: $(this).text().trim(),
1690            action: 'clear'
1691        });
1692    });
1693
1694    $('#btnToggleFilter, #btnControlFilter').on('click', function() {
1695        trackFilterPush({
1696            filter_source: 'boton_filtros',
1697            filter_name: $(this).text().trim(),
1698            action: $('.filters-popup').hasClass('show') ? 'open' : 'close'
1699        });
1700    });
1701
1702    $(document).on('click', '.btn-filter-close-popup', function() {
1703        trackFilterPush({ filter_source: 'cerrar_popup', filter_name: 'Cerrar', action: 'close' });
1704    });
1705
1706    document.addEventListener('click', function(e) {
1707        if (e.target.classList.contains('main-bg-overlay') && $('.filters-popup').hasClass('show')) {
1708            trackFilterPush({ filter_source: 'cerrar_popup', filter_name: 'Overlay', action: 'close' });
1709        }
1710    }, true);
1711
1712    $(document).on('shown.bs.dropdown', function(e) {
1713        const toggleId = $(e.target).find('[data-toggle="dropdown"]').first().attr('id');
1714
1715        if (toggleId === 'dd-orderby' || toggleId === 'dd-orderbyMobile') {
1716            trackFilterPush({
1717                filter_source: 'boton_ordenar',
1718                filter_name: $('#' + toggleId).text().trim(),
1719                action: 'open'
1720            });
1721        }
1722    });
1723
1724    $('.sorting-input').on('change', function() {
1725        trackFilterPush({
1726            filter_source: 'opcion_orden',
1727            filter_type: 'sort',
1728            filter_name: $('label[for="' + this.id + '"]').text().trim(),
1729            sort_value: $(this).val(),
1730            action: 'select'
1731        });
1732    });
1733
1734    $('.btn-control-left, .btn-control-right').on('click', function() {
1735        trackFilterPush({
1736            filter_source: 'flecha_carrusel',
1737            action: $(this).hasClass('btn-control-left') ? 'left' : 'right'
1738        });
1739    });
1740});
1741</script>
1741
1742
1743                        <!-- START Webpages Footer Scripts -->
1744            
1745            <!-- END Webpages Footer Scripts -->
1746            	</body>
1747</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.