// FOOTPASS v2 · TUNNEL DE CRÉATION DE STRUCTURE · partie 1 : données, atomes, étapes 1-3
// Audit « Création de structure » P0-1→P0-3 : tunnel plein écran, calculateur de dimensionnement,
// preuve par le résultat (template + cascade B2B2C). Persuasion éthique uniquement · aucun dark pattern.
const { useState: useStateStt, useEffect: useEffectStt, useRef: useRefStt } = React;
const sttTX = (s) => (window.TX ? window.TX(s) : s);

// ── Paliers (mêmes chiffres que FP_ST_TIERS · doc de référence) + bornes numériques ──
const STT_TIERS = [
  { id: 'Small', staff: '1–5', max: 5, p: 499.99, inc: 2, direct: true },
  { id: 'Medium', staff: '6–15', max: 15, p: 1199.99, inc: 2, direct: true },
  { id: 'Confirmed', staff: '16–30', max: 30, p: 3990, inc: 5, direct: true },
  { id: 'Established', staff: '31–50', max: 50, p: 7990, inc: 5 },
  { id: 'Large', staff: '51–70', max: 70, p: 15990, inc: 10 },
  { id: 'Very Large', staff: '70+', max: Infinity, p: 19990, inc: 10 },
];
const sttTierFor = (n) => STT_TIERS.find((t) => n <= t.max) || STT_TIERS[STT_TIERS.length - 1];
const sttCHF = (n) => {
  const [i, c] = n.toFixed(2).split('.');
  const int = i.replace(/\B(?=(\d{3})+(?!\d))/g, '\u202F');
  return c === '00' ? int : `${int},${c}`;
};
// Équivalent mensuel EXACT (2 décimales, jamais arrondi vers le haut · charte de clarté)
const sttMois = (t) => sttCHF(Math.round((t.p / 12) * 100) / 100);
const STT_SEAT_M = 19.99; // siège supplémentaire · mensuel (PassPRO lié · prix déjà réduit vs 29,99 individuel)
const STT_SEAT_A = 239.99; // siège supplémentaire · annuel = 12 × 19,99 (aucune remise supplémentaire : le −33 % ne vaut que pour le PassPRO individuel)

