{"id":9,"date":"2021-06-18T23:33:20","date_gmt":"2021-06-18T23:33:20","guid":{"rendered":"https:\/\/fromcold.com\/?page_id=9"},"modified":"2026-10-23T14:26:42","modified_gmt":"2026-10-23T14:26:42","slug":"productos","status":"publish","type":"page","link":"https:\/\/fromcold.com\/eng\/productos\/","title":{"rendered":"Products"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cf4db4b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cf4db4b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9c65406\" data-id=\"9c65406\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0608162 elementor-widget elementor-widget-html\" data-id=\"0608162\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =========================================================\r\n     FROM COLD | CAT\u00c1LOGO PREMIUM\r\n     WordPress + ACF + Elementor\r\n     Filtros con desplazamiento independiente y acordeones\r\n     CPT: productos\r\n     Taxonom\u00edas: marca, categorias, aplicacion, refrigerante\r\n     ACF: codigo, modelo, descripcion, descripcion_corta,\r\n          disponibilidad\r\n========================================================= -->\r\n\r\n<!-- FUENTES -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Outfit:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n\r\n<div id=\"fromcold-catalogo\">\r\n\r\n<style>\r\n\/* =========================================================\r\n   1. ESTILOS GENERALES\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo,\r\n#fromcold-catalogo * {\r\n    box-sizing: border-box;\r\n}\r\n\r\n#fromcold-catalogo {\r\n    width: 100%;\r\n    font-family: 'Outfit', sans-serif;\r\n    color: #17324d;\r\n    background:\r\n        radial-gradient(circle at 10% 0%, rgba(0,91,170,.055), transparent 30%),\r\n        linear-gradient(180deg, #fff 0%, #f7fbff 100%);\r\n    padding: 55px 20px 80px;\r\n}\r\n\r\n#fromcold-catalogo .fc-wrap {\r\n    width: 100%;\r\n    max-width: 1450px;\r\n    margin: 0 auto;\r\n}\r\n\r\n\/* =========================================================\r\n   2. ENCABEZADO\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-heading {\r\n    text-align: center;\r\n    margin-bottom: 34px;\r\n}\r\n\r\n#fromcold-catalogo .fc-eyebrow {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 8px;\r\n    font-size: 13px;\r\n    font-weight: 700;\r\n    letter-spacing: 2px;\r\n    text-transform: uppercase;\r\n    color: #005baa;\r\n    margin-bottom: 10px;\r\n}\r\n\r\n#fromcold-catalogo .fc-eyebrow:before {\r\n    content: \"\";\r\n    width: 28px;\r\n    height: 2px;\r\n    background: #005baa;\r\n    display: block;\r\n}\r\n\r\n#fromcold-catalogo .fc-heading h1 {\r\n    margin: 0;\r\n    font-size: clamp(34px, 4vw, 54px);\r\n    line-height: 1.05;\r\n    font-weight: 700;\r\n    letter-spacing: -1.5px;\r\n    color: #12304b;\r\n}\r\n\r\n#fromcold-catalogo .fc-heading h1 span {\r\n    color: #005baa;\r\n}\r\n\r\n#fromcold-catalogo .fc-heading-line {\r\n    width: 65px;\r\n    height: 4px;\r\n    border-radius: 20px;\r\n    background: #005baa;\r\n    margin: 19px auto 0;\r\n}\r\n\r\n\/* =========================================================\r\n   3. BUSCADOR\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-search-box {\r\n    position: relative;\r\n    max-width: 850px;\r\n    margin: 0 auto 42px;\r\n}\r\n\r\n#fromcold-catalogo .fc-search {\r\n    width: 100%;\r\n    height: 66px;\r\n    border: 1px solid #dce7f1;\r\n    border-radius: 34px;\r\n    background: #fff;\r\n    padding: 0 25px 0 58px;\r\n    font: 400 15px 'Outfit', sans-serif;\r\n    color: #17324d;\r\n    outline: none;\r\n    box-shadow: 0 12px 35px rgba(20,65,105,.07);\r\n    transition: .25s;\r\n}\r\n\r\n#fromcold-catalogo .fc-search:focus {\r\n    border-color: #005baa;\r\n    box-shadow: 0 12px 35px rgba(0,91,170,.12);\r\n}\r\n\r\n#fromcold-catalogo .fc-search::placeholder {\r\n    color: #8da0b2;\r\n}\r\n\r\n#fromcold-catalogo .fc-search-icon {\r\n    position: absolute;\r\n    left: 23px;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    width: 20px;\r\n    height: 20px;\r\n    pointer-events: none;\r\n}\r\n\r\n#fromcold-catalogo .fc-search-icon svg {\r\n    width: 100%;\r\n    height: 100%;\r\n    stroke: #005baa;\r\n}\r\n\r\n\/* =========================================================\r\n   4. DISTRIBUCI\u00d3N Y BARRA LATERAL\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-layout {\r\n    display: grid;\r\n    grid-template-columns: 280px minmax(0, 1fr);\r\n    gap: 30px;\r\n    align-items: start;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar {\r\n    position: sticky;\r\n    top: 24px;\r\n    max-height: calc(100vh - 48px);\r\n    overflow-y: auto;\r\n    overscroll-behavior: contain;\r\n    background: #fff;\r\n    border: 1px solid #e2ebf3;\r\n    border-radius: 22px;\r\n    padding: 22px;\r\n    box-shadow: 0 12px 35px rgba(23,55,85,.06);\r\n    scrollbar-width: thin;\r\n    scrollbar-color: #9dbbd3 #edf4f9;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar::-webkit-scrollbar {\r\n    width: 7px;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar::-webkit-scrollbar-track {\r\n    background: #edf4f9;\r\n    border-radius: 10px;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar::-webkit-scrollbar-thumb {\r\n    background: #9dbbd3;\r\n    border-radius: 10px;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar::-webkit-scrollbar-thumb:hover {\r\n    background: #005baa;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar-head {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 10px;\r\n    margin-bottom: 15px;\r\n}\r\n\r\n#fromcold-catalogo .fc-sidebar-title {\r\n    font-size: 20px;\r\n    font-weight: 700;\r\n    color: #12304b;\r\n}\r\n\r\n#fromcold-catalogo .fc-clear {\r\n    border: 0;\r\n    background: transparent;\r\n    color: #005baa;\r\n    font: 600 12px 'Outfit', sans-serif;\r\n    cursor: pointer;\r\n    padding: 5px;\r\n}\r\n\r\n\/* =========================================================\r\n   5. FILTROS DESPLEGABLES\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-filter-group {\r\n    border-top: 1px solid #eaf0f5;\r\n    margin: 0;\r\n}\r\n\r\n#fromcold-catalogo .fc-filter-toggle {\r\n    width: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 12px;\r\n    padding: 16px 2px;\r\n    border: 0;\r\n    background: transparent;\r\n    color: #12304b;\r\n    font: 700 13px 'Outfit', sans-serif;\r\n    text-align: left;\r\n    cursor: pointer;\r\n}\r\n\r\n#fromcold-catalogo .fc-filter-toggle:hover {\r\n    color: #005baa;\r\n}\r\n\r\n#fromcold-catalogo .fc-filter-toggle .fc-chevron {\r\n    width: 17px;\r\n    height: 17px;\r\n    flex: 0 0 17px;\r\n    stroke: #005baa;\r\n    transition: transform .22s ease;\r\n}\r\n\r\n#fromcold-catalogo .fc-filter-group.fc-expanded .fc-chevron {\r\n    transform: rotate(180deg);\r\n}\r\n\r\n#fromcold-catalogo .fc-filter-content {\r\n    display: none;\r\n    padding: 0 0 14px;\r\n}\r\n\r\n#fromcold-catalogo .fc-filter-group.fc-expanded .fc-filter-content {\r\n    display: block;\r\n}\r\n\r\n#fromcold-catalogo .fc-options {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 4px;\r\n}\r\n\r\n#fromcold-catalogo .fc-option {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    width: 100%;\r\n    min-height: 35px;\r\n    padding: 7px 9px;\r\n    border-radius: 9px;\r\n    cursor: pointer;\r\n    transition: .2s;\r\n    font-size: 13px;\r\n    color: #50687d;\r\n}\r\n\r\n#fromcold-catalogo .fc-option:hover {\r\n    background: #f2f8fd;\r\n    color: #005baa;\r\n}\r\n\r\n#fromcold-catalogo .fc-option input {\r\n    position: absolute;\r\n    opacity: 0;\r\n    pointer-events: none;\r\n}\r\n\r\n#fromcold-catalogo .fc-check {\r\n    width: 17px;\r\n    height: 17px;\r\n    flex: 0 0 17px;\r\n    border: 1.5px solid #c8d6e3;\r\n    border-radius: 5px;\r\n    position: relative;\r\n    transition: .2s;\r\n}\r\n\r\n#fromcold-catalogo .fc-option input:checked + .fc-check {\r\n    background: #005baa;\r\n    border-color: #005baa;\r\n}\r\n\r\n#fromcold-catalogo .fc-option input:checked + .fc-check:after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 4px;\r\n    top: 1px;\r\n    width: 5px;\r\n    height: 9px;\r\n    border: solid white;\r\n    border-width: 0 2px 2px 0;\r\n    transform: rotate(45deg);\r\n}\r\n\r\n#fromcold-catalogo .fc-option-text {\r\n    line-height: 1.25;\r\n}\r\n\r\n\/* =========================================================\r\n   6. FILTRO M\u00d3VIL Y RESULTADOS\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-mobile-filter {\r\n    display: none;\r\n    width: 100%;\r\n    height: 52px;\r\n    border: 1px solid #dce7f1;\r\n    border-radius: 14px;\r\n    background: #fff;\r\n    font: 600 14px 'Outfit', sans-serif;\r\n    color: #12304b;\r\n    cursor: pointer;\r\n    margin-bottom: 18px;\r\n}\r\n\r\n#fromcold-catalogo .fc-mobile-filter svg {\r\n    width: 18px;\r\n    height: 18px;\r\n    vertical-align: middle;\r\n    margin-right: 8px;\r\n    stroke: #005baa;\r\n}\r\n\r\n#fromcold-catalogo .fc-results-head {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    gap: 15px;\r\n    margin-bottom: 18px;\r\n}\r\n\r\n#fromcold-catalogo .fc-results-count {\r\n    font-size: 14px;\r\n    color: #7c91a4;\r\n}\r\n\r\n#fromcold-catalogo .fc-results-count strong {\r\n    color: #17324d;\r\n    font-weight: 700;\r\n}\r\n\r\n\/* =========================================================\r\n   7. CUADR\u00cdCULA Y TARJETAS DE PRODUCTOS\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(3, minmax(0, 1fr));\r\n    gap: 22px;\r\n}\r\n\r\n#fromcold-catalogo .fc-card {\r\n    background: #fff;\r\n    border: 1px solid #e3ebf2;\r\n    border-radius: 20px;\r\n    overflow: hidden;\r\n    box-shadow: 0 10px 30px rgba(20,60,95,.055);\r\n    transition: transform .25s, box-shadow .25s, border-color .25s;\r\n    display: flex;\r\n    flex-direction: column;\r\n    min-width: 0;\r\n}\r\n\r\n#fromcold-catalogo .fc-card:hover {\r\n    transform: translateY(-5px);\r\n    border-color: #cbddea;\r\n    box-shadow: 0 18px 42px rgba(20,60,95,.12);\r\n}\r\n\r\n#fromcold-catalogo .fc-image {\r\n    height: 255px;\r\n    background: radial-gradient(circle at center, #f8fbfe 0%, #eef5fa 100%);\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    padding: 22px;\r\n    overflow: hidden;\r\n}\r\n\r\n#fromcold-catalogo .fc-image img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: contain;\r\n    transition: transform .3s;\r\n}\r\n\r\n#fromcold-catalogo .fc-card:hover .fc-image img {\r\n    transform: scale(1.045);\r\n}\r\n\r\n#fromcold-catalogo .fc-no-image {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: #a2b2c0;\r\n    text-align: center;\r\n}\r\n\r\n#fromcold-catalogo .fc-no-image svg {\r\n    width: 42px;\r\n    height: 42px;\r\n    margin-bottom: 8px;\r\n    stroke: #9fb0bf;\r\n}\r\n\r\n#fromcold-catalogo .fc-no-image span {\r\n    font-size: 12px;\r\n}\r\n\r\n#fromcold-catalogo .fc-body {\r\n    padding: 21px 21px 22px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    flex: 1;\r\n}\r\n\r\n#fromcold-catalogo .fc-brand {\r\n    font-size: 11px;\r\n    line-height: 1;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1.5px;\r\n    color: #005baa;\r\n    font-weight: 700;\r\n    margin-bottom: 10px;\r\n}\r\n\r\n#fromcold-catalogo .fc-number {\r\n    font-size: 10px;\r\n    color: #a1afbb;\r\n    margin-bottom: 7px;\r\n}\r\n\r\n#fromcold-catalogo .fc-card h3 {\r\n    margin: 0 0 8px;\r\n    color: #12304b;\r\n    font-size: 19px;\r\n    line-height: 1.25;\r\n    font-weight: 700;\r\n    overflow-wrap: anywhere;\r\n}\r\n\r\n#fromcold-catalogo .fc-model {\r\n    font-size: 13px;\r\n    color: #74889a;\r\n    margin-bottom: 14px;\r\n}\r\n\r\n#fromcold-catalogo .fc-model strong {\r\n    color: #4b6378;\r\n}\r\n\r\n#fromcold-catalogo .fc-tags {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 6px;\r\n    margin-bottom: 20px;\r\n}\r\n\r\n#fromcold-catalogo .fc-tag {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    min-height: 27px;\r\n    padding: 5px 9px;\r\n    border-radius: 7px;\r\n    background: #f1f7fc;\r\n    color: #4d6a82;\r\n    font-size: 10px;\r\n    font-weight: 600;\r\n}\r\n\r\n\/* =========================================================\r\n   8. BOT\u00d3N DE WHATSAPP\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-button {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 8px;\r\n    width: 100%;\r\n    min-height: 45px;\r\n    margin-top: auto;\r\n    border-radius: 11px;\r\n    background: #25D366;\r\n    color: #fff !important;\r\n    text-decoration: none !important;\r\n    font-size: 13px;\r\n    font-weight: 600;\r\n    transition: .22s;\r\n}\r\n\r\n#fromcold-catalogo .fc-button:hover {\r\n    background: #1ebe5d;\r\n    color: #fff !important;\r\n    transform: translateY(-1px);\r\n}\r\n\r\n#fromcold-catalogo .fc-button svg {\r\n    width: 17px;\r\n    height: 17px;\r\n    transition: transform .2s;\r\n}\r\n\r\n#fromcold-catalogo .fc-button:hover svg {\r\n    transform: translateX(2px);\r\n}\r\n\r\n\/* =========================================================\r\n   9. PAGINACI\u00d3N\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-pagination {\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-wrap: wrap;\r\n    gap: 8px;\r\n    margin-top: 35px;\r\n}\r\n\r\n#fromcold-catalogo .fc-page-btn {\r\n    min-width: 42px;\r\n    height: 42px;\r\n    padding: 0 12px;\r\n    border: 1px solid #dce7f1;\r\n    border-radius: 10px;\r\n    background: #fff;\r\n    color: #50687d;\r\n    font: 600 13px 'Outfit', sans-serif;\r\n    cursor: pointer;\r\n    transition: .2s;\r\n}\r\n\r\n#fromcold-catalogo .fc-page-btn:hover {\r\n    border-color: #005baa;\r\n    color: #005baa;\r\n    background: #f4f9fd;\r\n}\r\n\r\n#fromcold-catalogo .fc-page-btn.fc-active {\r\n    background: #005baa;\r\n    border-color: #005baa;\r\n    color: #fff;\r\n}\r\n\r\n#fromcold-catalogo .fc-page-btn.fc-disabled {\r\n    opacity: .45;\r\n    cursor: not-allowed;\r\n    pointer-events: none;\r\n}\r\n\r\n#fromcold-catalogo .fc-page-arrow {\r\n    font-size: 18px;\r\n    line-height: 1;\r\n}\r\n\r\n#fromcold-catalogo .fc-page-info {\r\n    width: 100%;\r\n    text-align: center;\r\n    margin-top: 6px;\r\n    color: #8a9cab;\r\n    font-size: 12px;\r\n}\r\n\r\n\/* =========================================================\r\n   10. CARGA, ERRORES Y ESTADOS VAC\u00cdOS\r\n========================================================= *\/\r\n\r\n#fromcold-catalogo .fc-loading {\r\n    grid-column: 1 \/ -1;\r\n    min-height: 280px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-direction: column;\r\n    gap: 15px;\r\n    color: #71869a;\r\n}\r\n\r\n#fromcold-catalogo .fc-spinner {\r\n    width: 38px;\r\n    height: 38px;\r\n    border: 3px solid #dce9f3;\r\n    border-top-color: #005baa;\r\n    border-radius: 50%;\r\n    animation: fc-spin .8s linear infinite;\r\n}\r\n\r\n@keyframes fc-spin {\r\n    to { transform: rotate(360deg); }\r\n}\r\n\r\n#fromcold-catalogo .fc-error {\r\n    grid-column: 1 \/ -1;\r\n    padding: 40px 25px;\r\n    text-align: center;\r\n    background: #fff;\r\n    border: 1px solid #e5edf3;\r\n    border-radius: 18px;\r\n    color: #6f8293;\r\n}\r\n\r\n#fromcold-catalogo .fc-error strong {\r\n    display: block;\r\n    color: #17324d;\r\n    font-size: 18px;\r\n    margin-bottom: 7px;\r\n}\r\n\r\n#fromcold-catalogo .fc-error small {\r\n    display: block;\r\n    margin-top: 12px;\r\n    color: #a0aebb;\r\n}\r\n\r\n#fromcold-catalogo .fc-empty {\r\n    grid-column: 1 \/ -1;\r\n    text-align: center;\r\n    padding: 65px 20px;\r\n    color: #8396a7;\r\n}\r\n\r\n#fromcold-catalogo .fc-empty svg {\r\n    width: 42px;\r\n    height: 42px;\r\n    stroke: #a8b8c6;\r\n    margin-bottom: 12px;\r\n}\r\n\r\n#fromcold-catalogo .fc-empty strong {\r\n    display: block;\r\n    color: #17324d;\r\n    font-size: 18px;\r\n    margin-bottom: 5px;\r\n}\r\n\r\n#fromcold-catalogo button,\r\n#fromcold-catalogo input {\r\n    font-family: 'Outfit', sans-serif;\r\n}\r\n\r\n\/* =========================================================\r\n   11. DISE\u00d1O RESPONSIVE\r\n========================================================= *\/\r\n\r\n@media (max-width: 1150px) {\r\n    #fromcold-catalogo .fc-grid {\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n    }\r\n}\r\n\r\n@media (max-width: 900px) {\r\n    #fromcold-catalogo {\r\n        padding: 40px 16px 65px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-layout {\r\n        display: block;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-mobile-filter {\r\n        display: block;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-sidebar {\r\n        display: none;\r\n        position: static;\r\n        max-height: min(65vh, 560px);\r\n        margin-bottom: 20px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-sidebar.fc-open {\r\n        display: block;\r\n    }\r\n}\r\n\r\n@media (max-width: 650px) {\r\n    #fromcold-catalogo .fc-heading {\r\n        margin-bottom: 25px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-heading h1 {\r\n        font-size: 35px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-search {\r\n        height: 58px;\r\n        font-size: 14px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-grid {\r\n        grid-template-columns: 1fr;\r\n        gap: 18px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-image {\r\n        height: 230px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-results-head {\r\n        margin-bottom: 14px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-pagination {\r\n        gap: 6px;\r\n        margin-top: 28px;\r\n    }\r\n\r\n    #fromcold-catalogo .fc-page-btn {\r\n        min-width: 38px;\r\n        height: 38px;\r\n        padding: 0 9px;\r\n        font-size: 12px;\r\n    }\r\n}\r\n<\/style>\r\n\r\n<!-- =========================================================\r\n     12. ESTRUCTURA HTML DEL CAT\u00c1LOGO\r\n========================================================= -->\r\n\r\n<div class=\"fc-wrap\">\r\n\r\n    <div class=\"fc-heading\">\r\n        <div class=\"fc-eyebrow\">Cat\u00e1logo From Cold<\/div>\r\n        <h1>Nuestros <span>productos<\/span><\/h1>\r\n        <div class=\"fc-heading-line\"><\/div>\r\n    <\/div>\r\n\r\n    <!-- BUSCADOR -->\r\n    <div class=\"fc-search-box\">\r\n        <div class=\"fc-search-icon\">\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                <circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle>\r\n                <path d=\"m20 20-4-4\"><\/path>\r\n            <\/svg>\r\n        <\/div>\r\n\r\n        <input\r\n            type=\"search\"\r\n            id=\"fc-search\"\r\n            class=\"fc-search\"\r\n            placeholder=\"Buscar producto, modelo, c\u00f3digo o marca...\"\r\n            autocomplete=\"off\"\r\n        >\r\n    <\/div>\r\n\r\n    <!-- BOT\u00d3N PARA FILTROS EN M\u00d3VIL -->\r\n    <button\r\n        type=\"button\"\r\n        id=\"fc-mobile-filter\"\r\n        class=\"fc-mobile-filter\"\r\n        aria-expanded=\"false\"\r\n    >\r\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n            <path d=\"M4 6h16\"><\/path>\r\n            <path d=\"M7 12h10\"><\/path>\r\n            <path d=\"M10 18h4\"><\/path>\r\n        <\/svg>\r\n        Filtrar productos\r\n    <\/button>\r\n\r\n    <div class=\"fc-layout\">\r\n\r\n        <!-- BARRA LATERAL DE FILTROS -->\r\n        <aside class=\"fc-sidebar\" id=\"fc-sidebar\">\r\n\r\n            <div class=\"fc-sidebar-head\">\r\n                <div class=\"fc-sidebar-title\">Filtros<\/div>\r\n                <button type=\"button\" class=\"fc-clear\" id=\"fc-clear\">\r\n                    Limpiar\r\n                <\/button>\r\n            <\/div>\r\n\r\n            <!-- CATEGOR\u00cdA -->\r\n            <section class=\"fc-filter-group\" data-filter-group=\"categoria\">\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"fc-filter-toggle\"\r\n                    aria-expanded=\"false\"\r\n                    aria-controls=\"fc-categorias\"\r\n                >\r\n                    <span>Categor\u00eda<\/span>\r\n                    <svg class=\"fc-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                        <path d=\"m6 9 6 6 6-6\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n\r\n                <div class=\"fc-filter-content\" id=\"fc-categorias\"><\/div>\r\n            <\/section>\r\n\r\n            <!-- MARCA -->\r\n            <section class=\"fc-filter-group\" data-filter-group=\"marca\">\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"fc-filter-toggle\"\r\n                    aria-expanded=\"false\"\r\n                    aria-controls=\"fc-marcas\"\r\n                >\r\n                    <span>Marca<\/span>\r\n                    <svg class=\"fc-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                        <path d=\"m6 9 6 6 6-6\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n\r\n                <div class=\"fc-filter-content\" id=\"fc-marcas\"><\/div>\r\n            <\/section>\r\n\r\n            <!-- APLICACI\u00d3N -->\r\n            <section class=\"fc-filter-group\" data-filter-group=\"aplicacion\">\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"fc-filter-toggle\"\r\n                    aria-expanded=\"false\"\r\n                    aria-controls=\"fc-aplicaciones\"\r\n                >\r\n                    <span>Aplicaci\u00f3n<\/span>\r\n                    <svg class=\"fc-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                        <path d=\"m6 9 6 6 6-6\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n\r\n                <div class=\"fc-filter-content\" id=\"fc-aplicaciones\"><\/div>\r\n            <\/section>\r\n\r\n            <!-- REFRIGERANTE -->\r\n            <section class=\"fc-filter-group\" data-filter-group=\"refrigerante\">\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"fc-filter-toggle\"\r\n                    aria-expanded=\"false\"\r\n                    aria-controls=\"fc-refrigerantes\"\r\n                >\r\n                    <span>Refrigerante<\/span>\r\n                    <svg class=\"fc-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                        <path d=\"m6 9 6 6 6-6\"><\/path>\r\n                    <\/svg>\r\n                <\/button>\r\n\r\n                <div class=\"fc-filter-content\" id=\"fc-refrigerantes\"><\/div>\r\n            <\/section>\r\n\r\n        <\/aside>\r\n\r\n        <!-- RESULTADOS -->\r\n        <main>\r\n\r\n            <div class=\"fc-results-head\">\r\n                <div class=\"fc-results-count\" id=\"fc-count\">\r\n                    Cargando productos...\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"fc-grid\" id=\"fc-grid\">\r\n                <div class=\"fc-loading\">\r\n                    <div class=\"fc-spinner\"><\/div>\r\n                    <span>Cargando cat\u00e1logo...<\/span>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"fc-pagination\" id=\"fc-pagination\"><\/div>\r\n\r\n        <\/main>\r\n\r\n    <\/div>\r\n<\/div>\r\n\r\n<!-- =========================================================\r\n     13. JAVASCRIPT: API, FILTROS, PRODUCTOS Y PAGINACI\u00d3N\r\n========================================================= -->\r\n\r\n<script>\r\n(function () {\r\n    \"use strict\";\r\n\r\n    \/* ---------------------------------------------------------\r\n       CONFIGURACI\u00d3N\r\n    --------------------------------------------------------- *\/\r\n\r\n    const API = window.location.origin + \"\/wp-json\/wp\/v2\/\";\r\n\r\n    const ENDPOINTS = {\r\n        productos: API + \"productos?per_page=100&_embed\",\r\n        marcas: API + \"marca?per_page=100\",\r\n        categorias: API + \"categorias?per_page=100\",\r\n        aplicaciones: API + \"aplicacion?per_page=100\",\r\n        refrigerantes: API + \"refrigerante?per_page=100\"\r\n    };\r\n\r\n    const PRODUCTS_PER_PAGE = 12;\r\n    const WHATSAPP_NUMBER = \"51972023667\";\r\n\r\n    const root = document.getElementById(\"fromcold-catalogo\");\r\n\r\n    if (!root || root.dataset.initialized === \"true\") {\r\n        return;\r\n    }\r\n\r\n    root.dataset.initialized = \"true\";\r\n\r\n    const grid = root.querySelector(\"#fc-grid\");\r\n    const count = root.querySelector(\"#fc-count\");\r\n    const search = root.querySelector(\"#fc-search\");\r\n    const clear = root.querySelector(\"#fc-clear\");\r\n    const sidebar = root.querySelector(\"#fc-sidebar\");\r\n    const mobileFilter = root.querySelector(\"#fc-mobile-filter\");\r\n    const pagination = root.querySelector(\"#fc-pagination\");\r\n\r\n    let products = [];\r\n    let currentPage = 1;\r\n\r\n    const terms = {\r\n        marca: {},\r\n        categoria: {},\r\n        aplicacion: {},\r\n        refrigerante: {}\r\n    };\r\n\r\n    let selected = {\r\n        marca: [],\r\n        categoria: [],\r\n        aplicacion: [],\r\n        refrigerante: []\r\n    };\r\n\r\n    \/* ---------------------------------------------------------\r\n       UTILIDADES\r\n    --------------------------------------------------------- *\/\r\n\r\n    function makeSlug(value) {\r\n        if (value === undefined || value === null) return \"\";\r\n\r\n        return String(value)\r\n            .toLowerCase()\r\n            .normalize(\"NFD\")\r\n            .replace(\/[\\u0300-\\u036f]\/g, \"\")\r\n            .replace(\/[^a-z0-9]+\/g, \"-\")\r\n            .replace(\/^-+|-+$\/g, \"\");\r\n    }\r\n\r\n    function cleanText(value) {\r\n        if (value === undefined || value === null) return \"\";\r\n\r\n        const element = document.createElement(\"div\");\r\n        element.innerHTML = String(value);\r\n\r\n        return (\r\n            element.textContent ||\r\n            element.innerText ||\r\n            \"\"\r\n        ).trim();\r\n    }\r\n\r\n    function termName(id, type) {\r\n        return (terms[type] || {})[String(id)] || \"\";\r\n    }\r\n\r\n    function normalizeTaxonomy(value, type) {\r\n        if (!Array.isArray(value)) {\r\n            value = value ? [value] : [];\r\n        }\r\n\r\n        return value.map(function (item) {\r\n            if (typeof item === \"number\") {\r\n                return {\r\n                    id: item,\r\n                    name: termName(item, type)\r\n                };\r\n            }\r\n\r\n            if (typeof item === \"string\") {\r\n                const number = parseInt(item, 10);\r\n\r\n                if (!Number.isNaN(number) && String(number) === item) {\r\n                    return {\r\n                        id: number,\r\n                        name: termName(number, type)\r\n                    };\r\n                }\r\n\r\n                return {\r\n                    id: null,\r\n                    name: item\r\n                };\r\n            }\r\n\r\n            if (item && typeof item === \"object\") {\r\n                return {\r\n                    id: item.id || null,\r\n                    name: item.name || termName(item.id, type) || \"\"\r\n                };\r\n            }\r\n\r\n            return null;\r\n        }).filter(function (item) {\r\n            return item && item.name;\r\n        });\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       IMAGEN DEL PRODUCTO\r\n    --------------------------------------------------------- *\/\r\n\r\n    function getProductImage(product) {\r\n        try {\r\n            const media =\r\n                product._embedded &&\r\n                product._embedded[\"wp:featuredmedia\"] &&\r\n                product._embedded[\"wp:featuredmedia\"][0];\r\n\r\n            if (media && media.source_url) {\r\n                return media.source_url;\r\n            }\r\n        } catch (error) {}\r\n\r\n        try {\r\n            const content =\r\n                product.content &&\r\n                product.content.rendered || \"\";\r\n\r\n            const temporary = document.createElement(\"div\");\r\n            temporary.innerHTML = content;\r\n\r\n            const image = temporary.querySelector(\"img\");\r\n\r\n            if (image && image.src) {\r\n                return image.src;\r\n            }\r\n        } catch (error) {}\r\n\r\n        return \"\";\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       NORMALIZACI\u00d3N DE PRODUCTOS\r\n    --------------------------------------------------------- *\/\r\n\r\n    function normalizeProduct(product) {\r\n        const acf = product.acf || {};\r\n\r\n        const codigo =\r\n            cleanText(acf.codigo) ||\r\n            cleanText(product.codigo) ||\r\n            cleanText(product.meta && product.meta.codigo) ||\r\n            \"\";\r\n\r\n        const modelo =\r\n            cleanText(acf.modelo) ||\r\n            cleanText(acf.model) ||\r\n            \"\";\r\n\r\n        const title =\r\n            cleanText(product.title && product.title.rendered) ||\r\n            modelo ||\r\n            \"Producto From Cold\";\r\n\r\n        return {\r\n            id: product.id,\r\n            codigo: codigo,\r\n            title: title,\r\n            modelo: modelo,\r\n\r\n            descripcion:\r\n                cleanText(acf.descripcion_corta) ||\r\n                cleanText(acf.descripcion) ||\r\n                \"\",\r\n\r\n            disponibilidad: cleanText(acf.disponibilidad) || \"\",\r\n            link: product.link || \"#\",\r\n            image: getProductImage(product),\r\n\r\n            marcas: normalizeTaxonomy(acf.marca, \"marca\"),\r\n\r\n            categorias: normalizeTaxonomy(\r\n                acf.categorias || acf.categoria,\r\n                \"categoria\"\r\n            ),\r\n\r\n            aplicaciones: normalizeTaxonomy(\r\n                acf.aplicacion,\r\n                \"aplicacion\"\r\n            ),\r\n\r\n            refrigerantes: normalizeTaxonomy(\r\n                acf.refrigerante,\r\n                \"refrigerante\"\r\n            )\r\n        };\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       CARGA DE TAXONOM\u00cdAS\r\n    --------------------------------------------------------- *\/\r\n\r\n    async function loadTerms() {\r\n        const urls = [\r\n            ENDPOINTS.marcas,\r\n            ENDPOINTS.categorias,\r\n            ENDPOINTS.aplicaciones,\r\n            ENDPOINTS.refrigerantes\r\n        ];\r\n\r\n        const responses = await Promise.all(\r\n            urls.map(function (url) {\r\n                return fetch(url);\r\n            })\r\n        );\r\n\r\n        if (responses.some(function (response) {\r\n            return !response.ok;\r\n        })) {\r\n            throw new Error(\r\n                \"No se pudieron cargar las taxonom\u00edas. \" +\r\n                \"Comprueba que est\u00e9n disponibles en la API REST.\"\r\n            );\r\n        }\r\n\r\n        const data = await Promise.all(\r\n            responses.map(function (response) {\r\n                return response.json();\r\n            })\r\n        );\r\n\r\n        [\"marca\", \"categoria\", \"aplicacion\", \"refrigerante\"]\r\n            .forEach(function (type, index) {\r\n                data[index].forEach(function (item) {\r\n                    terms[type][String(item.id)] = item.name;\r\n                });\r\n            });\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       CONSTRUIR OPCIONES DE FILTROS\r\n    --------------------------------------------------------- *\/\r\n\r\n    function renderFilterOptions() {\r\n        renderOptions(\"fc-marcas\", terms.marca, \"marca\");\r\n        renderOptions(\"fc-categorias\", terms.categoria, \"categoria\");\r\n        renderOptions(\"fc-aplicaciones\", terms.aplicacion, \"aplicacion\");\r\n        renderOptions(\"fc-refrigerantes\", terms.refrigerante, \"refrigerante\");\r\n    }\r\n\r\n    function renderOptions(containerId, collection, type) {\r\n        const container = root.querySelector(\"#\" + containerId);\r\n\r\n        if (!container) return;\r\n\r\n        container.innerHTML = \"\";\r\n\r\n        const options = document.createElement(\"div\");\r\n        options.className = \"fc-options\";\r\n\r\n        Object.entries(collection)\r\n            .sort(function (a, b) {\r\n                return a[1].localeCompare(\r\n                    b[1],\r\n                    \"es\",\r\n                    { sensitivity: \"base\" }\r\n                );\r\n            })\r\n            .forEach(function (entry) {\r\n                const id = entry[0];\r\n                const name = entry[1];\r\n\r\n                const label = document.createElement(\"label\");\r\n                label.className = \"fc-option\";\r\n\r\n                const input = document.createElement(\"input\");\r\n                input.type = \"checkbox\";\r\n                input.value = makeSlug(name);\r\n                input.dataset.type = type;\r\n                input.dataset.id = id;\r\n\r\n                const check = document.createElement(\"span\");\r\n                check.className = \"fc-check\";\r\n\r\n                const text = document.createElement(\"span\");\r\n                text.className = \"fc-option-text\";\r\n                text.textContent = name;\r\n\r\n                label.append(input, check, text);\r\n\r\n                input.addEventListener(\"change\", function () {\r\n                    if (input.checked) {\r\n                        if (!selected[type].includes(input.value)) {\r\n                            selected[type].push(input.value);\r\n                        }\r\n                    } else {\r\n                        selected[type] = selected[type].filter(\r\n                            function (value) {\r\n                                return value !== input.value;\r\n                            }\r\n                        );\r\n                    }\r\n\r\n                    currentPage = 1;\r\n                    renderProducts();\r\n                });\r\n\r\n                options.appendChild(label);\r\n            });\r\n\r\n        container.appendChild(options);\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       FILTRAR PRODUCTOS\r\n    --------------------------------------------------------- *\/\r\n\r\n    function productMatchesTaxonomy(product, taxonomy, values) {\r\n        if (!values.length) return true;\r\n\r\n        const keys = {\r\n            marca: \"marcas\",\r\n            categoria: \"categorias\",\r\n            aplicacion: \"aplicaciones\",\r\n            refrigerante: \"refrigerantes\"\r\n        };\r\n\r\n        const list = (product[keys[taxonomy]] || []).map(\r\n            function (item) {\r\n                return makeSlug(item.name);\r\n            }\r\n        );\r\n\r\n        return values.some(function (value) {\r\n            return list.includes(value);\r\n        });\r\n    }\r\n\r\n    function getFilteredProducts() {\r\n        const query = makeSlug(search.value);\r\n\r\n        return products.filter(function (product) {\r\n            if (query) {\r\n                const searchable = [\r\n                    product.codigo,\r\n                    product.title,\r\n                    product.modelo,\r\n                    product.descripcion,\r\n                    product.disponibilidad,\r\n                    ...product.marcas.map(function (item) {\r\n                        return item.name;\r\n                    }),\r\n                    ...product.categorias.map(function (item) {\r\n                        return item.name;\r\n                    }),\r\n                    ...product.aplicaciones.map(function (item) {\r\n                        return item.name;\r\n                    }),\r\n                    ...product.refrigerantes.map(function (item) {\r\n                        return item.name;\r\n                    })\r\n                ].join(\" \");\r\n\r\n                if (!makeSlug(searchable).includes(query)) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return (\r\n                productMatchesTaxonomy(product, \"marca\", selected.marca) &&\r\n                productMatchesTaxonomy(product, \"categoria\", selected.categoria) &&\r\n                productMatchesTaxonomy(product, \"aplicacion\", selected.aplicacion) &&\r\n                productMatchesTaxonomy(product, \"refrigerante\", selected.refrigerante)\r\n            );\r\n        });\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       ETIQUETAS DE PRODUCTOS\r\n    --------------------------------------------------------- *\/\r\n\r\n    function createTags(product) {\r\n        return [\r\n            ...new Set(\r\n                [\r\n                    ...product.aplicaciones,\r\n                    ...product.refrigerantes,\r\n                    ...product.categorias\r\n                ].map(function (item) {\r\n                    return item.name;\r\n                })\r\n            )\r\n        ];\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       ENLACE DE WHATSAPP\r\n    --------------------------------------------------------- *\/\r\n\r\n    function createWhatsAppURL(product) {\r\n        const brand = product.marcas.length\r\n            ? product.marcas.map(function (item) {\r\n                return item.name;\r\n            }).join(\" \u00b7 \")\r\n            : \"No especificada\";\r\n\r\n        let message =\r\n            \"Hola, From Cold.\\n\\n\" +\r\n            \"Estoy interesado en este producto y quisiera m\u00e1s informaci\u00f3n y asesor\u00eda:\\n\\n\";\r\n\r\n        if (product.codigo) {\r\n            message += \"C\u00f3digo: \" + product.codigo + \"\\n\";\r\n        }\r\n\r\n        message += \"Producto: \" + product.title + \"\\n\";\r\n\r\n        if (product.modelo) {\r\n            message += \"Modelo: \" + product.modelo + \"\\n\";\r\n        }\r\n\r\n        message += \"Marca: \" + brand + \"\\n\";\r\n\r\n        if (product.image) {\r\n            message += \"\\nImagen del producto:\\n\" + product.image + \"\\n\";\r\n        }\r\n\r\n        message += \"\\nQuedo atento a su asesor\u00eda. Gracias.\";\r\n\r\n        return (\r\n            \"https:\/\/wa.me\/\" +\r\n            WHATSAPP_NUMBER +\r\n            \"?text=\" +\r\n            encodeURIComponent(message)\r\n        );\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       IMAGEN NO DISPONIBLE\r\n    --------------------------------------------------------- *\/\r\n\r\n    function noImageMarkup() {\r\n        return `\r\n            <div class=\"fc-no-image\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\"\r\n                     stroke=\"currentColor\" stroke-width=\"1.5\">\r\n                    <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"><\/rect>\r\n                    <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"><\/circle>\r\n                    <path d=\"m21 15-5-5L5 21\"><\/path>\r\n                <\/svg>\r\n                <span>Imagen no disponible<\/span>\r\n            <\/div>\r\n        `;\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       CREAR TARJETA DE PRODUCTO\r\n    --------------------------------------------------------- *\/\r\n\r\n    function createCard(product) {\r\n        const card = document.createElement(\"article\");\r\n        card.className = \"fc-card\";\r\n\r\n        const imageBox = document.createElement(\"div\");\r\n        imageBox.className = \"fc-image\";\r\n\r\n        if (product.image) {\r\n            const img = document.createElement(\"img\");\r\n\r\n            img.src = product.image;\r\n            img.alt = product.title;\r\n            img.loading = \"lazy\";\r\n\r\n            img.onerror = function () {\r\n                imageBox.innerHTML = noImageMarkup();\r\n            };\r\n\r\n            imageBox.appendChild(img);\r\n        } else {\r\n            imageBox.innerHTML = noImageMarkup();\r\n        }\r\n\r\n        const body = document.createElement(\"div\");\r\n        body.className = \"fc-body\";\r\n\r\n        const brand = document.createElement(\"div\");\r\n        brand.className = \"fc-brand\";\r\n        brand.textContent = product.marcas.length\r\n            ? product.marcas.map(function (item) {\r\n                return item.name;\r\n            }).join(\" \u00b7 \")\r\n            : \"FROM COLD\";\r\n\r\n        const number = document.createElement(\"div\");\r\n        number.className = \"fc-number\";\r\n        number.textContent = product.codigo || \"C\u00f3digo pendiente\";\r\n\r\n        const title = document.createElement(\"h3\");\r\n        title.textContent = product.title;\r\n\r\n        body.append(brand, number, title);\r\n\r\n        if (product.modelo) {\r\n            const model = document.createElement(\"div\");\r\n            model.className = \"fc-model\";\r\n\r\n            const strong = document.createElement(\"strong\");\r\n            strong.textContent = \"Modelo: \";\r\n\r\n            model.append(\r\n                strong,\r\n                document.createTextNode(product.modelo)\r\n            );\r\n\r\n            body.appendChild(model);\r\n        }\r\n\r\n        const tags = document.createElement(\"div\");\r\n        tags.className = \"fc-tags\";\r\n\r\n        createTags(product).slice(0, 6).forEach(function (tag) {\r\n            const span = document.createElement(\"span\");\r\n            span.className = \"fc-tag\";\r\n            span.textContent = tag;\r\n            tags.appendChild(span);\r\n        });\r\n\r\n        if (tags.children.length) {\r\n            body.appendChild(tags);\r\n        }\r\n\r\n        const button = document.createElement(\"a\");\r\n        button.className = \"fc-button\";\r\n        button.href = createWhatsAppURL(product);\r\n        button.target = \"_blank\";\r\n        button.rel = \"noopener noreferrer\";\r\n\r\n        button.innerHTML = `\r\n            <span>Quiero m\u00e1s informaci\u00f3n<\/span>\r\n            <svg viewBox=\"0 0 24 24\" fill=\"none\"\r\n                 stroke=\"currentColor\" stroke-width=\"2\">\r\n                <path d=\"M5 12h14\"><\/path>\r\n                <path d=\"m13 6 6 6-6 6\"><\/path>\r\n            <\/svg>\r\n        `;\r\n\r\n        body.appendChild(button);\r\n        card.append(imageBox, body);\r\n\r\n        return card;\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       DESPLAZAMIENTO AL CAT\u00c1LOGO\r\n    --------------------------------------------------------- *\/\r\n\r\n    function scrollToCatalog() {\r\n        const catalog = root;\r\n\r\n        if (!catalog) return;\r\n\r\n        window.scrollTo({\r\n            top: window.pageYOffset +\r\n                catalog.getBoundingClientRect().top - 24,\r\n            behavior: \"smooth\"\r\n        });\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       PAGINACI\u00d3N\r\n    --------------------------------------------------------- *\/\r\n\r\n    function getPaginationPages(current, total) {\r\n        if (total <= 7) {\r\n            return Array.from(\r\n                { length: total },\r\n                function (_, index) {\r\n                    return index + 1;\r\n                }\r\n            );\r\n        }\r\n\r\n        const pages = [1];\r\n\r\n        if (current > 4) {\r\n            pages.push(\"\u2026\");\r\n        }\r\n\r\n        for (\r\n            let index = Math.max(2, current - 1);\r\n            index <= Math.min(total - 1, current + 1);\r\n            index++\r\n        ) {\r\n            pages.push(index);\r\n        }\r\n\r\n        if (current < total - 3) {\r\n            pages.push(\"\u2026\");\r\n        }\r\n\r\n        pages.push(total);\r\n\r\n        return pages;\r\n    }\r\n\r\n    function renderPagination(totalProducts) {\r\n        pagination.innerHTML = \"\";\r\n\r\n        const totalPages = Math.ceil(\r\n            totalProducts \/ PRODUCTS_PER_PAGE\r\n        );\r\n\r\n        if (totalPages <= 1) return;\r\n\r\n        function addButton(label, page, disabled, active, arrow) {\r\n            const button = document.createElement(\"button\");\r\n\r\n            button.type = \"button\";\r\n\r\n            button.className =\r\n                \"fc-page-btn\" +\r\n                (active ? \" fc-active\" : \"\") +\r\n                (disabled ? \" fc-disabled\" : \"\") +\r\n                (arrow ? \" fc-page-arrow\" : \"\");\r\n\r\n            button.textContent = label;\r\n\r\n            if (!disabled) {\r\n                button.addEventListener(\"click\", function () {\r\n                    currentPage = page;\r\n                    renderProducts();\r\n                    scrollToCatalog();\r\n                });\r\n            }\r\n\r\n            pagination.appendChild(button);\r\n        }\r\n\r\n        addButton(\"\u2039\", currentPage - 1, currentPage <= 1, false, true);\r\n\r\n        getPaginationPages(currentPage, totalPages).forEach(\r\n            function (page) {\r\n                if (page === \"\u2026\") {\r\n                    const dots = document.createElement(\"span\");\r\n                    dots.className = \"fc-page-info\";\r\n                    dots.style.width = \"30px\";\r\n                    dots.textContent = \"\u2026\";\r\n                    pagination.appendChild(dots);\r\n                } else {\r\n                    addButton(\r\n                        String(page),\r\n                        page,\r\n                        false,\r\n                        page === currentPage,\r\n                        false\r\n                    );\r\n                }\r\n            }\r\n        );\r\n\r\n        addButton(\r\n            \"\u203a\",\r\n            currentPage + 1,\r\n            currentPage >= totalPages,\r\n            false,\r\n            true\r\n        );\r\n\r\n        const info = document.createElement(\"div\");\r\n        info.className = \"fc-page-info\";\r\n        info.textContent =\r\n            \"P\u00e1gina \" + currentPage + \" de \" + totalPages;\r\n\r\n        pagination.appendChild(info);\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       MOSTRAR RESULTADOS\r\n    --------------------------------------------------------- *\/\r\n\r\n    function renderProducts() {\r\n        const filtered = getFilteredProducts();\r\n\r\n        const totalPages = Math.max(\r\n            1,\r\n            Math.ceil(filtered.length \/ PRODUCTS_PER_PAGE)\r\n        );\r\n\r\n        if (currentPage > totalPages) {\r\n            currentPage = totalPages;\r\n        }\r\n\r\n        count.innerHTML =\r\n            \"<strong>\" + filtered.length + \"<\/strong> \" +\r\n            (filtered.length === 1\r\n                ? \"producto encontrado\"\r\n                : \"productos encontrados\");\r\n\r\n        grid.innerHTML = \"\";\r\n\r\n        if (!filtered.length) {\r\n            pagination.innerHTML = \"\";\r\n\r\n            grid.innerHTML = `\r\n                <div class=\"fc-empty\">\r\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\"\r\n                         stroke=\"currentColor\" stroke-width=\"1.5\">\r\n                        <circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle>\r\n                        <path d=\"m20 20-4-4\"><\/path>\r\n                    <\/svg>\r\n                    <strong>No encontramos productos<\/strong>\r\n                    <span>Prueba cambiando los filtros o la b\u00fasqueda.<\/span>\r\n                <\/div>\r\n            `;\r\n\r\n            return;\r\n        }\r\n\r\n        filtered\r\n            .slice(\r\n                (currentPage - 1) * PRODUCTS_PER_PAGE,\r\n                currentPage * PRODUCTS_PER_PAGE\r\n            )\r\n            .forEach(function (product) {\r\n                grid.appendChild(createCard(product));\r\n            });\r\n\r\n        renderPagination(filtered.length);\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       CARGAR PRODUCTOS DESDE WORDPRESS\r\n    --------------------------------------------------------- *\/\r\n\r\n    async function loadProducts() {\r\n        try {\r\n            await loadTerms();\r\n\r\n            const response = await fetch(ENDPOINTS.productos);\r\n\r\n            if (!response.ok) {\r\n                throw new Error(\"No se pudieron cargar los productos.\");\r\n            }\r\n\r\n            const data = await response.json();\r\n\r\n            if (!Array.isArray(data)) {\r\n                throw new Error(\"La respuesta de productos no es v\u00e1lida.\");\r\n            }\r\n\r\n            products = data.map(normalizeProduct);\r\n\r\n            renderFilterOptions();\r\n            renderProducts();\r\n\r\n        } catch (error) {\r\n            console.error(\"FROM COLD CAT\u00c1LOGO:\", error);\r\n\r\n            count.textContent = \"No se pudo cargar el cat\u00e1logo\";\r\n            pagination.innerHTML = \"\";\r\n\r\n            grid.innerHTML = `\r\n                <div class=\"fc-error\">\r\n                    <strong>No se pudieron cargar los productos<\/strong>\r\n                    <span>\r\n                        Hubo un problema al conectar el cat\u00e1logo con WordPress.\r\n                    <\/span>\r\n                    <small>Endpoint: \/wp-json\/wp\/v2\/productos<\/small>\r\n                <\/div>\r\n            `;\r\n        }\r\n    }\r\n\r\n    \/* ---------------------------------------------------------\r\n       EVENTOS DEL BUSCADOR\r\n    --------------------------------------------------------- *\/\r\n\r\n    search.addEventListener(\"input\", function () {\r\n        currentPage = 1;\r\n        renderProducts();\r\n    });\r\n\r\n    \/* ---------------------------------------------------------\r\n       LIMPIAR FILTROS Y B\u00daSQUEDA\r\n    --------------------------------------------------------- *\/\r\n\r\n    clear.addEventListener(\"click\", function () {\r\n        selected = {\r\n            marca: [],\r\n            categoria: [],\r\n            aplicacion: [],\r\n            refrigerante: []\r\n        };\r\n\r\n        root.querySelectorAll(\".fc-option input\").forEach(\r\n            function (input) {\r\n                input.checked = false;\r\n            }\r\n        );\r\n\r\n        search.value = \"\";\r\n        currentPage = 1;\r\n\r\n        renderProducts();\r\n    });\r\n\r\n    \/* ---------------------------------------------------------\r\n       FILTROS EN M\u00d3VIL\r\n    --------------------------------------------------------- *\/\r\n\r\n    mobileFilter.addEventListener(\"click\", function () {\r\n        const open = sidebar.classList.toggle(\"fc-open\");\r\n\r\n        mobileFilter.setAttribute(\r\n            \"aria-expanded\",\r\n            String(open)\r\n        );\r\n\r\n        mobileFilter.innerHTML = open\r\n            ? `\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                    <path d=\"m6 6 12 12\"><\/path>\r\n                    <path d=\"M18 6 6 18\"><\/path>\r\n                <\/svg>\r\n                Ocultar filtros\r\n            `\r\n            : `\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\">\r\n                    <path d=\"M4 6h16\"><\/path>\r\n                    <path d=\"M7 12h10\"><\/path>\r\n                    <path d=\"M10 18h4\"><\/path>\r\n                <\/svg>\r\n                Filtrar productos\r\n            `;\r\n    });\r\n\r\n    \/* ---------------------------------------------------------\r\n       ACORDEONES DE LOS FILTROS\r\n    --------------------------------------------------------- *\/\r\n\r\n    root.querySelectorAll(\".fc-filter-toggle\").forEach(\r\n        function (button) {\r\n            button.addEventListener(\"click\", function () {\r\n                const group = button.closest(\".fc-filter-group\");\r\n\r\n                const expanded = group.classList.toggle(\r\n                    \"fc-expanded\"\r\n                );\r\n\r\n                button.setAttribute(\r\n                    \"aria-expanded\",\r\n                    String(expanded)\r\n                );\r\n            });\r\n        }\r\n    );\r\n\r\n    \/* ---------------------------------------------------------\r\n       INICIALIZAR CAT\u00c1LOGO\r\n    --------------------------------------------------------- *\/\r\n\r\n    loadProducts();\r\n\r\n})();\r\n<\/script>\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Cat\u00e1logo From Cold Nuestros productos Filtrar productos Filtros Limpiar Categor\u00eda Marca Aplicaci\u00f3n Refrigerante Cargando productos&#8230; Cargando cat\u00e1logo&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"_templately_pack_id":"","_templately_imported_at":"","_templately_source":"","_templately_import_session_id":"","footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>From Cold System &#8226; Productos<\/title>\n<meta name=\"description\" content=\"From Cold, especialistas en proyectos de refrigeraci\u00f3n industrial y productos como equipos, repuestos y soluciones para todo el Per\u00fa.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fromcold.com\/eng\/productos\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"From Cold System &#8226; Productos\" \/>\n<meta property=\"og:description\" content=\"From Cold, especialistas en proyectos de refrigeraci\u00f3n industrial y productos como equipos, repuestos y soluciones para todo el Per\u00fa.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fromcold.com\/eng\/productos\/\" \/>\n<meta property=\"og:site_name\" content=\"From Cold System\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/FromCold\/?locale=es_LA\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-23T14:26:42+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fromcold.com\\\/productos\\\/\",\"url\":\"https:\\\/\\\/fromcold.com\\\/productos\\\/\",\"name\":\"From Cold System &#8226; Productos\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fromcold.com\\\/#website\"},\"datePublished\":\"2021-06-18T23:33:20+00:00\",\"dateModified\":\"2026-10-23T14:26:42+00:00\",\"description\":\"From Cold, especialistas en proyectos de refrigeraci\u00f3n industrial y productos como equipos, repuestos y soluciones para todo el Per\u00fa.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fromcold.com\\\/productos\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fromcold.com\\\/productos\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fromcold.com\\\/productos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/fromcold.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Productos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fromcold.com\\\/#website\",\"url\":\"https:\\\/\\\/fromcold.com\\\/\",\"name\":\"From Cold System\",\"description\":\"Dedicada a la venta, mantenimiento y reparaci&oacute;n de equipos de refrigeraci&oacute;n Comercial-Industrial\",\"publisher\":{\"@id\":\"https:\\\/\\\/fromcold.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fromcold.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fromcold.com\\\/#organization\",\"name\":\"From Cold Sytem S.A.C.\",\"url\":\"https:\\\/\\\/fromcold.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fromcold.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fromcold.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/LOGO-FROM-COLD.png\",\"contentUrl\":\"https:\\\/\\\/fromcold.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/LOGO-FROM-COLD.png\",\"width\":4252,\"height\":4252,\"caption\":\"From Cold Sytem S.A.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/fromcold.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/FromCold\\\/?locale=es_LA\",\"https:\\\/\\\/www.tiktok.com\\\/@from.cold.system\",\"https:\\\/\\\/www.instagram.com\\\/fromcoldsystem\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"From Cold System &#8226; Productos","description":"From Cold, especialistas en proyectos de refrigeraci\u00f3n industrial y productos como equipos, repuestos y soluciones para todo el Per\u00fa.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fromcold.com\/eng\/productos\/","og_locale":"en_US","og_type":"article","og_title":"From Cold System &#8226; Productos","og_description":"From Cold, especialistas en proyectos de refrigeraci\u00f3n industrial y productos como equipos, repuestos y soluciones para todo el Per\u00fa.","og_url":"https:\/\/fromcold.com\/eng\/productos\/","og_site_name":"From Cold System","article_publisher":"https:\/\/www.facebook.com\/FromCold\/?locale=es_LA","article_modified_time":"2026-10-23T14:26:42+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/fromcold.com\/productos\/","url":"https:\/\/fromcold.com\/productos\/","name":"From Cold System &#8226; Productos","isPartOf":{"@id":"https:\/\/fromcold.com\/#website"},"datePublished":"2021-06-18T23:33:20+00:00","dateModified":"2026-10-23T14:26:42+00:00","description":"From Cold, especialistas en proyectos de refrigeraci\u00f3n industrial y productos como equipos, repuestos y soluciones para todo el Per\u00fa.","breadcrumb":{"@id":"https:\/\/fromcold.com\/productos\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fromcold.com\/productos\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fromcold.com\/productos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/fromcold.com\/"},{"@type":"ListItem","position":2,"name":"Productos"}]},{"@type":"WebSite","@id":"https:\/\/fromcold.com\/#website","url":"https:\/\/fromcold.com\/","name":"From Cold System","description":"Dedicada a la venta, mantenimiento y reparaci&oacute;n de equipos de refrigeraci&oacute;n Comercial-Industrial","publisher":{"@id":"https:\/\/fromcold.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fromcold.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fromcold.com\/#organization","name":"From Cold Sytem S.A.C.","url":"https:\/\/fromcold.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fromcold.com\/#\/schema\/logo\/image\/","url":"https:\/\/fromcold.com\/wp-content\/uploads\/2021\/06\/LOGO-FROM-COLD.png","contentUrl":"https:\/\/fromcold.com\/wp-content\/uploads\/2021\/06\/LOGO-FROM-COLD.png","width":4252,"height":4252,"caption":"From Cold Sytem S.A.C."},"image":{"@id":"https:\/\/fromcold.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/FromCold\/?locale=es_LA","https:\/\/www.tiktok.com\/@from.cold.system","https:\/\/www.instagram.com\/fromcoldsystem\/"]}]}},"_links":{"self":[{"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":77,"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":2294,"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/pages\/9\/revisions\/2294"}],"wp:attachment":[{"href":"https:\/\/fromcold.com\/eng\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}