// tunnel-shell.jsx
// Van-Away tunnel shell: sticky header (logo + progress bar + back link)
// + sliding reassurance marquee. Clear theme.

const VA_TEAL    = '#11978f';
const VA_INK     = '#042828';
const VA_MUTED   = '#5B7A82';
const VA_CREAM   = '#F4F2EC';
const VA_SURFACE = '#FFFFFF';
const VA_BORDER  = 'rgba(4,40,40,0.08)';

// ─── Progress bar ──────────────────────────────────────────────
function ProgressBar({ currentVisualStep = 1 }) {
  const steps = [
    { number: 1, label: 'Choix du véhicule' },
    { number: 2, label: 'Options' },
    { number: 3, label: 'Informations' },
    { number: 4, label: 'Confirmation' },
  ];
  const stepState = (n) =>
    n < currentVisualStep ? 'done' : n === currentVisualStep ? 'active' : 'pending';

  return (
    <div className="va-progress">
      {steps.map((s, i) => (
        <React.Fragment key={s.number}>
          <div className={`va-progress-step ${stepState(s.number)}`}>
            <div className={`va-progress-circle ${stepState(s.number)}`}>
              {stepState(s.number) === 'done' ? (
                <svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="3" d="M5 13l4 4L19 7" />
                </svg>
              ) : (
                <span>{s.number}</span>
              )}
            </div>
            <span className="va-progress-label">{s.label}</span>
          </div>
          {i < steps.length - 1 && (
            <div className={`va-progress-line ${stepState(s.number)}`} />
          )}
        </React.Fragment>
      ))}
      <style>{`
        .va-progress{display:flex;align-items:center;gap:0;width:100%}
        .va-progress-step{display:flex;align-items:center;gap:8px;white-space:nowrap;flex-shrink:0}
        .va-progress-circle{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}
        .va-progress-circle.done{background:${VA_TEAL};color:#fff}
        .va-progress-circle.active{background:${VA_TEAL};color:#fff;box-shadow:0 0 0 4px rgba(17,151,143,0.15)}
        .va-progress-circle.pending{background:rgba(4,40,40,0.06);color:${VA_MUTED}}
        .va-progress-label{font-size:12px;font-weight:400;color:${VA_MUTED}}
        .va-progress-step.done .va-progress-label{color:${VA_TEAL}}
        .va-progress-step.active .va-progress-label{color:${VA_INK};font-weight:700}
        .va-progress-line{height:3px;flex:1;margin:0 8px;border-radius:3px;position:relative;overflow:hidden}
        .va-progress-line.done{background:${VA_TEAL}}
        .va-progress-line.pending,.va-progress-line.active{background:rgba(4,40,40,0.08)}
        .va-progress-line.active::after{content:'';position:absolute;left:0;top:0;height:100%;width:50%;background:${VA_TEAL};border-radius:3px}
        .va-compact .va-progress-label{display:none}
        .va-compact .va-progress-line{margin:0 5px}
        .va-compact .va-progress-circle{width:22px;height:22px;font-size:11px}
      `}</style>
    </div>
  );
}

// ─── Van-Away wordmark ─────────────────────────────────────────
function VanAwayLogo({ compact = false }) {
  const h = compact ? 30 : 44;
  return (
    <div className="va-logo" style={{display:'flex',alignItems:'center'}}>
      <img
        src="Images/logo-van-away.png"
        alt="Van-Away"
        style={{height:h,width:'auto',display:'block'}}
      />
    </div>
  );
}

