System

A living specimen of the design system for victormaragioglio.com. Every element on this page is built from the tokens, primitives and components it documents.

Tokens
styles/tokens.css
Specification
docs/design-system.md
Specimen
/system

Typography

One grotesk family; one secondary mono for technical contexts. Each role fixes size, line-height, tracking and weight. Metrics are measured live at this viewport.

  1. text-display-xl

    Once per page at most. Name, hero title, a single statement.

    Victor Maragioglio

     

  2. text-display-lg

    Project titles in heroes, Next project, page titles.

    Type, grid, space, image

     

  3. text-heading-lg

    Editorial statements, major section headings.

    Frontend Developer working across interfaces, design systems and visual experimentation.

     

  4. text-heading-md

    Section headings, index row titles.

    The interface is quieter than the work it contains.

     

  5. text-heading-sm

    Small headings in dense layouts; group titles.

    Metadata is precise, almost clinical.

     

  6. text-body-lg

    Lede paragraphs, introductions.

    This page is a living specimen. Every element on it is built from the tokens, primitives and components it documents.

     

  7. text-body-md

    Default body copy.

    Sizes are tuned optically rather than derived from a modular ratio. Fluid roles interpolate between a 375px and a 1600px viewport and clamp at both ends, so display type reaches its full size on large screens while body copy barely moves. Line length is controlled by grid spans and the measure token, not by font size.

     

  8. text-body-sm

    Secondary copy, navigation, metadata values.

    Secondary copy, navigation and metadata values. Set at 14px with generous line height.

     

  9. text-meta

    Metadata labels and small data.

    Role · Year · System · Status

     

  10. text-caption

    Media captions.

    Fig. 1 Captions are factual: what the image shows, at which width, in which state.

     

  11. text-technical

    Mono only: code, token names, technical data.

    --text-display-xl: clamp(3rem, 1.786rem + 5.714vw, 7.5rem)

     

Weights

Two only. Regular carries everything, including display. Medium is for small headings and rare emphasis.

Regular 400

Medium 500

Numerals

Tabular figures for indices, years and data; proportional in running text.

01 11 2022—2024

01 11 2022—2024

Font tokens

Components reference tokens, never a family. Swap the face in lib/fonts.ts.

--font-primary
 
--font-mono
 

Color

Paper, ink, neutrals and one signal. The signal marks state only: focus, current location, live status. Contrast is computed against surface-primary.

  • surface-primary 

    Page ground.

  • surface-secondary 

    Media placeholders, loading ground, rare quiet fills.

  • surface-inverse 

    Inverse regions.

  • text-primary  ·  

    Primary text.

  • text-secondary  ·  

    Supporting text, values.

  • text-muted  ·  

    Labels, de-emphasized data.

  • text-inverse  ·  

    Text on inverse surfaces.

  • border-primary  ·  

    Start and end of a structure.

  • border-subtle  ·  

    Separators within a structure.

  • accent-signal  ·  

    State only: focus, current location, live status.

Inverse scope

The same semantic tokens, swapped for a region.

Components need no changes. Use for one or two regions per page at most. Inline link.


Spacing

A 4px-based scale; keys are multiples of 4px. Only these steps exist. Semantic tokens change per breakpoint, so components don't have to.

Scale

  • 00px
  • px1px
  • 14px
  • 28px
  • 312px
  • 416px
  • 624px
  • 832px
  • 1248px
  • 1664px
  • 2496px
  • 32128px
  • 40160px
  • 48192px

Semantic

Values at this viewport.

  • page-inline Outer page margin.
  • grid-gutter Column gutter.
  • section-sm Tight section rhythm.
  • section-md Default section rhythm.
  • section-lg Major divisions.
  • section-xl Silence; around a statement.
  • content Between blocks inside a section.
  • meta Label to value inside a metadata item.

Grid

