Skip to content

Fix broken CSS variable references and add dual-mode accessibility scans#545

Closed
mattobee wants to merge 9 commits intomainfrom
opencode/shiny-wolf
Closed

Fix broken CSS variable references and add dual-mode accessibility scans#545
mattobee wants to merge 9 commits intomainfrom
opencode/shiny-wolf

Conversation

@mattobee
Copy link
Copy Markdown
Member

Summary

  • Fixed 3 broken CSS custom property references in _light.css and _dark.css that were missed when variables were renamed from --color-* to --s-color-* during the Dark Mode PR. The masthead foreground color (--c-masthead-color-fg) referenced the non-existent --color-on-primary instead of --s-color-on-primary, causing the theme switcher icon to render as grey on a purple background in light mode — a contrast failure. The same naming issue affected footer link colors in both themes.
  • Added axe-core scans in explicit light and dark modes across all 5 pages (10 new tests) to catch theme-specific contrast regressions that the existing system-default-only scans could miss.

Implement dynamic event pages at /events/[slug] with full event details,
structured data (JSON-LD + Schema.org), per-event Open Graph meta tags,
breadcrumb navigation, and accessible markup.

- Add slug field to Event and ChildEvent TypeScript interfaces
- Add getEventBySlug() GROQ query to Sanity client
- Add getEventUrl() helper for generating internal event URLs
- Create [slug].astro SSR route with event content, speakers list,
  child events, badges, and external website link
- Extend default layout to accept description and ogType props
- Update Event.vue, StaticEvent.astro, and EventChild.vue to link
  titles to internal event pages instead of external websites
- Add backfill-slugs.mjs migration script for existing events
- Add 16 E2E tests covering accessibility, structured data, meta tags,
  breadcrumbs, and 404 handling

Closes #529, closes #531, closes #532, closes #533, closes #534, closes #535
The TimezoneSelector previously depended on EventList to fetch user
geo data. When landing directly on an event detail page, geo was null
and the switcher showed 'Loading timezone...' permanently. Now the
component fetches /api/get-user-info itself if the data isn't already
available.
EventDate and TimezoneSelector were separate Astro islands (separate
Vue app instances) so they didn't share Vue reactivity. Changing the
timezone in one island didn't trigger a re-render in the other.

Fix by wrapping both in a single EventDateWithTimezone.vue component
so they hydrate as one Vue island with shared reactive state.
Switch EventDateWithTimezone from client:load to client:only="vue"
to prevent Shoelace event listener hydration mismatch that caused
the timezone dropdown to stop working after a hard page refresh.

Add /events/index.astro as a 301 redirect to the homepage.
Three CSS custom property references were missed when variables were renamed
from --color-* to --s-color-* in the Dark Mode PR, causing the masthead
foreground to fall back to inherited grey (invisible icon on purple background
in light mode) and footer links to lose their color in both themes.

Adds axe-core scans in explicit light and dark modes across all pages to catch
theme-specific contrast regressions.
@mattobee mattobee added bug Something isn't working accessibility Accessibility defects or suggestions CSS testing labels Feb 23, 2026
@github-project-automation github-project-automation Bot moved this to Not Started in Eventua11y Feb 23, 2026
@netlify
Copy link
Copy Markdown

netlify Bot commented Feb 23, 2026

Deploy Preview for eventua11y ready!

Name Link
🔨 Latest commit a66d666
🔍 Latest deploy log https://app.netlify.com/projects/eventua11y/deploys/699cd90ba90d6a00085a8673
😎 Deploy Preview https://deploy-preview-545--eventua11y.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Comment thread tests/event-page.spec.ts

test.describe('Event detail page - 404 handling', () => {
test('non-existent slug redirects to 404', async ({ page }) => {
const response = await page.goto('/events/this-event-does-not-exist-12345');
@mattobee mattobee closed this Feb 23, 2026
@github-project-automation github-project-automation Bot moved this from Not Started to Done in Eventua11y Feb 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accessibility Accessibility defects or suggestions bug Something isn't working CSS testing

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant