Field Guide

Accessibility Statement

Accessibility practices for Web Design Tampa Florida. We target WCAG 2.1 AA, the legal compliance bar. What that means, what we’ve fixed, what’s still in progress.

3 minRead time
800Words
Knowledge guideFormat

This site targets WCAG 2.1 AA compliance — the legal standard for ADA accessibility in the United States. That isn’t a marketing line. It’s the bar Tampa Bay healthcare, legal, government, and education clients get sued for missing, and we won’t ship a site that doesn’t meet it. Here’s what that means for webdesigntampaflorida.org, what we’ve already verified, what’s still being improved, and how to report a problem if you find one.

What WCAG 2.1 AA means

The Web Content Accessibility Guidelines (WCAG) 2.1 AA is the international accessibility standard cited by the U.S. Department of Justice, most state attorneys general, and the courts in ADA Title III cases. Compliance is checked across four pillars:

  • Perceivable — content can be presented in ways users can perceive (alt text on images, captions on video, sufficient color contrast)
  • Operable — navigation works via keyboard alone, no time traps, no flashing content that triggers seizures
  • Understandable — content reads clearly, forms include labels and error guidance, navigation is predictable
  • Robust — content works across assistive technologies (screen readers, voice control, switch devices)

AA is the middle tier (A < AA < AAA). It's the level the courts and federal agencies treat as the de facto legal floor. AAA is aspirational; A is incomplete.

What we’ve verified on this site

