What we built so a page can be used
Every page starts with a skip link. It is the first thing a keyboard reaches. It jumps to the main column and leaves the menu behind.
The menu on a phone is one row labelled Menu. It opens a list, one link on each row, and each row is at least 44 pixels tall. On a wider screen the same links sit in a row and the Menu label hides. Nothing in that row depends on a script.
Body type is 18 pixels. The ink is dark on a white page. Links in a paragraph are underlined. A picture that is a link carries a line that says Click or Tap, and that line stays visible without a hover. A picture that is not a link does not pretend to be one.
Forms name every field in a label tied to the input. The button says what it sends. Errors from the browser stay next to the field that needs them. We do not trap focus inside a layer, and we do not open a layer on our own.
The calendar on the booking page does not load until you use the button above the frame. With scripts off, the phone number in the footer is the way to reach the practice.
Headings are real heading elements, in order, so a heading list in a browser matches the page. The first heading on each page is the only one at that level. Contrast for body text is dark ink on white, and the buttons are white on the rose. We do not convey a state by color alone. A required field is marked required in the label's control, and the browser announces it.
Motion is limited to a small lift on a linked card. If your system asks for less motion, that lift stops. Nothing plays by itself. Nothing counts down.
The chat chip sits in a corner and can be moved off a control by the offset on that page. If it covers a button or a field at rest, tell us by phone and we will move it.
If a page will not scroll, will not focus, or hides its text, call the number in the footer and name the page. That is the correction path. We change the page itself.