<style id="cxt-consent-front-bridge-css">#cxt-consent-banner,#cxt-consent-modal,#cxt-consent-fab,.cxt-consent-embed-placeholder{box-sizing:border-box;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
#cxt-consent-banner *,#cxt-consent-modal *,#cxt-consent-fab *,.cxt-consent-embed-placeholder *{box-sizing:border-box}
.cxt-consent-banner{position:fixed;z-index:2147483000;left:18px;right:18px;bottom:18px;max-width:920px;margin:auto;padding:20px 22px;border-radius:22px;background:#170037;color:#fff;border:1px solid rgba(255,255,255,.18);box-shadow:0 24px 70px rgba(0,0,0,.42);display:grid;gap:12px}
.cxt-consent-banner.is-necessary{max-width:760px}.cxtc-banner-status{display:flex;align-items:center;gap:9px}.cxtc-banner-status>span{width:12px;height:12px;border-radius:99px;background:#49dd78;box-shadow:0 0 0 5px rgba(73,221,120,.14)}.cxt-consent-banner p{margin:0;color:#e4dbff;line-height:1.5}.cxt-consent-banner>div:last-child,.cxtc-banner-actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}.cxt-consent-banner button,.cxt-consent-dialog button{min-height:42px;border-radius:999px;border:1px solid rgba(255,255,255,.18);padding:10px 16px;font:inherit;font-weight:800;cursor:pointer}.cxtc-details,.cxtc-reject{background:transparent;color:#fff}.cxtc-understood,.cxtc-accept,.cxtc-save{background:#ffd84d;color:#20004d;border-color:#ffd84d!important}
.cxt-consent-modal[hidden]{display:none!important}.cxt-consent-modal{position:fixed;inset:0;z-index:2147483100;display:grid;place-items:center;padding:18px}.cxt-consent-backdrop{position:absolute;inset:0;background:rgba(10,0,27,.72);backdrop-filter:blur(4px)}.cxt-consent-dialog{position:relative;width:min(760px,100%);max-height:min(86vh,780px);overflow:auto;border-radius:26px;padding:26px;background:#fff;color:#20152d;box-shadow:0 30px 100px rgba(0,0,0,.46)}.cxtc-close{position:absolute;right:16px;top:14px;width:42px;padding:0!important;font-size:26px;background:#f4effc;color:#2d1355}.cxtc-status-line{display:flex;align-items:center;gap:9px;padding-right:54px;color:#5b4a69;font-weight:700;font-size:13px}.cxtc-status-dot{width:11px;height:11px;border-radius:99px}.cxtc-status-dot.is-green{background:#26bf5b;box-shadow:0 0 0 4px rgba(38,191,91,.12)}.cxtc-status-dot.is-red{background:#e95058;box-shadow:0 0 0 4px rgba(233,80,88,.12)}.cxt-consent-dialog h2{margin:12px 0 6px;color:#2a0b4d;font-size:30px;line-height:1.05}.cxtc-intro{margin:0 0 20px;color:#665873}.cxtc-categories{display:grid;gap:10px}.cxtc-front-row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px;border:1px solid #e6def0;border-radius:16px;background:#fbf9fd}.cxtc-front-copy{display:grid;gap:3px}.cxtc-front-copy strong{color:#2a0b4d}.cxtc-front-copy small{color:#74677e;line-height:1.45}.cxtc-switch{position:relative;flex:0 0 52px}.cxtc-switch input{position:absolute;opacity:0}.cxtc-switch i{display:block;width:50px;height:29px;border-radius:99px;background:#d9d2df;position:relative;transition:.2s}.cxtc-switch i:after{content:"";position:absolute;left:4px;top:4px;width:21px;height:21px;border-radius:99px;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.18);transition:.2s}.cxtc-switch input:checked+i{background:#7643de}.cxtc-switch input:checked+i:after{transform:translateX(21px)}.cxtc-switch input:disabled+i{background:#2db960;opacity:.75}.cxtc-services{margin-top:18px;padding-top:16px;border-top:1px solid #ebe4f1}.cxtc-services h3{margin:0 0 10px;color:#2a0b4d}.cxtc-services p{display:grid;grid-template-columns:minmax(110px,.7fr) 1.5fr auto;gap:10px;margin:0;padding:10px 0;border-bottom:1px solid #eee7f3}.cxtc-services span{color:#766a7e;font-size:13px}.cxtc-services em{font-style:normal;font-size:11px;font-weight:900;text-transform:uppercase;color:#7643de}.cxtc-actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:22px}.cxtc-privacy{display:inline-block;margin-top:14px;color:#5c35a8;font-size:13px;font-weight:700}
.cxt-consent-fab{position:fixed;z-index:2147482900;left:18px;right:auto;top:auto;bottom:78px;transform:none;width:50px;height:50px;border-radius:99px;border:1px solid rgba(255,255,255,.65);display:grid;place-items:center;cursor:pointer;box-shadow:0 14px 32px rgba(0,0,0,.28);background:#fff}.cxt-consent-fab svg{width:28px;height:28px;fill:none;stroke:#2b0b4e;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.cxtc-fab-dot{position:absolute;right:1px;top:1px;width:13px;height:13px;border:2px solid #fff;border-radius:99px}.cxt-consent-fab.is-green .cxtc-fab-dot{background:#24bd59}.cxt-consent-fab.is-red .cxtc-fab-dot{background:#e94b55}
.cxt-consent-embed-placeholder{min-height:180px;padding:24px;border-radius:18px;border:1px dashed #bca9ce;background:#f7f3fb;color:#2e1a3d;display:grid;place-items:center;text-align:center;gap:7px}.cxt-consent-embed-placeholder strong{font-size:18px}.cxt-consent-embed-placeholder span{color:#6e6076;max-width:620px}.cxt-consent-embed-placeholder button{border:0;border-radius:999px;background:#ffd84d;color:#20004d;padding:10px 16px;font-weight:900;cursor:pointer}
html.cxt-consent-open{overflow:hidden}
@media(max-width:640px){.cxt-consent-banner{left:10px;right:10px;bottom:10px;padding:17px;border-radius:18px}.cxt-consent-banner>div:last-child,.cxtc-banner-actions{display:grid;grid-template-columns:1fr}.cxt-consent-banner button{width:100%}.cxt-consent-modal{padding:8px;align-items:end}.cxt-consent-dialog{width:100%;max-height:92vh;border-radius:22px 22px 10px 10px;padding:22px 16px}.cxt-consent-dialog h2{font-size:25px}.cxtc-front-row{align-items:flex-start}.cxtc-services p{grid-template-columns:1fr}.cxtc-actions{display:grid;grid-template-columns:1fr}.cxtc-actions button{width:100%}.cxt-consent-fab{left:12px;right:auto;top:auto;bottom:72px;transform:none;width:50px;height:50px;border-radius:99px}}
@media(prefers-reduced-motion:reduce){#cxt-consent-banner *,#cxt-consent-modal *,#cxt-consent-fab *{transition:none!important;animation:none!important}}
</style><?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://www.carrextriangle.fr/wp-sitemap-index.xsl" ?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://www.carrextriangle.fr/wp-sitemap-posts-post-1.xml</loc></sitemap><sitemap><loc>https://www.carrextriangle.fr/wp-sitemap-posts-page-1.xml</loc></sitemap><sitemap><loc>https://www.carrextriangle.fr/wp-sitemap-taxonomies-category-1.xml</loc></sitemap><sitemap><loc>https://www.carrextriangle.fr/wp-sitemap-users-1.xml</loc></sitemap></sitemapindex>
<script id="cxt-consent-front-bridge-config" data-cookieconsent="ignore" data-cxt-consent-runtime="config">window.CXTConsentConfig={"ajaxUrl":"\/wp-admin\/admin-ajax.php","nonce":"fd5e30e5f5","mode":"consent","cookieName":"cxt_consent","cookieDomain":"","lifetimeDays":180,"configVersion":9,"showFloating":true,"floatingPosition":{"x":4,"y":92},"privacyUrl":"","text":{"title":"Vos choix de confidentialit\u00e9","description":"Nous utilisons uniquement les traceurs n\u00e9cessaires au fonctionnement du site tant que vous n\u2019autorisez pas de services optionnels.","necessaryTitle":"N\u00e9cessaires","necessaryDescription":"Connexion, panier, s\u00e9curit\u00e9 et fonctions indispensables demand\u00e9es par l\u2019utilisateur.","preferencesTitle":"Pr\u00e9f\u00e9rences","preferencesDescription":"Fonctions de confort ou contenus externes qui ne sont pas indispensables au service demand\u00e9.","statisticsTitle":"Statistiques","statisticsDescription":"Mesure d\u2019audience et compr\u00e9hension de l\u2019utilisation du site lorsque ces outils n\u00e9cessitent un consentement.","marketingTitle":"Marketing","marketingDescription":"Publicit\u00e9, reciblage, pixels sociaux et suivi marketing."},"services":[{"key":"stripe","name":"Stripe","category":"necessary","purpose":"Paiement et s\u00e9curisation du parcours de paiement."}],"choice":{"id":"","version":0,"necessary":true,"preferences":false,"statistics":false,"marketing":false,"saved":false}};</script><script id="cxt-consent-front-bridge-js" data-cookieconsent="ignore" data-cxt-consent-runtime="frontend">(function(){
  'use strict';
  const cfg = window.CXTConsentConfig || null;
  if (!cfg || cfg.mode === 'audit') return;
  const doc = document;
  const optional = ['preferences','statistics','marketing'];
  let current = Object.assign({id:'',version:0,necessary:true,preferences:false,statistics:false,marketing:false,saved:false}, cfg.choice || {});

  const uuid = () => {
    if (window.crypto && crypto.randomUUID) return crypto.randomUUID();
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c){
      const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8); return v.toString(16);
    });
  };

  function cookieDomain(){
    const d = String(cfg.cookieDomain || '').trim();
    return d ? '; Domain=' + d : '';
  }
  function writeCookie(choice){
    const maxAge = Math.max(1, Number(cfg.lifetimeDays || 180)) * 86400;
    const value = encodeURIComponent(JSON.stringify(choice));
    doc.cookie = cfg.cookieName + '=' + value + '; Path=/; Max-Age=' + maxAge + '; SameSite=Lax' + cookieDomain() + (location.protocol === 'https:' ? '; Secure' : '');
  }
  function saveChoice(choice, eventType, reload){
    choice.id = choice.id || current.id || uuid();
    choice.version = Number(cfg.configVersion || 1);
    choice.necessary = true;
    writeCookie(choice);
    current = Object.assign({}, current, choice, {saved:true});
    const body = new URLSearchParams({
      action:'cxt_consent_save', nonce:cfg.nonce, consent_id:choice.id,
      preferences:choice.preferences?'1':'', statistics:choice.statistics?'1':'', marketing:choice.marketing?'1':'', event_type:eventType||'updated'
    });
    fetch(cfg.ajaxUrl,{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},body:body.toString()})
      .catch(function(){})
      .finally(function(){ if(reload) location.reload(); else renderFloating(choice); });
  }

  function categoryRow(key, title, desc, fixed){
    const row = doc.createElement('label'); row.className='cxtc-front-row';
    row.innerHTML = '<span class="cxtc-front-copy"><strong></strong><small></small></span><span class="cxtc-switch"><input type="checkbox"><i></i></span>';
    row.querySelector('strong').textContent = title; row.querySelector('small').textContent = desc;
    const input = row.querySelector('input'); input.dataset.category=key; input.checked = fixed || !!current[key]; input.disabled=!!fixed || cfg.mode==='necessary';
    return row;
  }

  function buildModal(){
    let modal = doc.getElementById('cxt-consent-modal'); if(modal) return modal;
    modal = doc.createElement('div'); modal.id='cxt-consent-modal'; modal.className='cxt-consent-modal'; modal.hidden=true;
    modal.innerHTML='<div class="cxt-consent-backdrop" data-close="1"></div><section class="cxt-consent-dialog" role="dialog" aria-modal="true" aria-labelledby="cxtc-title"><button class="cxtc-close" type="button" aria-label="Fermer">×</button><div class="cxtc-status-line"><span class="cxtc-status-dot"></span><span class="cxtc-status-text"></span></div><h2 id="cxtc-title"></h2><p class="cxtc-intro"></p><div class="cxtc-categories"></div><div class="cxtc-services"></div><div class="cxtc-actions"><button type="button" class="cxtc-reject">Tout refuser</button><button type="button" class="cxtc-save">Enregistrer mes choix</button><button type="button" class="cxtc-accept">Tout accepter</button></div><a class="cxtc-privacy" target="_self" rel="nofollow">Politique de confidentialité et cookies</a></section>';
    modal.querySelector('#cxtc-title').textContent=cfg.text.title;
    modal.querySelector('.cxtc-intro').textContent=cfg.text.description;
    const cats=modal.querySelector('.cxtc-categories');
    cats.appendChild(categoryRow('necessary',cfg.text.necessaryTitle,cfg.text.necessaryDescription,true));
    cats.appendChild(categoryRow('preferences',cfg.text.preferencesTitle,cfg.text.preferencesDescription,false));
    cats.appendChild(categoryRow('statistics',cfg.text.statisticsTitle,cfg.text.statisticsDescription,false));
    cats.appendChild(categoryRow('marketing',cfg.text.marketingTitle,cfg.text.marketingDescription,false));
    const services=modal.querySelector('.cxtc-services');
    const list=Array.isArray(cfg.services)?cfg.services:[];
    if(list.length){
      const title=doc.createElement('h3'); title.textContent='Services identifiés'; services.appendChild(title);
      list.forEach(function(s){ const p=doc.createElement('p'); p.innerHTML='<strong></strong><span></span><em></em>'; p.querySelector('strong').textContent=s.name; p.querySelector('span').textContent=s.purpose||''; p.querySelector('em').textContent=s.category; services.appendChild(p); });
    }
    const privacy=modal.querySelector('.cxtc-privacy'); if(cfg.privacyUrl){ privacy.href=cfg.privacyUrl; } else { privacy.hidden=true; }
    if(cfg.mode==='necessary'){
      modal.querySelector('.cxtc-reject').hidden=true;
      modal.querySelector('.cxtc-accept').hidden=true;
      modal.querySelector('.cxtc-save').textContent='Fermer';
    }
    const close=()=>{modal.hidden=true;doc.documentElement.classList.remove('cxt-consent-open');};
    modal.querySelector('.cxtc-close').addEventListener('click',close); modal.querySelector('.cxt-consent-backdrop').addEventListener('click',close);
    modal.querySelector('.cxtc-reject').addEventListener('click',function(){ saveChoice({id:current.id,preferences:false,statistics:false,marketing:false},'rejected',true); });
    modal.querySelector('.cxtc-accept').addEventListener('click',function(){ saveChoice({id:current.id,preferences:true,statistics:true,marketing:true},'accepted',true); });
    modal.querySelector('.cxtc-save').addEventListener('click',function(){ if(cfg.mode==='necessary'){ close(); return; } const choice={id:current.id}; optional.forEach(k=>choice[k]=!!modal.querySelector('input[data-category="'+k+'"]').checked); saveChoice(choice,'customized',true); });
    doc.body.appendChild(modal); updateStatus(modal,current); return modal;
  }

  function updateStatus(root, choice){
    const active=optional.filter(k=>!!choice[k]);
    const dot=root.querySelector('.cxtc-status-dot'), text=root.querySelector('.cxtc-status-text');
    if(!dot||!text)return; dot.className='cxtc-status-dot '+(active.length?'is-red':'is-green');
    text.textContent=active.length ? ('Traceurs optionnels autorisés : '+active.length+' catégorie(s)') : 'Aucun traceur optionnel autorisé';
  }
  function openModal(){ const m=buildModal(); m.hidden=false; updateStatus(m,current); doc.documentElement.classList.add('cxt-consent-open'); setTimeout(()=>m.querySelector('.cxtc-close').focus(),20); }

  function renderBanner(){
    if(current.saved) return renderFloating(current);
    const banner=doc.createElement('section'); banner.id='cxt-consent-banner'; banner.className='cxt-consent-banner '+(cfg.mode==='necessary'?'is-necessary':'is-consent');
    if(cfg.mode==='necessary'){
      banner.innerHTML='<div class="cxtc-banner-status"><span></span><strong>Aucun traceur optionnel actif</strong></div><p></p><div><button type="button" class="cxtc-details">Voir les détails</button><button type="button" class="cxtc-understood">Compris</button></div>';
      banner.querySelector('p').textContent='Les traceurs strictement nécessaires au compte, au panier, à la sécurité et au service demandé restent actifs. CXT Consent n’autorise aucun suivi optionnel.';
      banner.querySelector('.cxtc-details').addEventListener('click',openModal);
      banner.querySelector('.cxtc-understood').addEventListener('click',function(){ banner.remove(); saveChoice({id:current.id,preferences:false,statistics:false,marketing:false},'info_dismissed',false); });
    } else {
      banner.innerHTML='<div class="cxtc-banner-status"><span></span><strong>Vos choix de confidentialité</strong></div><p></p><div class="cxtc-banner-actions"><button type="button" class="cxtc-reject">Tout refuser</button><button type="button" class="cxtc-details">Personnaliser</button><button type="button" class="cxtc-accept">Tout accepter</button></div>';
      banner.querySelector('p').textContent=cfg.text.description;
      banner.querySelector('.cxtc-reject').addEventListener('click',function(){ saveChoice({id:current.id,preferences:false,statistics:false,marketing:false},'rejected',true); });
      banner.querySelector('.cxtc-details').addEventListener('click',openModal);
      banner.querySelector('.cxtc-accept').addEventListener('click',function(){ saveChoice({id:current.id,preferences:true,statistics:true,marketing:true},'accepted',true); });
    }
    doc.body.appendChild(banner);
  }

  function renderFloating(choice){
    if(!cfg.showFloating || doc.getElementById('cxt-consent-fab')) return;
    const active=optional.filter(k=>!!choice[k]);
    const btn=doc.createElement('button'); btn.id='cxt-consent-fab'; btn.className='cxt-consent-fab '+(active.length?'is-red':'is-green'); btn.type='button'; btn.setAttribute('aria-label','Gérer mes choix de confidentialité'); btn.title=active.length?'Traceurs optionnels autorisés':'Aucun traceur optionnel autorisé';
    const pos=(cfg.floatingPosition&&typeof cfg.floatingPosition==='object')?cfg.floatingPosition:{x:4,y:90};
    const x=Math.max(0,Math.min(100,Number(pos.x)||4)), y=Math.max(0,Math.min(100,Number(pos.y)||90));
    btn.style.left='clamp(28px,'+x+'vw,calc(100vw - 28px))'; btn.style.top='clamp(28px,'+y+'vh,calc(100vh - 28px))'; btn.style.right='auto'; btn.style.bottom='auto'; btn.style.transform='translate(-50%,-50%)';
    btn.innerHTML='<span class="cxtc-fab-dot"></span><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3l7 3v5c0 4.8-2.8 8.1-7 10-4.2-1.9-7-5.2-7-10V6l7-3z"></path><path d="M9 12l2 2 4-4"></path></svg>';
    btn.addEventListener('click',openModal); doc.body.appendChild(btn);
  }

  doc.addEventListener('click',function(e){
    const b=e.target.closest('.cxt-consent-allow-embed'); if(!b)return;
    const category=b.dataset.category; if(!optional.includes(category))return;
    const choice={id:current.id,preferences:!!current.preferences,statistics:!!current.statistics,marketing:!!current.marketing}; choice[category]=true; saveChoice(choice,'customized',true);
  });

  if(doc.readyState==='loading') doc.addEventListener('DOMContentLoaded',renderBanner); else renderBanner();
})();
</script><!-- CXT Consent 0.1.7 frontend -->