Review queue
Static card with actions in the foot.
Design system
Glass surfaces, OKLCH color, and semantic tokens for consistent interfaces. Read the docs for API and accessibility notes. Browse landing layout shells for full-page composition patterns.
Semantic aliases — theme by remapping these, not primitives.
--color-bg-deep
--color-bg-elevated
--color-fg
--color-fg-muted
--color-system-blue
--color-accent-hot
--ok
--warn
--danger
--glass-surface
System UI for Latin; self-hosted IBM Plex Sans Arabic for Arabic text.
Display — Caustica Design
Body — Semantic tokens keep purpose separate from raw values.
Muted — Supporting copy and field labels.
Mono — status · queued · 0x1a
قدّم بثقة إلى وظيفتك القادمة
نموذج طباعي بخط IBM Plex Sans Arabic
Eyebrow + mark + gradient title — host supplies the product name and asset.
Design system
Product name
Host supplies mark, name, and any mark animation (pass
className on BrandMark + host CSS). Pattern:
.ca-section-eyebrow above .brand-title-row.
Mask icons — host apps serve SVGs at /icons/.
plus
minus
check
close
edit
trash
send
download
upload
clipboard
calendar
external-link
autofill
click
translate
chevron-down
chevron-left
chevron-right
theme-sun
theme-moon
feedback
filter
warning
log-in
log-out
play
stop
reload
Nested glass with hover/focus elevation.
Tab here — border and glow respond to focus-within.
Nested panel for secondary context — quieter border, same radius language.
Compact glass tiles for grids — not page chrome (use Panel for that).
Static card with actions in the foot.
Hover or tab to elevate.
Token utilities — stack, cluster, padding from --ca-space-*.
Box with .p-4 padding.
Focused helpers — display, flex, text, overflow, width, screen reader. Spacing lives above.
Muted supporting copy via .text-muted.
Truncated: a long line that should ellipsis when space runs out.
Visible label plus screen-reader-only detail for assistive tech
Flex row
Flex column
Text align
Start
Center
End
Weights
Semibold label
Bold emphasis
Hide / show (sm)
Mobile only ≥640px only.min-w-0 + truncate
Responsive columns and auto-fit — not a 12-col framework.
Col 1
Col 2
Col 3
Span 2
Col 6
Icon pipeline for onboarding or multi-step flows — done, current, and pending states.
Trigger, elevated panel, and removable active chips.
Tablist / tab / tabpanel with keyboard arrows.
Overview panel — status, channel, and next action.
Resume panel — tailored packet preview.
Notes panel — recruiter context and reminders.
Menu trigger with Escape and click-outside dismiss.
Includes a disabled item. Menu uses role="menu" / menuitem.
Hover and focus hint via aria-describedby — not title.
Interactive — hover or focus (spring pop via --motion-spring)
Placement — static demos use nested content + space tokens
Tooltips supplement labels — do not hide required instructions in hover-only content.
Inline guidance notes — warn by default, with info and danger tones.
Warn callout — review imported fields before saving.
Info callout — optional guidance without blocking.
Danger callout — destructive side effects apply.
Collapsible glass sections — single expand by default.
Triggers use aria-expanded / aria-controls. Set
data-type="multiple" to allow several open sections.
Single expandable region — Accordion is multi-item.
Reusable dismiss control — host supplies aria-label.
Generic floating panel — Escape and click-outside close.
Content uses role="dialog". Filter remains the specialized filter popover.
Custom select, month, year, and day pickers; 16px on mobile.
Prefix and suffix addons clipped into one glass control.
Checkbox, radio, and switch — glass controls with focus-visible rings.
Required before continuing.
Switch uses a checkbox with role="switch" and synced aria-checked.
Badges, chips, pills, and status dots.
Use badges in tables; pills for summary counts; dots for compact lists.
Skeletons and empty states.
Message only
Nothing here yet.
With detail
No results.
Try clearing filters.
With action
No applications yet.
Add a job listing to get started.
Linear bar — determinate value or indeterminate.
Determinate — 42%
Determinate — 78%
Indeterminate
Standalone loading indicator — sm and md sizes.
Horizontal rule or vertical separator.
Above the rule
Below the rule
Glass-styled overflow chrome — default, thin, and hidden.
Glass file drop target — click or drag to pick files.
No file selected.
Text links with optional external indicator.
Image or initials — sizes sm, md, lg.
Previous, next, and numbered page controls.
Glass slides with prev/next and indicators. Arrow keys when focused.
Glass list group — static or actionable with selection.
Actionable items — Arrow keys move focus within the group.
Semantic table with glass chrome.
| Company | Role | Status |
|---|---|---|
| Acme | Product designer | Submitted |
| Northwind | Frontend engineer | Interview |
| Contoso | Staff IC | Draft |
Transient stack feedback — success, error, warn, info. Live stack defaults to bottom-end; try placement below.
Entrance utilities and the circular theme reveal — honor
prefers-reduced-motion.
.ca-animate-rise — soft lift-in
.ca-animate-enter / .motion-enter
.ca-animate-pop / .motion-pop
.ca-scramble / data-ca-scramble — digit decipher on view
(scrambleElement · ScrambleText). Glyphs are
aria-hidden; the final value is the accessible name.
Theme toggle uses a circular View Transition from the control
(html[data-theme-to] + --theme-x/y/r). Fallback:
.is-theme-leaving / .is-theme-entering on the shell.
Also: .msg, .hint, .meta-line for quiet supporting copy.
Card grids: stagger ≤6 items @ 60ms (staggerDelayMs).
Modal dialog and bottom sheet patterns.
Modals for confirmations that need focus; sheets for short mobile filters and forms.
Highlights nav links from scroll position in a pane (or the window).
Scrollspy watches section ids with IntersectionObserver and marks the matching
nav link with .is-active and aria-current="location".
Scroll this pane to see the side nav update.
Wrap a nav of hash links in .ui-scrollspy. Point
data-scrollspy-root (or the React root prop) at a
scroll container when you are not using the viewport.
Optional rootMargin and threshold tune which band of
the root counts as “in view.” Defaults favor the upper portion of the pane so
the active link tracks as you read downward.
The active link exposes aria-current="location". Keep section
headings clear and give the nav an accessible name. Prefer in-page anchors that
match real landmark ids.
Submit this application with the tailored resume?
You can review the packet before sending.
Use .modal-dialog--wide for longer forms (surveys, multi-field editors).
Bottom sheets suit mobile filters and short forms. Drag handle uses .sheet-drag.