Skip to content
https://app.exonore.fr

Accessibility

· 24 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.
SCORE
76
GRADE
C
FIX
6
REVIEW
6
PASS
12
INFO
0
Checks
24
12 PASS 6 REVIEW 6 FIX
D
Form Accessibility
Action
4 of 204 controls have issues
FIX
4 of 204 controls have issues
Critical::
3 control(s) without accessible label
Form controls need a <label>, aria-label, or aria-labelledby for screen readers.
Got: <input type="text" id="chatbotShareLink">; <input type="file" id="productsCsvFileInput">; <select id="invoiceContactSelect">
Warning::
1 control(s) rely on placeholder only
Placeholder text disappears on focus and is not a reliable label.
Got: <input type="text" id="otpCode">
Info::
200 control(s) properly labeled
204 controls
200 labeled
1 placeholder only
3 unlabeled
ControlTypeLabelMethod
#loginEmailemailEmailaria-label
#loginPasswordpasswordMot de passearia-label
#signupEmailemailEmailaria-label
#signupPasswordpasswordMot de passearia-label
#newPasswordInputpasswordNouveau mot de passearia-label
#newPasswordConfirmpasswordConfirmer le mot de passearia-label
#globalSearchsearchRecherche globalearia-label
#headerCurrentPasswordInputpasswordMot de passe actuelfor/id
#headerNewPasswordInputpasswordNouveau mot de passefor/id
#filterProspectStatusselectFiltrer par statutaria-label
#filterProspectScoreselectFiltrer par prioritéaria-label
#filterProspectSourceselectFiltrer par sourcearia-label
#filterProspectDatedateFiltrer par date de créationaria-label
#filterClientScoreselectFiltrer par prioritéaria-label
#filterClientSourceselectFiltrer par sourcearia-label
#invoiceFilterStatusselectFiltrer par statutaria-label
#frFilefileFichier (5 Mo maximum)for/id
#frFournisseurtextFournisseurfor/id
#frSirentextSIREN ou SIRET (optionnel)for/id
#frNumerotextN° de facturefor/id
#frDatedateDate de facturefor/id
#frEcheancedateÉchéance (optionnel)for/id
#frTypeselectTypefor/id
#frHTnumberMontant HT (optionnel)for/id
#frTTCnumberMontant TTCfor/id
#frCategorietextCatégorie (optionnel)for/id
#frFiltreselectAfficherfor/id
#appointmentContactIdselectClientfor/id
#appointmentDatedateDate sélectionnéefor/id
#appointmentTimeselectHeurefor/id
#appointmentDurationselectDuréefor/id
#appointmentNotestextareaObjet / Notesfor/id
#aiInputtextPoser une question à l'assistant IAaria-label
#userFirstNametextPrénom affichéfor/id
#alertEmailemailEmail pour les alertes et le résumé quotidienfor/id
#dailySummarycheckboxnone
#relanceDelaynumberDélai de relance factures impayées (jours)for/id
#tauxPenaliteRetardnumberTaux des pénalités de retard (% par an)for/id
#currentPasswordInputpasswordMot de passe actuelfor/id
#newPasswordInputSettingspasswordNouveau mot de passefor/id
#companyNametextNom de l'entreprise *for/id
#companyLegalselectForme juridiquefor/id
#companyAddresstextAdresse complètefor/id
#companySirettextNuméro SIRET *for/id
#companyTvaNumtextN° TVA intracommunautairefor/id
#companyCapitalnumberCapital social (€)for/id
#companyTvaRateselectTaux TVA par défaut (%)for/id
#tvaRegimeselectRégime de TVAfor/id
#urssafPeriodicityselectRappel de déclaration URSSAFfor/id
#companyIbantextIBANfor/id
#companyBictextBIC / SWIFTfor/id
#seuilFranchiseTvanumberSeuil de franchise en base de TVA (€) ?for/id
#mentionsLegalestextareaMentions légales personnalisées (pied de facture) ?for/id
#cgvUrltextConditions générales de vente (CGV)for/id
#bankAutoMatchcheckboxnone
#paAutoSendcheckboxnone
#pennylaneAutoExportcheckboxnone
#monthlyExportEnabledcheckboxnone
#accountantEmailemailEmail de votre comptablefor/id
#stripeApiKeypasswordClé secrète Stripefor/id
#stripeWebhookSecretpasswordSecret de signature du webhook Stripefor/id
#stripePublicKeytextClé publique Stripefor/id
#stripeAutoSendcheckboxnone
#resendApiKeypasswordClé API Resendfor/id
#resendFromEmailemailEmail expéditeurfor/id
#smtpEmailemailAdresse email professionnellefor/id
#smtpPasswordpasswordMot de passe de cette boîte mailfor/id
#smtpHosttextServeur SMTP sortantfor/id
#smtpPorttextPortfor/id
#smtpSecureselectChiffrementfor/id
#yousignApiKeypasswordClé API YouSignfor/id
#pennylaneApiKeypasswordClé API Pennylane ?for/id
#apiKeyNameInputtextNom de la clé (pour vous y retrouver)for/id
#paNametextNom de votre PAfor/id
#paEndpointurlEndpoint API de la PA ?for/id
#paApiKeypasswordClé API / Token de la PAfor/id
#inviteEmailemailEmail à inviteraria-label
#inviteRoleselectRôle du collaborateuraria-label
#inviteAccessUntildateAccès jusqu'au (facultatif)none
#seatQuantityInputnumberNombre de sièges supplémentairesaria-label
#chatbotAllowedDomainstextDomaines autorisés à intégrer le chatbot (recommandé)for/id
#chatbotAutoSendDocscheckboxnone
#chatbotAskCountrycheckboxnone
#chatbotWelcomeMessagetextMessage d'accueil personnalisé (laisser vide pour le texte par défaut)for/id
#chatbotActivecheckboxnone
#chatbotLogoUrlurlURL du logo (affiché dans l'en-tête du chatbot)for/id
#chatbotBrandColorcolorCouleur principalefor/id
#chatbotAskIntenttextAccueil (par défaut : « Bonjour, comment pourrais-je vous aider ? »)for/id
#chatbotAskProducttextChoix du produit (par défaut : « De quoi avez-vous besoin ? »)for/id
#chatbotAskEmailtextEmail (par défaut : « Votre email ? »)for/id
#chatbotAskPhonetextTéléphone (par défaut : « Votre téléphone ? »)for/id
#chatbotAskNametextNom (par défaut : « Votre nom ? (optionnel) »)for/id
#chatbotAskCompanytextEntreprise (par défaut : « Votre entreprise ? (optionnel) »)for/id
#chatbotAskQuestiontextQuestion libre (par défaut : « Posez votre question »)for/id
#chatbotConfirmEmailSubjecttextObjet (laisser vide pour le texte par défaut)for/id
#chatbotConfirmEmailBodytextareaMessage (laisser vide pour le texte par défaut) — {{nom}} et {{entreprise}} sont remplacés automatiquementfor/id
#rgpdResponsabletextResponsable du traitementfor/id
#rgpdDpoNomtextDélégué à la protection des données (DPO) ?for/id
#rgpdConservationnumberDurée de conservation des données clients/prospects (mois)for/id
#rgpdAutoPurgecheckboxnone
#stNomtextNom *for/id
#stEntreprisetextEntreprisefor/id
#stSirettextSIRETfor/id
#stEmailemailEmailfor/id
#stTelephonetelTéléphonefor/id
#stRibtextRIB / IBANfor/id
#stTarifTypeselectType de tariffor/id
#stTarifMontantnumberMontant du tarif (€ HT)for/id
#stDateAttestationdateDate de l'attestation de vigilancefor/id
#stCodeVerifiecheckboxnone
#stKbisDatedateDate de vérification du Kbisfor/id
#stListeSalariesEtrangerscheckboxnone
#stListeSalariesEtrangersDatedateDate de cette vérificationfor/id
#stNotestextareaNotesfor/id
#missionDescriptiontextareaDescription *for/id
#missionLieutextLieufor/id
#missionMontantnumberMontant convenu (€ HT)for/id
#missionDateDebutdateDate de débutfor/id
#missionDateFindateDate de fin (optionnel)for/id
#missionTvaselectTVA facturée par le sous-traitantfor/id
#missionStatutselectStatutfor/id
#contactNametextNom complet *for/id
#contactCompanytextEntreprisefor/id
#contactSirettextSIRET (optionnel)for/id
#contactEmailemailEmailfor/id
#contactPhonetelTéléphonefor/id
#contactActivitytextActivité / Secteurfor/id
#contactCitytextVillefor/id
#contactSourceselectSourcefor/id
#contactRelationshipTypeselectTypefor/id
#contactScoreselectPrioritéfor/id
#contactStatusselectStatutfor/id
#contactValuenumberValeur estimée (€ HT)for/id
#contactLinkedinurlProfil LinkedInfor/id
#contactAddresstextAdressefor/id
#contactCountryselectPaysfor/id
#contactCustomerTypeselectType de clientfor/id
#contactVattextN° de TVA intracommunautaire (clients professionnels de l'UE)for/id
#contactNotestextareaNotesfor/id
#detailNametextNom completfor/id
#detailCompanytextEntreprisefor/id
#detailEmailemailEmailfor/id
#detailPhonetelTéléphonefor/id
#detailActivitytextActivitéfor/id
#detailCitytextVillefor/id
#detailCountryselectPaysfor/id
#detailCustomerTypeselectType de clientfor/id
#detailVattextN° de TVA intracommunautairefor/id
#detailScoreselectPrioritéfor/id
#detailStatusselectStatutfor/id
#detailValuenumberValeur (€ HT)for/id
#detailAssignedTotextAssigné àfor/id
#detailSourcetextSourcefor/id
#detailLinkedinurlProfil LinkedInfor/id
#detailCreatedAttextDate de créationfor/id
#detailLastInteractiontextDernière interactionfor/id
#newNotetextareaAjouter une notefor/id
#invoiceContactNametextClientfor/id
#invoiceDueDatedateDate d'échéancefor/id
#invoiceDescriptiontextDescription généralefor/id
#invoiceBuyerCountryselectPays du client (BT-55)for/id
#invoiceBuyerVattextN° de TVA intracommunautaire du client (BT-48) ?for/id
#invoiceStatusselectStatut initialfor/id
#invoiceB2cConsumercheckboxnone
#invoiceBtpAutoliquidationcheckboxnone
#invoiceClientSirentextSIREN du client (9 chiffres)for/id
#invoiceCategorieOperationselectCatégorie de l'opérationfor/id
#invoiceAdresseLivraisontextAdresse de livraison (si différente de l'adresse du client)for/id
#invoiceTvaSurDebitscheckboxnone
#invoiceTypeselectType de document (BT-3) ?for/id
#invoiceFacturxProfileselectProfil Factur-X ?for/id
#invoiceVatCategoryselectCatégorie TVA (BT-118) ?for/id
#invoicePaymentMeansselectMoyen de paiement (BT-81) ?for/id
#invoiceBuyerSirettextSIRET acheteur (BT-46) ?for/id
#productNametextNom du produit / service *for/id
#productTypeRadioProduitradionone
#productTypeRadioServiceradionone
#productNeedsShippingcheckboxÀ expédierfor/id
#productDescriptiontextareaDescriptionfor/id
#productPricenumberPrix HT (€) *for/id
#productTvaselectTVA (%)for/id
#productReftextRéférence (optionnel)for/id
#productEcoTaxnumberÉco-participation / éco-contribution DEEE (€ HT, optionnel)for/id
#productTrackStockcheckboxnone
#productStockQuantitynumberQuantité en stockfor/id
#productPaymentLinkurlLien de paiement Stripe (optionnel)for/id
#productChatbotFeaturedcheckboxMettre en avant dans le chatbotfor/id
#catalogSearchsearchRechercher un produitaria-label
#reminderTitletextTitre *for/id
#reminderDesctextareaDescriptionfor/id
#reminderDatedatetime-localDate et heure *for/id
#reminderContactIdselectContact lié (optionnel)for/id
#templateNametextNom du template *for/id
#templateSubjecttextSujet *for/id
#templateBodytextareaCorps du messagefor/id
#emailToemailDestinatairefor/id
#emailTemplateSelectselectUtiliser un templatefor/id
#emailSubjecttextSujet *for/id
#emailBodytextareaMessage *for/id
#wfConditionSelectselectCondition de déclenchementaria-label
#otpCodetext(000000)placeholder only
#productsCsvFileInputfile(none)none
#invoiceContactSelectselect(none)none
#chatbotShareLinktext(none)none

