Remixes of 21st.dev
Latest remixes
No public remixes yet. Be the first to make one.
Remix itLatest remixes
No public remixes yet. Be the first to make one.
Remix itSwitch between the rendered Visual preview and the Raw DESIGN.md.
version: alpha
name: 21st
description: |
Liquid AI – Prism embodies a dark, sophisticated aesthetic centered on
liquid-glass morphology and pure-black minimalism. The design conveys
cutting-edge AI capability through restraint: a self-contained black palette,
elegant typography that breathes through whitespace, and subtle depth shifts
driven by colour blocking rather than heavy shadows. The visual language
prioritizes content over decoration, with the exception of carefully composed
video backgrounds that anchor hero sections and feature blocks. This is a
system designed for agencies and AI-forward brands that want to project
technical mastery through deliberate understatement—glacial navigation,
word-by-word headline reveals, and gentle micro-interactions that reward close
attention without demanding it.
source:
url: "https://21st.dev/@mohammadshehadeh/templates/prism"
pagesAnalyzed: 1
extractedAt: 2026-10-13
tokensMeasured: true
typography:
heading-sm:
fontFamily: "General Sans"
fontSize: 24px
fontWeight: 600
lineHeight: 1.25
letterSpacing: -0.6px
textTransform: capitalize
heading-xs:
fontFamily: "General Sans"
fontSize: 13px
fontWeight: 600
lineHeight: 1.5
letterSpacing: -0.13px
body-md:
fontFamily: "General Sans"
fontSize: 15px
fontWeight: 500
lineHeight: 1.63
letterSpacing: 0px
body-sm:
fontFamily: "General Sans"
fontSize: 13px
fontWeight: 500
lineHeight: 1.43
letterSpacing: 0px
textTransform: capitalize
body-xs:
fontFamily: "General Sans"
fontSize: 12px
fontWeight: 500
lineHeight: 1.33
letterSpacing: 0px
button-sm:
fontFamily: "General Sans"
fontSize: 14px
fontWeight: 500
lineHeight: 1.43
letterSpacing: 0px
button-xs:
fontFamily: "General Sans"
fontSize: 13px
fontWeight: 500
lineHeight: 1.43
letterSpacing: 0px
rounded:
none: 0px
xs: 3px
sm: 6px
md: 8px
lg: "30%"
spacing:
xxs: 4px
xs: 8px
sm: 12px
md: 16px
lg: 24px
xl: 32px
xxl: 48px
xxxl: 64px
section: 80px
borderWidths:
thin: 1px
shadows:
sm: "oklab(0 0 0 / 0.05) 0px 1px 3px 0px, oklab(0 0 0 / 0.05) 0px 1px 2px -1px"
md: "rgba(0, 0, 0, 0.25) 0px 0.5px 1px 0px, rgba(0, 0, 0, 0.02) 0px -3px 4px 0px inset"
lg: "rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1px"
xl: "rgba(0, 0, 0, 0.1) 0px 20px 25px -5px, rgba(0, 0, 0, 0.1) 0px 8px 10px -6px"
elevationStrategy: layered-micro
themes:
derived: dark # the other theme is the site's measured palette
light:
bg: "#FFFFFF"
surface: "#F7F7F7"
surfaceRaised: "#EEEEEE"
text: "#111111"
textMuted: "#646464"
border: "#E2E2E2"
accent: "#111111"
accentFg: "#FFFFFF"
focusRing: "#111111"
elevation: shadow
dark:
bg: "#0F0F10"
surface: "#1D1D1E"
surfaceRaised: "#29292A"
text: "#F5F5F5"
textMuted: "#9E9E9E"
border: "#353536"
accent: "#818181"
accentFg: "#0B0B0C"
focusRing: "#636363"
elevation: "border+surface"
gradients:
- context: section
kind: linear
value: "linear-gradient(to top, oklch(0.967 0 0) 0px, rgba(0, 0, 0, 0) 100%)"
components:
button-outline:
typography: "{typography.button-sm}"
textColor: "oklch(0.21 0.006 285.883)"
border: "1px solid oklch(0.871 0.005 286.285)"
height: 36px
padding: "0px 12px 0px 12px"
boxShadow: "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, oklab(0 0 0 / 0.05) 0px 1px 3px 0px, oklab(0 0 0 / 0.05) 0px 1px 2px -1px"
rounded: "{rounded.sm}"
backgroundColor: "oklch(0.968 0.001 286.375)"
button-text:
typography: "{typography.body-xs}"
textColor: "oklch(0.556 0 0)"
height: 28px
padding: "0px 12px 0px 12px"
rounded: "{rounded.md}"
backgroundColor: "oklch(0.939 0 0)"
button-text-2:
typography: "{typography.body-sm}"
textColor: "oklch(1 0 0)"
height: 28px
padding: "0px 12px 0px 12px"
rounded: "{rounded.sm}"
backgroundColor: "oklch(0.141 0.004 285.824)"
link:
typography: "{typography.button-sm}"
textColor: "oklch(0.556 0 0)"
link-lg:
typography: "{typography.body-sm}"
textColor: "oklch(0.141 0.004 285.824)"
padding: "0px 8px 0px 8px"
rounded: "{rounded.md}"
states:
button-active:
target: button
state: active
transform: "scale(0.97)"
other-hover:
target: other
state: hover
opacity: 0
card-hover:
target: card
state: hover
opacity: 1
nav-hover:
target: nav
state: hover
opacity: 1
other-focus:
target: other
state: focus
opacity: 1
other-focus-visible:
target: other
state: focus-visible
opacity: 1
other-disabled:
target: other
state: disabled
opacity: 0.5
breakpoints:
- width: 375
containerWidth: 333
gridColumns: 2
navLinksVisible: 0
menuToggleVisible: false
headingPx: 24
bodyPx: 16
sectionPaddingX: 6
- width: 768
containerWidth: 694
gridColumns: 2
navLinksVisible: 0
menuToggleVisible: false
headingPx: 24
bodyPx: 16
sectionPaddingX: 6
- width: 1024
containerWidth: 1014
gridColumns: 2
navLinksVisible: 0
menuToggleVisible: false
headingPx: 24
bodyPx: 16
sectionPaddingX: 6
- width: 1280
containerWidth: 790
gridColumns: 2
navLinksVisible: 0
menuToggleVisible: false
headingPx: 24
bodyPx: 16
sectionPaddingX: 6
- width: 1440
containerWidth: 790
gridColumns: 2
navLinksVisible: 0
menuToggleVisible: false
headingPx: 24
bodyPx: 16
sectionPaddingX: 6
coverage:
statesFound: 61
gradientsFound: 1
rolesUnassigned: 0
archetypesUnnamed: 0
archetypesDetected: 0
responsiveMeasured: true
stylesheetsBlocked: true
semanticRampDeclared: false
Liquid AI – Prism embodies a dark, sophisticated aesthetic centered on liquid-glass morphology and pure-black minimalism. The design conveys cutting-edge AI capability through restraint: a self-contained black palette, elegant typography that breathes through whitespace, and subtle depth shifts driven by colour blocking rather than heavy shadows. The visual language prioritizes content over decoration, with the exception of carefully composed video backgrounds that anchor hero sections and feature blocks. This is a system designed for agencies and AI-forward brands that want to project technical mastery through deliberate understatement—glacial navigation, word-by-word headline reveals, and gentle micro-interactions that reward close attention without demanding it.
Key Characteristics:
The site operates within a tightly constrained neutral palette with no declared semantic status colours. All design intent flows through pure black, off-white, and near-grey tones, with depth achieved entirely through surface colour relationships.
Primary Neutrals
oklch(0.556 0 0)): Primary text colour on light surfaces; used on body copy, labels, and standard UI textoklch(0.968 0.001 286.375)): Light neutral surface; primary page background and card fillsoklch(0.141 0.004 285.824)): Deepest neutral; used for headings, high-emphasis text, and dark button fillsoklch(0.871 0.005 286.285)): Subtle dividers and outline strokes; nearly indistinguishable from canvasSurface & Semantics
oklch(var(--muted)))color-mix(in oklab, oklch(var(--foreground)) 10%, transparent) — slight surface lift on hovercolor-mix(in oklab, oklch(var(--foreground)) 40%, transparent) — stronger interaction feedbackcolor-mix(in oklab, oklch(var(--foreground)) 80%, transparent) — near-text opacity for secondary messaging-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif)| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Display / Heading (small) | General Sans | 24px | 600 | 1.25 | −0.6px | Text-transform: capitalize; largest display role measured |
| Heading (xs) | General Sans | 13px | 600 | 1.5 | −0.13px | Section-level headings and sub-titles |
| Body (md) | General Sans | 15px | 500 | 1.63 | 0px | Primary body copy and narrative text |
| Body (sm) | General Sans | 13px | 500 | 1.43 | 0px | Text-transform: capitalize; used for labels and metadata |
| Button (sm) | General Sans | 14px | 500 | 1.43 | 0px | Standard button label size |
| Button (xs) | General Sans | 13px | 500 | 1.43 | 0px | Smaller call-to-action buttons |
| Body (xs) | General Sans | 12px | 500 | 1.33 | 0px | Links, captions, fine print |
{typography.heading-sm} role uses −0.6px letter-spacing, creating visual tension and premium feelOutline Button
oklch(0.968 0.001 286.375) (off-white)oklch(0.21 0.006 285.883) (near-black)1px solid oklch(0.871 0.005 286.285) (hairline)0px 12px (horizontal symmetry)36px{typography.button-sm} (14px){rounded.sm} (6px)oklab(0 0 0 / 0.05) 0px 1px 3px 0px, oklab(0 0 0 / 0.05) 0px 1px 2px -1pxoklch(var(--foreground)); scale 0.97 on activeText Button (Secondary)
oklch(0.939 0 0) (very light grey)oklch(0.556 0 0) (mid-grey)0px (flat)0px 12px28px{typography.body-sm} (12px){rounded.md} (8px)color-mix(in oklab, oklch(var(--foreground)) 10%, transparent)Text Button (Tertiary / Dark)
oklch(0.141 0.004 285.824) (black)oklch(1 0 0) (white)0px (flat)0px 12px28px{typography.body-xs} (13px){rounded.sm} (6px)oklch(var(--sidebar-accent-foreground))Default Link
oklch(0.556 0 0) (mid-grey){typography.button-sm} (14px)0px (inline)0pxoklch(var(--foreground))Large Link (Navigation)
oklch(0.141 0.004 285.824) (black){typography.body-xs} (13px)0px 8px28px{rounded.md} (8px)color-mix(in oklab, oklch(var(--foreground)) 10%, transparent)2px solid oklch(var(--ring) / 0.7) outlinecolor-mix(in oklab, oklch(var(--foreground)) 15%, transparent)oklch(0.968 0.001 286.375) (off-white canvas)1px solid oklch(0.871 0.005 286.285) (hairline){rounded.none} (0px) for photo elements; {rounded.md} (8px) or {rounded.lg} (30%) for card containers{spacing.md} to {spacing.lg} (16–24px) internal spacingcolor-mix(in oklab, oklch(var(--foreground)) 10%, transparent)rgba(0, 0, 0, 0.25) 0px 0.5px 1px 0px, rgba(0, 0, 0, 0.02) 0px -3px 4px 0px inset for subtle inset depth{typography.body-md} (15px)0px 12px (horizontal), 0px 8px (vertical, inferred from button sizing){rounded.sm} (6px)1px solid oklch(0.871 0.005 286.285) (hairline)2px solid oklch(var(--ring) / 0.75) outlinecolor-mix(in oklab, oklch(var(--foreground)) 15%, transparent)The design uses an 8px base unit with a power-of-two-adjacent scale:
{spacing.xxs} = 4px (micro adjustments, icon padding){spacing.xs} = 8px (compact grouping, button padding){spacing.sm} = 12px (small components, input internal spacing){spacing.md} = 16px (standard card padding, section gutters){spacing.lg} = 24px (feature block gutters, larger component padding){spacing.xl} = 32px (major section margins){spacing.xxl} = 48px (hero padding, large section spacing){spacing.xxxl} = 64px (full-screen section tops/bottoms){spacing.section} = 80px (primary vertical section dividers)Usage contexts:
{spacing.md} to {spacing.lg} internal padding{spacing.sm} (12px) horizontal padding{spacing.section} (80px) vertical; {spacing.md} to {spacing.lg} horizontal{spacing.xxxl} (64px) top/bottom, {spacing.xxl} (48px) sidesSpace is the primary design tool. Sections are separated by generous vertical gutters ({spacing.section} = 80px); cards breathe within themselves via {spacing.md} to {spacing.lg}. Text does not crowd; body line heights exceed 1.6. The absence of visual clutter forces every element to justify its presence—color shifts, typography scale, or movement alone signal hierarchy.
{rounded.none} = 0px (images, full-bleed video blocks, sharp edges){rounded.xs} = 3px (minimal rounding, rare use){rounded.sm} = 6px (button primary, input fields, subtle curve){rounded.md} = 8px (card containers, navigation pills, standard containers){rounded.lg} = 30% (pill-shaped items, circular callouts, full-width soft containers)Component mappings:
{rounded.sm} (6px){rounded.sm} (6px){rounded.md} (8px){rounded.md} (8px) or {rounded.lg} (30%) for full-bleed content{rounded.none} (0px)1px (all borders on buttons, inputs, cards, and dividers)| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow; colour blocking only | Primary surfaces, buttons, cards on white canvas |
| Micro (sm) | oklab(0 0 0 / 0.05) 0px 1px 3px 0px, oklab(0 0 0 / 0.05) 0px 1px 2px -1px | Button outlines, subtle lifts |
| Medium (md) | rgba(0, 0, 0, 0.25) 0px 0.5px 1px 0px, rgba(0, 0, 0, 0.02) 0px -3px 4px 0px inset | Custom depth; inset shadow for recess effect |
| Large (lg) | rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.1) 0px 1px 2px -1px | Secondary emphasis |
| XL (xl) | rgba(0, 0, 0, 0.1) 0px 20px 25px -5px, rgba(0, 0, 0, 0.1) 0px 8px 10px -6px | Maximum depth; modals, overlays, floating sections |
Shadow philosophy: The system uses layered-micro elevation: depth comes primarily from colour shifts and surface opacity changes rather than shadows. When shadows do appear, they employ stacked near-transparent layers (oklab at 0.05–0.1 opacity) that create barely-perceptible lift. This reinforces the "liquid glass" aesthetic—elements feel embedded in a continuous plane rather than floating above it. The one exception is the inset shadow (md level), which suggests recession and containment.
Opacity variations observed in interaction states:
opacity: 0.5 to 0.7 (reduced prominence without removal)opacity: 0.8 to 0.9 (dimming or highlight, context-dependent)opacity: 1 (full visibility on reveal)opacity: var(--veil-hover) (custom variable, likely 0.6–0.8)The system defines a shallow stacking order:
z-index: 1 to 2 (standard document flow)z-index: 10 to 55 (navigation dropdowns, popovers, menus)z-index: 50+ (explicitly layered above dropdowns)z-index: 55+ (topmost notifications)Most interactive components sit at base; navigation and modals use the 10–55 range.
{spacing.xxs} through {spacing.section}; do not introduce arbitrary values{rounded.none} (0px); only containers round2px solid oklch(var(--ring) / 0.7) outline is mandatory for accessibilityvar(--veil-hover)linear-gradient(to top, oklch(0.967 0 0) 0px, rgba(0, 0, 0, 0) 100%) is reserved for section overlays only| Viewport | Content Width | Grid Columns | Layout Shift | Largest Heading | Body Font | Section Padding-x |
|---|---|---|---|---|---|---|
| 375px | 333px | 2 | Full-width sections stack | 24px | 15px ({typography.body-md}) | 6px |
| 768px | 694px | 2 | Flexible; 2-column maintained | 24px | 15px | 6px |
| 1024px | 1014px | 2 | Flexible; 2-column maintained | 24px | 15px | 6px |
| 1280px | 790px (max-width applied) | 2 | Content width capped | 24px | 15px | 6px |
| 1440px | 790px (max-width maintained) | 2 | Content width capped | 24px | 15px | 6px |
Key observations:
{spacing.sm} (12px){spacing.md} (16px) minimum horizontal and verticaloklch(0.556 0 0) — mid-grey, standard UI textoklch(0.968 0.001 286.375) — off-white, card and page backgroundoklch(0.141 0.004 285.824) — deepest neutral, display and emphasisoklch(0.871 0.005 286.285) — subtle divider, stroke colouroklch(0.968 0.001 286.375) (same as canvas)oklch(0.141 0.004 285.824) (same as black)color-mix(in oklab, oklch(var(--foreground)) 10%, transparent)color-mix(in oklab, oklch(var(--foreground)) 40%, transparent){spacing.xxs} through {spacing.section}.2px solid oklch(var(--ring) / 0.7) on all interactive elements. Never omit for accessibility.var(--veil-hover) when provided.color-mix(in oklab, oklch(var(--foreground)) 15%, transparent).transition-duration and transition-timing-function values not measured.oklch(var(--ring)), oklch(var(--muted)), and other custom properties; their default values or theming mechanism not fully mapped.linear-gradient(to top, oklch(0.967 0 0) 0px, rgba(0, 0, 0, 0) 100%). Use context suggests section overlays; exact deployment contexts not comprehensive.