We write custom CSS for our themes. We use Tailwind for internal admin UIs. The dividing line is who's going to maintain the codebase in five years.
For public-facing themes — where editors might tweak a colour token or a developer might inherit the codebase mid-engagement — semantic CSS with design tokens is more durable. The tokens are readable, the class names describe intent, and you can change the design system without rewriting markup.
For internal tools — where the same engineers ship features at speed and there's no "design handoff" — Tailwind is faster. We don't fight it.
The heuristic we use: if the markup will outlive its engineer, semantic CSS. If it won't, utility classes are fine.