Form controls need a <label>, aria-label, or aria-labelledby for screen readers.

<input type="text" id="chatbotShareLink">; <input type="file" id="productsCsvFileInput">; <select id="invoiceContactSelect">

Why this matters

Form controls without labels — assistive tech announces 'edit text' with no context; users can't complete forms.

Source: WCAG 2.1 SC 3.3.2

Placeholder text disappears on focus and is not a reliable label.

<input type="text" id="otpCode">

Why this matters

Placeholder-only labels disappear when the user starts typing — they must remember what the field was for.

Learn more ▾

Placeholders are NOT labels. They vanish on input, fail color contrast checks (most are gray), and don't satisfy WCAG SC 3.3.2. Always use a real <label> alongside (or aria-labelledby).

Source: WCAG 2.1 SC 3.3.2 / Nielsen Norman

D
Mobile Keyboard & Autofill
Action
46/65 eligible field(s) missing autocomplete or inputmode
FIX
46/65 eligible field(s) missing autocomplete or inputmode
Warning::
10 field(s) missing recommended autocomplete attribute
WCAG 1.3.5 (Level AA): inputs whose purpose maps to a Common Input Purpose value should declare it via `autocomplete=`. Required for password managers, browser autofill, and assistive tech that customizes inputs (e.g., simplified keyboards). Mobile autofill in particular cuts form-completion time by 30-50% when these are present. Affected purposes: email, tel.
Got: <input type="email" id="alertEmail">, <input type="email" id="resendFromEmail">, <input type="email" id="inviteEmail">, <input type="email" id="stEmail">, <input type="tel" id="stTelephone">
Warning::
36 field(s) would benefit from inputmode attribute
Mobile browsers pick the on-screen keyboard layout from `inputmode=` when present (numeric pad, tel dialpad, email keyboard). Without it, users see the default text keyboard and must mode-switch -- 2-3 extra taps per phone-number or numeric-ID field. Type-based defaults exist (`type=tel` shows the tel keyboard on most browsers) but `inputmode` is the explicit, cross-browser way to control this. Affected types: email, search, numeric, url, tel.
Got: <input type="email" id="loginEmail">, <input type="email" id="signupEmail">, <input type="search" id="globalSearch">, <input type="number" id="frHT">, <input type="number" id="frTTC">
F
404 Error Page
Action
Soft 404 detected
FIX
Soft 404 detected
Critical::
Soft 404: server returns HTTP 200 for non-existent pages
The server returns HTTP 200 for a path that does not exist. Search engines will index these pages, diluting your real content. Configure your server to return a proper 404 status code for missing pages.
Got: Status: 200 for /beavercheck-404-test-giq0et
404 Page Quality ✗ Soft 404 (HTTP 200)
Status Code: HTTP 200

