<?php /* Plugin Name: Vigilanti Styles Description: Styles personnalises pour le site Vigilanti - Design moderne 2025 Version: 2.8 Author: Vigilanti */ if (!defined('ABSPATH')) exit; add_action('wp_head', 'vigilanti_inject_css', 999); function vigilanti_inject_css() { $css_url = plugins_url('vigilanti.css', __FILE__); echo '<link rel="stylesheet" id="vigilanti-custom-css" href="' . esc_url($css_url) . '?v=3.0" type="text/css" media="all" />' . "\n"; } // Injecter aussi le CSS des produits directement pour éviter les problèmes de cache add_action('wp_head', 'vigilanti_inject_product_css', 1000); function vigilanti_inject_product_css() { ?> <style id="vigilanti-product-css"> /* ==================================================== VIGILANTI — CSS PRODUITS 2 COLONNES v2.2 Mise à jour : images agrandies + fond sombre ==================================================== */ /* Hero des pages */ .vigi-page-hero { background-size: cover !important; background-position: center !important; background-repeat: no-repeat !important; min-height: 320px !important; display: flex !important; align-items: center !important; justify-content: center !important; position: relative !important; margin-bottom: 0 !important; } .vigi-page-hero::before { content: "" !important; position: absolute !important; inset: 0 !important; background: rgba(10,10,30,0.72) !important; } .vigi-page-hero-inner { position: relative !important; z-index: 2 !important; text-align: center !important; color: #fff !important; padding: 40px 20px !important; max-width: 800px !important; } .vigi-page-hero-inner h1 { font-size: 2.8rem !important; font-weight: 800 !important; color: #fff !important; margin-bottom: 16px !important; text-shadow: 0 2px 8px rgba(0,0,0,0.5) !important; } .vigi-page-hero-inner p { font-size: 1.15rem !important; color: rgba(255,255,255,0.88) !important; } /* Section wrapper */ .vigi-section { padding: 60px 0 !important; } .vigi-section-inner { max-width: 1200px !important; margin: 0 auto !important; padding: 0 30px !important; } .vigi-section-title { font-size: 2rem !important; font-weight: 700 !important; color: #1a1a2e !important; text-align: center !important; margin-bottom: 40px !important; padding-bottom: 16px !important; border-bottom: 3px solid #dc143c !important; } .vigi-intro { font-size: 1.1rem !important; color: #444 !important; text-align: center !important; max-width: 800px !important; margin: 0 auto 40px !important; line-height: 1.7 !important; } /* ==================================================== TEMPLATE PRODUIT 2 COLONNES ==================================================== */ .vigi-product { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 0 !important; align-items: stretch !important; margin-bottom: 50px !important; background: #0d0f1a !important; border-radius: 12px !important; overflow: hidden !important; box-shadow: 0 4px 32px rgba(0,0,0,0.35) !important; border: 1px solid rgba(220,20,60,0.18) !important; transition: box-shadow 0.3s ease, border-color 0.3s ease !important; padding: 0 !important; border-bottom: 1px solid rgba(220,20,60,0.18) !important; } .vigi-product:hover { box-shadow: 0 8px 48px rgba(220,20,60,0.30) !important; border-color: rgba(220,20,60,0.40) !important; } .vigi-product-img { background: #060810 !important; overflow: hidden !important; display: flex !important; align-items: center !important; justify-content: center !important; min-height: 600px !important; border-radius: 0 !important; box-shadow: none !important; padding: 30px !important; } .vigi-product-img img { width: 100% !important; height: auto !important; object-fit: contain !important; display: block !important; max-height: 540px !important; transition: transform 0.4s ease !important; } .vigi-product-img:hover img { transform: scale(1.03) !important; } .vigi-product-info { padding: 36px 40px !important; display: flex !important; flex-direction: column !important; justify-content: center !important; background: #12141f !important; border-left: 1px solid rgba(220,20,60,0.12) !important; } .vigi-product-info h3 { font-size: 1.5rem !important; font-weight: 700 !important; color: #ffffff !important; margin-bottom: 14px !important; line-height: 1.3 !important; text-shadow: 0 1px 4px rgba(0,0,0,0.4) !important; } .vigi-product-info p { color: rgba(255,255,255,0.78) !important; line-height: 1.7 !important; margin-bottom: 18px !important; font-size: 1rem !important; } /* Specs list */ .vigi-specs { list-style: none !important; padding: 0 !important; margin: 0 0 22px 0 !important; } .vigi-specs li { padding: 5px 0 5px 22px !important; position: relative !important; color: rgba(255,255,255,0.72) !important; font-size: 0.95rem !important; border-bottom: 1px solid rgba(255,255,255,0.08) !important; } .vigi-specs li::before { content: "✓" !important; position: absolute !important; left: 0 !important; color: #dc143c !important; font-weight: 700 !important; } /* Prix */ .vigi-price { background: linear-gradient(135deg, #1a1a2e, #2d2d4e) !important; color: #fff !important; padding: 14px 20px !important; border-radius: 8px !important; margin-bottom: 20px !important; font-size: 1rem !important; border-left: none !important; } .vigi-price strong { color: #ff6b6b !important; font-size: 1.3rem !important; font-weight: 800 !important; } .vigi-price-note { color: rgba(255,255,255,0.65) !important; font-size: 0.85rem !important; } /* Bouton */ .vigi-btn-primary { display: inline-block !important; background: #dc143c !important; color: #fff !important; padding: 12px 28px !important; border-radius: 6px !important; font-weight: 700 !important; font-size: 0.95rem !important; text-decoration: none !important; transition: background 0.2s ease, transform 0.2s ease !important; align-self: flex-start !important; } .vigi-btn-primary:hover { background: #b01030 !important; color: #fff !important; } /* Produit inversé (image à droite) */ .vigi-product-reverse { direction: ltr !important; } .vigi-product-reverse .vigi-product-img { order: 2 !important; } .vigi-product-reverse .vigi-product-info { order: 1 !important; } /* CTA section */ .vigi-cta { background: linear-gradient(135deg, #1a1a2e 0%, #2d1a2e 100%) !important; color: #fff !important; text-align: center !important; padding: 70px 30px !important; } .vigi-cta h2 { font-size: 2rem !important; font-weight: 700 !important; color: #fff !important; margin-bottom: 16px !important; } .vigi-cta p { color: rgba(255,255,255,0.8) !important; font-size: 1.1rem !important; margin-bottom: 30px !important; } /* ==================================================== GAMING SERIES HERO ==================================================== */ .vigi-gaming-hero { background: linear-gradient(135deg, #0d0d1a 0%, #1a0a0a 50%, #0d0d1a 100%) !important; text-align: center !important; padding: 60px 30px !important; border-bottom: 3px solid #dc143c !important; } .vigi-gaming-logo { max-width: 320px !important; width: 100% !important; height: auto !important; margin-bottom: 24px !important; filter: drop-shadow(0 0 20px rgba(220,20,60,0.4)) !important; } .vigi-gaming-tagline { color: rgba(255,255,255,0.85) !important; font-size: 1.1rem !important; max-width: 700px !important; margin: 0 auto !important; line-height: 1.7 !important; } /* ==================================================== PAGE CONTACT ==================================================== */ .vigi-contact-grid { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 50px !important; margin-bottom: 60px !important; } .vigi-contact-info { background: linear-gradient(135deg, #1a1a2e, #2d2d4e) !important; border-radius: 12px !important; padding: 40px !important; color: #fff !important; } .vigi-contact-info h2 { font-size: 1.6rem !important; font-weight: 700 !important; color: #fff !important; margin-bottom: 30px !important; padding-bottom: 16px !important; border-bottom: 2px solid rgba(220,20,60,0.5) !important; } .vigi-contact-item { display: flex !important; align-items: flex-start !important; gap: 16px !important; margin-bottom: 22px !important; padding-bottom: 22px !important; border-bottom: 1px solid rgba(255,255,255,0.1) !important; } .vigi-contact-icon { font-size: 1.4rem !important; flex-shrink: 0 !important; width: 36px !important; text-align: center !important; } .vigi-contact-item a { color: #ff6b6b !important; text-decoration: none !important; } .vigi-contact-item a:hover { color: #ff9999 !important; } .vigi-contact-alt { margin-top: 30px !important; text-align: center !important; } .vigi-contact-alt p { color: rgba(255,255,255,0.7) !important; margin-bottom: 16px !important; } .vigi-contact-form { background: #fff !important; border-radius: 12px !important; padding: 40px !important; box-shadow: 0 4px 24px rgba(0,0,0,0.1) !important; } .vigi-contact-form h2 { font-size: 1.6rem !important; font-weight: 700 !important; color: #1a1a2e !important; margin-bottom: 24px !important; padding-bottom: 16px !important; border-bottom: 2px solid #dc143c !important; } .vigi-map-section { margin-top: 20px !important; } .vigi-map-section h3 { font-size: 1.3rem !important; color: #1a1a2e !important; margin-bottom: 20px !important; } .vigi-map-wrap { border-radius: 12px !important; overflow: hidden !important; box-shadow: 0 4px 24px rgba(0,0,0,0.1) !important; } /* ==================================================== RESPONSIVE ==================================================== */ @media (max-width: 768px) { .vigi-product { grid-template-columns: 1fr !important; } .vigi-product-reverse .vigi-product-img { order: 0 !important; } .vigi-product-reverse .vigi-product-info { order: 0 !important; } .vigi-product-img img { min-height: 260px !important; max-height: 320px !important; } .vigi-product-info { padding: 24px 20px !important; } .vigi-page-hero-inner h1 { font-size: 2rem !important; } .vigi-contact-grid { grid-template-columns: 1fr !important; } .vigi-gaming-logo { max-width: 220px !important; } } </style> <?php } // ============================================================ // FOOTER : Remplacer "Propulsé par WordPress" par "VIGILANTI" // ============================================================ add_filter('astra_footer_copyright_text', 'vigilanti_footer_copyright'); function vigilanti_footer_copyright($text) { return 'VIGILANTI &copy; ' . date('Y') . ' &mdash; Tous droits r&eacute;serv&eacute;s'; } // Masquer le lien WordPress dans le footer Astra add_filter('astra_footer_sml_layout', 'vigilanti_remove_wp_credit', 99); function vigilanti_remove_wp_credit($layout) { $layout = preg_replace('/<span[^>]*class="[^"]*ast-footer-copyright[^"]*"[^>]*>.*?Propuls.*?<\/span>/si', '', $layout); return $layout; } // Filtrer le texte du footer WordPress natif add_filter('the_generator', '__return_empty_string'); // Remplacer dans le footer HTML final add_action('wp_footer', 'vigilanti_replace_footer_text', 999); function vigilanti_replace_footer_text() { ?> <script> document.addEventListener('DOMContentLoaded', function() { var footerLinks = document.querySelectorAll('.site-info a[href*="wordpress.org"], .ast-footer-copyright a[href*="wordpress.org"]'); footerLinks.forEach(function(el) { var parent = el.parentElement; if (parent) { parent.innerHTML = parent.innerHTML .replace(/Propuls[^<]*par[^<]*WordPress/gi, 'VIGILANTI') .replace(/Powered by WordPress/gi, 'VIGILANTI') .replace(/<a[^>]*wordpress\.org[^>]*>[^<]*<\/a>/gi, 'VIGILANTI'); } }); // Chercher aussi dans tout le footer var footer = document.querySelector('.site-footer, #colophon, .ast-small-footer'); if (footer) { footer.innerHTML = footer.innerHTML .replace(/Propuls[\u00e9e] par <a[^>]*>[^<]*<\/a>/gi, '') .replace(/Powered by <a[^>]*>[^<]*<\/a>/gi, ''); } }); </script> <?php } // ============================================================ // SHORTCODE : Formulaire de contact Vigilanti — Accès restreint aux clients validés // ============================================================ add_shortcode('vigi_contact_form', 'vigilanti_contact_form_shortcode'); function vigilanti_contact_form_shortcode() { ob_start(); // === ÉTAT 1 : Utilisateur non connecté === if (!is_user_logged_in()) { $login_url = home_url('/connexion-client/'); $register_url = home_url('/inscription-client/'); ?> <div class="vigi-contact-form-wrap" style="text-align:center;padding:40px 20px;"> <div style="background:linear-gradient(135deg,#1a1a2e,#2d2d4e);border-radius:12px;padding:40px;color:#fff;max-width:560px;margin:0 auto;"> <div style="font-size:3rem;margin-bottom:16px;">🔒</div> <h3 style="color:#fff;font-size:1.5rem;margin-bottom:12px;">Accès réservé aux clients enregistrés</h3> <p style="color:rgba(255,255,255,0.8);margin-bottom:28px;line-height:1.7;"> Pour soumettre une demande de devis, vous devez disposer d'un compte client validé.<br> Vous pouvez également nous joindre directement par téléphone ou par email. </p> <div style="display:flex;gap:16px;justify-content:center;flex-wrap:wrap;margin-bottom:28px;"> <a href="<?php echo esc_url($register_url); ?>" style="background:#dc143c;color:#fff;padding:14px 28px;border-radius:6px;font-weight:700;text-decoration:none;font-size:1rem;"> Créer un compte </a> <a href="<?php echo esc_url($login_url); ?>" style="background:rgba(255,255,255,0.15);color:#fff;padding:14px 28px;border-radius:6px;font-weight:700;text-decoration:none;font-size:1rem;border:1px solid rgba(255,255,255,0.3);"> Se connecter </a> </div> <p style="color:rgba(255,255,255,0.55);font-size:0.85rem;"> Ou contactez-nous directement :<br> <a href="tel:+687800099" style="color:#ff6b6b;">+687 800 099</a> &nbsp;|&nbsp; <a href="mailto:contact@vigilanti-alarmes.com" style="color:#ff6b6b;">contact@vigilanti-alarmes.com</a> </p> </div> </div> <?php return ob_get_clean(); } // === ÉTAT 2 : Utilisateur connecté mais en attente de validation (rôle pending) === $current_user = wp_get_current_user(); $user_roles = (array) $current_user->roles; if (in_array('pending', $user_roles)) { ?> <div class="vigi-contact-form-wrap" style="text-align:center;padding:40px 20px;"> <div style="background:linear-gradient(135deg,#1a1a2e,#2d2d4e);border-radius:12px;padding:40px;color:#fff;max-width:560px;margin:0 auto;"> <div style="font-size:3rem;margin-bottom:16px;">⏳</div> <h3 style="color:#fff;font-size:1.5rem;margin-bottom:12px;">Compte en attente de validation</h3> <p style="color:rgba(255,255,255,0.8);margin-bottom:20px;line-height:1.7;"> Bonjour <strong style="color:#ff6b6b;"><?php echo esc_html($current_user->display_name); ?></strong>,<br> votre compte a bien été créé et est en attente de validation par notre équipe.<br> Vous recevrez un email dès que votre accès sera activé. </p> <p style="color:rgba(255,255,255,0.55);font-size:0.85rem;"> En attendant, contactez-nous directement :<br> <a href="tel:+687800099" style="color:#ff6b6b;">+687 800 099</a> &nbsp;|&nbsp; <a href="mailto:contact@vigilanti-alarmes.com" style="color:#ff6b6b;">contact@vigilanti-alarmes.com</a> </p> </div> </div> <?php return ob_get_clean(); } // === ÉTAT 3 : Client validé — afficher le formulaire avec données pré-remplies === $user_nom = $current_user->display_name; $user_email = $current_user->user_email; ?> <div class="vigi-contact-form-wrap"> <p style="color:#2ecc71;font-size:0.9rem;margin-bottom:16px;"> ✓ Connecté en tant que <strong><?php echo esc_html($user_nom); ?></strong> &nbsp;—&nbsp; <a href="<?php echo esc_url(wp_logout_url(get_permalink())); ?>" style="color:#aaa;font-size:0.85rem;">Se déconnecter</a> </p> <form id="vigi-contact-form" method="post" action=""> <div class="vigi-form-group"> <label for="vigi-nom">Nom complet *</label> <input type="text" id="vigi-nom" name="nom" placeholder="Votre nom et prénom" value="<?php echo esc_attr($user_nom); ?>" required> </div> <div class="vigi-form-group"> <label for="vigi-email">Email *</label> <input type="email" id="vigi-email" name="email" placeholder="votre@email.com" value="<?php echo esc_attr($user_email); ?>" required> </div> <div class="vigi-form-group"> <label for="vigi-tel">Téléphone</label> <input type="tel" id="vigi-tel" name="telephone" placeholder="+687 XX XX XX"> </div> <div class="vigi-form-group"> <label for="vigi-service">Service concerné</label> <select id="vigi-service" name="service"> <option value="">— Choisir un service —</option> <option value="videosurveillance">Vidéosurveillance</option> <option value="securite">Systèmes de sécurité</option> <option value="informatique">Informatique</option> <option value="progiciels">Progiciels &amp; Logiciels</option> <option value="affichage">Affichage dynamique</option> <option value="internet">Accès Internet</option> <option value="autre">Autre</option> </select> </div> <div class="vigi-form-group"> <label for="vigi-message">Votre message *</label> <textarea id="vigi-message" name="message" rows="5" placeholder="Décrivez votre projet ou votre demande..." required></textarea> </div> <?php wp_nonce_field('vigi_contact_nonce', 'vigi_nonce'); ?> <button type="submit" class="vigi-btn-submit" name="vigi_submit">ENVOYER MA DEMANDE</button> <div class="vigi-hp-field"><input type="text" name="vigi_hp_website" value="" autocomplete="off" tabindex="-1"></div> </form> <div id="vigi-form-message" style="display:none;margin-top:15px;padding:15px;border-radius:6px;"></div> </div> <script> document.addEventListener('DOMContentLoaded', function() { var form = document.getElementById('vigi-contact-form'); if (!form) return; form.addEventListener('submit', function(e) { e.preventDefault(); var btn = form.querySelector('.vigi-btn-submit'); btn.textContent = 'Envoi en cours...'; btn.disabled = true; var data = new FormData(form); data.append('action', 'vigi_send_contact'); fetch('<?php echo admin_url('admin-ajax.php'); ?>', { method: 'POST', body: data }) .then(function(r) { return r.json(); }) .then(function(res) { var msg = document.getElementById('vigi-form-message'); msg.style.display = 'block'; if (res.success) { msg.style.background = 'rgba(40,167,69,0.2)'; msg.style.border = '1px solid #28a745'; msg.style.color = '#fff'; msg.textContent = 'Votre message a été envoyé avec succès ! Nous vous répondrons dans les plus brefs délais.'; form.reset(); } else { msg.style.background = 'rgba(220,53,69,0.2)'; msg.style.border = '1px solid #dc3545'; msg.style.color = '#fff'; msg.textContent = 'Une erreur est survenue. Veuillez nous contacter directement par email.'; } btn.textContent = 'ENVOYER MA DEMANDE'; btn.disabled = false; }) .catch(function() { var msg = document.getElementById('vigi-form-message'); msg.style.display = 'block'; msg.style.background = 'rgba(220,53,69,0.2)'; msg.style.color = '#fff'; msg.textContent = 'Erreur réseau. Contactez-nous directement : contact@vigilanti-alarmes.com'; btn.textContent = 'ENVOYER MA DEMANDE'; btn.disabled = false; }); }); }); </script> <?php return ob_get_clean(); } // Traitement AJAX du formulaire de contact — réservé aux utilisateurs connectés et validés add_action('wp_ajax_vigi_send_contact', 'vigilanti_send_contact_ajax'); // Suppression de wp_ajax_nopriv : les non-connectés ne peuvent plus soumettre // === ANTI-SPAM HONEYPOT === add_action('wp_head', 'vigi_honeypot_css'); function vigi_honeypot_css() { echo '<style>.vigi-hp-field{display:none!important;position:absolute;left:-9999px;opacity:0;}</style>'; } function vigilanti_send_contact_ajax() { // Vérification : utilisateur doit être connecté if (!is_user_logged_in()) { wp_send_json_error('Accès refusé. Vous devez être connecté pour envoyer une demande.'); return; } // Vérification : rôle non "pending" (compte validé) $current_user = wp_get_current_user(); if (in_array('pending', (array) $current_user->roles)) { wp_send_json_error('Votre compte est en attente de validation. Veuillez patienter.'); return; } // Anti-spam honeypot check if (!empty($_POST['vigi_hp_website'])) { wp_send_json_success(); return; } if (!isset($_POST['vigi_nonce']) || !wp_verify_nonce($_POST['vigi_nonce'], 'vigi_contact_nonce')) { wp_send_json_error('Nonce invalide'); } $nom = sanitize_text_field($_POST['nom'] ?? ''); $email = sanitize_email($_POST['email'] ?? ''); $tel = sanitize_text_field($_POST['telephone'] ?? ''); $service = sanitize_text_field($_POST['service'] ?? ''); $message = sanitize_textarea_field($_POST['message'] ?? ''); if (empty($nom) || empty($email) || empty($message)) { wp_send_json_error('Champs requis manquants'); } // Récupérer les infos du compte connecté pour traçabilité $logged_user = wp_get_current_user(); $user_login = $logged_user->user_login; $user_id = $logged_user->ID; $to = 'contact@vigilanti-alarmes.com'; $subject = '[Vigilanti] Demande de devis - ' . ucfirst($service ?: 'Général') . ' - ' . $nom; $body = "Nouvelle demande de devis reçue via le site web.\n\n"; $body .= "Nom : $nom\n"; $body .= "Email : $email\n"; $body .= "Téléphone : $tel\n"; $body .= "Service : $service\n\n"; $body .= "Message :\n$message\n"; $body .= "\n---\nCompte client : $user_login (ID #$user_id)\n"; $headers = array( 'Content-Type: text/plain; charset=UTF-8', 'From: Site Vigilanti <noreply@vigilanti-alarmes.com>', 'Reply-To: ' . $nom . ' <' . $email . '>', ); $sent = wp_mail($to, $subject, $body, $headers); if ($sent) { wp_send_json_success('Message envoyé'); } else { wp_send_json_error('Erreur envoi email'); } } // ============================================================ // PWA — Progressive Web App // ============================================================ add_action('wp_head', 'vigilanti_pwa_head', 1); function vigilanti_pwa_head() { $site_url = get_site_url(); echo '<link rel="manifest" href="' . esc_url($site_url) . '/manifest.json">' . "\n"; echo '<meta name="theme-color" content="#e63946">' . "\n"; echo '<meta name="mobile-web-app-capable" content="yes">' . "\n"; echo '<meta name="apple-mobile-web-app-capable" content="yes">' . "\n"; echo '<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">' . "\n"; echo '<meta name="apple-mobile-web-app-title" content="VIGILANTI">' . "\n"; echo '<link rel="apple-touch-icon" href="' . esc_url($site_url) . '/wp-content/uploads/vigilanti/pwa-icon-180.png">' . "\n"; } add_action('wp_footer', 'vigilanti_pwa_register_sw', 998); function vigilanti_pwa_register_sw() { $site_url = get_site_url(); echo '<script>if("serviceWorker"in navigator){window.addEventListener("load",function(){navigator.serviceWorker.register("' . esc_url($site_url) . '/sw.js",{scope:"/"}).then(function(r){console.log("VIGILANTI SW:",r.scope)}).catch(function(e){console.log("SW err:",e)})})}</script>' . "\n"; } // ============================================================ // INJECTION AUTOMATIQUE : Packs Sécurité Solaire sur la page d'accueil // Insère le bloc avant la section "Pourquoi choisir" via wp_footer JS // ============================================================ add_action('wp_footer', 'vigilanti_inject_packs_homepage_js', 5); function vigilanti_inject_packs_homepage_js() { // Uniquement sur la page d'accueil (ID 52) if (!is_page(52) && !is_front_page()) return; $packs_html = do_shortcode('[vigi_packs_solaires]'); // Utiliser une balise <template> pour éviter les problèmes d'échappement JS ?> <template id="vigi-packs-template"><?php echo $packs_html; ?></template> <script id="vigi-packs-inject"> (function() { var tmpl = document.getElementById('vigi-packs-template'); var whySection = document.querySelector('.vigi-why'); if (tmpl && whySection && !document.querySelector('.vigi-packs-section')) { var clone = document.importNode(tmpl.content, true); whySection.parentNode.insertBefore(clone, whySection); } })(); </script> <?php } // ============================================================ // SHORTCODE : Packs Sécurité Solaire — Ajax + Reolink // ============================================================ add_shortcode('vigi_packs_solaires', 'vigilanti_packs_solaires_shortcode'); function vigilanti_packs_solaires_shortcode() { ob_start(); ?> <section class="vigi-packs-section"> <div class="vigi-packs-inner"> <h2 class="vigi-packs-title">Nos Packs Sécurité Clés en Main</h2> <p class="vigi-packs-sub">Des solutions complètes, prêtes à installer, adaptées à votre domicile ou votre entreprise en Nouvelle-Calédonie.</p> <div class="vigi-packs-grid"> <!-- Pack Ajax --> <div class="vigi-pack-card"> <div class="vigi-pack-badge">Partenaire officiel</div> <div class="vigi-pack-img-wrap"> <img src="https://www.vigilanti-alarmes.com/wp-content/uploads/2026/06/pack-ajax-alarme-complet.jpg" alt="Pack Alarme Ajax Complet" class="vigi-pack-img" /> </div> <div class="vigi-pack-body"> <div class="vigi-pack-label">Systèmes de sécurité</div> <h3 class="vigi-pack-title">Pack Alarme Ajax Complet</h3> <p class="vigi-pack-desc">Système d'alarme sans fil professionnel Ajax : centrale Hub 2 Plus, détecteurs de mouvement, contacts de porte, sirène extérieure, clavier tactile et télécommandes. Installation et configuration incluses.</p> <ul class="vigi-pack-specs"> <li>✓ Centrale Ajax Hub 2 Plus</li> <li>✓ Détecteurs de mouvement PIR</li> <li>✓ Contacts magnétiques portes/fenêtres</li> <li>✓ Sirène extérieure Ajax StreetSiren</li> <li>✓ Clavier tactile + télécommandes</li> <li>✓ Application mobile incluse</li> </ul> <div class="vigi-pack-price"> <span class="vigi-pack-price-label">À partir de</span> <span class="vigi-pack-price-amount">180 000 XPF</span> <span class="vigi-pack-price-note">installation incluse</span> </div> <a href="/systemes-de-securite/" class="vigi-pack-btn">Demander un devis →</a> </div> </div> <!-- Pack Reolink Solaire --> <div class="vigi-pack-card"> <div class="vigi-pack-badge vigi-pack-badge-green">Sans câblage</div> <div class="vigi-pack-img-wrap"> <img src="https://www.vigilanti-alarmes.com/wp-content/uploads/2026/06/pack-reolink-solaire.jpg" alt="Pack Vidéosurveillance Solaire Reolink" class="vigi-pack-img" /> </div> <div class="vigi-pack-body"> <div class="vigi-pack-label">Vidéosurveillance</div> <h3 class="vigi-pack-title">Pack Vidéosurveillance Solaire Reolink</h3> <p class="vigi-pack-desc">Kit complet de 4 caméras solaires 4K sans fil Reolink avec hub central. Aucun câblage nécessaire, autonomie solaire permanente, vision nocturne couleur et accès smartphone en temps réel.</p> <ul class="vigi-pack-specs"> <li>✓ 4 caméras solaires 4K Reolink</li> <li>✓ 4 panneaux solaires inclus</li> <li>✓ Hub central Reolink</li> <li>✓ Vision nocturne couleur</li> <li>✓ Détection de mouvement IA</li> <li>✓ Application mobile incluse</li> </ul> <div class="vigi-pack-price"> <span class="vigi-pack-price-label">À partir de</span> <span class="vigi-pack-price-amount">150 000 XPF</span> <span class="vigi-pack-price-note">installation incluse</span> </div> <a href="/videosurveillance/" class="vigi-pack-btn">Demander un devis →</a> </div> </div> </div> </div> </section> <style id="vigi-packs-css"> .vigi-packs-section { background: linear-gradient(180deg, #0a0c14 0%, #0d0f1a 100%); padding: 70px 20px; margin: 0; } .vigi-packs-inner { max-width: 1100px; margin: 0 auto; } .vigi-packs-title { text-align: center; color: #ffffff; font-size: 2rem; font-weight: 800; margin-bottom: 12px; letter-spacing: -0.5px; } .vigi-packs-sub { text-align: center; color: rgba(255,255,255,0.65); font-size: 1.05rem; margin-bottom: 48px; max-width: 680px; margin-left: auto; margin-right: auto; } .vigi-packs-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; } .vigi-pack-card { background: #12141f; border-radius: 14px; overflow: hidden; border: 1px solid rgba(220,20,60,0.18); box-shadow: 0 6px 32px rgba(0,0,0,0.4); transition: box-shadow 0.3s ease, border-color 0.3s ease; position: relative; } .vigi-pack-card:hover { box-shadow: 0 10px 48px rgba(220,20,60,0.28); border-color: rgba(220,20,60,0.42); } .vigi-pack-badge { position: absolute; top: 16px; left: 16px; background: #dc143c; color: #fff; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; padding: 5px 12px; border-radius: 20px; z-index: 2; } .vigi-pack-badge-green { background: #1a7a3c; } .vigi-pack-img-wrap { width: 100%; height: 280px; overflow: hidden; background: #060810; display: flex; align-items: center; justify-content: center; } .vigi-pack-img { width: 100%; height: 100%; object-fit: contain; display: block; padding: 20px; transition: transform 0.4s ease; } .vigi-pack-card:hover .vigi-pack-img { transform: scale(1.04); } .vigi-pack-body { padding: 28px 30px 32px; } .vigi-pack-label { font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: #dc143c; margin-bottom: 8px; } .vigi-pack-title { font-size: 1.3rem; font-weight: 800; color: #ffffff; margin-bottom: 12px; line-height: 1.3; } .vigi-pack-desc { color: rgba(255,255,255,0.72); font-size: 0.93rem; line-height: 1.7; margin-bottom: 18px; } .vigi-pack-specs { list-style: none; padding: 0; margin: 0 0 24px 0; } .vigi-pack-specs li { color: rgba(255,255,255,0.78); font-size: 0.88rem; padding: 4px 0; border-bottom: 1px solid rgba(255,255,255,0.07); } .vigi-pack-specs li:last-child { border-bottom: none; } .vigi-pack-price { background: rgba(220, 20, 60, 0.08); border: 1px solid rgba(220, 20, 60, 0.25); border-radius: 8px; padding: 14px 18px; margin: 16px 0 14px; display: flex; flex-direction: column; gap: 2px; } .vigi-pack-price-label { font-size: 0.75rem; color: #aaa; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 600; } .vigi-pack-price-amount { font-size: 1.6rem; font-weight: 900; color: #dc143c; line-height: 1.1; } .vigi-pack-price-note { font-size: 0.75rem; color: #888; font-style: italic; } .vigi-pack-btn { display: inline-block; background: #dc143c; color: #fff !important; padding: 12px 26px; border-radius: 6px; font-weight: 700; font-size: 0.9rem; text-decoration: none; transition: background 0.2s ease; } .vigi-pack-btn:hover { background: #b01030; color: #fff !important; text-decoration: none; } @media (max-width: 768px) { .vigi-packs-grid { grid-template-columns: 1fr; } .vigi-packs-title { font-size: 1.5rem; } } </style> <?php return ob_get_clean(); } Informatique haut de gamme – VIGILANTI — Sécurité & Informatique