// ── Calculateur : questions ADAPTÉES au type · seul le staff permanent compte ──
// ex = la rangée « ne comptent jamais » (0 CHF) · l'aha du calculateur.
const STT_CFG = {
  Agence: { rows: [{ k: 'a', l: 'Agents', h: 'Négocient au nom de vos joueurs', d: 2 }, { k: 'b', l: 'Juridique & administration', h: 'Contrats, facturation, back-office', d: 1 }, { k: 'c', l: 'Scouting & data', h: 'Détection, vidéo, analyse', d: 1 }], ex: { l: 'Joueurs représentés', h: 'Chacun paie son propre Pass', d: 24 }, poles: ['Direction', 'Juridique', 'Performance', 'Scouting', 'Communication'], more: ['Player Care', 'Finance', 'Médical'], talents: 'Vos joueurs représentés', hier: ['Fondateur', 'Noyau privé', 'Agents seniors', 'Agents terrain', 'Pôles'] },
  Club: { rows: [{ k: 'a', l: 'Direction & administration', h: 'Présidence, secrétariat, finance', d: 2 }, { k: 'b', l: 'Staff technique', h: 'Entraîneurs, adjoints, préparateurs', d: 4 }, { k: 'c', l: 'Médical & performance', h: 'Médecins, kinés, data', d: 2 }, { k: 'd', l: 'Communication & académie', h: 'Salariés permanents uniquement', d: 1 }], ex: { l: 'Joueurs & jeunes', h: 'Toutes équipes · chacun son Pass', d: 68 }, poles: ['Direction', 'Performance', 'Médical', 'Administratif', 'Communication', 'Juridique'], more: ['Scouting', 'Player Care', 'Finance'], talents: 'Vos joueurs', hier: ['Présidence', 'Noyau privé', 'Staffs d\u2019équipe', 'Pôles'] },
  'Académie': { rows: [{ k: 'a', l: 'Direction', h: '', d: 1 }, { k: 'b', l: 'Éducateurs permanents', h: 'Salariés, hors vacataires', d: 5 }, { k: 'c', l: 'Médical & administration', h: '', d: 2 }], ex: { l: 'Jeunes en formation', h: 'PassSTART 9,99 · payé par les familles', d: 120 }, poles: ['Direction', 'Performance', 'Médical', 'Player Care', 'Administratif'], more: ['Communication', 'Juridique'], talents: 'Vos jeunes', hier: ['Direction', 'Noyau privé', 'Éducateurs', 'Pôles'] },
  Cabinet: { rows: [{ k: 'a', l: 'Associés', h: '', d: 2 }, { k: 'b', l: 'Collaborateurs', h: 'Juristes, conseils, praticiens', d: 3 }, { k: 'c', l: 'Support', h: 'Assistanat, administration', d: 1 }], ex: { l: 'Clients & athlètes conseillés', h: 'Chacun paie son propre Pass', d: 30 }, poles: ['Direction', 'Juridique', 'Administratif', 'Finance'], more: ['Communication', 'Médical'], talents: 'Vos clients athlètes', hier: ['Associés', 'Noyau privé', 'Collaborateurs', 'Pôles'] },
  Scouting: { rows: [{ k: 'a', l: 'Direction', h: '', d: 1 }, { k: 'b', l: 'Scouts permanents', h: 'Salariés, hors correspondants', d: 3 }, { k: 'c', l: 'Data & vidéo', h: '', d: 1 }], ex: { l: 'Joueurs suivis', h: 'Jamais comptés dans votre palier', d: 200 }, poles: ['Direction', 'Scouting', 'Performance', 'Administratif'], more: ['Communication', 'Finance'], talents: 'Vos joueurs suivis', hier: ['Direction', 'Noyau privé', 'Scouts seniors', 'Pôles'] },
  'Média': { rows: [{ k: 'a', l: 'Rédaction permanente', h: '', d: 4 }, { k: 'b', l: 'Production', h: 'Vidéo, podcast, studio', d: 2 }, { k: 'c', l: 'Administration', h: '', d: 1 }], ex: { l: 'Pigistes & invités', h: 'Occasionnels · jamais comptés', d: 15 }, poles: ['Direction', 'Communication', 'Administratif', 'Finance'], more: ['Juridique'], talents: 'Vos contributeurs', hier: ['Direction', 'Noyau privé', 'Rédaction', 'Pôles'] },
  Association: { rows: [{ k: 'a', l: 'Permanents', h: 'Salariés de l\u2019association', d: 1 }, { k: 'b', l: 'Encadrants salariés', h: '', d: 2 }], ex: { l: 'Bénévoles, parents & joueurs', h: 'PassSTAFF 1,99 ou PassSTART · jamais comptés', d: 40 }, poles: ['Direction', 'Administratif', 'Communication', 'Player Care'], more: ['Performance', 'Finance'], talents: 'Vos membres', hier: ['Bureau', 'Noyau privé', 'Encadrants', 'Pôles'] },
  'Fédération': { rows: [{ k: 'a', l: 'Permanents', h: 'Direction, administration', d: 10 }, { k: 'b', l: 'Compétitions & arbitrage', h: 'Salariés permanents', d: 4 }, { k: 'c', l: 'Communication & juridique', h: '', d: 3 }], ex: { l: 'Clubs affiliés & licenciés', h: 'Ils créent leurs propres structures', d: 340 }, poles: ['Direction', 'Juridique', 'Opérations', 'Communication', 'Administratif'], more: ['Finance', 'Médical'], talents: 'Vos officiels', hier: ['Comité', 'Noyau privé', 'Départements', 'Pôles'] },
  Autre: { rows: [{ k: 'a', l: 'Vous', h: 'Fondateur ou indépendant', d: 1 }, { k: 'b', l: 'Équipe permanente', h: '', d: 1 }], ex: { l: 'Clients & athlètes', h: 'Chacun paie son propre Pass', d: 12 }, poles: ['Direction', 'Performance', 'Administratif'], more: ['Juridique', 'Communication', 'Finance'], talents: 'Vos athlètes', hier: ['Fondateur', 'Équipe', 'Pôles'] },
};
const sttCfg = (type) => STT_CFG[type] || STT_CFG.Autre;

