OGLABS
Design System · Vol. 01
Loading
Aligning tokens
OGLABS DESIGN ACADEMY · DESIGN SYSTEM · VOL. 01

Design System.

3 COLORS
4 TYPEFACES
ZERO GRADIENTS*
ZERO BLUR (on ink)
HARD SHADOWS ONLY
CHAPTER 01 / 02

Digital.

Everything that ships on a screen — product UI, marketing site, dashboards, mobile, the brand book itself. All of it consumes from colors_and_type.css.

Foundations
Components
Patterns
Governance

Core Palette

Three colors. The entire palette. No greys — only transparency of ink or paper. Signal red is used once: the accent.

01 PAPER
Paper
#FAFAF6
02 INK
Ink
#0A0A0A
03 SIGNAL
Terminal Red
#FE1300

Ink & Paper Tints

Transparency is the only way to generate hierarchy. No off-grey or midtone variables.

PAPER ON INK
85paper/85
65paper/65
45paper/45
25paper/25
15paper/15
04paper/04
INK ON PAPER
85ink/85
65ink/65
45ink/45
25ink/25
12ink/12
06ink/06

Serif Scale — DM Serif Display

The editorial voice. Commands attention. Italic at signal-red for the accent phrase in every hero headline.

Hero
India's online design school.
clamp(3rem,7vw,6rem)
H1 · Section
How Interfaces Think?
48px / lh 1.05
H2 · Heading
Built like a real design school
36px / lh 1.08
H3 · Card
Interaction Design Fundamentals
24px / lh 1.15
Step numeral
01
48–56px · signal

JetBrains Mono

Every label, caption, metadata, button, annotation — uppercase, heavy tracking. The structural skeleton of the brand.

Masthead · 9px
OGLABS Design Academy
9px / 0.35em
Section label · 10px
OUR INSTRUCTORS
10px / 0.3em / red
Meta · 10px
July 2026 · 4 weeks · Live on Google Meet · ₹3,999
10px / 0.24em
Attribution · 11px
Oshin · CEO
11px / 0.2em
Button · 12px
12px / 0.2em
Status · pulse
Applications Open
animate-pulse dot

All Four Families

SERIF
Aa & Ii
DM Serif Display — headlines only
MONO
Aa 01
JetBrains Mono — labels, meta, buttons
SANS (BODY)
Aa & Ii
Inter 400/500 — body paragraphs only
LOGO
OGLABS
Archivo 700–900 — wordmark only

Scale

space-1
4px
space-2
8px
space-3
12px
space-4
16px
space-6
24px
space-8
32px
space-12
48px
space-16
64px
space-20
80px
space-24
96px

Border System

Borders are the primary structural device. No drop-shadows on cards — the 2px rule carries all the weight.

1px solid · hairline
1px dashed · internal
2px solid · structural
4px signal · section rule
1px dashed/15 · dark divider
1px dashed/10 · masthead

Hard Offset Only. No Blur. Ever.

Brut-sm · card hover
2·2 ink
Signal-md · button rest
4·4 signal
Signal-lg · button hover
6·6 lift
Contact card · 6·6 ink
6·6 ink
Glass card · soft depth
Glass depth

Timing & Easing

Minimal and purposeful. No spring, no bounce, no parallax on scroll (latest home uses framer-motion for a subtle parallax — a contained exception).

dur-fast
120ms — hover color switches
120ms
dur-base
200ms — border fades, card hovers, button lifts
200ms
dur-slow
400–500ms — kinetic discipline cross-fade
400ms
ease-standard
cubic-bezier(0.4,0,0.2,1)
standard
ease-linear
linear — marquee, shimmer, card-sheen
linear
animate-pulse
2s ease-in-out infinite — status dots
2s
card-sheen
2.4s linear infinite — glass card shimmer, only on hover
2.4s
marquee
30–38s linear infinite — institution strip, pauses on hover
30–38s

Design System Loader

The boot state uses only system primitives: ink background, paper grid, signal-red progress, mono rails, serif title, pulse status, and hard rules.

OGLABS
Design System · Vol. 01
Loading
Studio is opening
Design System.
Loading components
72%

Buttons

Primary — Signal red, hard shadow, hover lifts
Ghost light — transparent, ink border
Ghost dark — paper border
CTA inline text — unicode arrow in copy
Apply for July cohort   ↗ External links   · Separator

Badges

No rounded pills — all badges are rectangular with `border-radius:0`. Status is communicated by border color and the pulse dot.