// ─── Tunnel header ─────────────────────────────────────────────
function TunnelHeader({ compact = false, currentVisualStep = 1 }) {
  return (
    <header className={`va-header ${compact ? 'va-compact' : ''}`}>
      <a className="va-header-logo" href="#" onClick={(e)=>e.preventDefault()}>
        <VanAwayLogo compact={compact} />
      </a>
      <div className="va-header-steps">
        <ProgressBar currentVisualStep={currentVisualStep} />
      </div>
      {!compact && (
        <a className="va-header-back" href="#" onClick={(e)=>e.preventDefault()}>
          <svg width="15" height="15" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M10 19l-7-7m0 0l7-7m-7 7h18" />
          </svg>
          <span>Retour au site</span>
        </a>
      )}
      <style>{`
        .va-header{position:sticky;top:0;z-index:50;background:${VA_SURFACE};display:flex;align-items:center;padding:0 20px;height:56px;gap:16px;border-bottom:1px solid ${VA_BORDER}}
        .va-header.va-compact{padding:0 12px;height:36px;gap:10px}
        .va-header-logo{flex-shrink:0;text-decoration:none;transition:transform .2s}
        .va-header-logo:hover{transform:scale(1.04)}
        .va-header-steps{flex:1;min-width:0;display:flex;align-items:center}
        .va-header-back{flex-shrink:0;display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;font-size:12px;font-weight:600;color:${VA_MUTED};text-decoration:none;transition:all .2s}
        .va-header-back:hover{background:rgba(4,40,40,.05);color:${VA_INK}}
      `}</style>
    </header>
  );
}

// ─── Reassurance marquee ───────────────────────────────────────
const REASSURANCE_ITEMS = [
  { icon: 'tag',     text: 'Louez au meilleur prix',  desc: 'Tarifs dégressifs, ANCV acceptés, paiements sécurisés' },
  { icon: 'camping', text: 'Louez tout équipé',       desc: 'Table, chaises, vaisselle, camping, chauffage autonome' },
  { icon: 'pro',     text: 'Louez chez un pro',       desc: 'Désinfection rigoureuse, réseau de proximité' },
  { icon: 'shield',  text: 'Voyagez en sécurité',     desc: 'Assurance ALLIANZ, assistance AXA 24/7, permis B' },
  { icon: 'map',     text: 'Voyagez en simplicité',   desc: 'App spots, France Passion, OnlyCamp, roadbooks' },
];

function ReassIcon({ kind }) {
  const common = { width:15, height:15, fill:'none', stroke:'currentColor', strokeWidth:2.2, viewBox:'0 0 24 24' };
  if (kind === 'tag')     return <svg {...common}><path strokeLinecap="round" strokeLinejoin="round" d="M7 7h.01M7 3h5a1.99 1.99 0 011.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"/></svg>;
  if (kind === 'camping') return <svg {...common}><path strokeLinecap="round" strokeLinejoin="round" d="M3 21h18M5 21V9l7-6 7 6v12"/></svg>;
  if (kind === 'pro')     return <svg {...common}><path strokeLinecap="round" strokeLinejoin="round" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/></svg>;
  if (kind === 'shield')  return <svg {...common}><path strokeLinecap="round" strokeLinejoin="round" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/></svg>;
  if (kind === 'map')     return <svg {...common}><path strokeLinecap="round" strokeLinejoin="round" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l5.447 2.724A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7"/></svg>;
  return null;
}

