{"id":425,"date":"2026-08-18T17:08:25","date_gmt":"2026-08-18T17:08:25","guid":{"rendered":"https:\/\/frenchriviera-lounge.com\/?page_id=425"},"modified":"2026-08-18T19:16:23","modified_gmt":"2026-08-18T19:16:23","slug":"blog-2","status":"publish","type":"page","link":"https:\/\/frenchriviera-lounge.com\/en\/blog-2\/","title":{"rendered":"Blog"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"425\" class=\"elementor elementor-425\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-24668a8 e-flex e-con-boxed e-con e-parent\" data-id=\"24668a8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56471d9 elementor-widget elementor-widget-html\" data-id=\"56471d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\r\n     LA FRENCH RIVIERA \u2014 BLOG\r\n     Elementor HTML Widget\r\n     HTML + CSS + JavaScript\r\n========================================================= -->\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   VARIABLES\r\n========================================================= *\/\r\n\r\n#lfr-blog-app{\r\n    \/* FULL BLEED: saca el blog del ancho limitado del contenedor de Elementor *\/\r\n    position:relative;\r\n    left:50%;\r\n    width:100vw;\r\n    max-width:100vw;\r\n    margin-left:-50vw;\r\n    margin-right:-50vw;\r\n    overflow-x:clip;\r\n\r\n    --navy:#1D3A4C;\r\n    --navy-dark:#082A41;\r\n    --navy-deep:#041D30;\r\n    --gold:#C1A36D;\r\n    --cream:#FFFAF3;\r\n    --cream-2:#F8F2EA;\r\n    --text:#314B5B;\r\n    --line:rgba(193,163,109,.28);\r\n\r\n    \/*\r\n    CAMBIA ESTA URL POR:\r\n    BANNER LA FRENCH PARA WEB-7.jpg\r\n    *\/\r\n    --hero-image:url(\"\/wp-content\/uploads\/2026\/08\/Imagen-7.webp\");\r\n\r\n    overflow:hidden;\r\n    background:var(--cream);\r\n    color:var(--navy);\r\n}\r\n\r\n#lfr-blog-app,\r\n#lfr-blog-app *{\r\n    box-sizing:border-box;\r\n}\r\n\r\n#lfr-blog-app a{\r\n    text-decoration:none;\r\n}\r\n\r\n#lfr-blog-app img{\r\n    max-width:100%;\r\n}\r\n\r\n\/* El contenido interno mantiene una lectura c\u00f3moda,\r\n   pero los fondos\/hero\/barra llegan de borde a borde. *\/\r\n#lfr-blog-app section{\r\n    width:100%;\r\n    max-width:none;\r\n}\r\n\r\n\/* En pantallas peque\u00f1as evitamos cualquier desbordamiento lateral. *\/\r\nhtml,\r\nbody{\r\n    max-width:100%;\r\n    overflow-x:hidden;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   HERO\r\n========================================================= *\/\r\n\r\n.lfr-blog-hero{\r\n    position:relative;\r\n\r\n    min-height:510px;\r\n\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    padding:90px 30px;\r\n\r\n    background-image:\r\n        linear-gradient(\r\n            rgba(4,29,48,.70),\r\n            rgba(4,29,48,.78)\r\n        ),\r\n        var(--hero-image);\r\n\r\n    background-size:cover;\r\n    background-position:center;\r\n    background-repeat:no-repeat;\r\n}\r\n\r\n.lfr-blog-hero::after{\r\n    content:\"\";\r\n\r\n    position:absolute;\r\n    inset:0;\r\n\r\n    background:\r\n        radial-gradient(\r\n            circle at center,\r\n            transparent 0%,\r\n            rgba(4,29,48,.25) 100%\r\n        );\r\n}\r\n\r\n.lfr-blog-hero__content{\r\n    position:relative;\r\n    z-index:2;\r\n\r\n    width:100%;\r\n    max-width:900px;\r\n\r\n    text-align:center;\r\n}\r\n\r\n.lfr-blog-hero__eyebrow{\r\n    margin-bottom:18px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:12px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.28em;\r\n    text-transform:uppercase;\r\n\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-blog-hero__ornament{\r\n    width:220px;\r\n\r\n    display:flex;\r\n    align-items:center;\r\n\r\n    gap:12px;\r\n\r\n    margin:0 auto 22px;\r\n\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-blog-hero__ornament::before,\r\n.lfr-blog-hero__ornament::after{\r\n    content:\"\";\r\n\r\n    height:1px;\r\n    flex:1;\r\n\r\n    background:var(--gold);\r\n}\r\n\r\n.lfr-blog-hero h1{\r\n    margin:0;\r\n\r\n    font-family:\"Cormorant Garamond\",serif;\r\n    font-size:clamp(65px,7vw,105px);\r\n    font-weight:500;\r\n\r\n    line-height:.92;\r\n\r\n    letter-spacing:-.025em;\r\n\r\n    color:var(--cream);\r\n}\r\n\r\n.lfr-blog-hero__text{\r\n    max-width:650px;\r\n\r\n    margin:28px auto 0;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:16px;\r\n    line-height:1.7;\r\n\r\n    color:rgba(255,250,243,.92);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   GENERALES\r\n========================================================= *\/\r\n\r\n.lfr-blog-shell{\r\n    width:100%;\r\n    max-width:1320px;\r\n\r\n    margin:0 auto;\r\n}\r\n\r\n.lfr-blog-section-eyebrow{\r\n    margin-bottom:10px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:11px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.2em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-blog-section-title{\r\n    margin:0;\r\n\r\n    font-family:\"Cormorant Garamond\",serif;\r\n    font-size:clamp(44px,4vw,62px);\r\n    font-weight:500;\r\n\r\n    line-height:1;\r\n\r\n    color:var(--navy);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   DESTACADO\r\n========================================================= *\/\r\n\r\n.lfr-blog-featured{\r\n    padding:90px 30px 80px;\r\n\r\n    background:var(--cream);\r\n}\r\n\r\n.lfr-blog-featured__heading{\r\n    margin-bottom:38px;\r\n}\r\n\r\n.lfr-featured-card{\r\n    display:grid;\r\n\r\n    grid-template-columns:\r\n        minmax(0,1.08fr)\r\n        minmax(0,.92fr);\r\n\r\n    align-items:center;\r\n\r\n    gap:58px;\r\n}\r\n\r\n.lfr-featured-card__media{\r\n    position:relative;\r\n\r\n    min-height:430px;\r\n\r\n    overflow:hidden;\r\n\r\n    border-radius:22px 5px 22px 5px;\r\n\r\n    background:var(--cream-2);\r\n}\r\n\r\n.lfr-featured-card__media a{\r\n    position:absolute;\r\n    inset:0;\r\n\r\n    display:block;\r\n}\r\n\r\n.lfr-featured-card__media img{\r\n    width:100%;\r\n    height:100%;\r\n\r\n    position:absolute;\r\n    inset:0;\r\n\r\n    object-fit:cover;\r\n\r\n    transition:\r\n        transform .6s ease;\r\n}\r\n\r\n.lfr-featured-card:hover\r\n.lfr-featured-card__media img{\r\n    transform:scale(1.035);\r\n}\r\n\r\n.lfr-featured-card__category{\r\n    margin-bottom:16px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:11px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.16em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-featured-card__title{\r\n    margin:0 0 22px;\r\n\r\n    font-family:\"Cormorant Garamond\",serif;\r\n    font-size:clamp(45px,4vw,64px);\r\n    font-weight:500;\r\n\r\n    line-height:.98;\r\n\r\n    color:var(--navy);\r\n}\r\n\r\n.lfr-featured-card__title a{\r\n    color:inherit;\r\n}\r\n\r\n.lfr-featured-card__excerpt{\r\n    max-width:560px;\r\n\r\n    margin-bottom:25px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:15px;\r\n\r\n    line-height:1.75;\r\n\r\n    color:var(--text);\r\n}\r\n\r\n.lfr-blog-readmore{\r\n    display:inline-flex;\r\n    align-items:center;\r\n\r\n    gap:12px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n\r\n    font-size:11px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.12em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--gold) !important;\r\n}\r\n\r\n.lfr-blog-readmore span{\r\n    transition:transform .25s ease;\r\n}\r\n\r\n.lfr-blog-readmore:hover span{\r\n    transform:translateX(5px);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TODOS LOS ART\u00cdCULOS\r\n========================================================= *\/\r\n\r\n.lfr-blog-posts{\r\n    padding:\r\n        62px 30px\r\n        95px;\r\n\r\n    background:var(--cream-2);\r\n}\r\n\r\n.lfr-blog-posts__heading{\r\n    display:flex;\r\n\r\n    justify-content:space-between;\r\n    align-items:flex-end;\r\n\r\n    gap:30px;\r\n\r\n    margin-bottom:35px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BARRA SUPERIOR: CATEGOR\u00cdAS + BUSCADOR\r\n========================================================= *\/\r\n\r\n.lfr-blog-topbar{\r\n    padding:30px 30px 0;\r\n    background:var(--cream);\r\n}\r\n\r\n.lfr-blog-toolbar{\r\n    margin:0;\r\n}\r\n\r\n.lfr-blog-filters-wrap{\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    gap:20px;\r\n    padding:0 0 22px;\r\n    border-bottom:1px solid var(--line);\r\n    position:relative;\r\n}\r\n\r\n.lfr-blog-filters-wrap::after{\r\n    content:\"\u2726\";\r\n    position:absolute;\r\n    left:50%;\r\n    bottom:-10px;\r\n    transform:translateX(-50%);\r\n    padding:0 10px;\r\n    background:var(--cream);\r\n    color:var(--gold);\r\n    font-size:13px;\r\n    line-height:1;\r\n}\r\n\r\n.lfr-blog-filters{\r\n    min-width:0;\r\n    display:flex;\r\n    align-items:center;\r\n    gap:10px;\r\n    flex:1 1 auto;\r\n    overflow-x:auto;\r\n    scrollbar-width:none;\r\n    padding:2px 0;\r\n}\r\n\r\n.lfr-blog-filters::-webkit-scrollbar{\r\n    display:none;\r\n}\r\n\r\n.lfr-blog-filter{\r\n    flex:0 0 auto;\r\n    min-height:48px;\r\n    padding:0 18px;\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    border:1px solid rgba(193,163,109,.34);\r\n    border-radius:8px;\r\n    background:transparent;\r\n    cursor:pointer;\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:11px;\r\n    font-weight:600;\r\n    letter-spacing:.04em;\r\n    text-transform:none;\r\n    color:var(--navy);\r\n    white-space:nowrap;\r\n    transition:background .25s ease,color .25s ease,border-color .25s ease,transform .25s ease;\r\n}\r\n\r\n.lfr-blog-filter:hover{\r\n    transform:translateY(-1px);\r\n    border-color:var(--gold);\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-blog-filter.is-active{\r\n    background:var(--navy);\r\n    border-color:var(--navy);\r\n    color:#fff;\r\n}\r\n\r\n#lfr-blog-app .lfr-blog-filter,\r\n#lfr-blog-app .lfr-blog-filter:hover,\r\n#lfr-blog-app .lfr-blog-filter:focus,\r\n#lfr-blog-app .lfr-blog-filter:focus-visible,\r\n#lfr-blog-app .lfr-blog-filter:active,\r\n#lfr-blog-app .lfr-blog-filter.is-active{\r\n    appearance:none !important;\r\n    -webkit-appearance:none !important;\r\n    box-shadow:none !important;\r\n    outline:none !important;\r\n}\r\n\r\n#lfr-blog-app .lfr-blog-filter{\r\n    background:transparent !important;\r\n    border:1px solid rgba(193,163,109,.34) !important;\r\n    color:var(--navy) !important;\r\n}\r\n\r\n#lfr-blog-app .lfr-blog-filter:hover{\r\n    background:transparent !important;\r\n    border-color:var(--gold) !important;\r\n    color:var(--gold) !important;\r\n}\r\n\r\n#lfr-blog-app .lfr-blog-filter.is-active,\r\n#lfr-blog-app .lfr-blog-filter.is-active:hover,\r\n#lfr-blog-app .lfr-blog-filter.is-active:focus{\r\n    background:var(--navy) !important;\r\n    border-color:var(--navy) !important;\r\n    color:#fff !important;\r\n}\r\n\r\n.lfr-blog-search{\r\n    width:300px;\r\n    flex:0 0 300px;\r\n    margin:0;\r\n}\r\n\r\n.lfr-blog-search__field{\r\n    position:relative;\r\n    min-height:48px;\r\n    display:flex;\r\n    align-items:center;\r\n    padding:0 13px 0 17px;\r\n    border:1px solid rgba(193,163,109,.34);\r\n    border-radius:8px;\r\n    background:transparent;\r\n}\r\n\r\n.lfr-blog-search__icon{\r\n    order:3;\r\n    flex:0 0 auto;\r\n    margin-left:10px;\r\n    color:var(--gold);\r\n    font-size:20px;\r\n    line-height:1;\r\n    pointer-events:none;\r\n}\r\n\r\n.lfr-blog-search__field input{\r\n    order:1;\r\n    width:100%;\r\n    min-width:0;\r\n    padding:0;\r\n    border:0;\r\n    outline:none;\r\n    background:transparent;\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:12px;\r\n    color:var(--navy);\r\n}\r\n\r\n.lfr-blog-search__field input::placeholder{\r\n    color:rgba(29,58,76,.48);\r\n}\r\n\r\n.lfr-blog-search__clear{\r\n    order:2;\r\n    flex:0 0 auto;\r\n    width:27px;\r\n    height:27px;\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    margin-left:6px;\r\n    border:0;\r\n    border-radius:50%;\r\n    background:transparent;\r\n    color:var(--gold);\r\n    cursor:pointer;\r\n    font-size:17px;\r\n    opacity:0;\r\n    visibility:hidden;\r\n}\r\n\r\n.lfr-blog-search__clear.is-visible{\r\n    opacity:1;\r\n    visibility:visible;\r\n}\r\n\r\n.lfr-blog-results-meta{\r\n    min-height:18px;\r\n    margin-top:16px;\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:11px;\r\n    color:rgba(29,58,76,.6);\r\n}\r\n\r\n\/* =========================================================\r\n   GRID\r\n========================================================= *\/\r\n\r\n.lfr-blog-grid{\r\n    display:grid;\r\n\r\n    grid-template-columns:\r\n        repeat(3,minmax(0,1fr));\r\n\r\n    gap:\r\n        50px 28px;\r\n}\r\n\r\n.lfr-blog-card{\r\n    min-width:0;\r\n}\r\n\r\n.lfr-blog-card__media{\r\n    position:relative;\r\n\r\n    width:100%;\r\n\r\n    aspect-ratio:4\/3;\r\n\r\n    overflow:hidden;\r\n\r\n    margin-bottom:24px;\r\n\r\n    border-radius:16px 4px 16px 4px;\r\n\r\n    background:#eee5d9;\r\n}\r\n\r\n.lfr-blog-card__media a{\r\n    position:absolute;\r\n    inset:0;\r\n}\r\n\r\n.lfr-blog-card__media img{\r\n    position:absolute;\r\n    inset:0;\r\n\r\n    width:100%;\r\n    height:100%;\r\n\r\n    object-fit:cover;\r\n\r\n    transition:\r\n        transform .55s ease;\r\n}\r\n\r\n.lfr-blog-card:hover\r\n.lfr-blog-card__media img{\r\n    transform:scale(1.04);\r\n}\r\n\r\n.lfr-blog-card__category{\r\n    margin-bottom:10px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n\r\n    font-size:10px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.15em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-blog-card__title{\r\n    margin:\r\n        0 0\r\n        13px;\r\n\r\n    font-family:\"Cormorant Garamond\",serif;\r\n\r\n    font-size:31px;\r\n    font-weight:500;\r\n\r\n    line-height:1.04;\r\n\r\n    color:var(--navy);\r\n}\r\n\r\n.lfr-blog-card__title a{\r\n    color:inherit;\r\n}\r\n\r\n.lfr-blog-card__excerpt{\r\n    margin-bottom:17px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n\r\n    font-size:13px;\r\n\r\n    line-height:1.7;\r\n\r\n    color:var(--text);\r\n}\r\n\r\n.lfr-blog-card__meta{\r\n    margin-bottom:14px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n\r\n    font-size:10px;\r\n\r\n    letter-spacing:.08em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:rgba(29,58,76,.58);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ESTADOS\r\n========================================================= *\/\r\n\r\n.lfr-blog-status{\r\n    display:none;\r\n    padding:28px 22px;\r\n    border:1px solid rgba(193,163,109,.24);\r\n    border-radius:24px;\r\n    background:rgba(255,255,255,.55);\r\n    text-align:center;\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:14px;\r\n    line-height:1.7;\r\n    color:var(--navy);\r\n}\r\n\r\n.lfr-blog-status.is-visible{\r\n    display:block;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PAGINACI\u00d3N\r\n========================================================= *\/\r\n\r\n.lfr-blog-pagination{\r\n    display:flex;\r\n\r\n    justify-content:center;\r\n    align-items:center;\r\n\r\n    gap:8px;\r\n\r\n    margin-top:65px;\r\n}\r\n\r\n.lfr-blog-pagination button{\r\n    width:42px;\r\n    height:42px;\r\n\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    border:\r\n        1px solid rgba(29,58,76,.15);\r\n\r\n    border-radius:50%;\r\n\r\n    background:transparent;\r\n\r\n    cursor:pointer;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:11px;\r\n\r\n    color:var(--navy);\r\n\r\n    transition:\r\n        background .25s ease,\r\n        color .25s ease,\r\n        border-color .25s ease;\r\n}\r\n\r\n.lfr-blog-pagination button:hover,\r\n.lfr-blog-pagination button.is-active{\r\n    border-color:var(--navy);\r\n\r\n    background:var(--navy);\r\n\r\n    color:#fff;\r\n}\r\n\r\n.lfr-blog-pagination button:disabled{\r\n    opacity:.3;\r\n\r\n    cursor:not-allowed;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CTA FINAL\r\n========================================================= *\/\r\n\r\n.lfr-blog-cta{\r\n    position:relative;\r\n\r\n    padding:\r\n        95px 30px;\r\n\r\n    text-align:center;\r\n\r\n    overflow:hidden;\r\n\r\n    background:var(--navy-deep);\r\n}\r\n\r\n.lfr-blog-cta::before{\r\n    content:\"\";\r\n\r\n    position:absolute;\r\n\r\n    width:450px;\r\n    height:450px;\r\n\r\n    left:50%;\r\n    top:50%;\r\n\r\n    transform:\r\n        translate(-50%,-50%);\r\n\r\n    border:\r\n        1px solid rgba(193,163,109,.09);\r\n\r\n    border-radius:50%;\r\n}\r\n\r\n.lfr-blog-cta__content{\r\n    position:relative;\r\n    z-index:2;\r\n\r\n    max-width:780px;\r\n\r\n    margin:0 auto;\r\n}\r\n\r\n.lfr-blog-cta__eyebrow{\r\n    margin-bottom:15px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n    font-size:11px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.22em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--gold);\r\n}\r\n\r\n.lfr-blog-cta__title{\r\n    margin:0;\r\n\r\n    font-family:\"Cormorant Garamond\",serif;\r\n\r\n    font-size:clamp(48px,5vw,72px);\r\n    font-weight:500;\r\n\r\n    line-height:.98;\r\n\r\n    color:var(--cream);\r\n}\r\n\r\n.lfr-blog-cta__text{\r\n    max-width:580px;\r\n\r\n    margin:\r\n        22px auto\r\n        28px;\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n\r\n    font-size:14px;\r\n    line-height:1.7;\r\n\r\n    color:rgba(255,250,243,.78);\r\n}\r\n\r\n.lfr-blog-cta__button{\r\n    display:inline-flex;\r\n\r\n    justify-content:center;\r\n    align-items:center;\r\n\r\n    min-width:185px;\r\n\r\n    padding:\r\n        15px 27px;\r\n\r\n    border:\r\n        1px solid var(--gold);\r\n\r\n    background:var(--gold);\r\n\r\n    font-family:\"Inter\",sans-serif;\r\n\r\n    font-size:11px;\r\n    font-weight:600;\r\n\r\n    letter-spacing:.14em;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--navy-deep) !important;\r\n\r\n    transition:\r\n        background .25s ease,\r\n        color .25s ease;\r\n}\r\n\r\n.lfr-blog-cta__button:hover{\r\n    background:transparent;\r\n\r\n    color:var(--cream) !important;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TABLET\r\n========================================================= *\/\r\n\r\n@media(max-width:1024px){\r\n\r\n    .lfr-blog-hero{\r\n        min-height:460px;\r\n    }\r\n\r\n    .lfr-blog-topbar{\r\n        padding:26px 26px 0;\r\n    }\r\n\r\n    .lfr-blog-filters-wrap{\r\n        align-items:stretch;\r\n        gap:16px;\r\n    }\r\n\r\n    .lfr-blog-search{\r\n        width:250px;\r\n        flex-basis:250px;\r\n    }\r\n\r\n    .lfr-blog-featured{\r\n        padding:\r\n            70px 26px\r\n            65px;\r\n    }\r\n\r\n    .lfr-featured-card{\r\n        gap:35px;\r\n    }\r\n\r\n    .lfr-featured-card__media{\r\n        min-height:360px;\r\n    }\r\n\r\n    .lfr-blog-posts{\r\n        padding:\r\n            60px 26px\r\n            80px;\r\n    }\r\n\r\n    .lfr-blog-grid{\r\n        grid-template-columns:\r\n            repeat(2,minmax(0,1fr));\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE\r\n========================================================= *\/\r\n\r\n@media(max-width:767px){\r\n\r\n    .lfr-blog-hero{\r\n        min-height:400px;\r\n\r\n        padding:\r\n            65px 20px;\r\n    }\r\n\r\n    .lfr-blog-hero h1{\r\n        font-size:\r\n            clamp(52px,15vw,70px);\r\n    }\r\n\r\n    .lfr-blog-hero__text{\r\n        font-size:14px;\r\n    }\r\n\r\n\r\n    .lfr-blog-topbar{\r\n        padding:18px 18px 0;\r\n    }\r\n\r\n    .lfr-blog-filters-wrap{\r\n        display:block;\r\n        padding-bottom:18px;\r\n    }\r\n\r\n    .lfr-blog-filters-wrap::after{\r\n        bottom:-9px;\r\n    }\r\n\r\n    .lfr-blog-filters{\r\n        gap:8px;\r\n        margin-bottom:12px;\r\n        padding:2px 0 4px;\r\n    }\r\n\r\n    .lfr-blog-filter{\r\n        min-height:42px;\r\n        padding:0 14px;\r\n        border-radius:7px;\r\n        font-size:10px;\r\n    }\r\n\r\n    .lfr-blog-search{\r\n        width:100%;\r\n    }\r\n\r\n    .lfr-blog-search__field{\r\n        min-height:44px;\r\n        border-radius:7px;\r\n    }\r\n\r\n    .lfr-blog-results-meta{\r\n        margin-top:13px;\r\n        font-size:10px;\r\n    }\r\n\r\n    .lfr-blog-featured{\r\n        padding:\r\n            55px 18px\r\n            50px;\r\n    }\r\n\r\n    .lfr-featured-card{\r\n        grid-template-columns:1fr;\r\n\r\n        gap:28px;\r\n    }\r\n\r\n    .lfr-featured-card__media{\r\n        min-height:0;\r\n\r\n        aspect-ratio:4\/3;\r\n    }\r\n\r\n\r\n    .lfr-blog-posts{\r\n        padding:\r\n            50px 18px\r\n            65px;\r\n    }\r\n\r\n    .lfr-blog-posts__heading{\r\n        display:block;\r\n\r\n        margin-bottom:28px;\r\n    }\r\n\r\n    .lfr-blog-grid{\r\n        grid-template-columns:1fr;\r\n\r\n        gap:45px;\r\n    }\r\n\r\n    .lfr-blog-card__title{\r\n        font-size:32px;\r\n    }\r\n\r\n    .lfr-blog-pagination{\r\n        margin-top:50px;\r\n    }\r\n\r\n\r\n    .lfr-blog-cta{\r\n        padding:\r\n            75px 20px;\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<div id=\"lfr-blog-app\">\r\n\r\n\r\n    <!-- =====================================================\r\n         HERO\r\n    ====================================================== -->\r\n\r\n    <section class=\"lfr-blog-hero\">\r\n\r\n        <div class=\"lfr-blog-hero__content\">\r\n\r\n            <div class=\"lfr-blog-hero__eyebrow\">\r\n                LA FRENCH RIVIERA\r\n            <\/div>\r\n\r\n            <div class=\"lfr-blog-hero__ornament\">\r\n                \u2726\r\n            <\/div>\r\n\r\n            <h1>\r\n                Blog &amp; News\r\n            <\/h1>\r\n\r\n            <div class=\"lfr-blog-hero__text\">\r\n                Stories, flavors, and experiences to discover\r\n                another way to experience the Mediterranean in Canc\u00fan.\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n\r\n    <!-- =====================================================\r\n         BARRA DE CATEGOR\u00cdAS + BUSCADOR\r\n    ====================================================== -->\r\n\r\n    <section class=\"lfr-blog-topbar\">\r\n\r\n        <div class=\"lfr-blog-shell\">\r\n\r\n            <div class=\"lfr-blog-toolbar\">\r\n\r\n                <div class=\"lfr-blog-filters-wrap\">\r\n\r\n                    <div\r\n                        class=\"lfr-blog-filters\"\r\n                        id=\"lfr-blog-filters\"\r\n                    >\r\n\r\n                        <button\r\n                            class=\"lfr-blog-filter is-active\"\r\n                            data-category=\"0\"\r\n                            type=\"button\"\r\n                        >\r\n                            All\r\n                        <\/button>\r\n\r\n                    <\/div>\r\n\r\n                    <form\r\n                        class=\"lfr-blog-search\"\r\n                        id=\"lfr-blog-search\"\r\n                        role=\"search\"\r\n                    >\r\n\r\n                        <div class=\"lfr-blog-search__field\">\r\n\r\n                            <span class=\"lfr-blog-search__icon\">\u2315<\/span>\r\n\r\n                            <input\r\n                                id=\"lfr-blog-search-input\"\r\n                                type=\"search\"\r\n                                placeholder=\"Search articles...\"\r\n                                autocomplete=\"off\"\r\n                                aria-label=\"Search articles\"\r\n                            >\r\n\r\n                            <button\r\n                                class=\"lfr-blog-search__clear\"\r\n                                id=\"lfr-blog-search-clear\"\r\n                                type=\"button\"\r\n                                aria-label=\"Clear search\"\r\n                            >\r\n                                \u00d7\r\n                            <\/button>\r\n\r\n                        <\/div>\r\n\r\n                    <\/form>\r\n\r\n                <\/div>\r\n\r\n                <div\r\n                    class=\"lfr-blog-results-meta\"\r\n                    id=\"lfr-blog-results-meta\"\r\n                >\r\n                    Showing recent articles.\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n\r\n    <!-- =====================================================\r\n         DESTACADO\r\n    ====================================================== -->\r\n\r\n    <section class=\"lfr-blog-featured\">\r\n\r\n        <div class=\"lfr-blog-shell\">\r\n\r\n            <div class=\"lfr-blog-featured__heading\">\r\n\r\n                <div class=\"lfr-blog-section-eyebrow\">\r\n                    FEATURED STORIES\r\n                <\/div>\r\n\r\n                <h2 class=\"lfr-blog-section-title\">\r\n                    Latest from La French Riviera\r\n                <\/h2>\r\n\r\n            <\/div>\r\n\r\n            <div id=\"lfr-featured-post\">\r\n\r\n                <div class=\"lfr-blog-status is-visible\">\r\n                    Loading featured article...\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n\r\n    <!-- =====================================================\r\n         POSTS\r\n    ====================================================== -->\r\n\r\n    <section\r\n        class=\"lfr-blog-posts\"\r\n        id=\"lfr-articulos\"\r\n    >\r\n\r\n        <div class=\"lfr-blog-shell\">\r\n\r\n\r\n            <div class=\"lfr-blog-posts__heading\">\r\n\r\n                <div>\r\n\r\n                    <div class=\"lfr-blog-section-eyebrow\">\r\n                        MORE STORIES\r\n                    <\/div>\r\n\r\n                    <h2 class=\"lfr-blog-section-title\">\r\n                        Discover more from La French Riviera\r\n                    <\/h2>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n\r\n            <!-- GRID -->\r\n\r\n            <div\r\n                class=\"lfr-blog-grid\"\r\n                id=\"lfr-blog-grid\"\r\n            ><\/div>\r\n\r\n\r\n            <!-- ESTADO -->\r\n\r\n            <div\r\n                class=\"lfr-blog-status\"\r\n                id=\"lfr-blog-status\"\r\n            ><\/div>\r\n\r\n\r\n            <!-- PAGINACI\u00d3N -->\r\n\r\n            <div\r\n                class=\"lfr-blog-pagination\"\r\n                id=\"lfr-blog-pagination\"\r\n            ><\/div>\r\n\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n\r\n    <!-- =====================================================\r\n         CTA FINAL\r\n    ====================================================== -->\r\n\r\n    <section class=\"lfr-blog-cta\">\r\n\r\n        <div class=\"lfr-blog-cta__content\">\r\n\r\n            <div class=\"lfr-blog-cta__eyebrow\">\r\n                LA FRENCH RIVIERA\r\n            <\/div>\r\n\r\n            <h2 class=\"lfr-blog-cta__title\">\r\n                Ready to experience it?\r\n            <\/h2>\r\n\r\n            <div class=\"lfr-blog-cta__text\">\r\n                Mediterranean cuisine, cocktails,\r\n                hookah, and an atmosphere designed to\r\n                enjoy the night in Canc\u00fan.\r\n            <\/div>\r\n\r\n            <a\r\n                class=\"lfr-blog-cta__button\"\r\n                href=\"https:\/\/wa.me\/529988821365?text=Hello%2C%20I%20would%20like%20to%20reserve%20a%20table%20at%20La%20French%20Riviera.\"\r\n                target=\"_blank\"\r\n                rel=\"noopener\"\r\n            >\r\n                Reserve a Table\r\n            <\/a>\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n<\/div>\r\n\r\n\r\n\r\n<script>\r\n\r\n(function(){\r\n\r\n    \"use strict\";\r\n\r\n    \/* =====================================================\r\n       CONFIGURATION\r\n       ===================================================== *\/\r\n\r\n    const API =\r\n        window.location.origin +\r\n        \"\/wp-json\/wp\/v2\";\r\n\r\n    \/*\r\n       This version does NOT depend on Polylang Pro's REST\r\n       \"lang\" parameter.\r\n\r\n       English posts are detected by their REAL document language\r\n       (<html lang=\"en-US\">), not only by the permalink.\r\n       This keeps the filter stable if Polylang URL settings change.\r\n    *\/\r\n    const LANGUAGE_PATH = \"\/en\/\";\r\n    const POSTS_PER_PAGE = 6;\r\n    const API_BATCH_SIZE = 100;\r\n\r\n    const priorityCategories = [\r\n        \"Gastronomy\",\r\n        \"Mediterranean Food\",\r\n        \"Halal Cuisine\",\r\n        \"Hookah\",\r\n        \"Cocktails & Mocktails\",\r\n        \"Mixology\",\r\n        \"Experiences\",\r\n        \"Events\"\r\n    ];\r\n\r\n    const state = {\r\n        page:1,\r\n        category:0,\r\n        search:\"\",\r\n        featuredId:null,\r\n        totalPages:1,\r\n        totalItems:0,\r\n        allEnglishPosts:[]\r\n    };\r\n\r\n\r\n    const featuredContainer =\r\n        document.getElementById(\r\n            \"lfr-featured-post\"\r\n        );\r\n\r\n    const filtersContainer =\r\n        document.getElementById(\r\n            \"lfr-blog-filters\"\r\n        );\r\n\r\n    const searchForm =\r\n        document.getElementById(\r\n            \"lfr-blog-search\"\r\n        );\r\n\r\n    const searchInput =\r\n        document.getElementById(\r\n            \"lfr-blog-search-input\"\r\n        );\r\n\r\n    const searchClear =\r\n        document.getElementById(\r\n            \"lfr-blog-search-clear\"\r\n        );\r\n\r\n    const resultsMeta =\r\n        document.getElementById(\r\n            \"lfr-blog-results-meta\"\r\n        );\r\n\r\n    const grid =\r\n        document.getElementById(\r\n            \"lfr-blog-grid\"\r\n        );\r\n\r\n    const status =\r\n        document.getElementById(\r\n            \"lfr-blog-status\"\r\n        );\r\n\r\n    const pagination =\r\n        document.getElementById(\r\n            \"lfr-blog-pagination\"\r\n        );\r\n\r\n\r\n    \/* =====================================================\r\n       HELPERS\r\n       ===================================================== *\/\r\n\r\n    function stripHTML(html){\r\n\r\n        const element =\r\n            document.createElement(\"div\");\r\n\r\n        element.innerHTML =\r\n            html || \"\";\r\n\r\n        return (\r\n            element.textContent ||\r\n            element.innerText ||\r\n            \"\"\r\n        ).trim();\r\n\r\n    }\r\n\r\n\r\n    function truncate(text,length){\r\n\r\n        if(!text){\r\n            return \"\";\r\n        }\r\n\r\n        if(text.length <= length){\r\n            return text;\r\n        }\r\n\r\n        return (\r\n            text.substring(0,length)\r\n                .trim()\r\n            + \"...\"\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function formatDate(date){\r\n\r\n        try{\r\n\r\n            return new Intl.DateTimeFormat(\r\n                \"en-US\",\r\n                {\r\n                    day:\"2-digit\",\r\n                    month:\"long\",\r\n                    year:\"numeric\"\r\n                }\r\n            ).format(\r\n                new Date(date)\r\n            );\r\n\r\n        }catch(error){\r\n\r\n            return \"\";\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    function normalizePath(url){\r\n\r\n        try{\r\n            return new URL(\r\n                url,\r\n                window.location.origin\r\n            ).pathname.toLowerCase();\r\n        }catch(error){\r\n            return \"\";\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n       Detect the REAL language assigned by WordPress\/Polylang.\r\n\r\n       We do not rely only on \/en\/ in the permalink because Polylang\r\n       can change URL behavior when the default language or URL\r\n       settings change.\r\n\r\n       Detection order:\r\n       1) \"lang\" field if the REST API exposes it.\r\n       2) <html lang=\"...\"> from the public post page.\r\n       3) URL only as a fallback.\r\n    *\/\r\n\r\n    const postLanguageCache = new Map();\r\n\r\n\r\n    async function getPostLanguage(post){\r\n\r\n        if(!post){\r\n            return \"\";\r\n        }\r\n\r\n\r\n        \/* Polylang Pro \/ REST compatible *\/\r\n        if(post.lang){\r\n\r\n            const directLang =\r\n                String(post.lang)\r\n                    .toLowerCase()\r\n                    .replace(\"_\",\"-\")\r\n                    .split(\"-\")[0];\r\n\r\n            if(post.id){\r\n                postLanguageCache.set(\r\n                    post.id,\r\n                    directLang\r\n                );\r\n            }\r\n\r\n            return directLang;\r\n        }\r\n\r\n\r\n        if(\r\n            post.id &&\r\n            postLanguageCache.has(post.id)\r\n        ){\r\n            return postLanguageCache.get(\r\n                post.id\r\n            );\r\n        }\r\n\r\n\r\n        const link =\r\n            post.link || \"\";\r\n\r\n\r\n        \/*\r\n           Main method for Polylang Free:\r\n           fetch the public post and read the actual\r\n           <html lang=\"en-US\"> \/ <html lang=\"es-MX\"> attribute.\r\n        *\/\r\n        if(link){\r\n\r\n            try{\r\n\r\n                const response =\r\n                    await fetch(\r\n                        link,\r\n                        {\r\n                            credentials:\"same-origin\"\r\n                        }\r\n                    );\r\n\r\n\r\n                if(response.ok){\r\n\r\n                    const html =\r\n                        await response.text();\r\n\r\n\r\n                    const match =\r\n                        html.match(\r\n                            \/<html\\b[^>]*\\blang=[\"']([^\"']+)[\"']\/i\r\n                        );\r\n\r\n\r\n                    if(\r\n                        match &&\r\n                        match[1]\r\n                    ){\r\n\r\n                        const documentLang =\r\n                            match[1]\r\n                                .toLowerCase()\r\n                                .replace(\"_\",\"-\")\r\n                                .split(\"-\")[0];\r\n\r\n\r\n                        if(post.id){\r\n                            postLanguageCache.set(\r\n                                post.id,\r\n                                documentLang\r\n                            );\r\n                        }\r\n\r\n\r\n                        return documentLang;\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            }catch(error){\r\n\r\n                console.warn(\r\n                    \"Could not detect article language:\",\r\n                    link\r\n                );\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        \/* URL fallback *\/\r\n        const path =\r\n            normalizePath(link);\r\n\r\n        const fallbackLang =\r\n            (\r\n                path === LANGUAGE_PATH.slice(0,-1) ||\r\n                path.startsWith(LANGUAGE_PATH)\r\n            )\r\n                ? \"en\"\r\n                : \"es\";\r\n\r\n\r\n        if(post.id){\r\n            postLanguageCache.set(\r\n                post.id,\r\n                fallbackLang\r\n            );\r\n        }\r\n\r\n\r\n        return fallbackLang;\r\n\r\n    }\r\n\r\n\r\n    async function filterPostsByLanguage(\r\n        posts,\r\n        expectedLanguage\r\n    ){\r\n\r\n        const checked =\r\n            await Promise.all(\r\n                posts.map(\r\n                    async function(post){\r\n\r\n                        return {\r\n                            post:post,\r\n                            lang:\r\n                                await getPostLanguage(\r\n                                    post\r\n                                )\r\n                        };\r\n\r\n                    }\r\n                )\r\n            );\r\n\r\n\r\n        return checked\r\n            .filter(\r\n                function(item){\r\n\r\n                    return (\r\n                        item.lang ===\r\n                        expectedLanguage\r\n                    );\r\n\r\n                }\r\n            )\r\n            .map(\r\n                function(item){\r\n                    return item.post;\r\n                }\r\n            );\r\n\r\n    }\r\n\r\n\r\n    function getImage(post){\r\n\r\n        const media =\r\n            post?._embedded?.[\r\n                \"wp:featuredmedia\"\r\n            ]?.[0];\r\n\r\n        if(!media){\r\n            return null;\r\n        }\r\n\r\n        return {\r\n            src:\r\n                media.source_url || \"\",\r\n            alt:\r\n                media.alt_text ||\r\n                stripHTML(\r\n                    post.title?.rendered\r\n                )\r\n        };\r\n\r\n    }\r\n\r\n\r\n    function getPostCategories(post){\r\n\r\n        const groups =\r\n            post?._embedded?.[\r\n                \"wp:term\"\r\n            ] || [];\r\n\r\n        return groups\r\n            .flat()\r\n            .filter(function(term){\r\n                return (\r\n                    term.taxonomy ===\r\n                    \"category\"\r\n                );\r\n            });\r\n\r\n    }\r\n\r\n\r\n    function getCategory(post){\r\n\r\n        const categories =\r\n            getPostCategories(post);\r\n\r\n        return categories.length\r\n            ? categories[0].name\r\n            : \"La French Riviera\";\r\n\r\n    }\r\n\r\n\r\n    function createImageLink(post,className){\r\n\r\n        const wrapper =\r\n            document.createElement(\"div\");\r\n\r\n        wrapper.className =\r\n            className;\r\n\r\n        const link =\r\n            document.createElement(\"a\");\r\n\r\n        link.href =\r\n            post.link;\r\n\r\n        const image =\r\n            getImage(post);\r\n\r\n        if(image && image.src){\r\n\r\n            const img =\r\n                document.createElement(\"img\");\r\n\r\n            img.src =\r\n                image.src;\r\n\r\n            img.alt =\r\n                image.alt;\r\n\r\n            img.loading =\r\n                \"lazy\";\r\n\r\n            link.appendChild(img);\r\n\r\n        }\r\n\r\n        wrapper.appendChild(link);\r\n\r\n        return wrapper;\r\n\r\n    }\r\n\r\n\r\n    function getActiveCategoryLabel(){\r\n\r\n        const active =\r\n            filtersContainer.querySelector(\r\n                \".lfr-blog-filter.is-active\"\r\n            );\r\n\r\n        if(!active){\r\n            return \"All\";\r\n        }\r\n\r\n        return (\r\n            active.textContent ||\r\n            \"All\"\r\n        ).trim();\r\n\r\n    }\r\n\r\n\r\n    function updateResultsMeta(){\r\n\r\n        if(!resultsMeta){\r\n            return;\r\n        }\r\n\r\n        const parts = [];\r\n        const total = state.totalItems || 0;\r\n        const activeCategory =\r\n            getActiveCategoryLabel();\r\n\r\n        parts.push(\r\n            total === 1\r\n                ? \"1 article\"\r\n                : total + \" articles\"\r\n        );\r\n\r\n        if(state.category !== 0){\r\n            parts.push(\r\n                \"in \" + activeCategory\r\n            );\r\n        }\r\n\r\n        if(state.search){\r\n            parts.push(\r\n                'for \"' + state.search + '\"'\r\n            );\r\n        }\r\n\r\n        resultsMeta.textContent =\r\n            parts.join(\" \");\r\n\r\n        if(searchClear){\r\n            searchClear.classList.toggle(\r\n                \"is-visible\",\r\n                Boolean(state.search)\r\n            );\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       LOAD ALL PUBLIC POSTS\r\n       WordPress REST exposes public\/published posts here.\r\n       We then verify the real document language and keep only English.\r\n       ===================================================== *\/\r\n\r\n    async function fetchAllPublishedPosts(){\r\n\r\n        const collected = [];\r\n        let page = 1;\r\n        let totalPages = 1;\r\n\r\n        do{\r\n\r\n            const params =\r\n                new URLSearchParams();\r\n\r\n            params.set(\r\n                \"per_page\",\r\n                API_BATCH_SIZE\r\n            );\r\n\r\n            params.set(\r\n                \"page\",\r\n                page\r\n            );\r\n\r\n            params.set(\r\n                \"orderby\",\r\n                \"date\"\r\n            );\r\n\r\n            params.set(\r\n                \"order\",\r\n                \"desc\"\r\n            );\r\n\r\n            params.set(\r\n                \"_embed\",\r\n                \"1\"\r\n            );\r\n\r\n            const response =\r\n                await fetch(\r\n                    API +\r\n                    \"\/posts?\" +\r\n                    params.toString()\r\n                );\r\n\r\n            if(!response.ok){\r\n                throw new Error(\r\n                    \"Unable to load articles.\"\r\n                );\r\n            }\r\n\r\n            const posts =\r\n                await response.json();\r\n\r\n            collected.push.apply(\r\n                collected,\r\n                posts\r\n            );\r\n\r\n            totalPages =\r\n                parseInt(\r\n                    response.headers.get(\r\n                        \"X-WP-TotalPages\"\r\n                    ) || \"1\",\r\n                    10\r\n                );\r\n\r\n            page++;\r\n\r\n        }while(\r\n            page <= totalPages\r\n        );\r\n\r\n        \/*\r\n           Strict language filter:\r\n           keep ONLY posts whose public document is marked English.\r\n        *\/\r\n        state.allEnglishPosts =\r\n            await filterPostsByLanguage(\r\n                collected,\r\n                \"en\"\r\n            );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       FEATURED\r\n       ===================================================== *\/\r\n\r\n    function renderFeatured(post){\r\n\r\n        featuredContainer.innerHTML =\r\n            \"\";\r\n\r\n        if(!post){\r\n            return;\r\n        }\r\n\r\n        const card =\r\n            document.createElement(\"article\");\r\n\r\n        card.className =\r\n            \"lfr-featured-card\";\r\n\r\n        const media =\r\n            createImageLink(\r\n                post,\r\n                \"lfr-featured-card__media\"\r\n            );\r\n\r\n        const content =\r\n            document.createElement(\"div\");\r\n\r\n        content.className =\r\n            \"lfr-featured-card__content\";\r\n\r\n        const category =\r\n            document.createElement(\"div\");\r\n\r\n        category.className =\r\n            \"lfr-featured-card__category\";\r\n\r\n        category.textContent =\r\n            getCategory(post);\r\n\r\n        const title =\r\n            document.createElement(\"h2\");\r\n\r\n        title.className =\r\n            \"lfr-featured-card__title\";\r\n\r\n        const titleLink =\r\n            document.createElement(\"a\");\r\n\r\n        titleLink.href =\r\n            post.link;\r\n\r\n        titleLink.textContent =\r\n            stripHTML(\r\n                post.title?.rendered\r\n            );\r\n\r\n        title.appendChild(\r\n            titleLink\r\n        );\r\n\r\n        const excerpt =\r\n            document.createElement(\"div\");\r\n\r\n        excerpt.className =\r\n            \"lfr-featured-card__excerpt\";\r\n\r\n        excerpt.textContent =\r\n            truncate(\r\n                stripHTML(\r\n                    post.excerpt?.rendered\r\n                ),\r\n                240\r\n            );\r\n\r\n        const read =\r\n            document.createElement(\"a\");\r\n\r\n        read.className =\r\n            \"lfr-blog-readmore\";\r\n\r\n        read.href =\r\n            post.link;\r\n\r\n        read.innerHTML =\r\n            'READ ARTICLE <span>\u2192<\/span>';\r\n\r\n        content.append(\r\n            category,\r\n            title,\r\n            excerpt,\r\n            read\r\n        );\r\n\r\n        card.append(\r\n            media,\r\n            content\r\n        );\r\n\r\n        featuredContainer.appendChild(\r\n            card\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function loadFeatured(){\r\n\r\n        const post =\r\n            state.allEnglishPosts[0] ||\r\n            null;\r\n\r\n        state.featuredId =\r\n            post ? post.id : null;\r\n\r\n        if(post){\r\n            renderFeatured(post);\r\n        }else{\r\n            featuredContainer.innerHTML =\r\n                '<div class=\"lfr-blog-status is-visible\">' +\r\n                'No published English articles are available yet.' +\r\n                '<\/div>';\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       CATEGORIES\r\n       Built only from English posts, so Spanish categories\r\n       can never enter this English blog.\r\n       ===================================================== *\/\r\n\r\n    function loadCategories(){\r\n\r\n        const categoryMap =\r\n            new Map();\r\n\r\n        state.allEnglishPosts.forEach(\r\n            function(post){\r\n\r\n                getPostCategories(post)\r\n                    .forEach(\r\n                        function(category){\r\n\r\n                            if(\r\n                                !categoryMap.has(\r\n                                    category.id\r\n                                )\r\n                            ){\r\n                                categoryMap.set(\r\n                                    category.id,\r\n                                    category\r\n                                );\r\n                            }\r\n\r\n                        }\r\n                    );\r\n\r\n            }\r\n        );\r\n\r\n        let categories =\r\n            Array.from(\r\n                categoryMap.values()\r\n            );\r\n\r\n        categories.sort(\r\n            function(a,b){\r\n\r\n                const ia =\r\n                    priorityCategories\r\n                    .indexOf(a.name);\r\n\r\n                const ib =\r\n                    priorityCategories\r\n                    .indexOf(b.name);\r\n\r\n                if(\r\n                    ia !== -1 &&\r\n                    ib !== -1\r\n                ){\r\n                    return ia - ib;\r\n                }\r\n\r\n                if(ia !== -1){\r\n                    return -1;\r\n                }\r\n\r\n                if(ib !== -1){\r\n                    return 1;\r\n                }\r\n\r\n                return a.name.localeCompare(\r\n                    b.name,\r\n                    \"en\"\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n        \/*\r\n           Keep the initial \"All\" button and remove\r\n           any old dynamic buttons if Elementor reruns.\r\n        *\/\r\n        filtersContainer\r\n            .querySelectorAll(\r\n                \".lfr-blog-filter:not([data-category='0'])\"\r\n            )\r\n            .forEach(function(button){\r\n                button.remove();\r\n            });\r\n\r\n        categories.forEach(\r\n            function(category){\r\n\r\n                const button =\r\n                    document.createElement(\r\n                        \"button\"\r\n                    );\r\n\r\n                button.type =\r\n                    \"button\";\r\n\r\n                button.className =\r\n                    \"lfr-blog-filter\";\r\n\r\n                button.dataset.category =\r\n                    category.id;\r\n\r\n                button.textContent =\r\n                    category.name;\r\n\r\n                filtersContainer\r\n                    .appendChild(button);\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       POSTS \u2014 CLIENT-SIDE ENGLISH FILTER + PAGINATION\r\n       ===================================================== *\/\r\n\r\n    function getFilteredPosts(){\r\n\r\n        let posts =\r\n            state.allEnglishPosts.slice();\r\n\r\n        if(state.category){\r\n\r\n            posts =\r\n                posts.filter(\r\n                    function(post){\r\n\r\n                        return (\r\n                            post.categories || []\r\n                        ).includes(\r\n                            state.category\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n        }\r\n\r\n        if(state.search){\r\n\r\n            const query =\r\n                state.search.toLowerCase();\r\n\r\n            posts =\r\n                posts.filter(\r\n                    function(post){\r\n\r\n                        const haystack =\r\n                            (\r\n                                stripHTML(\r\n                                    post.title?.rendered\r\n                                ) +\r\n                                \" \" +\r\n                                stripHTML(\r\n                                    post.excerpt?.rendered\r\n                                ) +\r\n                                \" \" +\r\n                                stripHTML(\r\n                                    post.content?.rendered\r\n                                )\r\n                            ).toLowerCase();\r\n\r\n                        return haystack.includes(\r\n                            query\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n        }\r\n\r\n        return posts;\r\n\r\n    }\r\n\r\n\r\n    function loadPosts(){\r\n\r\n        grid.innerHTML =\r\n            \"\";\r\n\r\n        pagination.innerHTML =\r\n            \"\";\r\n\r\n        status.classList.remove(\r\n            \"is-visible\"\r\n        );\r\n\r\n        const posts =\r\n            getFilteredPosts();\r\n\r\n        state.totalItems =\r\n            posts.length;\r\n\r\n        state.totalPages =\r\n            Math.max(\r\n                1,\r\n                Math.ceil(\r\n                    posts.length \/\r\n                    POSTS_PER_PAGE\r\n                )\r\n            );\r\n\r\n        if(\r\n            state.page >\r\n            state.totalPages\r\n        ){\r\n            state.page =\r\n                state.totalPages;\r\n        }\r\n\r\n        updateResultsMeta();\r\n\r\n        if(!posts.length){\r\n\r\n            status.textContent =\r\n                state.search\r\n                    ? \"No articles matched those filters. Try another category or change your search.\"\r\n                    : \"There are no published English articles in this filter yet.\";\r\n\r\n            status.classList.add(\r\n                \"is-visible\"\r\n            );\r\n\r\n            return;\r\n\r\n        }\r\n\r\n        const start =\r\n            (state.page - 1) *\r\n            POSTS_PER_PAGE;\r\n\r\n        const pagePosts =\r\n            posts.slice(\r\n                start,\r\n                start + POSTS_PER_PAGE\r\n            );\r\n\r\n        pagePosts.forEach(\r\n            renderPostCard\r\n        );\r\n\r\n        renderPagination();\r\n        updateResultsMeta();\r\n\r\n    }\r\n\r\n\r\n    function renderPostCard(post){\r\n\r\n        const article =\r\n            document.createElement(\r\n                \"article\"\r\n            );\r\n\r\n        article.className =\r\n            \"lfr-blog-card\";\r\n\r\n        const media =\r\n            createImageLink(\r\n                post,\r\n                \"lfr-blog-card__media\"\r\n            );\r\n\r\n        const category =\r\n            document.createElement(\r\n                \"div\"\r\n            );\r\n\r\n        category.className =\r\n            \"lfr-blog-card__category\";\r\n\r\n        category.textContent =\r\n            getCategory(post);\r\n\r\n        const title =\r\n            document.createElement(\"h3\");\r\n\r\n        title.className =\r\n            \"lfr-blog-card__title\";\r\n\r\n        const titleLink =\r\n            document.createElement(\"a\");\r\n\r\n        titleLink.href =\r\n            post.link;\r\n\r\n        titleLink.textContent =\r\n            stripHTML(\r\n                post.title?.rendered\r\n            );\r\n\r\n        title.appendChild(\r\n            titleLink\r\n        );\r\n\r\n        const excerpt =\r\n            document.createElement(\r\n                \"div\"\r\n            );\r\n\r\n        excerpt.className =\r\n            \"lfr-blog-card__excerpt\";\r\n\r\n        excerpt.textContent =\r\n            truncate(\r\n                stripHTML(\r\n                    post.excerpt?.rendered\r\n                ),\r\n                150\r\n            );\r\n\r\n        const meta =\r\n            document.createElement(\r\n                \"div\"\r\n            );\r\n\r\n        meta.className =\r\n            \"lfr-blog-card__meta\";\r\n\r\n        meta.textContent =\r\n            formatDate(post.date);\r\n\r\n        const read =\r\n            document.createElement(\"a\");\r\n\r\n        read.className =\r\n            \"lfr-blog-readmore\";\r\n\r\n        read.href =\r\n            post.link;\r\n\r\n        read.innerHTML =\r\n            'READ MORE <span>\u2192<\/span>';\r\n\r\n        article.append(\r\n            media,\r\n            category,\r\n            title,\r\n            excerpt,\r\n            meta,\r\n            read\r\n        );\r\n\r\n        grid.appendChild(\r\n            article\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       PAGINATION\r\n       ===================================================== *\/\r\n\r\n    function renderPagination(){\r\n\r\n        pagination.innerHTML =\r\n            \"\";\r\n\r\n        if(state.totalPages <= 1){\r\n            return;\r\n        }\r\n\r\n        const previous =\r\n            document.createElement(\r\n                \"button\"\r\n            );\r\n\r\n        previous.type =\r\n            \"button\";\r\n\r\n        previous.innerHTML =\r\n            \"\u2190\";\r\n\r\n        previous.disabled =\r\n            state.page === 1;\r\n\r\n        previous.addEventListener(\r\n            \"click\",\r\n            function(){\r\n\r\n                if(state.page > 1){\r\n\r\n                    state.page--;\r\n\r\n                    refreshPosts();\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n        pagination.appendChild(\r\n            previous\r\n        );\r\n\r\n\r\n        for(\r\n            let page = 1;\r\n            page <= state.totalPages;\r\n            page++\r\n        ){\r\n\r\n            if(\r\n                state.totalPages > 7 &&\r\n                Math.abs(\r\n                    page - state.page\r\n                ) > 2 &&\r\n                page !== 1 &&\r\n                page !== state.totalPages\r\n            ){\r\n                continue;\r\n            }\r\n\r\n            const button =\r\n                document.createElement(\r\n                    \"button\"\r\n                );\r\n\r\n            button.type =\r\n                \"button\";\r\n\r\n            button.textContent =\r\n                String(page)\r\n                .padStart(2,\"0\");\r\n\r\n            if(page === state.page){\r\n\r\n                button.classList.add(\r\n                    \"is-active\"\r\n                );\r\n\r\n            }\r\n\r\n            button.addEventListener(\r\n                \"click\",\r\n                function(){\r\n\r\n                    state.page =\r\n                        page;\r\n\r\n                    refreshPosts();\r\n\r\n                }\r\n            );\r\n\r\n            pagination.appendChild(\r\n                button\r\n            );\r\n\r\n        }\r\n\r\n\r\n        const next =\r\n            document.createElement(\r\n                \"button\"\r\n            );\r\n\r\n        next.type =\r\n            \"button\";\r\n\r\n        next.innerHTML =\r\n            \"\u2192\";\r\n\r\n        next.disabled =\r\n            state.page ===\r\n            state.totalPages;\r\n\r\n        next.addEventListener(\r\n            \"click\",\r\n            function(){\r\n\r\n                if(\r\n                    state.page <\r\n                    state.totalPages\r\n                ){\r\n\r\n                    state.page++;\r\n\r\n                    refreshPosts();\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n        pagination.appendChild(\r\n            next\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       FILTERING\r\n       ===================================================== *\/\r\n\r\n    filtersContainer.addEventListener(\r\n        \"click\",\r\n        function(event){\r\n\r\n            const button =\r\n                event.target.closest(\r\n                    \".lfr-blog-filter\"\r\n                );\r\n\r\n            if(!button){\r\n                return;\r\n            }\r\n\r\n            filtersContainer\r\n                .querySelectorAll(\r\n                    \".lfr-blog-filter\"\r\n                )\r\n                .forEach(\r\n                    function(item){\r\n\r\n                        item.classList.remove(\r\n                            \"is-active\"\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n            button.classList.add(\r\n                \"is-active\"\r\n            );\r\n\r\n            state.category =\r\n                parseInt(\r\n                    button.dataset.category ||\r\n                    \"0\",\r\n                    10\r\n                );\r\n\r\n            state.page = 1;\r\n\r\n            refreshPosts();\r\n\r\n        }\r\n    );\r\n\r\n\r\n    let searchTimer;\r\n\r\n    if(searchForm){\r\n\r\n        searchForm.addEventListener(\r\n            \"submit\",\r\n            function(event){\r\n\r\n                event.preventDefault();\r\n\r\n                state.search =\r\n                    (searchInput.value || \"\")\r\n                        .trim();\r\n\r\n                state.page = 1;\r\n\r\n                refreshPosts(false);\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    if(searchInput){\r\n\r\n        searchInput.addEventListener(\r\n            \"input\",\r\n            function(){\r\n\r\n                window.clearTimeout(\r\n                    searchTimer\r\n                );\r\n\r\n                const value =\r\n                    (this.value || \"\")\r\n                        .trim();\r\n\r\n                if(searchClear){\r\n                    searchClear.classList.toggle(\r\n                        \"is-visible\",\r\n                        Boolean(value)\r\n                    );\r\n                }\r\n\r\n                searchTimer =\r\n                    window.setTimeout(\r\n                        function(){\r\n\r\n                            state.search =\r\n                                value;\r\n\r\n                            state.page = 1;\r\n\r\n                            refreshPosts(false);\r\n\r\n                        },\r\n                        300\r\n                    );\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    if(searchClear){\r\n\r\n        searchClear.addEventListener(\r\n            \"click\",\r\n            function(){\r\n\r\n                if(searchInput){\r\n                    searchInput.value = \"\";\r\n                }\r\n\r\n                state.search = \"\";\r\n                state.page = 1;\r\n\r\n                searchClear.classList.remove(\r\n                    \"is-visible\"\r\n                );\r\n\r\n                refreshPosts(false);\r\n\r\n                if(searchInput){\r\n                    searchInput.focus();\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function refreshPosts(\r\n        shouldScroll = true\r\n    ){\r\n\r\n        loadPosts();\r\n\r\n        const section =\r\n            document.getElementById(\r\n                \"lfr-articulos\"\r\n            );\r\n\r\n        if(section && shouldScroll){\r\n\r\n            const top =\r\n                section\r\n                    .getBoundingClientRect()\r\n                    .top\r\n                +\r\n                window.scrollY\r\n                -\r\n                110;\r\n\r\n            window.scrollTo({\r\n                top:top,\r\n                behavior:\"smooth\"\r\n            });\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       INIT\r\n       ===================================================== *\/\r\n\r\n    async function init(){\r\n\r\n        updateResultsMeta();\r\n\r\n        try{\r\n\r\n            await fetchAllPublishedPosts();\r\n\r\n            loadFeatured();\r\n            loadCategories();\r\n            loadPosts();\r\n\r\n        }catch(error){\r\n\r\n            featuredContainer.innerHTML =\r\n                '<div class=\"lfr-blog-status is-visible\">' +\r\n                'Unable to load the featured article.' +\r\n                '<\/div>';\r\n\r\n            status.textContent =\r\n                \"Unable to load the articles.\";\r\n\r\n            status.classList.add(\r\n                \"is-visible\"\r\n            );\r\n\r\n            console.error(error);\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    init();\r\n\r\n\r\n})();\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>LA FRENCH RIVIERA \u2726 Blog &amp; News Stories, flavors, and experiences to discover another way to experience the Mediterranean in Canc\u00fan. All \u2315 \u00d7 Showing recent articles. FEATURED STORIES Latest from La French Riviera Loading featured article&#8230; MORE STORIES Discover more from La French Riviera LA FRENCH RIVIERA Ready to experience it? Mediterranean cuisine, cocktails, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-425","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=\/wp\/v2\/pages\/425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=%2Fwp%2Fv2%2Fcomments&post=425"}],"version-history":[{"count":13,"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=\/wp\/v2\/pages\/425\/revisions"}],"predecessor-version":[{"id":474,"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=\/wp\/v2\/pages\/425\/revisions\/474"}],"wp:attachment":[{"href":"https:\/\/frenchriviera-lounge.com\/?rest_route=%2Fwp%2Fv2%2Fmedia&parent=425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}