Theming
The components use Tailwind's own palette, with a dark: variant for every colour, so they
follow your theme from the defaults onward.
Dark mode
Dark mode follows your app's dark variant, which is the visitor's system setting by default.
To switch on a class or an attribute instead, redefine the variant. This browser uses
data-theme:
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));Colours, radii and fonts
They come from your theme, so change them there and every component follows:
@theme {
--color-neutral-900: oklch(0.21 0.03 265);
--radius-md: 0.25rem;
}Your own greys
Every grey the components draw, text, borders and surfaces alike, is a neutral shade, and
Tailwind compiles each one to var(--color-neutral-…). Redefine the ramp in your
@theme to change it everywhere, or on a wrapper to change it for what's inside:
.brand-greys {
--color-neutral-50: oklch(98.5% 0.004 70);
/* …every shade to 950 */
--color-neutral-950: oklch(14.5% 0.012 70);
}Redefine the whole ramp, since light and dark use different shades, and keep each shade's lightness so the components' text keeps its 4.5:1 contrast. The AI chat workspace shows it on a panel.
One component
Pass utilities through class:. The gem's rules sit in @layer components, which
Tailwind orders before utilities, so yours win:
<%= card title: "Members", class: "rounded-none shadow-none" do %>…<% end %>Form controls
Controls wear a class for their kind, which comes from a setting. Point it at your own classes, or
return nil to leave controls unstyled:
config.control_class = ->(_view, kind) { kind == :select ? "form-select" : "form-input" }