function ReassuranceBar({ compact = false }) {
  // Mode compact (mobile) : rotateur — un seul item à la fois, fade in/out doux.
  // Mode desktop : marquee continu (legacy, plus utilisé en pratique).
  if (compact) {
    return <ReassuranceRotator />;
  }
  return (
    <div className="va-reass">
      <div className="va-reass-track">
        {[0,1,2].map(n => (
          <div className="va-reass-slide" key={n}>
            <div className="va-reass-title">
              <svg width="14" height="14" fill="none" stroke="currentColor" strokeWidth="2.2" viewBox="0 0 24 24">
                <path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7"/>
              </svg>
              Faites confiance à VAN-AWAY !
            </div>
            <div className="va-reass-sep" />
            {REASSURANCE_ITEMS.map((it, i) => (
              <React.Fragment key={`${n}-${i}`}>
                <div className="va-reass-item" title={it.desc}>
                  <ReassIcon kind={it.icon} />
                  <span className="va-reass-item__text">{it.text}</span>
                  <span className="va-reass-item__desc">{it.desc}</span>
                </div>
                {i < REASSURANCE_ITEMS.length - 1 && <div className="va-reass-sep" />}
              </React.Fragment>
            ))}
            <div className="va-reass-sep" />
          </div>
        ))}
      </div>
      <style>{`
        .va-reass{background:#e7fcfb;border-bottom:1px solid ${VA_BORDER};overflow:hidden;position:sticky;top:56px;z-index:40;contain:layout paint style;transform:translateZ(0)}
        .va-reass::before,.va-reass::after{content:'';position:absolute;top:0;bottom:0;width:50px;z-index:2;pointer-events:none}
        .va-reass::before{left:0;background:linear-gradient(90deg,#e7fcfb,transparent)}
        .va-reass::after{right:0;background:linear-gradient(270deg,#e7fcfb,transparent)}
        .va-reass-track{display:flex;width:max-content;animation:vaReassScroll 70s linear infinite;will-change:transform;transform:translate3d(0,0,0)}
        .va-reass-track:hover{animation-play-state:paused}
        .va-reass-slide{display:flex;align-items:center;gap:0}
        .va-reass-title{display:flex;align-items:center;gap:7px;white-space:nowrap;font-size:13px;font-weight:900;color:${VA_TEAL};padding:7px 20px;text-transform:uppercase;letter-spacing:.5px;flex-shrink:0}
        .va-reass-title svg{color:${VA_TEAL}}
        .va-reass-item{display:flex;align-items:center;gap:7px;white-space:nowrap;padding:7px 18px;flex-shrink:0}
        .va-reass-item svg{flex-shrink:0;color:${VA_TEAL}}
        .va-reass-item__text{font-size:13px;font-weight:700;color:${VA_INK};letter-spacing:.01em}
        .va-reass-item__desc{font-size:11px;font-weight:400;color:${VA_MUTED};margin-left:2px;border-left:1px solid ${VA_BORDER};padding-left:6px}
        .va-reass-sep{width:4px;height:4px;border-radius:50%;background:${VA_TEAL};flex-shrink:0;margin:0 6px;opacity:.4}
        @keyframes vaReassScroll{0%{transform:translate3d(0,0,0)}100%{transform:translate3d(-33.3333%,0,0)}}
      `}</style>
    </div>
  );
}

// ─── Reassurance rotator (compact / mobile) ────────────────────
// Affiche les items un par un avec une transition douce (cross-fade + léger slide).
function ReassuranceRotator({ intervalMs = 3200, fadeMs = 500 }) {
  const [idx, setIdx] = React.useState(0);
  React.useEffect(() => {
    const id = setInterval(() => {
      setIdx(i => (i + 1) % REASSURANCE_ITEMS.length);
    }, intervalMs);
    return () => clearInterval(id);
  }, [intervalMs]);

  return (
    <div className="va-reass-rot" aria-live="polite">
      {REASSURANCE_ITEMS.map((it, i) => (
        <div
          key={i}
          className={`va-reass-rot-item ${i === idx ? 'is-active' : ''}`}
          style={{ transitionDuration: `${fadeMs}ms` }}
        >
          <span className="va-reass-rot-icon"><ReassIcon kind={it.icon}/></span>
          <span className="va-reass-rot-text">{it.text}</span>
        </div>
      ))}
      <style>{`
        .va-reass-rot{position:sticky;top:36px;z-index:40;background:#e7fcfb;border-bottom:1px solid ${VA_BORDER};display:flex;align-items:center;justify-content:center;height:34px;overflow:hidden}
        .va-reass-rot-item{position:absolute;left:0;right:0;display:flex;align-items:center;justify-content:center;gap:7px;padding:0 14px;opacity:0;transform:translateY(6px);transition:opacity ease,transform ease;pointer-events:none;white-space:nowrap}
        .va-reass-rot-item.is-active{opacity:1;transform:translateY(0)}
        .va-reass-rot-icon{display:inline-flex;color:${VA_TEAL};flex-shrink:0}
        .va-reass-rot-text{font-size:11.5px;font-weight:700;color:${VA_INK};letter-spacing:.01em}
      `}</style>
    </div>
  );
}

