EXSA CSS Engine
Login Join Us
User

EXSA Component Library — 49 Components, 17 Themes

Accordion

Pure CSS expandable sections using hidden <input type="checkbox"> and the :checked pseudo-class. Zero JavaScript. Active label uses --color-link. Add .accordion--sm for compact variant.

12 CSS custom properties from the active theme file drive all colors. --color-link for the active label, --color-bg-secondary for hover states and borders, --border-radius for the container corners.
Pure CSS. It uses a hidden checkbox input + the :checked pseudo-class to toggle the panel height. Same pattern as our Toggle Switch component.
Yes. Nest another .accordion block inside .accordion__panel-inner. Each nested accordion gets its own independent checkbox IDs. Works up to any depth.
<div class="accordion"> <div class="accordion__item"> <input type="checkbox" class="accordion__trigger" id="a1"> <label class="accordion__label" for="a1">Title</label> <div class="accordion__panel"> <div class="accordion__panel-inner">Content here</div> </div> </div> </div>

Drawer

Slide-out panel triggered by a hidden checkbox. Includes backdrop overlay. Supports left variant with .drawer--left. Uses --box-shadow and --color-bg tokens. Pure CSS — no JavaScript required for the toggle.

<input type="checkbox" class="drawer__toggle" id="d1"> <label class="drawer__backdrop" for="d1"></label> <div class="drawer__panel"> <div class="drawer__head"> <h3 class="drawer__title">Panel</h3> <label class="drawer__close" for="d1"><span class="ic ic-close"></span></label> </div> <div class="drawer__body">...</div> </div>

Pricing Table

Responsive pricing grid with featured plan highlight. Uses --color-link for the featured border and button, --box-shadow for hover lift, and --border-radius for cards and buttons.

Starter
$9
per month
  • 5 projects
  • 1 GB storage
  • Basic analytics
  • Priority support
  • Custom domain
Enterprise
$79
per month
  • Unlimited projects
  • 100 GB storage
  • Real-time analytics
  • 24/7 phone support
  • Custom domain + SSL
<div class="pricing"> <div class="pricing__card pricing__card--featured"> <div class="pricing__badge">Most Popular</div> <div class="pricing__name">Professional</div> <div class="pricing__price"><sup>$</sup>29</div> <ul class="pricing__features"> <li>50 projects</li> <li class="pricing__feature--na">Custom domain</li> </ul> <button class="pricing__btn">Get Started</button> </div> </div>

Topbar / Navbar

Fixed top navigation bar with scroll shadow. Always solid --color-bg with a subtle shadow on scroll. Left section for brand + nav, right section for actions + avatar. Hamburger menu on mobile. The one at the very top of this page is a live example.

Scroll the page to see the topbar turn solid with a blur backdrop. Resize to mobile to try the hamburger menu.

<header class="topbar"> <div class="topbar__left"> <a href="#" class="topbar__brand"><span>CSS</span> Engine</a> <nav> <ul class="topbar__nav"> <li><a href="#" class="topbar__link"><span class="ic ic-search"></span>Directory</a></li> <li><a href="#" class="topbar__link">Search</a></li> <li class="topbar__dropdown">...</li> </ul> </nav> </div> <div class="topbar__right"> <a href="#" class="topbar__link">Login</a> <a href="#" class="topbar__btn topbar__btn--primary">Join Us</a> <div class="avatar avatar--sm">...</div> </div> <button class="topbar__toggle"><span class="ic ic-menu"></span></button> </header>

Back to Top

Floating button that appears after scrolling 300px. Smooth-scrolls to top on click. Uses --color-link for background. Fixed position, always visible in the bottom-right corner.

Scroll down to see the button appear in the bottom-right corner. Click it to scroll back up.

<button class="back-top back-top--visible" aria-label="Back to top"></button>

Pagination

Page navigation using a styled list. Active page uses --color-link. Disabled state uses reduced opacity. Add .pagination--sm for compact variant. Borders use --color-bg-secondary.

<nav class="pagination"> <span class="pagination__item"> <a class="pagination__link pagination__link--disabled"><span class="ic ic-chevleft"></span> Prev</a> </span> <span class="pagination__item"> <a class="pagination__link pagination__link--active">1</a> </span> </nav>

Stepper

Multi-step progress indicator with active and completed states. Connecting lines fill with --color-link when done. Supports horizontal and vertical (.stepper--vertical) layouts.

Cart
2
Shipping
3
Payment
4
Confirm
<div class="stepper"> <div class="stepper__step stepper__step--done"> <div class="stepper__dot"><span class="st-icon ic-check"></span></div> <span class="stepper__label">Cart</span> </div> <div class="stepper__step stepper__step--active">...</div> </div>

Timeline

Vertical timeline with dot markers and cards. Active item fills the dot with --color-link. The vertical line uses --color-bg-secondary. Add .timeline--sm for compact variant.

Jan 2026

Project Kickoff

Initial architecture defined. Token system designed with 12 CSS custom properties powering all 4 layers.

Mar 2026

First 8 Components

Slideshow, progress bars, toggle, tabs, charts, toast, tooltip, and breadcrumbs — all pure CSS.

Jun 2026

23 Components Complete

Extended to 23 components across 6 categories. Theme engine supports 5 presets with live switching.

Jul 2026

Export Engine v1

Selective CSS export: cherry-pick components, bundle with base framework + chosen theme. One download.

<div class="timeline"> <div class="timeline__item timeline__item--active"> <div class="timeline__dot"></div> <div class="timeline__content"> <div class="timeline__time">Jun 2026</div> <h4 class="timeline__title">Milestone</h4> <p class="timeline__desc">...</p> </div> </div> </div>

Tooltip

Pure CSS hover tooltip using ::after and ::before pseudo-elements. Arrow created with border trick. Text color uses --color-text, background inverts it to --color-bg.

Hover over this phrase to see the tooltip. Works on hover and keyboard focus.

<span class="tooltip" data-tip="Tooltip text here" tabindex="0"> hover me </span>

Context Menu

Right-click popup menu with items, separators, shortcuts, and danger actions. Auto-positions within the viewport. Closes on outside click, Escape, or item selection. Solid and soft variants via .ctx-menu--soft. Compact size via .ctx-menu--sm.

Right-click anywhere in this box
Actions


<div data-ctx-menu> Right-click here <div class="ctx-menu ctx-menu--soft"> <div class="ctx-menu__label">Actions</div> <button class="ctx-menu__item">Edit<span class="ctx-menu__shortcut">⌘E</span></button> <hr class="ctx-menu__sep"> <button class="ctx-menu__item ctx-menu__item--danger">Delete</button> </div> </div>

Avatar

User profile images with status indicators. Five sizes from --xs to --xl. Supports rounded-square variant and grouped avatars. Fallback shows initials when no image. Uses --color-bg-secondary for fallback background.

XS
SM
MD
XL
Rounded
1
2
3
+5
<div class="avatar avatar--sm"> <img src="user.jpg"> <span class="avatar__status avatar__status--online"></span> </div> <div class="avatar avatar--lg"> <span class="avatar__fallback">AB</span> </div> <div class="avatar-group">...</div>

Badge

Small inline labels for status, counts, and categories. Five color variants, plus dot and count shapes. Primary variant uses --color-link; default uses --color-bg-secondary.

Default Primary Success Warning Danger 14
<span class="badge badge--primary">Primary</span> <span class="badge badge--success badge--count">14</span> <span class="badge badge--dot badge--success"></span>

Card

Versatile content container with image, body, and footer slots. .card--hoverable lifts on hover using --box-shadow. .card--horizontal places image beside content. All colors reference theme tokens.

Design tokens

Design Tokens

12 CSS custom properties drive every component. Change one theme file to restyle the entire library.

Export engine

Export Engine

Select components, pick a theme, download a single CSS file. No build tools needed.

No Image Card

Cards work without images too. The body fills the full width. Great for text-only content like changelog entries or notifications.

<div class="card card--hoverable"> <img class="card__image" src="cover.jpg"> <div class="card__body"> <h4 class="card__title">Title</h4> <p class="card__text">Description...</p> </div> <div class="card__footer"> <span class="badge badge--primary">Tag</span> </div> </div>

Table

Responsive data table with striped rows, hover states, and status badges. Add .tbl--striped, .tbl--bordered, .tbl--sm, or .tbl--responsive for card fallback on mobile. Uses --color-bg-secondary for borders and stripes.

ProjectOwnerStatusUpdated
Token EngineAnaActive2h ago
Export CLIBenReview5h ago
Theme BuilderChenActive1d ago
Legacy DocsDanaArchived12d ago
CDN SetupEliActive3d ago
<table class="tbl tbl--striped tbl--responsive"> <thead><tr><th>Project</th>...</tr></thead> <tbody> <tr> <td data-label="Project">Token Engine</td> <td data-label="Status"> <span class="tbl-badge tbl-badge--success">Active</span> </td> </tr> </tbody> </table>

Data List

Key-value metadata display using semantic <dl>, <dt>, <dd> elements. Horizontal by default, stack vertically with .data-list--vertical. Add .data-list--bordered for a card wrapper or .data-list--striped for alternating row backgrounds. Three sizes: --sm, default, --lg.

Name
Sam Intelco
Email
sam@intelco.com
Company
intelco
Status
Active
Repository
github.com/exsa/framework
Version
v1.0.0
License
MIT
<dl class="data-list data-list--bordered"> <div class="data-list__item"> <dt class="data-list__label">Name</dt> <dd class="data-list__value">Vlad Moroz</dd> </div> <div class="data-list__item"> <dt class="data-list__label data-list__label--success">Status</dt> <dd class="data-list__value"><span class="badge badge--success">Active</span></dd> </div> </dl> <dl class="data-list data-list--vertical data-list--striped data-list--sm">...</dl>

Separator

Horizontal (<hr>) or vertical (<span>) divider line. Three sizes: .sep--sm, default, .sep--lg. Vertical via .sep--vertical — use align-self:center in flex parents to keep it centered. Line color uses --color-bg-secondary. Common in navbars, toolbars, sidebar sections, and between content blocks.

HORIZONTAL

Tight spacing


Default spacing


Loose spacing


After lg separator

VERTICAL (in a toolbar)

EXSA Features Docs Themes v1.0
Horizontal — use <hr> <hr class="sep sep--sm"> <hr class="sep"> <hr class="sep sep--lg"> Vertical — use <span> inside flex parent <span class="sep sep--vertical" style="height:18px;align-self:center;"></span>

Music Player

Music playback UI with two-part structure: a .media-display for album art + play overlay, and a .media-bar for transport controls (prev/play/next), time readout, and volume. Set data-duration (in seconds) on the .music-player wrapper to display total time. Requires ~20 lines of JavaScript for play/pause toggle and time tracking. Colors use --color-link for the play button and --color-text for time labels.

1:26 / 4:02
<div class="media-display"> <button class="media-display__play"><span class="ic ic-play"></span></button> </div> <div class="media-bar"> <button class="media-bar__btn"><span class="ic ic-chevleft"></span></button> <button class="media-bar__btn"><span class="ic ic-play"></span></button> <span class="media-bar__time">1:26</span> </div>

Slideshow

Accessible image carousel with ARIA role="region" and aria-roledescription="carousel". Auto-advances every 5 seconds — pauses on hover via .slideshow--paused. Each slide supports an optional <figcaption>. Prev/next arrow buttons and dot navigation are generated by JavaScript (~30 lines). Active dot uses --color-link; container corners use --border-radius. Wrap multiple slideshows by giving each a unique id.

Modular component architecture
Token-driven component architecture
Theme color palettes
Five themes from 12 variables
CSS bundle package
Download full CSS — own it
Fast performance
Zero runtime dependencies
<div class="slideshow"> <div class="slideshow__track"> <div class="slideshow__slide">...</div> </div> <button class="slideshow__arrow slideshow__arrow--prev"><span class="ic ic-chevleft"></span></button> <button class="slideshow__arrow slideshow__arrow--next"><span class="ic ic-chevright"></span></button> <div class="slideshow__dots">...</div> </div>

Donut Chart

Pure CSS donut chart using the clip-rect technique. Up to 4 slices, each controlled by a CSS variable: --slice1 through --slice4 (set as percentages, e.g. 21%). Slice colors are set inline via background on each .donut__slice .fill. Center displays a value and label via .donut__center-val and .donut__center-label. Pair with .donut-legend for labeled items with percentages. Zero JavaScript.

JUNE
2026

iOS

21%

Mac

48%

Linux

9%

<div class="donut"> <div class="donut__slice donut__slice--1"><div class="fill"></div></div> <div class="donut__slice donut__slice--2"><div class="fill"></div></div> <div class="donut__center">...</div> </div> <div class="donut-legend">...</div>

Bar Chart

Horizontal bar chart built from stacked .bar-row elements. Each row has a .bar-row__label (left), a .bar-row__track with a .bar-row__fill bar, and a .bar-row__val (right). Set bar width via the CSS variable --bar-w (0–100%) on the fill element. Bar color is set via inline background — use --color-link, --color-secondary, or any token. Track background uses --color-bg-secondary. Pure CSS, no JavaScript.