The server returned HTTP 200 for a non-existent path. Search engines will index this page as real content. Configure your server to return HTTP 404 for missing pages.

D
Dark Mode Support
Action
Theme color only
FIX
Theme color only
Info::
Theme-color present but no dark variant
A theme-color is set but no dark-specific variant was found. The browser toolbar may not adapt for dark mode users.
Got: #385d8d
Info::
No dark mode signals detected
Consider adding CSS with @media (prefers-color-scheme: dark) and <meta name='color-scheme' content='light dark'>.
Info::
Detection limited to meta tags and inline styles
External CSS files may contain prefers-color-scheme rules not visible to this scan.
Dark ModePartial Dark Mode
color-scheme meta Not set ✗Dark theme-color Not set ✗CSS indicators Not detected ✗

Detection limited to meta tags and inline styles.

D
Print Stylesheet
Action
No print styles
FIX
No print styles
Info::
No print-specific styles detected
When users print this page, they get the screen layout including navigation and non-essential elements. Add @media print rules to hide navigation and optimize layout for paper.
Print Stylesheet No Print Styles
Print stylesheet Not found ✗Inline @media print Not detected ✗
F
Navigation UX
Action
1 navigation pattern(s)
FIX
1 navigation pattern(s)
Info::
Search functionality detected
Got: role-search
Info::
2 navigation landmark(s) detected
Breadcrumbs
Search role='search' landmark
Skip Link
Labeled Navigation 2 <nav> element(s)
Back to Top
Hamburger Menu
Sticky Navigation Cannot reliably detect (CSS-based)
2 of 6 testable patterns navigation patterns detected. Limited navigation support. Consider adding breadcrumbs, search, and skip link.
C
Landmark Structure
Action
32 landmarks
REVIEW
32 landmarks
Info::
<main> landmark present
Warning::
Multiple <main> landmarks (3 found)
A page should have only one <main> landmark.
Info::
2 <nav> landmark(s) found
Warning::
1 of 2 <nav> elements are unlabeled
Multiple navigations need aria-label to distinguish them for screen readers.
Info::
No contentinfo (footer) landmark
Warning::
Skip navigation link is missing (WCAG 2.4.1)
Add a skip link as the first focusable element so keyboard users can bypass repeated navigation.
Info::
Search landmark present
Page Structure — as a screen reader sees it
BANNER header NAV "Menu principal" SEARCH MAIN CONTENTINFO (missing!)

