diff --git a/CLAUDE.md b/CLAUDE.md index 80f0961..c2cc8d3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,19 +2,9 @@ ## プロジェクト概要 -**APG Patterns Examples** は、WAI-ARIA Authoring Practices Guide (APG) のコンポーネントパターンを React、Vue、Svelte、Astro の4つのフレームワークで実装し、実際に動作するデモと詳細なコード解説を提供するプロジェクトです。 +**APG Patterns Examples** は、WAI-ARIA Authoring Practices Guide (APG) のコンポーネントパターンを React、Vue、Svelte、Astro の4つのフレームワークで実装し、実際に動作するデモとテストを提供するプロジェクト。 -### プロジェクトの目標 - -- APG準拠のアクセシブルなコンポーネント実装 -- フレームワーク別のベストプラクティス提供 -- プロダクション品質のコード -- 日英バイリンガル対応 -- GitHub Pages での自動デプロイ - ---- - -## 技術スタック(Astro リビルド版) +## 技術スタック | レイヤー | 技術 | | -------------- | ------------------------------ | @@ -317,54 +307,7 @@ Astro テンプレート内で React/Vue/Svelte の子コンポーネントを ### コマンド -```bash -# 開発サーバー起動 -npm run dev -# ※ポートは自動割当(空いているポートが使用される) -# 起動後にターミナル出力でポート番号を確認すること - -# ビルド -npm run build - -# テスト(全て: unit + e2e) -npm run test - -# ユニットテスト(全フレームワーク) -npm run test:unit - -# フレームワーク別ユニットテスト -npm run test:react -npm run test:vue -npm run test:svelte -npm run test:astro # Container API テスト - -# E2E テスト(Playwright) -npm run test:e2e -npm run test:e2e:ui # UI モード - -# 特定パターンの E2E テスト -npm run test:e2e:pattern --pattern=tabs -npm run test:e2e:pattern --pattern=accordion - -# 特定フレームワーク + 特定パターン(要: npm run dev 別ターミナル) -npm run test:e2e:react:pattern --pattern=tabs -npm run test:e2e:vue:pattern --pattern=tabs - -# その他 -npm run test:watch # ウォッチモード -npm run test:coverage # カバレッジ - -# フォーマット -npm run format # Prettier + mdx-formatter(並列実行) -npm run format:mdx # MDX のみ(mdx-formatter) -npm run format:mdx:check # MDX フォーマットチェック - -# リント -npm run lint # 全チェック(並列実行) -npm run lint:eslint # ESLint のみ -npm run lint:types # TypeScript 型チェックのみ -npm run lint:astro # Astro チェックのみ -``` +package.jsonのscriptsを参照 ### コーディングスタイル規約 @@ -391,11 +334,3 @@ const rowcount = await grid.getAttribute('aria-rowcount'); - [shadcn/ui](https://ui.shadcn.com/) - [プロジェクトサイト](https://masup9.github.io/apg-patterns-examples/) - [リポジトリ](https://github.com/masuP9/apg-patterns-examples) - ---- - -## 移行状況 - -現在、Docusaurus + 3 Storybook 構成から Astro への移行を計画中。 - -詳細は [.internal/site-specification.md](.internal/site-specification.md) を参照。 diff --git a/CODING_RULES.md b/CODING_RULES.md index 8436421..a1fde1b 100644 --- a/CODING_RULES.md +++ b/CODING_RULES.md @@ -475,3 +475,4 @@ const config = thirdPartyLib.getConfig() as Config; // TODO: 型定義改善待 - ARIA属性の適切な使用 - キーボードナビゲーション対応必須 - スクリーンリーダー対応 +- `prefers-contrast` メディアクエリの値は `more` / `less` / `no-preference` / `custom` を使う(`high` / `low` は仕様にない値) diff --git a/src/patterns/menubar/menubar.css b/src/patterns/menubar/menubar.css index 6db3e00..cd35496 100644 --- a/src/patterns/menubar/menubar.css +++ b/src/patterns/menubar/menubar.css @@ -565,31 +565,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-menubar[role='menubar'], - .apg-menubar [role='menubar'] { - border: 2px solid currentColor; - } - - .apg-menubar-menu, - .apg-menubar [data-menubar-menu], - .apg-menubar-submenu, - .apg-menubar [data-submenu] { - border-width: 2px; - } - - .apg-menubar-trigger:focus, - .apg-menubar [data-menubar-trigger]:focus, - .apg-menubar-menuitem:focus, - .apg-menubar-menu [role='menuitem']:focus, - .apg-menubar-menu [role='menuitemcheckbox']:focus, - .apg-menubar-menu [role='menuitemradio']:focus { - outline: 3px solid #facc15; - outline-offset: -3px; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-menubar-trigger, diff --git a/src/styles/global.css b/src/styles/global.css index bc96c72..3a4ad1c 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -105,6 +105,43 @@ --sidebar-ring: oklch(0.556 0 0); } +/* Design tokens - prefers-contrast: more overrides + 各パターン CSS では @media (prefers-contrast: more) を持たず、 + ここで定義した高コントラスト版の変数が自動で適用される */ +@media (prefers-contrast: more) { + :root { + --background: oklch(1 0 0); + --foreground: oklch(0.08 0 0); + --primary: oklch(0.08 0 0); + --primary-foreground: oklch(1 0 0); + --secondary: oklch(0.94 0 0); + --secondary-foreground: oklch(0.08 0 0); + --muted: oklch(0.94 0 0); + --muted-foreground: oklch(0.3 0 0); + --accent: oklch(0.92 0 0); + --accent-foreground: oklch(0.08 0 0); + --border: oklch(0.5 0 0); + --input: oklch(0.42 0 0); + --ring: oklch(0.08 0 0); + } + + .dark { + --background: oklch(0.08 0 0); + --foreground: oklch(1 0 0); + --primary: oklch(1 0 0); + --primary-foreground: oklch(0.08 0 0); + --secondary: oklch(0.2 0 0); + --secondary-foreground: oklch(1 0 0); + --muted: oklch(0.2 0 0); + --muted-foreground: oklch(0.82 0 0); + --accent: oklch(0.24 0 0); + --accent-foreground: oklch(1 0 0); + --border: oklch(0.82 0 0); + --input: oklch(0.55 0 0); + --ring: oklch(1 0 0); + } +} + /* Prevent layout shift when scrollbar appears/disappears (e.g., modal dialogs) */ html { scrollbar-gutter: stable; diff --git a/src/styles/patterns/accordion.css b/src/styles/patterns/accordion.css index 13c413f..e824f60 100644 --- a/src/styles/patterns/accordion.css +++ b/src/styles/patterns/accordion.css @@ -143,23 +143,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-accordion { - border-width: 4px; - } - - .apg-accordion-trigger--expanded { - background: black; - color: white; - } - - .apg-accordion-trigger:not(.apg-accordion-trigger--expanded):not(:disabled) { - background: white; - color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-accordion-trigger, diff --git a/src/styles/patterns/alert-dialog.css b/src/styles/patterns/alert-dialog.css index 6c1d793..ef05262 100644 --- a/src/styles/patterns/alert-dialog.css +++ b/src/styles/patterns/alert-dialog.css @@ -187,17 +187,6 @@ body:has(dialog.apg-alert-dialog[open]) { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-alert-dialog { - border-width: 2px; - } - - dialog.apg-alert-dialog::backdrop { - background: rgba(0, 0, 0, 0.8); - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-alert-dialog, diff --git a/src/styles/patterns/button.css b/src/styles/patterns/button.css index 518b6ef..604fade 100644 --- a/src/styles/patterns/button.css +++ b/src/styles/patterns/button.css @@ -55,17 +55,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-button { - border: 2px solid currentColor; - } - - .apg-button[aria-disabled='true'] { - border-style: dashed; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-button { diff --git a/src/styles/patterns/carousel.css b/src/styles/patterns/carousel.css index c261275..79f5e8a 100644 --- a/src/styles/patterns/carousel.css +++ b/src/styles/patterns/carousel.css @@ -311,26 +311,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-carousel-tab-indicator { - opacity: 1; - background: black; - } - - .apg-carousel-tab--selected .apg-carousel-tab-indicator { - background: #facc15; - } - - .apg-carousel-play-pause, - .apg-carousel-prev, - .apg-carousel-next { - border-width: 2px; - background: white; - color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-carousel-tab, diff --git a/src/styles/patterns/checkbox.css b/src/styles/patterns/checkbox.css index 7d75b60..76428f4 100644 --- a/src/styles/patterns/checkbox.css +++ b/src/styles/patterns/checkbox.css @@ -120,23 +120,6 @@ apg-checkbox { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-checkbox-control { - border-width: 3px; - } - - .apg-checkbox-input:checked + .apg-checkbox-control, - .apg-checkbox-input:indeterminate + .apg-checkbox-control { - background-color: black; - border-color: black; - } - - .apg-checkbox-icon { - color: white; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-checkbox-control, diff --git a/src/styles/patterns/combobox.css b/src/styles/patterns/combobox.css index 6e93fa1..40372b2 100644 --- a/src/styles/patterns/combobox.css +++ b/src/styles/patterns/combobox.css @@ -190,32 +190,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-combobox-input { - border-width: 2px; - } - - .apg-combobox-listbox { - border-width: 2px; - } - - .apg-combobox-input:focus { - outline: 3px solid #facc15; - outline-offset: 2px; - box-shadow: none; - } - - .apg-combobox-option[aria-selected='true'] { - outline: 2px solid #facc15; - outline-offset: -2px; - } - - .apg-combobox-option-icon { - color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-combobox-input, diff --git a/src/styles/patterns/dialog.css b/src/styles/patterns/dialog.css index 4dd1ef9..63afcce 100644 --- a/src/styles/patterns/dialog.css +++ b/src/styles/patterns/dialog.css @@ -151,18 +151,6 @@ dialog.apg-dialog:not([open]) { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-dialog { - border-width: 2px; - } - - .apg-dialog-overlay, - dialog.apg-dialog::backdrop { - background: rgba(0, 0, 0, 0.8); - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-dialog-overlay, diff --git a/src/styles/patterns/disclosure.css b/src/styles/patterns/disclosure.css index fb7d21a..ff15e17 100644 --- a/src/styles/patterns/disclosure.css +++ b/src/styles/patterns/disclosure.css @@ -101,23 +101,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-disclosure { - border-width: 4px; - } - - .apg-disclosure-trigger[aria-expanded='true'] { - background: black; - color: white; - } - - .apg-disclosure-trigger[aria-expanded='false']:not(:disabled) { - background: white; - color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-disclosure-trigger, diff --git a/src/styles/patterns/link.css b/src/styles/patterns/link.css index 3efedba..b98ad36 100644 --- a/src/styles/patterns/link.css +++ b/src/styles/patterns/link.css @@ -41,17 +41,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-link { - text-decoration-thickness: 2px; - } - - .apg-link[aria-disabled='true'] { - text-decoration: line-through; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-link { diff --git a/src/styles/patterns/listbox.css b/src/styles/patterns/listbox.css index 636dd32..79e446e 100644 --- a/src/styles/patterns/listbox.css +++ b/src/styles/patterns/listbox.css @@ -112,22 +112,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-listbox { - border-width: 2px; - } - - .apg-listbox-option-icon { - color: black; - } - - .apg-listbox-option:focus { - outline: 3px solid #facc15; - outline-offset: -3px; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-listbox-option { diff --git a/src/styles/patterns/menu-button.css b/src/styles/patterns/menu-button.css index 530326a..eac723b 100644 --- a/src/styles/patterns/menu-button.css +++ b/src/styles/patterns/menu-button.css @@ -127,23 +127,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-menu-button-trigger { - border-width: 2px; - } - - .apg-menu-button-menu { - border-width: 2px; - } - - .apg-menu-button-trigger:focus, - .apg-menu-button-item:focus { - outline: 3px solid #facc15; - outline-offset: -3px; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-menu-button-trigger, diff --git a/src/styles/patterns/meter.css b/src/styles/patterns/meter.css index c97b25c..97fd580 100644 --- a/src/styles/patterns/meter.css +++ b/src/styles/patterns/meter.css @@ -59,22 +59,6 @@ apg-meter { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-meter-track { - border: 2px solid var(--foreground); - } - - .apg-meter-fill { - background: var(--foreground); - } - - .apg-meter-label, - .apg-meter-value { - font-weight: 700; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-meter-fill { diff --git a/src/styles/patterns/radio-group.css b/src/styles/patterns/radio-group.css index cfeffcb..3b518fe 100644 --- a/src/styles/patterns/radio-group.css +++ b/src/styles/patterns/radio-group.css @@ -105,22 +105,6 @@ apg-radio-group { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-radio-control { - border-width: 3px; - } - - .apg-radio--selected .apg-radio-control { - background-color: black; - border-color: black; - } - - .apg-radio-indicator { - background: white; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-radio-control, diff --git a/src/styles/patterns/slider-multithumb.css b/src/styles/patterns/slider-multithumb.css index ab0ff2b..4bf4381 100644 --- a/src/styles/patterns/slider-multithumb.css +++ b/src/styles/patterns/slider-multithumb.css @@ -257,27 +257,6 @@ apg-slider-multithumb { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-slider-multithumb-track { - border: 2px solid var(--foreground); - } - - .apg-slider-multithumb-range { - background: var(--foreground); - } - - .apg-slider-multithumb-thumb { - border-width: 3px; - border-color: var(--foreground); - } - - .apg-slider-multithumb-label, - .apg-slider-multithumb-values { - font-weight: 700; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-slider-multithumb-thumb { diff --git a/src/styles/patterns/slider.css b/src/styles/patterns/slider.css index cd28149..d4deaa5 100644 --- a/src/styles/patterns/slider.css +++ b/src/styles/patterns/slider.css @@ -162,27 +162,6 @@ apg-slider { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-slider-track { - border: 2px solid var(--foreground); - } - - .apg-slider-fill { - background: var(--foreground); - } - - .apg-slider-thumb { - border-width: 3px; - border-color: var(--foreground); - } - - .apg-slider-label, - .apg-slider-value { - font-weight: 700; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-slider-thumb { diff --git a/src/styles/patterns/spinbutton.css b/src/styles/patterns/spinbutton.css index 4cd6660..bae986d 100644 --- a/src/styles/patterns/spinbutton.css +++ b/src/styles/patterns/spinbutton.css @@ -134,27 +134,6 @@ apg-spinbutton { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-spinbutton-controls { - border-width: 2px; - border-color: var(--foreground); - } - - .apg-spinbutton-input { - font-weight: 700; - } - - .apg-spinbutton-button { - border-width: 2px; - font-weight: 700; - } - - .apg-spinbutton-label { - font-weight: 700; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-spinbutton-button { diff --git a/src/styles/patterns/switch.css b/src/styles/patterns/switch.css index 4ff651e..d3eb9e0 100644 --- a/src/styles/patterns/switch.css +++ b/src/styles/patterns/switch.css @@ -93,7 +93,7 @@ apg-switch { width: 1.125rem; height: 1.125rem; border-radius: 50%; - background: white; + background: var(--background); box-shadow: 0 1px 3px rgb(0 0 0 / 0.2); transition: transform 0.2s; } @@ -111,35 +111,6 @@ apg-switch { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-switch-track { - border-width: 3px; - } - - .apg-switch[aria-checked='true'] .apg-switch-track { - background-color: black; - border-color: black; - } - - .apg-switch[aria-checked='false'] .apg-switch-track { - background-color: white; - border-color: black; - } - - .apg-switch-thumb { - background-color: black; - } - - .apg-switch[aria-checked='true'] .apg-switch-thumb { - background-color: white; - } - - .apg-switch-icon { - color: white; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-switch-track, diff --git a/src/styles/patterns/table.css b/src/styles/patterns/table.css index f1a0d1c..2adee04 100644 --- a/src/styles/patterns/table.css +++ b/src/styles/patterns/table.css @@ -115,23 +115,6 @@ apg-table.apg-table > [role='table'] { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-table { - border-width: 2px; - gap: 2px; - } - - .apg-table-header, - .apg-table-body { - gap: 2px; - } - - .apg-table-sort-button:focus-visible { - outline-width: 3px; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-table-body > .apg-table-row:hover > .apg-table-cell, diff --git a/src/styles/patterns/tabs.css b/src/styles/patterns/tabs.css index 759d5e0..9808f39 100644 --- a/src/styles/patterns/tabs.css +++ b/src/styles/patterns/tabs.css @@ -30,13 +30,14 @@ display: flex; background: transparent; overflow-x: auto; - padding: 4px; /* フォーカスインジケーター用の余白 */ - margin: -4px; /* レイアウトへの影響を相殺 */ + padding: 4px; + /* フォーカスインジケーター用の余白 */ + margin: -4px; + /* レイアウトへの影響を相殺 */ } .apg-tablist--horizontal { flex-direction: row; - border-bottom: 1px solid var(--border); } /* Horizontal: 最初と最後のタブに角丸を適用 */ @@ -96,9 +97,8 @@ font-size: 0.875rem; font-weight: 500; color: var(--muted-foreground); - cursor: pointer; white-space: nowrap; - transition: all 0.2s ease; + transition: background-color 0.2s ease; min-height: 44px; } @@ -132,7 +132,7 @@ color: var(--foreground); } -.apg-tab:focus { +.apg-tab:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; z-index: 1; @@ -201,7 +201,7 @@ min-height: 200px; } -.apg-tabpanel:focus { +.apg-tabpanel:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; } @@ -218,32 +218,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-tabs { - border-width: 4px; - } - - .apg-tab--selected { - background: black; - color: white; - } - - .apg-tab--selected.apg-tab--horizontal { - border-bottom-color: #facc15; - } - - .apg-tab--selected.apg-tab--vertical { - border-right-color: #facc15; - } - - .apg-tab:not(.apg-tab--selected):not(.apg-tab--disabled) { - background: white; - color: black; - border-color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-tab { @@ -262,27 +236,51 @@ .apg-tabs { border: 2px solid ButtonBorder; background: ButtonFace; + overflow: hidden; } .apg-tablist { - background: ButtonFace; - border-color: ButtonBorder; + margin: 0; + padding: 0; + border-bottom: 1px solid ButtonBorder; } .apg-tab { border-color: ButtonBorder; background: ButtonFace; color: ButtonText; + border-bottom-width: 1px; + border-radius: 0 !important; } .apg-tab--selected { - background: Highlight; - color: HighlightText; - border-color: Highlight; + background: ButtonFace; + color: ButtonText; + } + + .apg-tab--selected.apg-tab--horizontal { + border-bottom-color: SelectedItem; + border-bottom-width: 4px; + padding-block-end: calc(0.75rem - 3px); + /* 増加したボーダー分のスペースを相殺 */ + } + + .apg-tab.apg-tab--vertical { + border-right-width: 0; + border-bottom: 1px solid ButtonBorder; + } + + .apg-tab--selected.apg-tab--vertical { + border-right-style: solid; + border-right-color: SelectedItem; + border-right-width: 4px; + padding-inline-end: calc(1rem - 3px); + /* 増加したボーダー分のスペースを相殺 */ } - .apg-tab:focus { - outline: 2px solid Highlight; + .apg-tab:focus-visible { + outline: 2px inset SelectedItem; + outline-offset: -4px; } .apg-tabpanels { diff --git a/src/styles/patterns/toggle-button.css b/src/styles/patterns/toggle-button.css index 73ef6ed..3ff031f 100644 --- a/src/styles/patterns/toggle-button.css +++ b/src/styles/patterns/toggle-button.css @@ -192,29 +192,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-toggle-button { - border-width: 4px; - } - - .apg-toggle-button[aria-pressed='true'] { - background-color: black; - color: white; - border-color: black; - } - - .apg-toggle-button[aria-pressed='false'] { - background-color: white; - color: black; - border-color: black; - } - - .apg-toggle-button[aria-pressed='true'] .apg-toggle-indicator { - color: #facc15; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-toggle-button, diff --git a/src/styles/patterns/toolbar.css b/src/styles/patterns/toolbar.css index 21828fc..3b2669d 100644 --- a/src/styles/patterns/toolbar.css +++ b/src/styles/patterns/toolbar.css @@ -90,23 +90,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-toolbar { - border-width: 2px; - } - - .apg-toolbar-button { - border-width: 2px; - } - - .apg-toolbar-button[aria-pressed='true'] { - background-color: black; - color: white; - border-color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-toolbar-button { diff --git a/src/styles/patterns/tree-view.css b/src/styles/patterns/tree-view.css index 4681b03..b5a447b 100644 --- a/src/styles/patterns/tree-view.css +++ b/src/styles/patterns/tree-view.css @@ -150,21 +150,6 @@ ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-treeview { - border-width: 2px; - } - - .apg-treeview-item:focus > .apg-treeview-item-content { - box-shadow: inset 0 0 0 3px #facc15; - } - - .apg-treeview-item-icon { - color: black; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-treeview-item-content, diff --git a/src/styles/patterns/window-splitter.css b/src/styles/patterns/window-splitter.css index 5210ff8..ad00577 100644 --- a/src/styles/patterns/window-splitter.css +++ b/src/styles/patterns/window-splitter.css @@ -236,17 +236,6 @@ apg-window-splitter { ACCESSIBILITY ENHANCEMENTS ============================================================================= */ -/* High Contrast Mode Support */ -@media (prefers-contrast: high) { - .apg-window-splitter__separator { - border: 2px solid var(--foreground, #111827); - } - - .apg-window-splitter-demo-container { - border-width: 2px; - } -} - /* Reduced Motion Support */ @media (prefers-reduced-motion: reduce) { .apg-window-splitter__separator {