diff --git a/package-lock.json b/package-lock.json index 96da3ca5..68afea17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,18 @@ { - "name": "keepandroidopen.org", + "name": "keepandroidopen-dot-org", "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "keepandroidopen.org", + "name": "keepandroidopen-dot-org", "version": "0.0.1", "dependencies": { + "@fontsource-variable/source-sans-3": "^5.3.0", + "@fontsource-variable/source-serif-4": "^5.3.0", + "@fontsource/ibm-plex-sans-arabic": "^5.3.0", + "@fontsource/ibm-plex-sans-hebrew": "^5.3.0", + "@fontsource/noto-naskh-arabic": "^5.3.0", "astro": "^6.3.3", "marked": "^17.0.2", "rehype-autolink-headings": "^7.1.0", @@ -598,6 +603,51 @@ "node": ">=18" } }, + "node_modules/@fontsource-variable/source-sans-3": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/source-sans-3/-/source-sans-3-5.3.0.tgz", + "integrity": "sha512-dpi0GZk7EQe2tYpg6Q0Fx0OmUgnuGu+0rHPgtXqtKhglYmJuP7jZ12Mu1uN+NfRaJRY1Emn8AQJEWzmoZ4wa9g==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource-variable/source-serif-4": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource-variable/source-serif-4/-/source-serif-4-5.3.0.tgz", + "integrity": "sha512-9vch9WqxjaaA+1o9Ur8pOgIGbCYLjRReOUel23A6lOpD1syptgjtkORevvNmldJ5kGXQL29onQUqI5Ltz0s3bQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/ibm-plex-sans-arabic": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-sans-arabic/-/ibm-plex-sans-arabic-5.3.0.tgz", + "integrity": "sha512-ZZ4g+JDgQY0NqSh4o0MNWU1sHQmtcee1g++aKAwyJvZxnT5y51JXsN1cIXnaQaMd40dcbK6QFYa+Z1LbaiNuqA==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/ibm-plex-sans-hebrew": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-sans-hebrew/-/ibm-plex-sans-hebrew-5.3.0.tgz", + "integrity": "sha512-6sYM3VzG65AnG1jul3dl+H8eBWYfx6Rqzm7946VNBIXx/ArU1NR5ZKdFx80EDehVqdbPsLOpP1fjImQFjVMopg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/noto-naskh-arabic": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-naskh-arabic/-/noto-naskh-arabic-5.3.0.tgz", + "integrity": "sha512-S/GDgQ6mh/PKo4mz5+eXNYbEarvpI7yh6eCdOz8tTVbeM7+OUiacIEscaYEibr/+egDtGbO2ZB00sjy1bJC1kQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@html-validate/stylish": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.2.0.tgz", diff --git a/package.json b/package.json index d44dc201..12ad57ae 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,11 @@ "validate": "html-validate 'dist/**/*.html'" }, "dependencies": { + "@fontsource-variable/source-sans-3": "^5.3.0", + "@fontsource-variable/source-serif-4": "^5.3.0", + "@fontsource/ibm-plex-sans-arabic": "^5.3.0", + "@fontsource/ibm-plex-sans-hebrew": "^5.3.0", + "@fontsource/noto-naskh-arabic": "^5.3.0", "astro": "^6.3.3", "marked": "^17.0.2", "rehype-autolink-headings": "^7.1.0", diff --git a/src/components/BackArrow.astro b/src/components/BackArrow.astro index d971a2d4..f278e6fe 100644 --- a/src/components/BackArrow.astro +++ b/src/components/BackArrow.astro @@ -16,12 +16,13 @@ display: inline-flex; align-items: center; justify-content: center; - width: 2rem; - height: 2rem; - padding: 0.3rem; + width: 2.75rem; + height: 2.75rem; + padding: 0; border-radius: 0.5rem; + border: 1px solid var(--pico-muted-border-color); color: var(--pico-muted-color, #888); - opacity: 0.6; + opacity: 0.8; text-decoration: none; transition: opacity 0.2s ease, transform 0.2s ease, background-color 0.2s ease; } @@ -31,6 +32,14 @@ background-color: rgba(128, 128, 128, 0.08); color: var(--pico-color, inherit); } + + :global([dir='rtl']) .back-arrow svg { + transform: scaleX(-1); + } + + :global([dir='rtl']) .back-arrow:hover { + transform: translateX(2px); + } .back-arrow:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; diff --git a/src/components/LanguagePicker.astro b/src/components/LanguagePicker.astro index 24f05903..a390514a 100644 --- a/src/components/LanguagePicker.astro +++ b/src/components/LanguagePicker.astro @@ -10,7 +10,7 @@ * (e.g. "cta/" for CTA page so entries link to /{locale}/cta/). * For English ("en"), the root is "/" so "/cta/" is the result. */ -import { languages } from '../i18n/config'; +import { languages, isRtl } from '../i18n/config'; interface Props { locale: string; @@ -20,6 +20,7 @@ interface Props { const { locale, suffix = '' } = Astro.props; const currentLabel = languages[locale as keyof typeof languages]?.label ?? 'English'; const entries = Object.entries(languages) as [string, { label: string; path: string }][]; +const menuId = `language-picker-${locale}-${suffix || 'home'}`.replace(/[^a-zA-Z0-9_-]/g, '-'); // Build the URL for a given locale, honoring the suffix function localeHref(code: string, basePath: string): string { @@ -30,19 +31,31 @@ function localeHref(code: string, basePath: string): string { ---
- -
+
+
diff --git a/src/components/ThemeToggle.astro b/src/components/ThemeToggle.astro index e6add2b7..28501f4e 100644 --- a/src/components/ThemeToggle.astro +++ b/src/components/ThemeToggle.astro @@ -1,8 +1,8 @@ -