Informatique haut de gamme

Matériel informatique haut de gamme — Mini PC NUC Intel i7, écrans 4K sur supports à gaz amovibles. La puissance du gaming au service de votre productivité professionnelle.

Nos produits informatiques

Mini PC NUC Intel i7 16 Go

Mini PC NUC Intel i7 — 16 Go RAM

Compact, silencieux et ultra-performant. Le Mini PC NUC Intel Core i7 avec 16 Go de RAM DDR4 offre une puissance de calcul exceptionnelle dans un format minimaliste. Idéal pour les postes de travail professionnels et la supervision réseau.

  • Processeur Intel Core i7 dernière génération
  • 16 Go RAM DDR4 — extensible à 32 Go
  • SSD NVMe 512 Go
  • Wi-Fi 6 + Bluetooth 5.2 + Ethernet Gigabit
  • 4 sorties vidéo simultanées
  • Windows 11 Pro inclus
À partir de 115 000 XPF — livré et configuré

Demander un devis

Mini PC NUC Intel i7 32 Go

Mini PC NUC Intel i7 — 32 Go RAM

La version haute performance pour les professionnels exigeants. Avec 32 Go de RAM, ce NUC gère sans effort les applications lourdes, la virtualisation, le montage vidéo et le multitâche intensif. Série Gaming Vigilanti.

  • Processeur Intel Core i7 haute performance
  • 32 Go RAM DDR4 — configuration maximale
  • SSD NVMe 1 To ultra-rapide
  • Thunderbolt 4 + USB-C + HDMI 2.1
  • Idéal pour la virtualisation et le multitâche
  • Windows 11 Pro inclus