// ─── Static reassurance block (desktop sidebar) ────────────────
function ReassuranceBlock({ variant = 'default' }) {
  return (
    <div className="va-reass-block" data-variant={variant}>
      <div className="va-reass-block-header">
        <svg width="14" height="14" fill="none" stroke="currentColor" strokeWidth="2.4" viewBox="0 0 24 24">
          <path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7"/>
        </svg>
        <span>Faites confiance à Van-Away</span>
      </div>
      <ul className="va-reass-block-list">
        {REASSURANCE_ITEMS.map((it, i) => (
          <li key={i} className="va-reass-block-item">
            <span className="va-reass-block-icon"><ReassIcon kind={it.icon}/></span>
            <div className="va-reass-block-text">
              <span className="va-reass-block-title">{it.text}</span>
              <span className="va-reass-block-desc">{it.desc}</span>
            </div>
          </li>
        ))}
      </ul>
      <style>{`
        /* default — card blanche */
        .va-reass-block{margin-top:14px;background:${VA_SURFACE};border:1px solid ${VA_BORDER};border-radius:20px;padding:18px 18px 10px;box-shadow:0 1px 2px rgba(4,40,40,.04),0 4px 16px rgba(4,40,40,.06)}
        .va-reass-block-header{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:900;color:${VA_TEAL};text-transform:uppercase;letter-spacing:.8px;padding-bottom:12px;margin-bottom:6px;border-bottom:1px solid ${VA_BORDER}}
        .va-reass-block-list{list-style:none;padding:0;margin:0}
        .va-reass-block-item{display:flex;align-items:flex-start;gap:12px;padding:10px 0;border-bottom:1px dashed ${VA_BORDER}}
        .va-reass-block-item:last-child{border-bottom:none}
        .va-reass-block-icon{flex-shrink:0;width:30px;height:30px;border-radius:8px;background:#e7fcfb;color:${VA_TEAL};display:flex;align-items:center;justify-content:center}
        .va-reass-block-text{display:flex;flex-direction:column;gap:2px;min-width:0}
        .va-reass-block-title{font-size:13px;font-weight:700;color:${VA_INK};line-height:1.25}
        .va-reass-block-desc{font-size:11px;font-weight:400;color:${VA_MUTED};line-height:1.35}

        /* B — Soft teal: fond #e7fcfb, accents teal */
        .va-reass-block[data-variant="softTeal"]{background:#e7fcfb;border-color:rgba(17,151,143,.22);box-shadow:0 1px 2px rgba(17,151,143,.06),0 4px 16px rgba(17,151,143,.10)}
        .va-reass-block[data-variant="softTeal"] .va-reass-block-header{color:${VA_TEAL};border-bottom-color:rgba(17,151,143,.22)}
        .va-reass-block[data-variant="softTeal"] .va-reass-block-item{border-bottom-color:rgba(17,151,143,.18)}
        .va-reass-block[data-variant="softTeal"] .va-reass-block-icon{background:#fff;color:${VA_TEAL}}
        .va-reass-block[data-variant="softTeal"] .va-reass-block-title{color:${VA_INK}}
        .va-reass-block[data-variant="softTeal"] .va-reass-block-desc{color:${VA_MUTED}}

        /* C — Accent: bord gauche teal + header bandeau teal */
        .va-reass-block[data-variant="accent"]{padding:0;overflow:hidden;border:1px solid ${VA_BORDER};border-left:3px solid ${VA_TEAL}}
        .va-reass-block[data-variant="accent"] .va-reass-block-header{background:${VA_TEAL};color:#fff;padding:12px 18px;margin-bottom:0;border-bottom:none;font-size:12px;letter-spacing:.8px}
        .va-reass-block[data-variant="accent"] .va-reass-block-list{padding:6px 18px 10px}
        .va-reass-block[data-variant="accent"] .va-reass-block-icon{background:#e7fcfb;color:${VA_TEAL}}
      `}</style>
    </div>
  );
}

// ─── Google reviews inline row (desktop) ───────────────────────
function GoogleReviewsInline() {
  const rating = 4.9;
  const full = Math.floor(rating);
  const hasHalf = rating - full >= 0.25 && rating - full < 0.75;
  const stars = [];
  for (let i = 0; i < 5; i++) {
    stars.push(i < full ? 'full' : (i === full && hasHalf ? 'half' : 'empty'));
  }
  return (
    <div className="va-greviews">
      <a className="va-greviews-pill" href="#" onClick={(e)=>e.preventDefault()} aria-label="Voir nos avis Google">
        <span className="va-greviews-glogo" aria-hidden="true">
          <svg width="22" height="22" viewBox="0 0 24 24">
            <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
            <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
            <path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
            <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
          </svg>
        </span>
        <span className="va-greviews-col">
          <span className="va-greviews-top">
            <span className="va-greviews-label">Avis Google</span>
            <span className="va-greviews-verified" aria-label="Vérifié">
              <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round"><path d="M5 13l4 4L19 7"/></svg>
              Vérifiés
            </span>
          </span>
          <span className="va-greviews-bottom">
            <span className="va-greviews-rating">{rating.toFixed(1).replace('.', ',')}</span>
            <span className="va-greviews-stars" aria-hidden="true">
              {stars.map((f, i) => (
                <svg key={i} width="13" height="13" viewBox="0 0 24 24">
                  {f === 'half' && (
                    <defs>
                      <linearGradient id={`vag-half-${i}`}>
                        <stop offset="50%" stopColor="#FBBC05"/>
                        <stop offset="50%" stopColor="rgba(4,40,40,0.18)"/>
                      </linearGradient>
                    </defs>
                  )}
                  <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"
                    fill={f === 'full' ? '#FBBC05' : f === 'half' ? `url(#vag-half-${i})` : 'rgba(4,40,40,0.15)'}/>
                </svg>
              ))}
            </span>
            <span className="va-greviews-meta">sur <strong>3&nbsp;100 avis</strong> clients</span>
          </span>
        </span>
      </a>
      <style>{`
        .va-greviews{display:flex;justify-content:center;padding:14px 20px 0}
        .va-greviews-pill{display:inline-flex;align-items:center;gap:14px;padding:10px 18px 10px 14px;background:${VA_SURFACE};border:1px solid ${VA_BORDER};border-radius:999px;box-shadow:0 1px 2px rgba(4,40,40,.04),0 4px 14px rgba(4,40,40,.05);text-decoration:none;transition:all .2s ease;position:relative;overflow:hidden}
        .va-greviews-pill::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#4285F4 0%,#34A853 33%,#FBBC05 66%,#EA4335 100%)}
        .va-greviews-pill:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(4,40,40,.08),0 2px 4px rgba(4,40,40,.04)}
        .va-greviews-glogo{flex-shrink:0;display:inline-flex;margin-left:6px}
        .va-greviews-col{display:flex;flex-direction:column;gap:3px;line-height:1.1}
        .va-greviews-top{display:flex;align-items:center;gap:8px}
        .va-greviews-label{font-size:11px;font-weight:700;color:${VA_MUTED};text-transform:uppercase;letter-spacing:1.2px}
        .va-greviews-verified{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:700;color:${VA_TEAL};padding:2px 7px;background:#e7fcfb;border-radius:999px;letter-spacing:.04em;text-transform:uppercase}
        .va-greviews-bottom{display:flex;align-items:center;gap:8px}
        .va-greviews-rating{font-size:20px;font-weight:900;color:${VA_INK};letter-spacing:-.02em;line-height:1}
        .va-greviews-stars{display:inline-flex;gap:1px;align-items:center}
        .va-greviews-meta{font-size:12px;color:${VA_MUTED};font-weight:400}
        .va-greviews-meta strong{font-weight:700;color:${VA_INK}}
      `}</style>
    </div>
  );
}

