Colors

Novaiok Style System semantic color tokens built on dark-first principles. Always use var() — never hardcode hex values.

Surfaces

--color-bg
#080c14
--color-surface
#0e1420
--color-surface-2
#141b2a
--color-surface-3
#1c2438
--color-surface-4
#232e46

Brand & Status

--color-brand
#3b6eff
--color-brand-hover
#5580ff
--color-success
#00c896
--color-error
#ff4040
--color-warning
#f59e0b

Program Colors

--color-adults
Adults · #3b6eff
--color-juniors
Juniors · #00d4aa
--color-peewee
PeeWee · #ff6b9d
--color-teens
Teens · #a78bfa
--color-openmat
Open Mat · #f59e0b

Text Colors

--color-text-primary · #f0f4ff — Headings and labels

--color-text-secondary · #8a9bc0 — Body and descriptions

--color-text-muted · #4a5568 — Placeholders and hints

--color-text-brand · #6b9eff — Links and active states

--color-text-success · #00d4aa — Success messages

--color-text-error · #ff7a7a — Error messages

--color-text-warning · #fbbf24 — Warning messages

Spacing & Radius

4px base grid. Use --space-* tokens exclusively. Border radius scale from 0 to pill.

Spacing Scale

--space-1
4px
--space-2
8px
--space-3
12px
--space-4
16px
--space-5
20px
--space-6
24px
--space-8
32px
--space-10
40px
--space-12
48px
--space-16
64px
--space-20
80px
--space-32
128px

Border Radius Scale

--radius-0
0px
--radius-0-5
2px
--radius-1
4px
--radius-2
8px
--radius-3
12px
--radius-4
16px
--radius-6
24px
--radius-full
pill

Shadows

6-level elevation scale + semantic shadows for buttons, focus rings, and cards.

--shadow-xs
--shadow-sm
--shadow-md
--shadow-lg
--shadow-xl
--shadow-2xl
--shadow-card
--shadow-focus

Typography

Rajdhani for headings (drama + power). DM Sans for body (clarity + warmth). JetBrains Mono for code.

Rajdhani — Headings

Display 40px · Weight 700

Heading 1 · 32px

Heading 2 · 28px

Heading 3 · 24px

Heading 4 · 20px

Heading 5 · 18px

DM Sans — Body

Body Large · 16px · Regular — The quick brown fox jumps over the lazy dog.

Body · 14px · Regular — The quick brown fox jumps over the lazy dog.

Caption · 12px · Medium · Secondary color

Label · 11px · Semibold · Uppercase · Muted

Micro · 10px · Bold · Widest spacing

JetBrains Mono — Code

const member = { id: 'fake:1001', belt: 'blue', segment: 'adult_member' }; // Always use var() tokens — never hardcode hex values var(--color-brand) // ✓ correct #3b6eff // ✗ never hardcode

Graphic Examples

Real-world component combinations showing how tokens come together in actual interfaces.

Member Card — Adult

MT
Marcus Teixeira
Active • 2 days ago
Adults Active

Blue belt • 68 classes in 30d • Streak: 3 weeks

Member Card — Junior

EC
Ethan Clarke
Active • 3 days ago
Juniors Active

Gray/Black belt • 12 classes in 30d • Age: 11

Status Examples

New Trial Booked
Jordan Mills booked a trial class tomorrow at 6:00 PM. White belt, beginner.
⚠️
No-Show Alert
Sarah Okonkwo missed her class yesterday. Consider a follow-up message.
🚨
Payment Failed
Diego Ferreira's payment failed. 14 days overdue. Urgent follow-up needed.

Novaiok Icons

Custom geometric icon set. Minimal, bold, perfect for dark interfaces. 24px base, scalable 1:1.

Core Icons

dashboard
users
calendar
settings
check
alert
notify
download

Icon Guidelines

Grid: 24px base unit, scale 1:1 or 2:1 (48px, 32px, 24px, 16px)
Stroke: 1.5px – consistent weight across all icons
Radius: 2px on corners for warmth (not sharp, not rounded)
Color: Inherit from parent (use `currentColor` in SVG)
Spacing: ~3px padding inside the 24px grid

Imagery

Photography and visual treatment. Dark overlays, brand accent borders, and consistent framing.

Hero Image

🥋

The Art of Jiu Jitsu

Discipline, technique, community.

Class Cards

Juniors Class
Tuesday, 4:00 PM • 12 kids
Fundamentals
Every Tuesday • All levels
Advanced Gi
Friday, 7:00 PM • 8 students

