vlmkit demos Does it look designed?

check color

Links you can only tell apart by colour

The palette by role (surfaces, ink, marks, by painted area) and two WCAG rules. Here the links in the prose have no underline and are 2:1 against the text around them.

Run it

vlmkit check color fixtures/color/link-color-only-broken.html
Blue links in dark-blue prose, no underline.
Blue links in dark-blue prose, no underline.

What to look at

check a11y contrast passes these links: they are readable against the background. This is the other criterion (WCAG 1.4.1), the link against the sentence it sits in.

The fix

Underline in-prose links, or reach 3:1 against the body ink.

What vlmkit printed

vlmkit check color fixtures/color/link-color-only-broken.html · exit 0

vlmkit check color
source: fixtures/color/link-color-only-broken.html

verdict: COLOR-DEPENDENT (1 finding(s))
  exits 0 — 1 warn(s) did not fail this command. To gate on one: --rule color-only-link=suspect
  measured: 1 control(s), 5 link(s) in a text flow — from 27 visible box(es)

Palette (by painted area; reported, never judged — see the rejected candidates in the module docs)
  surfaces  2 distinct
    #fbfcfd   85.0%     1 el
    #ffffff   15.0%     3 el  div.shell>div.card
  ink       4 distinct
    #16233a   71.6%     8 el  div.shell>h1
    #1145c4   13.5%     5 el  div.shell>p>a
    #5b6b85   13.3%     3 el  div.shell>p.muted
    #ffffff    1.5%     1 el  div.shell>form>button
  marks     2 distinct
    #cdd6e4   53.6%     4 el  div.shell>div.card
    #6b7280   46.4%     4 el  input#email
  base #fbfcfd, body ink #16233a, link ink #1145c4 on 5 element(s)

Findings
  ! [color-only-link]: div.shell>p>a — #1145c4 link inside #16233a prose at 2:1, with no underline, weight step, border or fill to mark it — so colour is the only thing saying it is a link (2 element(s), e.g. in div.shell>p). WCAG 1.4.1 technique G183 asks for 3:1 against the surrounding text when colour is the only cue. This is disjoint from check a11y contrast, which measures the link against its BACKGROUND and passes.