// ─── Google reviews badge — premium inline version ─────────────
function GoogleReviewsBadge({ compact = false }) {
  const rating = 4.9;
  const count = 3600;
  const full = Math.floor(rating);
  const frac = rating - full;
  const VA_GREEN = '#11978f';

  const Star = ({ fill, i }) => {
    const gid = `va-gb-star-${i}-${Math.round(fill*100)}`;
    return (
      <svg width={compact ? 12 : 14} height={compact ? 12 : 14} viewBox="0 0 24 24" aria-hidden="true" style={{display:'block'}}>
        {fill > 0 && fill < 1 && (
          <defs>
            <linearGradient id={gid}>
              <stop offset={`${fill*100}%`} stopColor="#F5A623"/>
              <stop offset={`${fill*100}%`} stopColor="#E5E7EB"/>
            </linearGradient>
          </defs>
        )}
        <path
          d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"
          fill={fill === 1 ? '#F5A623' : fill === 0 ? '#E5E7EB' : `url(#${gid})`}
        />
      </svg>
    );
  };

  return (
    <a className={`va-grev-badge ${compact ? 'is-compact' : ''}`} href="#" onClick={(e)=>e.preventDefault()} aria-label={`${rating} sur 5 — ${count} avis Google`}>
      <span className="va-grev-badge-glogo" aria-hidden="true">
        <svg width={compact ? 28 : 36} height={compact ? 28 : 36} viewBox="0 0 24 24">
          <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
          <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
          <path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
          <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
        </svg>
      </span>

      <span className="va-grev-badge-body">
        <span className="va-grev-badge-label">Évaluations Google</span>
        <span className="va-grev-badge-mid">
          <span className="va-grev-badge-rating">{rating.toLocaleString('fr-FR')}</span>
          <span className="va-grev-badge-stars" aria-hidden="true">
            {[0,1,2,3,4].map(i => {
              const f = i < full ? 1 : (i === full ? frac : 0);
              return <Star key={i} i={i} fill={f}/>;
            })}
          </span>
        </span>
        <span className="va-grev-badge-count">Basé sur {count.toLocaleString('fr-FR').replace(/\u202f/g,' ')}+ avis</span>
      </span>

      <style>{`
        .va-grev-badge{position:relative;display:inline-flex;align-items:center;gap:12px;padding:12px 18px 12px 16px;border-radius:10px;background:#ffffff;border:1px solid rgba(4,40,40,.10);border-top:4px solid ${VA_GREEN};text-decoration:none;transition:all .2s ease;white-space:nowrap;line-height:1;box-shadow:0 1px 2px rgba(4,40,40,.04),0 2px 6px rgba(4,40,40,.04)}
        .va-grev-badge:hover{transform:translateY(-1px);box-shadow:0 2px 4px rgba(4,40,40,.05),0 6px 16px rgba(4,40,40,.08);border-color:rgba(4,40,40,.14);border-top-color:${VA_GREEN}}

        .va-grev-badge-glogo{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;margin-top:2px}
        .va-grev-badge-body{display:flex;flex-direction:column;gap:4px;min-width:0}
        .va-grev-badge-label{font-size:13px;font-weight:700;color:${VA_INK};line-height:1.1}
        .va-grev-badge-mid{display:flex;align-items:center;gap:8px;line-height:1}
        .va-grev-badge-rating{font-size:17px;font-weight:800;color:${VA_INK};letter-spacing:-0.01em;font-variant-numeric:tabular-nums}
        .va-grev-badge-stars{display:inline-flex;align-items:center;gap:1.5px}
        .va-grev-badge-count{font-size:12px;font-weight:400;color:${VA_MUTED};line-height:1.1}

        /* Compact — mobile */
        .va-grev-badge.is-compact{gap:9px;padding:10px 14px 10px 12px;border-radius:8px;border-top-width:3px}
        .va-grev-badge.is-compact .va-grev-badge-label{font-size:11px}
        .va-grev-badge.is-compact .va-grev-badge-rating{font-size:14px}
        .va-grev-badge.is-compact .va-grev-badge-count{font-size:10.5px}
      `}</style>
    </a>
  );
}