Apr
24k
May
31k
Jun
38k
Jul
28k
Aug
44k
<div class="bar-row"> <span class="bar-row__label">Apr</span> <div class="bar-row__track"> <div class="bar-row__fill" style="--bar-w:62%"></div> </div> <span class="bar-row__val">24k</span> </div>

Progress Bars

Progress indicator with icon, label, percentage readout, and gradient-filled track. Set fill width with --fill-pct (0–100%) and color with --fill-clr on the .progress-item__fill element. The fill renders as a gradient from the chosen color to a lighter tint. Each .progress-item contains a head row (.progress-item__head) with optional icon, label, and percentage, plus a track. Uses --color-bg-secondary for the empty track. Pure CSS — no JavaScript needed.

Downloading assets...81%
Uploading build...43%
CSS compiling...96%
<div class="progress-item"> <div class="progress-item__head">...</div> <div class="progress-item__track"> <div class="progress-item__fill" style="--fill-pct:81%;--fill-clr:var(--color-link)"></div> </div> </div>

Range Slider

Custom styled <input type="range"> with live value display. Thumb uses --color-link fill with white border. Track uses --color-bg-secondary. Add .range--sm for compact variant.

65
32
88
<div class="range"> <input type="range" class="range__input" value="65"> <span class="range__val">65</span> </div>

Checkbox

Custom checkbox with animated SVG checkmark. Checked state fills the box with --color-link; the check icon draws in with a stroke animation. Add the disabled attribute to the hidden <input> for a muted, non-interactive state. Label goes after .checkbox__box inside the <label> wrapper. Pure CSS using :checked on the hidden input — no JavaScript. Group checkboxes by sharing a common context in a <fieldset>.

<label class="checkbox"> <input type="checkbox" checked> <span class="checkbox__box"></span> <span class="checkbox__label">Accept terms</span> </label>

Color Picker

Styled wrapper around the native <input type="color">. Click the swatch to open the OS color picker. Hex value displays below. Three sizes: default, .color-picker--sm, .color-picker--lg.

Theme Color
<div class="color-picker"> <div class="color-picker__swatch"> <input type="color" class="color-picker__input" value="#3b82f6"> </div> <span class="color-picker__value"></span> </div>

Date Picker

Interactive calendar popup with month navigation, today highlight, and click-to-select dates. Click the input to open. Adapted from GeeksForGeeks. Uses --color-link, --color-bg-secondary, and --border-radius tokens.

July 2026
SunMonTueWedThuFriSat
<div class="date-picker__wrapper"> <input class="date-picker__input" placeholder="Pick a date..." readonly> <div class="date-picker"> <div class="date-picker__header"> <button class="date-picker__nav--prev"></button> <span class="date-picker__header-date"></span> <button class="date-picker__nav--next"></button> </div> <div class="date-picker__weekdays">...</div> <div class="date-picker__dates"></div> </div> </div>

Form Validation

Input error and success states with icon indicators and helper text. Uses semantic --color-error and --color-success tokens with focus-ring shadows. Add .input--error, .input--success, or .form-helper--error to any input.

Please enter a valid email address. Username is available. Must be at least 8 characters with one number.
<input class="input--error" value="user@com"> <span class="form-helper form-helper--error">Invalid email</span> <input class="input--success" value="john_doe"> <span class="form-helper form-helper--success">Available</span>

Icon Button

Now part of buttons.css. Use .btn .btn--icon for circular icon-only buttons, or .btn .btn--radius-full for pill-shaped icon+label combos. Combine with .btn--surface, .btn--ghost, or .btn--outline for styling.

<!-- icon + label, card-like --> <button class="btn btn--surface"><span class="ic ic-star"></span> Like</button> <!-- icon + label, pill, solid --> <button class="btn btn--primary btn--radius-full"><span class="ic ic-star-f"></span> Star</button> <!-- icon + label, ghost --> <button class="btn btn--ghost"><span class="ic ic-search"></span> Settings</button> <!-- icon-only, circular --> <button class="btn btn--icon btn--primary" aria-label="Search"><span class="ic ic-search"></span></button>

Input Group

Label + icon/addon + input combined into one visual unit with a shared focus ring. Two adornment types: .input-group__icon for leading SVG icons (mail, search, user) and .input-group__addon for text prefixes like "https://". The focus ring uses --color-link blended semi-transparently. The wrap border uses --color-bg-secondary. Optional .input-group__label sits above the wrap. Works with type="email", type="text", type="search", and type="password".

https://
<div class="input-group"> <label class="input-group__label">Email</label> <div class="input-group__wrap"> <span class="input-group__icon"><span class="ig-icon ic-mail"></span></span> <input class="input-group__input" type="email"> </div> </div>

Loading Button

Built-in loading state via .btn--loading. Text hides, spinner appears centered — works on all variants. Outline/ghost/soft/surface variants get a link-colored spinner. No extra markup needed.

<button class="btn btn--loading btn--primary">Submit</button> <button class="btn btn--loading btn--outline">Save</button> <button class="btn btn--loading btn--soft">Processing</button>

Password Input

Password field with inline show/hide toggle. Focus ring uses --color-link. Toggle button reveals the plain-text value by swapping input type. Requires ~8 lines of JavaScript.

<div class="password-input"> <input type="password" class="password-input__field"> <button class="password-input__toggle"><svg>...</svg></button> </div>

Popover

Click-triggered floating card for rich content — forms, text, media, or actions. Arrow points to the trigger. Four sizes: --sm, default, --lg, --xl. Align with .popover--align-start or .popover--align-end. Closes on outside click or Escape.

User

Notifications

You have 3 unread messages and 1 pending invite.

<div class="popover"> <button class="popover__trigger">💬 Comment</button> <div class="popover__content"> <div class="popover__arrow"></div> <textarea placeholder="Write a comment…"></textarea> <button>Comment</button> </div> </div> <div class="popover popover--sm popover--align-end">...</div>

Radio Button

Styled radio button group. Each <label class="radio"> wraps a hidden <input type="radio">, a .radio__circle (outer ring + inner dot), and a .radio__label. All inputs in a group share the same name attribute for mutual exclusion. Checked state fills the inner dot with --color-link; the outer ring uses --color-bg-secondary. Add the disabled attribute to the input for a muted, non-interactive option. Pure CSS — no JavaScript required.

<label class="radio"> <input type="radio" name="theme" checked> <span class="radio__circle"></span> <span class="radio__label">Light theme</span> </label>

Rating Stars

Interactive 5-star rating. Click to set, hover to preview. Uses CSS direction trick for right-to-left fill. Requires ~10 lines of JavaScript for click handling.

3 / 5
<div class="rating"> <input type="radio" ...><label class="rating__star">★</label> <!-- repeat 5 times --> </div> <span class="rating__value">3 / 5</span>

Styled Select

Custom <select> wrapper with chevron icon, focus ring, and size variants. Uses --color-link for focus and --color-text-secondary for the chevron. Add .select--sm or .select--lg for compact/large variants.

<div class="select"> <select class="select__field"> <option>Choose...</option> </select> </div> <div class="select select--sm">...</div> <div class="select select--lg">...</div>

Tabs

Tabbed interface for switching between content panels. Click a .tabs__tab to show its matching panel — linked by matching the tab's data-panel value to a panel's id prefixed with panel-. Active tab gets a bottom border in --color-link. Requires ~15 lines of JavaScript to toggle panels. Optional modifiers: .tabs--vertical for side tabs, .tabs--full for equal-width tabs filling the container. Panels use .tabs__panel--active to control visibility.

Tab components use --color-link for the active indicator line. The border and text colors follow the active theme from the CSS custom properties token file.

12 CSS custom properties drive every visual aspect. Change one theme file and all components — tabs, toggles, spinners, everything — update simultaneously.

Add components.css alongside style.css. Pick a theme. Zero configuration. All 12 components ready to use.

<div class="tabs"> <button class="tabs__tab tabs__tab--active">Overview</button> <button class="tabs__tab">Tokens</button> <button class="tabs__tab">Usage</button> </div> <div class="tabs__panel tabs__panel--active">...</div>

Toggle Switch

Pure CSS toggle switch built on a hidden <input type="checkbox"> with the :checked pseudo-class. Active (on) state fills the track with --color-link and slides the thumb knob to the right. Add .toggle--sm for a compact 36px-wide variant. Add the disabled attribute to the input for a muted, non-interactive state. Label text goes after the track inside the <label> wrapper. Zero JavaScript.

<label class="toggle"> <input type="checkbox" checked> <span class="toggle__track"></span> <span class="toggle__label">Email notifications</span> </label> <label class="toggle toggle--sm"> <!-- compact variant --> <input type="checkbox" checked> ... </label>

Buttons

