{"id":16243,"date":"2026-04-20T13:35:21","date_gmt":"2026-04-20T13:35:21","guid":{"rendered":"https:\/\/palmieri.w3d.it\/ai-assistant\/"},"modified":"2026-09-28T10:37:17","modified_gmt":"2026-09-28T10:37:17","slug":"ai-assistant","status":"publish","type":"page","link":"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/","title":{"rendered":"AI Assistant"},"content":{"rendered":"<div>Ressources techniques<\/div>\n<h1>A.I. <span class=\"uk-text-stroke\">A<\/span>ssistant<\/h1>\n<div>\n<p>Vous avez une question sur les mat\u00e9riaux, les processus de production ou les services de Fonderie Palmieri ? <br \/>Notre <strong>assistant IA<\/strong> est disponible 24h\/24 pour r\u00e9pondre en temps r\u00e9el, sans attente. <br \/>Il conna\u00eet toute la gamme de fontes produites, les secteurs d&rsquo;application, les certifications et les services propos\u00e9s &#8211; et lorsque vous avez besoin de parler directement avec notre \u00e9quipe, il vous oriente vers le bon contact.<\/p>\n<\/div>\n<hr>\n<div>        <div id=\"atp-17015-6abd043217b2a\" \n             class=\"atp-container atp-theme-custom atp-effect-typing atp-bg-transparent atp-has-particles\"\n             data-phrases='[&quot;Welcome to Fonderie Palmieri!&quot;,&quot;Ask us anything, we&#039;ll answer right away!&quot;]'\n             data-settings='{&quot;effect&quot;:&quot;typing&quot;,&quot;speed&quot;:100,&quot;pause&quot;:2000,&quot;loop&quot;:&quot;yes&quot;,&quot;keep_last&quot;:&quot;yes&quot;,&quot;cursor&quot;:&quot;yes&quot;,&quot;cursor_char&quot;:&quot;|&quot;,&quot;particles&quot;:&quot;yes&quot;,&quot;particles_type&quot;:&quot;dots&quot;,&quot;particle_color&quot;:&quot;#d34817&quot;}'\n             data-colors='{&quot;primary&quot;:&quot;#d34817&quot;,&quot;secondary&quot;:&quot;#d34817&quot;,&quot;accent&quot;:&quot;#d34817&quot;}'\n             data-text-color='{&quot;type&quot;:&quot;solid&quot;,&quot;color&quot;:&quot;#37454b&quot;}'\n             style=\"--atp-font-size:32px;--atp-font-weight:700;--atp-text-align:center;--atp-color-primary:#d34817;--atp-color-secondary:#d34817;--atp-color-accent:#d34817;\">\n                        <canvas class=\"atp-particles-canvas\" data-type=\"dots\" data-color=\"#d34817\"><\/canvas>\n                        <div class=\"atp-text-wrapper\">\n                <span class=\"atp-text \"><\/span>\n                                <span class=\"atp-cursor\" style=\"opacity:0;\">|<\/span>\n                            <\/div>\n        <\/div>\n                <\/div>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/07\/AI-ASSISTANT_img.svg\" alt=\"\"><\/p>\n<div>\n<div class=\"ai-searchbar-container\" \n     data-hide-floating=\"true\"\n     data-theme=\"light\"\n     data-layout=\"input-bottom\"\n     data-scroll-offset=\"20\"\n     data-privacy-enabled=\"true\"\n     style=\"--ai-primary-color: #d34817; --searchbar-width: 100%; --searchbar-max-width: 700px;\">\n    \n    <!-- Privacy Notice -->\n        <div class=\"ai-searchbar-privacy\" style=\"display: none;\">\n        <div class=\"ai-searchbar-privacy-content\">\n            <p>\n                Ce chat utilise l\u2019intelligence artificielle. Les messages sont trait\u00e9s par des services externes (Google Gemini, Groq, OpenAI) et peuvent \u00eatre enregistr\u00e9s pour am\u00e9liorer le service. Ne saisissez pas de donn\u00e9es personnelles sensibles. En continuant, vous acceptez notre                                       <a href=\"https:\/\/www.fonderiepalmieri.it\/dichiarazione-sulla-privacy-ue\/\" target=\"_blank\" rel=\"noopener noreferrer\">Politique de confidentialit\u00e9<\/a>\n                            <\/p>\n            <button type=\"button\" class=\"ai-searchbar-privacy-accept\">\n                Accepter et continuer            <\/button>\n        <\/div>\n    <\/div>\n        \n    <!-- Particles Background -->\n    <div class=\"ai-searchbar-particles\">\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n        <div class=\"particle\"><\/div>\n    <\/div>\n    \n    <!-- Main Searchbar -->\n    <div class=\"ai-searchbar-wrapper\">\n        <div class=\"ai-searchbar\">\n            <div class=\"ai-searchbar-icon\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2z\"><\/path>\n                    <path d=\"M12 8v4M12 16h.01\"><\/path>\n                <\/svg>\n                <div class=\"ai-searchbar-icon-glow\"><\/div>\n            <\/div>\n            <input type=\"text\" \n                   class=\"ai-searchbar-input\" \n                   placeholder=\"Comment puis-je vous aider aujourd\u2019hui ?\"\n                   autocomplete=\"off\">\n            <button type=\"button\" class=\"ai-searchbar-submit\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"><\/line>\n                    <polygon points=\"22 2 15 22 11 13 2 9 22 2\"><\/polygon>\n                <\/svg>\n            <\/button>\n        <\/div>\n        \n        <!-- Typing indicator -->\n        <div class=\"ai-searchbar-typing\" style=\"display: none;\">\n            <div class=\"typing-dots\">\n                <span><\/span><span><\/span><span><\/span>\n            <\/div>\n            <span class=\"typing-text\">Sto pensando...<\/span>\n        <\/div>\n        \n        <!-- Suggerimenti -->\n                <div class=\"ai-searchbar-suggestions\">\n                                            <button type=\"button\" class=\"ai-searchbar-suggestion\" data-question=\"Je souhaite conna\u00eetre les mat\u00e9riaux en fonte que vous pouvez me fournir.\">\n                    Je souhaite conna\u00eetre les mat\u00e9riaux en fonte que vous pouvez me fournir.                <\/button>\n                                                            <button type=\"button\" class=\"ai-searchbar-suggestion\" data-question=\"Je souhaite un devis pour mon projet.\">\n                    Je souhaite un devis pour mon projet.                <\/button>\n                                    <\/div>\n            <\/div>\n    \n    <!-- Response Area -->\n    <div class=\"ai-searchbar-response\" style=\"display: none;\">\n        <div class=\"ai-searchbar-question-display\">\n            <div class=\"ai-searchbar-question-label\">Hai chiesto:<\/div>\n            <div class=\"ai-searchbar-question-text\"><\/div>\n        <\/div>\n        <div class=\"ai-searchbar-response-header\">\n            <div class=\"ai-searchbar-response-avatar\">\n                <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                    <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z\"\/>\n                <\/svg>\n            <\/div>\n            <span class=\"ai-searchbar-response-title\">Risposta<\/span>\n            <button type=\"button\" class=\"ai-searchbar-close\" title=\"Chiudi\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                    <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line>\n                    <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line>\n                <\/svg>\n            <\/button>\n        <\/div>\n        <div class=\"ai-searchbar-response-content\"><\/div>\n        <div class=\"ai-searchbar-response-footer\">\n            <button type=\"button\" class=\"ai-searchbar-restart\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                    <polyline points=\"1 4 1 10 7 10\"><\/polyline>\n                    <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"><\/path>\n                <\/svg>\n                Ricomincia da capo            <\/button>\n            <button type=\"button\" class=\"ai-searchbar-history\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                    <path d=\"M12 8v4l3 3\"><\/path>\n                    <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\n                <\/svg>\n                Cronologia            <\/button>\n            <button type=\"button\" class=\"ai-searchbar-download\">\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"><\/path>\n                    <polyline points=\"7 10 12 15 17 10\"><\/polyline>\n                    <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"><\/line>\n                <\/svg>\n                Scarica            <\/button>\n        <\/div>\n    <\/div>\n    \n    <!-- History Modal -->\n    <div class=\"ai-searchbar-history-modal\" style=\"display: none;\">\n        <div class=\"ai-searchbar-history-header\">\n            <h4>Cronologia conversazione<\/h4>\n            <button type=\"button\" class=\"ai-searchbar-history-close\">&times;<\/button>\n        <\/div>\n        <div class=\"ai-searchbar-history-content\"><\/div>\n    <\/div>\n<\/div>\n\n<style>\n\/* Searchbar Container *\/\n\/* Searchbar Container *\/\n.ai-searchbar-container {\n    position: relative;\n    width: var(--searchbar-width, calc(100% - 40px));\n    max-width: var(--searchbar-max-width, 700px);\n    margin: 0 auto;\n    padding: 40px 20px;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n}\n\n\/* Layout: Input Bottom (risposta sopra, input sotto) *\/\n.ai-searchbar-container[data-layout=\"input-bottom\"] {\n    display: flex !important;\n    flex-direction: column !important;\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] > .ai-searchbar-particles {\n    position: absolute !important;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    pointer-events: none;\n    order: 0 !important;\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] > .ai-searchbar-privacy {\n    order: 1 !important;\n    margin-bottom: 20px;\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] > .ai-searchbar-response {\n    order: 2 !important;\n    margin-top: 0 !important;\n    margin-bottom: 20px !important;\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] > .ai-searchbar-wrapper {\n    order: 3 !important;\n    position: relative;\n    z-index: 2;\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] > .ai-searchbar-history-modal {\n    order: 4 !important;\n}\n\n\/* Privacy Notice *\/\n.ai-searchbar-privacy {\n    position: relative;\n    z-index: 2;\n    margin-bottom: 20px;\n}\n\n.ai-searchbar-privacy-content {\n    background: #fff;\n    border-radius: 16px;\n    padding: 20px;\n    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);\n    text-align: center;\n}\n\n.ai-searchbar-privacy-content p {\n    font-size: 14px;\n    color: #666;\n    line-height: 1.6;\n    margin: 0 0 15px 0;\n}\n\n.ai-searchbar-privacy-content a {\n    color: var(--ai-primary-color);\n    text-decoration: underline;\n}\n\n.ai-searchbar-privacy-accept {\n    background: linear-gradient(135deg, var(--ai-primary-color), color-mix(in srgb, var(--ai-primary-color) 70%, #000));\n    color: #fff;\n    border: none;\n    padding: 12px 30px;\n    border-radius: 25px;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.3s ease;\n}\n\n.ai-searchbar-privacy-accept:hover {\n    transform: scale(1.05);\n    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-privacy-content {\n    background: #1a1a2e;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-privacy-content p {\n    color: #aaa;\n}\n\n\/* Particles *\/\n.ai-searchbar-particles {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    overflow: hidden;\n    pointer-events: none;\n    z-index: 0;\n}\n\n.ai-searchbar-particles .particle {\n    position: absolute;\n    width: 6px;\n    height: 6px;\n    background: var(--ai-primary-color);\n    border-radius: 50%;\n    opacity: 0;\n    animation: particle-float 4s ease-in-out infinite;\n}\n\n.ai-searchbar-particles .particle:nth-child(1) { left: 10%; top: 20%; animation-delay: 0s; }\n.ai-searchbar-particles .particle:nth-child(2) { left: 20%; top: 80%; animation-delay: 0.5s; }\n.ai-searchbar-particles .particle:nth-child(3) { left: 40%; top: 10%; animation-delay: 1s; }\n.ai-searchbar-particles .particle:nth-child(4) { left: 60%; top: 90%; animation-delay: 1.5s; }\n.ai-searchbar-particles .particle:nth-child(5) { left: 80%; top: 30%; animation-delay: 2s; }\n.ai-searchbar-particles .particle:nth-child(6) { left: 90%; top: 70%; animation-delay: 2.5s; }\n.ai-searchbar-particles .particle:nth-child(7) { left: 30%; top: 50%; animation-delay: 3s; }\n.ai-searchbar-particles .particle:nth-child(8) { left: 70%; top: 50%; animation-delay: 3.5s; }\n\n@keyframes particle-float {\n    0%, 100% { opacity: 0; transform: translateY(0) scale(0.5); }\n    25% { opacity: 0.4; }\n    50% { opacity: 0.2; transform: translateY(-20px) scale(1); }\n    75% { opacity: 0.4; }\n}\n\n\/* Searchbar Wrapper *\/\n.ai-searchbar-wrapper {\n    position: relative;\n    z-index: 1;\n}\n\n\/* Main Searchbar *\/\n.ai-searchbar {\n    display: flex;\n    align-items: center;\n    background: #fff;\n    border-radius: 50px;\n    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1), 0 0 0 1px rgba(0, 0, 0, 0.05);\n    padding: 8px 8px 8px 20px;\n    transition: all 0.3s ease;\n}\n\n.ai-searchbar:hover {\n    box-shadow: 0 6px 30px rgba(0, 0, 0, 0.15), 0 0 0 1px var(--ai-primary-color);\n}\n\n.ai-searchbar:focus-within {\n    box-shadow: 0 6px 30px rgba(0, 0, 0, 0.15), 0 0 0 2px var(--ai-primary-color);\n}\n\n\/* Icon *\/\n.ai-searchbar-icon {\n    position: relative;\n    flex-shrink: 0;\n    width: 28px;\n    height: 28px;\n    margin-right: 15px;\n    color: var(--ai-primary-color);\n}\n\n.ai-searchbar-icon svg {\n    width: 100%;\n    height: 100%;\n}\n\n.ai-searchbar-icon-glow {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: 40px;\n    height: 40px;\n    background: var(--ai-primary-color);\n    border-radius: 50%;\n    transform: translate(-50%, -50%);\n    opacity: 0;\n    filter: blur(10px);\n    animation: icon-pulse 2s ease-in-out infinite;\n}\n\n@keyframes icon-pulse {\n    0%, 100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }\n    50% { opacity: 0.3; transform: translate(-50%, -50%) scale(1.2); }\n}\n\n\/* Input *\/\n.ai-searchbar-input {\n    flex: 1;\n    border: none;\n    background: transparent;\n    font-size: 16px;\n    padding: 12px 20px 12px 0;\n    outline: none;\n    color: #333;\n}\n\n.ai-searchbar-input::placeholder {\n    color: #999;\n}\n\n\/* Submit Button *\/\n.ai-searchbar-submit {\n    flex-shrink: 0;\n    width: 48px;\n    height: 48px;\n    border: none;\n    border-radius: 50%;\n    background: linear-gradient(135deg, var(--ai-primary-color), color-mix(in srgb, var(--ai-primary-color) 70%, #000));\n    color: #fff;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: all 0.3s ease;\n}\n\n.ai-searchbar-submit svg {\n    width: 20px;\n    height: 20px;\n}\n\n.ai-searchbar-submit:hover {\n    transform: scale(1.05);\n    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);\n}\n\n.ai-searchbar-submit:active {\n    transform: scale(0.95);\n}\n\n.ai-searchbar-submit:disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n    transform: none;\n}\n\n\/* Typing Indicator *\/\n.ai-searchbar-typing {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 15px;\n    color: #666;\n    font-size: 14px;\n}\n\n.typing-dots {\n    display: flex;\n    gap: 4px;\n    margin-right: 10px;\n}\n\n.typing-dots span {\n    width: 8px;\n    height: 8px;\n    background: var(--ai-primary-color);\n    border-radius: 50%;\n    animation: typing-bounce 1.4s ease-in-out infinite;\n}\n\n.typing-dots span:nth-child(2) { animation-delay: 0.2s; }\n.typing-dots span:nth-child(3) { animation-delay: 0.4s; }\n\n@keyframes typing-bounce {\n    0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }\n    30% { transform: translateY(-8px); opacity: 1; }\n}\n\n\/* Suggerimenti *\/\n.ai-searchbar-suggestions {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    gap: 8px;\n    margin-top: 15px;\n    padding: 0 10px;\n}\n\n.ai-searchbar-suggestion {\n    background: rgba(255, 255, 255, 0.9);\n    border: 1px solid rgba(0, 0, 0, 0.1);\n    padding: 8px 16px;\n    border-radius: 20px;\n    font-size: 13px;\n    color: #333;\n    cursor: pointer;\n    transition: all 0.2s ease;\n    backdrop-filter: blur(10px);\n    white-space: nowrap;\n    max-width: 100%;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.ai-searchbar-suggestion:hover {\n    background: var(--ai-primary-color);\n    color: #fff;\n    border-color: var(--ai-primary-color);\n    transform: translateY(-2px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-suggestion {\n    background: rgba(255, 255, 255, 0.1);\n    border-color: rgba(255, 255, 255, 0.2);\n    color: #fff;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-suggestion:hover {\n    background: var(--ai-primary-color);\n    border-color: var(--ai-primary-color);\n}\n\n\/* Nascondi suggerimenti quando c'\u00e8 una risposta *\/\n.ai-searchbar-container.has-response .ai-searchbar-suggestions {\n    display: none;\n}\n\n\/* Response Area *\/\n.ai-searchbar-response {\n    position: relative;\n    z-index: 1;\n    margin-top: 20px;\n    background: #fff;\n    border-radius: 20px;\n    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);\n    overflow: hidden;\n    animation: response-slide-in 0.4s ease;\n    transition: opacity 0.3s ease, transform 0.3s ease;\n}\n\n.ai-searchbar-response.fade-out {\n    opacity: 0;\n    transform: translateY(-10px) scale(0.98);\n}\n\n@keyframes response-slide-in {\n    from { opacity: 0; transform: translateY(-10px); }\n    to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes response-slide-in-bottom {\n    from { opacity: 0; transform: translateY(10px); }\n    to { opacity: 1; transform: translateY(0); }\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] > .ai-searchbar-response {\n    animation: response-slide-in-bottom 0.4s ease !important;\n}\n\n.ai-searchbar-container[data-layout=\"input-bottom\"] .ai-searchbar-response.fade-out {\n    opacity: 0;\n    transform: translateY(10px) scale(0.98);\n}\n\n\/* Question Display *\/\n.ai-searchbar-question-display {\n    padding: 15px 20px;\n    background: linear-gradient(135deg, #f8f9fa, #e9ecef);\n    border-bottom: 1px solid #dee2e6;\n}\n\n.ai-searchbar-question-label {\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    color: #6c757d;\n    margin-bottom: 6px;\n    font-weight: 600;\n}\n\n.ai-searchbar-question-text {\n    font-size: 15px;\n    color: #333;\n    line-height: 1.5;\n    font-style: italic;\n}\n\n.ai-searchbar-response-header {\n    display: flex;\n    align-items: center;\n    padding: 15px 20px;\n    background: linear-gradient(135deg, var(--ai-primary-color), color-mix(in srgb, var(--ai-primary-color) 70%, #000));\n    color: #fff;\n}\n\n.ai-searchbar-response-avatar {\n    width: 32px;\n    height: 32px;\n    background: rgba(255, 255, 255, 0.2);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-right: 12px;\n}\n\n.ai-searchbar-response-avatar svg {\n    width: 20px;\n    height: 20px;\n}\n\n.ai-searchbar-response-title {\n    flex: 1;\n    font-weight: 600;\n    font-size: 14px;\n}\n\n.ai-searchbar-close {\n    background: rgba(255, 255, 255, 0.2);\n    border: none;\n    border-radius: 50%;\n    width: 32px;\n    height: 32px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    color: #fff;\n    transition: background 0.2s;\n}\n\n.ai-searchbar-close:hover {\n    background: rgba(255, 255, 255, 0.3);\n}\n\n.ai-searchbar-close svg {\n    width: 16px;\n    height: 16px;\n}\n\n.ai-searchbar-response-content {\n    padding: 20px;\n    font-size: 15px;\n    line-height: 1.7;\n    color: #333;\n    max-height: 400px;\n    overflow-y: auto;\n}\n\n.ai-searchbar-response-content p {\n    margin: 0 0 10px 0;\n}\n\n.ai-searchbar-response-content p:last-child {\n    margin-bottom: 0;\n}\n\n.ai-searchbar-response-footer {\n    padding: 15px 20px;\n    border-top: 1px solid #eee;\n    display: flex;\n    justify-content: center;\n    gap: 10px;\n    flex-wrap: wrap;\n}\n\n.ai-searchbar-restart,\n.ai-searchbar-history,\n.ai-searchbar-download {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    padding: 10px 16px;\n    background: #f5f5f5;\n    border: none;\n    border-radius: 25px;\n    color: #666;\n    font-size: 13px;\n    cursor: pointer;\n    transition: all 0.2s;\n}\n\n.ai-searchbar-restart:hover,\n.ai-searchbar-history:hover,\n.ai-searchbar-download:hover {\n    background: #eee;\n    color: var(--ai-primary-color);\n}\n\n.ai-searchbar-restart svg,\n.ai-searchbar-history svg,\n.ai-searchbar-download svg {\n    width: 16px;\n    height: 16px;\n}\n\n\/* History Modal *\/\n.ai-searchbar-history-modal {\n    position: fixed;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    width: 90%;\n    max-width: 500px;\n    max-height: 80vh;\n    background: #fff;\n    border-radius: 16px;\n    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);\n    z-index: 100001;\n    overflow: hidden;\n    display: flex;\n    flex-direction: column;\n}\n\n.ai-searchbar-history-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 15px 20px;\n    background: #f5f5f5;\n    border-bottom: 1px solid #eee;\n}\n\n.ai-searchbar-history-header h4 {\n    margin: 0;\n    font-size: 16px;\n    color: #333;\n}\n\n.ai-searchbar-history-close {\n    background: none;\n    border: none;\n    font-size: 24px;\n    color: #999;\n    cursor: pointer;\n    padding: 0;\n    line-height: 1;\n}\n\n.ai-searchbar-history-close:hover {\n    color: #333;\n}\n\n.ai-searchbar-history-content {\n    padding: 20px;\n    overflow-y: auto;\n    flex: 1;\n}\n\n.ai-searchbar-history-item {\n    margin-bottom: 20px;\n    padding-bottom: 20px;\n    border-bottom: 1px solid #eee;\n}\n\n.ai-searchbar-history-item:last-child {\n    margin-bottom: 0;\n    padding-bottom: 0;\n    border-bottom: none;\n}\n\n.ai-searchbar-history-question {\n    background: var(--ai-primary-color);\n    color: #fff;\n    padding: 10px 15px;\n    border-radius: 12px 12px 12px 0;\n    margin-bottom: 10px;\n    font-size: 14px;\n}\n\n.ai-searchbar-history-answer {\n    background: #f5f5f5;\n    color: #333;\n    padding: 10px 15px;\n    border-radius: 12px 12px 0 12px;\n    font-size: 14px;\n    line-height: 1.5;\n}\n\n.ai-searchbar-history-empty {\n    text-align: center;\n    color: #999;\n    padding: 40px 20px;\n}\n\n\/* History Modal Backdrop *\/\n.ai-searchbar-backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: rgba(0, 0, 0, 0.5);\n    z-index: 100000;\n}\n\n\/* Dark Theme *\/\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar {\n    background: #1a1a2e;\n    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-input {\n    color: #fff;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-input::placeholder {\n    color: #888;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-response {\n    background: #1a1a2e;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-response-content {\n    color: #ddd;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-response-footer {\n    border-top-color: #333;\n}\n\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-restart,\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-history,\n.ai-searchbar-container[data-theme=\"dark\"] .ai-searchbar-download {\n    background: #2a2a3e;\n    color: #aaa;\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n    .ai-searchbar-container {\n        padding: 20px 15px;\n    }\n    \n    .ai-searchbar {\n        padding: 6px 6px 6px 15px;\n    }\n    \n    .ai-searchbar-input {\n        font-size: 14px;\n        padding: 10px 0;\n    }\n    \n    .ai-searchbar-submit {\n        width: 42px;\n        height: 42px;\n    }\n    \n    .ai-searchbar-icon {\n        width: 22px;\n        height: 22px;\n        margin-right: 10px;\n    }\n    \n    .ai-searchbar-response-footer {\n        gap: 8px;\n    }\n    \n    .ai-searchbar-restart,\n    .ai-searchbar-history,\n    .ai-searchbar-download {\n        padding: 8px 12px;\n        font-size: 12px;\n    }\n}\n\n\/* Pulsante Continua - Risposta Troncata *\/\n.ai-searchbar-continue-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    margin-top: 15px;\n    padding: 10px 20px;\n    background: linear-gradient(135deg, var(--ai-primary-color), color-mix(in srgb, var(--ai-primary-color) 80%, black));\n    color: #fff;\n    border: none;\n    border-radius: 25px;\n    font-size: 14px;\n    font-weight: 500;\n    cursor: pointer;\n    transition: all 0.2s ease;\n    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);\n}\n\n.ai-searchbar-continue-btn:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);\n}\n\n.ai-searchbar-continue-btn:disabled {\n    opacity: 0.7;\n    cursor: wait;\n    transform: none;\n}\n\n.ai-searchbar-continue-btn::before {\n    content: '\u2192';\n    font-size: 16px;\n}\n\n.ai-searchbar-continue-btn:disabled::before {\n    content: '';\n    width: 14px;\n    height: 14px;\n    border: 2px solid #fff;\n    border-top-color: transparent;\n    border-radius: 50%;\n    animation: searchbarContinueSpin 0.8s linear infinite;\n}\n\n@keyframes searchbarContinueSpin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n<\/style>\n\n<script>\n(function($) {\n    'use strict';\n    \n    \/\/ Fetch nonce fresco (evita problemi con pagine cachate)\n    function fetchFreshNonce() {\n        return $.ajax({\n            url: aiAssistant.ajaxUrl,\n            method: 'POST',\n            data: { action: 'ai_assistant_refresh_nonce' }\n        }).then(function(response) {\n            if (response.success && response.data.nonce) {\n                aiAssistant.nonce = response.data.nonce;\n                return true;\n            }\n            return false;\n        }).catch(function() {\n            return false;\n        });\n    }\n    \n    $(document).ready(function() {\n        var container = $('.ai-searchbar-container');\n        var input = container.find('.ai-searchbar-input');\n        var submitBtn = container.find('.ai-searchbar-submit');\n        var typing = container.find('.ai-searchbar-typing');\n        var response = container.find('.ai-searchbar-response');\n        var responseContent = container.find('.ai-searchbar-response-content');\n        var closeBtn = container.find('.ai-searchbar-close');\n        var restartBtn = container.find('.ai-searchbar-restart');\n        var historyBtn = container.find('.ai-searchbar-history');\n        var downloadBtn = container.find('.ai-searchbar-download');\n        var historyModal = container.find('.ai-searchbar-history-modal');\n        var historyContent = container.find('.ai-searchbar-history-content');\n        var historyCloseBtn = container.find('.ai-searchbar-history-close');\n        var privacyNotice = container.find('.ai-searchbar-privacy');\n        var privacyAcceptBtn = container.find('.ai-searchbar-privacy-accept');\n        \n        var isProcessing = false;\n        var sessionId = '';\n        var chatHistory = [];\n        var pendingQuestion = null;\n        var privacyAccepted = false;\n        var isInputBottom = container.data('layout') === 'input-bottom';\n        var scrollOffset = parseInt(container.data('scroll-offset')) || 20;\n        \n        \/\/ Funzione per smooth scroll (per layout input-bottom)\n        function scrollToTop() {\n            if (isInputBottom) {\n                \/\/ Scrolla all'inizio del container (dove appare la risposta)\n                var targetOffset = container.offset().top - scrollOffset;\n                $('html, body').animate({\n                    scrollTop: Math.max(0, targetOffset)\n                }, 400);\n            }\n        }\n        \n        \/\/ Check privacy consent\n        var privacyEnabled = container.data('privacy-enabled') === true || container.data('privacy-enabled') === 'true';\n        \n        if (privacyEnabled) {\n            var consentData = localStorage.getItem('ai_assistant_privacy_consent');\n            if (consentData) {\n                try {\n                    var data = JSON.parse(consentData);\n                    if (data.accepted && data.timestamp && (Date.now() - data.timestamp) < 30 * 24 * 60 * 60 * 1000) {\n                        privacyAccepted = true;\n                    }\n                } catch (e) {}\n            }\n            \n            if (!privacyAccepted) {\n                privacyNotice.show();\n                input.prop('disabled', true);\n                submitBtn.prop('disabled', true);\n            }\n        } else {\n            privacyAccepted = true;\n        }\n        \n        \/\/ Privacy accept handler\n        privacyAcceptBtn.on('click', function() {\n            localStorage.setItem('ai_assistant_privacy_consent', JSON.stringify({\n                accepted: true,\n                timestamp: Date.now()\n            }));\n            privacyAccepted = true;\n            privacyNotice.slideUp(300);\n            input.prop('disabled', false);\n            submitBtn.prop('disabled', false);\n            input.focus();\n        });\n        \n        \/\/ Fetch nonce fresco all'avvio\n        fetchFreshNonce();\n        \n        \/\/ Hide floating chat if configured\n        if (container.data('hide-floating') === true || container.data('hide-floating') === 'true') {\n            \/\/ Hide with CSS important to override any styles\n            $('<style>.ai-assistant-widget.floating, .ai-assistant-widget[class*=\"floating\"] { display: none !important; }<\/style>').appendTo('head');\n        }\n        \n        \/\/ Submit on button click\n        submitBtn.on('click', function() {\n            if (!privacyAccepted) return;\n            submitQuestion();\n        });\n        \n        \/\/ Submit on Enter key\n        input.on('keydown', function(e) {\n            if (e.key === 'Enter' && !e.shiftKey) {\n                e.preventDefault();\n                if (!privacyAccepted) return;\n                submitQuestion();\n            }\n        });\n        \n        \/\/ Click on suggestion\n        container.on('click', '.ai-searchbar-suggestion', function() {\n            if (!privacyAccepted) return;\n            var question = $(this).data('question');\n            input.val(question);\n            submitQuestion();\n        });\n        \n        \/\/ Close response\n        closeBtn.on('click', function() {\n            response.slideUp(300);\n        });\n        \n        \/\/ Restart\n        restartBtn.on('click', function() {\n            chatHistory = [];\n            sessionId = '';\n            response.slideUp(300);\n            container.removeClass('has-response'); \/\/ Mostra di nuovo i suggerimenti\n            input.val('').focus();\n        });\n        \n        \/\/ Show history\n        historyBtn.on('click', function() {\n            showHistory();\n        });\n        \n        \/\/ Close history\n        historyCloseBtn.on('click', function() {\n            closeHistory();\n        });\n        \n        \/\/ Download chat\n        downloadBtn.on('click', function() {\n            downloadChat();\n        });\n        \n        \/\/ Detect mobile device\n        var isMobile = \/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\/i.test(navigator.userAgent);\n        \n        function submitQuestion(isRetry) {\n            var question = isRetry ? pendingQuestion : input.val().trim();\n            \n            if (!question || isProcessing) return;\n            \n            \/\/ Nascondi i suggerimenti\n            container.addClass('has-response');\n            \n            \/\/ Se il nonce non \u00e8 ancora pronto, richiediamolo prima\n            if (!aiAssistant.nonce) {\n                pendingQuestion = question;\n                input.val('');\n                isProcessing = true;\n                submitBtn.prop('disabled', true);\n                typing.show();\n                \n                fetchFreshNonce().then(function(success) {\n                    if (success) {\n                        typing.hide();\n                        isProcessing = false;\n                        submitQuestion(true);\n                    } else {\n                        typing.hide();\n                        isProcessing = false;\n                        submitBtn.prop('disabled', false);\n                        responseContent.html('<p style=\"color: #d63638;\">' + aiAssistant.i18n.error + '<\/p>');\n                        response.slideDown(300);\n                    }\n                });\n                return;\n            }\n            \n            isProcessing = true;\n            submitBtn.prop('disabled', true);\n            pendingQuestion = question;\n            \n            \/\/ Svuota l'input subito\n            if (!isRetry) {\n                input.val('');\n            }\n            \n            \/\/ Su mobile, rimuovi il focus per nascondere la tastiera\n            if (isMobile) {\n                input.blur();\n            }\n            \n            \/\/ Se c'\u00e8 gi\u00e0 una risposta visibile, fai fade-out fluido prima di mostrare typing\n            if (response.is(':visible')) {\n                response.addClass('fade-out');\n                setTimeout(function() {\n                    response.hide().removeClass('fade-out');\n                    typing.show();\n                    scrollToTop();\n                    sendRequest(question);\n                }, 300);\n            } else {\n                typing.show();\n                scrollToTop();\n                sendRequest(question);\n            }\n        }\n        \n        function sendRequest(question) {\n            \/\/ Mostra la domanda nell'area dedicata\n            container.find('.ai-searchbar-question-text').text(question);\n            \n            $.ajax({\n                url: aiAssistant.ajaxUrl,\n                method: 'POST',\n                data: {\n                    action: 'ai_assistant_chat',\n                    nonce: aiAssistant.nonce,\n                    message: question,\n                    session_id: sessionId\n                },\n                success: function(res) {\n                    typing.hide();\n                    isProcessing = false;\n                    submitBtn.prop('disabled', false);\n                    pendingQuestion = null;\n                    \n                    \/\/ Rimetti il focus sull'input solo su desktop\n                    if (!isMobile) {\n                        input.focus();\n                    }\n                    \n                    if (res.success) {\n                        sessionId = res.data.session_id;\n                        \n                        \/\/ Save to history\n                        chatHistory.push({\n                            question: question,\n                            answer: res.data.message,\n                            time: new Date().toLocaleString()\n                        });\n                        \n                        var formattedResponse = formatResponse(res.data.message);\n                        \n                        \/\/ Controlla se la risposta \u00e8 stata troncata\n                        if (res.data.is_truncated) {\n                            formattedResponse += '<button type=\"button\" class=\"ai-searchbar-continue-btn\" data-partial=\"' + escapeHtml(res.data.message).replace(\/\"\/g, '&quot;') + '\">' + (aiAssistant.i18n.continue || 'Continua...') + '<\/button>';\n                        }\n                        \n                        responseContent.html(formattedResponse);\n                        \n                        \/\/ Bind evento per il pulsante Continua\n                        responseContent.find('.ai-searchbar-continue-btn').on('click', function() {\n                            continueResponse($(this));\n                        });\n                        \n                        \/\/ Mostra la risposta e scrolla all'inizio del contenuto\n                        response.slideDown(300, function() {\n                            responseContent.scrollTop(0);\n                            scrollToTop();\n                        });\n                    } else {\n                        \/\/ Controlla se \u00e8 un errore di nonce scaduto\n                        if (res.data?.message && res.data.message.toLowerCase().includes('nonce')) {\n                            refreshNonceAndRetry(question);\n                        } else {\n                            var errorMsg = res.data?.message || aiAssistant.i18n.error;\n                            responseContent.html('<p style=\"color: #d63638;\">' + escapeHtml(errorMsg) + '<\/p>');\n                            response.slideDown(300, function() {\n                                responseContent.scrollTop(0);\n                                scrollToTop();\n                            });\n                        }\n                    }\n                },\n                error: function(xhr) {\n                    \/\/ Se errore 403, potrebbe essere nonce scaduto\n                    if (xhr.status === 403 || xhr.status === 400) {\n                        refreshNonceAndRetry(question);\n                    } else {\n                        typing.hide();\n                        isProcessing = false;\n                        submitBtn.prop('disabled', false);\n                        pendingQuestion = null;\n                        if (!isMobile) {\n                            input.focus();\n                        }\n                        responseContent.html('<p style=\"color: #d63638;\">' + aiAssistant.i18n.error + '<\/p>');\n                        response.slideDown(300, function() {\n                            responseContent.scrollTop(0);\n                        });\n                    }\n                }\n            });\n        }\n        \n        function refreshNonceAndRetry(question) {\n            fetchFreshNonce().then(function(success) {\n                if (success) {\n                    sendRequest(question);\n                } else {\n                    typing.hide();\n                    isProcessing = false;\n                    submitBtn.prop('disabled', false);\n                    pendingQuestion = null;\n                    responseContent.html('<p style=\"color: #d63638;\">' + aiAssistant.i18n.error + '<\/p>');\n                    response.slideDown(300, function() {\n                        responseContent.scrollTop(0);\n                    });\n                }\n            });\n        }\n        \n        function showHistory() {\n            if (chatHistory.length === 0) {\n                historyContent.html('<div class=\"ai-searchbar-history-empty\">Nessuna conversazione ancora.<\/div>');\n            } else {\n                var html = '';\n                chatHistory.forEach(function(item) {\n                    html += '<div class=\"ai-searchbar-history-item\">';\n                    html += '<div class=\"ai-searchbar-history-question\">' + escapeHtml(item.question) + '<\/div>';\n                    html += '<div class=\"ai-searchbar-history-answer\">' + escapeHtml(item.answer) + '<\/div>';\n                    html += '<\/div>';\n                });\n                historyContent.html(html);\n            }\n            \n            \/\/ Add backdrop\n            $('<div class=\"ai-searchbar-backdrop\"><\/div>').appendTo('body').on('click', closeHistory);\n            historyModal.show();\n        }\n        \n        function closeHistory() {\n            historyModal.hide();\n            $('.ai-searchbar-backdrop').remove();\n        }\n        \n        function downloadChat() {\n            if (chatHistory.length === 0) {\n                alert('Nessuna conversazione da scaricare.');\n                return;\n            }\n            \n            var text = 'Conversazione AI Assistant\\n';\n            text += 'Data: ' + new Date().toLocaleString() + '\\n';\n            text += '========================================\\n\\n';\n            \n            chatHistory.forEach(function(item, index) {\n                text += '--- Domanda ' + (index + 1) + ' ---\\n';\n                text += item.question + '\\n\\n';\n                text += '--- Risposta ---\\n';\n                text += item.answer + '\\n\\n';\n                text += '----------------------------------------\\n\\n';\n            });\n            \n            var blob = new Blob([text], { type: 'text\/plain;charset=utf-8' });\n            var url = URL.createObjectURL(blob);\n            var a = document.createElement('a');\n            a.href = url;\n            a.download = 'chat-ai-assistant-' + new Date().toISOString().slice(0,10) + '.txt';\n            document.body.appendChild(a);\n            a.click();\n            document.body.removeChild(a);\n            URL.revokeObjectURL(url);\n        }\n        \n        function formatResponse(text) {\n            text = escapeHtml(text);\n            \n            \/\/ Prima converti i link Markdown [testo](url) in HTML\n            text = text.replace(\/\\[([^\\]]+)\\]\\(([^)]+)\\)\/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1<\/a>');\n            \n            var paragraphs = text.split(\/\\n\\n+\/);\n            if (paragraphs.length > 1) {\n                text = paragraphs.map(function(p) {\n                    return '<p>' + p.replace(\/\\n\/g, '<br>') + '<\/p>';\n                }).join('');\n            } else {\n                text = '<p>' + text.replace(\/\\n\/g, '<br>') + '<\/p>';\n            }\n            \n            text = text.replace(\/\\*\\*(.*?)\\*\\*\/g, '<strong>$1<\/strong>');\n            text = text.replace(\/\\*(.*?)\\*\/g, '<em>$1<\/em>');\n            \n            \/\/ Converti URL semplici che non sono gi\u00e0 dentro un tag <a>\n            \/\/ Proteggi i link esistenti, converti, poi ripristina\n            var placeholder = '___LINK___';\n            var existingLinks = [];\n            text = text.replace(\/<a [^>]*>.*?<\\\/a>\/g, function(match) {\n                existingLinks.push(match);\n                return placeholder + (existingLinks.length - 1) + '___';\n            });\n            \n            text = text.replace(\/(https?:\\\/\\\/[^\\s<]+)\/g, '<a href=\"$1\" target=\"_blank\" rel=\"noopener noreferrer\">$1<\/a>');\n            \n            existingLinks.forEach(function(link, i) {\n                text = text.replace(placeholder + i + '___', link);\n            });\n            \n            return text;\n        }\n        \n        function continueResponse($button) {\n            if (isProcessing) return;\n            \n            var partialResponse = $button.data('partial');\n            \n            \/\/ Disabilita il pulsante e mostra stato di caricamento\n            $button.prop('disabled', true).text(aiAssistant.i18n.continuing || 'Sto continuando...');\n            isProcessing = true;\n            \n            $.ajax({\n                url: aiAssistant.ajaxUrl,\n                method: 'POST',\n                data: {\n                    action: 'ai_assistant_continue',\n                    nonce: aiAssistant.nonce,\n                    session_id: sessionId,\n                    partial_response: partialResponse\n                },\n                success: function(res) {\n                    isProcessing = false;\n                    \n                    if (res.success) {\n                        \/\/ Aggiorna il contenuto con la continuazione\n                        var currentContent = chatHistory[chatHistory.length - 1].answer;\n                        var fullContent = currentContent + ' ' + res.data.message;\n                        \n                        \/\/ Aggiorna la cronologia\n                        chatHistory[chatHistory.length - 1].answer = fullContent;\n                        \n                        \/\/ Aggiorna il DOM\n                        var formattedResponse = formatResponse(fullContent);\n                        \n                        \/\/ Se ancora troncata, aggiungi nuovo pulsante\n                        if (res.data.is_truncated) {\n                            formattedResponse += '<button type=\"button\" class=\"ai-searchbar-continue-btn\" data-partial=\"' + escapeHtml(fullContent).replace(\/\"\/g, '&quot;') + '\">' + (aiAssistant.i18n.continue || 'Continua...') + '<\/button>';\n                        }\n                        \n                        responseContent.html(formattedResponse);\n                        \n                        \/\/ Bind evento per il nuovo pulsante Continua (se presente)\n                        responseContent.find('.ai-searchbar-continue-btn').on('click', function() {\n                            continueResponse($(this));\n                        });\n                        \n                        \/\/ Scrolla in basso per mostrare il nuovo contenuto\n                        responseContent.scrollTop(responseContent[0].scrollHeight);\n                    } else {\n                        $button.prop('disabled', false).text(aiAssistant.i18n.continue || 'Continua...');\n                        \n                        \/\/ Se errore nonce, riprova\n                        if (res.data?.message && res.data.message.toLowerCase().includes('nonce')) {\n                            refreshNonceAndRetryContinue($button);\n                        } else {\n                            alert(res.data?.message || aiAssistant.i18n.error);\n                        }\n                    }\n                },\n                error: function() {\n                    isProcessing = false;\n                    $button.prop('disabled', false).text(aiAssistant.i18n.continue || 'Continua...');\n                    alert(aiAssistant.i18n.error);\n                }\n            });\n        }\n        \n        function refreshNonceAndRetryContinue($button) {\n            fetchFreshNonce().then(function(success) {\n                if (success) {\n                    continueResponse($button);\n                } else {\n                    alert(aiAssistant.i18n.error);\n                }\n            });\n        }\n        \n        function escapeHtml(text) {\n            var div = document.createElement('div');\n            div.textContent = text;\n            return div.innerHTML;\n        }\n    });\n})(jQuery);\n<\/script>\n<\/div>\n<p><!--more--><br \/>\n<!-- {\"type\":\"layout\",\"children\":[{\"type\":\"section\",\"props\":{\"animation\":\"slide-bottom\",\"animation_delay\":\"250\",\"image\":\"wp-content\/uploads\/2026\/04\/Sfondo1.svg\",\"image_position\":\"center-center\",\"image_size\":\"cover\",\"style\":\"default\",\"title_breakpoint\":\"xl\",\"title_position\":\"top-left\",\"title_rotation\":\"left\",\"vertical_align\":\"middle\",\"width\":\"default\"},\"children\":[{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"headline\",\"props\":{\"class\":\"menu-page\",\"content\":\"Ressources techniques\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"text_align\":\"center\",\"title_element\":\"div\",\"title_style\":\"h3\",\"title_text_stroke\":false},\"name\":\"Titolo Men\u00f9\"},{\"type\":\"headline\",\"props\":{\"content\":\"A.I. <span class=\\\"uk-text-stroke\\\">A<\/span>ssistant\",\"image_align\":\"left\",\"image_margin\":\"xsmall\",\"text_align\":\"center\",\"title_element\":\"h1\",\"title_style\":\"heading-xlarge\"}}]}]},{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"text\",\"props\":{\"block_align\":\"center\",\"column_breakpoint\":\"m\",\"content\":\"\n\n<p>Vous avez une question sur les mat\u00e9riaux, les processus de production ou les services de Fonderie Palmieri ? <br \/>Notre <strong>assistant IA<\/strong> est disponible 24h\/24 pour r\u00e9pondre en temps r\u00e9el, sans attente. <br \/>Il conna\u00eet toute la gamme de fontes produites, les secteurs d'application, les certifications et les services propos\u00e9s - et lorsque vous avez besoin de parler directement avec notre \u00e9quipe, il vous oriente vers le bon contact.<\/p>\n\n\",\"margin_bottom\":\"default\",\"margin_top\":\"default\",\"maxwidth\":\"2xlarge\",\"text_align\":\"center\",\"text_style\":\"large\"}},{\"type\":\"divider\",\"props\":{\"block_align\":\"center\",\"divider_element\":\"hr\",\"maxwidth\":\"2xlarge\"}}]}]},{\"type\":\"row\",\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"},\"children\":[{\"type\":\"text\",\"props\":{\"animation\":\"none\",\"column_breakpoint\":\"m\",\"content\":\"[animated_text id=\\\"17015\\\"]\",\"margin_bottom\":\"\",\"margin_top\":\"default\"}},{\"type\":\"image\",\"props\":{\"image\":\"wp-content\/uploads\/2026\/07\/AI-ASSISTANT_img.svg\",\"image_svg_color\":\"emphasis\",\"image_width\":150,\"margin_bottom\":\"remove\",\"margin_top\":\"remove\",\"text_align\":\"center\"}},{\"type\":\"text\",\"props\":{\"animation\":\"none\",\"column_breakpoint\":\"m\",\"content\":\"[ai_assistant_searchbar placeholder=\\\"Comment puis-je vous aider aujourd\u2019hui\u00a0?\\\" hide_floating=\\\"yes\\\" theme=\\\"light\\\"]\",\"margin_bottom\":\"default\",\"margin_top\":\"default\"}}]}],\"props\":{\"margin_top\":\"xlarge\"}},{\"type\":\"row\",\"props\":{\"margin_bottom\":\"xlarge\",\"margin_top\":\"xlarge\"},\"children\":[{\"type\":\"column\",\"props\":{\"image_position\":\"center-center\",\"position_sticky_breakpoint\":\"m\"}}]}],\"name\":\"Hero Interno\"}],\"version\":\"5.0.25\"} --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ressources techniques A.I. Assistant Vous avez une question sur les mat\u00e9riaux, les processus de production ou les services de Fonderie Palmieri ? Notre assistant IA est disponible 24h\/24 pour r\u00e9pondre en temps r\u00e9el, sans attente. Il conna\u00eet toute la gamme de fontes produites, les secteurs d&rsquo;application, les certifications et les services propos\u00e9s &#8211; et lorsque [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-16243","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Assistant IA | Fonderie Palmieri<\/title>\n<meta name=\"description\" content=\"Assistant IA Fonderie Palmieri, disponible 24h\/24 : r\u00e9ponses imm\u00e9diates sur les fontes, les proc\u00e9d\u00e9s, les certifications et les services.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Assistant IA | Fonderie Palmieri\" \/>\n<meta property=\"og:description\" content=\"Assistant IA Fonderie Palmieri, disponible 24h\/24 : r\u00e9ponses imm\u00e9diates sur les fontes, les proc\u00e9d\u00e9s, les certifications et les services.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/\" \/>\n<meta property=\"og:site_name\" content=\"Fonderie Palmieri\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fonderiepalmieri\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-28T10:37:17+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/fr\\\/ai-assistant\\\/\",\"url\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/fr\\\/ai-assistant\\\/\",\"name\":\"Assistant IA | Fonderie Palmieri\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/#website\"},\"datePublished\":\"2026-04-20T13:35:21+00:00\",\"dateModified\":\"2026-09-28T10:37:17+00:00\",\"description\":\"Assistant IA Fonderie Palmieri, disponible 24h\\\/24 : r\u00e9ponses imm\u00e9diates sur les fontes, les proc\u00e9d\u00e9s, les certifications et les services.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/fr\\\/ai-assistant\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.fonderiepalmieri.it\\\/fr\\\/ai-assistant\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/fr\\\/ai-assistant\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI Assistant\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/#website\",\"url\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/\",\"name\":\"Fonderie Palmieri\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/#organization\",\"name\":\"Fonderie Palmieri\",\"url\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Logo_FonderiePalmieri_350px.png\",\"contentUrl\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/Logo_FonderiePalmieri_350px.png\",\"width\":350,\"height\":189,\"caption\":\"Fonderie Palmieri\"},\"image\":{\"@id\":\"https:\\\/\\\/www.fonderiepalmieri.it\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/fonderiepalmieri\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/fonderie-palmieri---s.p.a.--\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Assistant IA | Fonderie Palmieri","description":"Assistant IA Fonderie Palmieri, disponible 24h\/24 : r\u00e9ponses imm\u00e9diates sur les fontes, les proc\u00e9d\u00e9s, les certifications et les services.","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:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/","og_locale":"fr_FR","og_type":"article","og_title":"Assistant IA | Fonderie Palmieri","og_description":"Assistant IA Fonderie Palmieri, disponible 24h\/24 : r\u00e9ponses imm\u00e9diates sur les fontes, les proc\u00e9d\u00e9s, les certifications et les services.","og_url":"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/","og_site_name":"Fonderie Palmieri","article_publisher":"https:\/\/www.facebook.com\/fonderiepalmieri","article_modified_time":"2026-09-28T10:37:17+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/","url":"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/","name":"Assistant IA | Fonderie Palmieri","isPartOf":{"@id":"https:\/\/www.fonderiepalmieri.it\/#website"},"datePublished":"2026-04-20T13:35:21+00:00","dateModified":"2026-09-28T10:37:17+00:00","description":"Assistant IA Fonderie Palmieri, disponible 24h\/24 : r\u00e9ponses imm\u00e9diates sur les fontes, les proc\u00e9d\u00e9s, les certifications et les services.","breadcrumb":{"@id":"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.fonderiepalmieri.it\/fr\/ai-assistant\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fonderiepalmieri.it\/"},{"@type":"ListItem","position":2,"name":"AI Assistant"}]},{"@type":"WebSite","@id":"https:\/\/www.fonderiepalmieri.it\/#website","url":"https:\/\/www.fonderiepalmieri.it\/","name":"Fonderie Palmieri","description":"","publisher":{"@id":"https:\/\/www.fonderiepalmieri.it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fonderiepalmieri.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.fonderiepalmieri.it\/#organization","name":"Fonderie Palmieri","url":"https:\/\/www.fonderiepalmieri.it\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.fonderiepalmieri.it\/#\/schema\/logo\/image\/","url":"https:\/\/www.fonderiepalmieri.it\/wp-content\/uploads\/2026\/04\/Logo_FonderiePalmieri_350px.png","contentUrl":"https:\/\/www.fonderiepalmieri.it\/wp-content\/uploads\/2026\/04\/Logo_FonderiePalmieri_350px.png","width":350,"height":189,"caption":"Fonderie Palmieri"},"image":{"@id":"https:\/\/www.fonderiepalmieri.it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/fonderiepalmieri","https:\/\/www.linkedin.com\/company\/fonderie-palmieri---s.p.a.--\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/pages\/16243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/comments?post=16243"}],"version-history":[{"count":1,"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/pages\/16243\/revisions"}],"predecessor-version":[{"id":17017,"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/pages\/16243\/revisions\/17017"}],"wp:attachment":[{"href":"https:\/\/www.fonderiepalmieri.it\/fr\/wp-json\/wp\/v2\/media?parent=16243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}