Skip to content
7 changes: 7 additions & 0 deletions app/components/AppFooter.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ const isHome = computed(() => route.name === 'index')
>
{{ $t('privacy_policy.title') }}
</NuxtLink>
<NuxtLink
:to="{ name: 'accessibility' }"
:title="$t('a11y.title')"
class="link-subtle font-mono text-xs flex items-center"
>
{{ $t('a11y.footer_title') }}
</NuxtLink>
<a
href="https://docs.npmx.dev"
target="_blank"
Expand Down
153 changes: 153 additions & 0 deletions app/pages/accessibility.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
<script setup lang="ts">
definePageMeta({
name: 'accessibility',
})

useSeoMeta({
title: () => `${$t('a11y.title')} - npmx`,
description: () => $t('a11y.welcome', { app: 'npmx' }),
})

defineOgImageComponent('Default', {
title: () => $t('a11y.title'),
description: () => $t('a11y.welcome', { app: 'npmx' }),
})

const router = useRouter()
</script>

<template>
<main class="container flex-1 py-12 sm:py-16 overflow-x-hidden">
<article class="max-w-2xl mx-auto">
<header class="mb-12">
<div class="flex items-baseline justify-between gap-4 mb-4">
<h1 class="font-mono text-3xl sm:text-4xl font-medium">
{{ $t('a11y.title') }}
</h1>
<button
type="button"
:title="$t('nav.back')"
class="inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors duration-200 rounded focus-visible:outline-accent/70 shrink-0"
@click="router.back()"
>
<span class="i-carbon:arrow-left rtl-flip w-4 h-4" aria-hidden="true" />
<span class="hidden sm:inline">{{ $t('nav.back') }}</span>
</button>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
</div>
</header>

<section class="prose prose-invert max-w-none space-y-8">
<p class="text-fg-muted leading-relaxed">
<i18n-t keypath="a11y.welcome" tag="span" scope="global">
<template #app>
<strong class="text-fg">npmx</strong>
</template>
</i18n-t>
</p>

<!-- Commitment to Accessibility -->
<div>
<h2 class="text-lg text-fg-subtle uppercase tracking-wider mb-4">
{{ $t('a11y.commitment.title') }}
</h2>
<p class="text-fg-muted leading-relaxed">
{{ $t('a11y.commitment.p1') }}
</p>
</div>

<!-- Regulatory Framework and Compliance Status -->
<div>
<h2 class="text-lg text-fg-subtle uppercase tracking-wider mb-4">
{{ $t('a11y.compliance.title') }}
</h2>
<p class="text-fg-muted leading-relaxed mb-4">
<i18n-t keypath="a11y.compliance.p1" tag="span" scope="global">
<template #guidelines>
<strong class="text-fg">{{ $t('a11y.compliance.guidelines') }}</strong>
</template>
<template #aa>
<strong class="text-fg">{{ $t('a11y.compliance.aa') }}</strong>
</template>
</i18n-t>
</p>
<a
:title="$t('a11y.compliance.wcag_alt')"
href="https://www.w3.org/WAI/WCAG2AA-Conformance"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 text-fg-muted hover:text-fg underline decoration-fg-subtle/50 hover:decoration-fg"
>
<img
src="/wcag2.1AA.svg"
width="88"
height="32"
aria-hidden="true"
:alt="$t('a11y.compliance.wcag_alt')"
/>
</a>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
</div>

<!-- Implementation Measures -->
<div>
<h2 class="text-lg text-fg-subtle uppercase tracking-wider mb-4">
{{ $t('a11y.implementation.title') }}
</h2>
<p class="text-fg-muted leading-relaxed mb-4">
{{ $t('a11y.implementation.p1') }}
</p>
<ul class="space-y-3 text-fg-muted list-none p-0 mb-4">
<li class="flex items-start gap-3">
<span class="text-fg-subtle shrink-0 mt-1">&mdash;</span>
<span>{{ $t('a11y.implementation.li1') }}</span>
</li>
<li class="flex items-start gap-3">
<span class="text-fg-subtle shrink-0 mt-1">&mdash;</span>
<span>{{ $t('a11y.implementation.li2') }}</span>
</li>
<li class="flex items-start gap-3">
<span class="text-fg-subtle shrink-0 mt-1">&mdash;</span>
<span>{{ $t('a11y.implementation.li3') }}</span>
</li>
<li class="flex items-start gap-3">
<span class="text-fg-subtle shrink-0 mt-1">&mdash;</span>
<span>{{ $t('a11y.implementation.li4') }}</span>
</li>
<li class="flex items-start gap-3">
<span class="text-fg-subtle shrink-0 mt-1">&mdash;</span>
<span>{{ $t('a11y.implementation.li5') }}</span>
</li>
<li class="flex items-start gap-3">
<span class="text-fg-subtle shrink-0 mt-1">&mdash;</span>
<span>{{ $t('a11y.implementation.li6') }}</span>
</li>
</ul>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
</div>