À partir de 145 000 XPF — livré et configuré

Demander un devis

Écran 27 pouces 1K

Écran 27″ IPS — Support à gaz amovible

Écrans professionnel 27 pouces IPS avec double support à gaz amovible permettant l’orientation verticale ou horizontale selon vos besoins. Parfait pour la supervision, la comptabilité et le travail multi-fenêtres.

  • Résolution 1K UHD (1920×1080)
  • Dalle IPS — couleurs fidèles 99% sRGB
  • Support à gaz amovible — orientation verticale/horizontale
  • Hauteur et inclinaison réglables
  • HDMI 2.0 + DisplayPort 1.4 + USB-C
À partir de 84 000 XPF — support inclus

Demander un devis

Écran 32 pouces 4K

Écran 32″ incurvé 4K IPS — Support à gaz amovible

L’écran grand format pour les professionnels qui ont besoin d’espace de travail. 32 pouces 4K IPS avec support à gaz amovible. Idéal pour la supervision multi-caméras, la création graphique et les postes de direction.

  • Résolution 4K UHD (3840×2160)
  • Dalle IPS — 32 pouces grand format
  • Support à gaz amovible — rotation verticale
  • Luminosité 400 cd/m² — HDR400
  • HDMI 2.1 + DisplayPort 1.4 + USB-C 90W
À partir de 82 000 XPF — support inclus

Demander un devis

Équipez votre entreprise avec le meilleur

Configuration sur mesure, livraison et installation dans toute la Nouvelle-Calédonie et les îles.

Demander un devis gratuit

Retour en haut