Agent Skills: Utopia Fluid Scales

Fluid typography and spacing tokens using Utopia.fyi with cqi (container query inline) units. Reference for the exact type steps and space tokens defined in this project.

UncategorizedID: matthewharwood/fantasy-phonics/utopia-fluid-scales

Install this agent skill to your local

pnpm dlx add-skill https://github.com/matthewharwood/fantasy-phonics/tree/HEAD/.claude/skills/utopia-fluid-scales

Skill Files

Browse the full folder contents for utopia-fluid-scales.

Download Skill

Loading file tree…

.claude/skills/utopia-fluid-scales/SKILL.md

Skill Metadata

Name
utopia-fluid-scales
Description
Fluid typography and spacing tokens using Utopia.fyi with cqi (container query inline) units. Reference for the exact type steps and space tokens defined in this project.

Utopia Fluid Scales

This project's fluid typography and spacing system

Configuration

Generated from: https://utopia.fyi/space/calculator?c=360,18,1.2,1240,20,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12

| Parameter | Value | |-----------|-------| | Min viewport | 360px | | Max viewport | 1240px | | Min base size | 18px | | Max base size | 20px | | Min scale ratio | 1.2 (Minor Third) | | Max scale ratio | 1.25 (Major Third) |

Unit: cqi (container query inline) - requires a container context to function.

Type Scale

Location: css/styles/typography.css

:root {
  --step--2: clamp(0.7813rem, 0.7736rem + 0.0341cqi, 0.8rem);
  --step--1: clamp(0.9375rem, 0.9119rem + 0.1136cqi, 1rem);
  --step-0: clamp(1.125rem, 1.0739rem + 0.2273cqi, 1.25rem);
  --step-1: clamp(1.35rem, 1.2631rem + 0.3864cqi, 1.5625rem);
  --step-2: clamp(1.62rem, 1.4837rem + 0.6057cqi, 1.9531rem);
  --step-3: clamp(1.944rem, 1.7405rem + 0.9044cqi, 2.4414rem);
  --step-4: clamp(2.3328rem, 2.0387rem + 1.3072cqi, 3.0518rem);
  --step-5: clamp(2.7994rem, 2.384rem + 1.8461cqi, 3.8147rem);
}

Type Step Reference

| Token | Min (360px) | Max (1240px) | Use Case | |-------|-------------|--------------|----------| | --step--2 | 12.5px | 12.8px | Captions, fine print | | --step--1 | 15px | 16px | Small text, metadata | | --step-0 | 18px | 20px | Body text (base) | | --step-1 | 21.6px | 25px | Large body, lead text | | --step-2 | 25.9px | 31.3px | H4 equivalent | | --step-3 | 31.1px | 39.1px | H3 equivalent | | --step-4 | 37.3px | 48.8px | H2 equivalent | | --step-5 | 44.8px | 61px | H1 equivalent |

Applied Styles

body {
  font-family: var(--font-base);
  font-size: var(--step-0);
  line-height: 1.5;
}

Note: No heading styles (h1-h6) are currently applied. Add as needed:

h1 { font-size: var(--step-5); }
h2 { font-size: var(--step-4); }
h3 { font-size: var(--step-3); }
h4 { font-size: var(--step-2); }
h5 { font-size: var(--step-1); }
h6 { font-size: var(--step-0); }

Space Scale

Location: css/styles/space.css

Individual Space Tokens

:root {
  --space-3xs: clamp(0.3125rem, 0.3125rem + 0cqi, 0.3125rem);
  --space-2xs: clamp(0.5625rem, 0.5369rem + 0.1136cqi, 0.625rem);
  --space-xs: clamp(0.875rem, 0.8494rem + 0.1136cqi, 0.9375rem);
  --space-s: clamp(1.125rem, 1.0739rem + 0.2273cqi, 1.25rem);
  --space-m: clamp(1.6875rem, 1.6108rem + 0.3409cqi, 1.875rem);
  --space-l: clamp(2.25rem, 2.1477rem + 0.4545cqi, 2.5rem);
  --space-xl: clamp(3.375rem, 3.2216rem + 0.6818cqi, 3.75rem);
  --space-2xl: clamp(4.5rem, 4.2955rem + 0.9091cqi, 5rem);
  --space-3xl: clamp(6.75rem, 6.4432rem + 1.3636cqi, 7.5rem);
}

Space Token Reference

| Token | Min (360px) | Max (1240px) | |-------|-------------|--------------| | --space-3xs | 5px | 5px | | --space-2xs | 9px | 10px | | --space-xs | 14px | 15px | | --space-s | 18px | 20px | | --space-m | 27px | 30px | | --space-l | 36px | 40px | | --space-xl | 54px | 60px | | --space-2xl | 72px | 80px | | --space-3xl | 108px | 120px |

One-Up Space Pairs

Fluid transitions between adjacent sizes:

:root {
  --space-3xs-2xs: clamp(0.3125rem, 0.1847rem + 0.5682cqi, 0.625rem);
  --space-2xs-xs: clamp(0.5625rem, 0.4091rem + 0.6818cqi, 0.9375rem);
  --space-xs-s: clamp(0.875rem, 0.7216rem + 0.6818cqi, 1.25rem);
  --space-s-m: clamp(1.125rem, 0.8182rem + 1.3636cqi, 1.875rem);
  --space-m-l: clamp(1.6875rem, 1.3551rem + 1.4773cqi, 2.5rem);
  --space-l-xl: clamp(2.25rem, 1.6364rem + 2.7273cqi, 3.75rem);
  --space-xl-2xl: clamp(3.375rem, 2.7102rem + 2.9545cqi, 5rem);
  --space-2xl-3xl: clamp(4.5rem, 3.2727rem + 5.4545cqi, 7.5rem);
}

Custom Space Pair

:root {
  --space-s-l: clamp(1.125rem, 0.5625rem + 2.5cqi, 2.5rem);
}

| Token | Min | Max | Scaling | |-------|-----|-----|---------| | --space-s-l | 18px | 40px | Dramatic (2.2x) |

Usage Examples

/* Padding with space tokens */
.card {
  padding: var(--space-m);
}

/* Fluid gap */
.stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-s-m);
}

/* Typography */
.title {
  font-size: var(--step-3);
}

/* Section spacing */
.section {
  padding-block: var(--space-l-xl);
}

Container Requirement

These scales use cqi units which require a container context. Without a parent with container-type: inline-size, the fluid calculation may not work as expected.

/* Required for cqi units to function */
.parent {
  container-type: inline-size;
}

Files

  • css/styles/typography.css - Type scale and body styles
  • css/styles/space.css - Space tokens and pairs