A page should have only one <main> landmark.

Why this matters

Multiple <main> elements violate the spec — there must be exactly one per page.

Learn more ▾

HTML5 spec: 'authors must not include more than one main element' visible to AT at the same time. Multiple <main>s confuse AT and break the 'jump to main content' shortcut. Refactor to a single <main> with nested <section>/<article>.

Source: HTML5 spec

Multiple navigations need aria-label to distinguish them for screen readers.

Why this matters

Some <nav> elements lack aria-label — screen-reader users hear 'navigation' multiple times with no way to distinguish them.

Learn more ▾

When a page has multiple <nav> regions (primary, footer, breadcrumb), each needs aria-label or aria-labelledby. AT users navigate by landmark; identical 'navigation' announcements force them to enter each one to discover purpose.

Source: WAI-ARIA Authoring Practices

Add a skip link as the first focusable element so keyboard users can bypass repeated navigation.

Why this matters

Without a skip-nav link, keyboard users tab through every nav item before reaching content — every page, every visit.

Learn more ▾

WCAG 2.4.1 (Bypass Blocks) requires a mechanism to skip past repeated content. The standard implementation is a 'Skip to main content' link that's the first focusable element, visually hidden until focused. Three lines of HTML + four of CSS.

Source: WCAG 2.1 SC 2.4.1

B
Heading Hierarchy
97 headings, 1 skip(s)
REVIEW
97 headings, 1 skip(s)
Info::
Single H1 present
Warning::
Heading level skipped: H1 → H3 (missing H2)
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Warning::
1 empty heading(s)
Empty headings appear in the document outline but provide no information.
  • H2 Connexion
  • H2 Créer votre compte
  • H2 Nouveau mot de passe
  • H1 Tableau de bord
  • H3 Changer mon mot de passe skipped
  • H3 CA HT ce mois
  • H3 Devis en cours
  • H3 Taux conversion
  • H2 Derniers contacts
  • H2 Commandes à expédier
  • H2 Pipeline de vente
  • H3 Prospects
  • H3 Contacts
  • H3 Clients
  • H2 Factures reçues
  • H3 Déposer une facture fournisseur
  • H2 Catalogue produits
  • H2 Agenda
  • H3 (empty)
  • H3 Nouveau rendez-vous
  • H3 Prochains rendez-vous
  • H2 Rappels & tâches
  • H2 Templates email
  • H2 Assistant IA
  • H2 Automatisations
  • H2 Rapports
  • H3 Évolution du CA
  • H3 Répartition par statut
  • H3 Entonnoir de conversion
  • H3 Top 5 clients
  • H3 Objectif vs Réalisé
  • H3 Valeur moyenne par statut
  • H3 Répartition des devis/factures par statut
  • H3 Mon profil
  • H3 Objectifs mensuels en € HT
  • H3 Alertes automatiques
  • H3 Sécurité du compte
  • H3 Connexions récentes
  • H3 Plans & Abonnement
  • H3 Informations légales
  • H3 🤖 Automatisations administratives
  • H4 🏦 Virements à confirmer
  • H3 Stripe — Paiements en ligne
  • H3 Synchronisation bancaire
  • H3 Gmail — Envoi d'emails depuis votre adresse
  • H3 Outlook — Envoi d'emails depuis votre adresse
  • H3 Resend — Envoi d'emails
  • H3 Email professionnel (SMTP) Bêta
  • H3 Signature électronique — YouSign
  • H3 Pennylane — Export comptable
  • H3 API, Zapier, Make & n8n
  • H3 Webhook entrant
  • H3 Plateforme Agréée (PA)
  • H3 Gestion de l'équipe
  • H3 Membres actuels
  • H4 Sièges supplémentaires
  • H3 Fonctionnalité Équipe
  • H3 Chatbot — Intégration Aide
  • H4 Code d'intégration
  • H4 Apparence
  • H4 Questions posées par le chatbot
  • H4 Email de confirmation au visiteur
  • H4 Questions personnalisées Dès Pro
  • H3 Demandes reçues via le chatbot
  • H3 Import & Export
  • H4 Import
  • H4 Export
  • H3 Registre des traitements (Art. 30 RGPD)
  • H3 Registre — finalités de traitement de ce CRM
  • H3 Récupérer mes données (droit à la portabilité, Art. 20 RGPD)
  • H3 Zone de suppression
  • H3 ALERTE CONFIANCE SOUS-TRAITANT
  • H3 Ajouter un sous-traitant
  • H3 Gestion des sous-traitants
  • H3 Sous-traitants enregistrés
  • H3 Dépenses sous-traitance
  • H3 Guide complet
  • H3 Documentation & Aide
  • H3 Assigner une mission
  • H3 Fonctionnalité premium
  • H3 Nouveau contact
  • H3 Fiche contact
  • H4 Historique des interactions
  • H4 Fichiers joints
  • H3 Nouveau devis
  • H4 Mentions facturation électronique 2026
  • H3 Fusionner ces 2 fiches
  • H3 Nouveau produit
  • H3 Choisir depuis le catalogue
  • H3 Nouveau rappel
  • H3 Nouveau template email
  • H3 Envoyer un email
  • H3 Nouvelle règle automatique
  • H3 Journal de la règle
  • H3 Branchement conditionnel
  • H3 Configurer les colonnes
  • H2 🔐 Vérification requise

Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.