<!-- Contact and Feedback -->
<div>
<h2 class="text-lg text-fg-subtle uppercase tracking-wider mb-4">
{{ $t('a11y.contact.title') }}
</h2>
<p class="text-fg-muted leading-relaxed">
<i18n-t keypath="a11y.contact.p1" tag="span" scope="global">
<template #app>
<strong class="text-fg">npmx</strong>
</template>
<template #link>
<a
href="https://github.com/npmx-dev/npmx.dev/issues"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 text-fg-muted hover:text-fg underline decoration-fg-subtle/50 hover:decoration-fg"
>
{{ $t('a11y.contact.link') }}
<span class="i-carbon:launch rtl-flip w-4 h-4" aria-hidden="true" />
</a>
</template>
</i18n-t>
</p>
</div>
</section>
</article>
</main>
</template>
32 changes: 32 additions & 0 deletions i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1052,5 +1052,37 @@
"title": "Changes to this policy",
"p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date."
}
},
"a11y": {
"title": "accessibility statement",
"footer_title": "a11y",
"welcome": "We are committed to making the {app} site accessible to everyone.",
"commitment": {
"title": "Commitment to Accessibility",
"p1": "We continuously work to improve the user experience for everyone, applying relevant accessibility standards to ensure our site can be used by the widest possible audience, regardless of their abilities."
},
"compliance": {
"title": "Regulatory Framework and Compliance Status",
"p1": "This site has been developed to comply with the {guidelines} of the World Wide Web Consortium (W3C), aiming for a {aa} conformance level.",
"guidelines": "Web Content Accessibility Guidelines (WCAG 2.1)",
"aa": "Double-A (AA)",
"wcag_alt": "W3C WAI-AA WCAG 2.1 Conformance site (opens in a new window)"
},
"implementation": {
"title": "Implementation Measures",
"p1": "In addition to following the regulatory framework, we have taken the following measures to ensure the accessibility of this site:",
"li1": "The page semantics have been built using standard HTML5 and ARIA roles where necessary.",
"li2": "Text sizes are relative, allowing the user to adjust their size from the browser.",
"li3": "The design is responsive and allows for magnification (zoom) up to 250% without loss of content or functionality, exceeding the 200% minimum required by WCAG 2.1.",
"li4": "The color palette meets Level AA contrast ratios in its standard themes.",
"li5": "Keyboard navigation is logical and predictable.",
"li6": "Animations and transitions are reduced or eliminated for users who have requested reduced motion in their operating system or browser preferences.",
"li7": "The site employs progressive enhancement, ensuring essential content remains accessible without JavaScript, although some personalization features may require it."
},
"contact": {
"title": "Contact and Feedback",
"p1": "Accessibility is an ongoing effort. If you encounter any barriers or have any suggestions to improve the accessibility of {app}, please do not hesitate to contact us by opening an issue on our {link}.",
"link": "GitHub repository"
}
}
}
9 changes: 9 additions & 0 deletions i18n/locales/es-419.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,14 @@
"skeleton": {
"readme": "Léame"
}
},
"a11y": {
"commitment": {
"p1": "Trabajamos continuamente para mejorar la experiencia del usuario para todos, aplicando los estándares de accesibilidad pertinentes para garantizar que nuestro portal pueda ser utilizado por la audiencia más amplia posible, independientemente de sus habilidades."
},
"contact": {
"title": "Contacto y Retroalimentación",
"p1": "La accesibilidad es un esfuerzo continuo. Si encuentras alguna barrera o tienes alguna sugerencia para mejorar la accesibilidad de {app}, por favor no dudes en contactarnos abriendo un problema (issue) en nuestro {link}."
}
Comment thread
userquin marked this conversation as resolved.
Outdated
}
}
32 changes: 32 additions & 0 deletions i18n/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -935,5 +935,37 @@
"vulnerabilities_summary": "{count} ({critical}C/{high}H)"
}
}
},
"a11y": {
"title": "declaración de accesibilidad",
"footer_title": "accesibilidad",
"welcome": "Nos comprometemos a hacer que el sitio {app} sea accesible para todos.",
"commitment": {
"title": "Compromiso con la Accesibilidad",
"p1": "Trabajamos continuamente para mejorar la experiencia de usuario para todos, aplicando los estándares de accesibilidad pertinentes para garantizar que nuestro sitio web pueda ser utilizado por la audiencia más amplia posible, independientemente de sus capacidades."
},
"compliance": {
"title": "Marco Normativo y Estado de Cumplimiento",
"p1": "Este sitio web ha sido desarrollado para cumplir con las {guidelines} del World Wide Web Consortium (W3C), con el objetivo de alcanzar un nivel de conformidad {aa}.",
"guidelines": "Pautas de Accesibilidad para el Contenido Web (WCAG 2.1)",
"aa": "Doble-A (AA)",
"wcag_alt": "Sitio web de Conformidad W3C WAI-AA WCAG 2.1 (se abre en una nueva ventana)"
},
"implementation": {
"title": "Medidas de Implementación",
"p1": "Además de seguir el marco normativo, hemos tomado las siguientes medidas para garantizar la accesibilidad de este sitio web:",
"li1": "La semántica de la página se ha construido utilizando HTML5 estándar y roles ARIA donde es necesario.",
"li2": "Los tamaños de texto son relativos, permitiendo al usuario ajustar su tamaño desde el navegador.",
"li3": "El diseño es responsivo y permite una ampliación (zoom) de hasta el 250% sin pérdida de contenido o funcionalidad, superando el mínimo del 200% requerido por WCAG 2.1.",
"li4": "La paleta de colores cumple con los ratios de contraste de Nivel AA en sus temas estándar.",
"li5": "La navegación por teclado es lógica y predecible.",
"li6": "Las animaciones y transiciones se reducen o eliminan para los usuarios que han solicitado movimiento reducido en las preferencias de su sistema operativo o del navegador.",
"li7": "El sitio web emplea mejora progresiva, asegurando que el contenido esencial permanezca accesible sin JavaScript, aunque algunas funciones de personalización pueden requerirlo."
},
"contact": {
"title": "Contacto y Comentarios",
"p1": "La accesibilidad es un esfuerzo continuo. Si encuentras alguna barrera o tienes alguna sugerencia para mejorar la accesibilidad de {app}, no dudes en contactarnos abriendo un problema (issue) en nuestro {link}.",
"link": "repositorio de GitHub"
}
}
}
32 changes: 32 additions & 0 deletions lunaria/files/en-GB.json
Original file line number Diff line number Diff line change
Expand Up @@ -1052,5 +1052,37 @@
"title": "Changes to this policy",
"p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date."
}
},
"a11y": {
"title": "accessibility statement",
"footer_title": "a11y",
"welcome": "We are committed to making the {app} site accessible to everyone.",
"commitment": {
"title": "Commitment to Accessibility",
"p1": "We continuously work to improve the user experience for everyone, applying relevant accessibility standards to ensure our site can be used by the widest possible audience, regardless of their abilities."
},
"compliance": {
"title": "Regulatory Framework and Compliance Status",
"p1": "This site has been developed to comply with the {guidelines} of the World Wide Web Consortium (W3C), aiming for a {aa} conformance level.",
"guidelines": "Web Content Accessibility Guidelines (WCAG 2.1)",
"aa": "Double-A (AA)",
"wcag_alt": "W3C WAI-AA WCAG 2.1 Conformance site (opens in a new window)"
},
"implementation": {
"title": "Implementation Measures",
"p1": "In addition to following the regulatory framework, we have taken the following measures to ensure the accessibility of this site:",
"li1": "The page semantics have been built using standard HTML5 and ARIA roles where necessary.",
"li2": "Text sizes are relative, allowing the user to adjust their size from the browser.",
"li3": "The design is responsive and allows for magnification (zoom) up to 250% without loss of content or functionality, exceeding the 200% minimum required by WCAG 2.1.",
"li4": "The color palette meets Level AA contrast ratios in its standard themes.",
"li5": "Keyboard navigation is logical and predictable.",
"li6": "Animations and transitions are reduced or eliminated for users who have requested reduced motion in their operating system or browser preferences.",
"li7": "The site employs progressive enhancement, ensuring essential content remains accessible without JavaScript, although some personalization features may require it."
},
"contact": {
"title": "Contact and Feedback",
"p1": "Accessibility is an ongoing effort. If you encounter any barriers or have any suggestions to improve the accessibility of {app}, please do not hesitate to contact us by opening an issue on our {link}.",
"link": "GitHub repository"
}
}
}
32 changes: 32 additions & 0 deletions lunaria/files/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -1052,5 +1052,37 @@
"title": "Changes to this policy",
"p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date."
}
},
"a11y": {
"title": "accessibility statement",
"footer_title": "a11y",
"welcome": "We are committed to making the {app} site accessible to everyone.",
"commitment": {
"title": "Commitment to Accessibility",
"p1": "We continuously work to improve the user experience for everyone, applying relevant accessibility standards to ensure our site can be used by the widest possible audience, regardless of their abilities."
},
"compliance": {
"title": "Regulatory Framework and Compliance Status",
"p1": "This site has been developed to comply with the {guidelines} of the World Wide Web Consortium (W3C), aiming for a {aa} conformance level.",
"guidelines": "Web Content Accessibility Guidelines (WCAG 2.1)",
"aa": "Double-A (AA)",
"wcag_alt": "W3C WAI-AA WCAG 2.1 Conformance site (opens in a new window)"
},
"implementation": {
"title": "Implementation Measures",
"p1": "In addition to following the regulatory framework, we have taken the following measures to ensure the accessibility of this site:",
"li1": "The page semantics have been built using standard HTML5 and ARIA roles where necessary.",
"li2": "Text sizes are relative, allowing the user to adjust their size from the browser.",
"li3": "The design is responsive and allows for magnification (zoom) up to 250% without loss of content or functionality, exceeding the 200% minimum required by WCAG 2.1.",
"li4": "The color palette meets Level AA contrast ratios in its standard themes.",
"li5": "Keyboard navigation is logical and predictable.",
"li6": "Animations and transitions are reduced or eliminated for users who have requested reduced motion in their operating system or browser preferences.",
"li7": "The site employs progressive enhancement, ensuring essential content remains accessible without JavaScript, although some personalization features may require it."
},
"contact": {
"title": "Contact and Feedback",
"p1": "Accessibility is an ongoing effort. If you encounter any barriers or have any suggestions to improve the accessibility of {app}, please do not hesitate to contact us by opening an issue on our {link}.",
"link": "GitHub repository"
}
}
}
32 changes: 32 additions & 0 deletions lunaria/files/es-419.json
Original file line number Diff line number Diff line change
Expand Up @@ -935,5 +935,37 @@
"vulnerabilities_summary": "{count} ({critical}C/{high}H)"
}
}
},
"a11y": {
"title": "declaración de accesibilidad",
"footer_title": "accesibilidad",
"welcome": "Nos comprometemos a hacer que el sitio {app} sea accesible para todos.",
"commitment": {
"title": "Compromiso con la Accesibilidad",
"p1": "Trabajamos continuamente para mejorar la experiencia del usuario para todos, aplicando los estándares de accesibilidad pertinentes para garantizar que nuestro portal pueda ser utilizado por la audiencia más amplia posible, independientemente de sus habilidades."
},
"compliance": {
"title": "Marco Normativo y Estado de Cumplimiento",
"p1": "Este sitio web ha sido desarrollado para cumplir con las {guidelines} del World Wide Web Consortium (W3C), con el objetivo de alcanzar un nivel de conformidad {aa}.",
"guidelines": "Pautas de Accesibilidad para el Contenido Web (WCAG 2.1)",
"aa": "Doble-A (AA)",
"wcag_alt": "Sitio web de Conformidad W3C WAI-AA WCAG 2.1 (se abre en una nueva ventana)"
},
"implementation": {
"title": "Medidas de Implementación",
"p1": "Además de seguir el marco normativo, hemos tomado las siguientes medidas para garantizar la accesibilidad de este sitio web:",
"li1": "La semántica de la página se ha construido utilizando HTML5 estándar y roles ARIA donde es necesario.",
"li2": "Los tamaños de texto son relativos, permitiendo al usuario ajustar su tamaño desde el navegador.",
"li3": "El diseño es responsivo y permite una ampliación (zoom) de hasta el 250% sin pérdida de contenido o funcionalidad, superando el mínimo del 200% requerido por WCAG 2.1.",
"li4": "La paleta de colores cumple con los ratios de contraste de Nivel AA en sus temas estándar.",
"li5": "La navegación por teclado es lógica y predecible.",
"li6": "Las animaciones y transiciones se reducen o eliminan para los usuarios que han solicitado movimiento reducido en las preferencias de su sistema operativo o del navegador.",
"li7": "El sitio web emplea mejora progresiva, asegurando que el contenido esencial permanezca accesible sin JavaScript, aunque algunas funciones de personalización pueden requerirlo."
},
"contact": {
"title": "Contacto y Retroalimentación",
"p1": "La accesibilidad es un esfuerzo continuo. Si encuentras alguna barrera o tienes alguna sugerencia para mejorar la accesibilidad de {app}, por favor no dudes en contactarnos abriendo un problema (issue) en nuestro {link}.",
"link": "repositorio de GitHub"
}
}
}
Loading
Loading