Applications Open [ LIVE ] [ UPCOMING ] Vol. 01 · July 2026
[ UPCOMING ] July 2026 · Live cohort Cohort 04

Card Variants

Standard card — rest state
July 2026 · ₹3,999

Interaction Design Fundamentals

The thinking behind design decisions.

4 weeks · Live · By conversation
Standard card — hover state
July 2026 · ₹3,999

Interaction Design Fundamentals

The thinking behind design decisions.

4 weeks · Live · By conversation
Glass card — liquid-glass hero card (new in latest commit)
Upcoming flagship course

How Interfaces Think?

4 weeks · 3 sessions/week · Live on Google Meet

Form Inputs

Only two variants: dark (footer/newsletter) and light (contact page). Both use JetBrains Mono. Border turns signal-red on focus.

Dark — newsletter / modals
No spam · A human replies within 24 hours
Light — contact / registration
Full Name *
Email *

3-Column Newspaper Rail

Opens every dark section (hero, footer). Three cells: brand // volume // status. Dashed dividers. Reads like a broadsheet masthead.

OGLABS Design Academy
Vol. 01 · July 2026
Applications Open

KineticDisciplines Component

New in latest commit. Lives in the bottom-right dead-zone of the hero, below the flagship card. Numbered list; active row cross-fades at 2.4s intervals. Echoes the active name large below. Honors prefers-reduced-motion.

What this school teaches
now reading →

FAQ — Two-Column Grid

New in latest commit. Q and A sit in a 5:7 grid split. Q uses DM Serif Display, A uses Inter. Separated by a hairline border-b border-[ink/15].

What is OGLABS Design Academy?
India's online design school. We run live cohort sessions in interaction design, communication design, research, strategy, and typography.
Are the cohort sessions taught live?
Yes. Every cohort session is live on Google Meet. Three 90-minute sessions a week with the instructor and a small group. Workshops may be offered as recordings.
How do I enroll?
Enrollment is admissions-led. You register your interest, our team gets on a short call, sends a payment link, and activates your student access. A seat is a commitment, not a cart item.

Live vs. Recorded

New in RedesignPage.tsx. Two-column with ink/paper contrast. Check/X icons are small signal-red filled circles (yes) vs muted (no). No tables.

the rest of the internet

Recorded courses

Watch on your own time
60–90% drop-off after week 2
No critique, no peer review
Certificate of completion
the OG way

OGLABS cohorts

Live every session, questions in real time
Cohort accountability — you finish what you start
1:1 office hours with practicing designers
Portfolio you can defend in interviews

Curriculum-as-Code

From RedesignPage. Syllabus presented as syllabus/interaction.json in a macOS-style window. Tabs switch the track. Syntax colors use the signal-family palette only.

syllabus / interaction.json
How Interfaces Think? const interaction = { cohort: "July 2026", duration: "12 weeks · 3×/week", modules: [ "Mental models & perception", "Decision design", "Behavior systems", "Critique & defense", "Portfolio capstone" ], format: "live · meet · 1:1 office hours" };

Wordmarks

OGLABS black wordmark
OGLABS white wordmark
logo-black.svg · on paper
logo-white.svg · on ink

Faculty Lineage

SVG marks always black on white cell. 2px dividers. Always grayscale.

IIT Bombay IIT BOMBAY
NID NID
NIFT NIFT

Lucide + Unicode

Lucide React (0.487.0). Stroke 1.5px, 14–16px size. Used sparingly — never more than one icon per button. Unicode symbols → ↗ · — used in copy.

ArrowRight
ArrowUpRight
ChevronRight
CheckCircle2
Loader2
Mail
Sparkles
Zap
CTA External ·Meta sep Em dash // Section prefix

Dark Masthead Hero

Full hero specimen. 3-col masthead rail → 12-col content grid → flagship glass card right. Grid texture at 0.04 opacity. Subtle radial red bloom behind the card. KineticDisciplines below the card on lg+.

OGLABS Design Academy
Vol. 01 · July 2026
Applications Open
01 The thesis

India's online design school.

Four-week live cohorts where you learn to think like a designer. Three sessions a week, taught online by alumni from NID, IIT Bombay and IIT Guwahati.

No spam · No drip funnels · A human replies within 24 hours
Upcoming flagship course

How Interfaces Think?

4 weeks · 3 sessions/week · Live on Google Meet

Seats are limited. View syllabus ↗

Voice & Vocabulary

