{"id":4309,"date":"2026-10-02T12:04:16","date_gmt":"2026-10-02T10:04:16","guid":{"rendered":"https:\/\/exposecurity.net\/?page_id=4309"},"modified":"2026-10-08T12:01:00","modified_gmt":"2026-10-08T10:01:00","slug":"extras-decoracion","status":"publish","type":"page","link":"https:\/\/exposecurity.net\/en\/extras-decoracion\/","title":{"rendered":"Extras decoration"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4309\" class=\"elementor elementor-4309\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eed2612 e-con e-atomic-element e-flexbox-base e-default-div e-3f068eb \" data-id=\"eed2612\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"eed2612\" data-e-type=\"e-flexbox\" data-id=\"eed2612\">\n    \t\t<div class=\"elementor-element elementor-element-b0bc696 elementor-widget elementor-widget-html\" data-id=\"b0bc696\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"expoExtrasApp\">\r\n\r\n<style>\r\n\r\n#expoExtrasApp {\r\n    --green:#566b33;\r\n    --green-dark:#405124;\r\n    --green-soft:#eef2e7;\r\n    --light:#f6f6f4;\r\n    --border:#e1e1df;\r\n    --text:#1e1e1e;\r\n    --gray:#686868;\r\n    --white:#ffffff;\r\n\r\n    font-family:Arial,Helvetica,sans-serif;\r\n    color:var(--text);\r\n    box-sizing:border-box;\r\n}\r\n\r\n#expoExtrasApp *,\r\n#expoExtrasApp *:before,\r\n#expoExtrasApp *:after {\r\n    box-sizing:border-box;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CONTENEDOR GENERAL\r\n========================================================= *\/\r\n\r\n.expo-wrapper {\r\n    max-width:1480px;\r\n    margin:auto;\r\n    padding:30px 20px 130px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CABECERO\r\n==================================================\/* =========================================================\r\n   CABECERO \/ BANNER\r\n========================================================= *\/\r\n\r\n.expo-hero {\r\n    position: relative;\r\n    overflow: hidden;\r\n\r\n    background:\r\n        linear-gradient(\r\n            90deg,\r\n            rgba(34, 46, 20, 0.94) 0%,\r\n            rgba(49, 65, 29, 0.82) 42%,\r\n            rgba(49, 65, 29, 0.42) 72%,\r\n            rgba(49, 65, 29, 0.18) 100%\r\n        ),\r\n        url(\"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Montaje-del-stand-EXPOSECURITY.png\");\r\n\r\n    background-size: cover;\r\n    background-position: center center;\r\n    background-repeat: no-repeat;\r\n\r\n    color: white;\r\n\r\n    border-radius: 24px;\r\n\r\n    min-height: 390px;\r\n\r\n    padding: 55px 50px;\r\n\r\n    margin-bottom: 22px;\r\n\r\n    display: flex;\r\n    align-items: center;\r\n\r\n    box-shadow:\r\n        0 16px 40px\r\n        rgba(47,63,26,.14);\r\n}\r\n\r\n\r\n.expo-hero:before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n\r\n    background:\r\n        linear-gradient(\r\n            180deg,\r\n            rgba(0,0,0,.02),\r\n            rgba(0,0,0,.14)\r\n        );\r\n\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n.expo-hero-content {\r\n    position: relative;\r\n    z-index: 2;\r\n\r\n    max-width: 760px;\r\n}\r\n\r\n\r\n.expo-hero h1 {\r\n    margin: 0 0 18px;\r\n\r\n    font-size:\r\n        clamp(\r\n            34px,\r\n            4.3vw,\r\n            54px\r\n        );\r\n\r\n    line-height: 1.04;\r\n\r\n    letter-spacing: -1.4px;\r\n\r\n    font-weight: 800;\r\n\r\n    text-shadow:\r\n        0 2px 15px\r\n        rgba(0,0,0,.20);\r\n}\r\n\r\n\r\n.expo-hero p {\r\n    max-width: 710px;\r\n\r\n    margin: 0;\r\n\r\n    font-size: 17px;\r\n\r\n    line-height: 1.65;\r\n\r\n    color:\r\n        rgba(255,255,255,.95);\r\n\r\n    text-shadow:\r\n        0 1px 8px\r\n        rgba(0,0,0,.18);\r\n}\r\n\r\n\r\n.expo-hero-steps {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n\r\n    gap: 9px;\r\n\r\n    margin-top: 27px;\r\n}\r\n\r\n\r\n.expo-hero-step {\r\n    display: inline-flex;\r\n\r\n    align-items: center;\r\n\r\n    gap: 8px;\r\n\r\n    padding: 9px 13px;\r\n\r\n    background:\r\n        rgba(20,25,15,.40);\r\n\r\n    backdrop-filter:\r\n        blur(5px);\r\n\r\n    -webkit-backdrop-filter:\r\n        blur(5px);\r\n\r\n    border:\r\n        1px solid\r\n        rgba(255,255,255,.22);\r\n\r\n    border-radius: 10px;\r\n\r\n    font-size: 12px;\r\n\r\n    font-weight: 600;\r\n\r\n    color: white;\r\n}\r\n\r\n\r\n.expo-hero-step-number {\r\n    display: flex;\r\n\r\n    align-items: center;\r\n    justify-content: center;\r\n\r\n    width: 23px;\r\n    height: 23px;\r\n\r\n    flex: 0 0 23px;\r\n\r\n    border-radius: 50%;\r\n\r\n    background: white;\r\n\r\n    color: #405124;\r\n\r\n    font-size: 11px;\r\n\r\n    font-weight: 800;\r\n}\r\n\r\n\r\n@media(max-width:600px) {\r\n\r\n    .expo-hero {\r\n        min-height: 430px;\r\n\r\n        padding:\r\n            34px\r\n            23px;\r\n\r\n        border-radius: 18px;\r\n\r\n        align-items: flex-end;\r\n\r\n        background-position:\r\n            center center;\r\n    }\r\n\r\n\r\n    .expo-hero h1 {\r\n        font-size: 33px;\r\n\r\n        letter-spacing: -.8px;\r\n    }\r\n\r\n\r\n    .expo-hero p {\r\n        font-size: 15px;\r\n\r\n        line-height: 1.55;\r\n    }\r\n\r\n\r\n    .expo-hero-steps {\r\n        display: grid;\r\n\r\n        grid-template-columns: 1fr;\r\n\r\n        gap: 7px;\r\n\r\n        margin-top: 20px;\r\n    }\r\n\r\n}\r\n\r\n\/* =========================================================\r\n   INFORMACI\u00d3N EL\u00c9CTRICA\r\n========================================================= *\/\r\n\r\n.expo-info {\r\n    display:flex;\r\n    gap:14px;\r\n    align-items:flex-start;\r\n\r\n    background:#f2f5ed;\r\n\r\n    border:1px solid #dce4d2;\r\n\r\n    padding:18px 20px;\r\n\r\n    border-radius:15px;\r\n\r\n    margin-bottom:25px;\r\n\r\n    font-size:14px;\r\n\r\n    line-height:1.6;\r\n}\r\n\r\n\r\n.expo-info-icon {\r\n    flex:0 0 35px;\r\n\r\n    width:35px;\r\n    height:35px;\r\n\r\n    border-radius:50%;\r\n\r\n    display:flex;\r\n\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    background:var(--green);\r\n\r\n    color:white;\r\n\r\n    font-weight:bold;\r\n\r\n    font-size:17px;\r\n}\r\n\r\n\r\n.expo-info strong {\r\n    color:var(--green-dark);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FILTROS\r\n========================================================= *\/\r\n\r\n.expo-toolbar {\r\n    display:flex;\r\n\r\n    justify-content:space-between;\r\n\r\n    align-items:center;\r\n\r\n    gap:15px;\r\n\r\n    margin-bottom:25px;\r\n\r\n    flex-wrap:wrap;\r\n}\r\n\r\n\r\n.expo-filters {\r\n    display:flex;\r\n\r\n    flex-wrap:wrap;\r\n\r\n    gap:8px;\r\n}\r\n\r\n\r\n.expo-filter {\r\n    background:white;\r\n\r\n    border:\r\n        1px solid\r\n        var(--border);\r\n\r\n    border-radius:30px;\r\n\r\n    padding:10px 17px;\r\n\r\n    cursor:pointer;\r\n\r\n    font-weight:700;\r\n\r\n    font-size:13px;\r\n\r\n    transition:.2s ease;\r\n}\r\n\r\n\r\n.expo-filter:hover {\r\n    border-color:var(--green);\r\n\r\n    color:var(--green-dark);\r\n}\r\n\r\n\r\n.expo-filter.active {\r\n    background:var(--green);\r\n\r\n    color:white;\r\n\r\n    border-color:var(--green);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCTOS\r\n========================================================= *\/\r\n\r\n.expo-products {\r\n    display:grid;\r\n\r\n    grid-template-columns:\r\n        repeat(4,1fr);\r\n\r\n    gap:20px;\r\n}\r\n\r\n\r\n.expo-product {\r\n    background:white;\r\n\r\n    border:\r\n        1px solid\r\n        var(--border);\r\n\r\n    border-radius:18px;\r\n\r\n    overflow:hidden;\r\n\r\n    display:flex;\r\n\r\n    flex-direction:column;\r\n\r\n    transition:\r\n        transform .2s ease,\r\n        box-shadow .2s ease,\r\n        border-color .2s ease;\r\n}\r\n\r\n\r\n.expo-product:hover {\r\n    transform:\r\n        translateY(-4px);\r\n\r\n    box-shadow:\r\n        0 14px 35px\r\n        rgba(0,0,0,.075);\r\n\r\n    border-color:#cfd5c8;\r\n}\r\n\r\n\r\n.expo-image {\r\n    height:240px;\r\n\r\n    background:#f7f7f6;\r\n\r\n    position:relative;\r\n\r\n    overflow:hidden;\r\n}\r\n\r\n\r\n.expo-image img {\r\n    width:100%;\r\n    height:100%;\r\n\r\n    object-fit:contain;\r\n\r\n    padding:13px;\r\n\r\n    transition:\r\n        transform .3s ease;\r\n}\r\n\r\n\r\n.expo-product:hover\r\n.expo-image img {\r\n    transform:scale(1.025);\r\n}\r\n\r\n\r\n.expo-category {\r\n    position:absolute;\r\n\r\n    left:12px;\r\n    top:12px;\r\n\r\n    background:\r\n        rgba(255,255,255,.95);\r\n\r\n    border:\r\n        1px solid\r\n        rgba(0,0,0,.05);\r\n\r\n    box-shadow:\r\n        0 3px 10px\r\n        rgba(0,0,0,.04);\r\n\r\n    border-radius:8px;\r\n\r\n    padding:6px 9px;\r\n\r\n    font-size:10px;\r\n\r\n    font-weight:800;\r\n\r\n    letter-spacing:.3px;\r\n\r\n    text-transform:uppercase;\r\n\r\n    color:var(--green-dark);\r\n}\r\n\r\n\r\n.expo-body {\r\n    padding:18px;\r\n\r\n    display:flex;\r\n\r\n    flex:1;\r\n\r\n    flex-direction:column;\r\n}\r\n\r\n\r\n.expo-body h3 {\r\n    margin:0 0 9px;\r\n\r\n    font-size:17px;\r\n\r\n    line-height:1.3;\r\n}\r\n\r\n\r\n.expo-description {\r\n    font-size:13px;\r\n\r\n    color:var(--gray);\r\n\r\n    line-height:1.5;\r\n\r\n    flex:1;\r\n}\r\n\r\n\r\n.expo-price {\r\n    font-size:25px;\r\n\r\n    font-weight:800;\r\n\r\n    margin:16px 0;\r\n\r\n    letter-spacing:-.4px;\r\n}\r\n\r\n\r\n.expo-price small {\r\n    font-size:11px;\r\n\r\n    color:#777;\r\n\r\n    font-weight:normal;\r\n\r\n    margin-left:3px;\r\n}\r\n\r\n\r\n.expo-add {\r\n    border:0;\r\n\r\n    background:var(--green);\r\n\r\n    color:white;\r\n\r\n    padding:13px;\r\n\r\n    border-radius:10px;\r\n\r\n    cursor:pointer;\r\n\r\n    font-weight:700;\r\n\r\n    transition:.18s ease;\r\n}\r\n\r\n\r\n.expo-add:hover {\r\n    background:var(--green-dark);\r\n\r\n    transform:\r\n        translateY(-1px);\r\n}\r\n\r\n\r\n.expo-add.expo-added {\r\n    background:#1d1d1d;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BOT\u00d3N FLOTANTE SOLICITUD\r\n========================================================= *\/\r\n\r\n.expo-floating-cart {\r\n    position:fixed;\r\n\r\n    right:26px;\r\n    bottom:26px;\r\n\r\n    z-index:99990;\r\n\r\n    display:flex;\r\n\r\n    align-items:center;\r\n\r\n    gap:12px;\r\n\r\n    border:0;\r\n\r\n    border-radius:17px;\r\n\r\n    padding:12px 15px 12px 14px;\r\n\r\n    background:#171717;\r\n\r\n    color:white;\r\n\r\n    cursor:pointer;\r\n\r\n    box-shadow:\r\n        0 14px 40px\r\n        rgba(0,0,0,.24);\r\n\r\n    transition:\r\n        transform .2s ease,\r\n        background .2s ease,\r\n        box-shadow .2s ease;\r\n}\r\n\r\n\r\n.expo-floating-cart:hover {\r\n    transform:\r\n        translateY(-3px);\r\n\r\n    box-shadow:\r\n        0 18px 45px\r\n        rgba(0,0,0,.29);\r\n}\r\n\r\n\r\n.expo-floating-cart.has-items {\r\n    background:var(--green-dark);\r\n}\r\n\r\n\r\n.expo-floating-cart.bump {\r\n    animation:\r\n        expoCartBump .55s ease;\r\n}\r\n\r\n\r\n@keyframes expoCartBump {\r\n\r\n    0% {\r\n        transform:scale(1);\r\n    }\r\n\r\n    35% {\r\n        transform:scale(1.1);\r\n    }\r\n\r\n    70% {\r\n        transform:scale(.97);\r\n    }\r\n\r\n    100% {\r\n        transform:scale(1);\r\n    }\r\n\r\n}\r\n\r\n\r\n.expo-floating-icon {\r\n    width:39px;\r\n    height:39px;\r\n\r\n    border-radius:11px;\r\n\r\n    background:\r\n        rgba(255,255,255,.13);\r\n\r\n    display:flex;\r\n\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    font-size:20px;\r\n}\r\n\r\n\r\n.expo-floating-text {\r\n    display:flex;\r\n\r\n    flex-direction:column;\r\n\r\n    text-align:left;\r\n}\r\n\r\n\r\n.expo-floating-text strong {\r\n    font-size:14px;\r\n\r\n    line-height:1.2;\r\n}\r\n\r\n\r\n.expo-floating-text small {\r\n    margin-top:3px;\r\n\r\n    font-size:10px;\r\n\r\n    color:\r\n        rgba(255,255,255,.72);\r\n}\r\n\r\n\r\n.expo-count {\r\n    min-width:28px;\r\n    height:28px;\r\n\r\n    display:flex;\r\n\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    padding:0 7px;\r\n\r\n    background:white;\r\n\r\n    color:var(--green-dark);\r\n\r\n    border-radius:30px;\r\n\r\n    font-size:12px;\r\n\r\n    font-weight:800;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   AVISO AL A\u00d1ADIR\r\n========================================================= *\/\r\n\r\n.expo-cart-notice {\r\n    position:fixed;\r\n\r\n    right:26px;\r\n    bottom:100px;\r\n\r\n    z-index:99991;\r\n\r\n    background:white;\r\n\r\n    color:#222;\r\n\r\n    border:\r\n        1px solid\r\n        #dfdfdf;\r\n\r\n    box-shadow:\r\n        0 10px 30px\r\n        rgba(0,0,0,.15);\r\n\r\n    border-radius:12px;\r\n\r\n    padding:11px 15px;\r\n\r\n    font-size:12px;\r\n\r\n    font-weight:700;\r\n\r\n    opacity:0;\r\n\r\n    visibility:hidden;\r\n\r\n    transform:\r\n        translateY(10px);\r\n\r\n    transition:.2s ease;\r\n}\r\n\r\n\r\n.expo-cart-notice.active {\r\n    opacity:1;\r\n\r\n    visibility:visible;\r\n\r\n    transform:\r\n        translateY(0);\r\n}\r\n\r\n\r\n.expo-cart-notice:after {\r\n    content:\"\";\r\n\r\n    position:absolute;\r\n\r\n    bottom:-7px;\r\n    right:28px;\r\n\r\n    width:13px;\r\n    height:13px;\r\n\r\n    background:white;\r\n\r\n    border-right:\r\n        1px solid #dfdfdf;\r\n\r\n    border-bottom:\r\n        1px solid #dfdfdf;\r\n\r\n    transform:\r\n        rotate(45deg);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   OVERLAY\r\n========================================================= *\/\r\n\r\n.expo-overlay {\r\n    position:fixed;\r\n\r\n    inset:0;\r\n\r\n    background:\r\n        rgba(0,0,0,.46);\r\n\r\n    opacity:0;\r\n\r\n    visibility:hidden;\r\n\r\n    z-index:99998;\r\n\r\n    transition:.2s ease;\r\n}\r\n\r\n\r\n.expo-overlay.active {\r\n    opacity:1;\r\n\r\n    visibility:visible;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CARRITO\r\n========================================================= *\/\r\n\r\n.expo-cart {\r\n    position:fixed;\r\n\r\n    right:0;\r\n    top:0;\r\n\r\n    height:100vh;\r\n\r\n    width:\r\n        min(520px,100%);\r\n\r\n    background:white;\r\n\r\n    z-index:99999;\r\n\r\n    transform:\r\n        translateX(100%);\r\n\r\n    transition:\r\n        transform .3s ease;\r\n\r\n    display:flex;\r\n\r\n    flex-direction:column;\r\n\r\n    box-shadow:\r\n        -12px 0 40px\r\n        rgba(0,0,0,.13);\r\n}\r\n\r\n\r\n.expo-cart.active {\r\n    transform:\r\n        translateX(0);\r\n}\r\n\r\n\r\n.expo-cart-header {\r\n    display:flex;\r\n\r\n    justify-content:\r\n        space-between;\r\n\r\n    align-items:center;\r\n\r\n    padding:18px 20px;\r\n\r\n    border-bottom:\r\n        1px solid\r\n        var(--border);\r\n}\r\n\r\n\r\n.expo-cart-header h2 {\r\n    margin:0;\r\n\r\n    font-size:21px;\r\n}\r\n\r\n\r\n.expo-close {\r\n    width:39px;\r\n    height:39px;\r\n\r\n    border-radius:50%;\r\n\r\n    background:white;\r\n\r\n    border:\r\n        1px solid\r\n        var(--border);\r\n\r\n    cursor:pointer;\r\n\r\n    font-size:20px;\r\n}\r\n\r\n\r\n.expo-scroll {\r\n    padding:18px;\r\n\r\n    overflow-y:auto;\r\n\r\n    flex:1;\r\n}\r\n\r\n\r\n.expo-cart-item {\r\n    display:grid;\r\n\r\n    grid-template-columns:\r\n        72px 1fr;\r\n\r\n    gap:12px;\r\n\r\n    padding:13px 0;\r\n\r\n    border-bottom:\r\n        1px solid\r\n        var(--border);\r\n}\r\n\r\n\r\n.expo-cart-image {\r\n    width:72px;\r\n    height:72px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--border);\r\n\r\n    border-radius:9px;\r\n\r\n    overflow:hidden;\r\n\r\n    background:#fafafa;\r\n}\r\n\r\n\r\n.expo-cart-image img {\r\n    width:100%;\r\n    height:100%;\r\n\r\n    object-fit:contain;\r\n}\r\n\r\n\r\n.expo-cart-name {\r\n    font-size:14px;\r\n\r\n    font-weight:bold;\r\n\r\n    margin-bottom:7px;\r\n}\r\n\r\n\r\n.expo-cart-price {\r\n    color:var(--green-dark);\r\n\r\n    font-weight:bold;\r\n\r\n    margin-bottom:8px;\r\n}\r\n\r\n\r\n.expo-controls {\r\n    display:flex;\r\n\r\n    gap:8px;\r\n\r\n    align-items:center;\r\n\r\n    flex-wrap:wrap;\r\n}\r\n\r\n\r\n.expo-controls button {\r\n    cursor:pointer;\r\n}\r\n\r\n\r\n.expo-qty {\r\n    width:34px;\r\n    height:30px;\r\n\r\n    background:white;\r\n\r\n    border:\r\n        1px solid\r\n        var(--border);\r\n\r\n    border-radius:7px;\r\n}\r\n\r\n\r\n.expo-remove {\r\n    border:0;\r\n\r\n    background:none;\r\n\r\n    color:#b52f3f;\r\n\r\n    font-size:12px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TOTAL\r\n========================================================= *\/\r\n\r\n.expo-total {\r\n    background:#f4f4f4;\r\n\r\n    padding:17px;\r\n\r\n    border-radius:13px;\r\n\r\n    margin-top:20px;\r\n}\r\n\r\n\r\n.expo-total-line {\r\n    display:flex;\r\n\r\n    justify-content:\r\n        space-between;\r\n\r\n    align-items:center;\r\n}\r\n\r\n\r\n.expo-total-line strong {\r\n    font-size:21px;\r\n}\r\n\r\n\r\n.expo-total p {\r\n    font-size:11px;\r\n\r\n    color:#666;\r\n\r\n    line-height:1.5;\r\n\r\n    margin:12px 0 0;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   FORMULARIO\r\n========================================================= *\/\r\n\r\n.expo-form-title {\r\n    font-size:17px;\r\n\r\n    margin:25px 0 14px;\r\n}\r\n\r\n\r\n.expo-form-grid {\r\n    display:grid;\r\n\r\n    grid-template-columns:\r\n        1fr 1fr;\r\n\r\n    gap:11px;\r\n}\r\n\r\n\r\n.expo-group.full {\r\n    grid-column:1\/-1;\r\n}\r\n\r\n\r\n.expo-group label {\r\n    display:block;\r\n\r\n    font-size:11px;\r\n\r\n    font-weight:bold;\r\n\r\n    color:#555;\r\n\r\n    margin-bottom:5px;\r\n}\r\n\r\n\r\n.expo-group input,\r\n.expo-group textarea {\r\n    width:100%;\r\n\r\n    border:\r\n        1px solid #ddd;\r\n\r\n    border-radius:9px;\r\n\r\n    padding:11px;\r\n\r\n    font-family:inherit;\r\n\r\n    outline:none;\r\n\r\n    transition:.15s;\r\n}\r\n\r\n\r\n.expo-group input:focus,\r\n.expo-group textarea:focus {\r\n    border-color:var(--green);\r\n\r\n    box-shadow:\r\n        0 0 0 2px\r\n        rgba(86,107,51,.08);\r\n}\r\n\r\n\r\n.expo-group textarea {\r\n    min-height:80px;\r\n\r\n    resize:vertical;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   BOTONES FORMULARIO\r\n========================================================= *\/\r\n\r\n.expo-send {\r\n    width:100%;\r\n\r\n    border:0;\r\n\r\n    border-radius:11px;\r\n\r\n    padding:15px;\r\n\r\n    background:var(--green);\r\n\r\n    color:white;\r\n\r\n    font-weight:bold;\r\n\r\n    cursor:pointer;\r\n\r\n    margin-top:18px;\r\n\r\n    font-size:14px;\r\n}\r\n\r\n\r\n.expo-send:hover {\r\n    background:var(--green-dark);\r\n}\r\n\r\n\r\n.expo-send:disabled {\r\n    opacity:.65;\r\n\r\n    cursor:not-allowed;\r\n}\r\n\r\n\r\n.expo-copy {\r\n    width:100%;\r\n\r\n    border:\r\n        1px solid\r\n        var(--border);\r\n\r\n    border-radius:11px;\r\n\r\n    padding:13px;\r\n\r\n    background:white;\r\n\r\n    font-weight:bold;\r\n\r\n    cursor:pointer;\r\n\r\n    margin-top:8px;\r\n}\r\n\r\n\r\n.expo-legal {\r\n    font-size:10px;\r\n\r\n    color:#666;\r\n\r\n    text-align:center;\r\n\r\n    line-height:1.5;\r\n\r\n    margin-top:14px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MENSAJE \u00c9XITO\r\n========================================================= *\/\r\n\r\n.expo-success {\r\n    display:none;\r\n\r\n    text-align:center;\r\n\r\n    padding:45px 20px;\r\n}\r\n\r\n\r\n.expo-success-icon {\r\n    width:70px;\r\n    height:70px;\r\n\r\n    background:var(--green);\r\n\r\n    color:white;\r\n\r\n    border-radius:50%;\r\n\r\n    margin:\r\n        0 auto 18px;\r\n\r\n    display:flex;\r\n\r\n    align-items:center;\r\n\r\n    justify-content:center;\r\n\r\n    font-size:35px;\r\n}\r\n\r\n\r\n.expo-success h3 {\r\n    font-size:22px;\r\n\r\n    margin:0 0 10px;\r\n}\r\n\r\n\r\n.expo-success p {\r\n    color:#666;\r\n\r\n    line-height:1.6;\r\n}\r\n\r\n\r\n.expo-success button {\r\n    border:0;\r\n\r\n    background:#171717;\r\n\r\n    color:white;\r\n\r\n    padding:12px 22px;\r\n\r\n    border-radius:9px;\r\n\r\n    cursor:pointer;\r\n\r\n    margin-top:10px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ERRORES\r\n========================================================= *\/\r\n\r\n.expo-message {\r\n    display:none;\r\n\r\n    margin-top:12px;\r\n\r\n    padding:11px;\r\n\r\n    background:#fff1f1;\r\n\r\n    border:\r\n        1px solid #efcece;\r\n\r\n    color:#9e2929;\r\n\r\n    font-size:12px;\r\n\r\n    border-radius:8px;\r\n}\r\n\r\n\r\n.expo-empty {\r\n    text-align:center;\r\n\r\n    padding:40px 20px;\r\n\r\n    color:#666;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TOAST\r\n========================================================= *\/\r\n\r\n.expo-toast {\r\n    position:fixed;\r\n\r\n    bottom:25px;\r\n    left:50%;\r\n\r\n    transform:\r\n        translate(-50%,20px);\r\n\r\n    opacity:0;\r\n\r\n    visibility:hidden;\r\n\r\n    background:#171717;\r\n\r\n    color:white;\r\n\r\n    padding:12px 17px;\r\n\r\n    border-radius:9px;\r\n\r\n    z-index:100000;\r\n\r\n    transition:.2s;\r\n}\r\n\r\n\r\n.expo-toast.active {\r\n    opacity:1;\r\n\r\n    visibility:visible;\r\n\r\n    transform:\r\n        translate(-50%,0);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   RESPONSIVE\r\n========================================================= *\/\r\n\r\n@media(max-width:1100px) {\r\n\r\n    .expo-products {\r\n        grid-template-columns:\r\n            repeat(3,1fr);\r\n    }\r\n\r\n}\r\n\r\n\r\n@media(max-width:800px) {\r\n\r\n    .expo-products {\r\n        grid-template-columns:\r\n            repeat(2,1fr);\r\n    }\r\n\r\n}\r\n\r\n\r\n@media(max-width:600px) {\r\n\r\n    .expo-wrapper {\r\n        padding:\r\n            14px\r\n            11px\r\n            130px;\r\n    }\r\n\r\n\r\n    .expo-hero {\r\n        padding:\r\n            31px 23px\r\n            28px;\r\n\r\n        border-radius:18px;\r\n    }\r\n\r\n\r\n    .expo-hero h1 {\r\n        font-size:32px;\r\n\r\n        letter-spacing:-.7px;\r\n    }\r\n\r\n\r\n    .expo-hero p {\r\n        font-size:15px;\r\n    }\r\n\r\n\r\n    .expo-hero-steps {\r\n        display:grid;\r\n\r\n        grid-template-columns:1fr;\r\n\r\n        gap:7px;\r\n\r\n        margin-top:20px;\r\n    }\r\n\r\n\r\n    .expo-products {\r\n        grid-template-columns:1fr;\r\n    }\r\n\r\n\r\n    .expo-form-grid {\r\n        grid-template-columns:1fr;\r\n    }\r\n\r\n\r\n    .expo-group.full {\r\n        grid-column:auto;\r\n    }\r\n\r\n\r\n    .expo-floating-cart {\r\n        right:13px;\r\n        bottom:13px;\r\n\r\n        left:13px;\r\n\r\n        width:\r\n            calc(\r\n                100% - 26px\r\n            );\r\n\r\n        justify-content:\r\n            space-between;\r\n\r\n        border-radius:14px;\r\n    }\r\n\r\n\r\n    .expo-cart-notice {\r\n        right:17px;\r\n        bottom:91px;\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<!-- =========================================================\r\n     CONTENIDO PRINCIPAL\r\n========================================================= -->\r\n\r\n<div class=\"expo-wrapper\">\r\n\r\n\r\n    <!-- CABECERO -->\r\n\r\n    <section class=\"expo-hero\">\r\n\r\n        <div class=\"expo-hero-content\">\r\n\r\n            <h1>\r\n                Complete su stand con todo lo que necesita\r\n            <\/h1>\r\n\r\n            <p>\r\n                Seleccione mobiliario, equipamiento,\r\n                potencia el\u00e9ctrica y elementos gr\u00e1ficos\r\n                adicionales para preparar su espacio.\r\n                A\u00f1ada los art\u00edculos que necesite a su solicitud\r\n                y nuestro equipo se pondr\u00e1 en contacto con usted\r\n                para confirmar disponibilidad y contrataci\u00f3n.\r\n                <br><br><strong>Todos los precios publicados corresponden al servicio durante toda la duraci\u00f3n de la feria.<\/strong>\r\n            <\/p>\r\n\r\n\r\n            <div class=\"expo-hero-steps\">\r\n\r\n                <div class=\"expo-hero-step\">\r\n\r\n                    <span class=\"expo-hero-step-number\">\r\n                        1\r\n                    <\/span>\r\n\r\n                    Seleccione sus extras\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-hero-step\">\r\n\r\n                    <span class=\"expo-hero-step-number\">\r\n                        2\r\n                    <\/span>\r\n\r\n                    Revise su solicitud\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-hero-step\">\r\n\r\n                    <span class=\"expo-hero-step-number\">\r\n                        3\r\n                    <\/span>\r\n\r\n                    Env\u00edela sin realizar ning\u00fan pago\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- INFORMACI\u00d3N -->\r\n\r\n    <div class=\"expo-info\">\r\n\r\n        <div class=\"expo-info-icon\">\r\n            i\r\n        <\/div>\r\n\r\n        <div>\r\n\r\n            <strong>\r\n                Informaci\u00f3n sobre suministro el\u00e9ctrico\r\n            <\/strong>\r\n\r\n            <br>\r\n\r\n            Cada stand dispone de\r\n            <strong>500 W incluidos<\/strong>.\r\n\r\n            La contrataci\u00f3n de potencia adicional comienza\r\n            con un m\u00ednimo de\r\n            <strong>3 kW por 92,34 \u20ac<\/strong>.\r\n\r\n            Posteriormente pueden a\u00f1adirse incrementos\r\n            de 2 kW.\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- FILTROS -->\r\n\r\n    <div class=\"expo-toolbar\">\r\n\r\n        <div class=\"expo-filters\">\r\n\r\n            <button\r\n                class=\"expo-filter active\"\r\n                data-filter=\"all\"\r\n            >\r\n                Todos\r\n            <\/button>\r\n\r\n\r\n            <button\r\n                class=\"expo-filter\"\r\n                data-filter=\"mobiliario\"\r\n            >\r\n                Mobiliario\r\n            <\/button>\r\n\r\n\r\n            <button\r\n                class=\"expo-filter\"\r\n                data-filter=\"equipamiento\"\r\n            >\r\n                Equipamiento\r\n            <\/button>\r\n\r\n\r\n            <button\r\n                class=\"expo-filter\"\r\n                data-filter=\"electricidad\"\r\n            >\r\n                Electricidad\r\n            <\/button>\r\n\r\n\r\n            <button\r\n                class=\"expo-filter\"\r\n                data-filter=\"publicidad\"\r\n            >\r\n                Publicidad\r\n            <\/button>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- PRODUCTOS -->\r\n\r\n    <div\r\n        class=\"expo-products\"\r\n        id=\"expoProducts\"\r\n    ><\/div>\r\n\r\n\r\n<\/div>\r\n\r\n\r\n<!-- =========================================================\r\n     BOT\u00d3N FLOTANTE\r\n========================================================= -->\r\n\r\n<div\r\n    class=\"expo-cart-notice\"\r\n    id=\"expoCartNotice\"\r\n>\r\n    \u2713 A\u00f1adido a su solicitud\r\n<\/div>\r\n\r\n\r\n<button\r\n    class=\"expo-floating-cart\"\r\n    id=\"expoOpenCart\"\r\n>\r\n\r\n    <span class=\"expo-floating-icon\">\r\n        \ud83d\uded2\r\n    <\/span>\r\n\r\n\r\n    <span class=\"expo-floating-text\">\r\n\r\n        <strong id=\"expoFloatingTitle\">\r\n            Ver solicitud\r\n        <\/strong>\r\n\r\n        <small id=\"expoFloatingSubtitle\">\r\n            A\u00f1ada los extras que necesite\r\n        <\/small>\r\n\r\n    <\/span>\r\n\r\n\r\n    <span\r\n        class=\"expo-count\"\r\n        id=\"expoCount\"\r\n    >\r\n        0\r\n    <\/span>\r\n\r\n<\/button>\r\n\r\n\r\n<!-- =========================================================\r\n     OVERLAY\r\n========================================================= -->\r\n\r\n<div\r\n    class=\"expo-overlay\"\r\n    id=\"expoOverlay\"\r\n><\/div>\r\n\r\n\r\n<!-- =========================================================\r\n     PANEL SOLICITUD\r\n========================================================= -->\r\n\r\n<div\r\n    class=\"expo-cart\"\r\n    id=\"expoCart\"\r\n>\r\n\r\n    <div class=\"expo-cart-header\">\r\n\r\n        <h2>\r\n            Su solicitud\r\n        <\/h2>\r\n\r\n\r\n        <button\r\n            class=\"expo-close\"\r\n            id=\"expoClose\"\r\n        >\r\n            \u00d7\r\n        <\/button>\r\n\r\n    <\/div>\r\n\r\n\r\n    <div\r\n        class=\"expo-scroll\"\r\n        id=\"expoNormalContent\"\r\n    >\r\n\r\n        <div id=\"expoCartItems\"><\/div>\r\n\r\n\r\n        <div\r\n            id=\"expoFormArea\"\r\n            style=\"display:none\"\r\n        >\r\n\r\n            <div class=\"expo-total\">\r\n\r\n                <div class=\"expo-total-line\">\r\n\r\n                    <span>\r\n                        Total estimado\r\n                    <\/span>\r\n\r\n                    <strong id=\"expoTotal\">\r\n                        0,00 \u20ac\r\n                    <\/strong>\r\n\r\n                <\/div>\r\n\r\n\r\n                <p>\r\n                    Precios sin IVA.\r\n                    La solicitud queda sujeta a disponibilidad\r\n                    y confirmaci\u00f3n por parte de la organizaci\u00f3n.\r\n                <\/p>\r\n\r\n            <\/div>\r\n\r\n\r\n            <h3 class=\"expo-form-title\">\r\n                Datos de contacto\r\n            <\/h3>\r\n\r\n\r\n            <div class=\"expo-form-grid\">\r\n\r\n\r\n                <div class=\"expo-group full\">\r\n\r\n                    <label>\r\n                        EMPRESA *\r\n                    <\/label>\r\n\r\n                    <input\r\n                        id=\"expoCompany\"\r\n                        type=\"text\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-group\">\r\n\r\n                    <label>\r\n                        PERSONA DE CONTACTO *\r\n                    <\/label>\r\n\r\n                    <input\r\n                        id=\"expoContact\"\r\n                        type=\"text\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-group\">\r\n\r\n                    <label>\r\n                        STAND\r\n                    <\/label>\r\n\r\n                    <input\r\n                        id=\"expoStand\"\r\n                        type=\"text\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-group\">\r\n\r\n                    <label>\r\n                        EMAIL *\r\n                    <\/label>\r\n\r\n                    <input\r\n                        id=\"expoEmail\"\r\n                        type=\"email\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-group\">\r\n\r\n                    <label>\r\n                        TEL\u00c9FONO\r\n                    <\/label>\r\n\r\n                    <input\r\n                        id=\"expoPhone\"\r\n                        type=\"tel\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-group full\">\r\n\r\n                    <label>\r\n                        OBSERVACIONES\r\n                    <\/label>\r\n\r\n                    <textarea\r\n                        id=\"expoNotes\"\r\n                    ><\/textarea>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n\r\n            <div\r\n                class=\"expo-message\"\r\n                id=\"expoError\"\r\n            ><\/div>\r\n\r\n\r\n            <button\r\n                class=\"expo-send\"\r\n                id=\"expoSend\"\r\n            >\r\n                Enviar solicitud\r\n            <\/button>\r\n\r\n\r\n            <button\r\n                class=\"expo-copy\"\r\n                id=\"expoCopy\"\r\n            >\r\n                Copiar resumen del pedido\r\n            <\/button>\r\n\r\n\r\n            <div class=\"expo-legal\">\r\n\r\n                El env\u00edo de esta solicitud\r\n                no constituye una compra ni\r\n                una contrataci\u00f3n definitiva.\r\n\r\n                La organizaci\u00f3n se pondr\u00e1 en contacto\r\n                con la empresa para confirmar\r\n                disponibilidad, condiciones\r\n                y contrataci\u00f3n.\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- MENSAJE \u00c9XITO -->\r\n\r\n    <div\r\n        class=\"expo-success\"\r\n        id=\"expoSuccess\"\r\n    >\r\n\r\n        <div class=\"expo-success-icon\">\r\n            \u2713\r\n        <\/div>\r\n\r\n\r\n        <h3>\r\n            Solicitud enviada correctamente\r\n        <\/h3>\r\n\r\n\r\n        <p>\r\n            Hemos recibido su solicitud\r\n            de elementos adicionales.\r\n\r\n            Nos pondremos en contacto con usted\r\n            para confirmar la contrataci\u00f3n.\r\n        <\/p>\r\n\r\n\r\n        <button id=\"expoSuccessClose\">\r\n            Cerrar\r\n        <\/button>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n\r\n<div\r\n    class=\"expo-toast\"\r\n    id=\"expoToast\"\r\n><\/div>\r\n\r\n\r\n<script>\r\n\r\n(function(){\r\n\r\n\r\n\/* =========================================================\r\n   =========================================================\r\n   ZONA F\u00c1CIL DE EDITAR\r\n   =========================================================\r\n\r\n   AQU\u00cd EST\u00c1N LAS IM\u00c1GENES Y PRODUCTOS.\r\n\r\n   Para cambiar una imagen:\r\n   sustituya solamente la URL de \"image:\".\r\n\r\n   =========================================================\r\n========================================================= *\/\r\n\r\n\r\n\/* =========================================================\r\n   IMAGEN GEN\u00c9RICA\r\n========================================================= *\/\r\n\r\nconst GENERIC =\r\n\"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Montaje-moderno-de-stand-ferial.png\";\r\n\r\n\r\n\/* =========================================================\r\n   PRODUCTOS\r\n========================================================= *\/\r\n\r\nconst PRODUCTS = [\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   MOSTRADOR\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"mostrador-extra\",\r\n\r\n    name:\"Mostrador extra\",\r\n\r\n    price:94.50,\r\n\r\n    category:\"mobiliario\",\r\n\r\n    label:\"Mobiliario\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Mostrador-de-exposicion-EXPOSECURITY.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   MESA BAJA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"mesa-baja\",\r\n\r\n    name:\"Mesa baja \u00b7 \u00d8 80 cm\",\r\n\r\n    price:47.50,\r\n\r\n    category:\"mobiliario\",\r\n\r\n    label:\"Mobiliario\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Mesa-bistro-redonda-blanca-con-base-negra.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   SILLA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"silla\",\r\n\r\n    name:\"Silla sencilla\",\r\n\r\n    price:10,\r\n\r\n    category:\"mobiliario\",\r\n\r\n    label:\"Mobiliario\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Silla-plegable-negra-y-plateada.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   MESA ALTA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"mesa-alta\",\r\n\r\n    name:\"Mesa alta\",\r\n\r\n    price:69,\r\n\r\n    category:\"mobiliario\",\r\n\r\n    label:\"Mobiliario\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Mesa-de-bistro-negra-con-pedestal-cromado.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   TABURETE\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"taburete\",\r\n\r\n    name:\"Taburete sencillo\",\r\n\r\n    price:31,\r\n\r\n    category:\"mobiliario\",\r\n\r\n    label:\"Mobiliario\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Taburete-industrial-gris-con-base-pedestal.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   VITRINA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"vitrina\",\r\n\r\n    name:\"Vitrina \u00b7 100 \u00d7 50 \u00d7 250 cm\",\r\n\r\n    price:299,\r\n\r\n    category:\"equipamiento\",\r\n\r\n    label:\"Equipamiento\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Vitrina-de-aluminio-y-vidrio-vacia.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   PLANTA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"planta\",\r\n\r\n    name:\"Planta\",\r\n\r\n    price:25,\r\n\r\n    category:\"mobiliario\",\r\n\r\n    label:\"Decoraci\u00f3n\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/B09BFS43T2.jpg\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   ALMAC\u00c9N\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"almacen\",\r\n\r\n    name:\"Almac\u00e9n \u00b7 2 \u00d7 1 m\",\r\n\r\n    price:175,\r\n\r\n    category:\"equipamiento\",\r\n\r\n    label:\"Equipamiento\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Modulo-de-seguridad-modular-con-medidas.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   FRIGOR\u00cdFICO\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"frigorifico\",\r\n\r\n    name:\"Frigor\u00edfico Corber\u00f3 \u00b7 85 \u00d7 50 cm\",\r\n\r\n    price:195,\r\n\r\n    category:\"equipamiento\",\r\n\r\n    label:\"Equipamiento\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Frigorifico-compacto-Corbero-abierto.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   PANTALLA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"pantalla\",\r\n\r\n    name:\"Pantalla 40\u201d + soporte m\u00f3vil\",\r\n\r\n    price:263.25,\r\n\r\n    category:\"equipamiento\",\r\n\r\n    label:\"Audiovisual\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Soporte-movil-para-TV-con-paisaje-al-amanecer.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   POTENCIA 3 KW\r\n   SIN IMAGEN PROPIA = GEN\u00c9RICA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"potencia-3kw\",\r\n\r\n    name:\"3 kW potencia extra\",\r\n\r\n    price:92.34,\r\n\r\n    category:\"electricidad\",\r\n\r\n    label:\"Electricidad\",\r\n\r\n    image:GENERIC,\r\n\r\n    max:1\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   KW EXTRA\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"kw-extra\",\r\n\r\n    name:\"Potencia adicional \u00b7 grupos de 2 kW\",\r\n\r\n    price:30.78,\r\n\r\n    category:\"electricidad\",\r\n\r\n    label:\"Electricidad\",\r\n\r\n    image:GENERIC,\r\n\r\n    step:2,\r\n\r\n    unit:\"kW\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   ENCHUFE SIMPLE\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"enchufe-simple\",\r\n\r\n    name:\"Enchufe extra simple\",\r\n\r\n    price:19.50,\r\n\r\n    category:\"electricidad\",\r\n\r\n    label:\"Electricidad\",\r\n\r\n    image:GENERIC\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   ENCHUFE DOBLE\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"enchufe-doble\",\r\n\r\n    name:\"Enchufe extra doble\",\r\n\r\n    price:24.95,\r\n\r\n    category:\"electricidad\",\r\n\r\n    label:\"Electricidad\",\r\n\r\n    image:GENERIC\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   LONA 96\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"lona-96\",\r\n\r\n    name:\"Lona reutilizable \u00b7 96 cm ancho, 150 cm largo\",\r\n\r\n    price:50.00,\r\n\r\n    category:\"publicidad\",\r\n\r\n    label:\"Publicidad\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Banner-modular-EXPOSECURITY-de-exposicion.png\"\r\n},\r\n\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   LONA 46\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"lona-46\",\r\n\r\n    name:\"Lona reutilizable \u00b7 46 cm ancho, 150 cm largo\",\r\n\r\n    price:34.00,\r\n\r\n    category:\"publicidad\",\r\n\r\n    label:\"Publicidad\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Banner-modular-EXPOSECURITY-de-exposicion.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   FRONTIS\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"frontis\",\r\n\r\n    name:\"Frontis lona publicitaria reutilizable\",\r\n\r\n    price:19.90,\r\n\r\n    category:\"publicidad\",\r\n\r\n    label:\"Publicidad\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Cabecera-de-stand-EXPOSECURITY-1.png\"\r\n},\r\n\r\n\r\n\/* ---------------------------------------------------------\r\n   LONA MOSTRADOR\r\n--------------------------------------------------------- *\/\r\n\r\n{\r\n    id:\"lona-mostrador\",\r\n\r\n    name:\"Lona mostrador \u00b7 100 \u00d7 100 cm\",\r\n\r\n    price:28.90,\r\n\r\n    category:\"publicidad\",\r\n\r\n    label:\"Publicidad\",\r\n\r\n    image:\r\n    \"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/10\/Mostrador-de-exposicion-EXPOSECURITY.png\"\r\n}\r\n\r\n];\r\n\r\n\r\n\/* =========================================================\r\n   A PARTIR DE AQU\u00cd NO NECESITA TOCAR NADA\r\n========================================================= *\/\r\n\r\n\r\nlet cart = {};\r\n\r\n\r\ntry {\r\n\r\n    cart =\r\n    JSON.parse(\r\n        localStorage.getItem(\r\n            \"exposecurity_order_2026\"\r\n        )\r\n    ) || {};\r\n\r\n}\r\ncatch(e){\r\n\r\n    cart = {};\r\n\r\n}\r\n\r\n\r\nconst productsEl =\r\ndocument.getElementById(\r\n    \"expoProducts\"\r\n);\r\n\r\n\r\nconst cartEl =\r\ndocument.getElementById(\r\n    \"expoCart\"\r\n);\r\n\r\n\r\nconst overlay =\r\ndocument.getElementById(\r\n    \"expoOverlay\"\r\n);\r\n\r\n\r\nconst itemsEl =\r\ndocument.getElementById(\r\n    \"expoCartItems\"\r\n);\r\n\r\n\r\nconst formArea =\r\ndocument.getElementById(\r\n    \"expoFormArea\"\r\n);\r\n\r\n\r\nconst totalEl =\r\ndocument.getElementById(\r\n    \"expoTotal\"\r\n);\r\n\r\n\r\nconst countEl =\r\ndocument.getElementById(\r\n    \"expoCount\"\r\n);\r\n\r\n\r\nconst errorEl =\r\ndocument.getElementById(\r\n    \"expoError\"\r\n);\r\n\r\n\r\nconst normalContent =\r\ndocument.getElementById(\r\n    \"expoNormalContent\"\r\n);\r\n\r\n\r\nconst success =\r\ndocument.getElementById(\r\n    \"expoSuccess\"\r\n);\r\n\r\n\r\nconst floatingCart =\r\ndocument.getElementById(\r\n    \"expoOpenCart\"\r\n);\r\n\r\n\r\nconst floatingTitle =\r\ndocument.getElementById(\r\n    \"expoFloatingTitle\"\r\n);\r\n\r\n\r\nconst floatingSubtitle =\r\ndocument.getElementById(\r\n    \"expoFloatingSubtitle\"\r\n);\r\n\r\n\r\nconst cartNotice =\r\ndocument.getElementById(\r\n    \"expoCartNotice\"\r\n);\r\n\r\n\r\n\r\n\/* =========================================================\r\n   FORMATO EURO\r\n========================================================= *\/\r\n\r\nfunction euro(value){\r\n\r\n    return new Intl.NumberFormat(\r\n        \"es-ES\",\r\n        {\r\n            style:\"currency\",\r\n            currency:\"EUR\"\r\n        }\r\n    ).format(value);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   OBTENER PRODUCTO\r\n========================================================= *\/\r\n\r\nfunction getProduct(id){\r\n\r\n    return PRODUCTS.find(\r\n        function(p){\r\n\r\n            return p.id === id;\r\n\r\n        }\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   GUARDAR CARRITO\r\n========================================================= *\/\r\n\r\nfunction save(){\r\n\r\n    localStorage.setItem(\r\n        \"exposecurity_order_2026\",\r\n        JSON.stringify(cart)\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TOAST\r\n========================================================= *\/\r\n\r\nfunction toast(text){\r\n\r\n    const el =\r\n    document.getElementById(\r\n        \"expoToast\"\r\n    );\r\n\r\n\r\n    el.textContent =\r\n    text;\r\n\r\n\r\n    el.classList.add(\r\n        \"active\"\r\n    );\r\n\r\n\r\n    setTimeout(\r\n        function(){\r\n\r\n            el.classList.remove(\r\n                \"active\"\r\n            );\r\n\r\n        },\r\n        1800\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   AVISO DEL BOT\u00d3N FLOTANTE\r\n========================================================= *\/\r\n\r\nlet noticeTimer;\r\n\r\n\r\nfunction highlightFloatingCart(){\r\n\r\n    floatingCart.classList.add(\r\n        \"has-items\"\r\n    );\r\n\r\n\r\n    floatingCart.classList.remove(\r\n        \"bump\"\r\n    );\r\n\r\n\r\n    void floatingCart.offsetWidth;\r\n\r\n\r\n    floatingCart.classList.add(\r\n        \"bump\"\r\n    );\r\n\r\n\r\n    floatingTitle.textContent =\r\n    \"Ver solicitud\";\r\n\r\n\r\n    floatingSubtitle.textContent =\r\n    \"Art\u00edculo a\u00f1adido\";\r\n\r\n\r\n    cartNotice.classList.add(\r\n        \"active\"\r\n    );\r\n\r\n\r\n    clearTimeout(\r\n        noticeTimer\r\n    );\r\n\r\n\r\n    noticeTimer =\r\n    setTimeout(\r\n        function(){\r\n\r\n            cartNotice.classList.remove(\r\n                \"active\"\r\n            );\r\n\r\n\r\n            updateFloatingCart();\r\n\r\n        },\r\n        1600\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ACTUALIZAR BOT\u00d3N FLOTANTE\r\n========================================================= *\/\r\n\r\nfunction updateFloatingCart(){\r\n\r\n    const entries =\r\n    Object.entries(cart)\r\n    .filter(\r\n        function(entry){\r\n\r\n            return (\r\n                entry[1] > 0 &&\r\n                getProduct(entry[0])\r\n            );\r\n\r\n        }\r\n    );\r\n\r\n\r\n    countEl.textContent =\r\n    entries.length;\r\n\r\n\r\n    if(entries.length > 0){\r\n\r\n        floatingCart.classList.add(\r\n            \"has-items\"\r\n        );\r\n\r\n\r\n        floatingTitle.textContent =\r\n        \"Ver solicitud\";\r\n\r\n\r\n        floatingSubtitle.textContent =\r\n        entries.length === 1\r\n        ? \"1 art\u00edculo seleccionado\"\r\n        : entries.length +\r\n          \" art\u00edculos seleccionados\";\r\n\r\n    }\r\n    else {\r\n\r\n        floatingCart.classList.remove(\r\n            \"has-items\"\r\n        );\r\n\r\n\r\n        floatingTitle.textContent =\r\n        \"Ver solicitud\";\r\n\r\n\r\n        floatingSubtitle.textContent =\r\n        \"A\u00f1ada los extras que necesite\";\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   RENDER PRODUCTOS\r\n========================================================= *\/\r\n\r\nfunction renderProducts(category){\r\n\r\n    category =\r\n    category || \"all\";\r\n\r\n\r\n    const products =\r\n    category === \"all\"\r\n    ? PRODUCTS\r\n    : PRODUCTS.filter(\r\n        function(p){\r\n\r\n            return p.category === category;\r\n\r\n        }\r\n    );\r\n\r\n\r\n    productsEl.innerHTML =\r\n    products.map(\r\n        function(p){\r\n\r\n            const inCart =\r\n            cart[p.id] &&\r\n            cart[p.id] > 0;\r\n\r\n\r\n            return `\r\n\r\n            <article class=\"expo-product\">\r\n\r\n                <div class=\"expo-image\">\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"${p.image}\"\r\n                        alt=\"${p.name}\"\r\n                        loading=\"lazy\"\r\n                        onerror=\"this.src='${GENERIC}'\"\r\n                    >\r\n\r\n\r\n                    <div class=\"expo-category\">\r\n                        ${p.label}\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n\r\n                <div class=\"expo-body\">\r\n\r\n                    <h3>\r\n                        ${p.name}\r\n                    <\/h3>\r\n\r\n\r\n                    <div class=\"expo-description\">\r\n\r\n                        Elemento adicional disponible\r\n                        para la configuraci\u00f3n y\r\n                        personalizaci\u00f3n de su stand.\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <div class=\"expo-price\">\r\n\r\n                        ${euro(p.price)}\r\n\r\n                        <small>\r\n\r\n                            ${\r\n                                p.unit === \"kW\"\r\n                                ? \"\/ kW \u00b7 sin IVA\"\r\n                                : \"sin IVA\"\r\n                            }\r\n\r\n                        <\/small>\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <button\r\n                        class=\"\r\n                            expo-add\r\n                            ${\r\n                                inCart &&\r\n                                p.max === 1\r\n                                ? \"expo-added\"\r\n                                : \"\"\r\n                            }\r\n                        \"\r\n                        data-add=\"${p.id}\"\r\n                    >\r\n\r\n                        ${\r\n                            p.id === \"kw-extra\"\r\n                            ? \"A\u00f1adir 2 kW\"\r\n                            :\r\n                            (\r\n                                inCart &&\r\n                                p.max === 1\r\n                                ? \"A\u00f1adido\"\r\n                                : \"A\u00f1adir a solicitud\"\r\n                            )\r\n                        }\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/article>\r\n\r\n            `;\r\n\r\n        }\r\n    ).join(\"\");\r\n\r\n\r\n    document\r\n    .querySelectorAll(\r\n        \"[data-add]\"\r\n    )\r\n    .forEach(\r\n        function(button){\r\n\r\n            button.onclick =\r\n            function(){\r\n\r\n                addProduct(\r\n                    button.getAttribute(\r\n                        \"data-add\"\r\n                    )\r\n                );\r\n\r\n            };\r\n\r\n        }\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   A\u00d1ADIR PRODUCTO\r\n========================================================= *\/\r\n\r\nfunction addProduct(id){\r\n\r\n    const product =\r\n    getProduct(id);\r\n\r\n\r\n    if(!product){\r\n        return;\r\n    }\r\n\r\n\r\n    if(id === \"kw-extra\"){\r\n\r\n        if(\r\n            !cart[\"potencia-3kw\"]\r\n        ){\r\n\r\n            cart[\r\n                \"potencia-3kw\"\r\n            ] = 1;\r\n\r\n        }\r\n\r\n\r\n        cart[id] =\r\n        (cart[id] || 0) + 2;\r\n\r\n    }\r\n    else {\r\n\r\n        if(\r\n            product.max === 1\r\n        ){\r\n\r\n            cart[id] = 1;\r\n\r\n        }\r\n        else {\r\n\r\n            cart[id] =\r\n            (cart[id] || 0) + 1;\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    save();\r\n\r\n\r\n    renderCart();\r\n\r\n\r\n    const activeFilter =\r\n    document.querySelector(\r\n        \".expo-filter.active\"\r\n    );\r\n\r\n\r\n    renderProducts(\r\n        activeFilter\r\n        ? activeFilter.getAttribute(\r\n            \"data-filter\"\r\n        )\r\n        : \"all\"\r\n    );\r\n\r\n\r\n    highlightFloatingCart();\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CAMBIAR CANTIDAD\r\n========================================================= *\/\r\n\r\nfunction changeQty(\r\n    id,\r\n    direction\r\n){\r\n\r\n    const product =\r\n    getProduct(id);\r\n\r\n\r\n    if(\r\n        !product ||\r\n        product.max === 1\r\n    ){\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    const step =\r\n    product.step || 1;\r\n\r\n\r\n    cart[id] +=\r\n    direction * step;\r\n\r\n\r\n    if(\r\n        cart[id] <= 0\r\n    ){\r\n\r\n        delete cart[id];\r\n\r\n    }\r\n\r\n\r\n    save();\r\n\r\n\r\n    renderCart();\r\n\r\n\r\n    const activeFilter =\r\n    document.querySelector(\r\n        \".expo-filter.active\"\r\n    );\r\n\r\n\r\n    renderProducts(\r\n        activeFilter\r\n        ? activeFilter.getAttribute(\r\n            \"data-filter\"\r\n        )\r\n        : \"all\"\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ELIMINAR PRODUCTO\r\n========================================================= *\/\r\n\r\nfunction removeProduct(id){\r\n\r\n    if(\r\n        id ===\r\n        \"potencia-3kw\"\r\n    ){\r\n\r\n        delete cart[\r\n            \"potencia-3kw\"\r\n        ];\r\n\r\n        delete cart[\r\n            \"kw-extra\"\r\n        ];\r\n\r\n    }\r\n    else {\r\n\r\n        delete cart[id];\r\n\r\n    }\r\n\r\n\r\n    save();\r\n\r\n\r\n    renderCart();\r\n\r\n\r\n    const activeFilter =\r\n    document.querySelector(\r\n        \".expo-filter.active\"\r\n    );\r\n\r\n\r\n    renderProducts(\r\n        activeFilter\r\n        ? activeFilter.getAttribute(\r\n            \"data-filter\"\r\n        )\r\n        : \"all\"\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   RENDER CARRITO\r\n========================================================= *\/\r\n\r\nfunction renderCart(){\r\n\r\n    const entries =\r\n    Object.entries(cart)\r\n    .filter(\r\n        function(entry){\r\n\r\n            return (\r\n                entry[1] > 0 &&\r\n                getProduct(\r\n                    entry[0]\r\n                )\r\n            );\r\n\r\n        }\r\n    );\r\n\r\n\r\n    updateFloatingCart();\r\n\r\n\r\n    if(\r\n        !entries.length\r\n    ){\r\n\r\n        itemsEl.innerHTML = `\r\n\r\n        <div class=\"expo-empty\">\r\n\r\n            <strong>\r\n                Su solicitud est\u00e1 vac\u00eda\r\n            <\/strong>\r\n\r\n            <br><br>\r\n\r\n            A\u00f1ada los elementos\r\n            que necesite para su stand.\r\n\r\n        <\/div>\r\n\r\n        `;\r\n\r\n\r\n        formArea.style.display =\r\n        \"none\";\r\n\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    let total = 0;\r\n\r\n\r\n    itemsEl.innerHTML =\r\n    entries.map(\r\n        function(entry){\r\n\r\n            const id =\r\n            entry[0];\r\n\r\n\r\n            const qty =\r\n            entry[1];\r\n\r\n\r\n            const p =\r\n            getProduct(id);\r\n\r\n\r\n            const subtotal =\r\n            p.price * qty;\r\n\r\n\r\n            total +=\r\n            subtotal;\r\n\r\n\r\n            return `\r\n\r\n            <div class=\"expo-cart-item\">\r\n\r\n                <div class=\"expo-cart-image\">\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"${p.image}\"\r\n                        alt=\"${p.name}\"\r\n                        onerror=\"this.src='${GENERIC}'\"\r\n                    >\r\n\r\n                <\/div>\r\n\r\n\r\n                <div>\r\n\r\n                    <div class=\"expo-cart-name\">\r\n                        ${p.name}\r\n                    <\/div>\r\n\r\n\r\n                    <div class=\"expo-cart-price\">\r\n                        ${euro(subtotal)}\r\n                    <\/div>\r\n\r\n\r\n                    <div class=\"expo-controls\">\r\n\r\n                        ${\r\n                            p.max !== 1\r\n                            ? `\r\n\r\n                            <button\r\n                                class=\"expo-qty\"\r\n                                data-minus=\"${id}\"\r\n                            >\r\n                                \u2212\r\n                            <\/button>\r\n\r\n\r\n                            <span>\r\n\r\n                                ${\r\n                                    p.unit === \"kW\"\r\n                                    ? qty + \" kW\"\r\n                                    : qty\r\n                                }\r\n\r\n                            <\/span>\r\n\r\n\r\n                            <button\r\n                                class=\"expo-qty\"\r\n                                data-plus=\"${id}\"\r\n                            >\r\n                                +\r\n                            <\/button>\r\n\r\n                            `\r\n                            : `\r\n\r\n                            <span>\r\n                                1\r\n                            <\/span>\r\n\r\n                            `\r\n                        }\r\n\r\n\r\n                        <button\r\n                            class=\"expo-remove\"\r\n                            data-remove=\"${id}\"\r\n                        >\r\n                            Eliminar\r\n                        <\/button>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            `;\r\n\r\n        }\r\n    ).join(\"\");\r\n\r\n\r\n    totalEl.textContent =\r\n    euro(total);\r\n\r\n\r\n    formArea.style.display =\r\n    \"block\";\r\n\r\n\r\n    document\r\n    .querySelectorAll(\r\n        \"[data-minus]\"\r\n    )\r\n    .forEach(\r\n        function(button){\r\n\r\n            button.onclick =\r\n            function(){\r\n\r\n                changeQty(\r\n                    button.getAttribute(\r\n                        \"data-minus\"\r\n                    ),\r\n                    -1\r\n                );\r\n\r\n            };\r\n\r\n        }\r\n    );\r\n\r\n\r\n    document\r\n    .querySelectorAll(\r\n        \"[data-plus]\"\r\n    )\r\n    .forEach(\r\n        function(button){\r\n\r\n            button.onclick =\r\n            function(){\r\n\r\n                changeQty(\r\n                    button.getAttribute(\r\n                        \"data-plus\"\r\n                    ),\r\n                    1\r\n                );\r\n\r\n            };\r\n\r\n        }\r\n    );\r\n\r\n\r\n    document\r\n    .querySelectorAll(\r\n        \"[data-remove]\"\r\n    )\r\n    .forEach(\r\n        function(button){\r\n\r\n            button.onclick =\r\n            function(){\r\n\r\n                removeProduct(\r\n                    button.getAttribute(\r\n                        \"data-remove\"\r\n                    )\r\n                );\r\n\r\n            };\r\n\r\n        }\r\n    );\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ABRIR SOLICITUD\r\n========================================================= *\/\r\n\r\nfunction openCart(){\r\n\r\n    cartEl.classList.add(\r\n        \"active\"\r\n    );\r\n\r\n\r\n    overlay.classList.add(\r\n        \"active\"\r\n    );\r\n\r\n\r\n    document.body.style.overflow =\r\n    \"hidden\";\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   CERRAR SOLICITUD\r\n========================================================= *\/\r\n\r\nfunction closeCart(){\r\n\r\n    cartEl.classList.remove(\r\n        \"active\"\r\n    );\r\n\r\n\r\n    overlay.classList.remove(\r\n        \"active\"\r\n    );\r\n\r\n\r\n    document.body.style.overflow =\r\n    \"\";\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   EVENTOS PANEL\r\n========================================================= *\/\r\n\r\ndocument.getElementById(\r\n    \"expoOpenCart\"\r\n).onclick =\r\nopenCart;\r\n\r\n\r\ndocument.getElementById(\r\n    \"expoClose\"\r\n).onclick =\r\ncloseCart;\r\n\r\n\r\noverlay.onclick =\r\ncloseCart;\r\n\r\n\r\n\/* =========================================================\r\n   CERRAR MENSAJE \u00c9XITO\r\n========================================================= *\/\r\n\r\ndocument.getElementById(\r\n    \"expoSuccessClose\"\r\n).onclick =\r\nfunction(){\r\n\r\n    closeCart();\r\n\r\n\r\n    setTimeout(\r\n        function(){\r\n\r\n            success.style.display =\r\n            \"none\";\r\n\r\n\r\n            normalContent.style.display =\r\n            \"block\";\r\n\r\n        },\r\n        300\r\n    );\r\n\r\n};\r\n\r\n\r\n\/* =========================================================\r\n   FILTROS\r\n========================================================= *\/\r\n\r\ndocument\r\n.querySelectorAll(\r\n    \".expo-filter\"\r\n)\r\n.forEach(\r\n    function(button){\r\n\r\n        button.onclick =\r\n        function(){\r\n\r\n            document\r\n            .querySelectorAll(\r\n                \".expo-filter\"\r\n            )\r\n            .forEach(\r\n                function(b){\r\n\r\n                    b.classList.remove(\r\n                        \"active\"\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n\r\n            button.classList.add(\r\n                \"active\"\r\n            );\r\n\r\n\r\n            renderProducts(\r\n                button.getAttribute(\r\n                    \"data-filter\"\r\n                )\r\n            );\r\n\r\n        };\r\n\r\n    }\r\n);\r\n\r\n\r\n\/* =========================================================\r\n   ERROR\r\n========================================================= *\/\r\n\r\nfunction showError(message){\r\n\r\n    errorEl.textContent =\r\n    message;\r\n\r\n\r\n    errorEl.style.display =\r\n    \"block\";\r\n\r\n}\r\n\r\n\r\nfunction clearError(){\r\n\r\n    errorEl.style.display =\r\n    \"none\";\r\n\r\n\r\n    errorEl.textContent =\r\n    \"\";\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   ENV\u00cdO REAL A WORDPRESS\r\n   UTILIZA EL FRAGMENTO PHP QUE YA TIENE ACTIVADO\r\n========================================================= *\/\r\n\r\ndocument.getElementById(\r\n    \"expoSend\"\r\n).onclick =\r\nasync function(){\r\n\r\n    clearError();\r\n\r\n\r\n    const company =\r\n    document.getElementById(\r\n        \"expoCompany\"\r\n    ).value.trim();\r\n\r\n\r\n    const contact =\r\n    document.getElementById(\r\n        \"expoContact\"\r\n    ).value.trim();\r\n\r\n\r\n    const stand =\r\n    document.getElementById(\r\n        \"expoStand\"\r\n    ).value.trim();\r\n\r\n\r\n    const email =\r\n    document.getElementById(\r\n        \"expoEmail\"\r\n    ).value.trim();\r\n\r\n\r\n    const phone =\r\n    document.getElementById(\r\n        \"expoPhone\"\r\n    ).value.trim();\r\n\r\n\r\n    const notes =\r\n    document.getElementById(\r\n        \"expoNotes\"\r\n    ).value.trim();\r\n\r\n\r\n    if(!company){\r\n\r\n        showError(\r\n            \"Indique el nombre de la empresa.\"\r\n        );\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    if(!contact){\r\n\r\n        showError(\r\n            \"Indique la persona de contacto.\"\r\n        );\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    if(!email){\r\n\r\n        showError(\r\n            \"Indique un correo electr\u00f3nico.\"\r\n        );\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    if(\r\n        Object.keys(cart).length === 0\r\n    ){\r\n\r\n        showError(\r\n            \"La solicitud est\u00e1 vac\u00eda.\"\r\n        );\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    const button =\r\n    this;\r\n\r\n\r\n    const originalText =\r\n    button.textContent;\r\n\r\n\r\n    button.disabled =\r\n    true;\r\n\r\n\r\n    button.textContent =\r\n    \"Enviando solicitud...\";\r\n\r\n\r\n    const data =\r\n    new FormData();\r\n\r\n\r\n    data.append(\r\n        \"action\",\r\n        \"exposecurity_send_order\"\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"company\",\r\n        company\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"contact\",\r\n        contact\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"stand\",\r\n        stand\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"email\",\r\n        email\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"phone\",\r\n        phone\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"notes\",\r\n        notes\r\n    );\r\n\r\n\r\n    data.append(\r\n        \"cart\",\r\n        JSON.stringify(cart)\r\n    );\r\n\r\n\r\n    try {\r\n\r\n        const response =\r\n        await fetch(\r\n\r\n            window.location.origin +\r\n            \"\/wp-admin\/admin-ajax.php\",\r\n\r\n            {\r\n                method:\"POST\",\r\n                body:data,\r\n                credentials:\"same-origin\"\r\n            }\r\n\r\n        );\r\n\r\n\r\n        const result =\r\n        await response.json();\r\n\r\n\r\n        if(\r\n            result &&\r\n            result.success\r\n        ){\r\n\r\n            cart = {};\r\n\r\n\r\n            save();\r\n\r\n\r\n            renderCart();\r\n\r\n\r\n            normalContent.style.display =\r\n            \"none\";\r\n\r\n\r\n            success.style.display =\r\n            \"block\";\r\n\r\n\r\n            document.getElementById(\r\n                \"expoCompany\"\r\n            ).value = \"\";\r\n\r\n\r\n            document.getElementById(\r\n                \"expoContact\"\r\n            ).value = \"\";\r\n\r\n\r\n            document.getElementById(\r\n                \"expoStand\"\r\n            ).value = \"\";\r\n\r\n\r\n            document.getElementById(\r\n                \"expoEmail\"\r\n            ).value = \"\";\r\n\r\n\r\n            document.getElementById(\r\n                \"expoPhone\"\r\n            ).value = \"\";\r\n\r\n\r\n            document.getElementById(\r\n                \"expoNotes\"\r\n            ).value = \"\";\r\n\r\n        }\r\n        else {\r\n\r\n            const message =\r\n            result &&\r\n            result.data &&\r\n            result.data.message\r\n\r\n            ? result.data.message\r\n\r\n            : \"No se ha podido enviar la solicitud.\";\r\n\r\n\r\n            showError(\r\n                message\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n    catch(error){\r\n\r\n        console.error(\r\n            error\r\n        );\r\n\r\n\r\n        showError(\r\n            \"No se ha podido conectar con el servidor. Int\u00e9ntelo de nuevo.\"\r\n        );\r\n\r\n    }\r\n    finally {\r\n\r\n        button.disabled =\r\n        false;\r\n\r\n\r\n        button.textContent =\r\n        originalText;\r\n\r\n    }\r\n\r\n};\r\n\r\n\r\n\/* =========================================================\r\n   COPIAR RESUMEN\r\n========================================================= *\/\r\n\r\ndocument.getElementById(\r\n    \"expoCopy\"\r\n).onclick =\r\nasync function(){\r\n\r\n    let text =\r\n    \"EXPOSECURITY\u00ae 2026\\n\\n\";\r\n\r\n\r\n    Object.entries(cart)\r\n    .forEach(\r\n        function(entry){\r\n\r\n            const p =\r\n            getProduct(\r\n                entry[0]\r\n            );\r\n\r\n\r\n            if(!p){\r\n                return;\r\n            }\r\n\r\n\r\n            text +=\r\n            p.name +\r\n            \" - \" +\r\n            entry[1] +\r\n            (\r\n                p.unit === \"kW\"\r\n                ? \" kW\"\r\n                : \" ud.\"\r\n            ) +\r\n            \"\\n\";\r\n\r\n        }\r\n    );\r\n\r\n\r\n    try {\r\n\r\n        await navigator.clipboard.writeText(\r\n            text\r\n        );\r\n\r\n\r\n        toast(\r\n            \"Resumen copiado\"\r\n        );\r\n\r\n    }\r\n    catch(e){\r\n\r\n        toast(\r\n            \"No se ha podido copiar\"\r\n        );\r\n\r\n    }\r\n\r\n};\r\n\r\n\r\n\/* =========================================================\r\n   INICIAR\r\n========================================================= *\/\r\n\r\nrenderProducts(\r\n    \"all\"\r\n);\r\n\r\n\r\nrenderCart();\r\n\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Complete su stand con todo lo que necesita Seleccione mobiliario, equipamiento, potencia el\u00e9ctrica y elementos gr\u00e1ficos adicionales para preparar su espacio. A\u00f1ada los art\u00edculos que necesite a su solicitud y nuestro equipo se pondr\u00e1 en contacto con usted para confirmar disponibilidad y contrataci\u00f3n. Todos los precios publicados corresponden al servicio durante toda la duraci\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4309","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Extras decoraci\u00f3n - EXPOSECURITY<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/exposecurity.net\/en\/extras-decoracion\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extras decoraci\u00f3n - EXPOSECURITY\" \/>\n<meta property=\"og:description\" content=\"Complete su stand con todo lo que necesita Seleccione mobiliario, equipamiento, potencia el\u00e9ctrica y elementos gr\u00e1ficos adicionales para preparar su espacio. A\u00f1ada los art\u00edculos que necesite a su solicitud y nuestro equipo se pondr\u00e1 en contacto con usted para confirmar disponibilidad y contrataci\u00f3n. Todos los precios publicados corresponden al servicio durante toda la duraci\u00f3n de [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exposecurity.net\/en\/extras-decoracion\/\" \/>\n<meta property=\"og:site_name\" content=\"EXPOSECURITY\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-08T10:01:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/exposecurity.net\\\/extras-decoracion\\\/\",\"url\":\"https:\\\/\\\/exposecurity.net\\\/extras-decoracion\\\/\",\"name\":\"Extras decoraci\u00f3n - EXPOSECURITY\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exposecurity.net\\\/#website\"},\"datePublished\":\"2026-10-02T10:04:16+00:00\",\"dateModified\":\"2026-10-08T10:01:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/exposecurity.net\\\/extras-decoracion\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/exposecurity.net\\\/extras-decoracion\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/exposecurity.net\\\/extras-decoracion\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/exposecurity.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extras decoraci\u00f3n\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/exposecurity.net\\\/#website\",\"url\":\"https:\\\/\\\/exposecurity.net\\\/\",\"name\":\"EXPOSECURITY\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/exposecurity.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/exposecurity.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/exposecurity.net\\\/#organization\",\"name\":\"EXPOSECURITY\",\"url\":\"https:\\\/\\\/exposecurity.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/exposecurity.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/exposecurity.net\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/Presentacion-ExpoSecurity00.png\",\"contentUrl\":\"https:\\\/\\\/exposecurity.net\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/Presentacion-ExpoSecurity00.png\",\"width\":1473,\"height\":164,\"caption\":\"EXPOSECURITY\"},\"image\":{\"@id\":\"https:\\\/\\\/exposecurity.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extras decoraci\u00f3n - EXPOSECURITY","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:\/\/exposecurity.net\/en\/extras-decoracion\/","og_locale":"en_GB","og_type":"article","og_title":"Extras decoraci\u00f3n - EXPOSECURITY","og_description":"Complete su stand con todo lo que necesita Seleccione mobiliario, equipamiento, potencia el\u00e9ctrica y elementos gr\u00e1ficos adicionales para preparar su espacio. A\u00f1ada los art\u00edculos que necesite a su solicitud y nuestro equipo se pondr\u00e1 en contacto con usted para confirmar disponibilidad y contrataci\u00f3n. Todos los precios publicados corresponden al servicio durante toda la duraci\u00f3n de [&hellip;]","og_url":"https:\/\/exposecurity.net\/en\/extras-decoracion\/","og_site_name":"EXPOSECURITY","article_modified_time":"2026-10-08T10:01:00+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/exposecurity.net\/extras-decoracion\/","url":"https:\/\/exposecurity.net\/extras-decoracion\/","name":"Extras decoraci\u00f3n - EXPOSECURITY","isPartOf":{"@id":"https:\/\/exposecurity.net\/#website"},"datePublished":"2026-10-02T10:04:16+00:00","dateModified":"2026-10-08T10:01:00+00:00","breadcrumb":{"@id":"https:\/\/exposecurity.net\/extras-decoracion\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exposecurity.net\/extras-decoracion\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/exposecurity.net\/extras-decoracion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/exposecurity.net\/"},{"@type":"ListItem","position":2,"name":"Extras decoraci\u00f3n"}]},{"@type":"WebSite","@id":"https:\/\/exposecurity.net\/#website","url":"https:\/\/exposecurity.net\/","name":"EXPOSECURITY","description":"","publisher":{"@id":"https:\/\/exposecurity.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/exposecurity.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/exposecurity.net\/#organization","name":"EXPOSECURITY","url":"https:\/\/exposecurity.net\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/exposecurity.net\/#\/schema\/logo\/image\/","url":"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/03\/Presentacion-ExpoSecurity00.png","contentUrl":"https:\/\/exposecurity.net\/wp-content\/uploads\/2026\/03\/Presentacion-ExpoSecurity00.png","width":1473,"height":164,"caption":"EXPOSECURITY"},"image":{"@id":"https:\/\/exposecurity.net\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/pages\/4309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/comments?post=4309"}],"version-history":[{"count":28,"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/pages\/4309\/revisions"}],"predecessor-version":[{"id":4537,"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/pages\/4309\/revisions\/4537"}],"wp:attachment":[{"href":"https:\/\/exposecurity.net\/en\/wp-json\/wp\/v2\/media?parent=4309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}