4 / 8 / 12 columns, fluid, inside the page margins. The grid is infrastructure: it becomes visible only through alignment. Drawn here, and nowhere else.

1
2
3
4
Viewport
 
Breakpoint
 
Columns
 
Gutter · Margin
  ·  

Composition conventions

Desktop columns. Asymmetry is the default: content starts on meaningful columns and leaves deliberate empty ones.

Label 1–3
Content 4–12
Offset reading column 5–10
Statement 3–11
Archive 9–10
Pair 1–7
Pair 9–12, bottom-aligned
Bleed — exceptional, touches the viewport edge

Layout primitives

Section, Container, Grid, GridItem, Stack, Cluster, Split, Bleed, TextBlock. Each solves one recurring problem. There is no Spacer, Card or Box.

Stack

Vertical flow with a token gap.

gap 2
gap 2
gap 2

Cluster

Horizontal, wrapping, aligned to the first baseline.

Split

3:9 · 4:8 · 5:7. Stacked on mobile, aside first.

Aside 3
Main 9
Aside 4
Main 8
Aside 5 (reverse)
Main 7

Bleed

A non-grid child pulled to the viewport edge. Inside a Grid, use GridItem bleed.

TextBlock

Long-form prose: measure, paragraph rhythm, inline links, lists.

The source of truth is three things that must always agree: the code tokens, the specification in docs/design-system.md, and this page. If one changes, the other two change in the same commit.

  • Do not introduce a new color inside a page.
  • Do not introduce arbitrary font sizes or spacing.
  • Compose existing primitives before creating a component.

Metadata

Precise, almost clinical. A <dl>, never pills. Labels muted and sentence case; values plain. Mono is not the metadata font.

Entry

The example from the brief.

01

The Barn

2022 to 2024

Role
Frontend Developer
System
  • Shopify
  • Liquid
  • JavaScript

Columns

ProjectMeta. Columns share the grid gutter, so three columns in this nine-column span sit on the page grid.

Year
2022 to 2024
Role
Frontend Developer
Type
E-commerce
Discipline
Frontend Development
System
  • Shopify
  • Liquid
  • JavaScript

Inline

Role
Frontend Developer
Location
Zürich, CH
Status
Live

Formats

lib/format.ts — never hand-format.

Number
01 · 12
Single year
2023
Range
2022—2024
Ongoing
2024—
Technology
  • Next.js
  • TypeScript
  • GSAP
Technical
  • Next.js
  • TypeScript
  • GSAP

StudyMeta

Specimen values describe this design system.

Topic
Type scale
Medium
CSS clamp()
Date
2026
Status
In progress

ExperimentMeta

Technology
  • Next.js
  • GSAP
  • CSS Grid
Date
2026
Status
In progress

Project index

An editorial catalogue, not cards — typographic, no imagery. Hover or focus a row: its title moves 0.1em and its arrow appears, its metadata steps up, sibling titles recede one step. Rows: complete, single year, ongoing, messy, minimal.

  1. The Barn 

    Discipline: Frontend DevelopmentYears: 2022 to 2024Type: E-commerce
  2. Specimen, single year 

    Discipline: Frontend DevelopmentYears: 2021Type: Specimen
  3. Specimen, ongoing 

    Discipline: Interface PrototypingYears: 2024 to presentType: Specimen
  4. A deliberately long specimen title that has to wrap across several lines 

    Discipline: Frontend Development, Design Systems and Technical DirectionYears: 2019 to 2023Type: Cultural institution / Archive
  5. Specimen 

    Years: 2018

Media

Images are material: no frames, mockups, radius or shadow. Placement varies in scale. Captions are factual. Specimen plates stand in for project media.