const STT_COUNTRIES = ['Suisse', 'France', 'Belgique', 'Espagne', 'Portugal', 'Autre'];
const STT_COLORS = [{ c: '#00A37E', l: 'Vert FOOTPASS' }, { c: '#2A6FDB', l: 'Bleu royal' }, { c: '#C9A24B', l: 'Or' }, { c: '#52525B', l: 'Graphite' }];
const sttInit = (name) => (name || '').trim().split(/\s+/).slice(0, 2).map((w) => w[0]).join('').toUpperCase() || '··';
const sttMonoStyle = (color) => ({ background: `color-mix(in oklab, ${color} 16%, transparent)`, color: color === '#52525B' ? '#A1A1AA' : color });

// Rôle contact → pôle par défaut (suggestions d'équipe)
const STT_ROLE_POLE = { Juriste: 'Juridique', Agent: 'Direction', 'Entraîneur': 'Performance', 'Directeur sportif': 'Direction', Recruteur: 'Scouting', CEO: 'Direction' };

// Logo de structure · choisi depuis la galerie, recadré en carré 112px (dataURL léger)
function sttPickLogo(cb) {
  const inp = document.createElement('input');
  inp.type = 'file'; inp.accept = 'image/*';
  inp.onchange = () => {
    const f = inp.files && inp.files[0];
    if (!f) return;
    const r = new FileReader();
    r.onload = () => {
      const img = new Image();
      img.onload = () => {
        const s = 112, c = document.createElement('canvas');
        c.width = s; c.height = s;
        const x = c.getContext('2d');
        const k = Math.max(s / img.width, s / img.height);
        const w = img.width * k, h = img.height * k;
        x.drawImage(img, (s - w) / 2, (s - h) / 2, w, h);
        cb(c.toDataURL('image/png'));
      };
      img.src = r.result;
    };
    r.readAsDataURL(f);
  };
  inp.click();
}
// Monogramme → logo dès qu'il existe (identité, aperçu QG, plaque finale)
function SttMono({ d, onPick }) {
  return (
    <span className={`stt-mono ${onPick ? 'pick' : ''}`} style={sttMonoStyle(d.color)} onClick={onPick || null} role={onPick ? 'button' : null}>
      {d.logo ? <img src={d.logo} alt="" /> : sttInit(d.name)}
    </span>
  );
}

