From 6450cfd64088ea7fc8a6f67bdf3a882c6e71235a Mon Sep 17 00:00:00 2001 From: Ajit Pratap Singh Date: Thu, 15 Oct 2026 01:23:17 +0530 Subject: [PATCH 1/2] feat(website/design): two-family variable type system and fluid type scale Drop Space Grotesk (4 static weights); headings use Inter Variable at 700 with -0.02em tracking. JetBrains Mono Variable (preload:false) for code, tabular-nums stat numbers and a separate mono eyebrow. Add fluid display/h2 tokens and apply them to the hero and Trusted by Developers section. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 --- website/src/app/globals.css | 36 +++++++++++++++++--- website/src/app/layout.tsx | 4 +-- website/src/components/home/Hero.tsx | 2 +- website/src/components/home/TrustSection.tsx | 7 ++-- website/src/lib/fonts.ts | 16 ++++----- 5 files changed, 47 insertions(+), 18 deletions(-) diff --git a/website/src/app/globals.css b/website/src/app/globals.css index df23bd06..611c6baf 100644 --- a/website/src/app/globals.css +++ b/website/src/app/globals.css @@ -92,9 +92,19 @@ html.light textarea[class*="font-mono"] { --color-danger: var(--danger); --color-ok: var(--ok); - --font-sans: var(--font-body), system-ui, sans-serif; - --font-heading: var(--font-heading), system-ui, sans-serif; - --font-mono: var(--font-jetbrains), monospace; + --font-sans: var(--font-inter), system-ui, sans-serif; + --font-heading: var(--font-inter), system-ui, sans-serif; + --font-mono: var(--font-jetbrains), ui-monospace, monospace; + + /* Fluid type scale */ + --text-display: clamp(2.5rem, 6vw, 4.5rem); + --text-display--line-height: 1.05; + --text-h2: clamp(1.75rem, 3.5vw, 2.5rem); + --text-h2--line-height: 1.15; + --text-body: 1rem; + --text-body--line-height: 1.6; + --text-eyebrow: 0.8125rem; + --text-eyebrow--line-height: 1.4; } html { @@ -102,7 +112,25 @@ html { } h1, h2, h3, h4, h5, h6 { - font-family: var(--font-heading), system-ui, sans-serif; + font-family: var(--font-inter), system-ui, sans-serif; + font-weight: 700; + letter-spacing: -0.02em; +} + +/* Mono eyebrow label, kept separate from the real heading it introduces. */ +.eyebrow { + font-family: var(--font-jetbrains), ui-monospace, monospace; + font-size: var(--text-eyebrow); + line-height: var(--text-eyebrow--line-height); + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +/* Stat numbers: mono, aligned digits. */ +.stat-number { + font-family: var(--font-jetbrains), ui-monospace, monospace; + font-variant-numeric: tabular-nums; } body { diff --git a/website/src/app/layout.tsx b/website/src/app/layout.tsx index c4c7a589..5993e7f6 100644 --- a/website/src/app/layout.tsx +++ b/website/src/app/layout.tsx @@ -1,5 +1,5 @@ import type { Metadata } from 'next'; -import { spaceGrotesk, inter, jetbrainsMono } from '@/lib/fonts'; +import { inter, jetbrainsMono } from '@/lib/fonts'; import { Navbar } from '@/components/layout/Navbar'; import { Footer } from '@/components/layout/Footer'; import { Providers } from '@/components/Providers'; @@ -40,7 +40,7 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - +