skip to content
$registry / workers

kanban

v0.1.22

File-backed kanban board — tickets, threaded comments, agent assignment, the kanban:change and kanban:comment trigger types, and an injectable console board with agent profiles for planning and review.

worker
iiiverified
247 installs64 in 7d14 today
install
$iii trigger compose::add worker=kanban@0.1.22
binarylicense: Apache-2.0agentsboardconsole-uikanbantickets
  • macOS: arm64 · x64
  • Linux: arm64 · armv7 · x64
  • Windows: arm64 · x64

exact versions are immutable; binary and bundle artifacts are digest-pinned.

skill doc

web-accessibility

how-to
skills/frontend/web-accessibility.md

Web accessibility

Target WCAG 2.2 level AA. Anything less is a bug filed against your users, and it is cheapest to build in.

Standard: https://www.w3.org/WAI/WCAG22/quickref/ · patterns: https://www.w3.org/WAI/ARIA/apg/patterns/ (APG). Read the APG pattern before hand-rolling any composite widget — dialog, tabs, menu, combobox, listbox, tree, grid.

Rule zero: use the element that already does it

A native element arrives with role, keyboard behavior, focus, and screen-reader announcements. ARIA only describes; it never implements.

Need Use Not
do something
go somewhere
labeled input + placeholder-as-label
group of choices
a styled
with a heading
navigation nested
s with class names
headings

–
in order

The first ARIA rule: if a native element or attribute can do it, do not use ARIA. A wrong role is worse than no role — it overwrites correct implicit semantics.

Keyboard: the whole interface, no mouse

Test every change by unplugging the mouse mentally and walking the flow with Tab / Shift+Tab / Enter / Space / Escape / arrows.

  • Everything interactive is reachable and operable by keyboard, in a logical order that follows the visual order. tabindex values greater than 0 are almost always wrong.
  • Focus is always visible. Never outline: none without an equally visible replacement. Style :focus-visible so mouse users do not see rings and keyboard users always do.
  • Escape closes the topmost overlay; focus returns to the element that opened it.
  • Modals trap focus and make the rest of the page inert — with showModal(), or the inert attribute. Closing must restore focus deliberately; the browser will not.
  • Composite widgets follow the APG's key contract: roving tabindex or aria-activedescendant for tabs and menus, arrow keys to move, Home/End to jump, typeahead in listboxes.
  • A skip-to-content link as the first focusable element on full-page layouts.
  • Do not hijack scroll or single-key shortcuts without an off switch (WCAG 2.1.4).
  • Route changes need focus management. On client-side navigation move focus to the new

    (or a container with tabIndex={-1}) and update document.title, or a screen-reader user hears nothing change.

Forms

  • Every control has a programmatic label. Placeholder text is a hint, never a label.
  • Group related controls with
    /; a group of radios needs both.
  • Errors: aria-invalid on the field, an error message associated with aria-describedby, and an error summary at the top of a long form linking to each offending field. Validate on blur or submit, not on every keystroke.
  • Required fields: required plus a visible marker, not color alone.
  • Help the input method: type="email", inputMode="numeric", autoComplete="one-time-code", and generous touch targets.
  • Never disable the submit button as the only feedback — show what is missing.
  • Autofill and paste must work; do not block them.

