paletteEngineering
Utility-first styling, design tokens, composing variants, responsive and dark mode, keeping class soup readable.
1 item
Why utility-first works
Tailwind keeps styles co-located with markup, eliminates the naming problem (no more .card__header--active), and ships only the classes you actually use. No context-switching to a separate CSS file, no dead styles piling up. The trade-off is verbose className strings — manage that with extraction, not by abandoning the approach.
Design tokens are the foundation
bg-brand, text-muted, rounded-card — semantic tokens, not raw hex values scattered through components.#0066cc blue), not Tailwind's defaults.Taming long class lists
<Button> component with variants. This is the React-native answer to "I'm repeating classes."cva (class-variance-authority) or tailwind-merge to compose conditional classes cleanly and resolve conflicts (so a later px-4 correctly overrides an earlier px-2).clsx/cn helper rather than template-string spaghetti.Responsive & dark mode
sm: md: lg: layer up. Design the small screen first, enhance upward.dark: variant. Drive it off a class strategy so you can toggle it with a theme switch, and define both light and dark token values once.When to drop to raw CSS
@supports queries can be cleaner in a small CSS file or a <style>. Tailwind isn't dogma — use plain CSS where it's genuinely clearer.Consistency beats cleverness