diff --git a/.gitignore b/.gitignore
index 81eb070..403aafc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ test-results
public/src
eslint-report.txt
coverage/
+CLAUDE.md
.vite/
uploads/images/collaborators/
uploads/images/events/
diff --git a/content/i18n/en.md b/content/i18n/en.md
index daebbd8..7a96f30 100644
--- a/content/i18n/en.md
+++ b/content/i18n/en.md
@@ -43,8 +43,22 @@ updatedAt: "2026-05-21T03:25:31.940Z"
"switch_to_light": "Switch to light mode"
},
"a11y": {
- "enable": "Enable accessibility mode: higher contrast, larger text and reduced motion",
- "disable": "Disable accessibility mode"
+ "open": "Accessibility preferences",
+ "title": "Accessibility preferences",
+ "close": "Close",
+ "master": "Turn on every option",
+ "theme_label": "Color theme",
+ "theme_system": "Use system setting",
+ "theme_light": "Light",
+ "theme_dark": "Dark",
+ "text_size_label": "Text size",
+ "text_normal": "Normal",
+ "text_large": "Large",
+ "text_xlarge": "Extra large",
+ "high_contrast": "High contrast",
+ "reduce_motion": "Reduce motion",
+ "underline_links": "Underline links",
+ "reset": "Reset preferences"
},
"itinerary": {
"schedule": "Activity schedule",
diff --git a/content/i18n/es.md b/content/i18n/es.md
index c0f69ed..390ebc7 100644
--- a/content/i18n/es.md
+++ b/content/i18n/es.md
@@ -43,8 +43,22 @@ updatedAt: "2026-05-21T03:25:31.942Z"
"switch_to_light": "Cambiar a modo claro"
},
"a11y": {
- "enable": "Activar modo accesibilidad: mas contraste, letra mas grande y menos animaciones",
- "disable": "Desactivar modo accesibilidad"
+ "open": "Preferencias de accesibilidad",
+ "title": "Preferencias de accesibilidad",
+ "close": "Cerrar",
+ "master": "Activar todas las opciones",
+ "theme_label": "Tema de color",
+ "theme_system": "Usar ajuste del sistema",
+ "theme_light": "Claro",
+ "theme_dark": "Oscuro",
+ "text_size_label": "Tamaño del texto",
+ "text_normal": "Normal",
+ "text_large": "Grande",
+ "text_xlarge": "Muy grande",
+ "high_contrast": "Alto contraste",
+ "reduce_motion": "Reducir animaciones",
+ "underline_links": "Subrayar enlaces",
+ "reset": "Restablecer preferencias"
},
"itinerary": {
"schedule": "Programación de actividades",
diff --git a/package-lock.json b/package-lock.json
index 71f5a13..36ca959 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1269,9 +1269,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.31",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.31.tgz",
- "integrity": "sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==",
+ "version": "2.11.20",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz",
+ "integrity": "sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -1319,9 +1319,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
- "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
+ "version": "4.28.8",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz",
+ "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==",
"dev": true,
"funding": [
{
@@ -1339,11 +1339,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.10.12",
- "caniuse-lite": "^1.0.30001782",
- "electron-to-chromium": "^1.5.328",
- "node-releases": "^2.0.36",
- "update-browserslist-db": "^1.2.3"
+ "baseline-browser-mapping": "^2.11.12",
+ "caniuse-lite": "^1.0.30001809",
+ "electron-to-chromium": "^1.5.402",
+ "node-releases": "^2.0.53",
+ "update-browserslist-db": "^1.3.0"
},
"bin": {
"browserslist": "cli.js"
@@ -1423,9 +1423,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001793",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz",
- "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==",
+ "version": "1.0.30001810",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
+ "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
"dev": true,
"funding": [
{
@@ -1807,9 +1807,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.360",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.360.tgz",
- "integrity": "sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA==",
+ "version": "1.5.420",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz",
+ "integrity": "sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==",
"dev": true,
"license": "ISC"
},
@@ -3913,11 +3913,14 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.44",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz",
- "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==",
+ "version": "2.0.54",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz",
+ "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -4437,9 +4440,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz",
+ "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5627,9 +5630,9 @@
"license": "MIT"
},
"node_modules/update-browserslist-db": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
- "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz",
+ "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==",
"dev": true,
"funding": [
{
diff --git a/package.json b/package.json
index 9489505..edbd6db 100644
--- a/package.json
+++ b/package.json
@@ -11,8 +11,9 @@
"dev": "concurrently -n PUB,ADMIN -c \"cyan,magenta\" \"vite\" \"vite --config vite-admin.config.ts --port 5174\"",
"dev:admin": "pkill -f 'vite.*5174' 2>/dev/null; npx vite --config vite-admin.config.ts --port 5174",
"build": "vite build",
+ "typecheck": "tsc --noEmit",
"test:prepush": "npm run test:drag && npm run build",
- "test:drag": "node --test src/utils/theme.test.js src/utils/accessibility.test.js src/pages/adminDragModel.test.js src/pages/eventPageModel.test.js src/utils/mediaEmbeds.test.js src/utils/adminMediaUpload.test.js src/utils/adminAssetApiValidation.test.js src/utils/adminPathSecurity.test.js src/components/itinerary/itineraryModel.test.js src/components/home/homepageRefinements.test.js",
+ "test:drag": "node --test src/utils/theme.test.js src/utils/accessibility.test.js src/pages/adminDragModel.test.js src/pages/eventPageModel.test.js src/utils/mediaEmbeds.test.js src/utils/adminMediaUpload.test.js src/utils/adminAssetApiValidation.test.js src/utils/adminPathSecurity.test.js src/components/itinerary/itineraryModel.test.js src/components/home/homepageRefinements.test.js src/components/home/heroCanvasBackdrop.test.js",
"test:e2e": "npm run generate:content && playwright test",
"test:e2e:base-path": "playwright test --config playwright.base-path.config.ts",
"setup:hooks": "git config core.hooksPath .githooks",
diff --git a/playwright.config.ts b/playwright.config.ts
index 25980a5..afce3da 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -2,6 +2,7 @@ import { defineConfig, devices } from 'playwright/test';
export default defineConfig({
testDir: './tests/e2e',
+ testIgnore: ['homepageBasePath.spec.ts', 'legalBasePath.spec.ts'],
fullyParallel: true,
reporter: 'line',
use: {
diff --git a/public/api/i18n/en.json b/public/api/i18n/en.json
index d5f3aa3..246170d 100644
--- a/public/api/i18n/en.json
+++ b/public/api/i18n/en.json
@@ -42,8 +42,22 @@
"switch_to_light": "Switch to light mode"
},
"a11y": {
- "enable": "Enable accessibility mode: higher contrast, larger text and reduced motion",
- "disable": "Disable accessibility mode"
+ "open": "Accessibility preferences",
+ "title": "Accessibility preferences",
+ "close": "Close",
+ "master": "Turn on every option",
+ "theme_label": "Color theme",
+ "theme_system": "Use system setting",
+ "theme_light": "Light",
+ "theme_dark": "Dark",
+ "text_size_label": "Text size",
+ "text_normal": "Normal",
+ "text_large": "Large",
+ "text_xlarge": "Extra large",
+ "high_contrast": "High contrast",
+ "reduce_motion": "Reduce motion",
+ "underline_links": "Underline links",
+ "reset": "Reset preferences"
},
"itinerary": {
"schedule": "Activity schedule",
diff --git a/public/api/i18n/es.json b/public/api/i18n/es.json
index eecf25b..52fa27b 100644
--- a/public/api/i18n/es.json
+++ b/public/api/i18n/es.json
@@ -42,8 +42,22 @@
"switch_to_light": "Cambiar a modo claro"
},
"a11y": {
- "enable": "Activar modo accesibilidad: mas contraste, letra mas grande y menos animaciones",
- "disable": "Desactivar modo accesibilidad"
+ "open": "Preferencias de accesibilidad",
+ "title": "Preferencias de accesibilidad",
+ "close": "Cerrar",
+ "master": "Activar todas las opciones",
+ "theme_label": "Tema de color",
+ "theme_system": "Usar ajuste del sistema",
+ "theme_light": "Claro",
+ "theme_dark": "Oscuro",
+ "text_size_label": "Tamaño del texto",
+ "text_normal": "Normal",
+ "text_large": "Grande",
+ "text_xlarge": "Muy grande",
+ "high_contrast": "Alto contraste",
+ "reduce_motion": "Reducir animaciones",
+ "underline_links": "Subrayar enlaces",
+ "reset": "Restablecer preferencias"
},
"itinerary": {
"schedule": "Programación de actividades",
diff --git a/public/index.html b/public/index.html
index 7162bcd..76fb71b 100644
--- a/public/index.html
+++ b/public/index.html
@@ -19,16 +19,6 @@
-