Button system with 9 variants, 4 sizes, and built-in loading. Theme-aware: uses --color-link, --color-success, --color-danger, --color-warning tokens. Works on both <button> and <a> elements. Mods: .btn--xs, .btn--sm, .btn--lg, .btn--icon, .btn--block, .btn--loading, .btn--high-contrast, .btn--radius-full, .btn--radius-none, and disabled.

Solid
Subtle
HC
Sizes
Mods
States
<!-- 9 variants: solid + subtle --> <button class="btn btn--primary">Primary</button> <button class="btn btn--soft">Soft</button> <button class="btn btn--surface">Surface</button> <!-- 4 sizes --> <button class="btn btn--primary btn--xs">XS</button> <button class="btn btn--primary btn--sm">SM</button> <button class="btn btn--primary">Default</button> <button class="btn btn--primary btn--lg">LG</button> <!-- mods: high-contrast, radius, block, loading --> <button class="btn btn--soft btn--high-contrast">HC Soft</button> <button class="btn btn--primary btn--radius-full">Pill</button> <button class="btn btn--primary btn--block">Block</button> <button class="btn btn--loading btn--primary">Loading</button>

Panel Resizer

Drag handle for resizable panels. Horizontal (ew-resize) and vertical (ns-resize) variants. Drag the grip to resize the parent panel. Uses --color-bg and --color-bg-secondary tokens.

Drag the handle →
<div class="resizer__target" style="width:320px"> <div class="resizer"></div> ...panel content... </div> <!-- also: .resizer--left | .resizer--bottom -->

Alert / Notice

Contextual feedback messages with four color variants, three styles (soft, outline, surface), and three sizes. Soft is the default tinted-background style. Outline uses a colored border with transparent background. Surface is card-like. Info variant uses --color-link; others use fixed semantic colors.

Soft Info

Default tinted style. Uses --color-link at 10% opacity for background.

Outline Success

Transparent background, colored border. Good for minimal UIs.

Surface Style

Card-like with subtle shadow. Neutral, works with any theme.

Small Warning

Compact alert--sm size for tight spaces.

Large Danger

Large alert--lg size. Build failed — check your theme file for missing variables.

<!-- Soft (default) --> <div class="alert alert--info">...</div> <!-- Outline --> <div class="alert alert--outline alert--success">...</div> <!-- Surface --> <div class="alert alert--surface">...</div> <!-- Sizes --> <div class="alert alert--warning alert--sm">...</div> <div class="alert alert--danger alert--lg">...</div>

Skeleton Loader

Shimmer placeholder for loading states. Pure CSS animation sliding a gradient across the element via background-position. The shimmer shifts between --color-bg-secondary and a lighter tint. Shape modifiers on .skeleton__line: --circle (round avatar, 40px), --h2 (thick heading, 60% height), --medium (half-width line), --short (quarter-width line), --btn (pill-shaped button). Compose realistic page skeletons by combining shapes inside a .skeleton wrapper. Zero JavaScript — pure CSS animation.

<div class="skeleton"> <div class="skeleton__line skeleton__line--circle"></div> <div class="skeleton__line skeleton__line--h2"></div> <div class="skeleton__line skeleton__line--btn"></div> </div>

Spinner

CSS-only loading spinner using the border technique: a full circle with a transparent portion creates the spinning arc. The colored arc uses --color-link, the inactive track uses --color-bg-secondary. Three sizes: .spinner--sm (16px), default (24px), .spinner--lg (36px). Use inline within buttons or text, or center it in a container with flex/grid. To override the arc color, set border-top-color inline. Pure CSS animation via @keyframes spin — zero JavaScript.

<div class="spinner spinner--sm"></div> <div class="spinner"></div> <div class="spinner spinner--lg"></div>

Toast Notifications

Temporary notification that appears in the bottom-right corner and auto-dismisses after 3 seconds. Three semantic variants: .toast--success (green), .toast--error (red), .toast--info (neutral). Each toast contains an icon, message, and optional close button. Toasts stack vertically and slide in/out with a CSS transition. Requires a #toast-container element on the page and ~15 lines of JavaScript to create and remove toasts. Uses --border-radius and --box-shadow from the theme.

<div class="toast toast--success"> <span class="toast__icon"><span class="a-icon ic-check"></span></span> <span class="toast__msg">File saved!</span> <button class="toast__close"><span class="a-icon ic-close"></span></button> </div>

Settings Panel

This panel slides in from the right using pure CSS. The toggle is a hidden checkbox — click the backdrop or close button to dismiss.

It reads --color-bg for its background, --color-bg-secondary for borders, and uses box-shadow for depth.