Embed Workflow provides powerful customization options to seamlessly integrate the workflow builder into your application's design system. You can customize colors, themes, and individual component styles.
Theme Color Templates
The easiest way to customize your workflow builder is through the Account Settings page in your dashboard.
Quick Theme Selection
- Navigate to Account Settings and scroll to the Theme color section
- Choose from our pre-configured color templates
- Click any color to generate the CSS for that theme
- The Stylesheet section will update with the generated CSS
- Copy the CSS from the Stylesheet section and paste it into your application
Selecting a color template generates the CSS, but you still need to copy it from the Stylesheet section and add it to your application for the changes to take effect.
Manual Color Customization
For complete control over your color scheme, you can manually edit the CSS in the Stylesheet section or define custom CSS properties in your application's stylesheet.
CSS Custom Properties
Embed Workflow uses CSS custom properties (CSS variables) for theming. You can override these in your application's stylesheet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17:root { /* Primary color shades (50-950) */ --ewf-color-main-50: 239, 246, 255; --ewf-color-main-100: 219, 234, 254; --ewf-color-main-200: 191, 219, 254; --ewf-color-main-300: 147, 197, 253; --ewf-color-main-400: 96, 165, 250; --ewf-color-main-500: 59, 130, 246; --ewf-color-main-600: 37, 99, 235; --ewf-color-main-700: 29, 78, 216; --ewf-color-main-800: 30, 64, 175; --ewf-color-main-900: 30, 58, 138; --ewf-color-main-950: 23, 37, 84; /* Primary color reference (points to main-600 by default) */ --ewf-color-primary: var(--ewf-color-main-600); }
Color values are specified as RGB triplets without the rgb() wrapper. This format allows for easy opacity manipulation using rgba() when needed.
Color Shade System
The color system follows the Tailwind CSS convention:
- 50-100: Lightest shades (backgrounds, hover states)
- 200-400: Light shades (borders, disabled states)
- 500-600: Primary shades (main brand color, buttons)
- 700-800: Dark shades (text, active states)
- 900-950: Darkest shades (headings, emphasis)
Component-Specific Styling
You can target individual workflow components using CSS class identifiers. This allows for granular customization of specific elements.
Every targetable element carries an ework__ class (double underscore) as its last class, for example ework__node-name. These are the stable styling hooks. Don't rely on the ework- (single underscore) utility classes, which are internal and can change. For colors, prefer the --ewf- variables shown above.
Node Core Components
Target the main node elements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38/* Main node wrapper element */ .ework__node { /* Your styles */ } /* Node flex container that holds the node */ .ework__node-container { /* Your styles */ } /* The styled node box/card wrapper */ .ework__node-wrapper { border-radius: 12px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } /* Inner content area of the node */ .ework__node-content { padding: 16px; } /* The node's name/title text element */ .ework__node-name { font-weight: 600; font-size: 14px; } /* Error message display within a node */ .ework__node-error { color: rgb(220, 38, 38); font-size: 12px; } /* Icon wrapper within a node */ .ework__node-icon { width: 24px; height: 24px; }
Node Type Specific
Style different node types independently:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19/* Action-type nodes */ .ework__action-node { /* Custom styling for action nodes */ } /* Trigger nodes */ .ework__trigger-node { /* Custom styling for trigger nodes */ } /* Condition/decision nodes */ .ework__condition-node { /* Custom styling for condition nodes */ } /* Inner wrapper specific to condition nodes */ .ework__condition-node-wrapper { /* Your styles */ }
Node Interactive Elements
Customize buttons and connectors:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16/* Button wrapper for adding child nodes */ .ework__add-child-button { background-color: rgb(var(--ewf-color-main-500)); border-radius: 50%; transition: transform 0.2s; } .ework__add-child-button:hover { transform: scale(1.1); } /* Visual connector lines between nodes */ .ework__node-connector { stroke: rgb(var(--ewf-color-main-300)); stroke-width: 2px; }
Canvas/Editor
Style the main workflow canvas:
1 2 3 4 5 6 7 8 9 10/* Main workflow canvas/editor container */ .ework__nodes-editor { background-color: #f9fafb; min-height: 600px; } /* Absolutely positioned node wrapper (handles x,y positioning) */ .ework__node-positioned { transition: transform 0.3s ease; }
Complete Component Reference
Every targetable element carries one of these ework__ classes. The node and canvas classes are the most common; the rest cover the wider builder UI.
Workflow canvas and nodes
| Class | Target |
|---|---|
ework__nodes-editor | The workflow canvas/editor container |
ework__node-positioned | A node's absolute-positioned wrapper |
ework__node | The main node wrapper |
ework__node-wrapper | The node's box/card |
ework__node-container | The node's flex container |
ework__node-content | The node's inner content area |
ework__node-name | The node's name/title text |
ework__node-error | A node's error message |
ework__node-icon | A node's icon wrapper |
ework__node-connector | The connector lines between nodes |
ework__add-child-button | The button to add a child node |
ework__action-node | An action node |
ework__trigger-node | A trigger node |
ework__condition-node | A condition node |
ework__condition-node-wrapper | A condition node's inner wrapper |
Entity cards and lists
| Class | Target |
|---|---|
ework__entity-card | An entity card (an action or trigger card) |
ework__entity-card-icon | An entity card's icon |
ework__entity-card-name | An entity card's name |
ework__entity-card-connector | An entity card's connector label |
ework__entity-card-list | A list of entity cards |
ework__empty-entity-card-list | The empty or error state of an entity-card list |
ework__loading-entity-card-list | The loading state of an entity-card list |
New-node side panel
| Class | Target |
|---|---|
ework__actions-list | The actions list in the add-action panel |
ework__triggers-list | The triggers list in the add-trigger panel |
Page layout
| Class | Target |
|---|---|
ework__page | The page container |
ework__page-wrapper | The page wrapper |
ework__page-topbar | The page top bar |
ework__page-sidebar | The page sidebar |
ework__page-content | The page content area |
ework__simple-page | A minimal page layout |
ework__header | The header |
ework__sidebar-menu | The sidebar menu |
ework__section | A content section |
Side panels
| Class | Target |
|---|---|
ework__side-panel | A side panel |
ework__side-panel-header | A side panel's header |
Menus and dropdowns
| Class | Target |
|---|---|
ework__side-menu | A side menu |
ework__side-menu-list | A side menu's option list |
ework__side-menu-option | A side menu option |
ework__context-menu | A context menu |
ework__context-menu-option | A context menu option |
ework__context-menu-destructive-option | A destructive context menu option (e.g. delete) |
ework__button-dropdown | A button's dropdown menu |
ework__button-dropdown-arrow | A button dropdown's arrow |
Buttons
| Class | Target |
|---|---|
ework__button | A button |
ework__new-workflow-button | The "new workflow" button |
ework__browse-templates-button | The "browse templates" button |
Form inputs
| Class | Target |
|---|---|
ework__input | A text input |
ework__textarea | A textarea |
ework__select | A select field |
ework__segmented-button | A segmented button group |
ework__segmented-button-item | An item in a segmented button group |
ework__segmented-button-label | A segmented button item's label |
Pickers
| Class | Target |
|---|---|
ework__date-picker | The date picker |
ework__time-picker | The time picker |
ework__weekdays-picker | The weekdays picker |
ework__icon-picker | The icon picker |
ework__data-fields-picker | The data fields picker |
Editors and expressions
| Class | Target |
|---|---|
ework__code-editor | The code editor |
ework__code-editor-wrapper | The code editor's wrapper |
ework__expression-builder | The expression builder |
ework__data-path | A data path reference |
Feedback and overlays
| Class | Target |
|---|---|
ework__dialog | A dialog or modal |
ework__callout | A callout box |
ework__tooltip | A tooltip |
ework__badge | A badge |
ework__expandable-text | Expandable or truncated text |
ework__toast-message | A toast's message |
ework__toast-icon | A toast's icon |
ework__toast-actions | A toast's actions area |
ework__toast-close | A toast's close button |
Tables and timelines
| Class | Target |
|---|---|
ework__table | A table |
ework__events-timeline | The events timeline |
ework__event | An event in the timeline |
Example Customizations
Branded Color Scheme
1 2 3 4 5 6:root { /* Use your brand's primary color */ --ewf-color-main-500: 120, 53, 250; /* Your brand purple */ --ewf-color-main-600: 107, 33, 232; --ewf-color-primary: var(--ewf-color-main-600); }
Custom Node Styles
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16/* Make trigger nodes stand out */ .ework__trigger-node .ework__node-wrapper { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; } /* Style action nodes with subtle shadow */ .ework__action-node .ework__node-wrapper { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07); border: 2px solid rgb(var(--ewf-color-main-200)); } /* Highlight condition nodes */ .ework__condition-node .ework__node-wrapper { border-left: 4px solid rgb(var(--ewf-color-main-600)); }
Custom Canvas Background
1 2 3 4 5 6 7.ework__nodes-editor { background: linear-gradient(90deg, rgba(0,0,0,0.02) 1px, transparent 1px), linear-gradient(rgba(0,0,0,0.02) 1px, transparent 1px); background-size: 20px 20px; background-color: #ffffff; }
Best Practices
- Use CSS custom properties for colors to maintain consistency and enable easy theme switching
- Test in different contexts to ensure your styles work across all workflow states
- Maintain accessibility by ensuring sufficient color contrast for text and interactive elements
- Use the cascade wisely - more specific selectors override general ones
- Preview changes in your account settings before deploying to production
Applying Your Styles
After generating or defining your custom styles, you need to include them in your application. There are two main approaches:
Option 1: External or Inline Stylesheet
Copy the CSS from your Account Settings Stylesheet section and add it to your application:
In Your External Stylesheet:
1 2 3 4 5 6 7 8 9/* your-styles.css */ :root { --ewf-color-main-600: 37, 99, 235; --ewf-color-primary: var(--ewf-color-main-600); } .ework__node-wrapper { border-radius: 12px; }
Then include it in your page. The loader automatically injects the CSS, so just add your custom styles:
1 2<link rel="stylesheet" href="your-styles.css"> <script src="https://cdn.ewf.to/ewf-loader.js"></script>
Or Inline in Your Page:
1 2 3 4 5 6 7 8 9 10<style> :root { --ewf-color-main-600: 37, 99, 235; --ewf-color-primary: var(--ewf-color-main-600); } .ework__node-wrapper { border-radius: 12px; } </style>
Option 2: Account Settings Stylesheet (Generates CSS to Copy)
The Stylesheet section in your Account Settings serves two purposes:
- View Generated CSS: When you select a color template, the generated CSS appears here
- Edit Custom CSS: You can manually edit the CSS to customize further
The CSS in the Stylesheet section is not automatically applied. You must copy it and paste it into your application using Option 1 above.
