Hidden page · accessibility

Accessibility statement

Built to work without a mouse, without JavaScript and without perfect eyesight. Here is specifically what we did, and what we know is still imperfect.

Request · quote · pickup

Found a barrier?

Tell us in the message field. Accessibility reports go straight to the person who maintains the site.

Letters only — no numbers.

As it appears on your paperwork.

A real inbox you read — throwaway addresses are rejected.

US or Canada only. Format: (###) ###-#### — it formats as you type.

Optional.

Optional.

Fills itself in from your ZIP.

US ZIP (23224) or Canadian (K1A 0B1). Checked against real ranges.

Whole number of units.

Pick one or type your own.

Routes your request to the right person.

Leave blank if you are unsure.

Plain text, up to 2,000 characters.

Every field is checked before it leaves your browser and again on our server — phone numbers against the North American numbering plan, ZIP codes against real USPS ranges. It keeps the bots out and means a real human reads every submission within one business day.

What we have done

  • Every link on this site is a real anchor element with a working href. Navigation does not depend on JavaScript.
  • The slide-out main menu is driven by a checkbox and CSS, so it opens and closes with JavaScript disabled. Its submenus are native <details> elements.
  • Every form submits to a server endpoint (/api/leads) with a standard POST, so the contact forms work without JavaScript — invalid submissions come back to the contact page naming the fields that need fixing. With JavaScript they validate inline and submit without a page change.
  • All accordions are native <details> elements — keyboard operable and announced correctly by screen readers.
  • Form fields have persistent visible labels, not placeholder-only labels, and required fields are marked visually, with the required attribute, and with a format hint. Validation errors are announced with role=alert, linked to their field with aria-describedby and aria-invalid, and summarised at the top of the form with in-page links to each problem field.
  • Focus is visible throughout with a 2px outline and 3px offset. The skip link is the first focusable element on every page.
  • The full-screen request dialog traps nothing it should not, closes on Escape, moves focus to its close button, restores focus on exit and locks background scrolling.
  • Body text sits above 4.5:1 contrast on both the bone and ink grounds; interface text above 3:1.
  • All motion respects prefers-reduced-motion, including the hero assembly animation, the marquee and the rotating stamp.
  • Wide specification tables scroll inside their own container rather than forcing the page sideways, and use proper <th scope> headers with captions.

What we know is imperfect

  • The menu toggle is a label bound to a hidden checkbox so it can work without JavaScript. That is a deliberate trade: it is keyboard reachable via the checkbox, but it is not a native button, and some screen readers announce it less cleanly than a button would.
  • The interactive calculators — the Loop Ledger, the footprint comparator and the Pallet Passport lookup — require JavaScript. They render their default state as readable text without it, and each carries a <noscript> note telling you to email us for the same figures.
  • The footprint comparator conveys its primary comparison visually. The table underneath it carries the same information in text, which is why the table is there.
  • The yard plan on the 'inside the yard' page is decorative schematic and is not a substitute for directions.

Tell us

If something here does not work for you, email hello@pallets-recycle.com and describe what happened, including the assistive technology you were using. We will fix it and tell you when we have. We would rather know.

Next step

Let's get wood moving

Whether you have 40 broken pallets behind the building or need 4,000 a month, the next step is the same: tell us the footprint and the frequency.

Start a request