Specimen plate A, 3:2: a tonal field with a darker block at the upper right.
Fig. 1 offset-start: columns 1–8 on desktop, bled to the start edge on mobile. Caption aside.
Specimen plate F, 1:1: a tonal field, lower right quarter darker.
Fig. 2 archive: a small archival image in columns 9–10 beside silence.
Specimen plate E, 21:9: a tonal field with a darker block at the right.
Fig. 3 bleed: edge to edge. Exceptional.
Specimen plate C, 16:9: a tonal field with a darker block in the center.
Specimen plate B, 4:5: a tonal field with a darker block at the lower left.
Fig. 4 pair: 1–7 and 9–12, bottom-aligned. Never a symmetrical 6/6.
Specimen plate C, 16:9: a tonal field with a darker block in the center.
Fig. 5 offset-end: columns 5–12.
Specimen plate F, 1:1: a tonal field, lower right quarter darker.
Specimen plate D, 4:3: a tonal field, left half darker.
Specimen plate A, 3:2: a tonal field with a darker block at the upper right.
Specimen plate B, 4:5: a tonal field with a darker block at the lower left.
Fig. 6 sequence: equal spans, one ratio, cropped to a square.

Responsive crop

Portrait on mobile, cinema on desktop. Crops are decisions, not shrinkage.

Specimen plate A, 3:2: a tonal field with a darker block at the upper right.

Video

Ambient: muted, looping, with a pause control. Does not autoplay under reduced motion.


Rules

Square corners. Rules, not boxes. Primary rules start and end a structure; subtle rules separate items within it.

Primary


Subtle


Vertical

Rare: only to separate columns of data.

2022—2024Frontend DevelopmentE-commerce

Motion

Controlled, precise, quiet. CSS for state changes; GSAP only where it gives real control, always through useMotion. Each track moves a block from the first column to the last.

  • fast · 160mspower2.out
  • standard · 380mspower2.out
  • editorial · 900mspower3.out
  • long · 1400mspower2.inOut

RuleReveal

A rule draws from its start edge when it enters the viewport. Motion that reinforces layout.


Reveal — fade

Below the fold only. Never per paragraph.

Reveal — mask

Unmasks top-down. For media.

Never

Bounce, elastic, springs. Fade-up on every element. Constant parallax. Pinning every section. Scale to 200%. Split-text reveals. Cursor followers. Magnetic buttons.

Reduced motion

 


Editorial grammar

Statement, case-study hero, credits, next project. Shown with specimen data; structure only, no invented content.

Frontend Developer working across interfaces, design systems and visual experimentation.

EditorialStatement

The Barn


Year
2022 to 2024
Role
Frontend Developer
Type
E-commerce
Discipline
Frontend Development
System
  • Shopify
  • Liquid
  • JavaScript
Specimen plate E, 21:9: a tonal field with a darker block at the right.
ProjectHero with ProjectMeta and a bled lead image.

Credits

Design system
Victor Maragioglio
Frontend development
Victor Maragioglio

Responsive behavior

Mobile is recomposed, not shrunk. Resize this window: the readout, grid, index and media change composition.

Viewport
 
Breakpoint
 
Columns
 
Gutter · Margin
  ·  
Desktop and mobile composition
Desktop (lg+)Mobile (base)
Large type scale, grid tensionType clamps; fewer large moments
Label beside contentLabel above content
Empty columns, horizontal silenceVertical rhythm carries the space
Index: number · title · year · discipline / typeNumber + title, discipline, then year · type
Offset and asymmetric mediaFull width or bled; crops may change ratio
Hover disclosureInformation visible without hover

Accessibility

Part of the system, not a later pass. Press Tab: the skip link appears first, and every interactive element shows the signal focus outline.

Semantics
Landmarks, one h1, no skipped levels; metadata as dl, indices as ol, rules as hr.
Focus
2px signal outline on :focus-visible. Every hover has a focus equivalent.
Contrast
Text roles pass WCAG AA on both surfaces. Signal is non-text only.
Motion
 
Alt text
Required on every image. Describe what is shown and why; empty only for duplicates.
Links
External links announce new tabs and show ↗. Names make sense out of context.