Dark mode

Dark mode has evolved from a visual trend to an essential feature that:

  • Reduces eye strain in low-light environments.

  • Improves battery efficiency on modern devices.

  • Enhances accessibility for all users.

All Neeto products now support dark mode through NeetoUI, providing a consistent experience across our platform.

How to enable dark mode?

  1. Open the floating action menu(located at the bottom-left corner).

  2. Toggle the dark mode switch.

  3. The UI will instantly adapt to the selected theme.

pawelzmarlak-2025-04-23T06_43_25.006Z.png
Floating action menu

How dark mode works in NeetoUI?

NeetoUI's dark mode implementation uses:

When dark mode is enabled, the CSS variables automatically update their color values to reflect the darker theme.

See it in action
Toggle dark mode directly in the NeetoUI Storybook using the toolbar switch.

storybook_dark_mode_q-mFpxxU-.jpeg
Dark mode switcher in NeetoUI Storybook

Development Instructions

1. Use NeetoUI colors properly

When translating designs to code:

  • ✔️ Use NeetoUI's colors (not direct hex/RGBA values from Figma or Wireframe). Directly using hex/RGBA values will not automatically adapt to the dark theme, leading to visual inconsistencies.

  • ✔️ Use NeetoUI utility classes like text utilities (e.g., neeto-ui-text-gray-800), background utilities (e.g., neeto-ui-bg-gray-100), and border utilities (e.g., neeto-ui-border-gray-300).

Why this matters:

  • Ensures automatic dark mode support

  • Maintains visual consistency

  • Simplifies future updates

2. Theme-sensitive styling

Avoid using Tailwind's native classes for

  • Text colors (text-*)

  • Backgrounds (bg-*)

  • Borders colors (border-*)

  • Shadows (shadow-*)

Instead, reference NeetoUI's dedicated classes in Storybook.

3. Test dark mode compatibility

For every UI change:

  1. Verify appearance in light mode

  2. Confirm proper rendering in dark mode

Common pitfalls to avoid

❌ Hardcoding color values (breaks theme synchronization)
❌ Combining Tailwind theme utilities (creates inconsistencies)
❌ Overriding NeetoUI variables (unless absolutely necessary)