[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7AFEX10DMDPPFQB9P309PXK":3,"skill-same:01M7AFEX10DMDPPFQB9P309PXK":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":36,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M7AFEX10DMDPPFQB9P309PXK","trove-a11y",null,"Accessibility checking skill for web and mobile interfaces. Auto-activates on UI component files. Checks WCAG compliance and ARIA patterns.","bravew\u002Ftrove","bravew","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F10855844?v=4","01M7ACJ91JZSQYHT81XPVYR7VA","Yong","01M7AFERNR92HDPGNGP5QA16DM",10,"MIT","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fplugins\u002Ftrove-design\u002F.agents\u002Fskills\u002Ftrove-a11y\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: trove-a11y\ndescription: \"Accessibility checking skill for web and mobile interfaces. Auto-activates on UI component files. Checks WCAG compliance and ARIA patterns.\"\npaths:\n  - \"**\u002F*.tsx\"\n  - \"**\u002F*.jsx\"\n  - \"**\u002F*.vue\"\n  - \"**\u002F*.html\"\nmetadata:\n  trove-category: design\n  trove-category-label: Design\n---\n\u003C!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->\n\u003C!-- Regenerate: bun run build:skills -->\n\n## Session Init\n\nThis skill ships Trove conventions. Prefer existing project patterns over generic best practices when they conflict.\n\n# Accessibility Conventions\n\n## ARIA Patterns\n\n- Use semantic HTML first (`\u003Cbutton>`, `\u003Cnav>`, `\u003Cmain>`) before ARIA roles\n- Add `aria-label` to icon-only buttons\n- Use `aria-live=\"polite\"` for dynamic content updates\n- Set `aria-expanded` on toggle buttons and disclosure widgets\n\n## Keyboard Navigation\n\n- All interactive elements must be keyboard accessible\n- Tab order follows visual flow (avoid `tabindex > 0`)\n- Escape closes modals and dropdowns\n- Enter\u002FSpace activates buttons and links\n\n## Color & Contrast\n\n- Text contrast: minimum 4.5:1 (AA), 7:1 (AAA)\n- Large text (18px+ or 14px+ bold): minimum 3:1\n- Don't rely on color alone to convey information\n\n## Forms\n\n```html\n\u003C!-- Always associate labels -->\n\u003Clabel for=\"email\">Email\u003C\u002Flabel>\n\u003Cinput id=\"email\" type=\"email\" aria-describedby=\"email-help\" required \u002F>\n\u003Cspan id=\"email-help\">We'll never share your email.\u003C\u002Fspan>\n\n\u003C!-- Error states -->\n\u003Cinput id=\"name\" aria-invalid=\"true\" aria-errormessage=\"name-error\" \u002F>\n\u003Cspan id=\"name-error\" role=\"alert\">Name is required\u003C\u002Fspan>\n```\n\n## AI Gotchas\n\n- **div soup**: Replace `\u003Cdiv onClick>` with `\u003Cbutton>` — divs aren't keyboard accessible\n- **Images**: Decorative images get `alt=\"\"` not missing alt\n- **Focus trapping**: Modals must trap focus and return focus on close\n","\u003C!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly -->\n\u003C!-- Regenerate: bun run build:skills -->\n\n## Session Init\n\nThis skill ships Trove conventions. Prefer existing project patterns over generic best practices when they conflict.\n\n# Accessibility Conventions\n\n## ARIA Patterns\n\n- Use semantic HTML first (`\u003Cbutton>`, `\u003Cnav>`, `\u003Cmain>`) before ARIA roles\n- Add `aria-label` to icon-only buttons\n- Use `aria-live=\"polite\"` for dynamic content updates\n- Set `aria-expanded` on toggle buttons and disclosure widgets\n\n## Keyboard Navigation\n\n- All interactive elements must be keyboard accessible\n- Tab order follows visual flow (avoid `tabindex > 0`)\n- Escape closes modals and dropdowns\n- Enter\u002FSpace activates buttons and links\n\n## Color & Contrast\n\n- Text contrast: minimum 4.5:1 (AA), 7:1 (AAA)\n- Large text (18px+ or 14px+ bold): minimum 3:1\n- Don't rely on color alone to convey information\n\n## Forms\n\n```html\n\u003C!-- Always associate labels -->\n\u003Clabel for=\"email\">Email\u003C\u002Flabel>\n\u003Cinput id=\"email\" type=\"email\" aria-describedby=\"email-help\" required \u002F>\n\u003Cspan id=\"email-help\">We'll never share your email.\u003C\u002Fspan>\n\n\u003C!-- Error states -->\n\u003Cinput id=\"name\" aria-invalid=\"true\" aria-errormessage=\"name-error\" \u002F>\n\u003Cspan id=\"name-error\" role=\"alert\">Name is required\u003C\u002Fspan>\n```\n\n## AI Gotchas\n\n- **div soup**: Replace `\u003Cdiv onClick>` with `\u003Cbutton>` — divs aren't keyboard accessible\n- **Images**: Decorative images get `alt=\"\"` not missing alt\n- **Focus trapping**: Modals must trap focus and return focus on close\n",{"name":5,"paths":24,"metadata":29,"description":7},[25,26,27,28],"**\u002F*.tsx","**\u002F*.jsx","**\u002F*.vue","**\u002F*.html",{"trove-category":30,"trove-category-label":31},"design","Design","main","f88db1f1cf0e0703dd962051ebc142db961d7799","plugins\u002Ftrove-design\u002F.agents\u002Fskills\u002Ftrove-a11y",1,"https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove","https:\u002F\u002Fgithub.com\u002Fbravew","2026-11-12 07:56:32",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add bravew\u002Ftrove --skill trove-a11y",{"tool":45,"command":46},"bunx","bunx skills add bravew\u002Ftrove --skill trove-a11y",{"tool":48,"command":49},"pnpm","pnpm dlx skills add bravew\u002Ftrove --skill trove-a11y","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fplugins\u002Ftrove-design\u002F.agents\u002Fskills\u002Ftrove-a11y\u002FSKILL.md",true,[],[54,61,68,75,82,89],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":19},"01M7AGJDHTQAS1VK6P7VJAV79G","using-trove","Skill discipline anchor for the Trove marketplace. Loaded once per session; routes the agent to the right trove-* skill before code, planning, review, or git actions.","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fusing-trove\u002FSKILL.md",[],[],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":19},"01M7AGJAS4V4TXE6TV6F839BGZ","trove-write-skill","Skill authoring workflow. Use when creating or updating a Codex or Trove skill, including rubrics, tasks, metadata, and validation.","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ftrove-write-skill\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":19},"01M7AGJ87K41ZAC8DDBAV17QFW","trove-worktree","Git worktree workflow for spikes, risky experiments, and broad refactors that should not disturb the user's current branch.","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ftrove-worktree\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7AGJ32V58VYBFYMS9EMHRY4","trove-why","Reconstruct design rationale and decision history from evidence — source control, issue tracker (Linear), docs (Notion), chat (Slack), error tracking (Sentry) — with calibrated confidence. Use for \"why does X work this way\", \"why did we pick Y\", regressions, and postmortems. Use trove-explain for how it works now.","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ftrove-why\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M7AGJ0FHJSRR8MMXC3V8XNHF","trove-verify","Completion verification workflow. Use before claiming done, fixed, complete, ready, or shipped.","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ftrove-verify\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":19},"01M7AGHWV4B9SDS60RH5W0B0K5","trove-unslop","Cut AI tells from writing — PR descriptions, release notes, specs, commit bodies, and replies. Use before finalizing prose, or when the user asks to clean up, de-slop, or make text sound human.","https:\u002F\u002Fgithub.com\u002Fbravew\u002Ftrove\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Ftrove-unslop\u002FSKILL.md",[],[]]