Theming

Aqua Fusion uses CSS custom properties (variables) for theming. Override them in your own CSS to match your brand.

How it works

  1. theme.css defines default values as CSS variables on :root
  2. The Tailwind preset maps these variables to utility classes
  3. You override variables to customize the entire system

Quick customization

:root {
  /* Change the primary brand color */
  --aqua-color-primary-500: 99 102 241; /* indigo */
  --aqua-color-primary-600: 79 70 229;
  --aqua-color-primary-700: 67 56 202;

  /* Change the font */
  --aqua-font-sans: 'Roboto', system-ui, sans-serif;

  /* Change border radius */
  --aqua-radius-default: 0.5rem;
}

All components using bg-primary-500, text-primary-600, font-sans, or rounded-ui will automatically use your custom values.

Color tokens

Primary (brand)

VariableDefaultDescription
--aqua-color-primary-50240 249 255Lightest tint
--aqua-color-primary-100224 242 254
--aqua-color-primary-200186 230 253
--aqua-color-primary-300125 211 252
--aqua-color-primary-40056 189 248
--aqua-color-primary-50014 165 233Base brand color
--aqua-color-primary-6002 132 199Hover state
--aqua-color-primary-7003 105 161Active state
--aqua-color-primary-8007 89 133
--aqua-color-primary-90012 74 110Darkest shade

Colors use space-separated RGB values (e.g., 14 165 233) to support Tailwind's opacity modifier syntax: bg-primary-500/50.

Semantic text

VariableDefaultTailwind class
--aqua-text-primary17 24 39 (gray-900)text-content-primary
--aqua-text-secondary75 85 99 (gray-600)text-content-secondary
--aqua-text-tertiary107 114 128 (gray-500)text-content-tertiary
--aqua-text-disabled156 163 175 (gray-400)text-content-disabled
--aqua-text-inverse255 255 255 (white)text-content-inverse

Semantic backgrounds

VariableDefaultTailwind class
--aqua-bg-default255 255 255 (white)bg-surface
--aqua-bg-subtle249 250 251 (gray-50)bg-surface-subtle
--aqua-bg-muted243 244 246 (gray-100)bg-surface-muted
--aqua-bg-emphasis229 231 235 (gray-200)bg-surface-emphasis
--aqua-bg-inverse17 24 39 (gray-900)bg-surface-inverse

Semantic borders

VariableDefaultTailwind class
--aqua-border-default229 231 235 (gray-200)border-line
--aqua-border-subtle243 244 246 (gray-100)border-line-subtle
--aqua-border-emphasis209 213 219 (gray-300)border-line-emphasis

Feedback colors

Token50500600700800
--aqua-success-*Green tintGreenDark greenDarkerDarkest
--aqua-warning-*Amber tintAmberDark amberDarkerDarkest
--aqua-error-*Red tintRedDark redDarkerDarkest
--aqua-info-*Blue tintBlueDark blueDarkerDarkest

Border radius

VariableDefaultTailwind class
--aqua-radius-sm0.125rem (2px)rounded-ui-sm
--aqua-radius-default0.25rem (4px)rounded-ui
--aqua-radius-md0.375rem (6px)rounded-ui-md
--aqua-radius-lg0.5rem (8px)rounded-ui-lg
--aqua-radius-xl0.75rem (12px)rounded-ui-xl
--aqua-radius-2xl1rem (16px)rounded-ui-2xl
--aqua-radius-full9999pxrounded-ui-full

Shadows

VariableTailwind classUsage
--aqua-shadow-smshadow-ui-smSubtle elevation
--aqua-shadow-defaultshadow-uiStandard cards
--aqua-shadow-mdshadow-ui-mdDropdowns
--aqua-shadow-lgshadow-ui-lgModals
--aqua-shadow-xlshadow-ui-xlMaximum elevation

Typography

VariableDefaultTailwind class
--aqua-font-sans'Inter', system-ui, sans-seriffont-sans
--aqua-font-display'Poppins', sans-seriffont-display

Dark mode

Aqua Fusion includes dark mode support. Add the dark class to your <html> element:

<html class="dark">

The theme CSS defines .dark selector overrides for text, background, and border colors. No additional configuration is needed.

Toggle dark mode with JavaScript

function toggleDarkMode() {
  document.documentElement.classList.toggle('dark');
}

Respect system preference

const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (prefersDark) {
  document.documentElement.classList.add('dark');
}

Aqua Fusion also provides the usePrefersDarkMode hook:

import { usePrefersDarkMode } from '@wavebooking/aqua-fusion/hooks';

function App() {
  const prefersDark = usePrefersDarkMode();
  // Apply dark class based on preference
}