EEnterUI
DocsComponentsThemesDonation
Get Started
  • Overview
  • Introduction
  • Installation
  • SolidJS Renderer
  • ThemingUse FroggDesign theme variables.
  • Styling Philosophy
  • Production Checklist
  • Migration & Versioning
EnterUIDocsGetting StartedTheming
Getting StartedUpdated 6 May 2026

Theming

Theme EnterUI with FroggDesign and EnterUI CSS variables.

EnterUI reads component-facing --eui-* variables. Those variables default to FroggDesign --fd-* variables from @froggdesign/theme.

#Theme Entry Points

@froggdesign/theme exports four CSS files:

  • @froggdesign/theme/styles.css
  • @froggdesign/theme/tokens.css
  • @froggdesign/theme/light.css
  • @froggdesign/theme/dark.css

Use styles.css for normal apps. It includes token variables plus light and dark semantic mappings.

app/layout.tsx
import "@froggdesign/theme/styles.css";
import "@froggdesign/enter-ui-react/styles.css";

#Light And Dark Mode

Use data-theme on a root element to choose the semantic theme.

Code
export function AppShell({ children }: { children: React.ReactNode }) {
  return <html data-theme="dark">{children}</html>;
}

You can also scope themes to product areas:

Code
<section data-theme="dark">
  <Card>Dark scoped surface</Card>
</section>

#Variable Layers

EnterUI uses two layers of CSS variables:

  • --fd-* from @froggdesign/theme — the FroggDesign token source of truth.
  • --eui-* from @froggdesign/enter-ui-react — component-facing aliases used by EnterUI CSS.

Two layers let you rebrand EnterUI components without changing every non-EnterUI surface that also consumes FroggDesign tokens.

#Common Override Strategy

#1. Scope-level overrides

Use scoped variables when one product area needs a local feel.

app/globals.css
.billing-console {
  --eui-primary: #2563eb;
  --eui-primary-foreground: #ffffff;
  --eui-ring: #60a5fa;
  --eui-radius-md: 8px;
}
Code
<section className="billing-console">
  <Button>Save billing settings</Button>
</section>

#2. App-wide overrides

Override variables after importing EnterUI CSS so cascade order picks your values.

app/globals.css
@import "@froggdesign/theme/styles.css";
@import "@froggdesign/enter-ui-react/styles.css";

:root {
  --eui-primary: #2563eb;
  --eui-ring: #60a5fa;
  --eui-radius-md: 8px;
}

[data-theme="dark"] {
  --eui-primary: #818cf8;
}

#3. Token-level overrides

Override --fd-* only when the entire FroggDesign theme should change.

Code
:root {
  --fd-background: #fafaf9;
  --fd-foreground: #18181b;
}

[data-theme="dark"] {
  --fd-background: #0c0a09;
  --fd-foreground: #fafaf9;
}

#Component-Level Overrides

Use className for local adjustments and wrapper components for repeated product patterns.

Code
import { Button } from "@froggdesign/enter-ui-react";

export function ProductAction() {
  return <Button className="product-action">Publish</Button>;
}
Code
.product-action {
  min-width: 140px;
}

#Important Variables

EnterUI components commonly read variables for:

  • background, foreground, surface, card, and muted surfaces
  • border, ring, focus-ring, and focus-visible states
  • primary, secondary, destructive, success, warning, error, and info tones
  • radius, shadow, spacing, and typography

Design direction

Keep green as a signal, not a dominant fill. Neutral surfaces should carry hierarchy and product structure.

#Finding Variable Names

Open a rendered component in DevTools, inspect the relevant rule, follow the var(--eui-...) source, and override that variable. For durable product overrides, prefer variables over targeting deep DOM structure.

PreviousSolidJS Renderer
NextStyling Philosophy

On this page

  1. Theme Entry Points
  2. Light And Dark Mode
  3. Variable Layers
  4. Common Override Strategy
  5. 1. Scope-level overrides
  6. 2. App-wide overrides
  7. 3. Token-level overrides
  8. Component-Level Overrides
  9. Important Variables
  10. Finding Variable Names