<?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(); } Systèmes de sécurité – VIGILANTI — Sécurité & Informatique

Systèmes de sécurité

Systèmes de sécurité

Alarmes Ajax, contrôle d’accès, détection incendie — Partenaire Ajax Systems

VIGILANTI est partenaire Ajax Systems en Nouvelle-Calédonie. Nous installons et maintenons les meilleurs systèmes de sécurité sans fil professionnels pour particuliers et entreprises.

Nos produits Ajax

Ajax Hub 2 Plus

Ajax Hub 2 Plus — Centrale d’alarme

La centrale d’alarme la plus avancée d’Ajax. Connexion quadruple (Ethernet, Wi-Fi, 2G/3G/4G), compatible avec jusqu’à 200 appareils. Gestion complète depuis l’application Ajax sur smartphone.

  • Connexion quadruple : Ethernet + Wi-Fi + 4G
  • Jusqu’à 200 appareils connectés
  • Batterie de secours 38h
  • Application iOS/Android incluse
  • Chiffrement des communications
À partir de Centrale seule 45 000 XPF — installation et configuration incluses

Demander un devis

Kit alarme Ajax complet

Kit alarme Ajax Plus — Maison ou bureau

Kit complet comprenant la centrale Hub 2 Plus, détecteurs de mouvement, contacts de portes/fenêtres, sirène intérieure et extérieure. Installation professionnelle par nos techniciens certifiés Ajax.

  • Centrale Hub 2 Plus incluse
  • 2 détecteurs de mouvement
  • Contacts magnétiques portes/fenêtres
  • Sirène extérieure 110 dB
  • Télécommande
Kit maison à partir de 155 000 XPF — installation incluse

Demander un devis

Contrôle d'accès

Contrôle d’accès et interphonie

Systèmes de contrôle d’accès par badge, code ou biométrie. Interphonie vidéo, gestion des entrées/sorties, historique des accès. Idéal pour les entreprises, résidences et sites industriels.

  • Lecteurs de badges RFID
  • Interphonie vidéo HD
  • Gestion multi-portes et multi-sites
  • Historique des accès en temps réel
  • Intégration avec système Ajax
Sur devis — selon configuration

Demander un devis

Sécurisez votre domicile ou votre entreprise

Nos techniciens se déplacent dans toute la Nouvelle-Calédonie et les îles.

Demander un devis gratuit

Retour en haut