// ─── Google reviews mini-chip (inline) ─────────────────────────
function GoogleReviewsChip({ compact = false }) {
  return (
    <a className={`va-greviews-chip ${compact ? 'is-compact' : ''}`} href="#" onClick={(e)=>e.preventDefault()} aria-label="Voir nos avis Google">
      <svg className="va-greviews-chip-glogo" width={compact ? 12 : 14} height={compact ? 12 : 14} viewBox="0 0 24 24" aria-hidden="true">
        <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
        <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
        <path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
        <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
      </svg>
      <svg width={compact ? 11 : 12} height={compact ? 11 : 12} viewBox="0 0 24 24" fill="#FBBC05" aria-hidden="true">
        <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
      </svg>
      <span className="va-greviews-chip-rating">4,9</span>
      {!compact && <span className="va-greviews-chip-meta"><strong>3&nbsp;100</strong> avis</span>}
      <style>{`
        .va-greviews-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;background:${VA_SURFACE};border:1px solid ${VA_BORDER};text-decoration:none;transition:all .15s ease;white-space:nowrap;line-height:1}
        .va-greviews-chip:hover{border-color:rgba(4,40,40,0.14);box-shadow:0 1px 3px rgba(4,40,40,.08)}
        .va-greviews-chip-glogo{flex-shrink:0}
        .va-greviews-chip-rating{font-size:13px;font-weight:800;color:${VA_INK};letter-spacing:-.01em}
        .va-greviews-chip-meta{font-size:12px;color:${VA_MUTED};font-weight:400}
        .va-greviews-chip-meta strong{font-weight:700;color:${VA_INK}}
        .va-greviews-chip.is-compact{padding:4px 8px;gap:4px}
        .va-greviews-chip.is-compact .va-greviews-chip-rating{font-size:11px}
      `}</style>
    </a>
  );
}

// ─── Google reviews — floating badge (mobile) ──────────────────
function GoogleReviewsFloating() {
  const rating = 4.9;
  const count = 3600;
  const VA_GREEN = '#11978f';
  return (
    <a className="va-grev-float" href="#" onClick={(e)=>e.preventDefault()} aria-label={`${rating} sur 5 — ${count} avis Google`}>
      <svg width="22" height="22" viewBox="0 0 24 24" aria-hidden="true" style={{flexShrink:0}}>
        <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
        <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
        <path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
        <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
      </svg>
      <span className="va-grev-float-body">
        <span className="va-grev-float-top">
          <span className="va-grev-float-rating">{rating.toLocaleString('fr-FR')}</span>
          <svg width="11" height="11" viewBox="0 0 24 24" fill="#F5A623" aria-hidden="true" style={{flexShrink:0}}>
            <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
          </svg>
        </span>
        <span className="va-grev-float-count">{count.toLocaleString('fr-FR').replace(/\u202f/g,' ')}+ avis</span>
      </span>
      <style>{`
        .va-grev-float{position:absolute;right:14px;bottom:18px;z-index:40;display:inline-flex;align-items:center;gap:9px;padding:9px 12px 9px 10px;background:#fff;border-radius:12px;border:1px solid rgba(4,40,40,.08);border-top:3px solid ${VA_GREEN};text-decoration:none;white-space:nowrap;line-height:1;box-shadow:0 4px 14px rgba(4,40,40,.12),0 1px 2px rgba(4,40,40,.06);transition:transform .2s ease,box-shadow .2s ease}
        .va-grev-float:active{transform:scale(.97)}
        .va-grev-float-body{display:flex;flex-direction:column;gap:3px;min-width:0}
        .va-grev-float-top{display:flex;align-items:center;gap:5px;line-height:1}
        .va-grev-float-rating{font-size:14px;font-weight:800;color:${VA_INK};letter-spacing:-.01em;font-variant-numeric:tabular-nums}
        .va-grev-float-count{font-size:10.5px;font-weight:500;color:${VA_MUTED};line-height:1.1}
      `}</style>
    </a>
  );
}

Object.assign(window, { TunnelHeader, ReassuranceBar, ReassuranceBlock, GoogleReviewsInline, GoogleReviewsChip, GoogleReviewsBadge, GoogleReviewsFloating, ProgressBar, VanAwayLogo, VA_TEAL, VA_INK, VA_MUTED, VA_CREAM, VA_SURFACE, VA_BORDER });
