# Antumo Design System — Full Documentation
> Generated from https://design-system.dev.antumo.com. Every docs page concatenated as one Markdown document.
---
## Install in 30 seconds
```bash [npm — Angular / vanilla]
npm install @antumo/design
```
```bash [NuGet — Blazor / .NET]
dotnet add package Antumo.Blazor
```
```html
```
Then use standard Bootstrap 5 class names, styled the Antumo way:
```html
Online
```
Full details on the [Getting Started](/guide/getting-started) page.
---
# Getting Started
Getting Started
The Antumo Design System ships as **two packages** with different delivery pipelines. Pick the one that matches your stack.
| Package | Registry | Consumers | Docs |
|---|---|---|---|
| `@antumo/design` | npm (Azure Artifacts) | Angular + PrimeNG, vanilla HTML | [CSS + JS](/guide/css-js) |
| `Antumo.Blazor` | NuGet (Azure Artifacts) | Blazor, ASP.NET | [Blazor / .NET](/guide/blazor) |
Both deliver the **same** design tokens, the **same** component styling, and the **same** dark mode — only the packaging differs.
## Registry access
Both feeds are hosted on the private **m2tcorp** Azure Artifacts organization. You need access to that organization to install either package.
### npm {#css-js-npm}
Add to your project's `.npmrc`:
```ini
@antumo:registry=https://pkgs.dev.azure.com/m2tcorp/_packaging/antumo/npm/registry/
```
```bash
npm install @antumo/design
```
### NuGet
Add the feed, then install:
```bash
dotnet nuget add source https://pkgs.dev.azure.com/m2tcorp/_packaging/antumo/nuget/v3/index.json \
--name antumo
dotnet add package Antumo.Blazor
```
## The one rule that matters
**Use standard Bootstrap 5 class names.** The DS styles them the Antumo way. You almost never write custom CSS.
```html
…
```
Components without a Bootstrap 5 equivalent use the `.antumo-*` prefix (e.g. `.antumo-steps`). For anything the DS doesn't cover, write app-specific CSS — but **always use DS tokens** (`var(--antumo-*)`), never hardcoded colors or spacing.
## Next steps
- [CSS + JS setup](/guide/css-js) — Angular + PrimeNG, vanilla HTML, the JS API
- [Blazor / .NET setup](/guide/blazor) — NuGet, ``, Razor components
- [Dark mode](/guide/dark-mode) — one attribute, both themes
- [Design tokens](/guide/tokens) — the CSS variable reference
- [Components](/components/) — all 39, with live examples
- [Figma ↔ CSS map](/guide/figma-css-map) — how we verify design fidelity
---
# CSS + JS (Angular / vanilla)
CSS + JS (Angular / vanilla)
The `@antumo/design` npm package delivers the full design system as CSS + zero-dependency JavaScript.
## CSS
### SCSS import (bundlers)
```scss
@use '@antumo/design';
```
Includes tokens (CSS variables), component classes, and utilities.
### CSS link (no bundler)
```html
```
### Tokens only
If you only need the design tokens (colors, typography, spacing, effects) without component classes:
```scss
@use '@antumo/design/tokens';
```
## JavaScript
Two approaches — choose one.
### A. Data attributes (no bundler)
For Blazor, ASP.NET MVC, vanilla HTML. Add a single `
```
Auto-init runs on `DOMContentLoaded`. Example — a modal:
```html
Title
Hello, world.
```
Overlay click + Escape close automatically. Focus trap and scroll lock are handled.
### B. Imperative API (ESM)
For Angular, React, or any bundler with ESM support:
```typescript
import { Modal, Sidebar, Tooltip, autoInit } from '@antumo/design/js';
const modal = Modal.getOrCreateInstance(document.querySelector('#myModal'));
modal.show(triggerEl); // triggerEl regains focus on close
modal.hide();
// or let data attributes work:
autoInit();
```
Types ship with the package (`@antumo/design/js` exposes `.d.ts`), so you get full IntelliSense.
## Angular + PrimeNG
```typescript
// app.config.ts
import { providePrimeNG } from 'primeng/config';
import AntumoPreset from '@antumo/design/primeng';
export const appConfig = {
providers: [
providePrimeNG({
theme: {
preset: AntumoPreset,
options: { darkModeSelector: '[data-theme="dark"]' },
},
}),
],
};
```
Import CSS in `angular.json`:
```json
"styles": ["node_modules/@antumo/design/web/dist/antumo.css"]
```
## Data attributes reference
| Attribute | Value | Purpose |
|---|---|---|
| `data-antumo-toggle` | `modal` / `sidebar` / `tooltip` | Trigger an action |
| `data-antumo-target` | CSS selector | Target element |
| `data-antumo-dismiss` | `modal` | Close nearest component |
| `data-antumo-placement` | `top` / `bottom` / `left` / `right` | Tooltip position |
| `data-antumo-persist` | `true` / `false` | Sidebar: save state to localStorage |
## Events
All events bubble as `antumo:{component}:{action}` (e.g. `antumo:modal:shown`). Before-events (`:show`, `:hide`) are cancelable:
```javascript
el.addEventListener('antumo:modal:hide', (e) => {
if (hasUnsavedChanges) e.preventDefault();
});
```
See the [component catalog](/components/) for markup of every component.
---
# Blazor / .NET
Blazor / .NET
`Antumo.Blazor` is one NuGet package that bundles the full stylesheet, fonts, all ~1,500 Lucide icons as typed components, and Razor wrappers for the sidebar, page header, and select. **No npm required.**
## Install
```bash
# 1. Add the Azure Artifacts NuGet feed (one-time)
dotnet nuget add source https://pkgs.dev.azure.com/m2tcorp/_packaging/antumo/nuget/v3/index.json \
--name antumo
# 2. Install
dotnet add package Antumo.Blazor
```
## Wire it up
```html
```
```html
```
That single CSS file includes all tokens, all component styles, Bootstrap 5 compatible class names, fonts (CircularXX + Circular LL), and dark mode.
- Do **not** add Google Fonts — fonts are bundled.
- Do **not** add `bootstrap.css` — Antumo already ships BS5-compatible classes.
- Do **not** copy logos to `wwwroot/` — reference `_content/Antumo.Blazor/logos/`.
## Supported frameworks
| Framework | Supported |
|---|---|
| .NET 8 | Yes |
| .NET 9 | Yes |
| .NET 10 | Yes |
Works with Blazor Server, WebAssembly, and Hybrid.
## AntumoIcon
The only required Blazor component — everything else is CSS-only Bootstrap 5 markup.
```razor
@using Antumo.Blazor.Icons
```
Icons use `stroke="currentColor"`, so they inherit their parent's text color. Browse all icons at [lucide.dev/icons](https://lucide.dev/icons).
| Size | Pixels | Use |
|---|---|---|
| `IconSize.Xs` | 12 | Badges, inline |
| `IconSize.Sm` | 16 | Compact UI |
| `IconSize.Md` | 20 | Buttons, inputs |
| `IconSize.Base` | 24 | Default |
| `IconSize.Lg` | 28 | Section headers |
| `IconSize.Xl` | 40 | Empty states |
## Razor components
The package also ships declarative wrappers so you write ~25 lines instead of ~130 lines of raw markup:
- **``** + `AntumoNavItem` / `AntumoNavDropdown` / `AntumoNavGroup` / `AntumoNavProfile` — full sidebar with automatic active state via `NavigationManager`.
- **``** — breadcrumbs, separators, and modifier classes auto-generated.
- **``** — ARIA combobox with keyboard nav and `EditContext` validation.
- **``** — overlay, sizes, `Escape`/backdrop dismissal, destructive variant.
- **`IAntumoConfirm`** + **``** — awaitable confirmation prompts.
- **``** — progress indicator for multi-step flows (not navigation).
```razor
@using Antumo.Blazor.Components
```
Confirmations are a service, so the decision stays inside the click handler. Register with `AddAntumoBlazor()` and render `` once in your layout:
```razor
@using Antumo.Blazor.Confirm
@inject IAntumoConfirm Confirm
@code {
private async Task Delete()
{
if (!await Confirm.AskDestructiveAsync("Usunąć drukarkę?", "Tej operacji nie można cofnąć.", "Usuń"))
{
return;
}
// ... perform the deletion
}
}
```
## Everything else is Bootstrap 5
Buttons, tables, forms, modals, cards, badges — all standard BS5 class names, styled by the DS:
```razor
Online
```
## Theme from C\#
```csharp
@inject IJSRuntime JS
await JS.InvokeVoidAsync("Antumo.Theme.toggle");
await JS.InvokeVoidAsync("Antumo.Theme.set", "dark");
await JS.InvokeVoidAsync("Antumo.Theme.useSystemPreference");
```
## Live example
A full MDM dashboard built entirely with DS classes runs at **[design-system-blazor.dev.antumo.com](https://design-system-blazor.dev.antumo.com)** — sidebar, tables, modals, forms, and dark mode.
The complete Blazor guide (all component parameters, migration guide, class-mapping table, and an LLM migration prompt) lives in `blazor/README.md` in the repository — it ships on the NuGet package page too.
---
# Dark Mode
Dark Mode
The entire design system switches between light and dark with **one attribute** on ``. No component code changes, no per-page toggles.
## Enable
```html
```
```javascript
// Toggle in JS
document.documentElement.setAttribute('data-theme', 'dark');
document.documentElement.removeAttribute('data-theme'); // back to light
```
If you load the DS JavaScript bundle, use the `Antumo.Theme` API instead:
```javascript
Antumo.Theme.set('dark');
Antumo.Theme.set('light');
Antumo.Theme.toggle();
Antumo.Theme.useSystemPreference(); // follow OS, persists to localStorage
```
The selected theme persists under the `antumo-theme` localStorage key.
## How it works
Every semantic token resolves to a **different hex per theme**. Dark mode is handled by `[data-theme="dark"]` overriding the token values — **not** by component CSS.
```
component SCSS → semantic token → raw scale + dark override → compiled hex
```
For example, `--antumo-bg-primary`:
| Token | Light | Dark |
|---|---|---|
| `--antumo-bg-primary` | `#ffffff` | `#0c0e12` |
| `--antumo-text-primary` | `#181d27` | `#f7f7f7` |
| `--antumo-border-secondary` | `#e9eaeb` | `#22262f` |
Some scales are **invariant** — the same hex in both themes: `blue`, `green`, `yellow`, `red`, `white`, and the focus color `#5b6ef2`. Navy and gray shift.
Without an explicit `data-theme="dark"`, the theme is always light — regardless of OS setting. Opt into OS-following with `Antumo.Theme.useSystemPreference()`.
The `[data-theme="dark"]` selector targets the document root. Setting it on `` won't cascade correctly.
## Verified both themes
Every one of the [39 mapped components](/guide/figma-css-map) is verified in **both** light and dark — 774 hex comparisons, zero mismatches. Dark values come from the compiled CSS (the source of truth for dark mode), not guessed from Figma.
---
# Design Tokens
Design Tokens
All tokens use the `--antumo-*` prefix and auto-switch between light and dark. **Never hardcode** colors, spacing, typography, or effects — always reference a token.
```scss
// WRONG
color: #3a3a66;
padding: 16px;
// CORRECT
color: var(--antumo-navy-500);
padding: var(--antumo-spacing-3xl);
```
## Semantic colors
Prefer semantic tokens over raw scales — they carry intent and adapt per theme.
| Variable | Light | Dark | Usage |
|---|---|---|---|
| `--antumo-text-primary` | gray-900 | gray-50 | Headings, key content |
| `--antumo-text-secondary` | gray-700 | gray-300 | Labels, subheadings |
| `--antumo-text-tertiary` | gray-400 | gray-400 | Supporting text |
| `--antumo-bg-primary` | white | gray-950 | Main background |
| `--antumo-bg-secondary` | gray-50 | gray-900 | Alternate background |
| `--antumo-border-primary` | gray-300 | gray-700 | High-contrast borders |
| `--antumo-border-secondary` | gray-200 | gray-800 | Default borders |
| `--antumo-bg-brand-solid` | navy-500 | navy shift | Primary actions |
## Color scales
Each scale has shades 25–950 (lower = lighter). Navy and gray shift per theme; blue/green/yellow/red are invariant.
| Scale | Pattern | Usage |
|---|---|---|
| Navy | `--antumo-navy-{25..950}` | Brand, primary actions |
| Gray | `--antumo-gray-{25..950}` | Neutrals, text, borders |
| Blue | `--antumo-blue-{25..950}` | Info |
| Green | `--antumo-green-{25..950}` | Success |
| Yellow | `--antumo-yellow-{25..950}` | Warning |
| Red | `--antumo-red-{25..950}` | Error, destructive |
Key values: `--antumo-navy-500` (`#3A3A66`, brand) and the unified focus ring `#5B6EF2`.
## Spacing
4px-based scale for padding, margin, gap.
| Variable | Value | | Variable | Value |
|---|---|---|---|---|
| `--antumo-spacing-xxs` | 2px | | `--antumo-spacing-3xl` | 16px |
| `--antumo-spacing-xs` | 4px | | `--antumo-spacing-4xl` | 20px |
| `--antumo-spacing-sm` | 6px | | `--antumo-spacing-6xl` | 24px |
| `--antumo-spacing-md` | 8px | | `--antumo-spacing-7xl` | 32px |
| `--antumo-spacing-lg` | 10px | | `--antumo-spacing-8xl` | 40px |
| `--antumo-spacing-xl` | 12px | | | |
## Border radius
| Variable | Value | | Variable | Value |
|---|---|---|---|---|
| `--antumo-radius-xs` | 4px | | `--antumo-radius-xl` | 12px |
| `--antumo-radius-sm` | 6px | | `--antumo-radius-2xl` | 16px |
| `--antumo-radius-md` | 8px | | `--antumo-radius-full` | 999px |
| `--antumo-radius-lg` | 10px | | | |
## Typography
| Variable | Value | Usage |
|---|---|---|
| `--antumo-font-heading` | CircularXX | Headings, buttons |
| `--antumo-font-body` | Circular LL | Body text, labels |
Font sizes are available as utility classes: `.heading-2xl` (32px), `.heading-xl` (28px), `.heading-lg` (24px), `.heading-md` (20px), `.body-lg` (16px), `.body-md` (14px), `.body-sm` (12px).
## Effects
| Variable | Usage |
|---|---|
| `--antumo-shadow-xs` | Cards |
| `--antumo-shadow-sm` | Buttons |
| `--antumo-shadow-md` | Dropdowns, popovers |
| `--antumo-shadow-lg` | Modals, overlays |
| `--antumo-focus-ring` | Focus indicator (4px `#5b6ef2` + 2px white) |
## Source of truth
Tokens are defined in JSON (`tokens/*.json`) and compiled to CSS variables via `npm run build:tokens`. Never edit the generated `_tokens.scss` — change the JSON and rebuild.
```css
.my-custom-card {
background: var(--antumo-bg-primary);
border: 1px solid var(--antumo-border-secondary);
border-radius: var(--antumo-radius-xl);
padding: var(--antumo-spacing-6xl);
box-shadow: var(--antumo-shadow-sm);
color: var(--antumo-text-primary);
}
```
---
# Figma ↔ CSS Map
Figma ↔ CSS Map
The design system carries a machine-checked map from **every Figma component canvas** to its **CSS class and compiled color** — in light and dark. It lets anyone answer *"is this component the right color?"* from a CSS class alone, without opening Figma.
## What it covers
- **39 component canvases** (all BASE + APPLICATION components)
- **774 hex comparisons** (light + dark, CSS side)
- **0 CSS mismatches** — the map never lies about the compiled CSS
- **6 divergences** — real, documented Figma-vs-CSS gaps flagged for human review
Foundations (Colors, Typography, Icons, Grid, Effects, Logos), ready screens (MDM/POS), and kit helpers are intentionally out of scope — they aren't components.
## How verification works
A CI script (`npm run verify:figma-map`) checks the map on **two axes**:
| Axis | Compares | Meaning | On failure |
|---|---|---|---|
| **CSS token** | map's `expectedHex` **vs** the compiled `antumo.css` | The map matches reality | **Fails the build** |
| **Figma fill** | Figma's fill **vs** the CSS hex | Figma and CSS agree | **Informational only** |
So the build breaks if the map drifts from the CSS, while genuine Figma-vs-CSS design gaps are surfaced as a review list — never silently mixed with errors.
The dark values come from the compiled CSS (the source of truth for dark mode), not guessed from Figma — most Figma canvases are single-theme (light).
## Example: Button
Every Button variant matches Figma exactly (`figmaFill == expectedHex.light`), in both themes:
| Variant | Figma | CSS light | CSS dark |
|---|---|---|---|
| `.btn-primary` bg | `#3a3a66` | `#3a3a66` | `#757dd0` |
| `.btn-primary:hover` | `#32355a` | `#32355a` | `#6068b8` |
| `.btn-primary.btn-destructive` | `#b53f3f` | `#b53f3f` | `#de6363` |
| `.btn-secondary` bg | `#ffffff` | `#ffffff` | `#0c0e12` |
| `.btn-secondary` border | `#d5d7da` | `#d5d7da` | `#373a41` |
| `.btn-tertiary` text | `#3a3a66` | `#3a3a66` | `#757dd0` |
## Divergences {#divergences}
Six documented Figma-vs-CSS gaps remain open for human decision. These are **not** bugs — they're intentional design-intent differences, recorded so nobody guesses the source of truth.
| Component | Property | Figma | CSS | Status |
|---|---|---|---|---|
| Input | hover/focus border | `#3a3a66` | `#5b6ef2` | **Resolved** — CSS is truth (unified focus ring) |
| Navigation | `.nav-item-badge` bg | `#f6f7fa` navy pill | `#b53f3f` red | Open — badge semantics |
| Navigation | `.badge-yellow` bg | `#f1c846` | `#f4cf53` | Open — minor hex drift |
| MiscIcons | `.dot` base | `#2fa46f` green sample | `#181d27` neutral | Open — sample vs neutral base |
| MobileApp | label / value text | `#181d27` gray-900 | `#0a0d12` gray-950 | Open — one-step drift |
| MobileApp | supporting text | `#414651` gray-700 | `#717680` gray-500 | Open — two-step drift |
## Why it matters
- **Instant answers** — "is X the right color?" resolves from the map, no Figma round-trip.
- **CI guard** — change a token and the map stops matching → the build fails, before it ships.
- **Design accountability** — real Figma-vs-CSS gaps are an explicit, reviewable list, not lost in the noise.
The map lives at `figma-css-map.json` in the repository, validated by `figma-css-map.schema.json`.
---
# Components (all 39)
Components
All **39** components, each mapped to its Figma canvas and
verified against the compiled CSS in light and dark. For interactive, rendered
examples of every variant and state, open the
[**live component catalog**](https://design-system.dev.antumo.com/catalog/demo/index.html).
> **Legend** — ✓ verified · ◑ verified with partial coverage (rgba / raster /
> stroke-only elements) · ⚠️ verified with documented [divergences](/guide/figma-css-map#divergences).
| Component | CSS class | Figma canvas | Status |
|---|---|---|---|
| **Button** | `.btn` | [Buttons](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1-15) | ✓ verified |
| **Input** | `.form-control` | [Inputs](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61168) | ⚠️ verified · divergences |
| **Badge** | `.badge` | [Badges](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61167) | ✓ verified |
| **Modal** | `.modal` | [Modals](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61191) | ✓ verified |
| **Table** | `.table` | [Tables](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61176) | ◑ verified · partial |
| **Tabs** | `.nav-link` | [Tabs](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61178) | ✓ verified |
| **Tags** | `.tag` | [Tags](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=881-74329) | ✓ verified |
| **Tooltips** | `.tooltip` | [Tooltips](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61171) | ✓ verified |
| **Dropdown / Select** | `.form-select` | [Dropdown](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61186) | ✓ verified |
| **Checkbox** | `.form-check-input[type=checkbox]` | [Checkbox](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=549-27161) | ✓ verified |
| **Radio** | `.radio-field .form-check` | [Radio button](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=549-28345) | ✓ verified |
| **Toggle** | `.form-switch` | [Toggle](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=502-27580) | ✓ verified |
| **Avatar** | `.avatar` | [Avatars](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61169) | ✓ verified |
| **Breadcrumbs** | `.breadcrumb` | [Breadcrumbs](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61174) | ✓ verified |
| **Content Divider** | `.divider` | [Content divider](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61184) | ✓ verified |
| **Pagination** | `.pagination` | [Pagination](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61180) | ✓ verified |
| **Progress Indicators** | `.progress` | [Progress indicators](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61172) | ◑ verified · partial |
| **Card Header** | `.card-header` | [Card headers](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1274-18356) | ✓ verified |
| **Accordion** | `.accordion` | [Accordions](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1859-1258) | ✓ verified |
| **Counter** | `.counter` | [Counter](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1084-517) | ✓ verified |
| **Notifications** | `.alert` | [Alerts & Notifications](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61175) | ✓ verified |
| **Search** | `.search` | [Search](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61190) | ✓ verified |
| **Loading Indicators** | `.spinner-border` | [Loading indicators](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=485-68583) | ◑ verified · partial |
| **Empty States** | `.empty-state` | [Empty states](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61183) | ✓ verified |
| **Sliders** | `.form-range` | [Sliders](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61173) | ✓ verified |
| **Progress Steps** | `.antumo-step` | [Progress steps](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61179) | ◑ verified · partial |
| **Page Headers** | `.page-header` | [Page headers](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61189) | ✓ verified |
| **Footer** | `.footer` | [Footer](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1157-4564) | ◑ verified · partial |
| **Code Snippet** | `.code-snippet` | [Code snippet](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1619-123507) | ✓ verified |
| **Side Drawer** | `.offcanvas` | [Side drawer](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=635-61588) | ◑ verified · partial |
| **File Upload** | `.upload-dropzone` | [File upload](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61185) | ◑ verified · partial |
| **Date Pickers** | `.datepicker` | [Date pickers](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61187) | ◑ verified · partial |
| **Navigation** | `.nav-sidebar` | [Navigation](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61192) | ⚠️ verified · divergences |
| **Misc Icons** | `.featured-icon` | [Misc icons](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=567-61182) | ⚠️ verified · divergences |
| **Text Elements** | `.text-element` | [Text elements](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1452-20884) | ✓ verified |
| **Overlay** | `.overlay` | [Overlay](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=635-61587) | ✓ verified |
| **Scrollbar** | `.scrollbar` | [Scrollbar](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=623-61194) | ◑ verified · partial |
| **Background Patterns** | `.bg-pattern-container` | [Background elements](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1705-20213) | ◑ verified · partial |
| **Mobile App** | `.mobile-top-bar` | [Mobile App components](https://www.figma.com/design/MvKUz6eJQQcjxMvL4OLgo7/Antumo---Design-System?node-id=1787-35314) | ⚠️ verified · divergences |
## Live examples
The tables above list every component and its verification status. To see each
one **rendered** — every variant, every state, light and dark — use the live
surfaces, which run the exact same compiled CSS as this site:
- **[Component catalog](https://design-system.dev.antumo.com/catalog/demo/index.html)** — exhaustive catalog of all components in isolation.
- **[Blazor example app](https://design-system-blazor.dev.antumo.com)** — a full MDM dashboard using the DS.
## Markup patterns
Copy-paste HTML for the most common components:
### Buttons
```html
```