Student Profile Card

MT
Marcus Teixeira
68
Classes
3 wk
Streak
Active

Photography Rules

Overlays: Dark gradient (rgba(8,12,20,0.6+)) on real photos to preserve text contrast
Framing: 16:9 hero, 4:3 cards, 1:1 avatars — consistent aspect ratios
Borders: 1px `--color-border` on light backgrounds, 1.5px `--color-border-accent` on dark/photo overlays
Radius: Match card radius (`--radius-3` to `--radius-5`)
Emphasis: Brand accent borders (1.5px) on hero/featured images

Video

Video embeds, player skins, and thumbnail treatments for the Novaiok design system.

Embedded Video

Guard Passing Fundamentals
Advanced Gi • 14 min • by Coach Paulo

Video Grid

Mount Escape
Guard Pass
Leglock

Video Guidelines

Player: 16:9 aspect ratio standard, dark overlay on play button area
Thumbnails: Gradient backgrounds using Novaiok colors (brand, success, warning, etc.)
Play icon: Centered, 48-64px, white or dark depending on background contrast
Cards: Title below (2-line max), subtle label
Hover: Minimal lift (shadow change), never intrusive
Ratio: 16:9 for embeds, 1:1 for thumbnails in grids

Buttons

Pill shape by default. 4 style variants × 5 color variants × 4 sizes. States: default, hover, active, focus, disabled, loading.

Variants

<button class="btn btn-filled">Filled</button>
<button class="btn btn-tonal">Tonal</button>
<button class="btn btn-outline">Outline</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-bare">Ghost</button>

Colors

Sizes

States

Badges & Chips

Status indicators, program labels, filter chips. Tonal variants for low-contrast contexts.

Status Badges

Active Trial Overdue Frozen Canceled Lead
<span class="badge badge-active">Active</span>
<span class="badge badge-trial">Trial</span>
<span class="badge badge-overdue">Overdue</span>
<span class="badge badge-frozen">Frozen</span>

Program Badges

Adults Juniors PeeWee Teens Open Mat

Semantic (Tonal)

Brand Success Error Warning Neutral Large Small

Chips

Belt Badges

IBJJF belt system — adult belts (white→black) and kids belts (white→green). Split badges for barred transition belts.

Adult Belts

Kids Belts (IBJJF)

Inputs & Forms

Dark surface inputs with brand focus rings. States: default, hover, focus, error, success, disabled.

Text Input States

This field is required
Invalid email address
<div class="form-field">
  <label class="form-label required">Label</label>
  <input class="input" placeholder="..." />
  <span class="form-help">Help text</span>
</div>
/* Error: add class "error" to input */
/* Disabled: add disabled attribute */

Other Controls

Toggle On
Toggle Off

Cards

Surface containers with shadow, border, and hover state. Stat cards, member cards, and alert variants.

Stat Cards

83
Active Members
↑ 4 this month
$12,450
Monthly Revenue
↑ 12% vs last month
3
Past Due
↓ needs attention

Basic Card

Card Title

Card content goes here. Use cards to group related information and actions into a cohesive unit.

Alert Cards

ℹ️
Info
This is an informational alert for neutral messages.
Success
Operation completed successfully.
⚠️
Warning
3 members are 10+ days inactive. Consider following up.
🚨
Error
Payment failed for 3 members. Action required.

Tables

Data tables with hover rows, avatar cells, badge columns, and action buttons. No harsh borders — subtlety through color.

MemberProgramBeltStatusLast Visit
MT
Marcus Teixeira
Adults Blue Active 2 days ago
SO
Sarah Okonkwo
Adults Purple Active Yesterday
DF
Diego Ferreira
Adults White Overdue 14 days ago
ET
Ethan Clarke
Juniors Gray Active 3 days ago

Overlays & Toasts

Modal with spring animation + blur backdrop. Toasts with colored left accent. Tabs for navigation.

Modal

Toasts

Success — Member checked in successfully.
Error — Payment failed. Please retry.
⚠️
Warning — 3 members are past due.
ℹ️
Info — AI Operator ran 5 minutes ago.

Tabs

Tab content goes here

Misc Components

Progress bars, skeleton loaders, avatars, and empty states.

Progress

Blue Belt Progress68%
Attendance Goal82%
Overdue Risk35%

Avatars

XS
SM
MD
LG
XL
MT
SO
DF

Skeleton Loaders

Empty State

🥋
No members yet
Import your members from Gymdesk or add them manually to get started.