[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-building-accessible-ui":3,"mdc-ym7tu9-key":37,"related-repo-microsoft-building-accessible-ui":1334,"related-org-microsoft-building-accessible-ui":1345},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"building-accessible-ui","build accessible user interfaces","MUST BE USED for any UI work. Invoke this skill before generating, modifying, or reviewing any code that renders, styles, or wires up a user-facing interface — including markup, components, templates, styles, and the JavaScript\u002FTypeScript that drives them. This skill encodes the accessibility (WCAG 2.2 AA) requirements every UI change must satisfy; skipping it produces inaccessible output. Applies across web, mobile, and desktop. If the task touches the UI layer in any way, use this skill first.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,20,23],{"name":13,"slug":14,"type":15},"WCAG","wcag","tag",{"name":17,"slug":18,"type":15},"Accessibility","accessibility",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"UI Components","ui-components",{"name":24,"slug":25,"type":15},"Frontend","frontend",49,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fa11y-llm-eval","2026-07-03T16:32:27.380231",null,7,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"An eval tool to benchmark how well LLMs generate accessible HTML","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fa11y-llm-eval\u002Ftree\u002FHEAD\u002Fconfig\u002Fskills\u002Fbuilding-accessible-ui","---\nname: building-accessible-ui\ndescription: MUST BE USED for any UI work. Invoke this skill before generating, modifying, or reviewing any code that renders, styles, or wires up a user-facing interface — including markup, components, templates, styles, and the JavaScript\u002FTypeScript that drives them. This skill encodes the accessibility (WCAG 2.2 AA) requirements every UI change must satisfy; skipping it produces inaccessible output. Applies across web, mobile, and desktop. If the task touches the UI layer in any way, use this skill first.\n---\n\n# building-accessible-ui\n\nChecklist for producing and reviewing accessible UIs. Each rule leads with the platform-agnostic principle and, where relevant, the Web (HTML + ARIA + CSS) implementation. Apply the web guidance only when the output is web.\n\nDetailed rationale lives in `references\u002F`; widget-specific guidance in `components\u002F`. **Open a file only when it's relevant to the current task.** Do not preload. Every file opened and every line a tool prints stays in context — don't re-read.\n\n## Accessibility constitution\n\nGround rules. Use them to resolve conflicts and decide how much custom work is justified. The checklist below is their mechanical application.\n\n### 1. Accessibility is a core outcome\n\nA UI inaccessible to realistic users is not \"done\". Treat accessibility as a first-class criterion alongside correctness, performance, and security — not a finishing step. When scope must be cut, record the gap explicitly. Never claim output is \"fully accessible\"; state what was addressed and known limitations.\n\n### 2. Build for real people\n\nEvaluate designs against these personas; if a decision breaks one, justify it and offer an alternative:\n\n- **Screen reader** — landmarks, headings, accessible name\u002Frole\u002Fstate, reading order.\n- **Keyboard-only** — Tab\u002Farrows\u002FEnter\u002FSpace\u002FEscape, visible focus, no traps.\n- **Low-vision** — zoom, reflow, contrast, Forced Colors.\n- **Cognitive** — plain language, clear labels, actionable errors, forgiving interactions.\n- **Deaf \u002F hard of hearing** — captions\u002Ftranscripts; no sound-only cues.\n- **Motor \u002F voice \u002F switch** — large hit targets, named controls, no precise\u002Ftimed gestures.\n- **Situational** — sunlight, one-handed, noisy, flaky network.\n\n### 3. Implementation priority\n\nUse the highest option that fits:\n\n1. Existing accessible component in this codebase \u002F design system.\n2. A component library.\n3. Native platform semantics (`\u003Cbutton>`, `\u003Ca href>`, `\u003Cinput>`, `\u003Clabel>`, `\u003Cfieldset>`\u002F`\u003Clegend>`, `\u003Cdialog>`, `\u003Cdetails>`, `\u003Cnav>`, `\u003Cmain>`, headings).\n4. Native element + minimum necessary ARIA (`aria-describedby`, `aria-expanded`, `aria-current`, etc.).\n5. Fully custom ARIA widget — only when nothing above fits, and only if you implement the APG keyboard, focus, and state behavior end-to-end.\n\nNo ARIA is better than bad ARIA. Don't duplicate native semantics (no `role=\"button\"` on `\u003Cbutton>`). Don't use `role=\"menu\"` for site navigation. Don't invent new patterns when a standard one exists.\n\n### 4. Balance, don't trade away\n\nAccessibility, performance, security\u002Fprivacy, and visual design are joint constraints — not dials to trade off. If an optimization removes a label, breaks focus, or hides content from AT, redesign the optimization. Accessible names must not leak secrets, but security is not a reason to ship an unlabeled control — find a labeling approach that doesn't leak data. Visual polish doesn't justify removing focus indicators or semantic structure. Under schedule pressure, prefer cutting scope over shipping an inaccessible feature. When constraints genuinely conflict, surface it explicitly.\n\n### 5. Respect existing code\n\nDon't rewrite an existing component or shared utility just because it could be more accessible — other code depends on it. When you see issues outside the current task's scope: note them (issue, affected persona, suggested fix) and ask before changing. Fix in place only when the change is required by the task, localized, and low-risk. Inside scope, fix real issues; never silently remove existing affordances (labels, landmarks, focus management, live regions) without an equal-or-better replacement.\n\n## How to use this checklist\n\nIdentify which components the request involves (form, checkbox group, radio group, disclosure, modal, full view, etc.) and open the matching `components\u002F\u003Cname>.md` once. Then work the checklist below. Open a `references\u002F*.md` only when an item is unclear or you need the concrete fix pattern.\n\nDo not claim the output is \"fully accessible\". State what was addressed and known limitations.\n\n**Do NOT use this skill for:** backend-only changes, data migrations, build\u002FCI configuration, non-UI tests, or tasks that do not touch the UI layer.\n\n## Checklist\n\n- **Prefer existing components.** If available, reuse existing UI components rather than creating new ones from scratch or custom implementations.\n- **Platform-native semantics.** Prefer native platform controls and structures over custom constructs; add accessibility overrides only when a native control genuinely can't be used. → `references\u002Fstructure.md`.\n  - **Web:** Prefer semantic HTML (`\u003Cbutton>`, `\u003Ca>`, `\u003Cinput>`, `\u003Clabel>`, `\u003Cfieldset>`\u002F`\u003Clegend>`, `\u003Cnav>`, `\u003Cmain>`, `\u003Cheader>`, `\u003Cfooter>`, `\u003Ch1>`–`\u003Ch6>`) over `\u003Cdiv>`\u002F`\u003Cspan>` with ARIA. Use ARIA only when no native element fits.\n- **Regions \u002F landmarks.** View structure is exposed via semantic regions\u002Flandmarks; duplicated landmarks have unique accessible names.\n  - **Web:** Exactly one `\u003Cmain>`; `\u003Cheader>`, `\u003Cnav>`, `\u003Cfooter>` used when applicable.\n- **Headings.** Logical outline labels sections without skipping levels; one top-level heading per view. → `references\u002Fstructure.md`.\n  - **Web:** One `\u003Ch1>`, typically the first heading in `\u003Cmain>`. Set a descriptive `\u003Ctitle>`.\n- **Bypass blocks on web pages.** Provide a mechanism to skip repeated navigation when delivering traditional web pages. (Not required for Electron or non-web surfaces.) → `references\u002Fkeyboard-focus.md`.\n  - **Web:** A \"Skip to main content\" link as the first focusable element\n- **Name \u002F role \u002F value.** Every interactive element exposes an accurate accessible name; role matches purpose; dynamic states (pressed, expanded, selected, checked, disabled, invalid) stay in sync with visuals.\n  - **Web:** Prefer native attributes over ARIA. If necessary, use the minimum ARIA needed and update state attributes alongside DOM\u002Fvisual changes.\n- **Name-label match.** The accessible name of each interactive element contains the visible label text.\n  - **Web:** If `aria-label` is used, include the visible label text. For multiple controls that share a label (e.g., \"Remove\"), add context (\"Remove item: Socks\").\n- **Labels and help text.** Every form control has a programmatic label describing its purpose; help\u002Ferror text is programmatically associated with its control. → `components\u002Fforms.md`.\n  - **Web:** `\u003Clabel for>` or wrapping `\u003Clabel>`; never placeholder alone. Associate help\u002Ferror via `aria-describedby` \u002F `aria-errormessage`.\n- **Grouping.** Related options (checkboxes, radios) are grouped so their shared name is part of the accessible name of each option. Group-level help\u002Ferror text is associated with the group itself — not with each option and not with an intermediate wrapper.\n  - **Web:** `\u003Cfieldset>` with a `\u003Clegend>`. Put `aria-describedby` on the `\u003Cfieldset>` (not on a child `\u003Cdiv>`, and never on an extra `\u003Cdiv role=\"group\">` inside the fieldset — `\u003Cfieldset>` already is the group).\n- **Required fields.** Marked both visually and programmatically; not indicated by color alone.\n  - **Web:** Use an asterisk to indicate required fields. Native `required` on the control or `aria-required=\"true\"`.\n- **Keyboard operability.** Every interactive element is keyboard operable; tab order matches reading\u002Fvisual order; expected keys work (activation, arrow keys inside composite widgets, Escape closes overlays); no keyboard traps; static content is not sequentially focusable.\n  - **Web:** Do not remove focus outlines without equal-or-better replacement. Use `tabindex=\"-1\"` only for elements that need programmatic (not sequential) focus. → `references\u002Fkeyboard-focus.md`.\n- **Focus management.** Focus is always visible. Overlays\u002Fdialogs\u002Fdisclosures move focus appropriately and restore it on close; no focus traps outside modals.\n- **Hidden content.** Content hidden from assistive technology is not focusable and is hidden consistently across visual, semantic, and focus layers.\n  - **Web:** `hidden` \u002F `display: none` \u002F `aria-hidden=\"true\"` used consistently.\n- **Graphics.** Informative graphics have meaningful text alternatives; decorative graphics are hidden from AT. → `references\u002Fimages-graphics.md`.\n  - **Web:** `\u003Cimg>` informative → `alt`; decorative → `alt=\"\"`. Informative `\u003Csvg>` → `role=\"img\"` + accessible name. Other decorative → `aria-hidden=\"true\"`. \n- **Contrast.** Text ≥ 4.5:1 (3:1 large); focus indicators and key boundaries ≥ 3:1. Never color-only cues. → `references\u002Fcontrast-forced-colors.md`.\n- **Respect OS accessibility settings.** Never override OS high contrast, reduced-motion, or color-scheme preferences; adapt to forced-colors \u002F high-contrast. → `references\u002Fcontrast-forced-colors.md`.\n- **Reflow.** Content adapts to narrow viewports (target 320 CSS px) without two-dimensional scrolling for multi-line text; controls remain operable. → `references\u002Freflow.md`.\n- **Navigation.** Uses semantic navigation grouping with state-exposing toggles for expandable menus. → `references\u002Fnavigation.md`.\n  - **Web:** `\u003Cnav>`, not `role=\"menu\"`; `aria-expanded` on triggers.\n- **Tables \u002F grids.** Static tabular data uses table semantics with header\u002Fcell associations; interactive grids only when truly warranted. → `references\u002Ftables-grids.md`.\n- **Status messages.** Provide status messages for dynamic content updates that are relevant to the user (loading indicators, form submission results, etc.). → `references\u002Fstatus-messages.md`\n  - **Web:** Use `aria-live=\"polite\"` or `aria-live=\"assertive\"`.\n- **Testing.** Add and run automated accessibility tests unless the project explicitly opts out. Writing or configuring a test is not enough — execution, fixes, and a result report are part of the deliverable. **The final automated test run must be on the exact artifact you submit: any edit after a passing test invalidates that test, so re-run before submitting.** **Open `references\u002Ftesting.md` before writing any test code** for the opt-out signals, strategy precedence, runtime probe order, and reporting rules.\n  - **Web:** Prefer `@axe-core\u002F*` bindings that match the existing test runner; render the component\u002Fpage fully so interactive state, focus, and live regions are evaluated.\n  - **Other platforms:** Use the platform's native audit (Android `AccessibilityChecks`, iOS `XCUIAccessibilityAudit`, .NET `AccessibilityInsights`) under the same precedence.\n- **Specs\u002FDocumentation.** Follow the project's documentation pattern and document accessibility considerations for each view, component, and interaction. → `references\u002Fspecs-documentation.md`.\n\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,49,55,85,92,97,104,109,115,120,195,201,206,330,358,364,369,375,380,386,407,412,422,428],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":4},"text",{"type":43,"tag":50,"props":51,"children":52},"p",{},[53],{"type":48,"value":54},"Checklist for producing and reviewing accessible UIs. Each rule leads with the platform-agnostic principle and, where relevant, the Web (HTML + ARIA + CSS) implementation. Apply the web guidance only when the output is web.",{"type":43,"tag":50,"props":56,"children":57},{},[58,60,67,69,75,77,83],{"type":48,"value":59},"Detailed rationale lives in ",{"type":43,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":48,"value":66},"references\u002F",{"type":48,"value":68},"; widget-specific guidance in ",{"type":43,"tag":61,"props":70,"children":72},{"className":71},[],[73],{"type":48,"value":74},"components\u002F",{"type":48,"value":76},". ",{"type":43,"tag":78,"props":79,"children":80},"strong",{},[81],{"type":48,"value":82},"Open a file only when it's relevant to the current task.",{"type":48,"value":84}," Do not preload. Every file opened and every line a tool prints stays in context — don't re-read.",{"type":43,"tag":86,"props":87,"children":89},"h2",{"id":88},"accessibility-constitution",[90],{"type":48,"value":91},"Accessibility constitution",{"type":43,"tag":50,"props":93,"children":94},{},[95],{"type":48,"value":96},"Ground rules. Use them to resolve conflicts and decide how much custom work is justified. The checklist below is their mechanical application.",{"type":43,"tag":98,"props":99,"children":101},"h3",{"id":100},"_1-accessibility-is-a-core-outcome",[102],{"type":48,"value":103},"1. Accessibility is a core outcome",{"type":43,"tag":50,"props":105,"children":106},{},[107],{"type":48,"value":108},"A UI inaccessible to realistic users is not \"done\". Treat accessibility as a first-class criterion alongside correctness, performance, and security — not a finishing step. When scope must be cut, record the gap explicitly. Never claim output is \"fully accessible\"; state what was addressed and known limitations.",{"type":43,"tag":98,"props":110,"children":112},{"id":111},"_2-build-for-real-people",[113],{"type":48,"value":114},"2. Build for real people",{"type":43,"tag":50,"props":116,"children":117},{},[118],{"type":48,"value":119},"Evaluate designs against these personas; if a decision breaks one, justify it and offer an alternative:",{"type":43,"tag":121,"props":122,"children":123},"ul",{},[124,135,145,155,165,175,185],{"type":43,"tag":125,"props":126,"children":127},"li",{},[128,133],{"type":43,"tag":78,"props":129,"children":130},{},[131],{"type":48,"value":132},"Screen reader",{"type":48,"value":134}," — landmarks, headings, accessible name\u002Frole\u002Fstate, reading order.",{"type":43,"tag":125,"props":136,"children":137},{},[138,143],{"type":43,"tag":78,"props":139,"children":140},{},[141],{"type":48,"value":142},"Keyboard-only",{"type":48,"value":144}," — Tab\u002Farrows\u002FEnter\u002FSpace\u002FEscape, visible focus, no traps.",{"type":43,"tag":125,"props":146,"children":147},{},[148,153],{"type":43,"tag":78,"props":149,"children":150},{},[151],{"type":48,"value":152},"Low-vision",{"type":48,"value":154}," — zoom, reflow, contrast, Forced Colors.",{"type":43,"tag":125,"props":156,"children":157},{},[158,163],{"type":43,"tag":78,"props":159,"children":160},{},[161],{"type":48,"value":162},"Cognitive",{"type":48,"value":164}," — plain language, clear labels, actionable errors, forgiving interactions.",{"type":43,"tag":125,"props":166,"children":167},{},[168,173],{"type":43,"tag":78,"props":169,"children":170},{},[171],{"type":48,"value":172},"Deaf \u002F hard of hearing",{"type":48,"value":174}," — captions\u002Ftranscripts; no sound-only cues.",{"type":43,"tag":125,"props":176,"children":177},{},[178,183],{"type":43,"tag":78,"props":179,"children":180},{},[181],{"type":48,"value":182},"Motor \u002F voice \u002F switch",{"type":48,"value":184}," — large hit targets, named controls, no precise\u002Ftimed gestures.",{"type":43,"tag":125,"props":186,"children":187},{},[188,193],{"type":43,"tag":78,"props":189,"children":190},{},[191],{"type":48,"value":192},"Situational",{"type":48,"value":194}," — sunlight, one-handed, noisy, flaky network.",{"type":43,"tag":98,"props":196,"children":198},{"id":197},"_3-implementation-priority",[199],{"type":48,"value":200},"3. Implementation priority",{"type":43,"tag":50,"props":202,"children":203},{},[204],{"type":48,"value":205},"Use the highest option that fits:",{"type":43,"tag":207,"props":208,"children":209},"ol",{},[210,215,220,298,325],{"type":43,"tag":125,"props":211,"children":212},{},[213],{"type":48,"value":214},"Existing accessible component in this codebase \u002F design system.",{"type":43,"tag":125,"props":216,"children":217},{},[218],{"type":48,"value":219},"A component library.",{"type":43,"tag":125,"props":221,"children":222},{},[223,225,231,233,239,240,246,247,253,254,260,262,268,269,275,276,282,283,289,290,296],{"type":48,"value":224},"Native platform semantics (",{"type":43,"tag":61,"props":226,"children":228},{"className":227},[],[229],{"type":48,"value":230},"\u003Cbutton>",{"type":48,"value":232},", ",{"type":43,"tag":61,"props":234,"children":236},{"className":235},[],[237],{"type":48,"value":238},"\u003Ca href>",{"type":48,"value":232},{"type":43,"tag":61,"props":241,"children":243},{"className":242},[],[244],{"type":48,"value":245},"\u003Cinput>",{"type":48,"value":232},{"type":43,"tag":61,"props":248,"children":250},{"className":249},[],[251],{"type":48,"value":252},"\u003Clabel>",{"type":48,"value":232},{"type":43,"tag":61,"props":255,"children":257},{"className":256},[],[258],{"type":48,"value":259},"\u003Cfieldset>",{"type":48,"value":261},"\u002F",{"type":43,"tag":61,"props":263,"children":265},{"className":264},[],[266],{"type":48,"value":267},"\u003Clegend>",{"type":48,"value":232},{"type":43,"tag":61,"props":270,"children":272},{"className":271},[],[273],{"type":48,"value":274},"\u003Cdialog>",{"type":48,"value":232},{"type":43,"tag":61,"props":277,"children":279},{"className":278},[],[280],{"type":48,"value":281},"\u003Cdetails>",{"type":48,"value":232},{"type":43,"tag":61,"props":284,"children":286},{"className":285},[],[287],{"type":48,"value":288},"\u003Cnav>",{"type":48,"value":232},{"type":43,"tag":61,"props":291,"children":293},{"className":292},[],[294],{"type":48,"value":295},"\u003Cmain>",{"type":48,"value":297},", headings).",{"type":43,"tag":125,"props":299,"children":300},{},[301,303,309,310,316,317,323],{"type":48,"value":302},"Native element + minimum necessary ARIA (",{"type":43,"tag":61,"props":304,"children":306},{"className":305},[],[307],{"type":48,"value":308},"aria-describedby",{"type":48,"value":232},{"type":43,"tag":61,"props":311,"children":313},{"className":312},[],[314],{"type":48,"value":315},"aria-expanded",{"type":48,"value":232},{"type":43,"tag":61,"props":318,"children":320},{"className":319},[],[321],{"type":48,"value":322},"aria-current",{"type":48,"value":324},", etc.).",{"type":43,"tag":125,"props":326,"children":327},{},[328],{"type":48,"value":329},"Fully custom ARIA widget — only when nothing above fits, and only if you implement the APG keyboard, focus, and state behavior end-to-end.",{"type":43,"tag":50,"props":331,"children":332},{},[333,335,341,343,348,350,356],{"type":48,"value":334},"No ARIA is better than bad ARIA. Don't duplicate native semantics (no ",{"type":43,"tag":61,"props":336,"children":338},{"className":337},[],[339],{"type":48,"value":340},"role=\"button\"",{"type":48,"value":342}," on ",{"type":43,"tag":61,"props":344,"children":346},{"className":345},[],[347],{"type":48,"value":230},{"type":48,"value":349},"). Don't use ",{"type":43,"tag":61,"props":351,"children":353},{"className":352},[],[354],{"type":48,"value":355},"role=\"menu\"",{"type":48,"value":357}," for site navigation. Don't invent new patterns when a standard one exists.",{"type":43,"tag":98,"props":359,"children":361},{"id":360},"_4-balance-dont-trade-away",[362],{"type":48,"value":363},"4. Balance, don't trade away",{"type":43,"tag":50,"props":365,"children":366},{},[367],{"type":48,"value":368},"Accessibility, performance, security\u002Fprivacy, and visual design are joint constraints — not dials to trade off. If an optimization removes a label, breaks focus, or hides content from AT, redesign the optimization. Accessible names must not leak secrets, but security is not a reason to ship an unlabeled control — find a labeling approach that doesn't leak data. Visual polish doesn't justify removing focus indicators or semantic structure. Under schedule pressure, prefer cutting scope over shipping an inaccessible feature. When constraints genuinely conflict, surface it explicitly.",{"type":43,"tag":98,"props":370,"children":372},{"id":371},"_5-respect-existing-code",[373],{"type":48,"value":374},"5. Respect existing code",{"type":43,"tag":50,"props":376,"children":377},{},[378],{"type":48,"value":379},"Don't rewrite an existing component or shared utility just because it could be more accessible — other code depends on it. When you see issues outside the current task's scope: note them (issue, affected persona, suggested fix) and ask before changing. Fix in place only when the change is required by the task, localized, and low-risk. Inside scope, fix real issues; never silently remove existing affordances (labels, landmarks, focus management, live regions) without an equal-or-better replacement.",{"type":43,"tag":86,"props":381,"children":383},{"id":382},"how-to-use-this-checklist",[384],{"type":48,"value":385},"How to use this checklist",{"type":43,"tag":50,"props":387,"children":388},{},[389,391,397,399,405],{"type":48,"value":390},"Identify which components the request involves (form, checkbox group, radio group, disclosure, modal, full view, etc.) and open the matching ",{"type":43,"tag":61,"props":392,"children":394},{"className":393},[],[395],{"type":48,"value":396},"components\u002F\u003Cname>.md",{"type":48,"value":398}," once. Then work the checklist below. Open a ",{"type":43,"tag":61,"props":400,"children":402},{"className":401},[],[403],{"type":48,"value":404},"references\u002F*.md",{"type":48,"value":406}," only when an item is unclear or you need the concrete fix pattern.",{"type":43,"tag":50,"props":408,"children":409},{},[410],{"type":48,"value":411},"Do not claim the output is \"fully accessible\". State what was addressed and known limitations.",{"type":43,"tag":50,"props":413,"children":414},{},[415,420],{"type":43,"tag":78,"props":416,"children":417},{},[418],{"type":48,"value":419},"Do NOT use this skill for:",{"type":48,"value":421}," backend-only changes, data migrations, build\u002FCI configuration, non-UI tests, or tasks that do not touch the UI layer.",{"type":43,"tag":86,"props":423,"children":425},{"id":424},"checklist",[426],{"type":48,"value":427},"Checklist",{"type":43,"tag":121,"props":429,"children":430},{},[431,441,566,614,664,693,715,745,803,874,911,947,957,1000,1074,1091,1107,1124,1172,1189,1232,1317],{"type":43,"tag":125,"props":432,"children":433},{},[434,439],{"type":43,"tag":78,"props":435,"children":436},{},[437],{"type":48,"value":438},"Prefer existing components.",{"type":48,"value":440}," If available, reuse existing UI components rather than creating new ones from scratch or custom implementations.",{"type":43,"tag":125,"props":442,"children":443},{},[444,449,451,457,459],{"type":43,"tag":78,"props":445,"children":446},{},[447],{"type":48,"value":448},"Platform-native semantics.",{"type":48,"value":450}," Prefer native platform controls and structures over custom constructs; add accessibility overrides only when a native control genuinely can't be used. → ",{"type":43,"tag":61,"props":452,"children":454},{"className":453},[],[455],{"type":48,"value":456},"references\u002Fstructure.md",{"type":48,"value":458},".\n",{"type":43,"tag":121,"props":460,"children":461},{},[462],{"type":43,"tag":125,"props":463,"children":464},{},[465,470,472,477,478,484,485,490,491,496,497,502,503,508,509,514,515,520,521,527,528,534,535,541,543,549,551,557,558,564],{"type":43,"tag":78,"props":466,"children":467},{},[468],{"type":48,"value":469},"Web:",{"type":48,"value":471}," Prefer semantic HTML (",{"type":43,"tag":61,"props":473,"children":475},{"className":474},[],[476],{"type":48,"value":230},{"type":48,"value":232},{"type":43,"tag":61,"props":479,"children":481},{"className":480},[],[482],{"type":48,"value":483},"\u003Ca>",{"type":48,"value":232},{"type":43,"tag":61,"props":486,"children":488},{"className":487},[],[489],{"type":48,"value":245},{"type":48,"value":232},{"type":43,"tag":61,"props":492,"children":494},{"className":493},[],[495],{"type":48,"value":252},{"type":48,"value":232},{"type":43,"tag":61,"props":498,"children":500},{"className":499},[],[501],{"type":48,"value":259},{"type":48,"value":261},{"type":43,"tag":61,"props":504,"children":506},{"className":505},[],[507],{"type":48,"value":267},{"type":48,"value":232},{"type":43,"tag":61,"props":510,"children":512},{"className":511},[],[513],{"type":48,"value":288},{"type":48,"value":232},{"type":43,"tag":61,"props":516,"children":518},{"className":517},[],[519],{"type":48,"value":295},{"type":48,"value":232},{"type":43,"tag":61,"props":522,"children":524},{"className":523},[],[525],{"type":48,"value":526},"\u003Cheader>",{"type":48,"value":232},{"type":43,"tag":61,"props":529,"children":531},{"className":530},[],[532],{"type":48,"value":533},"\u003Cfooter>",{"type":48,"value":232},{"type":43,"tag":61,"props":536,"children":538},{"className":537},[],[539],{"type":48,"value":540},"\u003Ch1>",{"type":48,"value":542},"–",{"type":43,"tag":61,"props":544,"children":546},{"className":545},[],[547],{"type":48,"value":548},"\u003Ch6>",{"type":48,"value":550},") over ",{"type":43,"tag":61,"props":552,"children":554},{"className":553},[],[555],{"type":48,"value":556},"\u003Cdiv>",{"type":48,"value":261},{"type":43,"tag":61,"props":559,"children":561},{"className":560},[],[562],{"type":48,"value":563},"\u003Cspan>",{"type":48,"value":565}," with ARIA. Use ARIA only when no native element fits.",{"type":43,"tag":125,"props":567,"children":568},{},[569,574,576],{"type":43,"tag":78,"props":570,"children":571},{},[572],{"type":48,"value":573},"Regions \u002F landmarks.",{"type":48,"value":575}," View structure is exposed via semantic regions\u002Flandmarks; duplicated landmarks have unique accessible names.\n",{"type":43,"tag":121,"props":577,"children":578},{},[579],{"type":43,"tag":125,"props":580,"children":581},{},[582,586,588,593,595,600,601,606,607,612],{"type":43,"tag":78,"props":583,"children":584},{},[585],{"type":48,"value":469},{"type":48,"value":587}," Exactly one ",{"type":43,"tag":61,"props":589,"children":591},{"className":590},[],[592],{"type":48,"value":295},{"type":48,"value":594},"; ",{"type":43,"tag":61,"props":596,"children":598},{"className":597},[],[599],{"type":48,"value":526},{"type":48,"value":232},{"type":43,"tag":61,"props":602,"children":604},{"className":603},[],[605],{"type":48,"value":288},{"type":48,"value":232},{"type":43,"tag":61,"props":608,"children":610},{"className":609},[],[611],{"type":48,"value":533},{"type":48,"value":613}," used when applicable.",{"type":43,"tag":125,"props":615,"children":616},{},[617,622,624,629,630],{"type":43,"tag":78,"props":618,"children":619},{},[620],{"type":48,"value":621},"Headings.",{"type":48,"value":623}," Logical outline labels sections without skipping levels; one top-level heading per view. → ",{"type":43,"tag":61,"props":625,"children":627},{"className":626},[],[628],{"type":48,"value":456},{"type":48,"value":458},{"type":43,"tag":121,"props":631,"children":632},{},[633],{"type":43,"tag":125,"props":634,"children":635},{},[636,640,642,647,649,654,656,662],{"type":43,"tag":78,"props":637,"children":638},{},[639],{"type":48,"value":469},{"type":48,"value":641}," One ",{"type":43,"tag":61,"props":643,"children":645},{"className":644},[],[646],{"type":48,"value":540},{"type":48,"value":648},", typically the first heading in ",{"type":43,"tag":61,"props":650,"children":652},{"className":651},[],[653],{"type":48,"value":295},{"type":48,"value":655},". Set a descriptive ",{"type":43,"tag":61,"props":657,"children":659},{"className":658},[],[660],{"type":48,"value":661},"\u003Ctitle>",{"type":48,"value":663},".",{"type":43,"tag":125,"props":665,"children":666},{},[667,672,674,680,681],{"type":43,"tag":78,"props":668,"children":669},{},[670],{"type":48,"value":671},"Bypass blocks on web pages.",{"type":48,"value":673}," Provide a mechanism to skip repeated navigation when delivering traditional web pages. (Not required for Electron or non-web surfaces.) → ",{"type":43,"tag":61,"props":675,"children":677},{"className":676},[],[678],{"type":48,"value":679},"references\u002Fkeyboard-focus.md",{"type":48,"value":458},{"type":43,"tag":121,"props":682,"children":683},{},[684],{"type":43,"tag":125,"props":685,"children":686},{},[687,691],{"type":43,"tag":78,"props":688,"children":689},{},[690],{"type":48,"value":469},{"type":48,"value":692}," A \"Skip to main content\" link as the first focusable element",{"type":43,"tag":125,"props":694,"children":695},{},[696,701,703],{"type":43,"tag":78,"props":697,"children":698},{},[699],{"type":48,"value":700},"Name \u002F role \u002F value.",{"type":48,"value":702}," Every interactive element exposes an accurate accessible name; role matches purpose; dynamic states (pressed, expanded, selected, checked, disabled, invalid) stay in sync with visuals.\n",{"type":43,"tag":121,"props":704,"children":705},{},[706],{"type":43,"tag":125,"props":707,"children":708},{},[709,713],{"type":43,"tag":78,"props":710,"children":711},{},[712],{"type":48,"value":469},{"type":48,"value":714}," Prefer native attributes over ARIA. If necessary, use the minimum ARIA needed and update state attributes alongside DOM\u002Fvisual changes.",{"type":43,"tag":125,"props":716,"children":717},{},[718,723,725],{"type":43,"tag":78,"props":719,"children":720},{},[721],{"type":48,"value":722},"Name-label match.",{"type":48,"value":724}," The accessible name of each interactive element contains the visible label text.\n",{"type":43,"tag":121,"props":726,"children":727},{},[728],{"type":43,"tag":125,"props":729,"children":730},{},[731,735,737,743],{"type":43,"tag":78,"props":732,"children":733},{},[734],{"type":48,"value":469},{"type":48,"value":736}," If ",{"type":43,"tag":61,"props":738,"children":740},{"className":739},[],[741],{"type":48,"value":742},"aria-label",{"type":48,"value":744}," is used, include the visible label text. For multiple controls that share a label (e.g., \"Remove\"), add context (\"Remove item: Socks\").",{"type":43,"tag":125,"props":746,"children":747},{},[748,753,755,761,762],{"type":43,"tag":78,"props":749,"children":750},{},[751],{"type":48,"value":752},"Labels and help text.",{"type":48,"value":754}," Every form control has a programmatic label describing its purpose; help\u002Ferror text is programmatically associated with its control. → ",{"type":43,"tag":61,"props":756,"children":758},{"className":757},[],[759],{"type":48,"value":760},"components\u002Fforms.md",{"type":48,"value":458},{"type":43,"tag":121,"props":763,"children":764},{},[765],{"type":43,"tag":125,"props":766,"children":767},{},[768,772,774,780,782,787,789,794,796,802],{"type":43,"tag":78,"props":769,"children":770},{},[771],{"type":48,"value":469},{"type":48,"value":773}," ",{"type":43,"tag":61,"props":775,"children":777},{"className":776},[],[778],{"type":48,"value":779},"\u003Clabel for>",{"type":48,"value":781}," or wrapping ",{"type":43,"tag":61,"props":783,"children":785},{"className":784},[],[786],{"type":48,"value":252},{"type":48,"value":788},"; never placeholder alone. Associate help\u002Ferror via ",{"type":43,"tag":61,"props":790,"children":792},{"className":791},[],[793],{"type":48,"value":308},{"type":48,"value":795}," \u002F ",{"type":43,"tag":61,"props":797,"children":799},{"className":798},[],[800],{"type":48,"value":801},"aria-errormessage",{"type":48,"value":663},{"type":43,"tag":125,"props":804,"children":805},{},[806,811,813],{"type":43,"tag":78,"props":807,"children":808},{},[809],{"type":48,"value":810},"Grouping.",{"type":48,"value":812}," Related options (checkboxes, radios) are grouped so their shared name is part of the accessible name of each option. Group-level help\u002Ferror text is associated with the group itself — not with each option and not with an intermediate wrapper.\n",{"type":43,"tag":121,"props":814,"children":815},{},[816],{"type":43,"tag":125,"props":817,"children":818},{},[819,823,824,829,831,836,838,843,845,850,852,857,859,865,867,872],{"type":43,"tag":78,"props":820,"children":821},{},[822],{"type":48,"value":469},{"type":48,"value":773},{"type":43,"tag":61,"props":825,"children":827},{"className":826},[],[828],{"type":48,"value":259},{"type":48,"value":830}," with a ",{"type":43,"tag":61,"props":832,"children":834},{"className":833},[],[835],{"type":48,"value":267},{"type":48,"value":837},". Put ",{"type":43,"tag":61,"props":839,"children":841},{"className":840},[],[842],{"type":48,"value":308},{"type":48,"value":844}," on the ",{"type":43,"tag":61,"props":846,"children":848},{"className":847},[],[849],{"type":48,"value":259},{"type":48,"value":851}," (not on a child ",{"type":43,"tag":61,"props":853,"children":855},{"className":854},[],[856],{"type":48,"value":556},{"type":48,"value":858},", and never on an extra ",{"type":43,"tag":61,"props":860,"children":862},{"className":861},[],[863],{"type":48,"value":864},"\u003Cdiv role=\"group\">",{"type":48,"value":866}," inside the fieldset — ",{"type":43,"tag":61,"props":868,"children":870},{"className":869},[],[871],{"type":48,"value":259},{"type":48,"value":873}," already is the group).",{"type":43,"tag":125,"props":875,"children":876},{},[877,882,884],{"type":43,"tag":78,"props":878,"children":879},{},[880],{"type":48,"value":881},"Required fields.",{"type":48,"value":883}," Marked both visually and programmatically; not indicated by color alone.\n",{"type":43,"tag":121,"props":885,"children":886},{},[887],{"type":43,"tag":125,"props":888,"children":889},{},[890,894,896,902,904,910],{"type":43,"tag":78,"props":891,"children":892},{},[893],{"type":48,"value":469},{"type":48,"value":895}," Use an asterisk to indicate required fields. Native ",{"type":43,"tag":61,"props":897,"children":899},{"className":898},[],[900],{"type":48,"value":901},"required",{"type":48,"value":903}," on the control or ",{"type":43,"tag":61,"props":905,"children":907},{"className":906},[],[908],{"type":48,"value":909},"aria-required=\"true\"",{"type":48,"value":663},{"type":43,"tag":125,"props":912,"children":913},{},[914,919,921],{"type":43,"tag":78,"props":915,"children":916},{},[917],{"type":48,"value":918},"Keyboard operability.",{"type":48,"value":920}," Every interactive element is keyboard operable; tab order matches reading\u002Fvisual order; expected keys work (activation, arrow keys inside composite widgets, Escape closes overlays); no keyboard traps; static content is not sequentially focusable.\n",{"type":43,"tag":121,"props":922,"children":923},{},[924],{"type":43,"tag":125,"props":925,"children":926},{},[927,931,933,939,941,946],{"type":43,"tag":78,"props":928,"children":929},{},[930],{"type":48,"value":469},{"type":48,"value":932}," Do not remove focus outlines without equal-or-better replacement. Use ",{"type":43,"tag":61,"props":934,"children":936},{"className":935},[],[937],{"type":48,"value":938},"tabindex=\"-1\"",{"type":48,"value":940}," only for elements that need programmatic (not sequential) focus. → ",{"type":43,"tag":61,"props":942,"children":944},{"className":943},[],[945],{"type":48,"value":679},{"type":48,"value":663},{"type":43,"tag":125,"props":948,"children":949},{},[950,955],{"type":43,"tag":78,"props":951,"children":952},{},[953],{"type":48,"value":954},"Focus management.",{"type":48,"value":956}," Focus is always visible. Overlays\u002Fdialogs\u002Fdisclosures move focus appropriately and restore it on close; no focus traps outside modals.",{"type":43,"tag":125,"props":958,"children":959},{},[960,965,967],{"type":43,"tag":78,"props":961,"children":962},{},[963],{"type":48,"value":964},"Hidden content.",{"type":48,"value":966}," Content hidden from assistive technology is not focusable and is hidden consistently across visual, semantic, and focus layers.\n",{"type":43,"tag":121,"props":968,"children":969},{},[970],{"type":43,"tag":125,"props":971,"children":972},{},[973,977,978,984,985,991,992,998],{"type":43,"tag":78,"props":974,"children":975},{},[976],{"type":48,"value":469},{"type":48,"value":773},{"type":43,"tag":61,"props":979,"children":981},{"className":980},[],[982],{"type":48,"value":983},"hidden",{"type":48,"value":795},{"type":43,"tag":61,"props":986,"children":988},{"className":987},[],[989],{"type":48,"value":990},"display: none",{"type":48,"value":795},{"type":43,"tag":61,"props":993,"children":995},{"className":994},[],[996],{"type":48,"value":997},"aria-hidden=\"true\"",{"type":48,"value":999}," used consistently.",{"type":43,"tag":125,"props":1001,"children":1002},{},[1003,1008,1010,1016,1017],{"type":43,"tag":78,"props":1004,"children":1005},{},[1006],{"type":48,"value":1007},"Graphics.",{"type":48,"value":1009}," Informative graphics have meaningful text alternatives; decorative graphics are hidden from AT. → ",{"type":43,"tag":61,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":48,"value":1015},"references\u002Fimages-graphics.md",{"type":48,"value":458},{"type":43,"tag":121,"props":1018,"children":1019},{},[1020],{"type":43,"tag":125,"props":1021,"children":1022},{},[1023,1027,1028,1034,1036,1042,1044,1050,1052,1058,1060,1066,1068,1073],{"type":43,"tag":78,"props":1024,"children":1025},{},[1026],{"type":48,"value":469},{"type":48,"value":773},{"type":43,"tag":61,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":48,"value":1033},"\u003Cimg>",{"type":48,"value":1035}," informative → ",{"type":43,"tag":61,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":48,"value":1041},"alt",{"type":48,"value":1043},"; decorative → ",{"type":43,"tag":61,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":48,"value":1049},"alt=\"\"",{"type":48,"value":1051},". Informative ",{"type":43,"tag":61,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":48,"value":1057},"\u003Csvg>",{"type":48,"value":1059}," → ",{"type":43,"tag":61,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":48,"value":1065},"role=\"img\"",{"type":48,"value":1067}," + accessible name. Other decorative → ",{"type":43,"tag":61,"props":1069,"children":1071},{"className":1070},[],[1072],{"type":48,"value":997},{"type":48,"value":663},{"type":43,"tag":125,"props":1075,"children":1076},{},[1077,1082,1084,1090],{"type":43,"tag":78,"props":1078,"children":1079},{},[1080],{"type":48,"value":1081},"Contrast.",{"type":48,"value":1083}," Text ≥ 4.5:1 (3:1 large); focus indicators and key boundaries ≥ 3:1. Never color-only cues. → ",{"type":43,"tag":61,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":48,"value":1089},"references\u002Fcontrast-forced-colors.md",{"type":48,"value":663},{"type":43,"tag":125,"props":1092,"children":1093},{},[1094,1099,1101,1106],{"type":43,"tag":78,"props":1095,"children":1096},{},[1097],{"type":48,"value":1098},"Respect OS accessibility settings.",{"type":48,"value":1100}," Never override OS high contrast, reduced-motion, or color-scheme preferences; adapt to forced-colors \u002F high-contrast. → ",{"type":43,"tag":61,"props":1102,"children":1104},{"className":1103},[],[1105],{"type":48,"value":1089},{"type":48,"value":663},{"type":43,"tag":125,"props":1108,"children":1109},{},[1110,1115,1117,1123],{"type":43,"tag":78,"props":1111,"children":1112},{},[1113],{"type":48,"value":1114},"Reflow.",{"type":48,"value":1116}," Content adapts to narrow viewports (target 320 CSS px) without two-dimensional scrolling for multi-line text; controls remain operable. → ",{"type":43,"tag":61,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":48,"value":1122},"references\u002Freflow.md",{"type":48,"value":663},{"type":43,"tag":125,"props":1125,"children":1126},{},[1127,1132,1134,1140,1141],{"type":43,"tag":78,"props":1128,"children":1129},{},[1130],{"type":48,"value":1131},"Navigation.",{"type":48,"value":1133}," Uses semantic navigation grouping with state-exposing toggles for expandable menus. → ",{"type":43,"tag":61,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":48,"value":1139},"references\u002Fnavigation.md",{"type":48,"value":458},{"type":43,"tag":121,"props":1142,"children":1143},{},[1144],{"type":43,"tag":125,"props":1145,"children":1146},{},[1147,1151,1152,1157,1159,1164,1165,1170],{"type":43,"tag":78,"props":1148,"children":1149},{},[1150],{"type":48,"value":469},{"type":48,"value":773},{"type":43,"tag":61,"props":1153,"children":1155},{"className":1154},[],[1156],{"type":48,"value":288},{"type":48,"value":1158},", not ",{"type":43,"tag":61,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":48,"value":355},{"type":48,"value":594},{"type":43,"tag":61,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":48,"value":315},{"type":48,"value":1171}," on triggers.",{"type":43,"tag":125,"props":1173,"children":1174},{},[1175,1180,1182,1188],{"type":43,"tag":78,"props":1176,"children":1177},{},[1178],{"type":48,"value":1179},"Tables \u002F grids.",{"type":48,"value":1181}," Static tabular data uses table semantics with header\u002Fcell associations; interactive grids only when truly warranted. → ",{"type":43,"tag":61,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":48,"value":1187},"references\u002Ftables-grids.md",{"type":48,"value":663},{"type":43,"tag":125,"props":1190,"children":1191},{},[1192,1197,1199,1205],{"type":43,"tag":78,"props":1193,"children":1194},{},[1195],{"type":48,"value":1196},"Status messages.",{"type":48,"value":1198}," Provide status messages for dynamic content updates that are relevant to the user (loading indicators, form submission results, etc.). → ",{"type":43,"tag":61,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":48,"value":1204},"references\u002Fstatus-messages.md",{"type":43,"tag":121,"props":1206,"children":1207},{},[1208],{"type":43,"tag":125,"props":1209,"children":1210},{},[1211,1215,1217,1223,1225,1231],{"type":43,"tag":78,"props":1212,"children":1213},{},[1214],{"type":48,"value":469},{"type":48,"value":1216}," Use ",{"type":43,"tag":61,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":48,"value":1222},"aria-live=\"polite\"",{"type":48,"value":1224}," or ",{"type":43,"tag":61,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":48,"value":1230},"aria-live=\"assertive\"",{"type":48,"value":663},{"type":43,"tag":125,"props":1233,"children":1234},{},[1235,1240,1242,1247,1248,1261,1263],{"type":43,"tag":78,"props":1236,"children":1237},{},[1238],{"type":48,"value":1239},"Testing.",{"type":48,"value":1241}," Add and run automated accessibility tests unless the project explicitly opts out. Writing or configuring a test is not enough — execution, fixes, and a result report are part of the deliverable. ",{"type":43,"tag":78,"props":1243,"children":1244},{},[1245],{"type":48,"value":1246},"The final automated test run must be on the exact artifact you submit: any edit after a passing test invalidates that test, so re-run before submitting.",{"type":48,"value":773},{"type":43,"tag":78,"props":1249,"children":1250},{},[1251,1253,1259],{"type":48,"value":1252},"Open ",{"type":43,"tag":61,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":48,"value":1258},"references\u002Ftesting.md",{"type":48,"value":1260}," before writing any test code",{"type":48,"value":1262}," for the opt-out signals, strategy precedence, runtime probe order, and reporting rules.\n",{"type":43,"tag":121,"props":1264,"children":1265},{},[1266,1283],{"type":43,"tag":125,"props":1267,"children":1268},{},[1269,1273,1275,1281],{"type":43,"tag":78,"props":1270,"children":1271},{},[1272],{"type":48,"value":469},{"type":48,"value":1274}," Prefer ",{"type":43,"tag":61,"props":1276,"children":1278},{"className":1277},[],[1279],{"type":48,"value":1280},"@axe-core\u002F*",{"type":48,"value":1282}," bindings that match the existing test runner; render the component\u002Fpage fully so interactive state, focus, and live regions are evaluated.",{"type":43,"tag":125,"props":1284,"children":1285},{},[1286,1291,1293,1299,1301,1307,1309,1315],{"type":43,"tag":78,"props":1287,"children":1288},{},[1289],{"type":48,"value":1290},"Other platforms:",{"type":48,"value":1292}," Use the platform's native audit (Android ",{"type":43,"tag":61,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":48,"value":1298},"AccessibilityChecks",{"type":48,"value":1300},", iOS ",{"type":43,"tag":61,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":48,"value":1306},"XCUIAccessibilityAudit",{"type":48,"value":1308},", .NET ",{"type":43,"tag":61,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":48,"value":1314},"AccessibilityInsights",{"type":48,"value":1316},") under the same precedence.",{"type":43,"tag":125,"props":1318,"children":1319},{},[1320,1325,1327,1333],{"type":43,"tag":78,"props":1321,"children":1322},{},[1323],{"type":48,"value":1324},"Specs\u002FDocumentation.",{"type":48,"value":1326}," Follow the project's documentation pattern and document accessibility considerations for each view, component, and interaction. → ",{"type":43,"tag":61,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":48,"value":1332},"references\u002Fspecs-documentation.md",{"type":48,"value":663},{"items":1335,"total":1344},[1336],{"slug":4,"name":4,"fn":5,"description":6,"org":1337,"tags":1338,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1339,1340,1341,1342,1343],{"name":17,"slug":18,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},1,{"items":1346,"total":1541},[1347,1369,1390,1411,1426,1443,1454,1467,1482,1497,1516,1529],{"slug":1348,"name":1348,"fn":1349,"description":1350,"org":1351,"tags":1352,"stars":1366,"repoUrl":1367,"updatedAt":1368},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1353,1356,1359,1360,1363],{"name":1354,"slug":1355,"type":15},"Engineering","engineering",{"name":1357,"slug":1358,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1361,"slug":1362,"type":15},"Project Management","project-management",{"name":1364,"slug":1365,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1370,"name":1370,"fn":1371,"description":1372,"org":1373,"tags":1374,"stars":1387,"repoUrl":1388,"updatedAt":1389},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1375,1378,1381,1384],{"name":1376,"slug":1377,"type":15},".NET","net",{"name":1379,"slug":1380,"type":15},"Agents","agents",{"name":1382,"slug":1383,"type":15},"Azure","azure",{"name":1385,"slug":1386,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1391,"name":1391,"fn":1392,"description":1393,"org":1394,"tags":1395,"stars":1387,"repoUrl":1388,"updatedAt":1410},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1396,1399,1400,1403,1406,1407],{"name":1397,"slug":1398,"type":15},"Analytics","analytics",{"name":1382,"slug":1383,"type":15},{"name":1401,"slug":1402,"type":15},"Data Analysis","data-analysis",{"name":1404,"slug":1405,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1408,"slug":1409,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1412,"name":1412,"fn":1413,"description":1414,"org":1415,"tags":1416,"stars":1387,"repoUrl":1388,"updatedAt":1425},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1417,1420,1421,1422],{"name":1418,"slug":1419,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1382,"slug":1383,"type":15},{"name":1404,"slug":1405,"type":15},{"name":1423,"slug":1424,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1427,"name":1427,"fn":1428,"description":1429,"org":1430,"tags":1431,"stars":1387,"repoUrl":1388,"updatedAt":1442},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1432,1433,1436,1437,1438,1441],{"name":1382,"slug":1383,"type":15},{"name":1434,"slug":1435,"type":15},"Compliance","compliance",{"name":1385,"slug":1386,"type":15},{"name":9,"slug":8,"type":15},{"name":1439,"slug":1440,"type":15},"Python","python",{"name":1423,"slug":1424,"type":15},"2026-07-18T05:14:23.017504",{"slug":1444,"name":1444,"fn":1445,"description":1446,"org":1447,"tags":1448,"stars":1387,"repoUrl":1388,"updatedAt":1453},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1449,1450,1451,1452],{"name":1397,"slug":1398,"type":15},{"name":1382,"slug":1383,"type":15},{"name":1385,"slug":1386,"type":15},{"name":1439,"slug":1440,"type":15},"2026-07-31T05:54:29.068751",{"slug":1455,"name":1455,"fn":1456,"description":1457,"org":1458,"tags":1459,"stars":1387,"repoUrl":1388,"updatedAt":1466},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1460,1463,1464,1465],{"name":1461,"slug":1462,"type":15},"API Development","api-development",{"name":1382,"slug":1383,"type":15},{"name":9,"slug":8,"type":15},{"name":1439,"slug":1440,"type":15},"2026-07-18T05:14:16.988376",{"slug":1468,"name":1468,"fn":1469,"description":1470,"org":1471,"tags":1472,"stars":1387,"repoUrl":1388,"updatedAt":1481},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1473,1474,1477,1480],{"name":1382,"slug":1383,"type":15},{"name":1475,"slug":1476,"type":15},"Computer Vision","computer-vision",{"name":1478,"slug":1479,"type":15},"Images","images",{"name":1439,"slug":1440,"type":15},"2026-07-18T05:14:18.007737",{"slug":1483,"name":1483,"fn":1484,"description":1485,"org":1486,"tags":1487,"stars":1387,"repoUrl":1388,"updatedAt":1496},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1488,1489,1492,1495],{"name":1382,"slug":1383,"type":15},{"name":1490,"slug":1491,"type":15},"Configuration","configuration",{"name":1493,"slug":1494,"type":15},"Feature Flags","feature-flags",{"name":1404,"slug":1405,"type":15},"2026-07-03T16:32:01.278468",{"slug":1498,"name":1498,"fn":1499,"description":1500,"org":1501,"tags":1502,"stars":1387,"repoUrl":1388,"updatedAt":1515},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1503,1506,1509,1512],{"name":1504,"slug":1505,"type":15},"Cosmos DB","cosmos-db",{"name":1507,"slug":1508,"type":15},"Database","database",{"name":1510,"slug":1511,"type":15},"NoSQL","nosql",{"name":1513,"slug":1514,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1517,"name":1517,"fn":1499,"description":1518,"org":1519,"tags":1520,"stars":1387,"repoUrl":1388,"updatedAt":1528},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1521,1522,1523,1524,1525],{"name":1504,"slug":1505,"type":15},{"name":1507,"slug":1508,"type":15},{"name":9,"slug":8,"type":15},{"name":1510,"slug":1511,"type":15},{"name":1526,"slug":1527,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1530,"name":1530,"fn":1531,"description":1532,"org":1533,"tags":1534,"stars":1387,"repoUrl":1388,"updatedAt":1540},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1535,1536,1537,1538,1539],{"name":1382,"slug":1383,"type":15},{"name":1504,"slug":1505,"type":15},{"name":1507,"slug":1508,"type":15},{"name":1404,"slug":1405,"type":15},{"name":1510,"slug":1511,"type":15},"2026-05-13T06:14:17.582229",267]