APCA: il contrasto colore spiegato meglio (ma non è ancora lo standard)
Ti è mai capitato di scegliere un grigio per il testo, controllarlo con un tool di contrasto, vederti dire “passa, tutto ok” e poi guardare lo schermo e pensare “ma davvero questa roba è leggibile?”. Succede spessissimo in dark mode: prendi un grigio chiaro, lo metti su uno sfondo quasi nero, il checker ti dà persino il bollino AAA, ma l’occhio fatica.
Non sei tu che sei troppo pignolo. È il modo in cui oggi calcoliamo il contrasto a essere, in certi casi, sbagliato. E da qualche anno esiste un metodo che lo calcola decisamente meglio: si chiama APCA.
In questo post vediamo cos’è, perché è più affidabile del calcolo attuale delle WCAG 2 e — soprattutto — facciamo chiarezza su una cosa che in giro viene raccontata male: il suo rapporto con le WCAG 3.
Come funziona il contrasto oggi: le WCAG 2
Lo standard che usiamo tutti i giorni è quello delle WCAG 2 (oggi siamo alla versione 2.2). Il contrasto si esprime come un rapporto tra la luminanza del testo e quella dello sfondo, scritto nella forma X:1. Le soglie che conosci a memoria sono:
- 4.5:1 per il testo normale;
- 3:1 per il testo grande (o per gli elementi dell’interfaccia).
È un sistema semplice e ha avuto un merito enorme: ha reso il contrasto misurabile e ha portato l’accessibilità dentro processi e normative. Il problema è che quella formula, nata anni fa, ha dei limiti che oggi si fanno sentire:
- Tratta tutti i colori allo stesso modo. Un rapporto 4.5:1 vicino al nero non “rende” come lo stesso 4.5:1 in zone più chiare: può risultare funzionalmente illeggibile pur passando il test.
- Sovrastima il contrasto dei colori scuri. Per questo le WCAG 2 si comportano male in dark mode: dichiarano “promosso” accostamenti che all’occhio sono deboli.
- Ignora dimensione e peso del font. Per la formula, un testo thin da 14px e un bold da 14px hanno lo stesso contrasto. Ma chiunque abbia occhi sa che non si leggono allo stesso modo.
Cos’è APCA
APCA sta per Accessible Perceptual Contrast Algorithm (lo trovi in giro anche come Advanced Perceptual Contrast Algorithm: è la stessa cosa, la sigla nel tempo ha cambiato dicitura) ed è un metodo nuovo, pensato specificamente per gli schermi RGB auto-illuminati (cioè i monitor che usiamo davvero), per stimare il contrasto di leggibilità.
La differenza filosofica è tutta qui: APCA non misura un rapporto matematico astratto, ma cerca di stimare quanto un testo è davvero leggibile da un essere umano. Il risultato non è un X:1, ma un valore di Lightness Contrast (Lc), su una scala che va da 0 a circa ±106.
Le cose che APCA prende in considerazione e che le WCAG 2 ignorano sono tre:
- Uniformità percettiva. Un valore di Lc 60 rappresenta la stessa leggibilità percepita indipendentemente da quanto sono chiari o scuri i colori. È esattamente quello che alle WCAG 2 manca.
- Frequenza spaziale, cioè peso e dimensione del font. APCA sa che un testo più grande o più grassetto ha bisogno di meno contrasto, e ne tiene conto: Lc ~60 per testo grande o in grassetto, Lc ~75 come minimo per il body text, Lc ~90 per i testi piccoli o con font sottili.
- Polarità. APCA distingue il testo scuro su sfondo chiaro dal testo chiaro su sfondo scuro (i valori negativi indicano proprio quest’ultimo caso). Le WCAG 2 li trattano in modo identico, ed è uno dei motivi per cui falliscono in dark mode.
Se vuoi approfondire la teoria, il sito ufficiale apcacontrast.com e la guida di Accessibility Checker spiegano il modello nel dettaglio.
Esempi che ingannano
La teoria è bella, ma il bello arriva quando metti i due metodi uno di fronte all’altro sugli stessi colori. Ecco tre accostamenti che mostrano dove i due sistemi non sono d’accordo.
Una premessa importante: in APCA il “passa/non passa” dipende sempre dalla dimensione e dal peso del font (in realtà c’è una tabella che incrocia i due valori, non tre soglie secche). Per questo, in ogni esempio, prendo come riferimento il body text — testo normale, circa 16px e peso 400 — per cui la soglia minima è Lc 75.
1. Il grigio in dark mode che inganna WCAG 2
Testo #B0B0B0 su sfondo #1E1E1E (valutato come body text, 16px/400)
WCAG 2 → 7.69:1 (passa addirittura AAA ✅)
APCA → Lc -57.7 (sotto la soglia di Lc 75 per il body text ❌)
Questo è il caso da manuale. È il classico grigio che riusi tal quale dal light mode, lo butti su uno sfondo scuro, e WCAG ti dà il bollino massimo. APCA invece dà una stima più realistica: per leggere quel testo, a quella dimensione, l’utente strizza gli occhi. Le WCAG 2 stanno sovrastimando il contrasto perché i colori sono scuri.
2. Il grigio su nero
Testo #8C8C8C su sfondo nero (#000000), come body text
WCAG 2 → 6.25:1 (passa AA ✅)
APCA → Lc -40.6 (ben sotto i 75 richiesti per il body text ❌)
Stessa storia: WCAG promuove, APCA boccia. Con un Lc così basso quel grigio non regge nemmeno per un titolo, figuriamoci per un paragrafo. Se progetti interfacce scure, è esattamente il tipo di errore in cui caschi senza accorgertene.
3. Il caso opposto: WCAG troppo severa
Testo bianco (#FFFFFF) su sfondo #777777, come body text
WCAG 2 → 4.48:1 (fallisce AA, manca lo 0.02 per il 4.5:1 ❌)
APCA → Lc 76.6 (supera la soglia di Lc 75 per il body text ✅)
Funziona anche al contrario: qui, a parità di contesto (sempre body text), WCAG 2 boccia per un soffio mentre APCA dice che il testo è perfettamente leggibile. È il segno che a volte la vecchia formula è inutilmente severa, soprattutto quando uno dei due colori non è vicino al nero.
E le WCAG 3? Facciamo chiarezza
Qui devo sfatare un mito che gira parecchio, perché lo pensavo anch’io prima di documentarmi: “APCA è il futuro, verrà introdotta con le WCAG 3”. La realtà è più sfumata.
- APCA è stata rimossa dal Working Draft delle WCAG 3 a luglio 2023, per mancanza di consenso nel gruppo di lavoro. Il W3C ha un meccanismo che elimina automaticamente i contenuti marcati come esplorativi se non avanzano entro sei mesi, e APCA è caduta lì.
- La bozza attuale (l’editor’s draft aggiornato ad aprile 2026) dice esplicitamente che l’algoritmo di contrasto delle WCAG 3 è ancora “da determinare”. Non nomina APCA come soluzione adottata.
- Le WCAG 3 sono lontanissime: restano un Working Draft, con una Recommendation finale stimata, nelle previsioni più ottimistiche, non prima del 2028-2030.
Come spiega bene Adrian Roselli nel suo aggiornamento di aprile 2026, “esplorativo” non significa “anteprima di ciò che arriverà”: significa “approccio sperimentale che potrebbe non sopravvivere”. Roselli si è spinto fino ad aprire issue ai browser per far rimuovere le implementazioni di APCA, proprio perché la loro presenza dava l’impressione sbagliata che fosse già uno standard.
C’è anche un risvolto legale da non sottovalutare (ne parla accessibility.chat). E qui la cosa interessante è che non cambia da una parte all’altra dell’oceano: in Europa la norma tecnica EN 301 549 (richiamata da European Accessibility Act e, in Italia, dalla Legge Stanca) rimanda a WCAG 2.1 livello AA; negli Stati Uniti enti e tribunali fanno riferimento agli stessi WCAG 2.x AA. Insomma, la solfa è la stessa ovunque: lo standard riconosciuto per legge sono le WCAG 2. Chi le abbandona per affidarsi solo ad APCA si mette in una posizione indifendibile, perché sta sostenendo che un algoritmo non ancora approvato dovrebbe prevalere su uno standard normativo. Anche Eric Eggert invita alla calma nel suo WCAG 3 is not ready yet.
Cosa fare oggi, in pratica
E quindi? APCA è una buona idea oppure no? La risposta onesta è: sì, ma non da sola.
APCA è uno strumento eccellente per ragionare sul contrasto reale, specialmente in dark mode e quando lavori con grigi e colori scuri dove le WCAG 2 ti tradiscono. Ma non è (ancora) lo standard, e per la conformità lo standard resta WCAG 2.2.
La strategia sensata è usarli insieme:
- In fase di design, usa APCA per scegliere accostamenti che siano davvero leggibili, non solo “matematicamente a posto”.
- Per la conformità, valida comunque tutto con WCAG 2.2 AA, perché è quello su cui sarai valutato.
Quando un colore passa entrambi, sei a posto sul serio.
Checklist per il contrasto nel 2026
- Hai validato il contrasto con WCAG 2.2 AA (4.5:1 testo normale, 3:1 testo grande)?
- Hai fatto un secondo controllo del testo con APCA su apcacontrast.com, soprattutto per la dark mode? (APCA nasce per la leggibilità del testo: per icone, bordi e componenti dell’interfaccia il riferimento resta il criterio WCAG 1.4.11 a 3:1.)
- Stai trattando in modo diverso i grigi su sfondo chiaro e su sfondo scuro, invece di riusare gli stessi valori?
- Stai tenendo conto di dimensione e peso del font, e non solo del colore?
- Hai evitato di buttare via WCAG 2 convinto che APCA sia “il nuovo standard”? (Non lo è, non ancora.)
Il contrasto non è un bollino da spuntare: è la differenza tra un testo che qualcuno riesce a leggere e uno che no. APCA ci ricorda che il modo migliore per verificarlo non è una formula astratta, ma l’occhio delle persone reali.
Peace&Love! ✌️