Why this matters

Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.

Learn more ▾

Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.

Source: WCAG 2.1 SC 1.3.1 / W3C WAI

Empty headings appear in the document outline but provide no information.

Why this matters

Empty <hN> tags break the document outline — screen-reader users navigating by heading hit dead silence.

Source: WCAG 2.4.6

B
Form Input Types
7 input(s) using type=text where a specific type would help
REVIEW
7 input(s) using type=text where a specific type would help
Info::
Input "chatbotAskEmail" should use type="email" (currently type="text")
Field name "chatbotAskEmail" suggests type="email". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="email">.
Info::
Input "chatbotAskPhone" should use type="tel" (currently type="text")
Field name "chatbotAskPhone" suggests type="tel". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="tel">.
Info::
Input "chatbotConfirmEmailSubject" should use type="email" (currently type="text")
Field name "chatbotConfirmEmailSubject" suggests type="email". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="email">.
Info::
Input "rgpdDpoNom" should use type="email" (currently type="text")
Field name "rgpdDpoNom" suggests type="email". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="email">.
Info::
Input "detailAssignedTo" should use type="email" (currently type="text")
Field name "detailAssignedTo" suggests type="email". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="email">.
Info::
Input "templateSubject" should use type="email" (currently type="text")
Field name "templateSubject" suggests type="email". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="email">.
Info::
Input "emailSubject" should use type="email" (currently type="text")
Field name "emailSubject" suggests type="email". Wrong type loses mobile keyboard hints, browser autofill, and free format validation. Change to <input type="email">.
B
Form Input Quality
2 input-semantic issue(s) across 204 form control(s)
REVIEW
2 input-semantic issue(s) across 204 form control(s)
Info::
7 password field(s) missing or with invalid `autocomplete`
Password managers fill / save passwords only when `autocomplete` is exactly `current-password` (login) or `new-password` (registration / change). Empty, `off`, `password`, or other values silently disable the manager UX. Sample: <input type="password" id="stripeApiKey">, <input type="password" id="stripeWebhookSecret">, <input type="password" id="resendApiKey"> (+4 more).
Info::
18 login form field(s) missing `autocomplete=username` (or `email`)
On a page with a password input, the matching username / email field needs `autocomplete="username"` or `autocomplete="email"` -- otherwise the password manager can't identify which field carries the login identifier and silently skips autofill on the whole form. Sample: <input type="email" id="alertEmail">, <input type="email" id="accountantEmail">, <input type="email" id="resendFromEmail"> (+15 more).
B
Favicon & Branding
5 icon(s) detected
REVIEW
5 icon(s) detected
Info::
favicon.ico present at site root
Info::
HTML icon links detected
Info::
Apple touch icon present
Info::
Multiple icon sizes detected
✓ favicon.ico Present
✓ PNG Icons Present
✓ Apple Touch Present
✗ SVG Favicon Missing
✓ Manifest Icons Present
✓ Multiple Sizes Present
A+
Heading Text Quality
1 heading-text-quality issue(s) detected
PASS
1 heading-text-quality issue(s) detected
Info::
1 heading(s) are all-uppercase (excluding short acronyms)
Headings rendered in all-uppercase are a styling choice that should be done via CSS (`text-transform: uppercase`), not by typing the text in caps. Capitalized text is read letter-by-letter by some screen readers (e.g., "H-E-L-L-O W-O-R-L-D" instead of "hello world"). It's also a soft signal of CMS-migration artifacts where the original lowercase intent was lost.
Got: 1 all-caps heading(s)
A+
Alt Text Quality
All 1 images OK
PASS
All 1 images OK
Info::
1 image(s) with good alt text
1 images 1 good alt text
All images have appropriate alt text.
A+
Document Language
Lang attribute set to "fr"
PASS
Lang attribute set to "fr"
Info::
<html lang="fr"> is set and valid
Got: fr
A+
Tabindex Anti-Patterns
35 explicit tabindex attribute(s) checked, no anti-patterns
PASS
35 explicit tabindex attribute(s) checked, no anti-patterns
Info::
No tabindex anti-patterns detected
A+
Iframe Accessibility
No iframes on this page
PASS
No iframes on this page
Info::
No iframes on this page
A+
Tap Target Adequacy
All tap targets meet WCAG 2.5.5/2.5.8 sizing
PASS
All tap targets meet WCAG 2.5.5/2.5.8 sizing
Info::
All tap targets meet WCAG 2.5.5 (44x44px) sizing
A+
Mobile-Readable Font Sizes
All 7 visible text node(s) render at >= 12 CSS pixels
PASS
All 7 visible text node(s) render at >= 12 CSS pixels
Info::
All text uses legible mobile font sizes (>= 12 CSS px)
A+
Web Manifest
PWA-ready
PASS
PWA-ready
Info::
Meets PWA install criteria
Info::
Name present: Exonore — CRM IA pour PME
Info::
192x192 icon present
Info::
512x512 icon present
Info::
Display mode: standalone
PWA Install Criteria ✓ Installable
Name Exonore — CRM IA pour PME ✓192×192 icon ✓512×512 icon ✓Start URL / ✓Display Mode standalone ✓
Name Exonore — CRM IA pour PME Display Mode standalone Theme Color #385D8D Background Color #ffffff Icons 2 icon(s)
A+
PWA Depth
1 PWA signal(s) surfaced
PASS
1 PWA signal(s) surfaced
Info::
Manifest has no maskable icon
Android 12+ Adaptive Icons crop non-maskable icons to a circle or squircle -- frequently hiding important parts of the logo. Add at least one icon entry with `"purpose": "maskable"` (or `"any maskable"`) and a maskable-aware design (16% safe-zone padding around the inner mark).
A+
Mobile UX Depth
2 mobile-depth signal(s) detected
PASS
2 mobile-depth signal(s) detected
Info::
Browser-chrome `theme-color` meta tag present
The page sets `<meta name="theme-color" content="...">`, which Android Chrome uses to tint the status bar and iOS Safari uses for the toolbar background. Brand polish that costs nothing and Just Works.
Info::
Viewport `viewport-fit=cover` -- supports notched / dynamic-island devices
The viewport meta declares `viewport-fit=cover`, which lets the page draw into the safe-area edges (notch, dynamic island, home indicator) on iPhone X+ devices. Pair with `env(safe-area-inset-*)` CSS to keep critical UI inside the inset rectangle while letting backgrounds extend edge-to-edge.
A+
Color Contrast (Screenshot)
20 text elements analyzed, 0 fail WCAG AA
PASS

Analyzes text contrast against the actual rendered page, including background images, gradients, and overlays that CSS-based tools cannot detect.

20 pass
Show all checked elements (20)
ElementRatioRequiredFGBGResult
h1 Tableau de bord8.65:13.0:1
#000000
#06B6D4
Pass
h2 Connexion4.67:13.0:1
#000000
#227FA8
Pass
h2 Créer votre compte5.11:13.0:1
#000000
#1A87AC
Pass
h2 Nouveau mot de passe6.14:13.0:1
#000000
#1297B7
Pass
h2 Derniers contacts8.65:13.0:1
#000000
#06B6D4
Pass
h2 Commandes à expédi…8.65:13.0:1
#000000
#06B6D4
Pass
h2 Pipeline de vente8.65:13.0:1
#000000
#06B6D4
Pass
h2 Factures reçues8.65:13.0:1
#000000
#06B6D4
Pass
h2 Catalogue produits8.65:13.0:1
#000000
#06B6D4
Pass
h2 Agenda8.65:13.0:1
#000000
#06B6D4
Pass
h2 Rappels & tâches8.65:13.0:1
#000000
#06B6D4
Pass
h2 Templates email8.65:13.0:1
#000000
#06B6D4
Pass
h2 Assistant IA8.65:13.0:1
#000000
#06B6D4
Pass
h2 Automatisations8.65:13.0:1
#000000
#06B6D4
Pass
h2 Rapports8.65:13.0:1
#000000
#06B6D4
Pass
h2 🔐 Vérification r…8.65:13.0:1
#000000
#06B6D4
Pass
h3 Changer mon mot de p…8.65:13.0:1
#000000
#06B6D4
Pass
h3 CA HT ce mois8.65:13.0:1
#000000
#06B6D4
Pass
h3 Devis en cours8.65:13.0:1
#000000
#06B6D4
Pass
h3 Taux conversion8.65:13.0:1
#000000
#06B6D4
Pass