PREFERRED
Register for July Cohort
Applications Open
View Syllabus / Browse Disciplines
Interaction Design Fundamentals
"Seats are limited. Enrollment is by conversation."
"A seat in this cohort is not a cart item."
→ Vol. 01, The thesis, Lineage, Admissions
BANNED
Buy Course / Add to Cart / Checkout
Sign Up / Learn More
Discount / Sale / Bundle / Special Offer
Figma Masterclass / React for Designers
Taught by [Name]
Emoji anywhere in the UI
MICRO-CONVENTIONS
PREFIX — double-slash before all section labels (dev-style structural markers)
4 weeks · 3 sessions/week — middle-dot separates meta, never comma
01 / 02 / 03 — zero-padded numerals in serif at 48–56px signal-red
[ LIVE ] / [ UPCOMING ] — brackets for status tags
CTA arrows are unicode (right) and (external)

Breakpoints, Containers, Body Scale

Mobile-first. Five breakpoints. Three container widths. Inter body scale fixed in pixels for predictable Figma frames.

Breakpoints
sm
Mobile L · single column
≥ 640px
md
Tablet · 2-col grids
≥ 768px
lg
Laptop · 12-col + sidebar
≥ 1024px
xl
Desktop · default canvas
≥ 1280px
2xl
Wide displays
≥ 1536px
Container max-widths
prose
Long-form copy
640px
narrow
FAQ, comparison
880px
default
Standard pages
1200px
wide
Hero, masthead
1440px
Body type scale (Inter)
lede
Lede paragraph — section opener.
18px / 1.6
body
Default body copy.
16px / 1.6
small
Small body, captions.
14px / 1.55
xs
Footnotes.
13px / 1.55

Stack Order

base
page content
0
raised
cards on hover
10
sticky
top nav, sticky filters
20
dropdown
menus, autocomplete
30
overlay
modal backdrop
40
modal
modal content, drawer
50
toast
toasts, alerts
60
tooltip
tooltips, popovers
70

Transparency Scale

The only way to generate hierarchy. Use these exact stops — never a custom value.

04
12
25
45
65
85

Figma Tokens Studio Export

Use tokens/tokens.figma.json for Figma Tokens Studio. Use root tokens.json as the source file for this repo.

Download Figma tokens → Download tokens.json → View INTEGRATION.md ↗
FIGMA IMPORT
01. Install the Tokens Studio plugin in Figma.
02. Open Tokens Studio, then choose Import JSON.
03. Select tokens/tokens.figma.json and import all sets.
CSS
tokens.css
Custom properties · drop into any project
TAILWIND 4
tokens.tailwind.js
Preset · presets: [require('./tokens')]
SCSS
tokens.scss
$variables · @use 'tokens';
ES MODULE
tokens.js
import { color, spacing } from '@oglabs/design-system'
Compatible with: Figma Tokens Studio · Style Dictionary · Tailwind 4 · Canva Brand Kit · plain CSS · SCSS · ES modules
Regenerate: npm run build

Site Header

Sticky on scroll (z-index 20). Logo left, links center, CTA + actions right. Mobile collapses to hamburger drawer.

Light header — default
Dark header — hero variant
Mobile drawer — full-screen
OGLABS
Courses Disciplines Workshops About

Textarea, Select, Checkbox, Radio, Toggle

All controls share a 2px ink border and JetBrains Mono. Selected state is signal-red. No rounded corners except on radio.

Why this course? *
⚠ Please write at least 80 characters
Discipline
✓ Looks good
Tracks (multi-select)
Cohort
Notify me

Tab Pattern

Used on the syllabus to switch between weeks/tracks. Underline is signal-red, 2px, animates 200ms.

Three live sessions with the cohort. Reading assignments shared every Sunday. One critique workshop, one office-hours block.

Expandable Rows

For syllabus week breakdowns and FAQ. The plus rotates 45° to become an X. Closed state shows mono week label + serif title.

How users build internal models. Affordances, signifiers, mappings. Three live sessions on Norman, Krug, and Tufte. Critique on a real product.
Cognitive load, choice architecture, defaults. Workshop: re-design a checkout in 90 minutes.
Habits, hooks, momentum. Reading: Eyal, Fogg.

Tooltip / Popover

Ink background, signal-red border & arrow. Mono font for terse hints. Appears on hover after 200ms delay.

Explains the action
Cohort 04
July 14 — August 8, 2026

Notifications

Bottom-right stack. Auto-dismiss after 5s. Border-left signal-red rule. Hard offset shadow.

