<?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 © ' . date('Y') . ' — Tous droits réservé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> |
<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> |
<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>
— <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 & 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
Aller au contenu
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 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 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″ 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″ 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