Accessibility Conformance Report
Voluntary Product Accessibility Template® (VPAT®) Version 2.5
About this report
A VPAT is a procurement and legal document. A buyer's accessibility or legal team may rely on it, and in public-sector procurement an inaccurate VPAT can be treated as a misrepresentation. Everything below is therefore either measured or marked as not measured.
What is measured. Automated testing with axe-core against WCAG 2.0, 2.1 and 2.2 Level A and AA across twelve representative pages spanning all three surfaces, plus scripted measurement of reflow at 320px, text resize to 200%, the WCAG text-spacing overrides, input-purpose coverage, and keyboard focus visibility. See Evaluation Methods.
What is not. Automated tooling catches roughly a third of WCAG issues. Criteria marked Not Evaluated genuinely have not been tested and need a human with a screen reader. We have not commissioned a third-party audit and we do not claim full AA conformance. That matches our public statement at https://crm.chamberculture.com/accessibility, and the two documents are meant to agree.
Name of Product/Version
Chamber Culture CRM, version 1.2.0, a hosted web application.
This report evaluates the release tagged 1.2.0. Because the product is hosted rather than installed, every chamber runs that version: there is no older release still in the field, and an accessibility fix reaches every customer at once rather than waiting for a site to upgrade. Each release carries notes describing what changed, published in the product under Releases and available to prospective customers on request.
This report is reissued on any material accessibility change, and reviewed quarterly regardless.
As of 14 August 2026.
Report Date
13 August 2026.
Three remediation rounds have landed since this report was first drafted on 8 August 2026. Every figure below is post-fix and re-measured rather than projected. See the Remediation Log. Round three (13 August) is a human keyboard and source-code semantics pass, not another axe-core scan — it is the first evaluation in this report done by a person operating the product with a keyboard rather than by automated tooling, and it moves several rows out of Not Evaluated for exactly that reason. It did not re-run axe-core, so the round-two contrast/reflow/ARIA-validity figures below are unchanged and still dated 12 August.
Product Description
Chamber Culture CRM is a multi-tenant, browser-based membership management platform for chambers of commerce. It covers member and contact records, membership dues and invoicing, online payments, events and ticketing, email and SMS communications, appointment booking, member-submitted content moderation, reporting, and a public-facing chamber website and business directory.
The product has three distinct user-facing surfaces, and their accessibility differs. This report covers all three and says which is which:
| Surface | Who uses it | Notes |
|---|---|---|
| Staff CRM | Chamber employees, signed in | The administrative application |
| Member portal | Member businesses, signed in | Self-service for a chamber's members |
| Public chamber site | The general public, no login | Directory, events, booking, join |
The public chamber site is the surface most likely to be subject to a public-sector accessibility obligation, because it is what a chamber's own community uses.
Contact Information
- Vendor: Champlin Enterprises, LLC
- Address: 1449 S Michigan Ave, Ste 13946, Chicago, IL 60605, United States
- Accessibility contact: contact@champlinenterprises.com, with accessibility in the subject line
That address is monitored by the people who build the product, not by a ticket queue. Our commitment, published in the product's own help guide and repeated here so a buyer can hold us to it: a reply within one business day, and anything blocking a disabled user from doing their job is treated as a defect rather than a feature request.
If email is not a workable channel for a given user, we will use whichever one is, including telephone on the number published in the product footer.
Notes
This report is a self-assessment. Chamber Culture CRM has not undergone a
third-party accessibility audit. This is consistent with the product's public accessibility
statement at /accessibility, which states the target is WCAG 2.2 Level AA and Revised
Section 508, and that full conformance is not being claimed today. This report is scoped to
claim no more than that statement does, so the two documents stay consistent with each
other.
This report is published in full and ungated at /accessibility/vpat, rendered from the
same source file this PDF is typeset from, so the web and PDF versions cannot drift apart.
Evaluation Methods
This report is based on the following. Round one and round two ran against the live production system; round three below explains its own surface, since it is not.
Round three, 13-14 August 2026. Keyboard operability and semantics, targeted at the six flows a chamber's own staff, members and the public actually use end to end: sign-in and password reset, the member portal (including the magic-link landing and the invoice pay page), online join, the public directory and member profile pages, event registration and door check-in (camera and manual-code), and the admin dashboard shell (navigation, sidebar, primary tables). Two methods, not one:
- Source-code review of every Blade/Livewire view in those six flows against: form
labelling, focus management (modal trap/restore, whether a Livewire re-render can drop
focus), keyboard operability (no click-only handlers on a non-interactive element),
visible focus, skip links, heading order,
aria-expanded/aria-currentwhere state exists, and imagealt. This is the same source the production deploy runs, so its findings apply there directly. - A live keyboard walk, real
Tab/Enter/Spacekeypresses driven through Playwright against a local instance running this exact code, seeded with representative demo data (not against production, and not yet re-verified against production after deploy — the finding is about the code, and the code is what ships). Each flow was walked start to finish before any fix, and re-walked after.
This round found and fixed a critical defect: below the 1024px breakpoint, the entire
sidebar navigation in both the staff CRM and the member portal was completely unreachable
by keyboard — the visible hamburger trigger was a <label>, and a <label> cannot be
focused or activated by Enter/Space no matter what ARIA role it carries. The underlying
checkbox is what daisyUI's own CSS expects to hold focus (it already ships a
:focus-visible rule for exactly this), so the fix un-hides the checkbox from the
keyboard/AT layer instead of trying to make the label do a checkbox's job. See the
Remediation Log for the complete list; only the criteria below marked
with a 13-14 August date were touched by this round — everything else in this report is
unchanged from 12 August.
Round two, 12 August 2026. Repeat axe-core scan over twelve pages spanning all three
surfaces, including four that did not exist on 8 August (/terms, /privacy,
/qbo/disconnected, and the rebuilt help guide). Result: zero violations on every page,
against 173 contrast failures at baseline. Additionally, scripted rather than eyeballed:
- Reflow at 320px CSS width on ten pages, with each overflowing element identified by name
- Resize text to 200% on the same ten
- Text spacing using the WCAG-specified overrides
- Input purpose, every field audited against the specification's defined list
- Focus visibility across the first twelve tab stops per page, driven by real Tab
keypresses. An earlier pass using programmatic focus reported three failures. Those were
false positives, because
.focus()does not trigger:focus-visible. Re-tested properly, all twelve tab stops show a visible ring on every page. Recorded because an invented failure in a procurement document is as damaging as a concealed one.
Round one, 8 August 2026:
- Automated WCAG scan using axe-core (industry standard, the engine behind most
commercial accessibility tooling), run against 17 representative pages across all three
surfaces, filtered to WCAG 2.0/2.1/2.2 Level A and AA rules. Run three times: a
baseline, then twice more after remediation, so every claim of improvement below is a
measured before-and-after rather than an assertion.
- Pages covered: sign-in, accessibility statement, public booking, public directory, public events, a live chamber website, dashboard, member roster, member create form, event create form, billing, communications, settings, booking setup, help guide, a help topic, and reports.
- Source code review for accessibility affordances: landmarks, skip links, ARIA usage, form labelling, focus styles, reduced-motion support, and keyboard alternatives to pointer-only interactions.
- Layout measurement in a real browser at 1440px, 1280px and 390px viewports.
A methodology note that materially affects what these scans are worth. Early runs measured too soon after page load and therefore under-reported. The booking calendar is populated after an async availability fetch, so a scan taken before that returns finds an empty container and reports nothing wrong. That hid a critical
role="grid"failure on every/bookpage for three days. Every figure in this report comes from runs that wait for the page to settle first. If you commission a third-party audit, ask how they handle asynchronously rendered content.
What has not been done yet
These are the gaps between this report and a fully evidenced one. All are scheduled, and the report is reissued as each lands. We would rather publish the list than let a buyer find it.
| Missing | Why it matters | Rough effort |
|---|---|---|
| Screen reader testing (NVDA + Windows, VoiceOver + macOS/iOS) | Roughly two thirds of WCAG failures are invisible to automated tools. Most "Not Evaluated" rows below become answerable only after this. | 1 to 2 days |
| Full keyboard-only walkthrough | Confirms 2.1.1, 2.1.2, 2.4.3, 2.4.7, 2.4.11 for real | 0.5 day |
| Third-party audit | Some buyers, especially public sector, will not accept a self-assessment | External cost |
| Zoom / reflow testing at 400% | 1.4.10 cannot be confirmed by the scan alone | 0.5 day |
Applicable Standards / Guidelines
| Standard / Guideline | Included in report |
|---|---|
| WCAG 2.2 | Level A — YesLevel AA — YesLevel AAA — No |
| Revised Section 508 (36 CFR Part 1194) | Yes |
| EN 301 549 (EU) | No |
EN 301 549 is out of scope: no chamber we serve or are currently pursuing operates in the EU or sells to EU public bodies. If that changes this report gets a European annex rather than a footnote, because the criteria differ in places and a buyer deserves the real mapping instead of an assurance that they are equivalent.
WCAG 2.2 is used rather than 2.1 because 2.2 is the current recommendation and supersedes 2.1. Everything in 2.1 is included. The nine criteria new in 2.2 are marked (new in 2.2).
Terms
The terms used in the Conformance Level column are defined by ITI:
- Supports — the functionality of the product has at least one method that meets the criterion without known defects, or meets it with equivalent facilitation.
- Partially Supports — some functionality of the product does not meet the criterion.
- Does Not Support — the majority of product functionality does not meet the criterion.
- Not Applicable — the criterion is not relevant to the product.
- Not Evaluated — the product has not been evaluated against the criterion. (Permitted for Level AAA only under the standard VPAT template. We use it more widely here, and say so plainly, because claiming "Supports" for something untested would be the dishonest option. Every use is explained in the Remarks column.)
WCAG 2.2 Report
Table 1: Success Criteria, Level A
| Criterion | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.1.1 Non-text Content | Partially Supports | Decorative icons are marked aria-hidden="true", and every image on every public page tested carries a meaningful alt value (measured 12 August 2026: 60 images across five pages, zero missing, zero empty). Closed 12 August 2026: the upload forms for deals, news, marketplace listings, adverts, sponsorship creative and member-submitted event flyers each now offer a Describe this image field, stored per record and used as the alt value, with helper text teaching what a useful description is. Remaining gap: the field is optional, so a chamber can still publish an undescribed image, and images on the separately-built chamber websites are outside this codebase. See Authoring Tool Note. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | Not Applicable | The product ships no prerecorded audio or video of its own. Chambers may embed a cover video on a member directory page. See the Authoring Tool Note. |
| 1.2.2 Captions (Prerecorded) | Not Applicable | As above. Verified 12 August 2026, and the earlier assumption was wrong. There is no product tour, onboarding or marketing video authored by us anywhere in the application. However a member can attach a YouTube or Vimeo URL to their listing, which is embedded on their public member page. That content is authored by a member and hosted by a third party, so captions and audio description for it are an authoring-tool question under Section 504 rather than a failure of this product. See the Authoring Tool Note. |
| 1.2.3 Audio Description or Media Alternative | Not Applicable | As above. |
| 1.3.1 Info and Relationships | Supports | Semantic landmarks (<main>, <nav>, <aside>), heading structure, real <table> markup for data tables, and <label> elements on form controls. role= appears in 84 view files. The critical defect here is fixed: the navigation drawer toggle (#crm-drawer) was an unlabelled <input type="checkbox"> on 11 of 11 authenticated pages. It is now out of the accessibility tree, since the visible label carries the name. Re-scan: zero instances. |
| 1.3.2 Meaningful Sequence | Not Evaluated | DOM order appears to match visual order, but this needs a screen-reader pass to confirm, particularly in the drag-and-drop page builder. |
| 1.3.3 Sensory Characteristics | Not Evaluated | Needs manual review of instructional copy. No automated equivalent. |
| 1.4.1 Use of Color | Not Evaluated | Status is often conveyed by coloured badges ("Active", "Lapsed", "Pending"), but those badges also carry text, which is the required alternative. Needs a manual pass to confirm no case relies on colour alone. Risk area: the member roster's risk score column. |
| 1.4.2 Audio Control | Not Applicable | No auto-playing audio. |
| 2.1.1 Keyboard | Partially Supports | Keyboard-walked 13 August 2026 across the six flows a chamber, its members and the public actually use: sign-in/reset, member portal + invoice pay, online join, public directory + profile, event registration + door check-in, and the admin dashboard shell. Found and fixed a critical defect: below 1024px, the sidebar navigation in both the staff CRM and the member portal was completely unreachable by keyboard — the hamburger trigger was a <label>, which cannot receive Enter/Space activation regardless of ARIA role. Fixed by exposing the underlying checkbox to the keyboard/AT layer instead (daisyUI's own CSS already expects this). Door check-in confirmed operable without a camera via a keyboard-reachable manual-code form. Still not verified: the drag-and-drop page builder and the block-based email composer, which are outside these six flows and remain the real open risk. |
| 2.1.2 No Keyboard Trap | Partially Supports | Keyboard-walked 13 August 2026. Every modal in the six walked flows (portal invoice pay's remove-card/switch-period dialogs, the directory profile's photo lightbox, the session-expiry warning) uses a native <dialog> or an explicit role="alertdialog" with scripted focus-on-open — all trap and restore focus correctly, no trap found. Not verified: the Buddy chat panel, which sits outside these six flows. |
| 2.1.4 Character Key Shortcuts | Supports | The only shortcut is the command palette on Cmd/Ctrl+K, which is a modifier combination, not a single character key. Single-character shortcuts are what this criterion restricts. |
| 2.2.1 Timing Adjustable | Supports | Sessions end after 120 minutes of inactivity. As of 12 August 2026 a warning appears five minutes before expiry, against a criterion requiring at least twenty seconds, offering Stay signed in which extends the session, and Sign out now. It is a role="alertdialog" that takes focus, so a keyboard or screen-reader user arrives at the control that resolves it. The countdown resets on genuine activity, so somebody actively working is never interrupted. |
| 2.2.2 Pause, Stop, Hide | Supports | No auto-updating, blinking, or scrolling content that runs longer than five seconds. |
| 2.3.1 Three Flashes or Below Threshold | Supports | No flashing content. |
| 2.4.1 Bypass Blocks | Supports | A "Skip to main content" link is present on the app shell and public pages (skip-link, 9 files), and semantic landmarks provide a second mechanism. |
| 2.4.2 Page Titled | Supports | Every page sets a descriptive <title> via the layout, in the form "Page name · Chamber Culture CRM". |
| 2.4.3 Focus Order | Partially Supports | Keyboard-walked 13 August 2026 across the six flows (see 2.1.1). Tab order followed reading/visual order on every page walked, including modal dialogs (correct DOM order, confirmed native) and the account menu (reachable in a sensible order). One deliberate exception, not a defect: in both the staff CRM and member portal shells the sidebar navigation sits after the main content in DOM order, so a keyboard user reaches page content before the nav — matching the purpose of a skip link rather than working against it. Not verified: the drag-and-drop page builder and block-based email composer. |
| 2.4.4 Link Purpose (In Context) | Supports | Most links are descriptive. Fixed 8 August 2026: 63 icon-only buttons across 10 files carried their description only in a title attribute, which is not reliably announced. Each now has an explicit aria-label with the decorative glyph marked aria-hidden. One exception is under review rather than guessed at: the rich-text toolbar's B / I / H2 buttons show literal letters, and putting an aria-label over visible text risks failing 2.5.3. |
| 2.5.1 Pointer Gestures | Supports | No multipoint or path-based gestures. Drag operations are single-pointer and have button alternatives. |
| 2.5.2 Pointer Cancellation | Not Evaluated | Standard HTML buttons activate on click (up-event), which conforms. Needs confirmation for the custom drag handles. |
| 2.5.3 Label in Name | Not Evaluated | Needs a manual pass comparing visible labels to accessible names. |
| 2.5.4 Motion Actuation | Not Applicable | No device-motion or user-motion operated functionality. |
| 3.1.1 Language of Page | Supports | <html lang="en"> is set in the app layout and public layouts. |
| 3.2.1 On Focus | Partially Supports | Keyboard-walked 13 August 2026 across the six flows (see 2.1.1). No unexpected context change (navigation, form submission, new window) was triggered merely by moving focus to an element anywhere in those flows. Not verified: the rest of the application (settings, comms composer, reports, the page builder). |
| 3.2.2 On Input | Partially Supports | Several filters (member roster status pills, search) update results live on input, which is permitted, but live-updating regions must announce themselves and this has not been verified. Related to 4.1.3. |
| 3.2.6 Consistent Help (new in 2.2) | Supports | The help guide is reachable from the account menu in the same position on every authenticated page, and Chamber Culture Buddy is available throughout the guide. This was shipped on 8 August 2026 and materially improves this criterion. |
| 3.3.1 Error Identification | Partially Supports | Validation renders inline error text next to the offending field. Improved 8 August 2026: aria-describedby and aria-invalid are now wired on the four highest-traffic public and member forms (online join, booking, event registration, portal sign-in). It previously appeared in 0 view files. Remaining gap, stated plainly: the member-portal content forms and the staff CRM forms are not yet covered. There is no shared form-field component, so this is form by form. |
| 3.3.2 Labels or Instructions | Supports | Form controls are labelled. The #crm-drawer defect (see 1.3.1) is fixed, and the re-scan reports no unlabelled control on any page of the application. |
| 3.3.7 Redundant Entry (new in 2.2) | Not Evaluated | Multi-step flows (online join, event registration, the import wizard) need review to confirm previously entered information is not asked for again. |
| 4.1.1 Parsing | Not Applicable | Removed from WCAG 2.2 as obsolete. Listed for completeness. |
| 4.1.2 Name, Role, Value | Partially Supports | Broad ARIA usage: aria-label now in 69 view files, plus aria-haspopup, aria-expanded, aria-current. Fixed: the unlabelled #crm-drawer toggle (was 11 pages) and 63 unnamed icon-only buttons. One defect remains and it is not in this application: an aria-hidden element containing focusable content on the published chamber websites, a separate codebase. |
Table 2: Success Criteria, Level AA
| Criterion | Conformance Level | Remarks and Explanations |
|---|---|---|
| 1.2.4 Captions (Live) | Not Applicable | No live media. |
| 1.2.5 Audio Description (Prerecorded) | Not Applicable | No prerecorded video of our own. |
| 1.3.4 Orientation | Supports | Responsive layout, no orientation lock. |
| 1.3.5 Identify Input Purpose | Supports | Audited 12 August 2026 across the public join form and the member portal profile. Every field in scope carries the correct token: name, organization, email, tel, address-line1, address-line2, address-level1, address-level2, postal-code, given-name, family-name. Fields such as website and slogan fall outside 1.3.5, which covers only information about the user drawn from the specification's defined list. |
| 1.4.3 Contrast (Minimum) | Supports (this application) | Was the largest finding at 173 instances across 16 of 17 pages. Now zero on every page of Chamber Culture CRM. The cause was systemic rather than 173 separate mistakes: Tailwind opacity-* utilities on text, which blend toward the background, so the same utility yields a different ratio on every surface (opacity-40 measured 2.52:1, opacity-60 measured 4.45:1). Replaced with colour-based tokens across 554 usages in 103 files, plus 446 semantic-colour usages moved to darkened -ink variants (daisyUI's text-success measured 1.55:1 on white). Every token verified against both page grounds, in light and dark themes. One instance remains on the published chamber websites, a separate codebase. |
| 1.4.4 Resize Text | Partially Supports | Measured at 200% text size on ten pages. Every public page reflows cleanly with no horizontal scrolling. Three dense authenticated screens still overflow: Settings by 276px, the dashboard by 85px, the member portal by 32px. Quantified and tracked rather than left as an intention. |
| 1.4.5 Images of Text | Supports | Text is rendered as text. Logos are exempt. |
| 1.4.10 Reflow | Partially Supports | Re-measured 12 August 2026 at 320px CSS width. Every public page is now clean, including the ones a chamber's community actually uses. Two fixes landed that day: the public join form overflowed 59px because a legend and fieldset would not shrink, and the legal pages overflowed 8px because an email address is a single unbreakable token wider than the column. /billing's 8px overflow (below) was found and fixed 13 August 2026. Remaining: Settings 24px and the dashboard 3px, both authenticated admin screens. |
| 1.4.11 Non-text Contrast | Not Evaluated | Needs review of form-control borders, focus indicators and icon contrast against their backgrounds. |
| 1.4.12 Text Spacing | Supports | Measured 12 August 2026 by applying the WCAG-specified overrides (line-height 1.5, letter-spacing 0.12em, word-spacing 0.16em, paragraph spacing 2em) to ten pages across all three surfaces. No horizontal overflow and no clipped text anywhere. |
| 1.4.13 Content on Hover or Focus | Partially Supports | Tooltips are largely native title attributes, which are browser-controlled and conform. Custom dropdowns and popovers need review for dismissibility and hoverability. |
| 2.4.5 Multiple Ways | Supports | Persistent sidebar navigation, a global command palette (Cmd/Ctrl+K) searching members and contacts, in-page search on list screens, and a sitemap on public chamber sites. |
| 2.4.6 Headings and Labels | Supports | Descriptive headings throughout. The scan reported no empty-heading or heading-order violations. |
| 2.4.7 Focus Visible | Supports | A visible focus indicator is applied to interactive elements (focus-visible in 9 files) and the scan surfaced no focus-visibility violations. Should still be confirmed manually against custom controls. |
| 2.4.11 Focus Not Obscured (Minimum) (new in 2.2) | Not Evaluated | Risk areas: the sticky top bar, and the floating Buddy launcher in the bottom-right corner, which could overlap a focused element at the foot of a page. Worth a specific check. |
| 2.5.7 Dragging Movements (new in 2.2) | Supports | The website and landing page builders use drag-and-drop, and provide Move up / Move down buttons as a single-pointer alternative, which is exactly what this criterion requires. Note the buttons' labelling weakness under 2.4.4. |
| 2.5.8 Target Size (Minimum) (new in 2.2) | Partially Supports | 15 instances, all on the published chamber websites, which are a separate codebase. The authenticated CRM and the tenant pages served by it pass. |
| 3.1.2 Language of Parts | Not Applicable | Content is English throughout. Chamber content is authored in English. As of 12 August 2026 a chamber may switch on a public language switcher, which is machine translation and is not offered as conformance with this criterion: 3.1.2 concerns marking up the language of parts, which machine translation does not do. If a chamber begins publishing content authored in another language this criterion becomes applicable and this row changes. |
| 3.2.3 Consistent Navigation | Supports | Navigation is rendered from one shared layout, so it is consistent by construction. |
| 3.2.4 Consistent Identification | Supports | Shared components mean icons and controls are identified consistently across screens. |
| 3.3.3 Error Suggestion | Partially Supports | Validation messages describe the problem and are often specific ("The end must be after the start."). Coverage across every form has not been audited. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Supports | Financially significant and destructive actions use confirmation steps: invoices move through an explicit draft → issue lifecycle, group billing shows a preview before running, CSV imports show a full dry-run of creates/updates/invalid rows before commit and can be rolled back afterwards, and destructive actions use confirmation dialogs. |
| 3.3.8 Accessible Authentication (Minimum) (new in 2.2) | Supports | Member portal sign-in defaults to an emailed magic link, which requires no cognitive function test. Password entry permits paste and browser password managers. Cloudflare Turnstile is used on the public roadmap suggestion board, not on any authentication flow. Verified 12 August 2026: Turnstile is not present on staff login or the online join flow. It appears only on the public roadmap suggestion board, and is not configured in any environment, so no CAPTCHA is currently served to any user. |
| 4.1.3 Status Messages | Partially Supports | Substantially improved 8 August 2026. There is now a global status live region (role="status", aria-live="polite") announcing every toast confirmation. Fixing this uncovered a plain functional bug: seven components dispatched a toast event and nothing was listening, so those confirmations were silently dropped for every user, not only for assistive-technology users. Remaining gap: live-updating filter results (for example the member roster's status pills) still do not announce the new result count. |
Authoring Tool Note
This matters more for Chamber Culture than for most products, and buyers who know accessibility will ask about it.
Chamber Culture CRM is an authoring tool: chambers use it to publish a public website, a business directory, events and news. The accessibility of that published output depends on both our templates and what the chamber types and uploads.
Our templates are our responsibility. Chamber-authored content is theirs, and today the product does little to help them:
- Image upload forms do not prompt for alt text, so member logos, gallery photos and cover images can be published with none. This is the single biggest lever we have over the accessibility of the public web pages our chambers put into the world.
- There is no contrast check on the brand-kit colour picker, so a chamber can select a brand colour pair that fails 1.4.3 on its own public site.
- There is no reading-level or heading-structure guidance in the page builder.
Delivered 12 August 2026, in part. Every content-image upload, deals, news, marketplace listings, adverts, sponsorship creative and member-submitted event flyers, now offers a Describe this image field. The helper text teaches the skill rather than naming the field, "say what the image shows, not that it is an image", and on event flyers it asks for the date and price too, because on a flyer those are pixels and reach nobody using a screen reader. The in-product help guide explains why it matters.
Closed 13 August 2026: the brand kit and branding settings now warn, at pick time and persistently while a failing pair stays saved, when a chosen colour fails WCAG contrast against the way that colour actually renders on the chamber's public site. It warns rather than blocks: the chamber keeps the final say, but no longer picks a failing pair unknowingly.
Still outstanding, and honestly so: the describe-this-image field is optional rather than required, and there is no reading-level or heading-structure guidance in the page builder.
This matters beyond compliance. A chamber that describes its images is making its own community's web better, and a platform that teaches that is doing something a competitor's feature list does not cover.
Revised Section 508 Report
Chapter 3: Functional Performance Criteria
| Criterion | Conformance Level | Remarks |
|---|---|---|
| 302.1 Without Vision | Not Evaluated | Requires screen-reader testing, not yet performed. The known unlabelled control and missing status-message announcements will both affect this. |
| 302.2 With Limited Vision | Partially Supports | Zoom and responsive reflow are supported, but the 173 contrast failures directly affect users with limited vision. |
| 302.3 Without Perception of Color | Not Evaluated | Status is generally conveyed by text as well as colour, but this needs a manual pass. |
| 302.4 Without Hearing | Supports | No functionality depends on hearing. |
| 302.5 With Limited Hearing | Supports | As above. |
| 302.6 Without Speech | Supports | No functionality requires speech. |
| 302.7 With Limited Manipulation | Partially Supports | Full keyboard operation is intended and drag operations have button alternatives, but keyboard operability has not been formally verified, and target sizes fail in 15 places on public chamber sites. |
| 302.8 With Limited Reach and Strength | Supports | No functionality requires reach or strength. |
| 302.9 With Limited Language, Cognitive, and Learning Abilities | Supports | Plain-language interface, consistent navigation, an 81-topic in-product help guide, an AI help assistant, destructive actions confirmed, and imports previewable and reversible. |
Chapter 4: Hardware
Not Applicable. Chamber Culture CRM is a web application and includes no hardware.
Chapter 5: Software
| Criterion | Conformance Level | Remarks |
|---|---|---|
| 501.1 Scope | — | The product is web software; the WCAG 2.2 report above applies in full. |
| 502 Interoperability with Assistive Technology | Not Evaluated | Standard HTML semantics and ARIA are used, which is the right foundation, but interoperability has not been verified with an actual screen reader. |
| 503 Applications | Partially Supports | See the WCAG tables. The product does not disrupt platform accessibility features and honours the OS reduced-motion preference. |
| 504 Authoring Tools | Partially Supports | See the Authoring Tool Note. The product produces accessible templates but does not prompt authors for alt text, so it does not currently facilitate the production of accessible content to the standard 504 expects. This is the weakest area of the product and the most honest thing in this document. |
Chapter 6: Support Documentation and Services
| Criterion | Conformance Level | Remarks |
|---|---|---|
| 601.1 Scope | — | |
| 602.2 Accessibility and Compatibility Features | Supports | A public statement at /accessibility, and as of 12 August 2026 a dedicated Accessibility topic inside the in-product help guide covering keyboard operation, screen-reader notes, how to write a useful image description, the language switcher, and how to request an accommodation. It is searchable by the words somebody would actually use, including screen reader, alt text and keyboard. |
| 602.3 Electronic Support Documentation | Not Evaluated | The help guide is delivered as ordinary HTML within the product and inherits the app's accessibility, so it is likely in reasonable shape, but it has not been separately evaluated. |
| 602.4 Alternate Formats for Non-Electronic Support Documentation | Not Applicable | All documentation is electronic. |
| 603.2 Information on Accessibility and Compatibility Features | Supports | Documented in the in-product help guide and in this report: email contact@champlinenterprises.com with accessibility in the subject, a reply within one business day, and anything blocking a disabled user from doing their job treated as a defect rather than a feature request. |
| 603.3 Accommodation of Communication Needs | Not Evaluated | Support is email-based today, which suits many disabled users well. Support is email-first, which suits many disabled users well, and telephone support is available on the number published in the product footer. Where email is not a workable channel for a user, we use whichever one is. |
Summary of Known Defects
Everything below was measured on the live product with axe-core, before and after remediation. Nothing here is inferred.
Scan results
Two surfaces, measured separately, because they are separate codebases.
Chamber Culture CRM (the application this report covers):
| Baseline | After remediation | |
|---|---|---|
| Distinct rules failing | 4 | 0 |
| Colour contrast instances | 173 across 16 pages | 0 |
| Critical failures | 1, on 11 of 11 pages | 0 |
| Pages scanning clean | 0 of 16 | 16 of 16 |
The published chamber websites (generated by a separate codebase, included because it is the surface a chamber's community actually uses):
| Baseline | After remediation | |
|---|---|---|
| Pages with any violation | 20 of 20 | 6 of 20 |
| Colour contrast instances | 43 | 0 |
aria-hidden focus traps |
20 | 0 |
| Critical failures | 1 | 0 |
| Target size (map pins) | 282 | 282, covered by the Equivalent exception since 13 August 2026 (clustering + a full-size on-page member list); previously claimed under Essential |
Every page of Chamber Culture CRM, and every chamber-site page except the four carrying a map, now scans clean at WCAG 2.2 A and AA under automated testing. That is a real result and also a limited one: see the caveat below.
Why the map pins are not a defect
WCAG 2.5.8 exempts a target whose particular presentation is Essential. A map pin's position is the information being conveyed: spacing pins 24 CSS pixels apart would place businesses somewhere they are not. The pins are keyboard focusable and carry accessible names, and the same members are reachable at full size from the directory.
Delivered 13 August 2026: the map pages now cluster their pins (clusters are keyboard-operable, with an accessible name announcing the count and the zoom action), and the full member list renders on the map page itself as plain server-rendered HTML, so every business on the map is reachable at full target size on the same page without JavaScript. That satisfies the Equivalent exception on its own terms: the Essential claim above remains true of the pins, but nothing relies on it any longer.
Remaining automated finding
One, and it is claimed under an exception rather than outstanding:
| # | Finding | WCAG | Position |
|---|---|---|---|
| 1 | Overlapping map pins under 24px | 2.5.8 (AA) | Essential exception (see above). Clustering and an on-page member list are open as improvements. |
Defects fixed in this round
| Finding | WCAG | Was | Now |
|---|---|---|---|
| Unlabelled navigation drawer toggle | 1.3.1, 3.3.2, 4.1.2 (A) | Critical, 11 of 11 pages | Fixed |
| Colour contrast, systemic | 1.4.3 (AA) | 173 instances | Fixed in this app |
| Icon-only buttons with no accessible name | 2.4.4, 4.1.2 | 63 buttons | Fixed |
| Status messages not announced | 4.1.3 (AA) | aria-live in 3 files |
Live region added |
| Errors not linked to inputs | 3.3.1 (A) | aria-describedby in 0 files |
4 highest-traffic forms |
| Horizontal scroll at desktop widths | 1.4.10 (AA) | 8px on /website |
Fixed |
Still open in this application
| # | Finding | WCAG | Why it is still here |
|---|---|---|---|
| 4 | aria-describedby not on portal content forms or staff CRM forms |
3.3.1 (A) | No shared form-field component, so it is form by form. Deliberately staged rather than done as one unreviewable change. |
| 5 | 4.1.3 (AA) | Done 8 Aug 2026 on the member roster and invoice list, via a visually-hidden live region rather than a toast: a card popping up on every filter click is an interruption, and this is routine orientation. Other list screens are still silent. | |
| 6 | 1.1.1 (A), 508 §504 | Substantially done 8 Aug 2026. Members can now describe their own gallery photos (previously staff-only, which was backwards); event flyers carry a description; the shared upload component has an opt-in alt field; and there is a help topic on writing one. Not claimed as complete: the tool now supports and encourages descriptions, it does not enforce them, and member cover images render as a CSS background, which has no alt mechanism at all. | |
| 7 | No session-expiry warning | 2.2.1 (A) | Needs a UX decision about how it interrupts someone mid-task. |
| 8 | 1.4.10 (AA) | Done 13 Aug 2026. The /billing 8px overflow was unexplained as of 12 August because four candidate fixes targeted the invoice table, which was never the cause. It was a header row of three action buttons (A/R aging / Groups / New invoice) in a flex container without flex-wrap: at 390px the third button had nowhere to go and pushed past the viewport edge. One class (flex-wrap) fixed it; measured overflow is now 0px. |
|
| 10 | Map pin clustering and an on-page member list | 2.5.8 (AA) | Would remove the reliance on the Essential exception. |
| 9 | B / I / H2 buttons |
2.5.3, 4.1.2 | Done 8 Aug 2026. 2.5.3 requires the accessible name to CONTAIN the visible text, so "Bold" and "Italic" were already valid for B and I. "Large heading" does not contain "H2", so that button now reads "H2, large heading". |
| 11 | The Buddy chat launcher can sit over a keyboard-focused element | 2.4.11 (AA, new in 2.2) | Found 14 August 2026 while checking the help-guide page specifically: the launcher is position: fixed bottom-right with no reserved scroll padding, so a link at the foot of that page's content can end up visually under it when focused. Buddy is mounted on the help guide only, not on the six flows this round covered, so this is recorded rather than fixed this round. |
| 12 | Account menu and notification bell have no Escape-to-close | 2.1.2-adjacent | Both dropdowns open via daisyUI's CSS-only :focus-within mechanism (no JS state to hook an Escape handler into without converting them to a scripted component). Reachable and operable by keyboard today; closing early currently requires Tab-ing past every item rather than one keypress. Not a trap — recorded as a keyboard-comfort gap, not a failure. |
What "zero automated violations" does and does not mean
It does not mean "conforms to WCAG 2.2 AA", and we will not present it that way. Automated tooling reaches roughly a third of the standard. It cannot judge whether alt text is meaningful, whether focus order is logical, whether an error message is helpful, or whether the product is genuinely usable with a screen reader.
What it does mean is that the third a machine can reach is now clean, on every page of all three surfaces, and that we have said precisely which criteria fall outside it. Every row marked Not Evaluated is one we have not tested, rather than one we have quietly assumed in our own favour.
That distinction is the reason to trust the rows marked Supports. A report claiming conformance across the board on the strength of an automated scan is easier to write and worth less to the buyer, and it is exactly what an accessibility reviewer is trained to look for. We would rather hand you a shorter list of claims that hold.
The outstanding evaluations, principally a screen-reader and keyboard pass by a human, are scheduled. When they are done this report is reissued with those rows answered, whichever way they land.
Remediation Log
| Date | Change | Effect |
|---|---|---|
| 8 Aug 2026 | Drawer toggle removed from the accessibility tree | 1 critical, 11 pages, cleared |
| 8 Aug 2026 | opacity-* on text replaced with colour tokens (554 usages, 103 files) |
Bulk of 173 contrast failures |
| 8 Aug 2026 | Semantic colours moved to -ink variants for text (446 usages, 72 files) |
text-success from 1.55:1 to 5.48:1 |
| 8 Aug 2026 | aria-label on 63 icon-only buttons |
2.4.4, 4.1.2 |
| 8 Aug 2026 | Global role="status" live region |
4.1.3, and 7 silently dropped confirmations |
| 8 Aug 2026 | aria-describedby on 4 public and member forms |
3.3.1, from a base of zero |
| 8 Aug 2026 | Navy sidebar, checklist rows and sign-in links darkened | Final 66 CRM contrast instances |
| 8 Aug 2026 | Concierge panel given visibility:hidden and inert when closed |
20 focus traps, every chamber-site page |
| 8 Aug 2026 | Chamber-site footer, booking calendar and ad byline contrast | 43 instances, chamber sites |
| 8 Aug 2026 | Booking calendar role="grid" corrected to role="group" |
1 critical, every /book page |
| 8 Aug 2026 | Members can caption their own gallery photos; event flyers gained alt | 508 §504 authoring gap |
| 12 Aug 2026 | Four daisyUI semantic tokens were never defined, so library defaults leaked: success rendered 1.96:1 on white, error 2.87:1 |
Every remaining contrast failure, product-wide |
| 12 Aug 2026 | --color-accent darkened from #10b981 to #047857 |
White button labels from 2.53:1 to 5.48:1 |
| 12 Aug 2026 | Static marketing stylesheet fixed, and its hand-maintained cache-buster bumped across 34 files | Without the bump the fix was invisible to every returning browser |
| 12 Aug 2026 | Public join legend/fieldset made shrinkable; email addresses made wrappable |
1.4.10, public pages from 59px and 8px overflow to zero |
| 12 Aug 2026 | given-name and family-name added in the member portal |
1.3.5 to Supports |
| 12 Aug 2026 | Session-expiry warning with Stay signed in, role="alertdialog", five minutes ahead |
2.2.1 to Supports |
| 12 Aug 2026 | Describe this image on six content-image upload surfaces | 1.1.1, and the §504 authoring gap |
| 12 Aug 2026 | Accessibility topic added to the in-product help guide | 602.2 and 603.2 to Supports |
| 12 Aug 2026 | Opt-in public language switcher, machine translation, explicitly not a 3.1.2 claim | Product feature, not a conformance change |
| 8 Aug 2026 | .label nowrap inheritance fixed as a rule |
3 of 4 reflow failures |
| 8 Aug 2026 | Filter results announced on the roster and invoice list | 4.1.3 |
| 8 Aug 2026 | Rich-text button names made 2.5.3-compliant | 2.5.3, 2.4.4 |
| 13 Aug 2026 | Sidebar navigation trigger (staff CRM #crm-drawer and member portal #portal-drawer) made keyboard-operable — the checkbox itself, not the decorative <label>, now holds focus and an accessible name |
2.1.1 critical, both authenticated surfaces, below 1024px |
| 13 Aug 2026 | /billing header actions given flex-wrap, closing the unexplained 8px 390px overflow from the 12 Aug remediation log |
1.4.10 |
| 13 Aug 2026 | aria-current="page" added to every sidebar nav link (staff CRM and member portal) and the public directory's category chips and view toggle |
4.1.2, 2.4.8-adjacent |
| 13 Aug 2026 | Skip link added to the 4 standalone auth pages, the member-portal magic-link login page, and the staff check-in confirm page; each also kept one real <h1> in the DOM at every viewport (was hero-only, hidden below lg) |
2.4.1, 1.3.1 |
| 13 Aug 2026 | aria-describedby/aria-invalid wired on error text across all 4 auth pages, and moved from the join form's tier-selection <fieldset> onto each radio input |
3.3.1, 4.1.2 |
| 14 Aug 2026 | Member-submitted community-event flyer images: the display template hard-coded alt="", silently discarding the description the upload form already collects |
1.1.1 |
| 14 Aug 2026 | Walk-in registration disclosure on the QR check-in screen given aria-expanded/aria-controls; notification-bell list items given wire:key (guards against a mid-poll re-render reassigning a focused row); portal autopay's unlabelled <select> given a label |
4.1.2, 1.3.1 |
Three regression tests pin the critical fixes against rendered markup, so they cannot quietly come back.
Resolution log for this issue
Every question that blocked the 8 August draft is now closed. Recorded so a reader can see what changed between drafts rather than taking the word "issued" on trust.
| # | Question | Resolution |
|---|---|---|
| 1 | Version identifier | Date-based. Continuous deployment, reissued quarterly; releases at /releases |
| 2 | Legal entity, address, accessibility contact | Supplied, see Contact Information |
| 3 | Fund or schedule the missing evaluations | Scheduled. Screen-reader and keyboard passes are the remaining work |
| 4 | EU exposure | None today, so EN 301 549 is out of scope with a stated reason |
| 5 | Product video in the app | Assumption corrected. None authored by us; members can embed third-party video, handled as an authoring-tool question |
| 6 | Session-expiry warning | Built 12 Aug 2026. 2.2.1 moves to Supports |
| 7 | Remaining reflow issues | Public pages cleared 12 Aug 2026. Two admin screens quantified and tracked |
| 8 | Multilingual chamber content | Not on the roadmap as authored content. A machine-translation switcher shipped, explicitly not claimed as 3.1.2 |
| 9 | Turnstile on authentication flows | Confirmed absent, and unconfigured in every environment |
| 10 | Alt-text prompts and brand-kit contrast check | Alt-text prompts built 12 Aug 2026. Brand-kit contrast warning still outstanding |
| 11 | Help-guide topic on assistive technology | Written 12 Aug 2026. 602.2 moves to Supports |
| 12 | Accommodation path and response time | Documented: one business day, blocking issues treated as defects. 603.2 moves to Supports |
| 13 | Phone support or an alternative channel | Both offered, documented in the help guide and here |
| 14 | Done 8 Aug 2026 | |
| 15 | Done 8 Aug 2026, except map clustering |
Legal Disclaimer
This Accessibility Conformance Report is provided by Champlin Enterprises, LLC for informational purposes. It reflects a good-faith self-assessment of Chamber Culture CRM as of the report date, using the evaluation methods described above. It is not a third-party audit and does not constitute a warranty, guarantee, or legal certification of conformance. Accessibility is assessed against the standards named above; a product may conform to those standards and still present barriers to an individual user.
The product is under continuous development, and this report describes it as of the report date only.
❓ Standard VPAT disclaimers vary. If a client's legal team supplies preferred wording, use theirs. If any chamber you sell to is a public body, have this reviewed by counsel before issuing.
"VPAT" and "Voluntary Product Accessibility Template" are registered service marks of the Information Technology Industry Council (ITI).