Methodology: The top 20 text elements by font size were checked. Background color was sampled from the desktop screenshot using a 5-point pattern. WCAG 2.1 AA requires 4.5:1 for normal text and 3:1 for large text.

A+
Lighthouse Accessibility Audits
Score 100/100 — 0 failing, 23 passed
PASS
100

Accessibility

These checks highlight opportunities to improve the accessibility of your web app. Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so manual testing is also encouraged.

○Interactive controls are keyboard focusable
○Interactive elements indicate their purpose and state
○The page has a logical tab order
○Visual order on the page follows DOM order
○User focus is not accidentally trapped in a region
○The user's focus is directed to new content added to the page
○HTML5 landmark elements are used to improve navigation
○Offscreen content is hidden from assistive technology
○Custom controls have associated labels
○Custom controls have ARIA roles
●`[aria-*]` attributes match their roles
●`[aria-hidden="true"]` is not present on the document `<body>`
●`[role]`s have all required `[aria-*]` attributes
●`[role]` values are valid
●`[aria-*]` attributes have valid values
●`[aria-*]` attributes are valid and not misspelled
●Buttons have an accessible name
●Form elements have associated labels
●`[user-scalable="no"]` is not used in the `<meta name="viewport">` element and the `[maximum-scale]` attribute is not less than 5.
●`button`, `link`, and `menuitem` elements have accessible names
●ARIA attributes are used as specified for the element's role
●`[aria-hidden="true"]` elements do not contain focusable descendents
●Elements use only permitted ARIA attributes
●Background and foreground colors have a sufficient contrast ratio
●Document has a `<title>` element
●`<html>` element has a `[lang]` attribute
●`<html>` element has a valid value for its `[lang]` attribute
●No element has a `[tabindex]` value greater than 0
●Touch targets have sufficient size and spacing.
●Heading elements appear in a sequentially-descending order
●Document has a main landmark.
●Deprecated ARIA roles were not used
●Uses ARIA roles only on compatible elements
○`[accesskey]` values are unique
○Elements with `role="dialog"` or `role="alertdialog"` have accessible names.
○ARIA input fields have accessible names
○ARIA `meter` elements have accessible names
○ARIA `progressbar` elements have accessible names
○Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.
○`[role]`s are contained by their required parent element
○Elements with the `role=text` attribute do not have focusable descendents.
○ARIA toggle fields have accessible names
○ARIA `tooltip` elements have accessible names
○ARIA `treeitem` elements have accessible names
○The page contains a heading, skip link, or landmark region
○`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.
○Definition list items are wrapped in `<dl>` elements
○ARIA IDs are unique
○No form fields have multiple labels
○`<frame>` or `<iframe>` elements have a title
○`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.
○Image elements have `[alt]` attributes
○Input buttons have discernible text.
○`<input type="image">` elements have `[alt]` text
○Links are distinguishable without relying on color.
○Links have a discernible name
○Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).
○List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements
○The document does not use `<meta http-equiv="refresh">`
○`<object>` elements have alternate text
○Select elements have associated label elements.
○Skip links are focusable.
○Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.
○`<th>` elements and elements with `[role="columnheader"/"rowheader"]` have data cells they describe.
○`[lang]` attributes have a valid value
○`<video>` elements contain a `<track>` element with `[kind="captions"]`
○Tables have different content in the summary attribute and `<caption>`.
○All heading elements contain content.
○Image elements do not have `[alt]` attributes that are redundant text.
○Identical links have the same purpose.
○Elements with visible text labels have matching accessible names.
○Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.
○`<td>` elements in a large `<table>` have one or more table headers.
All checks on this page are automated. Results are estimates - run targeted manual reviews when the score affects a release decision.

Send Feedback