Servizio&Personalizzazione

Servizio e assistenza Personalizzazione | BVS</titolo> <stile> :radice { --primario: #0052cc; --primary-soft: #e6f0ff; --accento: #00b894; --text-main: #222222; --testo disattivato: #666666; --bg-pagina: #f5f7fb; --bg-sezione: #ffffff; --border-soft: #e0e4f0; --shadow-soft: 0 10px 30px rgba(15, 35, 52, 0.08); --raggio-lg: 18px; --raggio-md: 12px; --raggio-pillola: 999px; } * { dimensionamento del box: border-box; margine: 0; imbottitura: 0; } corpo { famiglia di caratteri: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; colore: var(--text-main); colore di sfondo: var(--bg-page); altezza della linea: 1,6; } un { colore: var(--primario); decorazione del testo: nessuna; } a: passa il mouse { decorazione del testo: sottolineatura; } .bvs-pagina { larghezza massima: 1200px; margine: 40px automatico 60px; imbottitura: 0 20px; } @media (larghezza minima: 1200px) { .bvs-pagina { margine superiore: 60px; } } /* 顶部 Eroe */ .bvs-eroe { sfondo: gradiente lineare (135 gradi, #ffffff 0%, #f5f8ff 55%, #eef6ff 100%); raggio del bordo: 26px; imbottitura: 32px 24px 32px; box-ombra: var(--shadow-soft); bordo: 1px solido var(--border-soft); margine inferiore: 32px; visualizzazione: griglia; colonne-modello-griglia: minmax(0, 1.4fr) minmax(0, 1fr); spazio: 24px; allineare gli elementi: centro; } @media (larghezza massima: 900px) { .bvs-eroe { colonne-modello-griglia: minmax(0, 1fr); } } .bvs-etichetta-eroe { display: flessibile in linea; allineare gli elementi: centro; spazio: 8px; imbottitura: 4px 12px; raggio-bordo: var(--raggio-pillola); sfondo: rgba(0, 82, 204, 0,06); colore: var(--primario); dimensione carattere: 13px; peso carattere: 600; spaziatura tra lettere: 0,06 em; trasformazione del testo: maiuscolo; margine inferiore: 10px; } .bvs-eroe-punto { larghezza: 8px; altezza: 8px; raggio del bordo: 50%; sfondo: var(--accent); } .bvs-titolo-eroe { dimensione carattere: 28px; altezza della linea: 1,25; peso carattere: 700; spaziatura tra lettere: 0,01 em; margine inferiore: 10px; colore: #111827; } @media (larghezza minima: 992px) { .bvs-titolo-eroe { dimensione carattere: 32px; } } .bvs-eroe-testo { dimensione carattere: 14px; colore: var(--text-muted); larghezza massima: 560px; margine inferiore: 16px; } .bvs-hero-tag { display: flessibile; flex-wrap: avvolgere; spazio: 8px; margine inferiore: 18px; } .bvs-tag { dimensione carattere: 11px; imbottitura: 4px 9px; raggio-bordo: var(--raggio-pillola); sfondo: rgba(255, 255, 255, 0,9); bordo: 1px RGBA solido (15, 35, 52, 0,08); display: flessibile in linea; allineare gli elementi: centro; spazio: 4px; colore: var(--text-main); filtro sfondo: sfocatura (6px); } .bvs-tag-punto { larghezza: 6px; altezza: 6px; raggio del bordo: 50%; sfondo: var(--accent); } .bvs-eroe-ctas { display: flessibile; flex-wrap: avvolgere; spazio: 10px; allineare gli elementi: centro; } .bvs-btn-primario { display: flessibile in linea; allineare gli elementi: centro; spazio: 6px; imbottitura: 9px 16px; raggio-bordo: var(--raggio-pillola); sfondo: var(--primary); colore: #ffffff; dimensione carattere: 13px; peso carattere: 500; decorazione del testo: nessuna; bordo: nessuno; box-ombra: 0 9px 20px rgba(0, 82, 204, 0,35); cursore: puntatore; spazi bianchi: nowrap; }.bvs-btn-secondario { display: flessibile in linea; allineare gli elementi: centro; spazio: 6px; imbottitura: 8px 14px; raggio-bordo: var(--raggio-pillola); sfondo: #ffffff; colore: var(--primario); dimensione carattere: 13px; peso carattere: 500; bordo: 1px solido rgba(0, 82, 204, 0,25); box-ombra: 0 4px 12px rgba(0, 82, 204, 0.12); cursore: puntatore; spazi bianchi: nowrap; decorazione del testo: nessuna; } .bvs-btn-svg primario, .bvs-btn-secondario svg { larghezza: 16px; altezza: 16px; } .bvs-eroe-meta { dimensione carattere: 12px; colore: var(--text-muted); margine superiore: 6px; } .bvs-eroe-destra { raggio del bordo: 20px; imbottitura: 18px 18px 16px; sfondo: #ffffff; bordo: 1px RGBA solido (15, 35, 52, 0,06); box-ombra: 0 8px 22px rgba(15, 35, 52, 0.10); dimensione carattere: 13px; display: flessibile; direzione flessibile: colonna; spazio: 8px; } .bvs-hero-right-titolo { dimensione carattere: 14px; peso carattere: 600; colore: #111827; } .bvs-hero-right-list { stile elenco: nessuno; imbottitura sinistra: 0; margine: 4px 0 0; display: flessibile; direzione flessibile: colonna; spazio: 4px; } .bvs-hero-right-list li { display: flessibile; elementi di allineamento: flex-start; spazio: 8px; } .bvs-punto elenco { larghezza: 14px; altezza: 14px; raggio del bordo: 50%; bordo: 1px solido rgba(15, 35, 52, 0,16); display: flessibile in linea; allineare gli elementi: centro; giustifica-contenuto: centro; dimensione carattere: 10px; colore: var(--primario); restringimento flessibile: 0; sfondo: #f9fbff; margine superiore: 2px; } /* Sezione 标题 */ .bvs-sezione { margine inferiore: 32px; } .bvs-intestazione-sezione { margine inferiore: 14px; } .bvs-sezione-sopracciglio { dimensione carattere: 12px; trasformazione del testo: maiuscolo; spaziatura tra lettere: 0,08 em; colore: var(--primario); peso carattere: 600; margine inferiore: 4px; } .bvs-titolo-sezione { dimensione carattere: 20px; peso carattere: 700; colore: #111827; margine inferiore: 4px; } .bvs-sezione-testo { dimensione carattere: 13px; colore: var(--text-muted); larghezza massima: 720px; } /* Servizi 概览:3 列卡片 */ .bvs-servizi-griglia { visualizzazione: griglia; colonne-modello-griglia: ripeti(3, minmax(0, 1fr)); spazio: 18px; } @media (larghezza massima: 900px) { .bvs-servizi-griglia { colonne-modello-griglia: ripeti(2, minmax(0, 1fr)); } } @media (larghezza massima: 640px) { .bvs-servizi-griglia { colonne-modello-griglia: minmax(0, 1fr); } } .bvs-carta-servizi { sfondo: var(--bg-sezione); raggio-bordo: var(--raggio-md); imbottitura: 16px 14px 16px; bordo: 1px RGBA solido (15, 35, 52, 0,06); box-ombra: 0 6px 16px rgba(15, 35, 52, 0,05); dimensione carattere: 13px; display: flessibile; direzione flessibile: colonna; spazio: 6px; } .bvs-titolo-servizio { dimensione carattere: 14px; peso carattere: 600; colore: #111827; } .bvs-servizio-didascalia { dimensione carattere: 12px; colore: var(--text-muted); } .bvs-service-list { stile elenco: nessuno; margine superiore: 4px; imbottitura sinistra: 0; display: flessibile; direzione flessibile: colonna; spazio: 3px; } /* 定制流程:时间轴式 1+4 步 */ processo .bvs { sfondo: #ffffff; raggio-bordo: var(--raggio-lg); bordo: 1px RGBA solido (15, 35, 52, 0,06); box-ombra: 0 8px 24px rgba(15, 35, 52, 0,06); imbottitura: 18px 18px 18px; dimensione carattere: 13px; } .bvs-intestazione-processo { display: flessibile; flex-wrap: avvolgere; giustifica-contenuto: spazio-tra; allineare gli elementi: centro; spazio: 10px; margine inferiore: 12px; }.bvs-process-badge { imbottitura: 3px 8px; raggio-bordo: var(--raggio-pillola); sfondo: var(--primary-soft); colore: var(--primario); dimensione carattere: 11px; peso carattere: 600; trasformazione del testo: maiuscolo; spaziatura tra lettere: 0,06 em; } .bvs-processo-titolo { dimensione carattere: 15px; peso carattere: 600; colore: #111827; } .bvs-passaggi-processo { visualizzazione: griglia; colonne del modello di griglia: ripetizione(4, minmax(0, 1fr)); spazio: 14px; margine superiore: 10px; } @media (larghezza massima: 900px) { .bvs-passaggi-processo { colonne-modello-griglia: ripeti(2, minmax(0, 1fr)); } } @media (larghezza massima: 600px) { .bvs-passaggi-processo { colonne-modello-griglia: minmax(0, 1fr); } } .bvs-passo { sfondo: #f8f9ff; raggio del bordo: 12px; imbottitura: 10px 10px 11px; bordo: 1px RGBA solido (15, 35, 52, 0,06); posizione: relativa; } .bvs-indice-passo { larghezza: 20px; altezza: 20px; raggio del bordo: 50%; sfondo: var(--primary); colore: #ffffff; dimensione carattere: 11px; display: flessibile in linea; allineare gli elementi: centro; giustifica-contenuto: centro; margine inferiore: 6px; } .bvs-titolo-passo { dimensione carattere: 13px; peso carattere: 600; margine inferiore: 2px; colore: #111827; } .bvs-testo-passo { dimensione carattere: 12px; colore: var(--text-muted); } /* 兼容 / 行业支持区块(2 列) */ .bvs-due-col { visualizzazione: griglia; colonne-modello-griglia: minmax(0, 1.1fr) minmax(0, 1fr); spazio: 18px; } @media (larghezza massima: 900px) { .bvs-due-col { colonne-modello-griglia: minmax(0, 1fr); } } casella .bvs { sfondo: #ffffff; raggio-bordo: var(--raggio-lg); imbottitura: 16px 16px 14px; bordo: 1px RGBA solido (15, 35, 52, 0,08); box-ombra: 0 8px 24px rgba(15, 35, 52, 0,06); dimensione carattere: 13px; } .bvs-box-titolo { dimensione carattere: 14px; peso carattere: 600; colore: #111827; margine inferiore: 4px; } .bvs-box-testo { dimensione carattere: 12px; colore: var(--text-muted); margine inferiore: 6px; } .bvs-pillole-list { stile elenco: nessuno; imbottitura sinistra: 0; display: flessibile; flex-wrap: avvolgere; spazio: 6px; margine superiore: 4px; } .bvs-pillola { dimensione carattere: 11px; imbottitura: 4px 8px; raggio-bordo: var(--raggio-pillola); sfondo: #f3f6ff; bordo: 1px RGBA solido (15, 35, 52, 0,08); colore: #111827; } /* scrivi CTA */ .bvs-bottom-cta { margine superiore: 28px; sfondo: gradiente lineare(135deg, #0052cc, #2f7bff); raggio del bordo: 20px; imbottitura: 18px 18px 16px; colore: #ffffff; display: flessibile; flex-wrap: avvolgere; giustifica-contenuto: spazio-tra; spazio: 10px; allineare gli elementi: centro; } .bvs-bottom-cta-testo { dimensione carattere: 13px; } .bvs-bottom-cta-titolo { dimensione carattere: 15px; peso carattere: 600; margine inferiore: 2px; } .bvs-bottom-cta-sub { dimensione carattere: 12px; opacità: 0,9; } .bvs-bottom-cta-azioni { display: flessibile; flex-wrap: avvolgere; spazio: 8px; allineare gli elementi: centro; } .bvs-btn-bianco { display: flessibile in linea; allineare gli elementi: centro; spazio: 6px; imbottitura: 7px 13px; raggio-bordo: var(--raggio-pillola); sfondo: #ffffff; colore: #0052cc; dimensione carattere: 12px; peso carattere: 500; decorazione del testo: nessuna; bordo: nessuno; box-ombra: 0 4px 14px rgba(0, 0, 0, 0.18); cursore: puntatore; spazi bianchi: nowrap; }.bvs-btn-contorno-luce { display: flessibile in linea; allineare gli elementi: centro; spazio: 6px; imbottitura: 7px 13px; raggio-bordo: var(--raggio-pillola); sfondo: trasparente; colore: #ffffff; dimensione carattere: 12px; peso carattere: 500; bordo: 1px RGBA solido (255, 255, 255, 0,7); cursore: puntatore; spazi bianchi: nowrap; decorazione del testo: nessuna; } .bvs-btn-bianco svg, .bvs-btn-contorno-luce svg { larghezza: 15px; altezza: 15px; } .bvs-customization-image-wrapper { margine superiore: 10px; margine inferiore: 4px; } .bvs-personalizzazione-immagine-interno { raggio del bordo: 18px; overflow: nascosto; } .bvs-immagine-personalizzazione { visualizzazione: blocco; larghezza: 100%; altezza: automatica; adattamento all'oggetto: copertura; } </stile> <main class="bvs-pagina"> <!-- Eroe:服务与定制总览 --> <section class="bvs-hero"> <div> <div class="bvs-hero-label"> <span class="bvs-hero-dot"></span> <span>Servizio e assistenza Personalizzazione</span> </div> <h1 class="bvs-hero-title"> Leader globale nelle soluzioni complete di visione intelligente </h1> <p class="bvs-hero-text"> BVS fornisce personalizzazione OEM/ODM, configurazione flessibile e supporto affidabile, dall'ideazione e prototipo fino alla produzione di massa e al servizio post-vendita per clienti globali. </p> <div class="bvs-hero-tags"> <span class="bvs-tag"> <span class="bvs-tag-dot"></span> <span>Progetti OEM/ODM</span> </span> <span class="bvs-tag"> <span class="bvs-tag-dot"></span> <span>Touch AIO · Panel PC · POS · Mini PC</span> </span> <span class="bvs-tag"> <span class="bvs-tag-dot"></span> <span>ISO9001 · ISO14001 · CE · FCC · RoHS · CCC</span> </span> </div> <div class="bvs-hero-ctas"> <a class="bvs-btn-primary" href="https://www.lcdbvs.com/pages/contact-us" target="_blank" rel="noopener"> <span>Richiedi una soluzione personalizzata</span> <svg viewbox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M5 10H15" Stroke="White" Stroke-Width="1.6" Stroke-linecap="Rotondo" Stroke-linejoin="Rotondo"></path> <path d="M10 5L15 10L10 15" Stroke="bianco" Stroke-Width="1.6" Stroke-linecap="Rotondo" Stroke-linejoin="Rotondo"></path> </svg> </a> </div> <div class="bvs-eroe-meta"> Fondata nel 2008 · Shenzhen e Shenzhen Stabilimenti di Guangzhou · Magazzino di Hong Kong · Al servizio di clienti industriali e commerciali in tutto il mondo. </div> </div> <aside class="bvs-hero-right"> <div class="bvs-hero-right-title">In cosa possiamo aiutarti</div> <ul class="bvs-hero-right-list"> <li> <span class="bvs-bullet"> ✓</span> <span>PC all-in-one, panel PC, terminali Android/Windows e sistemi POS con tocco personalizzato.</span> </li> <li> <span class="bvs-bullet"> ✓</span> <span>Configurazione hardware, personalizzazione I/O, progettazione dell'alloggiamento e opzioni di branding.</span> </li> <li> <span class="bvs-bullet"> ✓</span> <span>Creazione di campioni, esecuzione pilota e produzione di massa stabile con controllo di qualità.</span> </li> <li> <span class="bvs-bullet"> ✓</span> <span>Supporto tecnico e post-vendita per implementazioni globali.</span> </li> </ul> </a parte> </sezione> <!-- Sezione 1:Panoramica del servizio --> <section class="bvs-sezione"> <div class="bvs-section-header"> <div class="bvs-section-eyebrow">Servizi</div><h2 class="bvs-section-title">Cosa copre il servizio BVS</h2> <p class="bvs-section-text"> Il nostro team supporta il tuo progetto in ogni fase: dalla discussione iniziale dei requisiti al supporto del ciclo di vita a lungo termine per applicazioni industriali e commerciali. </p> </div> <div class="bvs-services-grid"> <article class="bvs-service-card"> <div class="bvs-service-title">Consulenza sui requisiti</div> <div class="bvs-service-caption">Chiarisci il tuo scenario e le tue esigenze tecniche.</div> <ul class="bvs-service-list"> <li>Analisi delle applicazioni e revisione dell'ambiente.</li> <li>Interfaccia, I/O e pianificazione delle prestazioni.</li> <li>Discussione su conformità e certificazione.</li> </ul> </articolo> <article class="bvs-service-card"> <div class="bvs-service-title">Personalizzazione OEM/ODM</div> <div class="bvs-service-caption">Hardware e aspetto su misura.</div> <ul class="bvs-service-list"> <li>Configurazione CPU, RAM, archiviazione e I/O.</li> <li>Design dell'alloggiamento, del montaggio e della cornice anteriore.</li> <li>Stampa logo e personalizzazione packaging.</li> </ul> </articolo> <article class="bvs-service-card"> <div class="bvs-service-title">Esempio e amp; prototipazione</div> <div class="bvs-service-caption">Convalida la tua idea su hardware reale.</div> <ul class="bvs-service-list"> <li>Build di esempio basato su specifiche confermate.</li> <li>Supporto per compatibilità e test sul campo.</li> <li>Iterazione in base al tuo feedback.</li> </ul> </articolo> <article class="bvs-service-card"> <div class="bvs-service-title">Pilota e amp; produzione di massa</div> <div class="bvs-service-caption">Scala con una qualità stabile.</div> <ul class="bvs-service-list"> <li>Esecuzione pilota per ottimizzare il processo e la resa.</li> <li>Produzione in serie con sistema ISO9001.</li> <li>Disposizione e logistica dei lotti flessibili.</li> </ul> </articolo> <article class="bvs-service-card"> <div class="bvs-service-title">Qualità e qualità certificazione</div> <div class="bvs-service-caption">Progettato per i mercati globali.</div> <ul class="bvs-service-list"> <li>Sistema di gestione ISO9001, ISO14001.</li> <li>Supporto per la conformità CE, FCC, RoHS, CCC.</li> <li>Piani di test di burn-in e affidabilità.</li> </ul> </articolo> <article class="bvs-service-card"> <div class="bvs-service-title">Post-vendita e assistenza supporto tecnico</div> <div class="bvs-service-caption">Mantieni la tua distribuzione in esecuzione.</div> <ul class="bvs-service-list"> <li>Risoluzione dei problemi tecnici da remoto.</li> <li>Supporto per la configurazione di firmware/BIOS.</li> <li>Unità di ricambio e cooperazione a lungo termine.</li> </ul> </articolo> </div> </sezione> <!-- Sezione 2:Processo di personalizzazione --> <section class="bvs-sezione"> <div class="bvs-section-header"> <div class="bvs-section-eyebrow">Processo</div> <h2 class="bvs-section-title">Come funziona il nostro processo di personalizzazione</h2> <p class="bvs-section-text"> Seguiamo un flusso di lavoro chiaro e guidato dalla progettazione per garantire che il tuo progetto OEM/ODM venga consegnato in tempo e secondo le specifiche: dai requisiti, progettazione, campione, esecuzione pilota alla produzione di massa. </p></div> <div class="bvs-processo"> <div class="bvs-process-header"> <div class="bvs-process-title">Dall'idea alla produzione stabile</div> <div class="bvs-process-badge">Flusso del progetto in 4 passaggi</div> </div> <div class="bvs-process-steps"> <div class="bvs-passo"> <div class="bvs-step-index">1</div> <div class="bvs-step-title">Requisiti</div> <div class="bvs-step-text"> Lavoriamo con il tuo team per comprendere l'applicazione, l'ambiente, le interfacce, gli obiettivi prestazionali, le certificazioni e il volume previsto. </div> </div> <div class="bvs-passo"> <div class="bvs-step-index">2</div> <div class="bvs-step-title">Design e amp; proposta</div> <div class="bvs-step-text"> I nostri ingegneri progettano hardware, struttura e I/O e propongono una distinta base con opzioni per CPU, display, touch, alloggiamento e montaggio. </div> </div> <div class="bvs-passo"> <div class="bvs-step-index">3</div> <div class="bvs-step-title">Prototipo e amp; convalida</div> <div class="bvs-step-text"> Costruiamo campioni per i test di laboratorio e sul campo, forniamo assistenza con l'immagine del sistema operativo, i driver e le impostazioni e perfezioniamo in base al feedback. </div> </div> <div class="bvs-passo"> <div class="bvs-step-index">4</div> <div class="bvs-step-title">Pilota e amp; produzione di massa</div> <div class="bvs-step-text"> Un'esecuzione pilota verifica la linea di produzione, quindi viene avviata una produzione di massa stabile con controllo continuo di qualità e tracciabilità. </div> </div> </div> </div> </sezione> <!-- Sezione 3:Compatibilità e settori --> <section class="bvs-sezione"> <div class="bvs-section-header"> <div class="bvs-section-eyebrow">Opzioni di personalizzazione</div> <h2 class="bvs-section-title">Cosa puoi personalizzare con BVS</h2> <p class="bvs-section-text"> Che tu abbia bisogno di un Panel PC industriale per ambienti difficili o di un elegante sistema POS touch per la vendita al dettaglio, forniamo opzioni hardware e meccaniche flessibili su misura per la tua applicazione. </p> </div> <div class="bvs-customization-image-wrapper"> <div class="bvs-customization-image-inner"> <img src="https://cdn.shopify.com/s/files/1/0582/4351/4577/files/Service_Customization.jpg?v=1784533809" alt="Opzioni di personalizzazione BVS per panel PC industriali, sistemi POS e mini PC" class="bvs-customization-image"> </div> </div> <div class="bvs-two-col"> <div class="bvs-box"> <div class="bvs-box-title">Hardware e amp; personalizzazione meccanica</div> <p class="bvs-box-testo"> Scegli l'hardware principale e i dettagli meccanici adatti al tuo progetto, mantenendo una catena di fornitura affidabile a lungo termine. </p> <ul class="bvs-pill-list"> <li class="bvs-pill">Piattaforma CPU e amp; livello di prestazione</li> <li class="bvs-pill">RAM e RAM capacità di archiviazione</li> <li class="bvs-pill">Dimensioni e dimensioni del display luminosità</li> <li class="bvs-pill">Tipo di tocco (PCAP / resistivo)</li> <li class="bvs-pill">Porte I/O e amp; espansione</li> <li class="bvs-pill">Montaggio (pannello, VESA, desktop, parete)</li> <li class="bvs-pill">Colore e colore dell'alloggiamento materiale</li> <li class="bvs-pill">Logo, etichetta e amp; confezione</li> </ul> </div> <div class="bvs-box"> <div class="bvs-box-title">Scenari applicativi tipici</div> <p class="bvs-box-testo"> I prodotti BVS sono utilizzati in un'ampia gamma di ambienti industriali e commerciali che richiedono funzionamento 24 ore su 24, 7 giorni su 7 e prestazioni stabili. </p><ul class="bvs-pill-list"> <li class="bvs-pill">Automazione industriale & macchinari</li> <li class="bvs-pill">Produzione intelligente e Terminali MES</li> <li class="bvs-pill">Chioschi self-service e postazioni self-service biglietteria</li> <li class="bvs-pill">POS al dettaglio e amp; banchi cassa</li> <li class="bvs-pill">Ospitalità e ospitalità ordinazione al ristorante</li> <li class="bvs-pill">Trasporti e trasporto terminali logistici</li> <li class="bvs-pill">Segnaletica digitale & visualizzazione delle informazioni</li> </ul> </div> </div> </sezione> <!-- 底部 CTA:引导联系与下载 --> <section class="bvs-bottom-cta"> <div class="bvs-bottom-cta-text"> <div class="bvs-bottom-cta-title">Pronto per iniziare il tuo progetto OEM/ODM con BVS?</div> <div class="bvs-bottom-cta-sub"> Condividi le tue esigenze e il nostro team ti risponderà con una proposta su misura per PC touch, sistemi POS, mini PC o monitor industriali. </div> </div> <div class="bvs-bottom-cta-actions"> <a class="bvs-btn-white" href="https://www.lcdbvs.com/pages/contact-us" target="_blank" rel="noopener"> <span>Contatta BVS</span> <svg viewbox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M5 10H15" Stroke="#0052cc" Stroke-Width="1.6" Stroke-linecap="Rotondo" Stroke-linejoin="Rotondo"></path> <path d="M10 5L15 10L10 15" Stroke="#0052cc" Stroke-Width="1.6" Stroke-linecap="Rotondo" Stroke-linejoin="Rotondo"></path> </svg> </a> <a class="bvs-btn-outline-light" href="mailto:lcdbvs@lcdbvs.com"> <span>E-mail: lcdbvs@lcdbvs.com</span> </a> </div> </sezione> </main> </corpo> </div> </div> </div> </main> <div id="shopify-section-footer" class="shopify-section"><section class="page-footer page-footer--with-sticky-footer" data-section-id="footer" data-section-type="footer" id="click-to-end"> <div class="page-footer__inner sticky-footer"> <div class="container"> <div class="page-width"> <nav class="footer-navigation grid"> <div class="grid__item three-quarters small-down--one-whole"><ul class="nav footer-nav footer-nav--dropdowns grid"> <li class="nav__item footer-nav__item footer-nav--has-submenu grid__item small-down--one-whole one-third"> <a href="/it/pages/about-lcdbvs-com" class="nav__link footer-nav__link footer-nav__link--top"> A proposito di BVS </a> <ul class="footer-nav__submenu"> <li > <a href="/it/pages/contattaci" class=" nav__link footer-nav__link footer-nav__link--sub">Contattaci</a> </li> <li > <a href="/it/pages/fondatrice-gina-1" class=" nav__link footer-nav__link footer-nav__link--sub">Fondatore</a> </li> <li > <a href="/it/pages/perche-collaborare-con-bvs" class=" nav__link footer-nav__link footer-nav__link--sub">Prima il socio</a> </li> <li > <a href="/it/pages/certificati-bvsion" class=" nav__link footer-nav__link footer-nav__link--sub">Onore e certificati</a> </li> </ul> </li> <li class="nav__item footer-nav__item footer-nav--has-submenu grid__item small-down--one-whole one-third"> <a href="/it/pages/supporto" class="nav__link footer-nav__link footer-nav__link--top"> Centro prodotti </a> <ul class="footer-nav__submenu"> <li > <a href="/it/collections/sistemi-pos-periferiche-pos" class=" nav__link footer-nav__link footer-nav__link--sub">Sistemi POS e periferiche POS</a> </li> <li > <a href="/it/collections/embedded-box-pc-edge-pc" class=" nav__link footer-nav__link footer-nav__link--sub">PC box integrati</a> </li> <li > <a href="/it/collections/pc-pannello-industriale-incorporato-aio" class=" nav__link footer-nav__link footer-nav__link--sub">Panel PC industriali integrati</a> </li> <li > <a href="/it/collections/computer-touchscreen-pc-pannello-android" class=" nav__link footer-nav__link footer-nav__link--sub">Panel PC Android</a> </li> <li > <a href="/it/collections/monitor-industriali-open-frame-display" class=" nav__link footer-nav__link footer-nav__link--sub">Monitor industriali</a> </li> <li > <a href="/it/collections/tablet-robusti" class=" nav__link footer-nav__link footer-nav__link--sub">Tablet robusti</a> </li> </ul> </li> <li class="nav__item footer-nav__item footer-nav--has-submenu grid__item small-down--one-whole one-third"> <a href="/it" class="nav__link footer-nav__link footer-nav__link--top"> Applicazione </a> <ul class="footer-nav__submenu"> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Albergo intelligente</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Città intelligente</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Sanità intelligente</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Riunione intelligente</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Produzione intelligente</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Intelligenza artificiale</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Educazione intelligente</a> </li> <li > <a href="/it" class=" nav__link footer-nav__link footer-nav__link--sub">Trasporti intelligenti.</a> </li> </ul> </li> <li class="nav__item footer-nav__item footer-nav--has-submenu grid__item small-down--one-whole one-third"> <a href="/it/blogs/centro-stampa" class="nav__link footer-nav__link footer-nav__link--top"> Centro notizie </a> <ul class="footer-nav__submenu"> <li > <a href="/it/blogs/bvs-notizie" class=" nav__link footer-nav__link footer-nav__link--sub">Notizie aziendali</a> </li> <li > <a href="/it/blogs/tendenze-del-settore" class=" nav__link footer-nav__link footer-nav__link--sub">Tendenze del settore</a> </li> </ul> </li> <li class="nav__item footer-nav__item footer-nav--has-submenu grid__item small-down--one-whole one-third"> <a href="/it/pages/supporto" class="nav__link footer-nav__link footer-nav__link--top"> Supporto </a> <ul class="footer-nav__submenu"> <li > <a href="/it/policies/refund-policy" class=" nav__link footer-nav__link footer-nav__link--sub">Politica di rimborso</a> </li> <li > <a href="/it/policies/shipping-policy" class=" nav__link footer-nav__link footer-nav__link--sub">Politica di spedizione</a> </li> <li > <a href="/it/policies/privacy-policy" class=" nav__link footer-nav__link footer-nav__link--sub">politica sulla riservatezza</a> </li> <li > <a href="/it/policies/terms-of-service" class=" nav__link footer-nav__link footer-nav__link--sub">Termini di servizio</a> </li> <li > <a href="/it/pages/perche-collaborare-con-bvs" class=" nav__link footer-nav__link footer-nav__link--sub">Domande frequenti</a> </li> </ul> </li> </ul> </div> <div class="footer-social-icons grid__item small-down--one-whole one-quarter"> <p class="footer-social-icons__title">Follow us</p> <div class="social-links "> <ul class="social-links__list"> <li><a aria-label="Facebook" class="facebook" target="_blank" rel="noopener" href="https://www.facebook.com/BVS.Display"><svg aria-hidden="true" focusable="false" role="presentation" class="icon svg-facebook" viewBox="0 0 24 24"><path d="M22.676 0H1.324C.593 0 0 .593 0 1.324v21.352C0 23.408.593 24 1.324 24h11.494v-9.294H9.689v-3.621h3.129V8.41c0-3.099 1.894-4.785 4.659-4.785 1.325 0 2.464.097 2.796.141v3.24h-1.921c-1.5 0-1.792.721-1.792 1.771v2.311h3.584l-.465 3.63H16.56V24h6.115c.733 0 1.325-.592 1.325-1.324V1.324C24 .593 23.408 0 22.676 0"/></svg></a></li> <li><a aria-label="Youtube" class="youtube" target="_blank" rel="noopener" href="https://www.youtube.com/channel/UCtW9nGeqlh1eYBw6xAWC12w"><svg aria-hidden="true" focusable="false" role="presentation" class="icon svg-youtube" viewBox="0 0 24 24"><path class="a" d="M23.495 6.205a3.007 3.007 0 0 0-2.088-2.088c-1.87-.501-9.396-.501-9.396-.501s-7.507-.01-9.396.501A3.007 3.007 0 0 0 .527 6.205a31.247 31.247 0 0 0-.522 5.805 31.247 31.247 0 0 0 .522 5.783 3.007 3.007 0 0 0 2.088 2.088c1.868.502 9.396.502 9.396.502s7.506 0 9.396-.502a3.007 3.007 0 0 0 2.088-2.088 31.247 31.247 0 0 0 .5-5.783 31.247 31.247 0 0 0-.5-5.805zM9.609 15.601V8.408l6.264 3.602z"/></svg></a></li> <li><a aria-label="Instagram" class="instagram" target="_blank" rel="noopener" href="https://www.instagram.com/lcdbvs/"><svg aria-hidden="true" focusable="false" role="presentation" class="icon svg-instagram" viewBox="0 0 24 24"><path d="M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913a5.885 5.885 0 0 0 1.384 2.126A5.868 5.868 0 0 0 4.14 23.37c.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558a5.898 5.898 0 0 0 2.126-1.384 5.86 5.86 0 0 0 1.384-2.126c.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913a5.89 5.89 0 0 0-1.384-2.126A5.847 5.847 0 0 0 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227a3.81 3.81 0 0 1-.899 1.382 3.744 3.744 0 0 1-1.38.896c-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421a3.716 3.716 0 0 1-1.379-.899 3.644 3.644 0 0 1-.9-1.38c-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 1 0 0-12.324zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405a1.441 1.441 0 0 1-2.88 0 1.44 1.44 0 0 1 2.88 0z"/></svg></a></li> <li><a aria-label="Tiktok" class="tiktok" target="_blank" rel="noopener" href="https://www.tiktok.com/@lcdbvs.com"><svg class="icon svg-tiktok" width="15" height="16" viewBox="0 0 15 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M7.63849 0.0133333C8.51182 0 9.37849 0.00666667 10.2452 0C10.2985 1.02 10.6652 2.06 11.4118 2.78C12.1585 3.52 13.2118 3.86 14.2385 3.97333V6.66C13.2785 6.62667 12.3118 6.42667 11.4385 6.01333C11.0585 5.84 10.7052 5.62 10.3585 5.39333C10.3518 7.34 10.3652 9.28667 10.3452 11.2267C10.2918 12.16 9.98516 13.0867 9.44516 13.8533C8.57183 15.1333 7.05849 15.9667 5.50516 15.9933C4.55183 16.0467 3.59849 15.7867 2.78516 15.3067C1.43849 14.5133 0.491825 13.06 0.351825 11.5C0.338492 11.1667 0.331825 10.8333 0.345158 10.5067C0.465158 9.24 1.09183 8.02667 2.06516 7.2C3.17183 6.24 4.71849 5.78 6.16516 6.05333C6.17849 7.04 6.13849 8.02667 6.13849 9.01333C5.47849 8.8 4.70516 8.86 4.12516 9.26C3.70516 9.53333 3.38516 9.95333 3.21849 10.4267C3.07849 10.7667 3.11849 11.14 3.12516 11.5C3.28516 12.5933 4.33849 13.5133 5.45849 13.4133C6.20516 13.4067 6.91849 12.9733 7.30516 12.34C7.43182 12.12 7.57182 11.8933 7.57849 11.6333C7.64516 10.44 7.61849 9.25333 7.62516 8.06C7.63182 5.37333 7.61849 2.69333 7.63849 0.0133333Z"></path></svg> </a></li> <li> <a aria-label="Linkedin" class="social-custom" target="_blank" rel="noopener nofollow" href="https://www.linkedin.com/company/shenzhen-bvsion-technology-co-ltd/mycompany/?viewAsMember=true"> <img src="//www.lcdbvs.com/cdn/shop/files/linkedin_0665cab9-c869-4231-9356-d3f4649ed869_48x.png?v=1652410574" alt="Linkedin" width="60" height="60"/> </a> </li> </ul> </div> <!--关注我们--> <!--whatsapp--> <a class="listitem-pic" href="https://api.whatsapp.com/send/?phone=85293737704&text&type=phone_number&app_absent=0" target="_blank" rel="nofollow noopener noreferrer" data-wa-location="footer"> <img src="https://cdn.shopify.com/s/files/1/0582/4351/4577/files/WhatsApp_670a2cfd-0ae3-42a3-9f33-84c7a7771182.png?v=1783591715" class="socialMedia-icon" width=24px/> </a> <!--关注我们--> <div class="footer-contact-info"> <p><strong>Teams:</strong>bvsion</p> <p><strong>Email:</strong> <a href="mailto:lcdbvs@lcdbvs.com">lcdbvs@lcdbvs.com</a></p> <p><strong>Tel:</strong> <a href="tel:+8675523059953">(86) 755 23059953</a></p> <p><strong>Factory address:</strong> Building 9, Huafeng Science and Technology Park, Bao'an District, Shenzhen, Guangdong, China</p> </div> </div> </nav> <footer class="page-footer__end"> <div> </div> <div><div class="footer-localization"> <form method="post" action="/it/localization" id="localization_form_footer" accept-charset="UTF-8" class="selectors-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/it/pages/personalizzazione-del-servizio" /><div class="selectors-form__item"> <h2 class="visually-hidden" id="lang-heading-footer"> Language </h2> <div class="disclosure" data-disclosure-locale> <button type="button" class="disclosure__toggle" aria-expanded="false" aria-controls="lang-list-footer" aria-describedby="lang-heading-footer" data-disclosure-toggle> Italiano <span class="disclosure__toggle-arrow" role="presentation"><svg aria-hidden="true" focusable="false" role="presentation" class="icon feather-icon feather-chevron-down" viewBox="0 0 24 24"><path d="M6 9l6 6 6-6"/></svg> </span> </button> <ul id="lang-list-footer" class="disclosure-list" data-disclosure-list> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="en" data-value="en" data-disclosure-option> English </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="de" data-value="de" data-disclosure-option> Deutsch </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="ja" data-value="ja" data-disclosure-option> 日本語 </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="fr" data-value="fr" data-disclosure-option> français </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="ko" data-value="ko" data-disclosure-option> 한국어 </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="es" data-value="es" data-disclosure-option> Español </a> </li> <li class="disclosure-list__item disclosure-list__item--current"> <a class="disclosure-list__option" href="#" lang="it" aria-current="true" data-value="it" data-disclosure-option> Italiano </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="pt-PT" data-value="pt-PT" data-disclosure-option> português (Portugal) </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="ru" data-value="ru" data-disclosure-option> русский </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="vi" data-value="vi" data-disclosure-option> Tiếng Việt </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="nl" data-value="nl" data-disclosure-option> Nederlands </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="th" data-value="th" data-disclosure-option> ภาษาไทย </a> </li> <li class="disclosure-list__item "> <a class="disclosure-list__option" href="#" lang="tr" data-value="tr" data-disclosure-option> Türkçe </a> </li></ul> <input type="hidden" name="locale_code" id="LocaleSelector-footer" value="it" data-disclosure-input/> </div> </div></form> </div> </div> </footer> </div> </div> </div> </section> </div> <div id="shopify-section-popup" class="shopify-section section-popup"> </div> <div class="floating-contact floating-contact--open" id="floating-contact" data-msg-required="Please fill in this field." data-msg-email="Please enter a valid email." data-msg-country-code="Please select a country code." data-msg-send-timeout="Sending is taking too long. Please check your network and try again." data-msg-confirm-send-download="Click Send to notify us and download the file."> <div class="floating-contact__rail"> <div class="bvs-floating-whatsapp"> <a href="https://wa.me/85293737704" class="bvs-whatsapp-icon-link" target="_blank" aria-label="Chat on WhatsApp" rel="noopener" data-wa-location="floating"> <svg viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"></path></svg> </a> </div> <button type="button" class="floating-contact__tab" id="floating-contact-tab" aria-expanded="true" aria-controls="floating-contact-panel"> <span class="floating-contact__tab-label">Match My Needs</span> </button> </div> <div class="floating-contact__panel" id="floating-contact-panel"> <div class="floating-contact__header"> <div class="floating-contact__title" id="floating-contact-panel-title">Match My Needs</div> <button type="button" class="floating-contact__close btn btn--plain" aria-label="Close"> <span class="feather-icon"><svg aria-hidden="true" focusable="false" role="presentation" class="icon feather-x" viewBox="0 0 24 24"><path d="M18 6L6 18M6 6l12 12"/></svg></span> </button> </div> <div class="floating-contact__loading" data-match-needs-loading hidden aria-live="polite" aria-busy="false"> <div class="floating-contact__loading-spinner" aria-hidden="true"></div> <p class="floating-contact__loading-text">Sending…</p> </div> <div class="floating-contact__success-view" data-match-needs-success-view hidden> <div class="form-success floating-contact__success" data-match-needs-success> <p class="floating-contact__success-text">Got it! We're on it. Expect to hear from us within 24 hours (if it's a holiday weekend, we'll be back right after). While you wait, why not take a peek at our live stock? Great for quick samples or urgent trials while we work on your bulk quote.</p> <p class="floating-contact__success-cta"> <a class="standard-link floating-contact__stock-link" href="/it/pages/personalizzazione-del-servizio" data-check-stock-link> Check Stock Here → </a> </p> </div> <p class="floating-contact__download-fallback" data-pending-download-fallback hidden> <a class="standard-link" href="#" target="_blank" rel="noopener">Click here to download</a> </p> </div> <form method="post" action="/it/contact#floating-contact-form" id="floating-contact-form" accept-charset="UTF-8" class="floating-contact__form"><input type="hidden" name="form_type" value="contact" /><input type="hidden" name="utf8" value="✓" /> <div class="input-wrapper form-row" data-field> <label for="FloatingContactFormName"> Name<span class="floating-contact__required" aria-hidden="true">*</span> </label> <input type="text" name="contact[name]" id="FloatingContactFormName" required value=""> <p class="floating-contact__error" data-error hidden>Please fill in this field.</p> </div> <div class="input-wrapper form-row" data-field> <label for="FloatingContactFormEmail"> Email<span class="floating-contact__required" aria-hidden="true">*</span> </label> <input type="email" name="contact[email]" id="FloatingContactFormEmail" required value="" spellcheck="false" autocomplete="off" autocapitalize="off"> <p class="floating-contact__error" data-error hidden>Please enter a valid email.</p> </div> <div class="input-wrapper form-row" data-field data-phone-field> <label for="FloatingContactFormPhone"> Phone<span class="floating-contact__required" aria-hidden="true">*</span> </label> <div class="floating-contact__phone-row"> <label class="visually-hidden" for="FloatingContactFormPhoneCode">Code</label> <select id="FloatingContactFormPhoneCode" data-phone-country-code required aria-label="Code"> <option value="">Code</option> <option value="+86">+86 China</option> <option value="+852">+852 Hong Kong</option> <option value="+853">+853 Macao</option> <option value="+886">+886 Taiwan</option> <option value="+1">+1 USA / Canada</option> <option value="+44">+44 United Kingdom</option> <option value="+49">+49 Germany</option> <option value="+33">+33 France</option> <option value="+39">+39 Italy</option> <option value="+34">+34 Spain</option> <option value="+31">+31 Netherlands</option> <option value="+32">+32 Belgium</option> <option value="+41">+41 Switzerland</option> <option value="+43">+43 Austria</option> <option value="+45">+45 Denmark</option> <option value="+46">+46 Sweden</option> <option value="+47">+47 Norway</option> <option value="+48">+48 Poland</option> <option value="+351">+351 Portugal</option> <option value="+353">+353 Ireland</option> <option value="+358">+358 Finland</option> <option value="+7">+7 Russia</option> <option value="+81">+81 Japan</option> <option value="+82">+82 South Korea</option> <option value="+91">+91 India</option> <option value="+61">+61 Australia</option> <option value="+64">+64 New Zealand</option> <option value="+65">+65 Singapore</option> <option value="+60">+60 Malaysia</option> <option value="+66">+66 Thailand</option> <option value="+84">+84 Vietnam</option> <option value="+62">+62 Indonesia</option> <option value="+63">+63 Philippines</option> <option value="+971">+971 UAE</option> <option value="+966">+966 Saudi Arabia</option> <option value="+972">+972 Israel</option> <option value="+90">+90 Turkey</option> <option value="+55">+55 Brazil</option> <option value="+52">+52 Mexico</option> <option value="+54">+54 Argentina</option> <option value="+27">+27 South Africa</option> <option value="+234">+234 Nigeria</option> <option value="+20">+20 Egypt</option> </select> <input type="tel" id="FloatingContactFormPhone" data-phone-local required placeholder="Phone number" inputmode="numeric" autocomplete="tel-national"> <input type="hidden" name="contact[phone]" data-phone-combined value=""> </div> <p class="floating-contact__error" data-error hidden>Please fill in this field.</p> </div> <div class="input-wrapper form-row" data-field data-optional> <label for="FloatingContactFormWhatsapp"> WhatsApp </label> <input type="tel" name="contact[whatsapp]" id="FloatingContactFormWhatsapp" placeholder="" inputmode="tel" autocomplete="off" value=""> <p class="floating-contact__error" data-error hidden>Please fill in this field.</p> </div> <div class="input-wrapper form-row" data-field> <label for="FloatingContactFormCompany"> Company<span class="floating-contact__required" aria-hidden="true">*</span> </label> <input type="text" name="contact[company]" id="FloatingContactFormCompany" required value=""> <p class="floating-contact__error" data-error hidden>Please fill in this field.</p> </div> <div class="input-wrapper form-row floating-contact__message-row" data-field> <label for="FloatingContactFormMessage"> To ensure a perfect match, please leave your contact info along with a brief overview of your project.<span class="floating-contact__required" aria-hidden="true">*</span> </label> <textarea rows="3" name="contact[body]" id="FloatingContactFormMessage" required></textarea> <p class="floating-contact__error" data-error hidden>Please fill in this field.</p> </div> <div class="row"> <input type="submit" class="contact-form__submit btn" value="Send"> </div> </form> <p class="floating-contact__send-status" data-match-needs-send-status hidden></p> </div> </div> <button type="button" class="back-to-top" id="back-to-top" aria-label="Back to top" hidden></button> <script> (function () { var root = document.getElementById('floating-contact'); var panel = document.getElementById('floating-contact-panel'); if (!root || root.dataset.initialized === 'true') return; root.dataset.initialized = 'true'; var tab = document.getElementById('floating-contact-tab'); var closeBtn = root.querySelector('.floating-contact__close'); var floatingForm = document.getElementById('floating-contact-form'); var panelPlaceholder = document.createComment('floating-contact-panel-placeholder'); var pendingDownloadUrl = null; var pendingDownloadName = null; if (panel) { root.insertBefore(panelPlaceholder, panel); } var PENDING_DOWNLOAD_KEY = 'bvsPendingMatchNeedsDownload'; var MATCH_NEEDS_COMPLETED_KEY = 'bvsMatchNeedsCompleted'; var FORM_DATA_KEY = 'bvsMatchNeedsFormData'; var RETURN_URL_KEY = 'bvsMatchNeedsReturnUrl'; var SENDING_KEY = 'bvsMatchNeedsSending'; var SUCCESS_KEY = 'bvsMatchNeedsShowSuccess'; var SEND_TRACKED_KEY = 'bvsMatchNeedsSendTracked'; var sendingTimeoutId = null; var captchaPollId = null; var SENDING_TIMEOUT_MS = 30000; function markPendingSuccess() { try { sessionStorage.setItem(SUCCESS_KEY, '1'); } catch (e) {} } function consumePendingSuccessFlag() { try { var pending = sessionStorage.getItem(SUCCESS_KEY) === '1'; if (pending) sessionStorage.removeItem(SUCCESS_KEY); return pending; } catch (e) { return false; } } function getSuccessView() { return (panel && panel.querySelector('[data-match-needs-success-view]')) || (root && root.querySelector('[data-match-needs-success-view]')); } function showSuccessView(form) { var view = getSuccessView(); var targetForm = form || floatingForm; hideSendingLoading(targetForm); setSendStatus(targetForm, ''); if (view) view.hidden = false; if (targetForm) targetForm.hidden = true; markMatchNeedsCompleted(); wireCheckStockLink(panel || targetForm); openPanel(); } function showFormView(options) { options = options || {}; var view = getSuccessView(); if (view) view.hidden = true; if (floatingForm) { floatingForm.hidden = false; if (!options.skipReset && floatingForm.reset) floatingForm.reset(); if (options.restoreSaved) restoreFormData(floatingForm); } hideSendingLoading(floatingForm); setSendStatus(floatingForm, ''); } function getLoadingEl() { return (panel && panel.querySelector('[data-match-needs-loading]')) || (root && root.querySelector('[data-match-needs-loading]')); } function getSendStatusEl(form) { return (form && form.querySelector('[data-match-needs-send-status]')) || (panel && panel.querySelector('[data-match-needs-send-status]')); } function setSendStatus(form, message) { var status = getSendStatusEl(form); if (!status) return; if (!message) { status.hidden = true; status.textContent = ''; return; } status.hidden = false; status.textContent = message; } function clearCaptchaPoll() { if (captchaPollId) { window.clearInterval(captchaPollId); captchaPollId = null; } } function hasVisibleCaptchaChallenge() { return !!( document.querySelector('.shopify-challenge__container') || document.querySelector('.h-captcha iframe') || document.querySelector('.g-recaptcha iframe') || document.querySelector('iframe[src*="hcaptcha"]') || document.querySelector('iframe[src*="recaptcha"]') || document.querySelector('iframe[src*="captcha"]') ); } function restoreBodyFromSaved(form) { var target = form || floatingForm; var bodyInput = target && target.querySelector('[name="contact[body]"]'); if (!bodyInput) return; var saved = readFormData(); if (saved && saved.body) { bodyInput.value = saved.body; return; } bodyInput.value = stripBodyPrefixes(bodyInput.value); } function clearSendingTimeout() { if (sendingTimeoutId) { window.clearTimeout(sendingTimeoutId); sendingTimeoutId = null; } } function setFormSendingState(form, isSending) { if (!form) return; form.classList.toggle('is-sending', !!isSending); var submitBtn = form.querySelector('[type="submit"], .contact-form__submit'); if (submitBtn) { if (isSending) { submitBtn.setAttribute('aria-busy', 'true'); } else { submitBtn.removeAttribute('aria-busy'); } } } function showSendingLoading(form) { setSendStatus(form, ''); var loading = getLoadingEl(); if (loading) { loading.hidden = false; loading.setAttribute('aria-busy', 'true'); } if (panel) panel.classList.add('floating-contact__panel--loading'); setFormSendingState(form || floatingForm, true); try { sessionStorage.setItem(SENDING_KEY, '1'); } catch (e) {} clearSendingTimeout(); clearCaptchaPoll(); // If Shopify CAPTCHA UI appears, drop the overlay so the user can complete it. captchaPollId = window.setInterval(function () { if (!hasVisibleCaptchaChallenge()) return; clearCaptchaPoll(); hideSendingLoading(form || floatingForm); setSendStatus( form || floatingForm, 'Please complete the verification, then click Send.' ); }, 250); sendingTimeoutId = window.setTimeout(function () { clearCaptchaPoll(); // Page never navigated (CAPTCHA / network stall). Unlock UI. hideSendingLoading(form || floatingForm); restoreBodyFromSaved(form || floatingForm); setSendStatus( form || floatingForm, (root && root.getAttribute('data-msg-send-timeout')) || 'Sending is taking too long. Please try again.' ); }, SENDING_TIMEOUT_MS); } function hideSendingLoading(form) { clearSendingTimeout(); clearCaptchaPoll(); var loading = getLoadingEl(); if (loading) { loading.hidden = true; loading.setAttribute('aria-busy', 'false'); } if (panel) panel.classList.remove('floating-contact__panel--loading'); setFormSendingState(form || floatingForm, false); try { sessionStorage.removeItem(SENDING_KEY); } catch (e) {} } function cleanReturnUrl(url) { if (!url) return ''; try { var parsed = new URL(url, window.location.origin); parsed.searchParams.delete('contact_posted'); parsed.searchParams.delete('mn_sent'); parsed.hash = ''; return parsed.pathname + parsed.search; } catch (e) { return String(url).split('#')[0]; } } function buildReturnToUrl(url) { // Shopify only redirects to return_to after a successful contact submit (email sent). var cleaned = cleanReturnUrl(url || getReturnUrl() || window.location.pathname); try { var parsed = new URL(cleaned, window.location.origin); parsed.searchParams.set('mn_sent', '1'); return parsed.pathname + parsed.search; } catch (e) { return cleaned + (cleaned.indexOf('?') >= 0 ? '&' : '?') + 'mn_sent=1'; } } function isSuccessfulContactReturn() { try { var params = new URLSearchParams(window.location.search); return params.get('mn_sent') === '1' || params.get('contact_posted') === 'true'; } catch (e) { return false; } } function clearSuccessQueryParam() { try { var parsed = new URL(window.location.href); if (!parsed.searchParams.has('mn_sent') && !parsed.searchParams.has('contact_posted')) return; parsed.searchParams.delete('mn_sent'); parsed.searchParams.delete('contact_posted'); window.history.replaceState({}, '', parsed.pathname + parsed.search + parsed.hash); } catch (e) {} } function saveReturnUrl(url) { var cleaned = cleanReturnUrl(url || window.location.href); if (!cleaned) return; try { sessionStorage.setItem(RETURN_URL_KEY, cleaned); } catch (e) {} } function getReturnUrl() { try { var stored = sessionStorage.getItem(RETURN_URL_KEY); if (stored) return stored; } catch (e) {} return cleanReturnUrl(window.location.href); } function resolveProductReturnUrl(trigger) { if (trigger) { var productLink = trigger.closest('.product-block, .quickbuy, .grid-product, [data-product-url]'); if (productLink) { var href = productLink.getAttribute('data-product-url') || (productLink.querySelector('a[href*="/products/"]') && productLink.querySelector('a[href*="/products/"]').getAttribute('href')); if (href) return cleanReturnUrl(href); } var triggerHref = trigger.getAttribute('href') || ''; if (triggerHref.indexOf('/products/') !== -1) return cleanReturnUrl(triggerHref); } if (window.location.pathname.indexOf('/products/') !== -1) { return cleanReturnUrl(window.location.href); } var canonical = document.querySelector('link[rel="canonical"]'); if (canonical && canonical.href && canonical.href.indexOf('/products/') !== -1) { return cleanReturnUrl(canonical.href); } return getReturnUrl(); } function ensureReturnToField(form, url) { if (!form) return; var input = form.querySelector('[data-match-needs-return-to], input[name="return_to"]'); if (!input) { input = document.createElement('input'); input.type = 'hidden'; input.name = 'return_to'; input.setAttribute('data-match-needs-return-to', ''); form.appendChild(input); } input.value = url || getReturnUrl() || window.location.pathname; } function wireCheckStockLink(container) { var scope = container || panel || document; var link = scope.querySelector('[data-check-stock-link]'); if (!link) return; // Back to the page where the user opened the form (product detail, etc.) var url = cleanReturnUrl(getReturnUrl() || window.location.pathname); if (url) link.setAttribute('href', url); } function openPanel() { root.classList.add('floating-contact--open'); if (tab) tab.setAttribute('aria-expanded', 'true'); } function closePanel() { root.classList.remove('floating-contact--open'); if (tab) tab.setAttribute('aria-expanded', 'false'); } function restorePanelToRoot() { if (!panel || !root || !panelPlaceholder.parentNode) return; root.insertBefore(panel, panelPlaceholder.nextSibling); } function initPanelFields() { if (!window.jQuery || !panel) return; window.jQuery(panel).find('.input-wrapper input, .input-wrapper textarea').trigger('inputstateEmpty'); } function focusFirstField() { var nameInput = document.getElementById('FloatingContactFormName'); if (!nameInput) return; window.setTimeout(function () { nameInput.focus(); }, 50); } function cleanupQuickbuyMedia() { if (!window.jQuery) return; var $ = window.jQuery; try { if (window.theme && window.theme.ProductMedia) { window.theme.ProductMedia.destroy($('.quickbuy__media-container')); } } catch (e) {} try { $('.quickbuy .slick-initialized').slick('unslick').off('afterChange'); } catch (e) {} $('.quickbuy-form').off('variantChange variantPriceChange variantImageChange'); } function bindColorboxCleanup() { if (!window.jQuery) return; window.jQuery(document).off('cbox_cleanup.matchNeeds').on('cbox_cleanup.matchNeeds', function () { restorePanelToRoot(); root.classList.remove('floating-contact--colorbox-mode'); window.jQuery(document).off('cbox_cleanup.matchNeeds'); }); } function showMatchNeedsInColorbox() { if (!panel) return; restorePanelToRoot(); var $loaded = window.jQuery && window.jQuery('#cboxLoadedContent'); if (!$loaded || !$loaded.length) { openPanel(); focusFirstField(); return; } cleanupQuickbuyMedia(); bindColorboxCleanup(); $loaded.empty(); var $host = window.jQuery('<div class="match-needs-colorbox" id="match-needs-colorbox-host"></div>'); $host.append(panel); $loaded.append($host); root.classList.add('floating-contact--colorbox-mode'); window.jQuery.colorbox.resize(); initPanelFields(); focusFirstField(); } function hideMatchNeedsColorbox() { if (!root.classList.contains('floating-contact--colorbox-mode')) return; if (window.jQuery && window.jQuery.colorbox) { window.jQuery.colorbox.close(); return; } restorePanelToRoot(); root.classList.remove('floating-contact--colorbox-mode'); } function clearFieldError(field) { field.classList.remove('is-invalid'); var error = field.querySelector('[data-error]'); if (error) error.hidden = true; } function showFieldError(field, message) { field.classList.add('is-invalid'); var error = field.querySelector('[data-error]'); if (error) { if (message) error.textContent = message; error.hidden = false; } } function isValidEmail(value) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value); } function syncPhoneCombined(field) { if (!field) return ''; var codeEl = field.querySelector('[data-phone-country-code]'); var localEl = field.querySelector('[data-phone-local]'); var combinedEl = field.querySelector('[data-phone-combined]'); var code = codeEl ? String(codeEl.value || '').trim() : ''; var local = localEl ? String(localEl.value || '').trim().replace(/^[\s+]+/, '') : ''; var combined = code && local ? (code + ' ' + local) : ''; if (combinedEl) combinedEl.value = combined; return combined; } function validationMessages() { return { required: (root && root.getAttribute('data-msg-required')) || 'Please fill in this field.', email: (root && root.getAttribute('data-msg-email')) || 'Please enter a valid email.', countryCode: (root && root.getAttribute('data-msg-country-code')) || 'Please select a country code.' }; } function validateForm(form) { if (!form) return false; var valid = true; var msgs = validationMessages(); form.querySelectorAll('[data-field]').forEach(function (field) { clearFieldError(field); if (field.hasAttribute('data-phone-field')) { var codeEl = field.querySelector('[data-phone-country-code]'); var localEl = field.querySelector('[data-phone-local]'); var code = codeEl ? String(codeEl.value || '').trim() : ''; var local = localEl ? String(localEl.value || '').trim() : ''; if (!code) { showFieldError(field, msgs.countryCode); valid = false; return; } if (!local) { showFieldError(field, msgs.required); valid = false; return; } syncPhoneCombined(field); return; } var input = field.querySelector('input:not([type="hidden"]):not([type="submit"]), textarea'); if (!input) return; var value = String(input.value || '').trim(); var optional = field.hasAttribute('data-optional'); if (!value) { if (optional) return; showFieldError(field, msgs.required); valid = false; return; } if (input.type === 'email' && !isValidEmail(value)) { showFieldError(field, msgs.email); valid = false; } }); return valid; } function stripBodyPrefixes(body) { var text = String(body || ''); text = text.replace(/^WhatsApp:\s*[^\n]*\n\n/, ''); text = text.replace(/\n\nDownloaded file:\s*[^\n]*\nDownload URL:\s*[^\n]*\s*$/i, ''); text = text.replace(/\n\nDownloaded file:\s*[^\n]*\s*$/i, ''); return text.trim(); } function readFormData() { try { var raw = localStorage.getItem(FORM_DATA_KEY); if (!raw) return null; var data = JSON.parse(raw); if (!data || !data.email || !data.name || !data.body) return null; return data; } catch (e) { return null; } } function saveFormData(form) { if (!form) return; form.querySelectorAll('[data-phone-field]').forEach(function (field) { syncPhoneCombined(field); }); var nameInput = form.querySelector('[name="contact[name]"]'); var emailInput = form.querySelector('[name="contact[email]"]'); var phoneCombined = form.querySelector('[data-phone-combined]'); var phoneCodeEl = form.querySelector('[data-phone-country-code]'); var phoneLocalEl = form.querySelector('[data-phone-local]'); var whatsappInput = form.querySelector('[name="contact[whatsapp]"]'); var companyInput = form.querySelector('[name="contact[company]"]'); var bodyInput = form.querySelector('[name="contact[body]"]'); var data = { name: nameInput ? String(nameInput.value || '').trim() : '', email: emailInput ? String(emailInput.value || '').trim() : '', phone: phoneCombined ? String(phoneCombined.value || '').trim() : '', phoneCode: phoneCodeEl ? String(phoneCodeEl.value || '').trim() : '', phoneLocal: phoneLocalEl ? String(phoneLocalEl.value || '').trim() : '', whatsapp: whatsappInput ? String(whatsappInput.value || '').trim() : '', company: companyInput ? String(companyInput.value || '').trim() : '', body: stripBodyPrefixes(bodyInput ? bodyInput.value : '') }; if (!data.name || !data.email || !data.body) return; try { localStorage.setItem(FORM_DATA_KEY, JSON.stringify(data)); } catch (e) {} } function applyPhoneToForm(form, data) { if (!form || !data) return; var phoneCodeEl = form.querySelector('[data-phone-country-code]'); var phoneLocalEl = form.querySelector('[data-phone-local]'); var phoneCombined = form.querySelector('[data-phone-combined]'); var code = data.phoneCode || ''; var local = data.phoneLocal || ''; if ((!code || !local) && data.phone) { var match = String(data.phone).match(/^(\+\d+)\s+(.+)$/); if (match) { code = match[1]; local = match[2]; } } if (phoneCodeEl && code) phoneCodeEl.value = code; if (phoneLocalEl && local) phoneLocalEl.value = local; if (phoneCombined) { phoneCombined.value = (code && local) ? (code + ' ' + local) : (data.phone || ''); } } function restoreFormData(form) { var data = readFormData(); if (!form || !data) return false; var nameInput = form.querySelector('[name="contact[name]"]'); var emailInput = form.querySelector('[name="contact[email]"]'); var whatsappInput = form.querySelector('[name="contact[whatsapp]"]'); var companyInput = form.querySelector('[name="contact[company]"]'); var bodyInput = form.querySelector('[name="contact[body]"]'); if (nameInput) nameInput.value = data.name || ''; if (emailInput) emailInput.value = data.email || ''; if (whatsappInput) whatsappInput.value = data.whatsapp || ''; if (companyInput) companyInput.value = data.company || ''; if (bodyInput) bodyInput.value = data.body || ''; applyPhoneToForm(form, data); if (window.jQuery) { try { window.jQuery(form).find('.input-wrapper input, .input-wrapper textarea').trigger('inputstateEmpty'); } catch (e) {} } return true; } function resolvePendingDownload() { if (!pendingDownloadUrl) { var stored = readPendingDownload(); if (stored && stored.url) { pendingDownloadUrl = stored.url; pendingDownloadName = stored.name || ''; } } return { url: normalizeUrl(pendingDownloadUrl || ''), name: pendingDownloadName || '' }; } function prepareFormBeforeSend(form) { form.querySelectorAll('[data-phone-field]').forEach(function (field) { syncPhoneCombined(field); }); var whatsappInput = form.querySelector('[name="contact[whatsapp]"]'); var bodyInput = form.querySelector('[name="contact[body]"]'); var saved = readFormData(); var rawBody = saved && saved.body ? String(saved.body) : stripBodyPrefixes(bodyInput ? bodyInput.value : ''); var parts = []; var whatsappValue = whatsappInput ? String(whatsappInput.value || '').trim() : ''; if (!whatsappValue && saved && saved.whatsapp) whatsappValue = String(saved.whatsapp).trim(); if (whatsappValue) parts.push('WhatsApp: ' + whatsappValue); if (rawBody) parts.push(rawBody); var pending = resolvePendingDownload(); if (pending.url) { // Filename only — including a full URL often trips Shopify contact spam filters // and the submission never completes (spinner until timeout, no email). parts.push('Downloaded file: ' + (pending.name || pending.url)); } if (bodyInput) bodyInput.value = parts.join('\n\n'); // Origin page (e.g. product detail) — Check Stock Here returns here. var originUrl = getReturnUrl() || cleanReturnUrl(window.location.href) || window.location.pathname; saveReturnUrl(originUrl); // return_to with mn_sent=1: Shopify redirects here ONLY after email is accepted. ensureReturnToField(form, buildReturnToUrl(originUrl)); } function submitContactForm(form) { // Prefer a real submit control click so Shopify CAPTCHA sees a user gesture. var btn = form.querySelector('[type="submit"], .contact-form__submit'); if (btn) { form.setAttribute('data-bvs-allow-submit', '1'); btn.click(); return; } form.setAttribute('data-bvs-allow-submit', '1'); if (typeof form.requestSubmit === 'function') { form.requestSubmit(); return; } form.removeAttribute('data-bvs-allow-submit'); HTMLFormElement.prototype.submit.call(form); } function hasCompletedMatchNeeds() { try { if (localStorage.getItem(MATCH_NEEDS_COMPLETED_KEY) !== '1') return false; return !!readFormData(); } catch (e) { return false; } } function markMatchNeedsCompleted() { try { localStorage.setItem(MATCH_NEEDS_COMPLETED_KEY, '1'); } catch (e) {} } function trackMatchNeedsSend() { // GA4 custom event fired only after Shopify confirms the contact form was accepted. if (typeof gtag !== 'function') return; try { if (sessionStorage.getItem(SEND_TRACKED_KEY) === '1') return; sessionStorage.setItem(SEND_TRACKED_KEY, '1'); } catch (e) {} gtag('event', 'match_my_needs_send', { form_name: 'Match My Needs', form_id: 'floating-contact-form' }); } function autoResubmitForDownload(options) { options = options || {}; if (!floatingForm) return false; hideMatchNeedsColorbox(); showFormView({ skipReset: true, restoreSaved: true }); setPendingDownloadOptions(options); if (options.returnUrl) saveReturnUrl(options.returnUrl); else saveReturnUrl(resolveProductReturnUrl(options.trigger || null)); ensureReturnToField(floatingForm, getReturnUrl()); if (!restoreFormData(floatingForm) || !validateForm(floatingForm)) { try { localStorage.removeItem(MATCH_NEEDS_COMPLETED_KEY); } catch (e) {} openPanel(); focusFirstField(); return false; } // Same user gesture as Download click → native Send path (prepare + CAPTCHA). // Do NOT set data-bvs-allow-submit (that skips prepare / breaks CAPTCHA). openPanel(); setSendStatus(floatingForm, ''); var btn = floatingForm.querySelector('[type="submit"], .contact-form__submit'); if (btn) { btn.click(); return true; } return false; } function normalizeUrl(url) { if (!url) return ''; url = String(url).trim(); if (!url || url === '#' || url.indexOf('javascript:') === 0) return ''; // Use lcdbvs custom domain for file downloads when the source URL is Shopify CDN. // (Spec documents / company profile PDF are stored on Shopify CDN but we want the browser URL to show lcdbvs.) url = url .replace(/^https?:\/\/cdn\.shopify\.com/i, 'https://www.lcdbvs.com') .replace(/^\/\/cdn\.shopify\.com/i, 'https://www.lcdbvs.com'); return url; } function triggerPendingDownload(url, name) { var downloadUrl = normalizeUrl(url || pendingDownloadUrl); var downloadName = name || pendingDownloadName; if (!downloadUrl) return false; var openedWindow = null; try { openedWindow = window.open(downloadUrl, '_blank'); if (openedWindow) { try { openedWindow.opener = null; } catch (e) {} } } catch (e) { openedWindow = null; } if (!openedWindow || openedWindow.closed) { var link = document.createElement('a'); link.href = downloadUrl; link.target = '_blank'; link.rel = 'noopener'; if (downloadName) link.download = downloadName; document.body.appendChild(link); link.click(); document.body.removeChild(link); } pendingDownloadUrl = null; pendingDownloadName = null; return true; } function savePendingDownload(url, name, opened) { var downloadUrl = normalizeUrl(url || pendingDownloadUrl); if (!downloadUrl) return; try { sessionStorage.setItem(PENDING_DOWNLOAD_KEY, JSON.stringify({ url: downloadUrl, name: name || pendingDownloadName || '', opened: !!opened })); } catch (e) {} } function readPendingDownload() { try { var raw = sessionStorage.getItem(PENDING_DOWNLOAD_KEY); if (!raw) return null; return JSON.parse(raw); } catch (e) { return null; } } function clearPendingDownload() { try { sessionStorage.removeItem(PENDING_DOWNLOAD_KEY); } catch (e) {} } function showDownloadFallback(container, data) { if (!container || !data || !data.url) return; var fallback = container.querySelector('[data-pending-download-fallback]'); if (!fallback) return; var anchor = fallback.querySelector('a'); if (!anchor) return; anchor.href = data.url; fallback.hidden = false; anchor.addEventListener('click', function () { clearPendingDownload(); }, { once: true }); } function setPendingDownloadOptions(options) { options = options || {}; pendingDownloadUrl = normalizeUrl(options.downloadUrl || ''); pendingDownloadName = options.downloadName || null; if (pendingDownloadUrl) { savePendingDownload(pendingDownloadUrl, pendingDownloadName); } else { clearPendingDownload(); } } function consumePendingDownloadAfterSuccess(form) { // Only show success when Shopify accepted the form and redirected to return_to (?mn_sent=1). // Pre-submit session flags caused "success UI without email" — do not use them here. try { sessionStorage.removeItem(SUCCESS_KEY); } catch (e) {} if (!isSuccessfulContactReturn()) { try { sessionStorage.removeItem(SENDING_KEY); } catch (e) {} return; } saveReturnUrl(cleanReturnUrl(window.location.href)); showSuccessView(form); trackMatchNeedsSend(); clearSuccessQueryParam(); var data = readPendingDownload(); if (data && data.url) { showDownloadFallback(panel || form, data); if (!data.opened) { triggerPendingDownload(data.url, data.name || ''); } clearPendingDownload(); } } function attachFormHandlers(form) { if (!form || form.dataset.validationBound === 'true') return; form.dataset.validationBound = 'true'; form.setAttribute('novalidate', 'novalidate'); form.querySelectorAll('input, textarea, select').forEach(function (input) { input.removeAttribute('readonly'); input.removeAttribute('disabled'); input.addEventListener('input', function () { var field = input.closest('[data-field]'); if (field) { clearFieldError(field); if (field.hasAttribute('data-phone-field')) syncPhoneCombined(field); } }); input.addEventListener('change', function () { var field = input.closest('[data-field]'); if (field) { clearFieldError(field); if (field.hasAttribute('data-phone-field')) syncPhoneCombined(field); } }); input.addEventListener('blur', function () { var field = input.closest('[data-field]'); if (!field || field.hasAttribute('data-optional')) return; var msgs = validationMessages(); if (field.hasAttribute('data-phone-field')) { var codeEl = field.querySelector('[data-phone-country-code]'); var localEl = field.querySelector('[data-phone-local]'); var code = codeEl ? String(codeEl.value || '').trim() : ''; var local = localEl ? String(localEl.value || '').trim() : ''; if (!code && local) { showFieldError(field, msgs.countryCode); } else if (code && local) { syncPhoneCombined(field); } return; } var value = String(input.value || '').trim(); if (!value) return; if (input.type === 'email' && !isValidEmail(value)) { showFieldError(field, msgs.email); } }); }); form.addEventListener('submit', function (evt) { // Second pass only used if something re-triggers submit with the allow flag. if (form.getAttribute('data-bvs-allow-submit') === '1') { form.removeAttribute('data-bvs-allow-submit'); showSendingLoading(form); return; } if (!validateForm(form)) { evt.preventDefault(); hideSendingLoading(form); var firstInvalid = form.querySelector('.is-invalid select, .is-invalid input, .is-invalid textarea'); if (firstInvalid) firstInvalid.focus(); return false; } // Valid submit: prepare fields in this same event turn, then let the browser // continue. Do NOT preventDefault + requestSubmit — that breaks Shopify CAPTCHA // (endless spinner → "Sending is taking too long", no email). saveFormData(form); prepareFormBeforeSend(form); markMatchNeedsCompleted(); if (!pendingDownloadUrl) { var stored = readPendingDownload(); if (stored && stored.url) { pendingDownloadUrl = stored.url; pendingDownloadName = stored.name || ''; } } if (pendingDownloadUrl) { savePendingDownload(pendingDownloadUrl, pendingDownloadName || '', false); } else { clearPendingDownload(); } showSendingLoading(form); // Native submit proceeds; CAPTCHA can attach its token on this event. return true; }); } window.openFloatingContact = function (options) { options = options || {}; hideMatchNeedsColorbox(); showFormView({ restoreSaved: hasCompletedMatchNeeds() }); setPendingDownloadOptions(options); if (options.returnUrl) saveReturnUrl(options.returnUrl); else saveReturnUrl(resolveProductReturnUrl(options.trigger || null)); ensureReturnToField(floatingForm, getReturnUrl()); openPanel(); focusFirstField(); }; window.openMatchNeedsModal = function (options) { options = options || {}; showFormView({ restoreSaved: hasCompletedMatchNeeds() }); setPendingDownloadOptions(options); if (options.returnUrl) saveReturnUrl(options.returnUrl); else saveReturnUrl(resolveProductReturnUrl(options.trigger || null)); ensureReturnToField(floatingForm, getReturnUrl()); showMatchNeedsInColorbox(); }; if (closeBtn) { closeBtn.addEventListener('click', function () { if (root.classList.contains('floating-contact--colorbox-mode')) { hideMatchNeedsColorbox(); return; } closePanel(); }); } if (tab) { tab.addEventListener('click', function () { hideMatchNeedsColorbox(); pendingDownloadUrl = null; pendingDownloadName = null; clearPendingDownload(); showFormView({ restoreSaved: !!readFormData() }); saveReturnUrl(resolveProductReturnUrl(null)); ensureReturnToField(floatingForm, getReturnUrl()); openPanel(); focusFirstField(); }); } attachFormHandlers(floatingForm); document.addEventListener('click', function (evt) { var toggle = evt.target.closest('[data-spec-download-toggle]'); if (toggle) { evt.preventDefault(); evt.stopPropagation(); var dropdown = toggle.closest('[data-spec-download-dropdown]'); if (!dropdown) return; var menu = dropdown.querySelector('[data-spec-download-menu]'); var willOpen = !dropdown.classList.contains('is-open'); document.querySelectorAll('[data-spec-download-dropdown].is-open').forEach(function (openDropdown) { openDropdown.classList.remove('is-open'); var openToggle = openDropdown.querySelector('[data-spec-download-toggle]'); var openMenu = openDropdown.querySelector('[data-spec-download-menu]'); if (openToggle) openToggle.setAttribute('aria-expanded', 'false'); if (openMenu) openMenu.hidden = true; }); if (willOpen) { dropdown.classList.add('is-open'); toggle.setAttribute('aria-expanded', 'true'); if (menu) menu.hidden = false; } return; } if (!evt.target.closest('[data-spec-download-dropdown]')) { document.querySelectorAll('[data-spec-download-dropdown].is-open').forEach(function (openDropdown) { openDropdown.classList.remove('is-open'); var openToggle = openDropdown.querySelector('[data-spec-download-toggle]'); var openMenu = openDropdown.querySelector('[data-spec-download-menu]'); if (openToggle) openToggle.setAttribute('aria-expanded', 'false'); if (openMenu) openMenu.hidden = true; }); } var trigger = evt.target.closest('[data-open-match-needs]'); if (!trigger) return; evt.preventDefault(); evt.stopPropagation(); var downloadUrl = normalizeUrl(trigger.getAttribute('data-download-url') || ''); var downloadName = trigger.getAttribute('data-download-name') || ''; var specDropdown = trigger.closest('[data-spec-download-dropdown]'); if (specDropdown) { specDropdown.classList.remove('is-open'); var specToggle = specDropdown.querySelector('[data-spec-download-toggle]'); var specMenu = specDropdown.querySelector('[data-spec-download-menu]'); if (specToggle) specToggle.setAttribute('aria-expanded', 'false'); if (specMenu) specMenu.hidden = true; } if (downloadUrl && hasCompletedMatchNeeds()) { document.querySelectorAll('.product-specification-download__hint').forEach(function (hint) { hint.hidden = true; }); autoResubmitForDownload({ downloadUrl: downloadUrl, downloadName: downloadName, trigger: trigger, returnUrl: resolveProductReturnUrl(trigger) }); return; } document.querySelectorAll('.product-specification-download__hint').forEach(function (hint) { hint.hidden = true; }); var item = trigger.closest('.product-specification-download, .P-GETquotation-wrap, .nav-match-needs-item'); var hint = item && item.querySelector('.product-specification-download__hint'); if (hint) hint.hidden = false; var navDropdown = trigger.closest('.site-nav__item--has-dropdown'); if (navDropdown) navDropdown.classList.add('open'); var contactOptions = { downloadUrl: downloadUrl, downloadName: downloadName, trigger: trigger, returnUrl: resolveProductReturnUrl(trigger) }; if (trigger.closest('#colorbox, .quickbuy')) { window.openMatchNeedsModal(contactOptions); } else { window.openFloatingContact(contactOptions); } }); // Remember current page as default return target (product detail / listing / etc.). saveReturnUrl(window.location.href); wireCheckStockLink(panel); // Shopify redirects here with ?mn_sent=1 only after the contact email is accepted. consumePendingDownloadAfterSuccess(floatingForm); // Response already returned (success or error) — clear leftover sending UI if still visible. if (!getSuccessView() || getSuccessView().hidden) { hideSendingLoading(floatingForm); } window.addEventListener('pageshow', function () { if (getSuccessView() && !getSuccessView().hidden) return; hideSendingLoading(floatingForm); }); })(); </script> <a href="#" class="focus-tint" aria-hidden="true" aria-label="Close"></a> <script src="//www.lcdbvs.com/cdn/shop/t/7/assets/vendor.js?v=41817386187007524081783746709" defer="defer"></script> <script src="//www.lcdbvs.com/cdn/shop/t/7/assets/back-to-top.js?v=49947101936429319411783763857" defer="defer"></script> <script src="//www.lcdbvs.com/cdn/shop/t/7/assets/theme.js?v=99459919975624509881788579693" defer="defer"></script> <script> (function () { var DEFAULT_PROFILE_URL = "\/it\/pages\/profilo-aziendale"; function normalizeTerm(term) { return String(term || '').replace(/\*/g, ' ').replace(/\s+/g, ' ').trim().toLowerCase(); } function isCompanyProfileSearch(term) { var t = normalizeTerm(term); return t === 'profile' || t === 'company profile' || t === 'download company profile'; } function resolveCompanyProfileUrl() { return DEFAULT_PROFILE_URL; } function redirectToCompanyProfile() { var url = resolveCompanyProfileUrl(); if (!url) return false; window.location.assign(url); return true; } window.bvsSearchProfileRedirect = { isMatch: isCompanyProfileSearch, resolveUrl: resolveCompanyProfileUrl, redirect: redirectToCompanyProfile }; document.addEventListener('submit', function (evt) { var form = evt.target; if (!form || form.nodeName !== 'FORM') return; if (!form.classList.contains('search-form') && !form.classList.contains('search-page-form') && form.getAttribute('role') !== 'search') { return; } var input = form.querySelector('input[name="q"]'); if (!input || !isCompanyProfileSearch(input.value)) return; evt.preventDefault(); redirectToCompanyProfile(); }, true); })(); </script> <script> (function () { function isWhatsAppLink(link) { if (!link || !link.href) return false; var href = link.href; return href.indexOf('wa.me/') !== -1 || href.indexOf('api.whatsapp.com') !== -1 || href.indexOf('whatsapp.com/send') !== -1 || href.indexOf('web.whatsapp.com') !== -1; } function trackWhatsAppClick(link) { if (typeof gtag !== 'function') return; var text = (link.getAttribute('aria-label') || link.textContent || '') .replace(/\s+/g, ' ') .trim() .slice(0, 100); gtag('event', 'whatsapp_click', { wa_location: link.getAttribute('data-wa-location') || 'unknown', link_url: link.href, link_text: text }); } // capture: true so the event is recorded before the new tab opens / navigation. document.addEventListener('click', function (evt) { var target = evt.target; if (!target || typeof target.closest !== 'function') return; var link = target.closest('a[href]'); if (!isWhatsAppLink(link)) return; trackWhatsAppClick(link); }, true); })(); </script> <script> (function () { function downgradeLanguageHeadings() { var headings = document.querySelectorAll('h1,h2,h3,h4,h5,h6'); for (var i = 0; i < headings.length; i++) { var el = headings[i]; if (el.textContent.trim().toLowerCase() === 'language') { var span = document.createElement('span'); span.className = el.className; span.setAttribute('aria-label', 'Language'); span.innerHTML = el.innerHTML; if (el.parentNode) el.parentNode.replaceChild(span, el); } } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', downgradeLanguageHeadings); window.addEventListener('load', function () { setTimeout(downgradeLanguageHeadings, 300); }); } else { downgradeLanguageHeadings(); } })(); </script><script> (function () { function loadScript(src, attrs) { var s = document.createElement('script'); s.src = src; s.async = true; if (attrs) { Object.keys(attrs).forEach(function (key) { s.setAttribute(key, attrs[key]); }); } document.head.appendChild(s); return s; } function initAnalytics() { loadScript('https://www.googletagmanager.com/gtag/js?id=G-ZXP1GWJW3Y'); gtag('js', new Date()); gtag('config', 'G-ZXP1GWJW3Y'); gtag('config', 'AW-10974733752'); (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:3625660,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); } function scheduleAnalytics() { if ('requestIdleCallback' in window) { requestIdleCallback(initAnalytics, { timeout: 4000 }); } else { setTimeout(initAnalytics, 2500); } } if (document.readyState === 'complete') { scheduleAnalytics(); } else { window.addEventListener('load', scheduleAnalytics); } })(); </script> </body> </html> <style> @media only screen and (max-width: 992px) { .transcy-locale-name{ color: black; } } </style>