The following have been audited and pass WCAG 2.1 AA at the time of this writing:

  • Color contrast — every text/background combination meets the 4.5:1 ratio for body text and 3:1 for large text. Tested with axe DevTools and WebAIM Contrast Checker.
  • Keyboard navigation — every interactive element (links, buttons, form fields, megamenu dropdowns) is reachable with the Tab key. Focus indicators are visible and have at least 3:1 contrast with their background.
  • Heading hierarchy — every page has exactly one H1, then logical H2/H3/H4 progression. We don’t skip levels.
  • Alt text — every meaningful image has descriptive alt text. Decorative images have empty alt="" attributes (per WCAG best practice).
  • Form labels — every form field has a visible element associated via for= / id=. Error messages reference the field by name.
  • Skip-to-content link — first focusable element on every page jumps past the header nav.
  • Page titles — every page has a unique, descriptive </code> tag.</li> <li><strong>Language declaration</strong> — every page declares <code>lang="en-US"</code> on the <code><html></code> element.</li> <li><strong>ARIA landmarks</strong> — <code><header></code>, <code><nav></code>, <code><main></code>, <code><aside></code>, <code><footer></code> are semantic; ARIA landmarks are used where semantic HTML can’t carry the meaning.</li> </ul> </div> </section><section id="whats-still-in-progress" class="wdtf-aka-chapter"> <div class="wdtf-aka-chapter__num" aria-hidden="true">№ 03</div> <h2 class="wdtf-aka-chapter__h2">What’s still in progress</h2> <div class="wdtf-aka-chapter__body"> <p>We’re honest about this part:</p> <ul> <li><strong>Video captions</strong> — if we add video content in the future (we don’t currently embed any), every video will ship with captions and a text transcript.</li> <li><strong>Mobile screen-reader testing</strong> — we’ve verified VoiceOver on desktop Safari and NVDA on Windows. Mobile VoiceOver (iOS) and TalkBack (Android) testing is in our quarterly QA cycle, not every release.</li> <li><strong>Color-blind variant testing</strong> — primary brand colors test clean for Deuteranopia and Protanopia. Tritanopia testing is pending.</li> </ul> </div> </section><section id="how-we-test" class="wdtf-aka-chapter"> <div class="wdtf-aka-chapter__num" aria-hidden="true">№ 04</div> <h2 class="wdtf-aka-chapter__h2">How we test</h2> <div class="wdtf-aka-chapter__body"> <p>Three layers:</p> <ol> <li><strong>Automated tools</strong> — axe DevTools, WAVE, and Lighthouse Accessibility in our pre-launch QA. Catches ~30-50% of issues.</li> <li><strong>Manual keyboard + screen-reader testing</strong> — we Tab through every page and read the first three sections aloud with NVDA before launch.</li> <li><strong>Color contrast spot-checks</strong> — WebAIM contrast checker on every text/background combination in the design system.</li> </ol> <p>We don’t claim 100% perfection. We claim a documented process, a published statement, and a fast response when problems are reported.</p> </div> </section><section id="found-a-problem-tell-us" class="wdtf-aka-chapter wdtf-aka-chapter--accent"> <div class="wdtf-aka-chapter__num" aria-hidden="true">№ 05</div> <h2 class="wdtf-aka-chapter__h2">Found a problem? Tell us.</h2> <div class="wdtf-aka-chapter__body"> <p>If you encounter any accessibility barrier on this site — anything that prevents you from using a page, reading content, or completing a form — we want to know.</p> <p><strong>Email:</strong> hello@webdesigntampaflorida.com (subject line: “Accessibility”) <strong>Response window:</strong> One business day for acknowledgment; remediation timeline depends on severity (critical issues fixed within 5 business days, non-critical within 30 days).</p> <p>When reporting, include if you can:</p> <ul> <li>The URL where the problem occurred</li> <li>Your browser, operating system, and assistive technology (if any)</li> <li>A description of what went wrong (or what you expected to happen)</li> </ul> <p>We treat accessibility reports as bug reports, not customer service complaints. They go straight to the engineering queue.</p> </div> </section><section id="third-party-content" class="wdtf-aka-chapter"> <div class="wdtf-aka-chapter__num" aria-hidden="true">№ 06</div> <h2 class="wdtf-aka-chapter__h2">Third-party content</h2> <div class="wdtf-aka-chapter__body"> <p>We use third-party services that have their own accessibility commitments:</p> <ul> <li><strong>Google Analytics</strong> — admin-only; never shown to public visitors</li> <li><strong>Gravity Forms</strong> — form fields meet WCAG 2.1 AA when configured correctly; we configure them that way</li> <li><strong>Google Fonts</strong> — we self-host critical fonts via <code>display=swap</code> so screen readers don’t wait</li> </ul> <p>We monitor these dependencies; if a third-party update introduces an accessibility regression, we work around it or replace the dependency.</p> </div> </section><section id="our-broader-accessibility-practice" class="wdtf-aka-chapter"> <div class="wdtf-aka-chapter__num" aria-hidden="true">№ 07</div> <h2 class="wdtf-aka-chapter__h2">Our broader accessibility practice</h2> <div class="wdtf-aka-chapter__body"> <p>This statement isn’t just about our own site. We offer a <a href="/services/">WCAG 2.1 AA accessibility audit and fix service</a> for Tampa Bay businesses — particularly healthcare, legal, government, and education clients who face direct ADA exposure. If you’re a Tampa Bay business that wants to know whether your current site meets the bar, send us a <a href="/contact/">5-minute brief</a> or get the <a href="/seo-audit/">$500 SEO audit</a> (which includes an accessibility scan).</p> </div> </section><section id="this-statement-was-last-updated-2026-05-14" class="wdtf-aka-chapter wdtf-aka-chapter--accent"> <div class="wdtf-aka-chapter__num" aria-hidden="true">№ 08</div> <h2 class="wdtf-aka-chapter__h2">This statement was last updated 2026-05-14.</h2> <div class="wdtf-aka-chapter__body"> </div> </section> </div> </div> <section class="wdtf-aka-cta" id="contact"> <div class="wdtf-aka-cta__inner"> <div> <div class="wdtf-aka-cta__eyebrow">Web Design Tampa Florida</div> <h2 class="wdtf-aka-cta__headline">Want this applied to <em>your</em> Tampa business?</h2> <p class="wdtf-aka-cta__sub">If you’re working through this for a real Tampa project, get a written diagnostic instead of guessing. The $500 SEO audit is refundable against any build engagement.</p> <div class="wdtf-aka-cta__buttons"> <a class="wdtf-aka-btn wdtf-aka-btn--primary" href="/contact/">Get a fixed-price quote →</a> <a class="wdtf-aka-btn wdtf-aka-btn--ghost" href="/seo-audit/">Get the $500 audit</a> </div> </div> <div class="wdtf-aka-cta__card"> <div class="wdtf-aka-cta__card-num">$500</div> <div class="wdtf-aka-cta__card-lbl">Written SEO audit · <strong>refundable against any build</strong></div> </div> </div> </section> </div> <script type="application/ld+json">{"@context": "https://schema.org", "@type": "Article", "headline": "Accessibility Statement", "description": "Accessibility practices for Web Design Tampa Florida. We target WCAG 2.1 AA, the legal compliance bar. What that means, what we've fixed, what's still in progress.", "author": {"@type": "Organization", "name": "Web Design Tampa Florida"}, "publisher": {"@type": "Organization", "name": "Web Design Tampa Florida", "url": "https://webdesigntampaflorida.org"}, "datePublished": "2026-05-14", "mainEntityOfPage": "https://webdesigntampaflorida.org/accessibility/", "image": {"@type": "ImageObject", "url": "https://webdesigntampaflorida.org/wp-content/uploads/2026/05/hero-bayshore-balustrade-sunset-819x1024.webp", "width": 819, "height": 1024}}</script></div> </main> <footer class="wp-block-template-part"> <footer class="wdtf-footer"> <span class="litho-fleuron wdtf-footer__fleuron" aria-hidden="true" style="margin-top:0;margin-bottom:2.5rem;filter:invert(1) brightness(1.2) sepia(0.4) hue-rotate(10deg);"></span> <div class="wdtf-footer__inner"> <div class="wdtf-footer__brand"> <a href="/" class="wdtf-logo">Web Design <span>Tampa</span> Florida</a> <p class="wdtf-footer__seal-line"> <span class="litho-label" style="color:var(--wp--preset--color--sun-gold);font-size:11px;">№ 1932 · Tampa, Fla.</span> </p> <p>Custom WordPress design + local SEO for Tampa Bay service businesses and B2B companies between $1M and $20M revenue.</p> <p style="font-size:0.85rem;">Crating & shipping authority sites from Hillsborough, Pinellas & Pasco counties.</p> </div> <div> <h4>Services</h4> <a href="/services/custom-website-design/">Custom design</a> <a href="/services/website-redesign/">Redesign</a> <a href="/services/local-seo/">Local SEO</a> <a href="/services/landing-pages/">Landing pages</a> <a href="/services/maintenance/">Care plans</a> </div> <div> <h4>Tampa Bay</h4> <a href="/web-design-tampa-fl/">Tampa</a> <a href="/web-design-brandon-fl/">Brandon</a> <a href="/web-design-riverview-fl/">Riverview</a> <a href="/web-design-plant-city-fl/">Plant City</a> <a href="/web-design-westchase-fl/">Westchase</a> <a href="/web-design-wesley-chapel-fl/">Wesley Chapel</a> </div> <div> <h4>Company</h4> <a href="/about/">About</a> <a href="/approach/">Approach</a> <a href="/learn/">Resources</a> <a href="/see-if-were-a-fit/">See if we’re a fit</a> </div> </div> <div class="wdtf-footer__bottom"> <span>© 2026 Web Design Tampa Florida · Picked, packed & shipped in Tampa, Fla.</span> <span> <a class="inline" href="/privacy/">Privacy</a> · <a class="inline" href="/accessibility/">Accessibility</a> · <a class="inline" href="/see-if-were-a-fit/">Contact</a> </span> </div> </footer> <div class="wdtf-sticky-cta"> <strong>Fixed price · 14-day delivery · Refundable audit</strong> <a href="/see-if-were-a-fit/">See if we’re a fit →</a> </div> </footer> </div> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/wdtf/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="wdtf-multistep-a11y-fallback"> (function () { 'use strict'; var form = document.querySelector('.wdtf-multistep'); if (!form) return; // Mirror required -> aria-required form.querySelectorAll('[required]').forEach(function (f) { if (!f.hasAttribute('aria-required')) f.setAttribute('aria-required', 'true'); }); // Ensure aria-live error region exists var errorRegion = form.querySelector('.wdtf-multistep__error'); if (!errorRegion) { errorRegion = document.createElement('div'); errorRegion.className = 'wdtf-multistep__error'; errorRegion.setAttribute('role', 'alert'); errorRegion.setAttribute('aria-live', 'polite'); errorRegion.setAttribute('aria-atomic', 'true'); var note = form.querySelector('.wdtf-cta__form-note'); if (note && note.parentNode === form) form.insertBefore(errorRegion, note); else form.appendChild(errorRegion); } // Ensure step counter announces changes var counter = form.querySelector('.wdtf-multistep__counter'); if (counter && !counter.hasAttribute('aria-live')) { counter.setAttribute('aria-live', 'polite'); counter.setAttribute('aria-atomic', 'true'); } // On Continue click — if validation passes, focus first field of next step. // This piggy-backs on the existing handler (we listen during bubbling, after it ran). form.addEventListener('click', function (e) { var btn = e.target.closest('.wdtf-multistep__next, .wdtf-multistep__back'); if (!btn) return; setTimeout(function () { var active = form.querySelector('.wdtf-multistep__step.is-active'); if (!active) return; var first = active.querySelector('input:not([type=hidden]), select, textarea'); if (first && document.activeElement !== first) { try { first.focus(); } catch (err) {} } }, 75); }, false); // Mark invalid fields aria-invalid when they get .has-error (MutationObserver). if ('MutationObserver' in window) { var mo = new MutationObserver(function (mutations) { mutations.forEach(function (m) { if (m.type === 'attributes' && m.attributeName === 'class') { var el = m.target; if (el.classList.contains('has-error')) { el.setAttribute('aria-invalid', 'true'); if (errorRegion && !errorRegion.textContent) { errorRegion.textContent = 'Please complete the highlighted field before continuing.'; } } else { el.removeAttribute('aria-invalid'); } } }); }); form.querySelectorAll('input, select, textarea').forEach(function (el) { mo.observe(el, { attributes: true, attributeFilter: ['class'] }); }); } })(); </script> <script data-wp-strategy="defer" defer id="wdtf-main-js" src="https://webdesigntampaflorida.org/wp-content/themes/wdtf/assets/js/main.js?ver=2.0.11"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://webdesigntampaflorida.org/wp-includes/js/wp-emoji-release.min.js?ver=91419f15db623307f6e797dbdaddc9ae"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://webdesigntampaflorida.org/wp-includes/js/wp-emoji-loader.min.js </script> <script id="wdtf-cf7-ga4"> document.addEventListener('wpcf7mailsent', function (event) { if (typeof gtag === 'function') { gtag('event', 'audit_form_submit', { event_category: 'lead', event_label: 'cf7-' + (event.detail ? event.detail.contactFormId : 'unknown'), value: 1 }); } if (typeof dataLayer !== 'undefined') { dataLayer.push({ event: 'audit_form_submit', form_id: event.detail ? event.detail.contactFormId : null }); } }, false); // On validation failure, move focus to the first invalid field document.addEventListener('wpcf7invalid', function (event) { setTimeout(function () { var inv = event.target.querySelector('.wpcf7-not-valid'); if (inv) inv.focus(); }, 50); }, false); </script> </body> </html> <!-- Page cached by LiteSpeed Cache 7.8.1 on 2026-07-27 18:12:47 -->