Free for every website

Make room for everyone who visits.

AccessLayer adds an accessibility button to your site. Visitors open it to translate the page into their language, make text bigger, raise the contrast, switch to a dyslexia-friendly font or pause motion. It's free, with no subscription and no tracking.

Set up a website
Try it here

Pick a profile. The whole page changes, through the real widget.

Turned on

    Tools
    17
    One-click profiles
    8
    Gzipped
    40 KB
    Third-party requests on load
    0
    Page languages
    193

    The tools

    Every tool is live. Tap one and watch this page change.

      Multi-step cards move to the next option on each click and wrap back to off, exactly as the panel does. Everything you change here is saved, so it follows you to the console.

      Profiles

      Start from the person, not the settings.

      Eight presets in the same order as UserWay's, so visitors moving between sites find what they already know. A profile replaces the previous one rather than stacking on it, and choosing it again puts the page back.

      How it works

      Mostly CSS. Script only where CSS genuinely can't.

      Attributes on <html>

      Presentation tools are data-mla-* attributes plus one injected stylesheet, so they survive a client-side route change with nothing to re-apply. This is this page's root element, right now:

      document.documentElement
      
                

      Measured, not flattened

      Bigger text scales each element from its own computed size, so headings stay bigger than body. A blanket font-size: 20px !important is what gets that wrong.

      Contrast that keeps the design

      Smart contrast finds each text's real background and moves the colour along its own lightness axis until it passes WCAG 1.4.3. Grey stays grey, just darker.

      This line fails at about 2.1:1. Turn on Smart contrast.

      Sealed in a shadow root

      The widget is one custom element. Your CSS cannot restyle the panel, and the widget's own !important rules cannot reach in and eat it.

      The dashboard

      Install once. Change it from the dashboard after that.

      Sign in, add each website by its exact address, and shape the widget for it. The managed snippet fetches what you publish on every page load, so a new colour or a tool you switch off never needs another embed.

      1. Add a website. Its exact origin, scheme and port included.
      2. Make it yours. Icon, size, colour, desktop and mobile position, or your own button.
      3. Choose the tools. Switch off what a site doesn't need. Saved visitor choices can't bring it back.
      4. Publish and connect. Paste one snippet, then check the connection.
      Connected means the site received its published settings. It is a configuration receipt, not an accessibility score.

      What it won't claim

      No overlay makes a site compliant.
      This one doesn't pretend to.

      01

      Not a compliance fix

      It changes presentation at runtime. It cannot repair heading order, unlabelled controls, or components a screen reader can't drive. The 2024 Title II rule has no overlay safe harbour.

      02

      Not a screen reader

      Read aloud is a reading aid for sighted visitors. People who rely on assistive technology use NVDA, JAWS or VoiceOver, and those need correct markup underneath.

      03

      No AI alt text

      On purpose. Patching labels at runtime hides the problem. Fix them in the source, and let an axe check in your end-to-end suite keep them fixed.

      Privacy

      What leaves the browser. All of it.

      A visitor's settings live in localStorage under access-layer:v1. There is no analytics, no beacon and no visitor account. Two tools can reach the network, and only when a visitor asks them to.

      1. Page load The script, from cdn.example.com. Managed sites also fetch their published settings, without cookies. No third party
      2. Any setting Saved in this browser only, under one key. Stays local
      3. Dictionary The one word looked up goes to Wiktionary, and only while the tool is on. On request
      4. Translate On the device where the browser can. Otherwise Google, through the site's own Cloud key or Google's translator, once the visitor picks a language. Sites can turn Google off. On request

      Install

      One tag. That's the integration.

      Use the managed snippet from the dashboard, or embed a pinned release with its integrity hash and configure it with data-* attributes. Every release keeps its own address forever; /v1/ follows the newest 1.x for pages that should update on their own.

      Pin the version on checkout and account pages, so the browser runs only the file you reviewed.

      Build a tag in the console
      before </body>
      <!-- Copy yours from the dashboard: Installation.
           Appearance and tools come from what you publish. -->
      <script defer data-access-layer data-auto="false"
        src="https://cdn.example.com/access-layer-loader.js"
        data-site="YOUR-SITE-ID"></script>

      Press Ctrl + U on any page that has it.

      Or use the button in the corner of this one. Everything on this page was built to be changed by it. When you're ready, add your site in the dashboard.

      Set up a website