builder-smoke-test
Smoke test the Agent Builder feature branch end-to-end against a hermetic project scaffolded by the skill (linked to the current…
Tailwind CSS v4 usage guide and v3-to-v4 differences. This skill should be used when writing, reviewing, or refactoring any Tailwind CSS code in this repo. Triggers on tasks involving Tailwind classes, @theme blocks, CSS-first configuration, or cleanup of v3-era syntax.
Claude Code
$ npx -y skills add mastra-ai/mastra --skill tailwind-v4 --agent claude-code
Codex
$ npx skills add mastra-ai/mastra --skill tailwind-v4 -a codex -y
Cursor
$ npx skills add mastra-ai/mastra --skill tailwind-v4 -a cursor -y
Gemini CLI
$ npx skills add mastra-ai/mastra --skill tailwind-v4 -a gemini-cli -y
GitHub Copilot
$ npx skills add mastra-ai/mastra --skill tailwind-v4 -a github-copilot -y
OpenCode
$ npx skills add mastra-ai/mastra --skill tailwind-v4 -a opencode -y
Windsurf
$ npx skills add mastra-ai/mastra --skill tailwind-v4 -a windsurf -y
name: tailwind-v4 description: Tailwind CSS v4 usage guide and v3-to-v4 differences. This skill should be used when writing, reviewing, or refactoring any Tailwind CSS code in this repo. Triggers on tasks involving Tailwind classes, @theme blocks, CSS-first configuration, or cleanup of v3-era syntax.
How to write idiomatic Tailwind v4 and spot v3-era syntax that still compiles but should not appear in new code.
Check the pinned version before using recent utilities: the playground packages pin `tailwindcss` in their `package.json` (4.3.3 at the time of writing, including v4.3 utilities like `scrollbar-*`, `zoom-*`, and `tab-*`). When unsure whether a utility, variant, or directive exists in the pinned version, verify against the docs instead of guessing:
Tailwind v4 is configured in CSS, not JavaScript.
| Use | Never use (v3-era) | | -------------------------------------------------------------------------- | ------------------------------------- | | `@import 'tailwindcss'` | `@tailwind base/components/utilities` | | `@theme { --color-x: ...; }` for tokens that should generate utilities | `tailwind.config.ts` for new work | | `@utility name { ... }` for custom utilities (works with variants) | `@layer utilities { .name { ... } }` | | `@custom-variant dark (&:is(.dark *))` | JS `plugins` / `addVariant` | | `@source "path"` / `@source inline("...")` for extra sources / safelisting | `content` array / `safelist` config | | `@variant dark { ... }` to apply a Tailwind variant inside custom CSS | duplicating media queries / selectors | | `@reference "app.css"` for `@apply` in scoped styles (Vue, CSS Modules) | duplicating stylesheet imports | | `var(--color-x)` in CSS, `getComputedStyle` in JS | `theme()` function, `resolveConfig` | | `@config "…"` / `@plugin "…"` only for existing JS-config integrations | adding new JS configs or plugins |
`@theme` variables are API: each one emits a native CSS variable AND generates utilities (`--color-*` → `bg-*`/`text-*`/`border-*`/..., `--text-*` → `text-*`, `--shadow-*` → `shadow-*`, `--animate-*` → `animate-*`, `--breakpoint-*` → responsive variants). A plain `:root { --x: ...; }` variable generates nothing — use it for runtime-only values. When a token's value references another variable (`--color-x: var(--y)`), declare it in `@theme inline` so the utility resolves the reference at the declaration site. In custom CSS, `--alpha(var(--color-x) / 50%)` and `--spacing(4)` replace v3 `theme()` math.
Bare names shifted one step down the scale, so the v3 spelling silently renders smaller or lighter:
| v3 | v4 | | --------------------------------- | ----------------------------------------------------------------- | | `shadow-sm` / `shadow` | `shadow-xs` / `shadow-sm` | | `drop-shadow-sm` / `drop-shadow` | `drop-shadow-xs` / `drop-shadow-sm` | | `blur-sm` / `blur` | `blur-xs` / `blur-sm` | | `rounded-sm` / `rounded` | `rounded-xs` / `rounded-sm` | | `outline-none` | `outline-hidden` (a11y-safe); `outline-none` now truly removes it | | `ring` (3px) | `ring-3`; the default ring is now 1px `currentColor` | | `bg-opacity-50`, `text-opacity-*` | opacity modifier: `bg-black/50`, `text-white/50` | | `bg-gradient-to-r` | `bg-linear-to-r` (plus new `bg-conic-*`, `bg-radial-*`) | | `!bg-red-500` (prefix) | `bg-red-500!` (suffix) | | `flex-shrink-*` / `flex-grow-*` | `shrink-*` / `grow-*` | | `bg-[--var]` | `bg-(--var)`; brackets now require `bg-[var(--var)]` | | `grid-cols-[a,b]` (commas) | underscores: `grid-cols-[max-content_auto]` |
The spacing scale is infinite — every number compiles via `calc(var(--spacing) * n)` — so most v3-era arbitrary values have a named form:
| Don't | Do | | -------------------------------------- | --------------------------------------------------------------------------------------- | | `min-w-[400px]`, `w-[600px]` | `min-w-100`, `w-150` | | `h-[1.5rem] w-[1.5rem]` | `size-6` | | `mt-[68px]` | `mt-17` | | `grid-cols-[repeat(15,minmax(0,1fr))]` | `grid-cols-15` | | `h-[100dvh]`, `w-[100dvw]`, `h-[1lh]` | `h-dvh`, `w-dvw`, `h-lh` | | `max-w-[80rem]` | `max-w-7xl` (container scale) | | `data-[current]:opacity-100` | `data-current:opacity-100` (values
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack. It includes everything you need to go from early prototypes to production-ready applications.
Smoke test the Agent Builder feature branch end-to-end against a hermetic project scaffolded by the skill (linked to the current…
Use early when debugging a medium or hard bug, especially when tests alone may not reveal the real runtime failure. Trigger this…
Autonomous, report-only documentation review for Mastra docs. Use when auditing changed docs against source, validating…
Convert existing docs diagram images to Mermaid, and author new Mermaid diagrams for Mastra docs. Use when replacing an…
REQUIRED when modifying any file in packages/playground-ui or packages/playground. Triggers on: React component…
Review open mastra-ai/mastra GitHub issues, identify direct @mastra/core bugs, and apply the @mastra/core label. Use when…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.