// ── Icônes locales (formes simples) ──
const SttIco = {
  Chev: ({ s = 18 }) => (<svg width={s} height={s} viewBox="0 0 18 18" fill="none"><path d="M11 4L6 9l5 5" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"></path></svg>),
  Check: ({ s = 12 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><path d="M2.8 8.6L6.2 12L13.2 4.4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"></path></svg>),
  Plus: ({ s = 13 }) => (<svg width={s} height={s} viewBox="0 0 14 14" fill="none"><path d="M7 1.5V12.5M1.5 7H12.5" stroke="currentColor" strokeWidth="1.7" strokeLinecap="round"></path></svg>),
  X: ({ s = 12 }) => (<svg width={s} height={s} viewBox="0 0 12 12" fill="none"><path d="M2.5 2.5l7 7M9.5 2.5l-7 7" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round"></path></svg>),
  Door: ({ s = 15 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><rect x="3.25" y="1.75" width="9.5" height="12.5" rx="1.5" stroke="currentColor" strokeWidth="1.3"></rect><circle cx="10.4" cy="8" r="1" fill="currentColor"></circle></svg>),
  Room: ({ s = 14 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><rect x="1.75" y="3.25" width="12.5" height="9.5" rx="2" stroke="currentColor" strokeWidth="1.3"></rect><path d="M5 7h6M5 9.5h3.5" stroke="currentColor" strokeWidth="1.2" strokeLinecap="round"></path></svg>),
  Lock: ({ s = 14 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><rect x="3.25" y="6.75" width="9.5" height="7" rx="1.8" stroke="currentColor" strokeWidth="1.3"></rect><path d="M5.5 6.5V5a2.5 2.5 0 015 0v1.5" stroke="currentColor" strokeWidth="1.3"></path></svg>),
  Vault: ({ s = 14 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><rect x="1.9" y="2.4" width="12.2" height="11.2" rx="2" stroke="currentColor" strokeWidth="1.3"></rect><circle cx="8" cy="8" r="2.6" stroke="currentColor" strokeWidth="1.2"></circle><circle cx="8" cy="8" r="0.85" fill="currentColor"></circle></svg>),
  Users: ({ s = 14 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><circle cx="5.6" cy="5.4" r="2.4" stroke="currentColor" strokeWidth="1.3"></circle><path d="M1.8 13c.4-2.5 2-3.7 3.8-3.7s3.4 1.2 3.8 3.7" stroke="currentColor" strokeWidth="1.3" strokeLinecap="round"></path><circle cx="11.6" cy="5.9" r="1.9" stroke="currentColor" strokeWidth="1.2"></circle><path d="M11 9.3c1.9 0 3 1.3 3.3 3.2" stroke="currentColor" strokeWidth="1.2" strokeLinecap="round"></path></svg>),
  Link: ({ s = 14 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><path d="M6.5 9.5l3-3" stroke="currentColor" strokeWidth="1.3" strokeLinecap="round"></path><path d="M7.5 4.8l1.2-1.2a2.7 2.7 0 013.8 3.8L11.2 8.6M8.5 11.2l-1.2 1.2a2.7 2.7 0 01-3.8-3.8l1.3-1.2" stroke="currentColor" strokeWidth="1.3" strokeLinecap="round"></path></svg>),
  Shield: ({ s = 11 }) => (<svg width={s} height={s} viewBox="0 0 10 11" fill="currentColor"><path d="M5 0.5L0.75 2v3.5c0 2.5 1.8 4.5 4.25 5C7.45 10 9.25 8 9.25 5.5V2L5 0.5z"></path></svg>),
  Pole: ({ s = 14 }) => (<svg width={s} height={s} viewBox="0 0 16 16" fill="none"><rect x="2" y="2" width="5.2" height="5.2" rx="1.4" stroke="currentColor" strokeWidth="1.25"></rect><rect x="8.8" y="2" width="5.2" height="5.2" rx="1.4" stroke="currentColor" strokeWidth="1.25"></rect><rect x="2" y="8.8" width="5.2" height="5.2" rx="1.4" stroke="currentColor" strokeWidth="1.25"></rect><rect x="8.8" y="8.8" width="5.2" height="5.2" rx="1.4" stroke="currentColor" strokeWidth="1.25"></rect></svg>),
};

// ── Atomes ──
function SttStepper({ v, onChange, min = 0 }) {
  return (
    <span className="stt-stepper">
      <button className="stt-stbtn" disabled={v <= min} onClick={() => onChange(v - 1)} aria-label="Moins">−</button>
      <span className="stt-stval">{v}</span>
      <button className="stt-stbtn" onClick={() => onChange(v + 1)} aria-label="Plus">+</button>
    </span>
  );
}
function SttRule() {
  return (
    <div className="stt-rule">
      <SttIco.Door />
      <p>{sttTX('Votre structure est la porte, pas le portefeuille : ')}<b>{sttTX('vous ne payez que votre staff permanent.')}</b> {sttTX('Joueurs, jeunes et bénévoles paient leur propre Pass.')}</p>
    </div>
  );
}

// ═══ Étape 1 · IDENTITÉ · « je représente une structure » ═══
function SttIdentity({ d, up }) {
  const types = window.FP_ST_TYPES || [];
  const cur = types.find((x) => x.t === d.type) || types[0] || { hint: '', demo: '' };
  return (
    <React.Fragment>
      <span className="stt-kick">{sttTX('VOTRE STRUCTURE')}</span>
      <h1 className="stt-h1">{sttTX('La tour de contrôle de votre organisation.')}</h1>
      <p className="stt-sub">{sttTX('Créée en deux minutes, vérifiée par FOOTPASS, visible sur le Pass ID de toute votre équipe.')}</p>
      <div className="stt-plq">
        <SttMono d={d} onPick={() => sttPickLogo((logo) => up({ logo }))} />
        <span className="stt-plq-txt">
          <b>{d.name.trim() ? d.name : <span className="ph">{sttTX('Nom de votre structure')}</span>}</b>
          <em>{sttTX(d.type)} · {sttTX(d.country)} · {sttTX('vérifiée par FOOTPASS')}</em>
        </span>
        <button className="stt-logobtn" onClick={() => (d.logo ? up({ logo: null }) : sttPickLogo((logo) => up({ logo })))}>{d.logo ? sttTX('Retirer') : sttTX('+ Logo')}</button>
      </div>
      <div className="stt-lbl">{sttTX('Type')}</div>
      <div className="stt-typegrid">
        {types.map((x) => (
          <button key={x.t} className={`stt-type ${d.type === x.t ? 'on' : ''}`} onClick={() => up({ type: x.t, calc: null, ex: null, spaces: null })}>{sttTX(x.t)}</button>
        ))}
      </div>
      <p className="stt-typehint">{sttTX(cur.hint)}</p>
      <div className="stt-lbl">{sttTX('Nom')}</div>
      <input className="stt-input" value={d.name} placeholder={sttTX('Ex. ') + cur.demo} onChange={(e) => up({ name: e.target.value })} />
      {!d.name ? <button className="stt-suggest" onClick={() => up({ name: cur.demo })}>{sttTX('Utiliser « ') + cur.demo + sttTX(' » (démo)')}</button> : null}
      <div className="stt-lbl">{sttTX('Pays')}</div>
      <div className="stt-chips">
        {STT_COUNTRIES.map((c) => (
          <button key={c} className={`stt-chip ${d.country === c ? 'on' : ''}`} onClick={() => up({ country: c })}>{sttTX(c)}</button>
        ))}
      </div>
      <div className="stt-lbl">{sttTX('Couleur')}<em>{d.logo ? sttTX('derrière votre logo') : sttTX('votre monogramme · ou touchez-le pour ajouter votre logo')}</em></div>
      <div className="stt-swatches">
        {STT_COLORS.map((x) => (
          <button key={x.c} className={`stt-swatch ${d.color === x.c ? 'on' : ''}`} onClick={() => up({ color: x.c })} aria-label={x.l}><i style={{ background: x.c }}></i></button>
        ))}
      </div>
    </React.Fragment>
  );
}

// ═══ Étape 2 · CALCULATEUR · « estimez votre organisation » ═══
// La réassurance qui débloque la conversion : palier recommandé + prix annuel EN DIRECT.
function SttCalc({ d, up }) {
  const cfg = sttCfg(d.type);
  const calc = d.calc;
  const ex = d.ex;
  const [pulse, setPulse] = useStateStt(0);
  const [zeroPulse, setZeroPulse] = useStateStt(0);
  const staff = cfg.rows.reduce((s, r) => s + (calc[r.k] || 0), 0);
  const tier = sttTierFor(Math.max(1, staff));
  const extra = Math.max(0, staff - tier.inc);
  const setRow = (k, v) => { up({ calc: { ...calc, [k]: Math.max(0, v) } }); setPulse((p) => p + 1); };
  return (
    <React.Fragment>
      <span className="stt-kick">{sttTX('DIMENSIONNEMENT')}</span>
      <h1 className="stt-h1">{sttTX('Estimez votre organisation.')}</h1>
      <p className="stt-sub">{sttTX('Seul votre staff permanent compte · celles et ceux qui font tourner ') + (d.name || sttTX('votre structure')) + sttTX(' au quotidien.')}</p>
      <SttRule />
      <div className="stt-lbl">{sttTX('Votre staff permanent')}</div>
      <div>
        {cfg.rows.map((r) => (
          <div key={r.k} className="stt-strow">
            <span className="stt-st-txt"><b>{sttTX(r.l)}</b>{r.h ? <em>{sttTX(r.h)}</em> : null}</span>
            <SttStepper v={calc[r.k] || 0} onChange={(v) => setRow(r.k, v)} />
          </div>
        ))}
      </div>
      <div className="stt-strow ex">
        <span className="stt-st-txt"><b>{sttTX(cfg.ex.l)}</b><em>{sttTX(cfg.ex.h)}</em></span>
        <SttStepper v={ex} onChange={(v) => { up({ ex: Math.max(0, v) }); setZeroPulse((p) => p + 1); }} />
        <span key={zeroPulse} className={`stt-zero ${zeroPulse ? 'pulse' : ''}`}>{sttTX('0 CHF · jamais comptés')}</span>
      </div>
      <div className="stt-reco">
        <div className="stt-reco-k"><span>{sttTX('PALIER RECOMMANDÉ')}</span><em>{staff} {sttTX('staff estimé')}</em></div>
        <div className="stt-reco-tier"><b>{tier.id}</b><span>{sttTX('staff')} {tier.staff}</span></div>
        <div key={pulse} className={`stt-price ${pulse ? 'pulse' : ''}`}>{sttCHF(tier.p)} <small>CHF/an · ≈ {sttMois(tier)} CHF/mois</small></div>
        <div className="stt-reco-rows">
          <div className="stt-reco-row"><span>{sttTX('Sièges staff inclus')}</span><b>{tier.inc}</b></div>
          <div className="stt-reco-row"><span>{sttTX('Au-delà, par siège activé')}</span><b>{sttTX('19,99 CHF/mois · 239,99/an')}</b></div>
          {extra > 0 ? <div className="stt-reco-row"><span>{sttTX('Pour vos ') + staff + sttTX(' staff, si tous prennent un siège')}</span><b>≈ {sttCHF(tier.p + extra * STT_SEAT_A)} {sttTX('CHF/an')}</b></div> : null}
          <div className="stt-reco-row"><span>{sttTX(cfg.ex.l)} ({ex})</span><b className="gold">{sttTX('0 CHF')}</b></div>
          <div className="stt-reco-row"><span>{sttTX('Aujourd\u2019hui')}</span><b>{tier.direct ? sttTX('0 CHF · essai 10 jours') : sttTX('0 CHF · activation sur demande, 24 h')}</b></div>
        </div>
      </div>
      <p className="stt-note">{sttTX('Les sièges supplémentaires ne sont facturés qu\u2019à l\u2019activation de chaque siège · jamais avant. Chaque siège peut être pris en charge par la structure ou par la personne : vous choisissez à l\u2019invitation. Palier ajustable à tout moment.')}</p>
    </React.Fragment>
  );
}

// ═══ Étape 3 · APERÇU · la preuve par le résultat (template-led) ═══
function SttPreview({ d }) {
  const cfg = sttCfg(d.type);
  const staff = cfg.rows.reduce((s, r) => s + (d.calc[r.k] || 0), 0);
  const tier = sttTierFor(Math.max(1, staff));
  const spaces = [
    { ic: 'Room', acc: true, n: 'Room principale', s: 'Toute votre structure, un seul fil', soon: true },
    { ic: 'Lock', n: 'Noyau privé', s: 'Votre cercle de direction', soon: true },
    ...cfg.poles.slice(1, 4).map((p) => ({ ic: 'Pole', n: sttTX('Pôle ') + sttTX(p), s: sttTX('Espace de travail dédié'), soon: true })),
    { ic: 'Users', n: sttTX('Talents'), s: sttTX(cfg.talents) + ' · ' + d.ex, r: d.ex },
    { ic: 'Link', n: 'Autorisations', s: 'Autorisations vers l\u2019extérieur' },
    { ic: 'Vault', acc: true, n: 'Coffre-fort de structure', s: 'Hébergé en Suisse · AES-256' },
  ];
  return (
    <React.Fragment>
      <span className="stt-kick">{sttTX('APERÇU')}</span>
      <h1 className="stt-h1">{sttTX('Votre QG, déjà organisé.')}</h1>
      <p className="stt-sub">{sttTX('Voici votre QG tel qu\u2019il sera · coffre et autorisations dès aujourd\u2019hui, rooms et espaces à la prochaine version.')}</p>
      <div className="stt-qg">
        <div className="stt-qg-head">
          <SttMono d={d} />
          <span className="stt-qg-txt"><b>{d.name}</b><em>{sttTX(d.type)} · {sttTX(d.country)} · {staff} {sttTX('staff')}</em></span>
          <span className="stt-tierbadge">{tier.id.toUpperCase()}</span>
        </div>
        {spaces.map((s, i) => {
          const I = SttIco[s.ic];
          return (
            <div key={i} className="stt-sp">
              <span className={`stt-sp-ic ${s.acc ? 'acc' : ''}`}><I /></span>
              <span className="stt-sp-txt"><b>{sttTX(s.n)}</b><em>{sttTX(s.s)}</em></span>
              {s.soon ? <span className="stt-soon">{sttTX('À VENIR')}</span> : null}
              {s.r ? <span className="stt-sp-n">{s.r}</span> : null}
            </div>
          );
        })}
        <div className="stt-qg-note">{sttTX('Rooms, mur et espaces arrivent à la prochaine version · inclus dans votre palier, sans supplément. Messagerie certifiée, coffre et autorisations fonctionnent dès aujourd’hui.')}</div>
      </div>
      <div className="stt-lbl" style={{ marginTop: 22 }}>{sttTX('Ce qui se passe ensuite')}</div>
      <div className="stt-casc">
        <div className="stt-casc-row"><span className="stt-casc-no">1</span><span className="stt-casc-txt"><b>{sttTX('Votre structure s\u2019active')}</b><em>{sttTX('Vérifiée, visible sur le Pass ID de votre équipe.')}</em></span></div>
        <div className="stt-casc-row"><span className="stt-casc-no">2</span><span className="stt-casc-txt"><b>{sttTX('Votre staff arrive')}</b><em>{sttTX('PassPRO lié : 19,99 au lieu de 29,99 CHF/mois.')}</em></span></div>
        <div className="stt-casc-row"><span className="stt-casc-no">3</span><span className="stt-casc-txt"><b>{sttTX(cfg.talents) + sttTX(' rejoignent')}</b><em>{sttTX('Chacun paie son propre Pass · jamais votre facture.')}</em></span></div>
        <div className="stt-casc-row"><span className="stt-casc-no">4</span><span className="stt-casc-txt"><b>{sttTX('Leur réseau suit')}</b><em>{sttTX('Agents, clubs, cabinets : chaque arrivée renforce le vôtre.')}</em></span></div>
      </div>
    </React.Fragment>
  );
}

Object.assign(window, { STT_TIERS, sttTierFor, sttCHF, sttMois, STT_SEAT_M, STT_SEAT_A, sttCfg, sttInit, sttMonoStyle, sttTX, SttIco, SttStepper, SttRule, SttIdentity, SttCalc, SttPreview, STT_ROLE_POLE, STT_COLORS, SttMono, sttPickLogo });