Images, color, motion

  • alt is required on every . Informative: describe the content's purpose. Text in an image: put the text in alt. Decorative: alt="" (an empty string, not a missing attribute). A complex chart needs a text alternative, not an alt paragraph.
  • SVG: role="img" + </code> when meaningful, <code class="readme-inline-code">aria-hidden="true"</code> when decorative. An icon-only button needs an accessible name: <code class="readme-inline-code">aria-label</code> on the button, not on the <code class="readme-inline-code"><svg></code>.</li> <li>Contrast: <strong>4.5:1</strong> for body text, <strong>3:1</strong> for large text and for UI-component boundaries and focus indicators. Placeholder text and disabled text are the usual failures.</li> <li><strong>Never encode meaning in color alone</strong> (status, validation, chart series) — pair it with text, an icon, or a pattern.</li> <li>Respect <code class="readme-inline-code">prefers-reduced-motion: reduce</code>: disable parallax, autoplay, and large movement.</li> <li>WCAG 2.2 additions: focus must not be entirely hidden by sticky headers (2.4.11), and dragging interactions need a single-pointer alternative (2.5.7).</li> </ul> <h2 id="live-regions-and-async-ui" class="scroll-mt-20">Live regions and async UI</h2> <ul> <li>Announce results that appear without a focus change: <code class="readme-inline-code">role="status"</code> (<code class="readme-inline-code">aria-live="polite"</code>) for counts, saves, and toasts; <code class="readme-inline-code">role="alert"</code> (<code class="readme-inline-code">assertive</code>) only for errors that need interruption.</li> <li>The live region container must exist <strong>in the DOM before</strong> you write into it. Inserting the container and the text in the same commit announces nothing.</li> <li>Loading states need an accessible name (<code class="readme-inline-code">aria-busy</code>, a visually-hidden "Loading posts"), not just a spinner.</li> <li>Do not steal focus to announce.</li> </ul> <h2 id="verifying-automated-tools-catch-about-a-third" class="scroll-mt-20">Verifying — automated tools catch about a third</h2> <ol> <li><strong>Automated:</strong> <code class="readme-inline-code">eslint-plugin-jsx-a11y</code> in CI, plus axe (<code class="readme-inline-code">@axe-core/react</code> in dev, <code class="readme-inline-code">vitest-axe</code>/<code class="readme-inline-code">jest-axe</code> in tests, or the browser extension). Fix everything it reports, then remember how much it cannot see.</li> <li><strong>Keyboard pass</strong> on the real page: complete the primary flow with no mouse. Note the focus ring at every step.</li> <li><strong>Zoom and reflow:</strong> 200% browser zoom, and a 320 px-wide viewport, with no loss of content or function and no horizontal scrolling (1.4.10 / 1.4.4).</li> <li><strong>Screen reader smoke test:</strong> VoiceOver (⌘F5) or NVDA. Check the page title, the landmark list, that headings outline the page, that each control announces a name/role/state, and that dynamic updates are announced.</li> <li><strong>Testing Library asserts by role and name</strong> — <code class="readme-inline-code">getByRole('button', { name: 'Save' })</code> fails when the accessible name is missing, which is exactly the regression you want caught.</li> </ol> <h2 id="the-short-list-to-refuse" class="scroll-mt-20">The short list to refuse</h2> <ul> <li><code class="readme-inline-code">div</code> with <code class="readme-inline-code">onClick</code> instead of a button.</li> <li><code class="readme-inline-code">outline: none</code> with no focus style.</li> <li>Placeholder as a label.</li> <li><code class="readme-inline-code">aria-label</code> on a non-interactive element to "give it a name".</li> <li>A modal that does not trap focus, or that drops focus on close.</li> <li>A route change that moves nothing and announces nothing.</li> <li><code class="readme-inline-code">title</code> attributes as the only explanation.</li> <li>Autoplay media, or animation that ignores reduced-motion.</li> <li>Accessibility "checked later": retrofitting semantics costs multiples of building it in.</li> </ul> </div></div></section></div><aside class="flex flex-col gap-y-4 @4xl:sticky @4xl:top-4 @4xl:self-start @4xl:max-h-[calc(100dvh-2rem)] @4xl:overflow-y-auto"><div class="border border-rule bg-bg"><div class="bg-panel px-3.5 py-2.5 border-b border-rule"><span class="font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint">details</span></div><div class="p-4 flex flex-col gap-y-2.5"><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">version</span><span class="text-ink truncate text-right lowercase tabular-nums">v0.1.22</span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">type</span><span class="text-ink truncate text-right lowercase ">binary</span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">license</span><span class="text-ink truncate text-right ">Apache-2.0</span></div><div class="flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0"><span class="text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]">repo</span><a href="https://github.com/iii-hq/workers" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink lowercase hover:text-accent transition-colors min-w-0 text-right justify-end"><span class="truncate">iii-hq/workers</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></div></div><section id="used-in-kits" class="border border-rule bg-bg scroll-mt-20" aria-labelledby="used-in-kits-title"><div class="flex items-baseline justify-between bg-panel px-3.5 py-2.5 border-b border-rule"><span id="used-in-kits-title" class="font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint">used in <!-- -->1<!-- --> <!-- -->kit</span></div><ul class="divide-y divide-rule-2"><li><a class="group flex items-start gap-x-2.5 px-3.5 py-2.5 hover:bg-panel transition-colors" href="/kits/iii/deepwork"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false" class="size-4 shrink-0 text-type-kit mt-0.5" fill="none" stroke="currentColor" stroke-width="1.25" stroke-linejoin="miter" stroke-linecap="square"><path d="M2 5h2.9a1.9 1.9 0 1 1 3.2 0H11v2.9a1.9 1.9 0 1 1 0 3.2V14H8.1a1.6 1.6 0 0 0-3.2 0H2Z"></path></svg><span class="min-w-0 flex flex-col"><span class="font-mono text-[13px] text-ink truncate group-hover:underline underline-offset-4"><span class="text-ink-faint">iii<!-- -->/</span>deepwork</span><span class="font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost tabular-nums">v<!-- -->0.2.1<!-- --> · <!-- -->6<!-- --> <!-- -->profiles</span></span></a></li></ul></section><div class="border border-rule bg-bg"><div class="bg-panel px-3.5 py-2.5 border-b border-rule"><span class="font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint">skills</span></div><div class="max-h-[min(60dvh,28rem)] overflow-y-auto"><section aria-labelledby="skills-tree-kanban"><div id="skills-tree-kanban" class="flex items-baseline justify-between px-3.5 py-2 bg-paper-2 border-b border-rule-2"><span class="font-mono text-[11px] font-medium uppercase tracking-[0.06em] text-ink-faint">files</span><span class="font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost tabular-nums">27</span></div><nav aria-label="skill files" class="px-3 pt-2 pb-3"><ul class="flex flex-col gap-y-0.5"><li style="padding-left:0"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=SKILL.md&version=0.1.22">SKILL.md</a></li><li style="padding-left:0" class="min-w-0"><div class="font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none">agents<!-- -->/</div><ul class="flex flex-col gap-y-0.5 mt-0.5"><li style="padding-left:10px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=agents%2Fade-worker-designer.md&version=0.1.22">ade-worker-designer.md</a></li><li style="padding-left:10px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=agents%2Fbackend-engineer.md&version=0.1.22">backend-engineer.md</a></li><li style="padding-left:10px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=agents%2Ffrontend-engineer.md&version=0.1.22">frontend-engineer.md</a></li><li style="padding-left:10px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=agents%2Fproduct-manager.md&version=0.1.22">product-manager.md</a></li><li style="padding-left:10px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=agents%2Ftech-lead.md&version=0.1.22">tech-lead.md</a></li></ul></li><li style="padding-left:0" class="min-w-0"><div class="font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none">skills<!-- -->/</div><ul class="flex flex-col gap-y-0.5 mt-0.5"><li style="padding-left:10px" class="min-w-0"><div class="font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none">ade-worker-design<!-- -->/</div><ul class="flex flex-col gap-y-0.5 mt-0.5"><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Fade-worker-design&version=0.1.22">index.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Fade-worker-design%2Fconsole-design.md&version=0.1.22">console-design.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Fade-worker-design%2Fconsole-injectable-ui.md&version=0.1.22">console-injectable-ui.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Fade-worker-design%2Fpatterns.md&version=0.1.22">patterns.md</a></li></ul></li><li style="padding-left:10px" class="min-w-0"><div class="font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none">frontend<!-- -->/</div><ul class="flex flex-col gap-y-0.5 mt-0.5"><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend&version=0.1.22">index.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Ffrontend-testing.md&version=0.1.22">frontend-testing.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Fiii-browser-sdk.md&version=0.1.22">iii-browser-sdk.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Freact.md&version=0.1.22">react.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Ftanstack-query.md&version=0.1.22">tanstack-query.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Ftanstack-router.md&version=0.1.22">tanstack-router.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Fvite.md&version=0.1.22">vite.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors bg-ink text-bg" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Fweb-accessibility.md&version=0.1.22">web-accessibility.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ffrontend%2Fweb-performance.md&version=0.1.22">web-performance.md</a></li></ul></li><li style="padding-left:10px" class="min-w-0"><div class="font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none">iii-node<!-- -->/</div><ul class="flex flex-col gap-y-0.5 mt-0.5"><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Fiii-node&version=0.1.22">index.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Fiii-node%2Fconfiguration.md&version=0.1.22">configuration.md</a></li></ul></li><li style="padding-left:10px" class="min-w-0"><div class="font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none">tickets<!-- -->/</div><ul class="flex flex-col gap-y-0.5 mt-0.5"><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ftickets&version=0.1.22">index.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ftickets%2Facceptance-review.md&version=0.1.22">acceptance-review.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ftickets%2Ffeature-planning.md&version=0.1.22">feature-planning.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ftickets%2Fkanban-tickets.md&version=0.1.22">kanban-tickets.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ftickets%2Fticket-orchestration.md&version=0.1.22">ticket-orchestration.md</a></li><li style="padding-left:20px"><a class="block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink" href="/workers/kanban?tab=skills&skill=skills%2Ftickets%2Fticket-worker.md&version=0.1.22">ticket-worker.md</a></li></ul></li></ul></li></ul></nav></section></div></div><div class="border border-rule bg-bg"><div class="bg-panel px-3.5 py-2.5 border-b border-rule"><span class="font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint">author</span></div><div class="p-4 flex flex-col gap-y-2.5"><div class="flex items-center gap-x-2 font-mono text-[13px]"><img src="https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png" alt="" class="size-5 object-cover"/><span class="text-ink lowercase">iii</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-check size-3.5 text-accent" aria-hidden="true"><path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z"></path><path d="m9 12 2 2 4-4"></path></svg></div></div></div></aside></div></div></div><!--$--><!--/$--></main><footer class="border-t border-rule bg-bg"><div class="flex items-center justify-between flex-wrap gap-x-6 gap-y-3 px-9 py-4.5"><div class="inline-flex items-center gap-x-4"><a aria-label="iii worker — registry home" class="inline-flex items-center gap-x-2 text-ink" href="/"><svg viewBox="0 0 1075.74 1075.69" aria-hidden="true" focusable="false" class="size-[14px]" fill="currentColor"><rect x="0" y="0.05" width="268.94" height="268.94"></rect><rect x="403.4" y="0.05" width="268.94" height="268.94"></rect><rect x="806.81" y="0.05" width="268.94" height="268.94"></rect><rect x="0" y="403.45" width="268.94" height="672.24"></rect><rect x="403.4" y="403.45" width="268.94" height="672.24"></rect><rect x="806.81" y="403.45" width="268.94" height="672.24"></rect></svg><span class="font-mono text-[13px] font-medium tracking-[-0.02em] lowercase">iii / worker</span></a><a href="https://github.com/iii-hq/iii" target="_blank" rel="noopener noreferrer" aria-label="iii-hq/iii on GitHub — 18,845 stars" class="inline-flex shrink-0 items-center gap-x-2 border border-rule px-2.5 py-1 font-mono text-[13px] text-ink-faint transition-colors hover:text-ink sm:hidden"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false" class="size-3.5 shrink-0" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"></path></svg><span class="hidden sm:inline lowercase">stars</span><span class="tabular-nums text-ink" aria-hidden="true">18.8k</span></a></div><nav aria-label="footer" class="flex items-center flex-wrap gap-x-6 gap-y-2"><a href="https://iii.dev" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">iii.dev<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><a href="https://iii.dev/docs" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">docs<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/collections">collections</a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/leaderboard">leaderboard</a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/publish">publish</a><a class="font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors" href="/badge-preview">badge preview</a><a href="https://discord.gg/iiidev" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">discord<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><a href="https://github.com/iii-hq/iii" target="_blank" rel="noreferrer" class="inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors">github<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link size-3 shrink-0" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></nav></div></footer></div></div><script src="/_next/static/chunks/0b_t-9oq5.7ee.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[20685,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"SiteHeader\"]\n5:I[90280,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n6:I[69616,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n7:I[46610,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0-3vzlyvl.dxh.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"\"]\ne:I[50609,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/02eqejg_b4k2y.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n11:I[41074,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0-3vzlyvl.dxh.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"default\"]\n13:I[51557,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"OutletBoundary\"]\n14:\"$Sreact.suspense\"\n17:I[51557,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"ViewportBoundary\"]\n19:I[51557,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"MetadataBoundary\"]\n:HL[\"/_next/static/chunks/05q2cs4d4qqrk.css?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"style\"]\n:HL[\"/_next/static/media/387ee14c0e0fe675-s.p.16njqniuj6huf.woff2?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-N8DCTFB8\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"},\"title\":\"Google Tag Manager\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"workers\",\"kanban?skill=skills%2Ffrontend%2Fweb-accessibility.md\u0026tab=skills\u0026version=0.1.22\"],\"q\":\"?skill=skills%2Ffrontend%2Fweb-accessibility.md\u0026tab=skills\u0026version=0.1.22\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"workers\",{\"children\":[[\"slug\",\"kanban\",\"d\",null],{\"children\":[\"__PAGE__?{\\\"skill\\\":\\\"skills/frontend/web-accessibility.md\\\",\\\"tab\\\":\\\"skills\\\",\\\"version\\\":\\\"0.1.22\\\"}\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/05q2cs4d4qqrk.css?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"chivo_mono_90504305-module__244I6q__variable antialiased\",\"data-theme\":\"light\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-bg text-ink font-sans min-h-full flex flex-col\",\"children\":[[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n try {\\n var stored = localStorage.getItem('iii-theme');\\n if (stored === 'dark' || stored === 'light') {\\n document.documentElement.dataset.theme = stored;\\n } else {\\n document.documentElement.dataset.theme = 'light';\\n }\\n } catch (_) {\\n document.documentElement.dataset.theme = 'light';\\n }\\n\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-N8DCTFB8');\\n\"}}]],[\"$\",\"noscript\",null,{\"children\":\"$2\"}],[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-[1200px] @container border-x border-rule min-h-screen bg-bg flex flex-col\",\"children\":[[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-50 focus:bg-ink focus:text-bg focus:px-3 focus:py-2 focus:font-mono focus:text-[13px] lowercase\",\"children\":\"skip to content\"}],[\"$\",\"$L3\",null,{\"githubStars\":\"$L4\"}],[\"$\",\"div\",null,{\"className\":\"flex-1 overflow-x-clip flex flex-col\",\"children\":[[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"flex-1\",\"tabIndex\":-1,\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"page-transition\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-6 gap-y-4 px-9 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-faint mb-3\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-accent\",\"children\":[\"$$\",[\"$\",\"span\",null,{\"className\":\"text-ink ml-2\",\"children\":\"error\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-baseline flex-wrap gap-x-3 gap-y-1\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"font-mono text-[28px] font-medium tracking-[-0.01em] text-ink lowercase\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex items-baseline gap-x-2 tabular-nums\",\"children\":[\"404\",[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"blink inline-block w-[6px] h-[13px] bg-ink align-middle translate-y-[1px]\"}]]}]}],\"$undefined\",null]}],[\"$\",\"p\",null,{\"className\":\"mt-3 font-mono text-[14px] leading-[1.7] text-ink-faint max-w-[60ch] lowercase\",\"children\":\"that worker is not in the registry. it may have been renamed or never published.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-3\",\"children\":[\"$\",\"$L7\",null,{\"href\":\"/\",\"className\":\"inline-flex items-center justify-center gap-x-2 whitespace-nowrap font-mono lowercase rounded-none transition-[background-color,color,border-color,transform] duration-150 ease-out focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent disabled:pointer-events-none disabled:opacity-40 select-none active:scale-[0.97] motion-reduce:active:scale-100 bg-ink text-bg border border-ink hover:bg-bg hover:text-ink h-9 px-5 text-[13px]\",\"children\":\"back to registry\"}]}]]}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],\"$L8\"]}]]}]]}]}]]}],{\"children\":[\"$L9\",{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,\"$@c\"]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[\"$Lf\"]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"8:[\"$\",\"footer\",null,{\"className\":\"border-t border-rule bg-bg\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between flex-wrap gap-x-6 gap-y-3 px-9 py-4.5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"inline-flex items-center gap-x-4\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/\",\"aria-label\":\"iii worker — registry home\",\"className\":\"inline-flex items-center gap-x-2 text-ink\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 1075.74 1075.69\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-[14px]\",\"fill\":\"currentColor\",\"children\":[[\"$\",\"rect\",null,{\"x\":\"0\",\"y\":\"0.05\",\"width\":\"268.94\",\"height\":\"268.94\"}],[\"$\",\"rect\",null,{\"x\":\"403.4\",\"y\":\"0.05\",\"width\":\"268.94\",\"height\":\"268.94\"}],[\"$\",\"rect\",null,{\"x\":\"806.81\",\"y\":\"0.05\",\"width\":\"268.94\",\"height\":\"268.94\"}],[\"$\",\"rect\",null,{\"x\":\"0\",\"y\":\"403.45\",\"width\":\"268.94\",\"height\":\"672.24\"}],[\"$\",\"rect\",null,{\"x\":\"403.4\",\"y\":\"403.45\",\"width\":\"268.94\",\"height\":\"672.24\"}],[\"$\",\"rect\",null,{\"x\":\"806.81\",\"y\":\"403.45\",\"width\":\"268.94\",\"height\":\"672.24\"}]]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[13px] font-medium tracking-[-0.02em] lowercase\",\"children\":\"iii / worker\"}]]}],\"$L10\"]}],[\"$\",\"nav\",null,{\"aria-label\":\"footer\",\"className\":\"flex items-center flex-wrap gap-x-6 gap-y-2\",\"children\":[[\"$\",\"a\",\"https://iii.dev\",{\"href\":\"https://iii.dev\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"iii.dev\",[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M15 3h6v6\",\"key\":\"1q9fwt\"}],[\"path\",{\"d\":\"M10 14 21 3\",\"key\":\"gplh6r\"}],[\"path\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\",\"key\":\"a6xqqp\"}]],\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}],[\"$\",\"a\",\"https://iii.dev/docs\",{\"href\":\"https://iii.dev/docs\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"docs\",[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}],[\"$\",\"$L7\",\"/collections\",{\"href\":\"/collections\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"collections\"}],[\"$\",\"$L7\",\"/leaderboard\",{\"href\":\"/leaderboard\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"leaderboard\"}],[\"$\",\"$L7\",\"/publish\",{\"href\":\"/publish\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"publish\"}],[\"$\",\"$L7\",\"/badge-preview\",{\"href\":\"/badge-preview\",\"className\":\"font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":\"badge preview\"}],[\"$\",\"a\",\"https://discord.gg/iiidev\",{\"href\":\"https://discord.gg/iiidev\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"discord\",[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}],[\"$\",\"a\",\"https://github.com/iii-hq/iii\",{\"href\":\"https://github.com/iii-hq/iii\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink-faint hover:text-ink lowercase transition-colors\",\"children\":[\"github\",[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$L12\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0-3vzlyvl.dxh.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L13\",null,{\"children\":[\"$\",\"$14\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@15\"}]}]]}]\n16:[]\nc:\"$W16\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L17\",null,{\"children\":\"$L18\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L19\",null,{\"children\":[\"$\",\"$14\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1a\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\nf:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/05q2cs4d4qqrk.css?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n18:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"4:[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/iii\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"aria-label\":\"iii-hq/iii on GitHub — 18,845 stars\",\"className\":\"shrink-0 items-center gap-x-2 border border-rule px-2.5 py-1 font-mono text-[13px] text-ink-faint transition-colors hover:text-ink hidden sm:inline-flex\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-3.5 shrink-0\",\"fill\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"d\":\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z\"}]}],[\"$\",\"span\",null,{\"className\":\"hidden sm:inline lowercase\",\"children\":\"stars\"}],[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"aria-hidden\":true,\"children\":\"18.8k\"}]]}]\n10:[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/iii\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"aria-label\":\"iii-hq/iii on GitHub — 18,845 stars\",\"className\":\"inline-flex shrink-0 items-center gap-x-2 border border-rule px-2.5 py-1 font-mono text-[13px] text-ink-faint transition-colors hover:text-ink sm:hidden\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-3.5 shrink-0\",\"fill\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"d\":\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z\"}]}],[\"$\",\"span\",null,{\"className\":\"hidden sm:inline lowercase\",\"children\":\"stars\"}],[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"aria-hidden\":true,\"children\":\"18.8k\"}]]}]\n"])</script><script>self.__next_f.push([1,"1b:I[18418,[\"/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0.vqct1a~k736.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"IconMark\"]\n15:null\n"])</script><script>self.__next_f.push([1,"1a:[[\"$\",\"title\",\"0\",{\"children\":\"kanban - iii worker\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"File-backed kanban board — tickets, threaded comments, agent assignment, the kanban:change and kanban:comment trigger types, and an injectable console board with agent profiles for planning and review.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"3\",{\"rel\":\"canonical\",\"href\":\"https://workers.iii.dev/workers/kanban\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:title\",\"content\":\"kanban - iii worker\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:description\",\"content\":\"File-backed kanban board — tickets, threaded comments, agent assignment, the kanban:change and kanban:comment trigger types, and an injectable console board with agent profiles for planning and review.\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:url\",\"content\":\"https://workers.iii.dev/workers/kanban\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image\",\"content\":\"https://workers.iii.dev/workers/kanban/opengraph-image?bced171a25d0f70f\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:alt\",\"content\":\"iii worker\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:title\",\"content\":\"kanban - iii worker\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:description\",\"content\":\"File-backed kanban board — tickets, threaded comments, agent assignment, the kanban:change and kanban:comment trigger types, and an injectable console board with agent profiles for planning and review.\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:image\",\"content\":\"https://workers.iii.dev/workers/kanban/opengraph-image?bced171a25d0f70f\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:image:alt\",\"content\":\"iii worker\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"20\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0n6vou73am7b3.ico\",\"sizes\":\"48x48\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1b\",\"21\",{}]]\n"])</script><script>self.__next_f.push([1,":HL[\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"image\"]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"div\",null,{\"className\":\"page-transition\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"kanban\\\",\\\"description\\\":\\\"File-backed kanban board — tickets, threaded comments, agent assignment, the kanban:change and kanban:comment trigger types, and an injectable console board with agent profiles for planning and review.\\\",\\\"applicationCategory\\\":\\\"DeveloperApplication\\\",\\\"softwareVersion\\\":\\\"0.1.22\\\",\\\"url\\\":\\\"https://workers.iii.dev/workers/kanban\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"codeRepository\\\":\\\"https://github.com/iii-hq/workers\\\",\\\"author\\\":{\\\"@type\\\":\\\"Person\\\",\\\"name\\\":\\\"iii\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-6 gap-y-4 px-9 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-faint mb-3\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-accent\",\"children\":[\"$$\",[\"$\",\"span\",null,{\"className\":\"text-ink ml-2\",\"children\":\"registry / workers\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-baseline flex-wrap gap-x-3 gap-y-1\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"font-mono text-[28px] font-medium tracking-[-0.01em] text-ink lowercase\",\"children\":\"kanban\"}],\"$undefined\",[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost tabular-nums\",\"children\":\"v0.1.22\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-3 font-mono text-[14px] leading-[1.7] text-ink-faint max-w-[60ch] lowercase\",\"children\":\"File-backed kanban board — tickets, threaded comments, agent assignment, the kanban:change and kanban:comment trigger types, and an injectable console board with agent profiles for planning and review.\"}]]}],null]}],[\"$\",\"div\",null,{\"className\":\"px-9 pb-8 flex flex-col gap-y-6\",\"children\":[null,null,[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-5 border border-rule bg-bg p-5 @2xl:p-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-4 gap-y-2\",\"children\":[[\"$\",\"span\",null,{\"data-type-mark\":\"worker\",\"className\":\"inline-flex items-center gap-x-1.5 shrink-0\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-4 shrink-0 text-type-worker\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":1.25,\"strokeLinejoin\":\"miter\",\"strokeLinecap\":\"square\",\"children\":[[\"$\",\"path\",null,{\"d\":\"M8 1.6 13.6 4.8v6.4L8 14.4 2.4 11.2V4.8Z\"}],null,null]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase leading-none tracking-[0.06em] text-ink-faint\",\"children\":\"worker\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-2 font-mono text-[13px]\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"alt\":\"\",\"className\":\"size-5 object-cover\"}],[\"$\",\"span\",null,{\"className\":\"text-ink lowercase\",\"children\":\"iii\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-x-1 text-ink-faint\",\"children\":[[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\",\"key\":\"3c2336\"}],[\"path\",{\"d\":\"m9 12 2 2 4-4\",\"key\":\"dzmm74\"}]],\"className\":\"lucide-badge-check size-3.5 text-accent\",\"aria-hidden\":true}],[\"$\",\"span\",null,{\"className\":\"text-[11px] uppercase tracking-[0.06em]\",\"children\":\"verified\"}]]}]]}],[\"$\",\"span\",null,{\"className\":\"flex flex-wrap items-center gap-x-3 gap-y-1 font-mono text-[12px] text-ink-ghost tabular-nums\",\"children\":[[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"247\"}],\" installs\"]}],[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-rule\",\"children\":\"/\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"64\"}],\" in 7d\"]}]],[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-rule\",\"children\":\"/\"}],\"$L1c\"]]}]]}],\"$L1d\",\"$L1e\",\"$L1f\"]}],false,false]}],\"$L20\"]}]\n"])</script><script>self.__next_f.push([1,"21:I[15957,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0-3vzlyvl.dxh.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"InstallCommand\"]\n22:I[33516,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0-3vzlyvl.dxh.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"Image\"]\n27:I[84938,[\"/_next/static/chunks/0wcm0wpln.-h..js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0c0r_-py6v_70.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\",\"/_next/static/chunks/0-3vzlyvl.dxh.js?dpl=dpl_Aek62oZSuVbHEfXvLZ3d1fURYNU1\"],\"PageTabs\"]\n1c:[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink\",\"children\":\"14\"}],\" \",\"today\"]}]\n1d:[\"$\",\"$L21\",null,{\"workerName\":\"kanban\",\"version\":\"0.1.22\",\"kind\":\"worker\"}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-2 font-mono text-[12px] lowercase\",\"children\":[[\"$\",\"span\",null,{\"className\":\"border border-rule px-2 py-1 text-ink\",\"children\":\"binary\"}],[\"$\",\"span\",null,{\"className\":\"border border-rule px-2 py-1 text-ink normal-case\",\"children\":[\"license: \",\"Apache-2.0\"]}],[[\"$\",\"$L7\",\"agents\",{\"href\":\"/search?tag=agents\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"agents\"}],[\"$\",\"$L7\",\"board\",{\"href\":\"/search?tag=board\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"board\"}],[\"$\",\"$L7\",\"console-ui\",{\"href\":\"/search?tag=console-ui\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"console-ui\"}],[\"$\",\"$L7\",\"kanban\",{\"href\":\"/search?tag=kanban\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"kanban\"}],[\"$\",\"$L7\",\"tickets\",{\"href\":\"/search?tag=tickets\",\"className\":\"border border-rule-2 px-2 py-1 text-ink-faint hover:text-ink hover:border-rule transition-colors\",\"children\":\"tickets\"}]]]}],[\"$\",\"ul\",null,{\"aria-label\":\"Supported platforms\",\"className\":\"flex flex-wrap items-center font-mono text-[12px] gap-x-2 gap-y-1.5 \",\"children\":[[\"$\",\"li\",\"apple\",{\"title\":\"macOS: arm64, x64\",\"className\":\"inline-flex items-center border border-rule bg-bg gap-x-2 px-2 py-1\",\"children\":[[\"$\",\"$L22\",null,{\"src\":\"/icons/apple_dark.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":209,\"height\":256,\"className\":\"shrink-0 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-4 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"macOS\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"text-ink tabular-nums\",\"children\":\"arm64 · x64\"}]]}],[\"$\",\"li\",\"linux\",{\"title\":\"Linux: arm64, armv7, x64\",\"className\":\"inline-flex items-center border border-rule bg-bg gap-x-2 px-2 py-1\",\"children\":[[\"$\",\"$L22\",null,{\"src\":\"/icons/linux.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":256,\"height\":295,\"className\":\"shrink-0 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-4 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Linux\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"text-ink tabular-nums\",\"children\":\"arm64 · armv7 · x64\"}]]}],[\"$\",\"li\",\"windows\",{\"title\":\"Windows: arm64, x64\",\"className\":\"inline-flex items-center border border-rule bg-bg gap-x-2 px-2 py-1\",\"children\":[[\"$\",\"$L22\",null,{\"src\":\"/icons/windows.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":88,\"height\":88,\"className\":\"shrink-0 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-4 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Windows\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"text-ink tabular-nums\",\"children\":\"arm64 · x64\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-x-4 gap-y-2 font-mono text-[12px]\",\"children\":[[[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?version=0.1.22\u0026tab=api\",\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"30\"}],[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"functions\"}]]}],[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?version=0.1.22\u0026tab=api\",\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"2\"}],[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"triggers\"}]]}]],[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?version=0.1.22\u0026tab=skills\",\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"27\"}],[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"skills\"}]]}],[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?version=0.1.22\u0026tab=deps\",\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[\"$L23\",\"$L24\"]}],\"$L25\",\"$L26\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"div\",null,{\"className\":\"flex flex-col @2xl:flex-row @2xl:items-center gap-3 border-t border-rule-2 pt-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-2 min-w-0 font-mono text-[13px]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[11px] uppercase tracking-[0.06em] text-ink-faint shrink-0\",\"children\":\"repo\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/workers\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink lowercase hover:text-accent transition-colors min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"iii-hq/workers\"}],[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}]]}],[\"$\",\"p\",null,{\"className\":\"font-mono text-[12px] leading-[1.5] text-ink-faint @2xl:ml-auto @2xl:max-w-[42ch] @2xl:text-right\",\"children\":\"exact versions are immutable; binary and bundle artifacts are digest-pinned.\"}]]}]\n"])</script><script>self.__next_f.push([1,"20:[\"$\",\"div\",null,{\"className\":\"px-9 pb-12 flex flex-col gap-y-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 @4xl:grid-cols-[1fr_280px] gap-x-8 gap-y-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0 flex flex-col gap-y-6\",\"children\":[[\"$\",\"$L27\",null,{\"slug\":\"kanban\",\"activeTab\":\"skills\",\"version\":\"0.1.22\",\"basePath\":\"/workers\",\"tabs\":\"$undefined\"}],false,false,\"$L28\",false,false,false,false]}],[\"$\",\"aside\",null,{\"className\":\"flex flex-col gap-y-4 @4xl:sticky @4xl:top-4 @4xl:self-start @4xl:max-h-[calc(100dvh-2rem)] @4xl:overflow-y-auto\",\"children\":[[\"$\",\"div\",null,{\"className\":\"border border-rule bg-bg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-panel px-3.5 py-2.5 border-b border-rule\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"details\"}]}],[\"$\",\"div\",null,{\"className\":\"p-4 flex flex-col gap-y-2.5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"version\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right lowercase tabular-nums\",\"children\":\"v0.1.22\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"type\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right lowercase \",\"children\":\"binary\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"license\"}],[\"$\",\"span\",null,{\"className\":\"text-ink truncate text-right \",\"children\":\"Apache-2.0\"}]]}],null,[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between font-mono text-[13px] gap-x-3 min-w-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint shrink-0 uppercase tracking-[0.06em] text-[11px]\",\"children\":\"repo\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/workers\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex items-center gap-x-1 font-mono text-[13px] text-ink lowercase hover:text-accent transition-colors min-w-0 text-right justify-end\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"iii-hq/workers\"}],[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$8:props:children:props:children:1:props:children:0:props:children:1:props:iconNode\",\"className\":\"lucide-external-link size-3 shrink-0\",\"aria-hidden\":true}]]}]]}],\"$undefined\"]}]]}],[\"$\",\"section\",null,{\"id\":\"used-in-kits\",\"className\":\"border border-rule bg-bg scroll-mt-20\",\"aria-labelledby\":\"used-in-kits-title\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between bg-panel px-3.5 py-2.5 border-b border-rule\",\"children\":[\"$\",\"span\",null,{\"id\":\"used-in-kits-title\",\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":[\"used in \",1,\" \",\"kit\"]}]}],[\"$\",\"ul\",null,{\"className\":\"divide-y divide-rule-2\",\"children\":[[\"$\",\"li\",\"iii/deepwork\",{\"children\":[\"$\",\"$L7\",null,{\"href\":\"/kits/iii/deepwork\",\"className\":\"group flex items-start gap-x-2.5 px-3.5 py-2.5 hover:bg-panel transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 16 16\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"size-4 shrink-0 text-type-kit mt-0.5\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":1.25,\"strokeLinejoin\":\"miter\",\"strokeLinecap\":\"square\",\"children\":[null,[\"$\",\"path\",null,{\"d\":\"M2 5h2.9a1.9 1.9 0 1 1 3.2 0H11v2.9a1.9 1.9 0 1 1 0 3.2V14H8.1a1.6 1.6 0 0 0-3.2 0H2Z\"}],null]}],[\"$\",\"span\",null,{\"className\":\"min-w-0 flex flex-col\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-[13px] text-ink truncate group-hover:underline underline-offset-4\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-ink-faint\",\"children\":[\"iii\",\"/\"]}],\"deepwork\"]}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost tabular-nums\",\"children\":[\"v\",\"0.2.1\",\" · \",6,\" \",\"profiles\"]}]]}]]}]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"border border-rule bg-bg\",\"children\":[\"$L29\",\"$L2a\"]}],\"$L2b\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"23:[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"1\"}]\n24:[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"deps\"}]\n25:[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?version=0.1.22\u0026tab=versions\",\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"v0.1.22\"}],[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"version\"}]]}]\n26:[\"$\",\"$L7\",null,{\"href\":\"#used-in-kits\",\"className\":\"inline-flex items-baseline gap-x-1.5 text-ink-faint hover:text-ink transition-colors\",\"children\":[[\"$\",\"span\",null,{\"className\":\"tabular-nums text-ink\",\"children\":\"1\"}],[\"$\",\"span\",null,{\"className\":\"uppercase tracking-[0.06em] text-[11px]\",\"children\":\"kit\"}]]}]\n29:[\"$\",\"div\",null,{\"className\":\"bg-panel px-3.5 py-2.5 border-b border-rule\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"skills\"}]}]\n"])</script><script>self.__next_f.push([1,"2a:[\"$\",\"div\",null,{\"className\":\"max-h-[min(60dvh,28rem)] overflow-y-auto\",\"children\":[[\"$\",\"section\",null,{\"aria-labelledby\":\"skills-tree-kanban\",\"children\":[[\"$\",\"div\",null,{\"id\":\"skills-tree-kanban\",\"className\":\"flex items-baseline justify-between px-3.5 py-2 bg-paper-2 border-b border-rule-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.06em] text-ink-faint\",\"children\":\"files\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost tabular-nums\",\"children\":27}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"skill files\",\"className\":\"px-3 pt-2 pb-3\",\"children\":[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5\",\"children\":[[\"$\",\"li\",\"SKILL.md\",{\"style\":{\"paddingLeft\":0},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=SKILL.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"SKILL.md\"}]}],[\"$\",\"li\",\"agents\",{\"style\":{\"paddingLeft\":0},\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none\",\"children\":[\"agents\",\"/\"]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5 mt-0.5\",\"children\":[[\"$\",\"li\",\"agents/ade-worker-designer.md\",{\"style\":{\"paddingLeft\":10},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=agents%2Fade-worker-designer.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"ade-worker-designer.md\"}]}],[\"$\",\"li\",\"agents/backend-engineer.md\",{\"style\":{\"paddingLeft\":10},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=agents%2Fbackend-engineer.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"backend-engineer.md\"}]}],[\"$\",\"li\",\"agents/frontend-engineer.md\",{\"style\":{\"paddingLeft\":10},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=agents%2Ffrontend-engineer.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"frontend-engineer.md\"}]}],[\"$\",\"li\",\"agents/product-manager.md\",{\"style\":{\"paddingLeft\":10},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=agents%2Fproduct-manager.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"product-manager.md\"}]}],[\"$\",\"li\",\"agents/tech-lead.md\",{\"style\":{\"paddingLeft\":10},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=agents%2Ftech-lead.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"tech-lead.md\"}]}]]}]]}],[\"$\",\"li\",\"skills\",{\"style\":{\"paddingLeft\":0},\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none\",\"children\":[\"skills\",\"/\"]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5 mt-0.5\",\"children\":[[\"$\",\"li\",\"ade-worker-design\",{\"style\":{\"paddingLeft\":10},\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none\",\"children\":[\"ade-worker-design\",\"/\"]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5 mt-0.5\",\"children\":[[\"$\",\"li\",\"skills/ade-worker-design\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Fade-worker-design\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"index.md\"}]}],\"$L2c\",\"$L2d\",\"$L2e\"]}]]}],\"$L2f\",\"$L30\",\"$L31\"]}]]}]]}]}]]}],null]}]\n"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"div\",null,{\"className\":\"border border-rule bg-bg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-panel px-3.5 py-2.5 border-b border-rule\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-mono text-[11px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"author\"}]}],[\"$\",\"div\",null,{\"className\":\"p-4 flex flex-col gap-y-2.5\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-2 font-mono text-[13px]\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"alt\":\"\",\"className\":\"size-5 object-cover\"}],[\"$\",\"span\",null,{\"className\":\"text-ink lowercase\",\"children\":\"iii\"}],[\"$\",\"$L11\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$12:props:children:2:props:children:2:props:children:0:props:children:1:props:children:2:props:children:0:props:iconNode\",\"className\":\"lucide-badge-check size-3.5 text-accent\"}]]}]}]]}]\n28:[\"$\",\"section\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between mb-3\",\"children\":[\"$\",\"h2\",null,{\"className\":\"font-mono text-[12px] font-medium uppercase tracking-[0.18em] text-ink-faint\",\"children\":\"skill doc\"}]}],\"$L32\"]}]\n"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"li\",\"skills/ade-worker-design/console-design.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Fade-worker-design%2Fconsole-design.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"console-design.md\"}]}]\n2d:[\"$\",\"li\",\"skills/ade-worker-design/console-injectable-ui.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Fade-worker-design%2Fconsole-injectable-ui.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"console-injectable-ui.md\"}]}]\n2e:[\"$\",\"li\",\"skills/ade-worker-design/patterns.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Fade-worker-design%2Fpatterns.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"patterns.md\"}]}]\n"])</script><script>self.__next_f.push([1,"2f:[\"$\",\"li\",\"frontend\",{\"style\":{\"paddingLeft\":10},\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none\",\"children\":[\"frontend\",\"/\"]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5 mt-0.5\",\"children\":[[\"$\",\"li\",\"skills/frontend\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"index.md\"}]}],[\"$\",\"li\",\"skills/frontend/frontend-testing.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Ffrontend-testing.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"frontend-testing.md\"}]}],[\"$\",\"li\",\"skills/frontend/iii-browser-sdk.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Fiii-browser-sdk.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"iii-browser-sdk.md\"}]}],[\"$\",\"li\",\"skills/frontend/react.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Freact.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"react.md\"}]}],[\"$\",\"li\",\"skills/frontend/tanstack-query.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Ftanstack-query.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"tanstack-query.md\"}]}],[\"$\",\"li\",\"skills/frontend/tanstack-router.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Ftanstack-router.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"tanstack-router.md\"}]}],[\"$\",\"li\",\"skills/frontend/vite.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Fvite.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"vite.md\"}]}],[\"$\",\"li\",\"skills/frontend/web-accessibility.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Fweb-accessibility.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors bg-ink text-bg\",\"children\":\"web-accessibility.md\"}]}],[\"$\",\"li\",\"skills/frontend/web-performance.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ffrontend%2Fweb-performance.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"web-performance.md\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"30:[\"$\",\"li\",\"iii-node\",{\"style\":{\"paddingLeft\":10},\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none\",\"children\":[\"iii-node\",\"/\"]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5 mt-0.5\",\"children\":[[\"$\",\"li\",\"skills/iii-node\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Fiii-node\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"index.md\"}]}],[\"$\",\"li\",\"skills/iii-node/configuration.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Fiii-node%2Fconfiguration.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"configuration.md\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"31:[\"$\",\"li\",\"tickets\",{\"style\":{\"paddingLeft\":10},\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase text-ink-faint select-none\",\"children\":[\"tickets\",\"/\"]}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-0.5 mt-0.5\",\"children\":[[\"$\",\"li\",\"skills/tickets\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ftickets\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"index.md\"}]}],[\"$\",\"li\",\"skills/tickets/acceptance-review.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ftickets%2Facceptance-review.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"acceptance-review.md\"}]}],[\"$\",\"li\",\"skills/tickets/feature-planning.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ftickets%2Ffeature-planning.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"feature-planning.md\"}]}],[\"$\",\"li\",\"skills/tickets/kanban-tickets.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ftickets%2Fkanban-tickets.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"kanban-tickets.md\"}]}],[\"$\",\"li\",\"skills/tickets/ticket-orchestration.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ftickets%2Fticket-orchestration.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"ticket-orchestration.md\"}]}],[\"$\",\"li\",\"skills/tickets/ticket-worker.md\",{\"style\":{\"paddingLeft\":20},\"children\":[\"$\",\"$L7\",null,{\"href\":\"/workers/kanban?tab=skills\u0026skill=skills%2Ftickets%2Fticket-worker.md\u0026version=0.1.22\",\"scroll\":false,\"className\":\"block font-mono text-[12px] py-0.5 px-1.5 -mx-1.5 lowercase truncate transition-colors text-ink-faint hover:text-ink\",\"children\":\"ticket-worker.md\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"33:T2802,"])</script><script>self.__next_f.push([1,"\u003ch1 id=\"web-accessibility\" class=\"scroll-mt-20\"\u003eWeb accessibility\u003c/h1\u003e\n\u003cp\u003eTarget \u003cstrong\u003eWCAG 2.2 level AA\u003c/strong\u003e. Anything less is a bug filed against your users, and it is\ncheapest to build in.\u003c/p\u003e\n\u003cp\u003eStandard: \u003ca href=\"https://www.w3.org/WAI/WCAG22/quickref/\"\u003ehttps://www.w3.org/WAI/WCAG22/quickref/\u003c/a\u003e · patterns:\n\u003ca href=\"https://www.w3.org/WAI/ARIA/apg/patterns/\"\u003ehttps://www.w3.org/WAI/ARIA/apg/patterns/\u003c/a\u003e (APG). Read the APG pattern before hand-rolling any\ncomposite widget — dialog, tabs, menu, combobox, listbox, tree, grid.\u003c/p\u003e\n\u003ch2 id=\"rule-zero-use-the-element-that-already-does-it\" class=\"scroll-mt-20\"\u003eRule zero: use the element that already does it\u003c/h2\u003e\n\u003cp\u003eA native element arrives with role, keyboard behavior, focus, and screen-reader\nannouncements. ARIA only \u003cem\u003edescribes\u003c/em\u003e; it never implements.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eNeed\u003c/th\u003e\n\u003cth\u003eUse\u003c/th\u003e\n\u003cth\u003eNot\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003edo something\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cbutton type=\"button\"\u003e\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cdiv onClick\u003e\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e\u003ca\u003e\u003c/code\u003e with no \u003ccode class=\"readme-inline-code\"\u003ehref\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ego somewhere\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003ca href\u003e\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cdiv role=\"link\"\u003e\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003elabeled input\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003clabel for\u003e\u003c/code\u003e + \u003ccode class=\"readme-inline-code\"\u003e\u003cinput id\u003e\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eplaceholder-as-label\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egroup of choices\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cfieldset\u003e\u003clegend\u003e\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ea styled \u003ccode class=\"readme-inline-code\"\u003e\u003cdiv\u003e\u003c/code\u003e with a heading\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003enavigation\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cnav\u003e\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e\u003cmain\u003e\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e\u003cheader\u003e\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e\u003cfooter\u003e\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e\u003caside\u003e\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003enested \u003ccode class=\"readme-inline-code\"\u003e\u003cdiv\u003e\u003c/code\u003es with class names\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eheadings\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003ch1\u003e\u003c/code\u003e–\u003ccode class=\"readme-inline-code\"\u003e\u003ch6\u003e\u003c/code\u003e in order\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\u003cdiv class=\"title\"\u003e\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eThe first ARIA rule: \u003cstrong\u003eif a native element or attribute can do it, do not use ARIA.\u003c/strong\u003e A wrong\n\u003ccode class=\"readme-inline-code\"\u003erole\u003c/code\u003e is worse than no \u003ccode class=\"readme-inline-code\"\u003erole\u003c/code\u003e — it overwrites correct implicit semantics.\u003c/p\u003e\n\u003ch2 id=\"keyboard-the-whole-interface-no-mouse\" class=\"scroll-mt-20\"\u003eKeyboard: the whole interface, no mouse\u003c/h2\u003e\n\u003cp\u003eTest every change by unplugging the mouse mentally and walking the flow with Tab / Shift+Tab /\nEnter / Space / Escape / arrows.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEverything interactive is reachable and operable by keyboard, in a \u003cstrong\u003elogical order that\nfollows the visual order\u003c/strong\u003e. \u003ccode class=\"readme-inline-code\"\u003etabindex\u003c/code\u003e values greater than 0 are almost always wrong.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFocus is always visible.\u003c/strong\u003e Never \u003ccode class=\"readme-inline-code\"\u003eoutline: none\u003c/code\u003e without an equally visible replacement.\nStyle \u003ccode class=\"readme-inline-code\"\u003e:focus-visible\u003c/code\u003e so mouse users do not see rings and keyboard users always do.\u003c/li\u003e\n\u003cli\u003eEscape closes the topmost overlay; focus returns to \u003cstrong\u003ethe element that opened it\u003c/strong\u003e.\u003c/li\u003e\n\u003cli\u003eModals trap focus \u003cstrong\u003eand\u003c/strong\u003e make the rest of the page inert — \u003ccode class=\"readme-inline-code\"\u003e\u003cdialog\u003e\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eshowModal()\u003c/code\u003e,\nor the \u003ccode class=\"readme-inline-code\"\u003einert\u003c/code\u003e attribute. Closing must restore focus deliberately; the browser will not.\u003c/li\u003e\n\u003cli\u003eComposite widgets follow the APG\u0026#39;s key contract: roving tabindex or \u003ccode class=\"readme-inline-code\"\u003earia-activedescendant\u003c/code\u003e\nfor tabs and menus, arrow keys to move, Home/End to jump, typeahead in listboxes.\u003c/li\u003e\n\u003cli\u003eA skip-to-content link as the first focusable element on full-page layouts.\u003c/li\u003e\n\u003cli\u003eDo not hijack scroll or single-key shortcuts without an off switch (WCAG 2.1.4).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRoute changes need focus management.\u003c/strong\u003e On client-side navigation move focus to the new\n\u003ccode class=\"readme-inline-code\"\u003e\u003ch1\u003e\u003c/code\u003e (or a container with \u003ccode class=\"readme-inline-code\"\u003etabIndex={-1}\u003c/code\u003e) and update \u003ccode class=\"readme-inline-code\"\u003edocument.title\u003c/code\u003e, or a screen-reader\nuser hears nothing change.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"forms\" class=\"scroll-mt-20\"\u003eForms\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEvery control has a programmatic label. Placeholder text is a hint, never a label.\u003c/li\u003e\n\u003cli\u003eGroup related controls with \u003ccode class=\"readme-inline-code\"\u003e\u003cfieldset\u003e\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003e\u003clegend\u003e\u003c/code\u003e; a group of radios needs both.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eErrors:\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003earia-invalid\u003c/code\u003e on the field, an error message associated with \u003ccode class=\"readme-inline-code\"\u003earia-describedby\u003c/code\u003e,\nand an error summary at the top of a long form linking to each offending field. Validate on\nblur or submit, not on every keystroke.\u003c/li\u003e\n\u003cli\u003eRequired fields: \u003ccode class=\"readme-inline-code\"\u003erequired\u003c/code\u003e plus a visible marker, not color alone.\u003c/li\u003e\n\u003cli\u003eHelp the input method: \u003ccode class=\"readme-inline-code\"\u003etype=\"email\"\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003einputMode=\"numeric\"\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eautoComplete=\"one-time-code\"\u003c/code\u003e,\nand generous touch targets.\u003c/li\u003e\n\u003cli\u003eNever disable the submit button as the only feedback — show what is missing.\u003c/li\u003e\n\u003cli\u003eAutofill and paste must work; do not block them.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"images-color-motion\" class=\"scroll-mt-20\"\u003eImages, color, motion\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003ealt\u003c/code\u003e is required on every \u003ccode class=\"readme-inline-code\"\u003e\u003cimg\u003e\u003c/code\u003e.\u003c/strong\u003e Informative: describe the \u003cem\u003econtent\u0026#39;s purpose\u003c/em\u003e. Text in\nan image: put the text in \u003ccode class=\"readme-inline-code\"\u003ealt\u003c/code\u003e. Decorative: \u003ccode class=\"readme-inline-code\"\u003ealt=\"\"\u003c/code\u003e (an empty string, not a missing\nattribute). A complex chart needs a text alternative, not an \u003ccode class=\"readme-inline-code\"\u003ealt\u003c/code\u003e paragraph.\u003c/li\u003e\n\u003cli\u003eSVG: \u003ccode class=\"readme-inline-code\"\u003erole=\"img\"\u003c/code\u003e + \u003ccode class=\"readme-inline-code\"\u003e\u003ctitle\u003e\u003c/code\u003e when meaningful, \u003ccode class=\"readme-inline-code\"\u003earia-hidden=\"true\"\u003c/code\u003e when decorative. An\nicon-only button needs an accessible name: \u003ccode class=\"readme-inline-code\"\u003earia-label\u003c/code\u003e on the button, not on the \u003ccode class=\"readme-inline-code\"\u003e\u003csvg\u003e\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eContrast: \u003cstrong\u003e4.5:1\u003c/strong\u003e for body text, \u003cstrong\u003e3:1\u003c/strong\u003e for large text and for UI-component boundaries\nand focus indicators. Placeholder text and disabled text are the usual failures.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNever encode meaning in color alone\u003c/strong\u003e (status, validation, chart series) — pair it with\ntext, an icon, or a pattern.\u003c/li\u003e\n\u003cli\u003eRespect \u003ccode class=\"readme-inline-code\"\u003eprefers-reduced-motion: reduce\u003c/code\u003e: disable parallax, autoplay, and large movement.\u003c/li\u003e\n\u003cli\u003eWCAG 2.2 additions: focus must not be entirely hidden by sticky headers (2.4.11), and\ndragging interactions need a single-pointer alternative (2.5.7).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"live-regions-and-async-ui\" class=\"scroll-mt-20\"\u003eLive regions and async UI\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAnnounce results that appear without a focus change: \u003ccode class=\"readme-inline-code\"\u003erole=\"status\"\u003c/code\u003e\n(\u003ccode class=\"readme-inline-code\"\u003earia-live=\"polite\"\u003c/code\u003e) for counts, saves, and toasts; \u003ccode class=\"readme-inline-code\"\u003erole=\"alert\"\u003c/code\u003e (\u003ccode class=\"readme-inline-code\"\u003eassertive\u003c/code\u003e) only for\nerrors that need interruption.\u003c/li\u003e\n\u003cli\u003eThe live region container must exist \u003cstrong\u003ein the DOM before\u003c/strong\u003e you write into it. Inserting the\ncontainer and the text in the same commit announces nothing.\u003c/li\u003e\n\u003cli\u003eLoading states need an accessible name (\u003ccode class=\"readme-inline-code\"\u003earia-busy\u003c/code\u003e, a visually-hidden \u0026quot;Loading posts\u0026quot;), not\njust a spinner.\u003c/li\u003e\n\u003cli\u003eDo not steal focus to announce.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"verifying-automated-tools-catch-about-a-third\" class=\"scroll-mt-20\"\u003eVerifying — automated tools catch about a third\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eAutomated:\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003eeslint-plugin-jsx-a11y\u003c/code\u003e in CI, plus axe (\u003ccode class=\"readme-inline-code\"\u003e@axe-core/react\u003c/code\u003e in dev,\n\u003ccode class=\"readme-inline-code\"\u003evitest-axe\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003ejest-axe\u003c/code\u003e in tests, or the browser extension). Fix everything it reports, then\nremember how much it cannot see.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKeyboard pass\u003c/strong\u003e on the real page: complete the primary flow with no mouse. Note the focus\nring at every step.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eZoom and reflow:\u003c/strong\u003e 200% browser zoom, and a 320 px-wide viewport, with no loss of content\nor function and no horizontal scrolling (1.4.10 / 1.4.4).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eScreen reader smoke test:\u003c/strong\u003e VoiceOver (⌘F5) or NVDA. Check the page title, the landmark\nlist, that headings outline the page, that each control announces a name/role/state, and\nthat dynamic updates are announced.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTesting Library asserts by role and name\u003c/strong\u003e — \u003ccode class=\"readme-inline-code\"\u003egetByRole('button', { name: 'Save' })\u003c/code\u003e fails\nwhen the accessible name is missing, which is exactly the regression you want caught.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"the-short-list-to-refuse\" class=\"scroll-mt-20\"\u003eThe short list to refuse\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003ediv\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003eonClick\u003c/code\u003e instead of a button.\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003eoutline: none\u003c/code\u003e with no focus style.\u003c/li\u003e\n\u003cli\u003ePlaceholder as a label.\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003earia-label\u003c/code\u003e on a non-interactive element to \u0026quot;give it a name\u0026quot;.\u003c/li\u003e\n\u003cli\u003eA modal that does not trap focus, or that drops focus on close.\u003c/li\u003e\n\u003cli\u003eA route change that moves nothing and announces nothing.\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003etitle\u003c/code\u003e attributes as the only explanation.\u003c/li\u003e\n\u003cli\u003eAutoplay media, or animation that ignores reduced-motion.\u003c/li\u003e\n\u003cli\u003eAccessibility \u0026quot;checked later\u0026quot;: retrofitting semantics costs multiples of building it in.\u003c/li\u003e\n\u003c/ul\u003e\n"])</script><script>self.__next_f.push([1,"32:[\"$\",\"div\",null,{\"className\":\"border border-rule bg-bg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-panel px-3.5 py-2.5 border-b border-rule flex flex-col gap-y-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-x-2 min-w-0\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-mono text-[16px] font-semibold tracking-[-0.01em] text-ink truncate min-w-0\",\"children\":\"web-accessibility\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center border border-rule-2 px-1.5 pt-0.5 pb-0.4 font-mono text-[11px] uppercase tracking-[0.1em] font-medium bg-bg text-ink-faint leading-1.1\",\"children\":\"how-to\"}]]}],[\"$\",\"div\",null,{\"className\":\"font-mono text-[11px] uppercase tracking-[0.06em] text-ink-ghost truncate\",\"children\":\"skills/frontend/web-accessibility.md\"}]]}],[\"$\",\"div\",null,{\"className\":\"px-7 py-6 readme-prose font-mono\",\"dangerouslySetInnerHTML\":{\"__html\":\"$33\"}}]]}]\n"])</script></body></html>