Application Sent
Our admissions team will reply within 24 hours.
Status
July cohort: 8 of 12 seats remaining.
Error
Couldn't send — please retry in a moment.

Progress & Stepper

Linear bar for cohort fill. Stepper for application flow. No green — only ink (done) and signal (active).

Seats filled8 / 12
Application stepper
Apply
02Interview
03Pay
04Onboard

Pagination

Tags & Filter Chips

Discipline tags use the 3-letter code (IXD, COM, RES, STR, TYP, INV). Active state inverts to ink-on-paper.

IXD · Interaction COM · Communication RES · Research STR · Strategy TYP · Typography + New

Avatar & Instructor Card

Square only — no rounded photos. Instructor portrait is 4:5 ratio. Initials fallback uses serif at 22px.

OS
AS
RP
OS
Oshin
CEO · OGLABS

Numeric Specimens

Big numerals in DM Serif at 56px, signal-red. Mono caption below.

04
Weeks · Live cohort
12
Seats per cohort
Sessions per week
₹3,999
Per cohort · all-in

Editorial Quote

"The thinking behind a design decision matters more than the pixels. We teach the thinking."

— Oshin · CEO · OGLABS

Loading State

Subtle ink shimmer at 200% width, 1.4s linear loop. Only used while waiting on async content.

Institution Strip

Continuously scrolling band. 30s linear loop. Pauses on hover.

NID Ahmedabad· IIT Bombay · IDC· NIFT· IIT Guwahati· Pearl Academy· Srishti Manipal· NID Ahmedabad· IIT Bombay · IDC· NIFT· IIT Guwahati·

No Results / No Data

ø
No upcoming cohorts in this discipline
Join the waitlist to get a single email when admissions open.

Mobile & Tablet

Hero collapses to single column. Masthead stacks. Cards go full-width with reduced padding.

375 × 812 · Mobile (iPhone)
VOL. 01

India's online
design school.

Four-week live cohorts. Three sessions a week.

Applications Open
Flagship
How Interfaces Think?
4 weeks · Live
768 × 1024 · Tablet (iPad)
OGLABS
Vol. 01 · July 2026
Open

India's online
design school.

Four-week live cohorts where you learn to think like a designer.

Flagship
How Interfaces Think?

Focus Rings

Every interactive element shows a 2px signal-red outline at 2px offset on :focus-visible. Never remove it. Tab through this section to verify.

