diff --git a/docs/package-lock.json b/docs/package-lock.json index bd230f2fe5..29cd5a7e25 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -154,6 +154,7 @@ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.35.2.tgz", "integrity": "sha512-curGghoW4s5pCbW2tINsJPoxEYPan87ptCOv7GZ+S24N3J6AyaOu/OsjZDEMaIpo3ZlObM5DQn+w7iXl3drDhQ==", "license": "MIT", + "peer": true, "dependencies": { "@astrojs/markdown-remark": "^6.3.1", "@astrojs/mdx": "^4.2.3", @@ -388,6 +389,7 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -1385,6 +1387,7 @@ "integrity": "sha512-DNCbwkAKugzCtiHJg/7DciIRwnKwAI2QH3VWWC1cVxoBBQTPnH5D9HcWqpDdduUqnCuW2PY78afVo+QlaInDdQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@csstools/postcss-is-pseudo-class": "^5.0.3", "cssesc": "^3.0.0", @@ -2426,6 +2429,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2609,6 +2613,7 @@ "resolved": "https://registry.npmjs.org/astro/-/astro-5.15.9.tgz", "integrity": "sha512-XLDXxu0282cC/oYHswWZm3johGlRvk9rLRS7pWVWSne+HsZe9JgrpHI+vewAJSSNHBGd1aCyaQOElT5RNGe7IQ==", "license": "MIT", + "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -3155,6 +3160,7 @@ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", @@ -3549,6 +3555,7 @@ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10" } @@ -3949,6 +3956,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -4189,7 +4197,8 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "peer": true }, "node_modules/dfa": { "version": "1.2.0", @@ -6456,6 +6465,7 @@ "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.12.1.tgz", "integrity": "sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==", "license": "MIT", + "peer": true, "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.1", @@ -7867,6 +7877,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -7981,6 +7992,7 @@ "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8618,6 +8630,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -9831,6 +9844,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -10121,6 +10135,7 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -10259,6 +10274,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/docs/src/components/CopyEntireFileButton.astro b/docs/src/components/CopyEntireFileButton.astro index 7d491d4f08..60aa1556ed 100644 --- a/docs/src/components/CopyEntireFileButton.astro +++ b/docs/src/components/CopyEntireFileButton.astro @@ -39,6 +39,15 @@ const id = `copy-btn-${Math.random().toString(36).substr(2, 9)}`; font-family: inherit; } + /* Mobile-specific: Increase touch targets to meet WCAG 2.1 Level AAA (44x44px) */ + @media (max-width: 768px) { + .copy-entire-file-btn { + min-height: 44px; + min-width: 44px; + padding: 0.75rem 1rem; + } + } + .copy-entire-file-btn:hover { background: var(--sl-color-gray-6); } diff --git a/docs/src/components/ThemeToggle.astro b/docs/src/components/ThemeToggle.astro index cb56e2caa8..510998204e 100644 --- a/docs/src/components/ThemeToggle.astro +++ b/docs/src/components/ThemeToggle.astro @@ -120,6 +120,16 @@ const autoIcon = octicons['device-desktop'].toSVG({ width: 16, height: 16 }); position: relative; } + /* Mobile-specific: Ensure minimum 44x44px touch target for WCAG 2.1 Level AAA */ + @media (max-width: 768px) { + .icon-wrapper { + width: 44px; + height: 44px; + min-width: 44px; + min-height: 44px; + } + } + .icon-wrapper:hover { background: rgba(110, 118, 129, 0.1); color: #f0f6fc; diff --git a/docs/src/content/docs/labs.mdx b/docs/src/content/docs/labs.mdx index e58cbd30d7..177834f70b 100644 --- a/docs/src/content/docs/labs.mdx +++ b/docs/src/content/docs/labs.mdx @@ -21,7 +21,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Blog Auditor](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/blog-auditor.md) | claude | [![Blog Auditor](https://github.com/githubnext/gh-aw/actions/workflows/blog-auditor.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/blog-auditor.lock.yml) | - | - | | [Brave Web Search Agent](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/brave.md) | copilot | [![Brave Web Search Agent](https://github.com/githubnext/gh-aw/actions/workflows/brave.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/brave.lock.yml) | - | - | | [Breaking Change Checker](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/breaking-change-checker.md) | copilot | [![Breaking Change Checker](https://github.com/githubnext/gh-aw/actions/workflows/breaking-change-checker.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/breaking-change-checker.lock.yml) | - | - | -| [Campaign Generator - Optimized Phase 1](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/campaign-generator.md) | copilot | [![Campaign Generator - Optimized Phase 1](https://github.com/githubnext/gh-aw/actions/workflows/campaign-generator.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/campaign-generator.lock.yml) | - | - | +| [Campaign Generator - Optimized Phase 1](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/campaign-generator.md) | claude | [![Campaign Generator - Optimized Phase 1](https://github.com/githubnext/gh-aw/actions/workflows/campaign-generator.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/campaign-generator.lock.yml) | - | - | | [Campaign: Discussion Task Mining for Code Quality](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/discussion-task-mining.campaign.md) | claude | [![Campaign: Discussion Task Mining for Code Quality](https://github.com/githubnext/gh-aw/actions/workflows/discussion-task-mining.campaign.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/discussion-task-mining.campaign.lock.yml) | - | - | | [Campaign: Documentation Quality & Maintenance (Project 73)](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/docs-quality-maintenance-project67.campaign.md) | claude | [![Campaign: Documentation Quality & Maintenance (Project 73)](https://github.com/githubnext/gh-aw/actions/workflows/docs-quality-maintenance-project67.campaign.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/docs-quality-maintenance-project67.campaign.lock.yml) | - | - | | [Campaign: File Size Reduction (Project 71)](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/file-size-reduction-project71.campaign.md) | claude | [![Campaign: File Size Reduction (Project 71)](https://github.com/githubnext/gh-aw/actions/workflows/file-size-reduction-project71.campaign.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/file-size-reduction-project71.campaign.lock.yml) | - | - | @@ -52,6 +52,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Daily News](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-news.md) | copilot | [![Daily News](https://github.com/githubnext/gh-aw/actions/workflows/daily-news.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-news.lock.yml) | `0 9 * * 1-5` | - | | [Daily Project Performance Summary Generator (Using Safe Inputs)](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-performance-summary.md) | codex | [![Daily Project Performance Summary Generator (Using Safe Inputs)](https://github.com/githubnext/gh-aw/actions/workflows/daily-performance-summary.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-performance-summary.lock.yml) | - | - | | [Daily Secrets Analysis Agent](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-secrets-analysis.md) | copilot | [![Daily Secrets Analysis Agent](https://github.com/githubnext/gh-aw/actions/workflows/daily-secrets-analysis.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-secrets-analysis.lock.yml) | - | - | +| [Daily Team Evolution Insights](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-team-evolution-insights.md) | claude | [![Daily Team Evolution Insights](https://github.com/githubnext/gh-aw/actions/workflows/daily-team-evolution-insights.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-team-evolution-insights.lock.yml) | - | - | | [Daily Team Status](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-team-status.md) | copilot | [![Daily Team Status](https://github.com/githubnext/gh-aw/actions/workflows/daily-team-status.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-team-status.lock.yml) | - | - | | [Daily Workflow Updater](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/daily-workflow-updater.md) | copilot | [![Daily Workflow Updater](https://github.com/githubnext/gh-aw/actions/workflows/daily-workflow-updater.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/daily-workflow-updater.lock.yml) | - | - | | [DeepReport - Intelligence Gathering Agent](https://github.com/githubnext/gh-aw/blob/main/.github/workflows/deep-report.md) | codex | [![DeepReport - Intelligence Gathering Agent](https://github.com/githubnext/gh-aw/actions/workflows/deep-report.lock.yml/badge.svg)](https://github.com/githubnext/gh-aw/actions/workflows/deep-report.lock.yml) | `0 15 * * 1-5` | - | diff --git a/docs/src/styles/custom.css b/docs/src/styles/custom.css index 4fa526b23e..072045b1fc 100644 --- a/docs/src/styles/custom.css +++ b/docs/src/styles/custom.css @@ -446,6 +446,24 @@ body:has(.hero)::before { background: transparent !important; } +/* Mobile-specific: Increase touch targets for sidebar navigation */ +@media (max-width: 768px) { + .sidebar .top-level > li > details > summary, + .sidebar .top-level > li > a { + min-height: 44px; + display: flex; + align-items: center; + padding: 0.75rem 1rem; + } + + .sidebar nav li li a { + min-height: 44px; + display: flex; + align-items: center; + padding: 0.75rem 1rem; + } +} + .sidebar nav li li a:hover { color: #f0f6fc; background-color: transparent !important; @@ -591,6 +609,25 @@ header::after { transition: opacity 0.2s ease; } +/* Mobile-specific: Increase touch targets for header anchor links */ +@media (max-width: 768px) { + .sl-markdown-content h1 a.header-anchor, + .sl-markdown-content h2 a.header-anchor, + .sl-markdown-content h3 a.header-anchor, + .sl-markdown-content h4 a.header-anchor, + .sl-markdown-content h5 a.header-anchor, + .sl-markdown-content h6 a.header-anchor, + .sl-markdown-content :is(h1, h2, h3, h4, h5, h6) a[aria-label^="Permalink"] { + min-width: 44px; + min-height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.5rem; + opacity: 0.5; /* Make visible on mobile for better discoverability */ + } +} + .sl-markdown-content :is(h1, h2, h3, h4, h5, h6):hover a[aria-label^="Permalink"] { opacity: 0.2; } @@ -836,6 +873,19 @@ header::after { border-bottom-color: rgba(216, 150, 255, 0.3); } +/* Mobile-specific: Add padding to inline links for better touch targets */ +@media (max-width: 768px) { + .sl-markdown-content p a, + .sl-markdown-content li a { + padding: 0.25rem 0.125rem; + margin: -0.25rem -0.125rem; + display: inline-block; + min-height: 44px; + line-height: 1.6; + vertical-align: middle; + } +} + :root[data-theme='light'] .sl-markdown-content a { color: #0969da; } @@ -869,6 +919,17 @@ nav a[aria-current="page"] { color: #010409 !important; } +/* Mobile-specific: Ensure social icons have adequate touch targets */ +@media (max-width: 768px) { + .social-icons a { + min-width: 44px; + min-height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + } +} + :root[data-theme='light'] .icon-wrapper { color: #424a53 !important; } @@ -1199,6 +1260,17 @@ html { color: #f0f6fc; } +/* Mobile-specific: Ensure site title has adequate touch target */ +@media (max-width: 768px) { + .site-title { + min-height: 44px; + min-width: 44px; + display: inline-flex; + align-items: center; + padding: 0.5rem; + } +} + /* Mobile Navigation - Ensure header elements are visible on mobile */ @media (max-width: 769px) { /* Keep custom header links visible on mobile but make them more compact */ @@ -1208,9 +1280,15 @@ html { margin-right: 0.5rem !important; } + /* Increase touch target size for header links to meet WCAG 2.1 Level AAA (44x44px) */ .header-link { - padding: 0.25rem 0.5rem !important; + padding: 0.625rem 0.75rem !important; /* Increased from 0.25rem 0.5rem */ font-size: 0.8125rem !important; + min-height: 44px !important; + min-width: 44px !important; + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; } /* Ensure theme toggle is visible on mobile */ @@ -1230,6 +1308,17 @@ html { display: none !important; } + /* Ensure search button meets minimum touch target */ + site-search button[data-open-modal], + site-search button[aria-label="Search"] { + min-height: 44px !important; + min-width: 44px !important; + padding: 0.75rem !important; + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + } + /* Force theme toggle and social icons to stay visible on mobile ONLY on landing page (with hero) */ body:has(.hero) header starlight-theme-select, body:has(.hero) .header starlight-theme-select, @@ -1266,11 +1355,12 @@ html { visibility: visible !important; } - /* Make theme toggle easier to tap on mobile */ + /* Make theme toggle easier to tap on mobile - WCAG 2.1 Level AAA (44x44px) */ starlight-theme-select .icon-wrapper { - width: 2.5rem !important; - height: 2.5rem !important; - min-width: 2.5rem !important; + width: 44px !important; + height: 44px !important; + min-width: 44px !important; + min-height: 44px !important; } /* Ensure proper spacing on mobile header */ @@ -1289,6 +1379,18 @@ html { font-weight: 600 !important; } +/* Mobile-specific: Ensure primary buttons meet minimum touch target */ +@media (max-width: 768px) { + .sl-link-button.primary, + .sl-link-button { + min-height: 44px !important; + padding: 0.75rem 1.5rem !important; + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + } +} + .sl-link-button.primary:hover { background: rgba(139, 92, 246, 0.5) !important; border-color: #8b5cf6 !important; @@ -1426,3 +1528,29 @@ main, padding-right: 1rem; } } + +/* Mobile-specific: Additional touch target improvements for remaining elements */ +@media (max-width: 768px) { + /* Skip to content link - accessibility feature */ + a[href="#_top"], + a[class*="skip"] { + min-height: 44px !important; + min-width: 44px !important; + padding: 0.75rem 1rem !important; + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + } + + /* Anchor links in markdown content */ + .sl-anchor-link, + a.sl-anchor-link, + .sl-markdown-content .sl-anchor-link { + min-height: 44px !important; + min-width: 44px !important; + padding: 0.75rem !important; + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + } +}