Verify before implementing: For v4-specific syntax ( @theme, @variant, CSS-first config), look up current docs via Context7 ( query-docs) before writing code. Tailwind v4 changed significantly from v3 and training data may be stale.
gap over space-x/ space-y -- gap handles wrapping; space-* breaks on wrapsize-* over w-* h-* -- for equal dimensionsmin-h-dvh over min-h-screen -- dvh accounts for mobile browser chromebg-black/50) -- *-opacity-* utilities are removed in v4@theme before using [#hex]text-${color}-500 won't be detected; use complete class names@utility over @apply with @layer -- @apply on @layer classes fails in v4overflow-x-auto makes a scroll container on BOTH axes -- the utility emits only overflow-x: auto, but CSS Overflow 3 computes a visible value on the other axis to auto once either axis is scrollable, so a wrapper added purely to allow horizontal panning silently clips or scrolls whatever overflows it vertically: a non-portalled dropdown, popover, tooltip, custom select, or focus ring. jsdom does no layout, so no unit test catches it -- enumerate every component rendered inside the new wrapper and confirm each overlay-ish one escapes it. Portaling is opt-in, not automatic: Radix exposes it as a separate *.Portal part wrapping *.Content, so read the component rather than assuming a library handles it. Same computed-value rule read backwards: before blaming a page-level scrollbar, walk every ancestor's overflow and name the element that actually scrollshidden attribute plus a display utility -- the two resolve in opposite directions across versions. v4's Preflight ships [hidden]:where(:not([hidden="until-found"])) { display: none !important }, so the attribute wins and an element expected to be visible stays hidden; on v3, or wherever Preflight is disabled or not loaded, the author-origin utility ( block, flex, grid) beats the UA-origin [hidden] rule regardless of specificity and the element stays on screen with hidden set. Toggle one mechanism: clsx(base, open ? 'block' : 'hidden'). Neither direction is visible to jsdom's toBeInTheDocument -- only toBeVisible or a real browser engine catches itnpm run build or equivalent)@tailwindcss/upgrade --dry-run if available)Read the relevant reference before implementing or reviewing the matching behavior:
Existing specialized references, when the corresponding topic applies: