{"id":1854,"date":"2025-09-15T21:48:57","date_gmt":"2025-09-16T01:48:57","guid":{"rendered":"https:\/\/abxstack.com\/?page_id=1854"},"modified":"2026-02-07T13:08:39","modified_gmt":"2026-02-07T18:08:39","slug":"abm-maturity-assessment","status":"publish","type":"page","link":"https:\/\/abxstack.com\/fr\/abm-maturity-assessment\/","title":{"rendered":"\u00c9valuation de la maturit\u00e9 des ABM"},"content":{"rendered":"\n<div class=\"wp-block-cover alignfull\" style=\"padding-top:var(--wp--preset--spacing--70);padding-bottom:var(--wp--preset--spacing--70)\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-nv-light-bg-background-color has-background-dim-100 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<!-- ABX Assessment (Account-Based-GTM aligned) \u2014 v4 ::part hooks -->\n<abx-assessment\n  data-webhook=\"https:\/\/abxstack.com\/wp-json\/abx\/v1\/submit\"\n  data-book=\"https:\/\/abxstack.com\/book-a-call\/\"\n><\/abx-assessment>\n\n<script type=\"module\">\nclass AbxAssessment extends HTMLElement {\n  constructor(){ super(); this.attachShadow({mode:'open'}); }\n  connectedCallback(){\n    const root = this.shadowRoot;\n    const webhook = this.getAttribute('data-webhook') || '';\n    const bookUrl = this.getAttribute('data-book') || '\/book-a-call\/';\n    const QUESTIONS = [\n      {\"id\":\"q1\",\"cat\":\"Company & Ops\",\"text\":\"Leadership has explicitly endorsed an account-based GTM vision with resources assigned.\"},\n      {\"id\":\"q2\",\"cat\":\"Company & Ops\",\"text\":\"We have a documented ABX\/ABM team structure with clear role definitions.\"},\n      {\"id\":\"q3\",\"cat\":\"Company & Ops\",\"text\":\"Our program\u2019s maturity (Crawl\/Walk\/Run) is known and socialized across GTM.\"},\n      {\"id\":\"q4\",\"cat\":\"Company & Ops\",\"text\":\"A Center of Excellence (or equivalent) standardizes best practices, assets, and enablement.\"},\n      {\"id\":\"q5\",\"cat\":\"Company & Ops\",\"text\":\"We run an experimentation \u2192 test \u2192 analyze \u2192 adopt\/abandon loop for program improvements.\"},\n      {\"id\":\"q6\",\"cat\":\"Company & Ops\",\"text\":\"Operational excellence is enforced via charter, RACI, and SOPs.\"},\n      {\"id\":\"q7\",\"cat\":\"GTM Foundations\",\"text\":\"We maintain a current ICP and segmentation model tied to revenue growth analysis.\"},\n      {\"id\":\"q8\",\"cat\":\"GTM Foundations\",\"text\":\"Program objectives ladder to business OKRs and revenue targets.\"},\n      {\"id\":\"q9\",\"cat\":\"GTM Foundations\",\"text\":\"Our deployment model choices reflect org attributes (ACV, cycle, capacity, risk).\"},\n      {\"id\":\"q10\",\"cat\":\"GTM Foundations\",\"text\":\"The TAL uses multi-dimensional variables (fit, intent, relationships, engagement, custom).\"},\n      {\"id\":\"q11\",\"cat\":\"GTM Foundations\",\"text\":\"Buying groups are identified and mapped (roles, influence, powerline).\"},\n      {\"id\":\"q12\",\"cat\":\"GTM Foundations\",\"text\":\"Messaging frameworks (umbrella value props + themes) are defined per model\/tier.\"},\n      {\"id\":\"q13\",\"cat\":\"Planning & Activation\",\"text\":\"Each campaign has clear objectives and shared success criteria.\"},\n      {\"id\":\"q14\",\"cat\":\"Planning & Activation\",\"text\":\"We audit database completeness (contacts\/account, quality, dedupe, enrichment).\"},\n      {\"id\":\"q15\",\"cat\":\"Planning & Activation\",\"text\":\"Content inventory and gaps cover Top-Line, Social Proof, Product Education, Investment Validation.\"},\n      {\"id\":\"q16\",\"cat\":\"Planning & Activation\",\"text\":\"We maintain ABM playbooks (Enterprise\/Growth\/Deal Acceleration) with reusable components.\"},\n      {\"id\":\"q17\",\"cat\":\"Planning & Activation\",\"text\":\"We plan against constraints (geo\/localization, capacity, approvals, seasonality, competition, macroeconomic factors).\"},\n      {\"id\":\"q18\",\"cat\":\"Planning & Activation\",\"text\":\"Campaign builds capture deployment model, duration, and boundary conditions.\"},\n      {\"id\":\"q19\",\"cat\":\"Measurement\",\"text\":\"We selected metrics across Engagement, Revenue, Data Coverage & Scope, and Reputation.\"},\n      {\"id\":\"q20\",\"cat\":\"Measurement\",\"text\":\"Dashboards and scorecards are documented with audience and cadence.\"},\n      {\"id\":\"q21\",\"cat\":\"Measurement\",\"text\":\"Engagement reports connect to account\/buying-group activity vs. MQL volume.\"},\n      {\"id\":\"q22\",\"cat\":\"Measurement\",\"text\":\"Performance reviews feed optimization priorities at campaign and program levels.\"},\n      {\"id\":\"q23\",\"cat\":\"Measurement\",\"text\":\"We track buying-group coverage and data completeness over time.\"},\n      {\"id\":\"q24\",\"cat\":\"Measurement\",\"text\":\"Internal reporting cadences are consistent and aligned across teams.\"},\n      {\"id\":\"q25\",\"cat\":\"Tools & Vendors\",\"text\":\"Our current stack directly supports strategy (we avoid tool creep).\"},\n      {\"id\":\"q26\",\"cat\":\"Tools & Vendors\",\"text\":\"High-impact tools are identified; underperformers have a retire\/fix plan.\"},\n      {\"id\":\"q27\",\"cat\":\"Tools & Vendors\",\"text\":\"We\u2019ve scoped net-new investments to address specific gaps.\"},\n      {\"id\":\"q28\",\"cat\":\"Tools & Vendors\",\"text\":\"For agencies\/consultancies, we\u2019ve defined objectives, scope, and content asks.\"},\n      {\"id\":\"q29\",\"cat\":\"Tools & Vendors\",\"text\":\"Required expertise (industry\/product, tech implementation\/ongoing) is documented.\"},\n      {\"id\":\"q30\",\"cat\":\"Tools & Vendors\",\"text\":\"Engagement model (strategic vs. execution %) and expected outcomes are set.\"},\n      {\"id\":\"q31\",\"cat\":\"Collaboration\",\"text\":\"Roles are crystal-clear via Charter + RACI + SOPs.\"},\n      {\"id\":\"q32\",\"cat\":\"Collaboration\",\"text\":\"Sales partnership depth matches the deployment model (Enterprise\/Growth\/Deal Acceleration).\"},\n      {\"id\":\"q33\",\"cat\":\"Collaboration\",\"text\":\"The orchestra is aligned (Marketing, Sales, CS, Execs, Product, RevOps\/Analytics).\"},\n      {\"id\":\"q34\",\"cat\":\"Collaboration\",\"text\":\"We have strong executive sponsors and a clear linkage to business OKRs.\"},\n      {\"id\":\"q35\",\"cat\":\"Collaboration\",\"text\":\"Internal comms: updates, hubs, workshops, enablement, progression, performance have cadence.\"},\n      {\"id\":\"q36\",\"cat\":\"Collaboration\",\"text\":\"The flywheel is progressing (Crawl\u2192Walk\u2192Run) with explicit expectations.\"}\n    ];\n    const SECTIONS = [\n    {\"key\":\"Company & Ops\",\"label\":\"Section A: Company Profile & Operational Structure\"},\n    {\"key\":\"GTM Foundations\",\"label\":\"Section B: Go-to-Market Foundations\"},\n    {\"key\":\"Planning & Activation\",\"label\":\"Section C: Campaign Planning & Activation\"},\n    {\"key\":\"Measurement\",\"label\":\"Section D: Measurement & Reporting\"},\n    {\"key\":\"Tools & Vendors\",\"label\":\"Section E: Tools & Vendors\"},\n    {\"key\":\"Collaboration\",\"label\":\"Section F: Cross-Functional Collaboration\"},\n    {\"key\":\"Gate\",\"label\":\"Results\"}\n    ];\n\n    const CATS = SECTIONS.filter(s=> s.key !== 'Gate').map(s=> s.key);\n    const TOTAL_STEPS = SECTIONS.length + 1; \/\/ last step is Results\n\n    \/\/ Try to adopt site font\/color defaults without overriding explicit CSS vars on the host\n    const cs = getComputedStyle(this);\n    if (!this.style.getPropertyValue('--abx-font'))  this.style.setProperty('--abx-font', cs.fontFamily || 'inherit');\n    if (!this.style.getPropertyValue('--abx-fg'))    this.style.setProperty('--abx-fg', cs.color || '#111');\n    if (!this.style.getPropertyValue('--abx-bg'))    this.style.setProperty('--abx-bg', 'transparent');\n    if (!this.style.getPropertyValue('--abx-border'))this.style.setProperty('--abx-border', 'rgba(0,0,0,.12)');\n\n    const css = `\n:host{\n  \/* Theme hooks (override on page if needed) *\/\n  --abx-font: inherit;\n  --abx-font-heading: var(--abx-font);\n  --abx-fg: inherit;\n  --abx-bg: transparent;\n  --abx-border: rgba(0,0,0,.12);\n  --abx-muted: color-mix(in srgb, var(--abx-fg), transparent 50%);\n  --abx-c1: var(--wp--preset--color--primary, #00B3C6);\n  --abx-c2: var(--wp--preset--color--secondary, #F08B8C);\n  --abx-c3: var(--wp--preset--color--tertiary, #FEEB00);\n  --abx-title-color: var(--abx-fg);\n\n  \/* new design tokens *\/\n  --abx-radius: 16px;\n  --abx-radius-sm: 10px;\n  --abx-gap: 12px;\n  --abx-gap-lg: 20px;\n\n  font-family: var(--abx-font);\n  color: var(--abx-fg);\n  display:block;\n}\n\n.wrap{\n  max-width:980px;\n  margin:0 auto;\n  background:var(--abx-bg);\n  color:var(--abx-fg);\n  border:1px solid var(--abx-border);\n  border-radius:var(--abx-radius);\n  box-shadow:0 8px 24px rgba(0,0,0,.04);\n}\n\n.hdr{padding:24px 24px 12px}\n.h2{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}\n.h2 .title{\n  font-family: var(--abx-font-heading);\n  color: var(--abx-title-color);\n  font-weight:800;\n  font-size:24px;\n  letter-spacing:-0.01em;\n  line-height:1.15;\n}\n.badge{border:1px solid var(--abx-border);border-radius:999px;padding:2px 8px;font-size:12px;color:var(--abx-muted)}\n.sub{font-size:14px;color:#1a1a1a;margin-top:8px;white-space:pre-wrap;line-height:1.45}\n\n.bar{\n  height:14px;\n  background:color-mix(in srgb, var(--abx-fg), transparent 92%);\n  border-radius:999px;\n  margin-top:14px;\n  overflow:hidden\n}\n.fill{\n  height:100%;\n  background:linear-gradient(90deg,var(--abx-c1),var(--abx-c2),var(--abx-c3));\n  width:0%;\n  transition:width .35s ease;\n}\n\n.body{padding:16px 16px 24px}\n\n.stephead{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}\n.stepidx{font-size:16px;color:#1a1a1a;font-weight:600}\n.counter{font-size:14px;color:var(--abx-muted)}\n\n.q{\n  border:1px solid var(--abx-border);\n  border-radius:14px;\n  padding:16px;\n  margin:12px 0;\n  background: color-mix(in srgb, var(--abx-bg), white 8%);\n}\n.q .cat{\n  font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--abx-muted);margin-bottom:6px\n}\n.q .txt{\n  font-size:15px;      \/* slightly larger for readability *\/\n  line-height:1.5;\n}\n\n.scale{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}\n.scale button{\n  height:36px;width:36px;\n  border-radius:999px;\n  border:1px solid var(--abx-border);\n  background:transparent;\n  font-size:14px;\n  cursor:pointer;\n  color:var(--abx-fg);\n  transition:transform .08s ease, background .15s ease, border-color .15s ease;\n}\n.scale button:hover{background:color-mix(in srgb, var(--abx-fg), transparent 92%)}\n.scale button:active{transform:scale(.96)}\n.scale button.sel{\n  border-color:var(--abx-c1);\n  background:color-mix(in srgb, var(--abx-c1), transparent 88%);\n}\n\n.hint{font-size:13px;color:#1a1a1a;margin-left:2px}\n\n.panel{\n  border:1px solid var(--abx-border);\n  border-radius:14px;\n  padding:18px;\n  margin-top:14px;\n  background:color-mix(in srgb, var(--abx-bg), white 6%);\n}\n\n.grid{display:grid;grid-template-columns:1fr;gap:12px}\n@media(min-width:720px){\n  .grid3{grid-template-columns:1fr 1fr 1fr}\n  .grid2{grid-template-columns:1fr 1fr}\n}\n\n.kpi .big{font-size:40px;font-weight:800;line-height:1}\n.kpi .band{\n  display:inline-block;\n  border-radius:999px;\n  padding:10px 14px;\n  font-size:18px;\n  border:1px solid var(--abx-border);\n  margin-top:14px;\n  background:#FEEB00;\n}\n\n.cats{display:grid;grid-template-columns:1fr;gap:12px}\n@media(min-width:720px){ .cats{grid-template-columns:1fr 1fr 1fr} }\n\n.catbox{\n  border:1px solid var(--abx-border);\n  border-radius:12px;\n  padding:12px;\n  background:color-mix(in srgb, var(--abx-bg), white 4%);\n}\n.catbox .name{font-size:14px;color:#1a1a1a;margin-bottom:4px}\n.catbox .score{font-weight:700;font-size:16px}\n\n.recs ul{margin:8px 0 0 18px}\n.recs li{margin:6px 0;line-height:1.5}\n\n.actions{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-top:28px}\n.btn{\n  border-radius:var(--abx-radius-sm);\n  border:1px solid var(--abx-border);\n  padding:10px 14px;\n  font-weight:600;\n  cursor:pointer;\n  background:transparent;\n  color:var(--abx-fg);\n  font-size:14px;\n  transition:background .15s ease, transform .08s ease, box-shadow .15s ease;\n}\n.btn:hover{background:color-mix(in srgb, var(--abx-fg), transparent 94%)}\n.btn:active{transform:translateY(1px)}\n.btn:focus-visible{outline:3px solid color-mix(in srgb, var(--abx-c1), transparent 60%);outline-offset:2px}\n\n.btn.primary{\n  background:linear-gradient(90deg,var(--abx-c1),var(--abx-c2));\n  font-size:18px;\n  font-weight:700;\n  color:#ffffff;\n  border:none;\n  box-shadow:0 6px 14px rgba(0,0,0,.08);\n}\n.btn.primary:hover{linear-gradient(90deg,var(--abx-c1),var(--abx-c3));}\n\n.note{font-size:12px;color:var(--abx-muted);text-align:center;margin-top:10px}\n\n.sep{margin:12px 0 8px;font-weight:800;color:var(--abx-fg)}\n\n.hidden{display:none !important}\n.disabled{opacity:.55; pointer-events:none}\n\n\/* Respect reduced motion *\/\n@media (prefers-reduced-motion: reduce){\n  .fill, .btn, .scale button{transition:none}\n}\n\n\/* Results \u2014 grouped recommendations *\/\n.results .recs { margin-top: 6px; }\n.rec-group { list-style: none; margin: 14px 0 0 0; padding: 0; }\n.rec-heading {\n  font-size: 16px;\n  font-weight: 700;\n  letter-spacing: .01em;\n  margin: 6px 0 4px;\n  color: var(--abx-fg);\n}\n.rec-items { margin: 6px 0 0 1.1rem; padding: 0; }\n.rec-items li { margin: 6px 0; line-height: 1.5; }\n`;\n    const el = document.createElement('div');\n    el.className = 'wrap';\n    el.setAttribute('part','container');\n    el.innerHTML = `\n      <div class=\"hdr\" part=\"header\">\n        <div class=\"h2\"><div class=\"title\" part=\"title\">How to answer<\/div><\/div>\n        <div class=\"sub\">Use a 0\u20134 scale for each item:\\n0 = Not at all, 1 = Early, 2 = In progress, 3 = Mostly, 4 = Fully in place<\/div>\n        <div class=\"bar\" part=\"progress\"><div class=\"fill\"><\/div><\/div>\n      <\/div>\n      <div class=\"body\">\n        <div class=\"stephead\">\n          <div class=\"stepidx\">Step <span class=\"stepNum\">1<\/span> of <span class=\"stepTotal\">` + (SECTIONS.length + 1) + `<\/span>: <h3 class=\"stepName\"><\/h3><\/div>\n          <div class=\"counter\"><span class=\"answered\">0<\/span>\/6 answered<\/div>\n        <\/div>\n\n        <div class=\"qs\"><\/div>\n        <div class=\"actions nav-actions\">\n          <button class=\"btn back disabled\" part=\"button\">\u2190 Back<\/button>\n          <button class=\"btn next disabled\" part=\"button\">Next \u2192<\/button>\n        <\/div>\n\n        <div class=\"panel results hidden\" part=\"results\">\n          <div class=\"kpi\">\n            <div class=\"sep\">Overall<\/div>\n            <div class=\"grid grid2\">\n              <div>\n                <div class=\"big\"><span class=\"overall\">0<\/span><span style=\"color:var(--abx-muted);font-size:20px\">\/100<\/span><\/div>\n                <div class=\"band overall-band\">Crawl<\/div>\n              <\/div>\n              <div>\n                <div class=\"hint\">Maturity per section (0\u201324 each)<\/div>\n                <div class=\"grid grid3 cats\"><\/div>\n              <\/div>\n            <\/div>\n            <div class=\"sep\">Recommendations<\/div>\n            <div class=\"recs\">\n              <ul class=\"rec-list\"><\/ul>\n            <\/div>\n          <\/div>\n          <div class=\"actions\">\n            <button class=\"btn copy\" part=\"button\">Copy summary<\/button>\n            <a class=\"btn primary\" id=\"book\" part=\"button\" href=\"` + bookUrl + `\">Book a strategy call<\/a>\n          <\/div>\n        <\/div>\n\n        <div class=\"note\">Complete each Section to unlock the Next button.<\/div>\n      <\/div>\n    `;\n    const style = document.createElement('style'); style.textContent = css;\n    root.append(style, el);\n\n    \/\/ State\n    const answers = {};\n    let step = 0; \/\/ 0..SECTIONS.length (where last index is Results)\n    const fill = el.querySelector('.fill');\n    const qsWrap = el.querySelector('.qs');\n    const stepNumEl = el.querySelector('.stepNum');\n    const stepNameEl = el.querySelector('.stepName');\n    const answeredEl = el.querySelector('.answered');\n    const backBtn = el.querySelector('.back');\n    const nextBtn = el.querySelector('.next');\n    const navActions = el.querySelector('.nav-actions');\n\n    \/\/ Results elements\n    const resultsPanel = el.querySelector('.results');\n    const overallEl = el.querySelector('.overall');\n    const overallBandEl = el.querySelector('.overall-band');\n    const catsWrap = el.querySelector('.cats');\n    const recList = el.querySelector('.rec-list');\n\n    \/\/ Scroll helper\n    function scrollToTop() {\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    }\n\n    function setBtnEnabled(btn, enabled){\n      btn.classList.toggle('disabled', !enabled);\n      if (enabled) { btn.removeAttribute('disabled'); } else { btn.setAttribute('disabled', ''); }\n    }\n\n    function renderStep(){\n      const isResults = (step === SECTIONS.length);\n      stepNumEl.textContent = String(step+1);\n      stepNameEl.textContent = isResults ? 'Results' : SECTIONS[step].label;\n\n      setBtnEnabled(backBtn, step !== 0);\n      if (isResults){\n       setBtnEnabled(nextBtn, true);\n        nextBtn.textContent = 'Done';\n      } else {\n        nextBtn.textContent = (step === SECTIONS.length-1) ? 'See results \u2192' : 'Next \u2192';\n      }\n\n      if (isResults){\n  qsWrap.innerHTML = '';\n  navActions.classList.add('hidden');\n  el.querySelector('.counter').classList.add('hidden');\n  resultsPanel.classList.remove('hidden');\n  showResults();\n\n} else if (SECTIONS[step].key === 'Gate'){\n  resultsPanel.classList.add('hidden');\n  navActions.classList.remove('hidden');\n  el.querySelector('.counter').classList.add('hidden');\n\n  qsWrap.innerHTML = `\n    <div class=\"panel\">\n      <button class=\"btn\" id=\"openGateForm\">UNLOCK YOUR ABM MATURITY ASSESSMENT RESULTS<\/button>\n    <\/div>\n  `;\n\n  \/\/ Disable Next on Gate; CF7 submit will advance to Results\n  nextBtn.textContent = 'Next';\n  setBtnEnabled(nextBtn, false);\n\n  const btnOpen = el.querySelector('#openGateForm');\n  if (btnOpen){\n    btnOpen.addEventListener('click', ()=>{\n      const anchor = document.querySelector('#abx-gate-form');\n      if (anchor){ anchor.scrollIntoView({ behavior:'smooth', block:'start' }); }\n    });\n  }\n\n} else {\n  resultsPanel.classList.add('hidden');\n  navActions.classList.remove('hidden');\n  el.querySelector('.counter').classList.remove('hidden');\n\n  const s = SECTIONS[step];\n  qsWrap.innerHTML = '';\n  QUESTIONS.filter(q=>q.cat===s.key).forEach(q=>{\n    const qEl = document.createElement('div');\n    qEl.className = 'q';\n    qEl.setAttribute('part','question');\n    qEl.innerHTML = `\n      <div class=\"cat\">${s.key}<\/div>\n      <div class=\"txt\">${q.text}<\/div>\n      <div class=\"scale\">\n        ${[0,1,2,3,4].map(v=>`<button data-id=\"${q.id}\" data-v=\"${v}\">${v}<\/button>`).join('')}\n        <span class=\"hint\">0 = Not at all \u00b7 4 = Fully in place<\/span>\n      <\/div>`;\n    qsWrap.appendChild(qEl);\n    const val = answers[q.id];\n    if (typeof val === 'number'){\n      qEl.querySelectorAll('button').forEach(b=>{\n        if (parseInt(b.getAttribute('data-v'))===val) b.classList.add('sel');\n      });\n    }\n  });\n  updateCounter();\n}\n      updateProgressBar();\n      scrollToTop();\n    }\n\n    function updateCounter(){\n  if (step === SECTIONS.length) return; \/\/ Results step\n\n  const sKey = SECTIONS[step].key;\n\n  \/\/ Never auto-enable Next on the Gate step\n  if (sKey === 'Gate') {\n    setBtnEnabled(nextBtn, false);\n    return;\n  }\n\n  const ids = QUESTIONS.filter(q => q.cat === sKey).map(q => q.id);\n  const done = ids.reduce((acc, id) => acc + (answers[id] !== undefined ? 1 : 0), 0);\n\n  answeredEl.textContent = String(done);\n  setBtnEnabled(nextBtn, done >= ids.length); \/\/ enforce completion\n}\n\n\n    function updateProgressBar(){\n      const totalQ = QUESTIONS.length;\n      const answered = Object.keys(answers).length;\n      fill.style.width = Math.round((answered\/totalQ)*100)+'%';\n    }\n\n    function bandFromSectionScore(s){ \/\/ s: 0..24\n      if (s >= 17) return 'Run';\n      if (s >= 9) return 'Walk';\n      return 'Crawl';\n    }\n        function computeResults(){\n      const byCat = Object.fromEntries(CATS.map(c=>[c,{sum:0}]));\n      QUESTIONS.forEach(q=>{ byCat[q.cat].sum += (answers[q.id] ?? 0); });\n      const section = Object.fromEntries(CATS.map(c=>[c, Math.round(byCat[c].sum)]));\n      const percent = Math.round(CATS.reduce((acc,c)=> acc + (section[c]\/24),0) \/ CATS.length * 100);\n      return { section, percent };\n    }\n\n    \/\/ recommendations dictionary (must be inside connectedCallback)\n    const REC_MAP = {\n      \"Company & Ops\": [\n        \"Stand up a simple ABX Charter + RACI + 90-day operating cadence. Establish governance early. Create an ABX Charter that spells out vision, principles, and goals, and connect it to a simple RACI (Responsible, Accountable, Consulted, Informed). Reinforce it with a 90-day operating cadence to remove ambiguity and keep the program moving.\",\n        \"Create a lightweight Center of Excellence hub with templates and examples. Even if it starts as a shared folder or Notion hub, centralizing templates, messaging, and playbooks prevents duplication and accelerates adoption across teams. A small CoE creates outsized efficiency gains.\",\n        \"Adopt a test\u2192analyze\u2192adopt\/abandon loop and publish outcomes monthly. Run regular experiments, track outcomes, and share what you adopt or abandon. Publishing failures as well as wins builds credibility and shows that the program is designed to improve continuously.\"\n      ],\n      \"GTM Foundations\": [\n        \"Refresh ICP & segmentation; align TAL criteria to fit + intent + relationships. Align the target account list with updated firmographics, intent signals, and relationship data. This ensures the list represents real growth opportunities, not just historical assumptions.\",\n        \"Tie program objectives to revenue OKRs with a shared success doc. Create a simple shared document showing how ABX program goals ladder up to company OKRs. When leadership sees clear linkage, it\u2019s easier to secure ongoing investment.\",\n        \"Select deployment models per segment (Enterprise\/Growth\/Deal Accel) with entry\/exit rules.\"\n      ],\n      \"Planning & Activation\": [\n        \"Finalize campaign objectives and boundary conditions before build. Every campaign should start with explicit goals and clear \u201cboundary conditions\u201d (budget, timeline, audiences). This reduces rework and improves collaboration with Sales.\",\n        \"Run a database audit: coverage, quality, dedupe, enrichment rules. Review account and contact coverage, deduplication, and enrichment processes. High-quality data not only improves campaign performance but also builds trust in ABX reporting.\",\n        \"Templatize 1:few playbooks and map content to stages + personas. Create reusable plays mapped to personas and buying stages. Having a repeatable structure allows your team to move faster without reinventing the wheel for each campaign.\"\n      ],\n      \"Measurement\": [\n        \"Adopt the four-pillar metric set. Track Engagement, Revenue Impact, Data Coverage & Scope, and Reputation. Balancing these avoids the trap of only chasing lead volume.\",\n        \"Document dashboards: audience, cadence, and decisions they inform. Define who uses them, how often, and what decisions they should inform. When dashboards are tied to action, they become business tools, not just reports.\",\n        \"Review performance monthly and prioritize 2\u20133 optimization actions. Hold a monthly review where you pick 2\u20133 priority optimizations. This habit builds confidence that the program is agile and learning.\"\n      ],\n      \"Tools & Vendors\": [\n        \"Map tools to strategy; flag underperformers for fix\/retire decisions. Create a simple matrix of each platform against the strategy it supports. If a tool doesn\u2019t clearly support strategy, mark it for \u201cfix or retire.\",\n        \"Scope net-new tools to explicit gaps with success criteria. When exploring new vendors, define the explicit gap it fills and the success criteria you expect. This avoids shiny-object syndrome.\",\n        \"Document partner scope, expertise requirements, and expected outcomes. For agencies or consultants, write down their role, expected outcomes, and required expertise (industry, technical, or executional). Clear expectations prevent frustration later.\"\n      ],\n      \"Collaboration\": [\n        \"Deepen Sales partnership to match model; agree SLAs and plays. Align depth of Sales involvement with the ABM model in play\u2014Enterprise, Growth, or Deal Acceleration. Agree on SLAs and shared plays so collaboration isn\u2019t left to chance.\",\n        \"Secure\/renew exec sponsorship and link to OKRs.Tie the program to company OKRs and keep sponsors updated on progress. A visible champion helps unblock resources and sustain momentum.\",\n        \"Publish an internal comms cadence: updates, enablement, progression, performance.Plan recurring updates, enablement sessions, and progress reviews. Making communication predictable builds trust and keeps all functions aligned.\"\n      ]\n    };\n\n    function showResults(){\n      const {section, percent} = computeResults();\n      overallEl.textContent = String(percent);\n      overallBandEl.textContent = bandFromSectionScore((percent\/100)*24);\n      catsWrap.innerHTML = CATS.map(c=>`\n        <div class=\"catbox\">\n          <div class=\"name\">`+c+` <span style=\"font-weight:600\">`+bandFromSectionScore(section[c])+`<\/span><\/div>\n          <div class=\"score\">`+section[c]+`<span style=\"color:var(--abx-muted);font-size:12px\">\/24<\/span><\/div>\n        <\/div>`).join('');\n\n      \/\/ Grouped recommendations: weakest 2\u20133 sections, 2\u20133 items each\n      const weakest = Object.entries(section)\n        .sort((a,b)=>a[1]-b[1])\n        .slice(0,3)\n        .map(([c])=>c);\n\n      recList.innerHTML = weakest.map(cat=>{\n        const items = (REC_MAP[cat] || []).slice(0,3)\n          .map(t=>`<li>${t}<\/li>`).join('');\n        return `\n          <li class=\"rec-group\">\n            <div class=\"rec-heading\">${cat}<\/div>\n            <ul class=\"rec-items\">${items}<\/ul>\n          <\/li>`;\n      }).join('');\n    }\n\n    \/\/ Interactions\n    el.addEventListener('click', (e)=>{\n      const btn = e.target.closest('button');\n      if (!btn) return;\n      const id = btn.getAttribute('data-id');\n      const v = btn.getAttribute('data-v');\n      if (id && v!=null){\n        answers[id] = parseInt(v,10);\n        const parent = btn.parentElement;\n        parent.querySelectorAll('button').forEach(b=>b.classList.remove('sel'));\n        btn.classList.add('sel');\n        updateCounter();\n        updateProgressBar();\n      }\n    });\n\n    backBtn.addEventListener('click', ()=>{\n      if (step>0){ step--; renderStep(); }\n    });\n    nextBtn.addEventListener('click', ()=>{\n      if (SECTIONS[step] && SECTIONS[step].key === 'Gate'){\n        return; \/\/ CF7 submit will advance\n      }\n      if (step < SECTIONS.length){\n        step++;\n        renderStep();\n      } else {\n        scrollToTop();\n      }\n    });\n\n    \/\/ Copy summary\n    el.querySelector('.copy').addEventListener('click', async ()=>{\n      const {section, percent} = computeResults();\n      const band = bandFromSectionScore((percent\/100)*24);\n      const bandSec = (v)=> v>=17?'Run':v>=9?'Walk':'Crawl';\n      const lines = [\"ABX Maturity (ABGTM-aligned)\"];\n      lines.push(`Overall: ${percent}\/100 (${band})`);\n      Object.entries(section).forEach(([k,v])=> lines.push(`${k}: ${v}\/24 (${bandSec(v)})`));\n      await navigator.clipboard.writeText(lines.join('\\n'));\n      const btn = el.querySelector('.copy'); btn.textContent = 'Copied!'; setTimeout(()=>btn.textContent='Copy summary',1200);\n    });\n\n    \/\/ Book a call (optional POST)\n    el.querySelector('#book').addEventListener('click', async ()=>{\n      if (webhook){\n        try {\n          const {section, percent} = computeResults();\n          const payload = { answers, overall: percent, sections: section, ts:new Date().toISOString(), source:'abx-assessment-abgtm' };\n          await fetch(webhook, { method:'POST', headers:{'Content-Type':'application\/json'}, body: JSON.stringify(payload) });\n        } catch(e) { \/* ignore *\/ }\n      }\n    });\n\n    \/\/ Allow CF7 to jump to results\n    this._gotoResults = ()=>{ step = SECTIONS.length; renderStep(); };\n\n    \/\/ init\n    renderStep();\n  } \/\/ end connectedCallback()\n} \/\/ end class\n  if (!customElements.get('abx-assessment')) {\n  customElements.define('abx-assessment', AbxAssessment);\n}\n<\/script>\n<script>\ndocument.addEventListener('wpcf7mailsent', function(){\n  document.querySelectorAll('abx-assessment').forEach(el => {\n    if (typeof el._gotoResults === 'function') el._gotoResults();\n  });\n}, false);\n<\/script>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:380px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-size:31px\">Get your ABM Maturity Assessment results<\/h2>\n\n\n\n<div class=\"nv-cv-m wp-block-cover\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-nv-site-bg-background-color has-background-dim-100 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained\">\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center abx-form-outer is-layout-flow wp-block-column-is-layout-flow\" id=\"abx-gate-form\">\n<section id=\"abx-gate-form\" class=\"abx-form-outer\">\n  \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f1928-o1\" lang=\"en-CA\" dir=\"ltr\" data-wpcf7-id=\"1928\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/fr\/wp-json\/wp\/v2\/pages\/1854#wpcf7-f1928-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"1928\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_CA\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f1928-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<p><label>Name <span class=\"wpcf7-form-control-wrap\" data-name=\"name1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"name1\" \/><\/span><br \/>\n<\/label><br \/>\n<label> Last name <span class=\"wpcf7-form-control-wrap\" data-name=\"surname\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"surname\" \/><\/span><br \/>\n<\/label>\n<\/p>\n<p><label>LinkedIn Profile URL<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"hs_linkedin_url\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-url wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-url\" aria-required=\"true\" aria-invalid=\"false\" value=\"https:\/\/www.linkedin.com\/in\/yourname\" type=\"url\" name=\"hs_linkedin_url\" \/><\/span><br \/>\n<\/label>\n<\/p>\n<p><label>Corporate email<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" value=\"your.email@company.com\" type=\"email\" name=\"email\" \/><\/span><br \/>\n<\/label>\n<\/p>\n<p><label>Company<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"company\" \/><\/span><br \/>\n<\/label>\n<\/p>\n<div class=\"abx-disclaimer\">\n\t<p><label class=\"abx-consent\"><br \/>\n<input type=\"checkbox\" name=\"consent\" value=\"1\" aria-required=\"true\" required \/> I agree to the Terms & Conditions. By submitting this form, you agree to our <a href=\"\/terms\/\" target=\"_blank\">Terms & Conditions<\/a> and <a href=\"\/privacy\/\" target=\"_blank\">Privacy Policy<\/a>.The information you provide will be used to generate your ABX maturity results and may also be used for follow-up communications, including personalized LinkedIn advertising.<br \/>\n<\/label>\n\t<\/p>\n<\/div>\n<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"See results\" \/>\n<\/p><p style=\"display: none !important;\" class=\"akismet-fields-container\" data-prefix=\"_wpcf7_ak_\"><label>&#916;<textarea name=\"_wpcf7_ak_hp_textarea\" cols=\"45\" rows=\"8\" maxlength=\"100\"><\/textarea><\/label><input type=\"hidden\" id=\"ak_js_1\" name=\"_wpcf7_ak_js\" value=\"235\"\/><script>\ndocument.getElementById( \"ak_js_1\" ).setAttribute( \"value\", ( new Date() ).getTime() );\n<\/script>\n<\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n\n<\/section>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div class=\"nv-cv-m wp-block-wpseopress-faq-block-v2 is-layout-flow wp-block-wpseopress-faq-block-v2-is-layout-flow\">\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary><\/summary>\n<p><\/p>\n<\/details>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"url\":\"https:\/\/abxstack.com\/abm-maturity-assessment\/\",\"@id\":\"https:\/\/abxstack.com\/abm-maturity-assessment\/\",\"mainEntity\":[{\"@type\":\"Question\",\"url\":\"https:\/\/abxstack.com\/abm-maturity-assessment\/#\",\"name\":\"\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\"}}]}<\/script><\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Organization\",\n      \"@id\": \"https:\/\/abxstack.com\/#organization\",\n      \"name\": \"ABX Stack\",\n      \"url\": \"https:\/\/abxstack.com\/\",\n      \"logo\": {\n        \"@type\": \"ImageObject\",\n        \"url\": \"https:\/\/abxstack.com\/wp-content\/uploads\/2025\/08\/Logo-ABX-Stack-e26f22.svg\",\n        \"width\": 600,\n        \"height\": 200\n      },\n      \"description\": \"ABX Stack is an independent consulting practice that helps B2B companies stop chasing volume and start acting on real buyer signals. We identify where revenue is leaking, focus on the right accounts, and align sales and marketing around a signal-driven go-to-market strategy.\",\n      \"sameAs\": [\n        \"https:\/\/www.linkedin.com\/company\/abx-stack\/\"\n      ],\n      \"contactPoint\": [\n        {\n          \"@type\": \"ContactPoint\",\n          \"contactType\": \"sales\",\n          \"email\": \"info@abxstack.com\",\n          \"areaServed\": \"Global\",\n          \"availableLanguage\": [\"en\"]\n        }\n      ]\n    },\n    {\n      \"@type\": \"Person\",\n      \"@id\": \"https:\/\/abxstack.com\/#person\",\n      \"name\": \"Amanda Heredia\",\n      \"jobTitle\": \"Founder, ABX Stack\",\n      \"worksFor\": { \"@id\": \"https:\/\/abxstack.com\/#organization\" },\n      \"url\": \"https:\/\/abxstack.com\/about\/\",\n      \"sameAs\": [\n        \"https:\/\/www.linkedin.com\/in\/amandaheredia\/\"\n      ]\n    },\n    {\n      \"@type\": \"WebSite\",\n      \"@id\": \"https:\/\/abxstack.com\/#website\",\n      \"url\": \"https:\/\/abxstack.com\/\",\n      \"name\": \"ABX Stack\",\n      \"publisher\": { \"@id\": \"https:\/\/abxstack.com\/#organization\" },\n      \"inLanguage\": \"en\",\n      \"potentialAction\": {\n        \"@type\": \"SearchAction\",\n        \"target\": \"https:\/\/abxstack.com\/?s={search_term_string}\",\n        \"query-input\": \"required name=search_term_string\"\n      }\n    },\n    {\n      \"@type\": \"Article\",\n      \"@id\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/#article\",\n      \"headline\": \"ABM Maturity Assessment\",\n      \"description\": \"How ABX Stack evaluates ABM maturity across strategy, signals, orchestration, and measurement to identify readiness, gaps, and the right next steps in account-based motion.\",\n      \"author\": { \"@id\": \"https:\/\/abxstack.com\/#person\" },\n      \"publisher\": { \"@id\": \"https:\/\/abxstack.com\/#organization\" },\n      \"inLanguage\": \"en\",\n      \"mainEntityOfPage\": {\n        \"@type\": \"WebPage\",\n        \"@id\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/\"\n      }\n    },\n    {\n      \"@type\": \"WebPage\",\n      \"@id\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/#webpage\",\n      \"url\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/\",\n      \"name\": \"ABM Maturity Assessment \u2014 ABX Stack\",\n      \"isPartOf\": { \"@id\": \"https:\/\/abxstack.com\/#website\" },\n      \"about\": { \"@id\": \"https:\/\/abxstack.com\/#organization\" },\n      \"author\": { \"@id\": \"https:\/\/abxstack.com\/#person\" },\n      \"inLanguage\": \"en\",\n      \"description\": \"ABM maturity assessment framework \u2014 explain the criteria to evaluate where an account-based motion stands and what needs to improve across strategy, segmentation, playbooks, execution, and metrics.\",\n      \"breadcrumb\": { \"@id\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/#breadcrumb\" },\n      \"mainEntity\": { \"@id\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/#article\" }\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"@id\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/#breadcrumb\",\n      \"itemListElement\": [\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 1,\n          \"name\": \"Home\",\n          \"item\": \"https:\/\/abxstack.com\/\"\n        },\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 2,\n          \"name\": \"Frameworks\",\n          \"item\": \"https:\/\/abxstack.com\/#frameworks\"\n        },\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 3,\n          \"name\": \"ABM Maturity Assessment\",\n          \"item\": \"https:\/\/abxstack.com\/abm-maturity-assessment\/\"\n        }\n      ]\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Obtenez vos r\u00e9sultats d&#039;\u00e9valuation de maturit\u00e9 ABM<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_robots_primary_cat":"0","_seopress_titles_title":"ABM Maturity Assessment | ABX Stack","_seopress_titles_desc":"Grade your Account-Based GTM in minutes. Get our ABM Maturity Assessment and discover your score and your gaps.","_seopress_robots_index":"","content-type":"","neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"class_list":["post-1854","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/pages\/1854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/comments?post=1854"}],"version-history":[{"count":123,"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/pages\/1854\/revisions"}],"predecessor-version":[{"id":2592,"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/pages\/1854\/revisions\/2592"}],"wp:attachment":[{"href":"https:\/\/abxstack.com\/fr\/wp-json\/wp\/v2\/media?parent=1854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}