evaluate

override fun evaluate(node: A11yNode): A11yIssue?

Entry point called by the scanner engine. Sealed final so cross-cutting concerns (logging, timing, exception guarding) can be added here without touching every concrete rule.