Accessibility
· 24 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.DForm AccessibilityAction4 of 204 controls have issuesFIX
| Control | Type | Label | Method |
|---|---|---|---|
| #loginEmail | aria-label | ||
| #loginPassword | password | Mot de passe | aria-label |
| #signupEmail | aria-label | ||
| #signupPassword | password | Mot de passe | aria-label |
| #newPasswordInput | password | Nouveau mot de passe | aria-label |
| #newPasswordConfirm | password | Confirmer le mot de passe | aria-label |
| #globalSearch | search | Recherche globale | aria-label |
| #headerCurrentPasswordInput | password | Mot de passe actuel | for/id |
| #headerNewPasswordInput | password | Nouveau mot de passe | for/id |
| #filterProspectStatus | select | Filtrer par statut | aria-label |
| #filterProspectScore | select | Filtrer par priorité | aria-label |
| #filterProspectSource | select | Filtrer par source | aria-label |
| #filterProspectDate | date | Filtrer par date de création | aria-label |
| #filterClientScore | select | Filtrer par priorité | aria-label |
| #filterClientSource | select | Filtrer par source | aria-label |
| #invoiceFilterStatus | select | Filtrer par statut | aria-label |
| #frFile | file | Fichier (5 Mo maximum) | for/id |
| #frFournisseur | text | Fournisseur | for/id |
| #frSiren | text | SIREN ou SIRET (optionnel) | for/id |
| #frNumero | text | N° de facture | for/id |
| #frDate | date | Date de facture | for/id |
| #frEcheance | date | Échéance (optionnel) | for/id |
| #frType | select | Type | for/id |
| #frHT | number | Montant HT (optionnel) | for/id |
| #frTTC | number | Montant TTC | for/id |
| #frCategorie | text | Catégorie (optionnel) | for/id |
| #frFiltre | select | Afficher | for/id |
| #appointmentContactId | select | Client | for/id |
| #appointmentDate | date | Date sélectionnée | for/id |
| #appointmentTime | select | Heure | for/id |
| #appointmentDuration | select | Durée | for/id |
| #appointmentNotes | textarea | Objet / Notes | for/id |
| #aiInput | text | Poser une question à l'assistant IA | aria-label |
| #userFirstName | text | Prénom affiché | for/id |
| #alertEmail | Email pour les alertes et le résumé quotidien | for/id | |
| #dailySummary | checkbox | none | |
| #relanceDelay | number | Délai de relance factures impayées (jours) | for/id |
| #tauxPenaliteRetard | number | Taux des pénalités de retard (% par an) | for/id |
| #currentPasswordInput | password | Mot de passe actuel | for/id |
| #newPasswordInputSettings | password | Nouveau mot de passe | for/id |
| #companyName | text | Nom de l'entreprise * | for/id |
| #companyLegal | select | Forme juridique | for/id |
| #companyAddress | text | Adresse complète | for/id |
| #companySiret | text | Numéro SIRET * | for/id |
| #companyTvaNum | text | N° TVA intracommunautaire | for/id |
| #companyCapital | number | Capital social (€) | for/id |
| #companyTvaRate | select | Taux TVA par défaut (%) | for/id |
| #tvaRegime | select | Régime de TVA | for/id |
| #urssafPeriodicity | select | Rappel de déclaration URSSAF | for/id |
| #companyIban | text | IBAN | for/id |
| #companyBic | text | BIC / SWIFT | for/id |
| #seuilFranchiseTva | number | Seuil de franchise en base de TVA (€) ? | for/id |
| #mentionsLegales | textarea | Mentions légales personnalisées (pied de facture) ? | for/id |
| #cgvUrl | text | Conditions générales de vente (CGV) | for/id |
| #bankAutoMatch | checkbox | none | |
| #paAutoSend | checkbox | none | |
| #pennylaneAutoExport | checkbox | none | |
| #monthlyExportEnabled | checkbox | none | |
| #accountantEmail | Email de votre comptable | for/id | |
| #stripeApiKey | password | Clé secrète Stripe | for/id |
| #stripeWebhookSecret | password | Secret de signature du webhook Stripe | for/id |
| #stripePublicKey | text | Clé publique Stripe | for/id |
| #stripeAutoSend | checkbox | none | |
| #resendApiKey | password | Clé API Resend | for/id |
| #resendFromEmail | Email expéditeur | for/id | |
| #smtpEmail | Adresse email professionnelle | for/id | |
| #smtpPassword | password | Mot de passe de cette boîte mail | for/id |
| #smtpHost | text | Serveur SMTP sortant | for/id |
| #smtpPort | text | Port | for/id |
| #smtpSecure | select | Chiffrement | for/id |
| #yousignApiKey | password | Clé API YouSign | for/id |
| #pennylaneApiKey | password | Clé API Pennylane ? | for/id |
| #apiKeyNameInput | text | Nom de la clé (pour vous y retrouver) | for/id |
| #paName | text | Nom de votre PA | for/id |
| #paEndpoint | url | Endpoint API de la PA ? | for/id |
| #paApiKey | password | Clé API / Token de la PA | for/id |
| #inviteEmail | Email à inviter | aria-label | |
| #inviteRole | select | Rôle du collaborateur | aria-label |
| #inviteAccessUntil | date | Accès jusqu'au (facultatif) | none |
| #seatQuantityInput | number | Nombre de sièges supplémentaires | aria-label |
| #chatbotAllowedDomains | text | Domaines autorisés à intégrer le chatbot (recommandé) | for/id |
| #chatbotAutoSendDocs | checkbox | none | |
| #chatbotAskCountry | checkbox | none | |
| #chatbotWelcomeMessage | text | Message d'accueil personnalisé (laisser vide pour le texte par défaut) | for/id |
| #chatbotActive | checkbox | none | |
| #chatbotLogoUrl | url | URL du logo (affiché dans l'en-tête du chatbot) | for/id |
| #chatbotBrandColor | color | Couleur principale | for/id |
| #chatbotAskIntent | text | Accueil (par défaut : « Bonjour, comment pourrais-je vous aider ? ») | for/id |
| #chatbotAskProduct | text | Choix du produit (par défaut : « De quoi avez-vous besoin ? ») | for/id |
| #chatbotAskEmail | text | Email (par défaut : « Votre email ? ») | for/id |
| #chatbotAskPhone | text | Téléphone (par défaut : « Votre téléphone ? ») | for/id |
| #chatbotAskName | text | Nom (par défaut : « Votre nom ? (optionnel) ») | for/id |
| #chatbotAskCompany | text | Entreprise (par défaut : « Votre entreprise ? (optionnel) ») | for/id |
| #chatbotAskQuestion | text | Question libre (par défaut : « Posez votre question ») | for/id |
| #chatbotConfirmEmailSubject | text | Objet (laisser vide pour le texte par défaut) | for/id |
| #chatbotConfirmEmailBody | textarea | Message (laisser vide pour le texte par défaut) — {{nom}} et {{entreprise}} sont remplacés automatiquement | for/id |
| #rgpdResponsable | text | Responsable du traitement | for/id |
| #rgpdDpoNom | text | Délégué à la protection des données (DPO) ? | for/id |
| #rgpdConservation | number | Durée de conservation des données clients/prospects (mois) | for/id |
| #rgpdAutoPurge | checkbox | none | |
| #stNom | text | Nom * | for/id |
| #stEntreprise | text | Entreprise | for/id |
| #stSiret | text | SIRET | for/id |
| #stEmail | for/id | ||
| #stTelephone | tel | Téléphone | for/id |
| #stRib | text | RIB / IBAN | for/id |
| #stTarifType | select | Type de tarif | for/id |
| #stTarifMontant | number | Montant du tarif (€ HT) | for/id |
| #stDateAttestation | date | Date de l'attestation de vigilance | for/id |
| #stCodeVerifie | checkbox | none | |
| #stKbisDate | date | Date de vérification du Kbis | for/id |
| #stListeSalariesEtrangers | checkbox | none | |
| #stListeSalariesEtrangersDate | date | Date de cette vérification | for/id |
| #stNotes | textarea | Notes | for/id |
| #missionDescription | textarea | Description * | for/id |
| #missionLieu | text | Lieu | for/id |
| #missionMontant | number | Montant convenu (€ HT) | for/id |
| #missionDateDebut | date | Date de début | for/id |
| #missionDateFin | date | Date de fin (optionnel) | for/id |
| #missionTva | select | TVA facturée par le sous-traitant | for/id |
| #missionStatut | select | Statut | for/id |
| #contactName | text | Nom complet * | for/id |
| #contactCompany | text | Entreprise | for/id |
| #contactSiret | text | SIRET (optionnel) | for/id |
| #contactEmail | for/id | ||
| #contactPhone | tel | Téléphone | for/id |
| #contactActivity | text | Activité / Secteur | for/id |
| #contactCity | text | Ville | for/id |
| #contactSource | select | Source | for/id |
| #contactRelationshipType | select | Type | for/id |
| #contactScore | select | Priorité | for/id |
| #contactStatus | select | Statut | for/id |
| #contactValue | number | Valeur estimée (€ HT) | for/id |
| #contactLinkedin | url | Profil LinkedIn | for/id |
| #contactAddress | text | Adresse | for/id |
| #contactCountry | select | Pays | for/id |
| #contactCustomerType | select | Type de client | for/id |
| #contactVat | text | N° de TVA intracommunautaire (clients professionnels de l'UE) | for/id |
| #contactNotes | textarea | Notes | for/id |
| #detailName | text | Nom complet | for/id |
| #detailCompany | text | Entreprise | for/id |
| #detailEmail | for/id | ||
| #detailPhone | tel | Téléphone | for/id |
| #detailActivity | text | Activité | for/id |
| #detailCity | text | Ville | for/id |
| #detailCountry | select | Pays | for/id |
| #detailCustomerType | select | Type de client | for/id |
| #detailVat | text | N° de TVA intracommunautaire | for/id |
| #detailScore | select | Priorité | for/id |
| #detailStatus | select | Statut | for/id |
| #detailValue | number | Valeur (€ HT) | for/id |
| #detailAssignedTo | text | Assigné à | for/id |
| #detailSource | text | Source | for/id |
| #detailLinkedin | url | Profil LinkedIn | for/id |
| #detailCreatedAt | text | Date de création | for/id |
| #detailLastInteraction | text | Dernière interaction | for/id |
| #newNote | textarea | Ajouter une note | for/id |
| #invoiceContactName | text | Client | for/id |
| #invoiceDueDate | date | Date d'échéance | for/id |
| #invoiceDescription | text | Description générale | for/id |
| #invoiceBuyerCountry | select | Pays du client (BT-55) | for/id |
| #invoiceBuyerVat | text | N° de TVA intracommunautaire du client (BT-48) ? | for/id |
| #invoiceStatus | select | Statut initial | for/id |
| #invoiceB2cConsumer | checkbox | none | |
| #invoiceBtpAutoliquidation | checkbox | none | |
| #invoiceClientSiren | text | SIREN du client (9 chiffres) | for/id |
| #invoiceCategorieOperation | select | Catégorie de l'opération | for/id |
| #invoiceAdresseLivraison | text | Adresse de livraison (si différente de l'adresse du client) | for/id |
| #invoiceTvaSurDebits | checkbox | none | |
| #invoiceType | select | Type de document (BT-3) ? | for/id |
| #invoiceFacturxProfile | select | Profil Factur-X ? | for/id |
| #invoiceVatCategory | select | Catégorie TVA (BT-118) ? | for/id |
| #invoicePaymentMeans | select | Moyen de paiement (BT-81) ? | for/id |
| #invoiceBuyerSiret | text | SIRET acheteur (BT-46) ? | for/id |
| #productName | text | Nom du produit / service * | for/id |
| #productTypeRadioProduit | radio | none | |
| #productTypeRadioService | radio | none | |
| #productNeedsShipping | checkbox | À expédier | for/id |
| #productDescription | textarea | Description | for/id |
| #productPrice | number | Prix HT (€) * | for/id |
| #productTva | select | TVA (%) | for/id |
| #productRef | text | Référence (optionnel) | for/id |
| #productEcoTax | number | Éco-participation / éco-contribution DEEE (€ HT, optionnel) | for/id |
| #productTrackStock | checkbox | none | |
| #productStockQuantity | number | Quantité en stock | for/id |
| #productPaymentLink | url | Lien de paiement Stripe (optionnel) | for/id |
| #productChatbotFeatured | checkbox | Mettre en avant dans le chatbot | for/id |
| #catalogSearch | search | Rechercher un produit | aria-label |
| #reminderTitle | text | Titre * | for/id |
| #reminderDesc | textarea | Description | for/id |
| #reminderDate | datetime-local | Date et heure * | for/id |
| #reminderContactId | select | Contact lié (optionnel) | for/id |
| #templateName | text | Nom du template * | for/id |
| #templateSubject | text | Sujet * | for/id |
| #templateBody | textarea | Corps du message | for/id |
| #emailTo | Destinataire | for/id | |
| #emailTemplateSelect | select | Utiliser un template | for/id |
| #emailSubject | text | Sujet * | for/id |
| #emailBody | textarea | Message * | for/id |
| #wfConditionSelect | select | Condition de déclenchement | aria-label |
| #otpCode | text | (000000) | placeholder only |
| #productsCsvFileInput | file | (none) | none |
| #invoiceContactSelect | select | (none) | none |
| #chatbotShareLink | text | (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">
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">
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
DMobile Keyboard & AutofillAction46/65 eligible field(s) missing autocomplete or inputmodeFIX
F404 Error PageActionSoft 404 detectedFIX
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.
DDark Mode SupportActionTheme color onlyFIX
Detection limited to meta tags and inline styles.
DPrint StylesheetActionNo print stylesFIX
CLandmark StructureAction32 landmarksREVIEW
A page should have only one <main> landmark.
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.
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.
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
BHeading Hierarchy97 headings, 1 skip(s)REVIEW
- 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.
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.
Empty <hN> tags break the document outline — screen-reader users navigating by heading hit dead silence.
Source: WCAG 2.4.6
BLink & Button Quality3 issue(s) across 4 links and 167 buttonsREVIEW
| Element | Text | Issue | Suggested Fix |
|---|---|---|---|
| https://www.urssaf.fr/accueil/outils-doc… | vérifier l'authenticité de c… | new tab | Add '(opens in new tab)' to text |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
Add '(opens in new tab)' to link text or aria-label.
https://www.urssaf.fr/accueil/outils-documentation/outils/verification-attest…
Links with target="_blank" without rel="noopener" leak the originating page's window context — security and UX issue.
Learn more ▾ ▴
Without rel="noopener", the new tab can navigate the original tab via window.opener (tab-nabbing attack). Modern browsers default to noopener for target=_blank but only since recent versions. Always set rel="noopener noreferrer" explicitly.
Source: MDN target / OWASP
Icon-only buttons need an aria-label so screen readers can announce them.
button#shippingMore; button#mergeOptionA; button#mergeOptionB
Buttons with no accessible text (icon-only, no aria-label) can't be activated by voice control or understood by screen readers.
Source: WCAG 2.1 SC 4.1.2
BForm Input Types7 input(s) using type=text where a specific type would helpREVIEW
BForm Input Quality2 input-semantic issue(s) across 204 form control(s)REVIEW
BFavicon & Branding5 icon(s) detectedREVIEW
A+Heading Text Quality1 heading-text-quality issue(s) detectedPASS
A+Alt Text QualityAll 1 images OKPASS
A+Document LanguageLang attribute set to "fr"PASS
A+Tabindex Anti-Patterns35 explicit tabindex attribute(s) checked, no anti-patternsPASS
A+Iframe AccessibilityNo iframes on this pagePASS
A+Tap Target AdequacyAll tap targets meet WCAG 2.5.5/2.5.8 sizingPASS
A+Mobile-Readable Font SizesAll 7 visible text node(s) render at >= 12 CSS pixelsPASS
A+Web ManifestPWA-readyPASS
A+PWA Depth1 PWA signal(s) surfacedPASS
A+Mobile UX Depth2 mobile-depth signal(s) detectedPASS
A+Color Contrast (Screenshot)20 text elements analyzed, 0 fail WCAG AAPASS
Analyzes text contrast against the actual rendered page, including background images, gradients, and overlays that CSS-based tools cannot detect.
Show all checked elements (20)
| Element | Ratio | Required | FG | BG | Result |
|---|---|---|---|---|---|
| h1 Tableau de bord | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Connexion | 4.67:1 | 3.0:1 | #000000 | #227FA8 | Pass |
| h2 Créer votre compte | 5.11:1 | 3.0:1 | #000000 | #1A87AC | Pass |
| h2 Nouveau mot de passe | 6.14:1 | 3.0:1 | #000000 | #1297B7 | Pass |
| h2 Derniers contacts | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Commandes à expédi… | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Pipeline de vente | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Factures reçues | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Catalogue produits | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Agenda | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Rappels & tâches | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Templates email | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Assistant IA | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Automatisations | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 Rapports | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h2 🔐 Vérification r… | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h3 Changer mon mot de p… | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h3 CA HT ce mois | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h3 Devis en cours | 8.65:1 | 3.0:1 | #000000 | #06B6D4 | Pass |
| h3 Taux conversion | 8.65:1 | 3.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 AuditsScore 100/100 — 0 failing, 23 passedPASS
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.