Accessibility
Last updated 18 August 2026
The target for this site is WCAG 2.2 Level AA. This page says what is genuinely in place, how it was checked, and what is not done yet. A statement claiming perfect conformance with no exceptions would not be believable, and it would be the first thing an accessibility reviewer discounted.
This matters to me beyond compliance. An interface that excludes people is a badly built interface, and I would rather be told about one than have it stay quietly broken.
Scope
This statement covers https://www.yusufcreates.com — the public marketing pages, the blog, the work section, the enquiry and express order flows, the client portal, hosted proposals and contracts, and the in-browser call rooms.
It does not cover third-party services reached from the site. Stripe Checkout, in particular, is Stripe's interface and Stripe's conformance claim; the same goes for anything hosted by a client.
Conformance status
Partially conformant with WCAG 2.2 Level AA. Partially conformant means most of the site meets the standard and some parts do not yet. The parts that do not are listed under known gaps below, by name, rather than summarised away.
This is a self-assessment. It has not been audited by an independent third party, and it does not carry a formal VPAT. If you need either for procurement, ask — I would rather commission one against a real requirement than publish a document nobody asked for.
What is in place
- Contrast. Text colours are verified by calculation rather than by eye, including over the brightest part of the background glows and over frosted panels, where the readable version is the fill rather than the blur. Body text meets or exceeds 4.5:1 and most of it is far above. Non-text controls and focus indicators meet 3:1.
- Keyboard. Everything is reachable and operable by keyboard alone, in an order that matches the visual one. Dialogs, sheets and the command palette trap focus while open and return it to whatever opened them on close. Escape closes them. The slide-to-confirm control accepts arrow keys, Enter and Space, so a payment or an approval never requires a drag.
- Focus. A visible focus ring is never removed without a replacement, and it is drawn so it stays visible against glass and against the accent colour. Nothing relies on hover alone to be discoverable.
- Skip link. A skip-to-content link is the first thing in the tab order on every route, pointing at a single
<main>landmark. - Reduced motion.
prefers-reduced-motionremoves the load sequence, parallax, drifting panels, pointer tilt and the marquee, leaving a composed static page rather than a stripped one. The confirm gesture becomes an ordinary button press. - Reduced transparency.
prefers-reduced-transparencyreplaces frosted panels with solid surfaces. Legibility never depends on the blur — the fill underneath carries it — so nothing becomes harder to read when the effect is dropped. - Increased contrast.
prefers-contrast: morestrengthens borders, text and focus rings. - Light and dark. Both themes are held to the same contrast thresholds. Neither is an afterthought with the colours inverted.
- Forms. Every field has a real, permanently visible label — never a placeholder standing in for one. Errors are announced to assistive technology, tied to their field with
aria-describedby, marked witharia-invalid, and worded as what to do next rather than what went wrong. Required fields are marked in text, not by colour. - Text size and zoom. Form fields render at 16px on touch devices, so iOS does not zoom the page when you focus one. Layouts reflow to 320px without horizontal scrolling and survive 200% zoom.
- Touch targets. Interactive controls are at least 44px in the smaller dimension on touch, including the legal links in the footer, which were the smallest targets on the site until they were not.
- Status messages. Things that happen without a page change — a form submitting, a code being sent, a guest asking to join a call — are announced through live regions rather than only appearing on screen.
- Headings and landmarks. One
<h1>per page, headings in order without levels skipped for styling, and navigation, main and footer as real landmarks. Lists are lists. - Images. Meaningful images carry alt text that says what they show. Decorative ones carry empty alt so they are skipped rather than read as filenames. Icons that convey something have accessible names; icons that repeat the adjacent text are hidden from assistive technology.
- Language.The page language is declared, so a screen reader uses the right voice and pronunciation rather than reading English with another language's phonetics.
- Colour is never the only signal. Status, errors and availability all carry text or shape as well as colour.
- No timing traps. Nothing on the site expires while you are reading it or requires a response inside a time limit. The one countdown — the express build window — is information about the work, not a deadline imposed on you.
- Nothing flashes. No content flashes more than three times a second, so there is no seizure risk from the motion work.
The client portal and call rooms
These are the parts people spend real time in, so they get their own note rather than being folded into the general claim.
- Signing in. The portal uses an emailed code rather than a password. There is nothing to remember, nothing to type twice, and the code can be pasted. Autofill is not blocked.
- Portal navigation. Sections are reachable by keyboard, the current one is announced rather than only highlighted, and moving between them does not lose your place in the page.
- Files.Deliverables are served from this site's own origin, so downloads actually download and PDFs can be previewed in place instead of replacing the page. Every file has its real name, and the version is in the filename.
- Call controls. Mute, camera, share, hand, chat and notes are all real buttons with text labels, all keyboard operable. Raising a hand is visible to everybody in the room, which is the point — a signal only you can see is not a signal.
- Live captions.The in-call note taker uses the browser's own speech recognition and produces a running transcript that everyone in the room can read. It is a convenience rather than a conformance claim — see the gap below.
How this was tested
- Keyboard-only traversal of every public route and the portal.
- Automated checks against WCAG 2.2 AA, run over the built site rather than in development.
- Contrast verified by calculating ratios from the actual computed colours, including over gradients and glass, in both themes.
- Reflow and zoom checked at 320px width and at 200% zoom.
- Each of
prefers-reduced-motion,prefers-reduced-transparencyandprefers-contrastexercised directly. - Spot-checked with VoiceOver on macOS and iOS on the main flows — enquiry, pricing, portal sign-in.
Known gaps
These are open. They are listed because a statement without them is not worth reading.
- Screen-reader coverage is incomplete. VoiceOver has been used on the main flows. NVDA and JAWS have not been run end-to-end, and no screen reader has been taken through the whole of the portal or a live call.
- Live captions are not a conformance claim. The in-call transcript depends on the browser's own speech recognition, which is unavailable in some browsers, English-only in practice, and inaccurate enough that it should not be relied on as an accommodation. Where captioning is a requirement, tell me before the call and we will use a service that guarantees it.
- The whiteboard is visual only. Drawing on it, and reading what somebody else has drawn, has no non-visual equivalent. Anything decided on the board should be written into the call chat or the notes, and that is worth asking for.
- Some project imagery carries empty alt text where the surrounding heading already names the project. This is deliberate — it avoids reading the same name twice — but reasonable people disagree about it, and a case study screenshot arguably carries information a heading does not.
- Long slide-to-confirm labels can truncate on very narrow screens (320px). The control still works and the action is still announced; the visible label is what shortens. The fix is shorter copy.
- Marketing pages can shift under reduced motion. Some reveal animations resolve differently on the first paint when motion is reduced, producing a brief flicker on entry. It is cosmetic, it is on the list, and it is the kind of thing that is more annoying than it sounds.
- No independent audit and no VPAT. Everything above is self-assessed.
Reporting a problem
If something here does not work for you, email hello@yusufcreates.comand describe what happened and what you were using — the page, the browser, the assistive technology and its version if you know them. Any of that is useful; none of it is required. “The pricing page is unusable” is a perfectly good bug report.
I will reply within one working day and tell you honestly whether and when I can fix it. If a fix is going to take time, I will offer a way to get whatever you were trying to do done in the meantime — including doing it for you.
There is no escalation process beyond me, because there is no one else here. If you are not satisfied with the answer, say so in reply and I will look at it again.
Related
The terms of use cover using this site, the privacy policy covers what is collected, and the cookies page covers what is stored in your browser.