link with focus
CSS: *:focus-visible { outline: 2px solid #FE1300; outline-offset: 2px; }

WCAG 2.1 Pairings

Every text/background pair tested against AA (4.5:1 normal text, 3:1 large text). Flagged pairs are decorative-only — never use them for body copy.

Ink on Paper#0A0A0A / #FAFAF6Aa Body textAAA · 19.5:1
Paper on Ink#FAFAF6 / #0A0A0AAa Body textAAA · 19.5:1
Signal on Paper#FE1300 / #FAFAF6Aa Body textAA · 4.7:1
Signal on Ink#FE1300 / #0A0A0AAa Body textAA · 4.1:1
Paper-65 on Inkpaper/65 / inkAa Body textAA · ~9:1
Paper-45 on Inkpaper/45 / inkAa DecorativeFAIL · 4.0:1
Paper-25 on Inkpaper/25 / inkAa DecorativeFAIL · < 3:1
Ink-45 on Paperink/45 / paperAa DecorativeFAIL · 4.4:1
Rule: Use opacity/45 and below for ornamental labels, dividers, mono captions on dark — never paragraph text. The body text token (paper/65 on ink, ink/65 on paper) is the floor.

Minimum 44 × 44

All interactive elements meet WCAG 2.5.5 (44 × 44 px minimum on touch). Mono "ghost text" links keep their visible label small but use generous padding for the hit area.

44 × 44
The icon itself is 18×18, but the hit area is padded out to 44×44. Same rule for nav links: visible text 10px, but row height ≥ 44.

Three Colors · Four Meanings

We don't add colors for state — we change density and iconography. Ink, paper, signal. That's the palette.

SUCCESS
ink + signal dot
WARNING
!signal + bang glyph
ERROR
inverse + signal block
INFO
iink + lowercase i
rule: state is conveyed by glyph + density, never by hue

Body & UI Workhorse

Inter handles all body, label, and UI text. Six steps. No sub-steps, no custom values.

22 / 32
The whole-cohort lecture is going extinct.
18 / 28
Built for craft, run by faculty who shipped.
15 / 24
Default body. Used in long-form, descriptions, paragraphs.
13 / 20
Inputs, buttons, dense UI rows.
11 / 16
Helper text, captions, footnotes.
10 / 14
Labels, micro overlines.

H1 → Caption

Eight steps from masthead headline to legal caption. Use the role, not the size — never raw px in product code.

H1 · 56/60
The Headline
H2 · 40/46
Section Title
H3 · 28/34
Sub-section
H4 · 22/30
Card heading
H5 · 17/24
Group label
H6 · 13/20
Field heading
BODY · 15/24
Default paragraph used across docs and product copy.
CAPTION · 11/16
Footnotes, legal, image captions.

Rhythm Rules

Line height tracks size, not whim. Tracking opens up only at small sizes — never on body text.

Line Height
DISPLAY ≥ 28px1.10–1.18
HEADING 17–22px1.32
BODY 13–15px1.55–1.60
CAPTION 10–12px1.40
Letter Spacing
DISPLAY SERIF−0.01em
BODY0
EYEBROW / OVERLINE0.22em
MONO LABELS0.18–0.30em

Four Canonical Templates

Every page collapses to one of these four. Don't invent a fifth.

DASHBOARD
Persistent side nav · KPI strip · primary chart panel.
DETAIL
Breadcrumb · two-column body · meta rail right.
FORM
Single column, max 480px wide, primary CTA bottom-left.
MARKETING
Full-bleed hero · alternating content rows · footer.

What Stays Pinned

Anchors that survive scroll. Limited to one per axis.

TOP NAVsticky; 64px; backdrop-blur(12px) on scroll past 8px.
SIDE NAVfixed; full viewport height; no shadow.
SUB-NAV / TABSsticky; top: 64px; pin only inside detail layout.
TABLE HEADERsticky in scroll container; 1px ink rule below.
FORM ACTION BARbottom-pinned in form layout; 4px red top border.

Compact · Comfortable

Two density modes. Marketing → comfortable. Internal tools → compact.

COMPACT
row 32px · cell pad 8/12 · gap 8 · text 12/16
Row · 32 high
Row · 32 high
Row · 32 high
COMFORTABLE
row 48px · cell pad 12/20 · gap 16 · text 14/22
Row · 48 high
Row · 48 high
Row · 48 high

Collapsed · Expanded

Sidebar widths: 64 collapsed (icons only) · 240 expanded. No in-between values. Toggle persists per-user.

Dashboard Cohorts Analytics Settings
· 64 collapsed / 240 expanded
· Active item: 4px red border, 18% red wash
· Section dividers: thin label, no rule
· Toggle key: [

⌘K Anywhere

Power-user surface. Fuzzy match · grouped commands · keyboard-first.

> create new cohort
ACTIONS
Create new cohort⌘ N
Create new lesson⌘ ⇧ N
NAVIGATE
Go to dashboardG D

Multi-level Navigation

Used only when top-nav has more than one full column of children. Open on hover (desktop) / tap (mobile).

Programs
Foundation Year Specialisation Internships
Faculty
Advisory Board Mentors Visiting Critics
Resources
Library Journal Public Lectures

Default Data Table

Sortable header · zebra off · 1px ink dividers · numbers right-aligned · tabular-nums.

Cohort Lead Seats Filled
14 — FoundationA. Rao2826
15 — FoundationM. Iyer2819
07 — SpecialisationP. Bhatt1414

Editable, Frozen Header

When tables need: inline edit, column resize, frozen first column, virtualized rows.

IDStudentStatusScore
001A. MehtaActive88
002R. KumarHold71
003N. SinghActive94
004P. JoshiActive82
005K. DasInactive
006L. VermaActive77
007S. PatelActive65

Definition Pairs

For metadata, settings, summaries. Mono key, Inter value, hairline rule between rows.

Cohort ID
CT-14-FOUND
Start Date
15 May 2026
Lead Faculty
Anjali Rao
Mode
In-Studio · 4 days/week

Line · Bar · Donut

One accent (red), neutral fills, hairline axis. No 3D, no gradients.

LINE
BAR
DONUT

Activity Feed

Vertical rule + dot. Time on the left in mono. Most-recent on top.

14:32
Anjali Rao approved Cohort 14 brief
12:08
System exported faculty payroll for May
YDAY
Priya Bhatt added 3 mentors to Specialisation 07

System Record

Append-only. Mono throughout. Severity in left band. Timestamp in ISO.

INFO2026-04-30T14:32:08Zauth.loginoshin@oglabs.in · ip 49.207.x.x
WARN2026-04-30T14:30:11Zbilling.retrycharge declined · attempt 2/3
ERR 2026-04-30T14:28:55Zexport.pdf timeout after 30s · job 8a2c
INFO2026-04-30T14:25:00Zcohort.createid ct-14-found · by anjali

Interaction States

Same shape, different signals. Hover lifts, active is louder, pressed inverts, disabled grays out.

REST
+ ACCENT, LIFT 1px
− 1px
12% INK · NOT-ALLOWED

Error · Success · Warning · Info

Inline messages anchor to the field they describe. Always paired with an icon for color-blind users.

Couldn't save changes.
Network timed out. Try again in a moment.
Cohort published.
Visible to faculty starting now.
!
Capacity nearly full.
2 seats remaining for Cohort 14.
i
Scheduled maintenance Sunday 02:00 IST.
Expect 15 minutes of downtime.

Outage · Maintenance · Offline

Page-width strip at the very top, above all chrome. Dismiss only when severity ≤ info.

SERVICE DEGRADED · Lessons may load slowlyStatus →
! MAINTENANCE TONIGHT · 02:00–02:15 ISTDismiss ×
OFFLINE · Reconnecting…attempt 3

Login · Signup · OTP · Reset

Single-column form layout, max 360px. Logo top, action button bottom-left.

LOGIN

Sign in

Email
you@og.school
Password
••••••••
SIGNUP

Create account

Full name
Oshin
Email
you@og.school
OTP

Enter code

Sent to +91 …42. Expires in 4:58.
42
Resend code →
PASSWORD RESET

New password

New password
••••••••••

Three Steps · No More

Welcome → personalize → first action. Skippable per step. Save partial.

01 / 03

Welcome.

Quick tour, two minutes. You can skip any step.

02 / 03

Tell us your role.

Faculty, student, or staff. Shapes your home screen.

03 / 03

Open your first cohort.

Live demo data — explore freely, nothing breaks.

Switcher + Permission Matrix

Avatar dropdown shows all workspaces. Roles are flat — no nested role inheritance.

OS
Oshin
oshin@oglabs.in
Workspaces
OGLABSOWNER
OG AcademyADMIN
CapabilityOwnerAdminFacultyStudent
Create cohort
Edit lesson
Submit work
Manage billing

Drag · Resize · Split · Inline Edit · Bulk

Power-user moves. Each one comes with a visible affordance — never hidden gestures only.

DRAG & DROP
Drag handle (⋮⋮) on the left. Drop indicator: 2px red bar between rows.
⋮⋮ Lesson 01 — Brief
⋮⋮ Lesson 02 — Critique
RESIZABLE PANEL
Cursor: col-resize. Snap to 25/50/75. Min 240px.
SPLIT VIEW
Code/preview, list/detail. Toggleable, default 60/40.
INLINE EDIT
Click → text becomes input. Esc cancels. Enter saves. Visible underline on hover.
Cohort 14 — Foundation Yearclick to edit
BULK ACTIONS
When 1+ row is selected, a sticky action bar slides up from the bottom of the table.

Light · Dark · High Contrast

Tokens swap, primitives don't. Multi-brand uses a single override layer per brand.

LIGHT (default)

Paper. Ink. Red.

Paper var(--paper) · Ink var(--ink) · Red var(--signal)

DARK

Ink primary, paper accent.

Surface var(--ink) · Foreground var(--paper) · Red unchanged

HIGH CONTRAST

Pure black + AAA pairs.

Yellow focus rings · 4.5:1 minimum on every pair

Multi-brand: Each brand (OGLABS, OG Academy, NIFT/IIT-B partner) ships a token override JSON. Only color + wordmark vary. Type, spacing, and motion stay locked across brands.

RTL · Expansion · Locale

Arabic & Hebrew flip. Indic & European expand 30%. Dates and numbers follow ICU locale.

RTL
المحاضرة الجماعية في طريقها إلى الانقراض. نحن نبني بديلاً.
dir=rtl · mirror layout · keep numerals LTR
EXPANSION
EN: Save
DE: Speichern
FR: Enregistrer
HI: सहेजें
buttons: min-width 96 · auto-grow
LOCALE
en-IN30/04/2026 · ₹1,23,456
en-US04/30/2026 · $1,234.56
de-DE30.04.2026 · 1.234,56 €
ar-SA٣٠/٠٤/٢٠٢٦

Haptics · Sound · Animation

Reserved. Used for confirm, error, and major state shifts only — never decoration.

HAPTICS (mobile)
SUCCESSlight · 10ms
WARNINGmedium · 30ms
ERRORheavy · 60+30+60ms
SELECTselection
SOUND
Off by default. Opt-in only. Single soft "tick" (220 Hz, 60ms) for confirm. Never error chimes — they shame.
ANIMATION
HOVER120ms ease-out
EXPAND240ms quart
PAGE320ms quart
REDUCEprefers-reduced: 0ms

House Visual Style

Photography is documentary. Illustration is line-only. No 3D, no AI-stock.

ILLUSTRATION
  • Line-only. 1.5px stroke, ink var(--ink).
  • Single accent fill: red var(--signal) or paper.
  • No gradients, no drop shadows, no isometric.
  • Frame ratio: 4:3 or 1:1.
PHOTOGRAPHY
  • Documentary. Real students, real studios.
  • Black & white preferred. Color only when essential.
  • No models, no stock, no over-saturation.
  • Always credit the photographer in mono caption.

How We Sound

Direct, opinionated, never sycophantic. Tone shifts with context — voice doesn't.

ContextToneExample
MarketingBold, declarative"The whole-cohort lecture is going extinct."
Product UIClear, actionable"Save changes" — not "Submit form"
ErrorsCalm, owning"We couldn't reach the server. Try again."
Empty stateEncouraging"Nothing here yet — add your first cohort."

What Went Wrong + What Now

Never blame the user. Always offer the next move. Two sentences max.

DON'T
"Invalid input. Error code 4291."
DO
"Email needs an @. Check the spelling and try again."
DON'T
"You did not fill in all required fields."
DO
"Two fields are still empty — we've highlighted them below."

Buttons · Hints · Confirmations

Verb + object. No "OK", no "Submit", no "Click here".

SurfaceAvoidUse
Primary CTASubmitPublish cohort
Confirm dialogOK / CancelDelete cohort / Keep it
Form hintRequiredWe'll email you the schedule
ToastSuccess!Saved · 2:42 PM

768 → 1023

Two-column layouts. Sidebar collapses to 64px icon rail. Modals hit 90% width, max 720.

GRID8 col · 24px gutter · 32px outer margin
SIDE NAVcollapse to icon rail; expand on tap
DETAIL → SHEETright rail becomes a slide-up sheet
TOUCHall targets ≥ 44 · hover states inert

Operable Without a Mouse

Every action reachable via keyboard. Visible focus, sane tab order, ARIA only when semantics aren't enough.

KEYBOARD
TABnext focusable
SHIFT + TABprevious
ENTER / SPACEactivate
ESCclose modal/menu
↑ ↓menu/list nav
⌘K · /command palette · search
ARIA RULES
  • Use semantic HTML first. Only add roles if there's no element.
  • aria-label on icon-only buttons.
  • aria-live=polite for toasts; assertive only for blocking errors.
  • aria-current=page on active nav link.
  • Modals trap focus + return on close.

Prop Conventions

Same prop names across every component. Variants, sizes, and tones use closed enums — never freeform strings.

PropTypeUsed by
variant"primary" | "secondary" | "ghost"Button, Badge
size"sm" | "md" | "lg"Button, Input, Avatar
tone"neutral" | "success" | "warning" | "error" | "info"Badge, Toast, Banner
isLoadingbooleanButton, Card, Table
leadingIcon / trailingIconReact.ReactNodeButton, Input, Badge

Tokens, Components, Files

Predictable names beat clever ones. Always category → role → variant → state.

TOKENS--color-bg-default · --color-fg-muted · --space-4 · --radius-sm
COMPONENTSPascalCase: Button, ToastBanner, AvatarStack
CSS CLASSESog-button og-button--primary og-button--sm is-loading
EVENTSonChange, onSelect, onSubmit — never onChanged or onSubmitted
FILESkebab-case for assets · PascalCase for components · lowercase for tokens

Do · Don't

High-leverage rules that come up in every review.

DO
  • Use one primary CTA per screen.
  • Pair color with shape or icon.
  • Keep vertical rhythm in 4pt multiples.
  • Match destructive copy to the actual verb.
  • Ship the loading & empty state with the feature.
DON'T
  • No drop shadows. Hard offset only.
  • No emoji in product UI.
  • No raw hex outside tokens.
  • No spinner without context — use skeleton.
  • No modal on top of modal.

SemVer + Two-Release Sunset

Major = breaking. Minor = additive. Patch = fix. Anything deprecated stays for two minors.

MAJOR (X.0.0)breaking API change · removal of deprecated · token rename
MINOR (0.X.0)new component · new prop · new token
PATCH (0.0.X)bug, a11y, contrast, copy
DEPRECATIONJSDoc @deprecated + console.warn one-shot · removed in v(N+2)

Budget

Hard targets enforced in CI. A regression blocks the merge.

LCP (mobile, 4G)≤ 2.0s
CLS≤ 0.05
INP (95th pct)≤ 200ms
JS BUNDLE (route)≤ 90 KB gz
FONT SUBSETlatin only by default · woff2
IMAGEavif/webp · srcset · lazy below fold

Event Tracking · A/B · Hooks

Every interactive component emits a typed event. A/B variants live behind a single flag prop.

EVENT NAMING
cta.cohort_apply.click
form.signup.submit
nav.sidebar.toggle
modal.delete_cohort.confirm
surface.feature.action — always 3 segments
A/B HOOK
const { variant } = useExperiment(
  'cohort_apply_cta_v2'
);
return variant === 'B'
  ? <Button tone="error">Apply now</Button>
  : <Button>Apply</Button>
never branch on raw user-id — always via hook

Brand Assets

One-click downloads for designers working in Figma, Canva, Illustrator, or anywhere else.

JSON
tokens.json
Figma Tokens Studio · Tailwind · Style Dictionary
PDF (PRINT TO PDF)
Brand Sheet (1-page)
Print to PDF · A4 · for Canva uploads
SVG
Logo (black)
logo-black.svg
SVG
Logo (white)
logo-white.svg
Fonts: DM Serif Display ↗ · JetBrains Mono ↗ · Inter ↗ · Archivo ↗

Lucide Icon Set (Static SVG)

Click any icon to copy its SVG markup to clipboard — paste directly into Canva, Figma, or HTML. Stroke-width 1.5px, 16px default.

From lucide.dev · 1,500+ icons available · Use data-lucide="icon-name" in HTML.
CHAPTER 02 / 02

Physical.

Everything that gets printed. All templates live as token-driven HTML files — open, edit, print to PDF.

01
Brand Book
A4 · 10 pages · Print to PDF
02
Letterhead
A4 · Light/Dark · Print to PDF
03
Business Cards
85×55mm · 10-up A4 · Crop marks
04
Internship Certificate
A4 Landscape · Signature + Seal
05
Invoice
A4 · GST-compliant
06
Posters & Flyers
A3 Poster · A4 Flyer · Light/Dark
07
Slides
16:9 · 6 types · Print to PDF
08
Social Media
Instagram · LinkedIn · Stories
09
Email Signature
HTML · 3 variants · Client-safe
10
Keynote Template
16:9 · HTML · Print to PDF

3 mm Bleed · 5 mm Safe

Every print artifact gets a 3 mm bleed beyond trim and a 5 mm safe area inside. No critical content outside the safe box.

Trim line
final piece
bleed 3mm
page
BLEED3 mm beyond trim · all four edges
TRIMfinal cut line · the visible piece
SAFE AREA5 mm inside trim · keep all type & logos here
CROP MARKSalways on · 0.25 pt rule · 5 mm offset

Press Limits

Stay inside these limits or the press shows through. No varnish, no foil, no spot UV — they fight the brand.

TOTAL INK COVERAGE≤ 280%
RICH BLACK BUILD60 / 40 / 40 / 100
FINE TYPE COLOUR100 % K only · never built
FINISHuncoated · matt only
SPECIALblind deboss ✓ · foil/UV/spot ✗
BINDINGsaddle-stitch ≤ 48 pp · perfect ≥ 64 pp

Before You Send to Press

If any box is unchecked, the file goes back. No exceptions.

  • ☐   PDF/X-4 export · CMYK + spot
  • ☐   All fonts embedded or outlined
  • ☐   Bleed 3 mm · trim · safe 5 mm visible
  • ☐   Total ink coverage ≤ 280 %
  • ☐   Images 300 dpi at print size
  • ☐   Spot Pantone 485 C present (if signal)
  • ☐   Black type set 100 % K (not rich)
  • ☐   Hairlines ≥ 0.25 pt
  • ☐   Crop marks · 5 mm offset
  • ☐   Spell-check passed
  • ☐   Two human proofreaders sign-off
  • ☐   Filename: og_{piece}_{vYY-MM-DD}.pdf