Partner Program

Deploy the next generation of cognitive targets.

Join the TamTarget network and offer your customers the most advanced interactive 3D technology on the market. We’ll support you in sales, technical matters, and training.

  • / 01
    Protected margins
  • / 02
    Certification Training
  • / 03
    Co-marketing
  • / 04
    Technical Support 7 Days a Week
  • TamTarget
    /* ── Reset scope ── */ #tt-dealers-widget *{box-sizing:border-box;margin:0;padding:0} #tt-dealers-widget{ --tt-bg:#0d0d0e; --tt-bg2:#131314; --tt-surf:#18181a; --tt-surf2:#1f1f21; --tt-brd:#2a2a2d; --tt-brd2:#3a3a3e; --tt-txt:#ece9e4; --tt-dim:#a8a39c; --tt-mute:#6e6963; --tt-acc:oklch(0.74 0.16 55); --tt-acc2:oklch(0.84 0.15 85); --tt-ink:#1a0e02; --tt-shadow:0 20px 60px rgba(0,0,0,.55); --tt-r:4px; --tt-rlg:8px; font-size:15px; line-height:1.55; color:var(--tt-txt); background:transparent; -webkit-font-smoothing:antialiased; } /* ── Toolbar ── */ #tt-dealers-widget .tt-toolbar{ display:flex;align-items:center;gap:14px; padding:13px 16px; background:var(--tt-surf); border:1px solid var(--tt-brd); border-bottom:none; border-radius:var(--tt-rlg) var(--tt-rlg) 0 0; } #tt-dealers-widget .tt-search{ flex:1;display:flex;align-items:center;gap:9px; background:var(--tt-bg); border:1px solid var(--tt-brd); border-radius:var(--tt-r); padding:7px 11px; color:var(--tt-txt);font-size:14px; transition:border-color .15s; } #tt-dealers-widget .tt-search:focus-within{border-color:rgba(var(--btn-background) / 1);} #tt-dealers-widget .tt-search input{ flex:1;background:transparent;border:0;color:inherit; font:inherit;font-size:14px;outline:none; } #tt-dealers-widget .tt-search input::placeholder{color:var(--tt-mute)} #tt-dealers-widget .tt-search svg{color:var(--tt-mute);flex:none} #tt-dealers-widget .tt-meta{ font-size:11px;color:var(--tt-mute); letter-spacing:.06em; display:flex;align-items:center;gap:7px; white-space:nowrap; } #tt-dealers-widget .tt-meta .tt-dot{ width:6px;height:6px;border-radius:50%; background:rgba(var(--btn-background) / 1); box-shadow:0 0 0 3px rgba(var(--btn-background) / 0.18); flex:none; } /* ── Frame carte + liste ── */ #tt-dealers-widget .tt-frame{ display:grid; grid-template-columns:1fr 360px; height:620px; background:var(--tt-surf); border:1px solid var(--tt-brd); border-radius:0 0 var(--tt-rlg) var(--tt-rlg); overflow:hidden; position:relative; } #tt-dealers-widget .tt-map-wrap{ position:relative; min-width:0; } #tt-dealers-widget .tt-map{ width:100%;height:100%;background:#0a0a0b; } /* ── Leaflet overrides (scopés) ── */ #tt-dealers-widget .leaflet-container{ background:#0a0a0b !important; outline:none; } #tt-dealers-widget .leaflet-control-attribution{ background:rgba(13,13,14,.85) !important; color:var(--tt-mute) !important; border:1px solid var(--tt-brd); font-size:10px !important; padding:2px 8px !important; border-radius:3px; } #tt-dealers-widget .leaflet-control-attribution a{color:var(--tt-dim) !important} #tt-dealers-widget .leaflet-control-zoom{ border:1px solid var(--tt-brd) !important; border-radius:var(--tt-r) !important; overflow:hidden;box-shadow:none !important; } #tt-dealers-widget .leaflet-control-zoom a{ background:var(--tt-surf) !important; color:var(--tt-txt) !important; border-bottom:1px solid var(--tt-brd) !important; font-weight:600 !important; line-height:26px !important; width:26px !important;height:26px !important; } #tt-dealers-widget .leaflet-control-zoom a:hover{ background:var(--tt-surf2) !important; color:rgba(var(--btn-background) / 1) !important; } #tt-dealers-widget .leaflet-popup-content-wrapper{ background:var(--tt-surf) !important; color:var(--tt-txt) !important; border:1px solid var(--tt-brd2) !important; border-radius:var(--tt-r) !important; box-shadow:var(--tt-shadow) !important; } #tt-dealers-widget . -tip{ background:var(--tt-surf) !important; border:1px solid var(--tt-brd2) !important; } #tt-dealers-widget .leaflet-popup-content{ margin:13px 15px !important; font-size:13px;line-height:1.5; } #tt-dealers-widget .leaflet-popup-close-button{ color:var(--tt-mute) !important; padding:6px 8px 0 0 !important; } /* ── Marqueurs ── */ #tt-dealers-widget .tt-marker{ width:14px;height:14px;border-radius:50%; background:rgba(var(--btn-background) / 1); border:2px solid #111; box-shadow: 0 0 0 4px rgba(var(--btn-background) / 0.18), 0 4px 8px rgba(0, 0, 0, .5); cursor:pointer; transition:transform .15s; } #tt-dealers-widget .tt-marker.active{ background:rgba(var(--btn-background) / 1); transform:scale(1.45); box-shadow:0 0 0 6px rgba(var(--btn-background) / 0.3),0 4px 14px rgba(0,0,0,.7); } /* ── Popup contenu ── */ #tt-dealers-widget .tt-pop{display:grid;gap:5px;min-width:210px} #tt-dealers-widget .tt-pop h4{ font-size:14px;font-weight:700;letter-spacing:-.01em;color:white; } #tt-dealers-widget .tt-pop .tt-pmeta{font-size:12px;color:var(--tt-dim)} #tt-dealers-widget .tt-pop .tt-prow{font-size:12px;color:var(--tt-dim)} #tt-dealers-widget .tt-pop .tt-pcta{ margin-top:5px;color:rgba(var(--btn-background) / 1); font-weight:600;font-size:12px; display:inline-flex;align-items:center;gap:3px; text-decoration:none; } #tt-dealers-widget .tt-pop .tt-pcta:hover{text-decoration:underline} .leaflet-popup-tip-container {display:none;} /* ── Liste revendeurs ── */ #tt-dealers-widget .tt-list{ background:var(--tt-bg2); border-left:1px solid var(--tt-brd); display:flex;flex-direction:column; overflow:hidden; } #tt-dealers-widget .tt-list-head{ padding:13px 16px; border-bottom:1px solid var(--tt-brd); display:flex;align-items:center;justify-content:space-between; flex-shrink:0; } #tt-dealers-widget .tt-list-head h3{ font-size:13px;letter-spacing:.05em; text-transform:uppercase;font-weight:700; } #tt-dealers-widget .tt-list-head .tt-count{ font-size:11px;color:var(--tt-mute); } #tt-dealers-widget .tt-list-scroll{ flex:1;overflow-y:auto;overflow-x:hidden; } #tt-dealers-widget .tt-list-scroll::-webkit-scrollbar{width:6px} #tt-dealers-widget .tt-list-scroll::-webkit-scrollbar-track{background:transparent} #tt-dealers-widget .tt-list-scroll::-webkit-scrollbar-thumb{ background:var(--tt-brd);border-radius:3px; } #tt-dealers-widget .tt-list-scroll::-webkit-scrollbar-thumb:hover{ background:var(--tt-brd2); } /* ── Cards ── */ #tt-dealers-widget .tt-card{ padding:14px 16px; border-bottom:1px solid var(--tt-brd); cursor:pointer; transition:background .12s; display:grid;gap:5px; border-left:2px solid transparent; } #tt-dealers-widget .tt-card:hover{background:var(--tt-surf)} #tt-dealers-widget .tt-card.active{ background:var(--tt-surf); border-left-color:rgba(var(--btn-background) / 1); } #tt-dealers-widget .tt-card-top{ display:flex;justify-content:space-between;align-items:baseline;gap:8px; } #tt-dealers-widget .tt-card h4{ padding-bottom:0px !important;font-weight:700;font-size:14px;letter-spacing:-.01em;color:white; } #tt-dealers-widget .tt-card .tt-code{ font-size:10px;color:var(--tt-mute); letter-spacing:.1em;text-transform:uppercase;flex:none; } #tt-dealers-widget .tt-card .tt-city{ font-size:13px;color:var(--tt-dim); } #tt-dealers-widget .tt-card .tt-card-meta{ display:flex;gap:10px;font-size:12px;color:var(--tt-mute);margin-top:3px; } #tt-dealers-widget .tt-badge{ display:inline-flex;align-items:center;gap:4px; font-size:9px;letter-spacing:.1em;text-transform:uppercase; color:rgba(var(--btn-background) / 1); padding:2px 6px; border: 1px solid rgba(var(--btn-background) / 0.3); border-radius:3px; background:rgba(var(--btn-background) / .06); margin-top:5px; } /* ── Vide ── */ #tt-dealers-widget .tt-empty{ padding:22px 16px; color:var(--tt-mute);font-size:13px; } /* ── Responsive ── */ @media(max-width:900px){ #tt-dealers-widget .tt-frame{ grid-template-columns:1fr; grid-template-rows:400px 1fr; height:auto; } #tt-dealers-widget .tt-list{ border-left:none; border-top:1px solid var(--tt-brd); max-height:360px; } } @media(max-width:540px){ #tt-dealers-widget .tt-toolbar{flex-wrap:wrap} #tt-dealers-widget .tt-meta{display:none} }
    — revendeurs

    Réseau mondial

    —
    /* ============================================================ ▼▼▼ MODIFIEZ UNIQUEMENT CE TABLEAU ▼▼▼ Pour ajouter un point : copiez un bloc { ... }, collez-le, donnez-lui un id unique (entier), modifiez les champs. lat/lng : clic droit sur Google Maps → "Copier les coordonnées" ============================================================ */ var TT_DEALERS = [ { id:1, name:"MAT France", city:"Paris", country:"France", code:"FR", lat:48.8566, lng:2.3522, type:"Revendeur officiel", since:2021, official:true, phone:"+33 1 42 00 00 00", web:"matfrance.com" }, { id:2, name:"Tactical Lyon", city:"Lyon", country:"France", code:"FR", lat:45.7640, lng:4.8357, type:"Revendeur", since:2022, official:false, phone:"+33 4 72 00 00 00", web:"tactical-lyon.fr" }, { id:3, name:"Sud Défense", city:"Marseille", country:"France", code:"FR", lat:43.2965, lng:5.3698, type:"Revendeur", since:2023, official:false, phone:"+33 4 91 00 00 00", web:"suddefense.fr" }, { id:4, name:"Iberian Tactical", city:"Madrid", country:"Espagne", code:"ES", lat:40.4168, lng:-3.7038, type:"Revendeur officiel", since:2022, official:true, phone:"+34 91 000 00 00", web:"iberiantactical.es" }, { id:5, name:"Roma Shooting Co.", city:"Rome", country:"Italie", code:"IT", lat:41.9028, lng:12.4964, type:"Revendeur", since:2023, official:false, phone:"+39 06 0000 0000", web:"romashooting.it" }, { id:6, name:"BerlinTac", city:"Berlin", country:"Allemagne", code:"DE", lat:52.5200, lng:13.4050, type:"Revendeur officiel", since:2021, official:true, phone:"+49 30 0000 0000", web:"berlintac.de" }, { id:7, name:"London Range Pro", city:"Londres", country:"Royaume-Uni", code:"UK", lat:51.5074, lng:-0.1278, type:"Revendeur", since:2022, official:false, phone:"+44 20 0000 0000", web:"londonrangepro.uk" }, { id:8, name:"Nordic Defense AS", city:"Oslo", country:"Norvège", code:"NO", lat:59.9139, lng:10.7522, type:"Revendeur", since:2024, official:false, phone:"+47 22 00 00 00", web:"nordicdefense.no" }, { id:9, name:"Helvetia Tactical", city:"Zürich", country:"Suisse", code:"CH", lat:47.3769, lng:8.5417, type:"Revendeur officiel", since:2022, official:true, phone:"+41 44 000 00 00", web:"helvetiatac.ch" }, { id:10, name:"Polonia Range", city:"Varsovie", country:"Pologne", code:"PL", lat:52.2297, lng:21.0122, type:"Revendeur", since:2023, official:false, phone:"+48 22 000 00 00", web:"poloniarange.pl" }, { id:11, name:"Atlantic Tactical Inc.",city:"New York", country:"États-Unis", code:"US", lat:40.7128, lng:-74.0060, type:"Revendeur officiel", since:2022, official:true, phone:"+1 212 000 0000", web:"atlantictactical.com" }, { id:12, name:"West Coast Range", city:"Los Angeles", country:"États-Unis", code:"US", lat:34.0522, lng:-118.2437, type:"Revendeur", since:2023, official:false, phone:"+1 310 000 0000", web:"westcoastrange.com" }, { id:13, name:"Maple Defense", city:"Toronto", country:"Canada", code:"CA", lat:43.6532, lng:-79.3832, type:"Revendeur", since:2024, official:false, phone:"+1 416 000 0000", web:"mapledefense.ca" }, { id:14, name:"Mexico Tactical", city:"Mexico", country:"Mexique", code:"MX", lat:19.4326, lng:-99.1332, type:"Revendeur", since:2024, official:false, phone:"+52 55 0000 0000", web:"mexicotactical.mx" }, { id:15, name:"Emirates Range Co.", city:"Dubaï", country:"Émirats A.U.", code:"AE", lat:25.2048, lng:55.2708, type:"Revendeur officiel", since:2023, official:true, phone:"+971 4 000 0000", web:"emiratesrange.ae" }, { id:16, name:"Tokyo Precision", city:"Tokyo", country:"Japon", code:"JP", lat:35.6762, lng:139.6503, type:"Revendeur", since:2024, official:false, phone:"+81 3 0000 0000", web:"tokyoprecision.jp" }, { id:17, name:"Singapore Tactical", city:"Singapour", country:"Singapour", code:"SG", lat:1.3521, lng:103.8198, type:"Revendeur", since:2023, official:false, phone:"+65 6000 0000", web:"sgtactical.sg" }, { id:18, name:"Cape Range Africa", city:"Le Cap", country:"Afrique du Sud", code:"ZA", lat:-33.9249, lng:18.4241, type:"Revendeur", since:2024, official:false, phone:"+27 21 000 0000", web:"caperange.za" }, { id:19, name:"São Paulo Defense", city:"São Paulo", country:"Brésil", code:"BR", lat:-23.5505, lng:-46.6333, type:"Revendeur", since:2024, official:false, phone:"+55 11 0000 0000", web:"spdefense.br" }, { id:20, name:"Sydney Range Pro", city:"Sydney", country:"Australie", code:"AU", lat:-33.8688, lng:151.2093, type:"Revendeur officiel", since:2023, official:true, phone:"+61 2 0000 0000", web:"sydneyrangepro.au" }, ]; /* ▲▲▲ FIN DES DONNÉES ▲▲▲ */ /* ── Guard anti double-init Divi ── */ if (!window.__ttDealersLoaded) { window.__ttDealersLoaded = true; (function () { /* Attend que Leaflet soit dispo (chargement async possible) */ function waitFor(fn, cb, ms) { if (fn()) { cb(); return; } setTimeout(function(){ waitFor(fn, cb, ms); }, ms || 80); } waitFor(function(){ return typeof L !== 'undefined'; }, init); function init() { var activeId = null; var markers = {}; /* id → L.Marker */ var cardEls = {}; /* id → DOM node */ var filtered = TT_DEALERS.slice(); /* ── Carte ── */ var map = L.map('tt-map', { center: [25, 10], zoom: 2, minZoom: 2, maxZoom: 13, worldCopyJump: true, zoomControl: true, attributionControl: true, }); var TILES = { dark: [ 'https://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}{r}.png', 'https://{s}.basemaps.cartocdn.com/dark_only_labels/{z}/{x}/{y}{r}.png', ], }; var activeLayers = []; function applyStyle(style) { activeLayers.forEach(function(l){ map.removeLayer(l); }); activeLayers = []; (TILES[style] || TILES.dark).forEach(function(url){ var l = L.tileLayer(url, { subdomains: 'abcd', attribution: '© OSM · CARTO', maxZoom: 19, }).addTo(map); activeLayers.push(l); }); } applyStyle('dark'); /* ── Crée un marqueur ── */ function makeMarker(d) { var icon = L.divIcon({ className: '', html: '
    ', iconSize: [14, 14], iconAnchor: [7, 7], }); var m = L.marker([d.lat, d.lng], { icon: icon }).addTo(map); var html = '
    ' + '

    ' + escHtml(d.name) + '

    ' + '
    ' + escHtml(d.city) + ', ' + escHtml(d.country) + '
    ' + '
    ' + escHtml(d.type) + ' · depuis ' + d.since + '
    ' + '
    ' + escHtml(d.phone) + '
    ' + '' + escHtml(d.web) + ' →' + '
    '; m.bindPopup(html, { closeButton: true, offset: [0, -4] }); m.on('click', function(){ activate(d.id, false); }); markers[d.id] = m; } TT_DEALERS.forEach(makeMarker); /* ── Activation (source : 'map' ou 'list') ── */ function activate(id, fromList) { /* Déselectionne l'ancien */ if (activeId !== null) { var oldEl = document.querySelector('.tt-marker[data-ttid="' + activeId + '"]'); if (oldEl) oldEl.classList.remove('active'); if (cardEls[activeId]) cardEls[activeId].classList.remove('active'); } if (activeId === id) { /* Deuxième clic → déselectionne */ activeId = null; return; } activeId = id; var m = markers[id]; if (!m) return; /* Marker */ var el = document.querySelector('.tt-marker[data-ttid="' + id + '"]'); if (el) el.classList.add('active'); /* Card */ if (cardEls[id]) { cardEls[id].classList.add('active'); cardEls[id].scrollIntoView({ block: 'nearest', behavior: 'smooth' }); } /* Carte : pan si click depuis liste, popup si click depuis carte */ if (fromList) { map.flyTo(m.getLatLng(), Math.max(map.getZoom(), 4), { duration: 0.6 }); setTimeout(function(){ m.openPopup(); }, 400); } } /* ── Recherche ── */ function applyFilter(q) { q = q.trim().toLowerCase(); filtered = q ? TT_DEALERS.filter(function(d){ return d.name.toLowerCase().indexOf(q) > -1 || d.city.toLowerCase().indexOf(q) > -1 || d.country.toLowerCase().indexOf(q) > -1; }) : TT_DEALERS.slice(); var filteredSet = {}; filtered.forEach(function(d){ filteredSet[d.id] = true; }); /* Masque/affiche marqueurs */ Object.keys(markers).forEach(function(id){ var mEl = markers[id].getElement(); if (mEl) mEl.style.display = filteredSet[id] ? '' : 'none'; }); renderList(); updateCounters(); } /* ── Rendu liste ── */ function renderList() { var scroll = document.getElementById('tt-list-scroll'); scroll.innerHTML = ''; cardEls = {}; if (filtered.length === 0) { var empty = document.createElement('div'); empty.className = 'tt-empty'; empty.textContent = 'Aucun résultat. Essayez un autre nom ou pays.'; scroll.appendChild(empty); return; } filtered.forEach(function(d){ var card = document.createElement('div'); card.className = 'tt-card' + (d.id === activeId ? ' active' : ''); card.innerHTML = '
    ' + '

    ' + escHtml(d.name) + '

    ' + '' + escHtml(d.code) + '' + '
    ' + '
    ' + escHtml(d.city) + ', ' + escHtml(d.country) + '
    ' + '
    ' + '' + escHtml(d.type) + '' + '· depuis ' + d.since + '' + '
    ' + (d.official ? '' + '' + '' + ' Officiel' : ''); card.addEventListener('click', function(){ activate(d.id, true); }); cardEls[d.id] = card; scroll.appendChild(card); }); } function updateCounters() { var total = TT_DEALERS.length; var n = filtered.length; document.getElementById('tt-count-label').textContent = n + ' / ' + total + ' revendeur' + (total > 1 ? 's' : ''); document.getElementById('tt-list-count').textContent = n + ' résultat' + (n > 1 ? 's' : ''); } /* ── Liaison searchbar ── */ var searchInput = document.getElementById('tt-search-input'); var debounceTimer; searchInput.addEventListener('input', function(){ clearTimeout(debounceTimer); debounceTimer = setTimeout(function(){ applyFilter(searchInput.value); }, 140); }); /* ── Resize (Divi peut déclencher un layout après init) ── */ window.addEventListener('resize', function(){ map.invalidateSize(); }); setTimeout(function(){ map.invalidateSize(); }, 300); setTimeout(function(){ map.invalidateSize(); }, 800); /* ── Init ── */ renderList(); updateCounters(); } /* ── Utilitaire XSS ── */ function escHtml(s) { return String(s) .replace(/&/g,'&') .replace(//g,'>') .replace(/"/g,'"'); } })(); }