From 30467cc6464fbd31cf75d14388e5f09951a6f2bb Mon Sep 17 00:00:00 2001 From: Daniel Morris Date: Fri, 22 May 2026 23:52:50 +0100 Subject: [PATCH 1/4] favicon: regenerate with Space Grotesk wordmark The previous favicon rendered the wordmark in system-ui, which the design system handoff flagged as a brand bug. Move it onto Space Grotesk 700, amber on near-black. Adds @fontsource/space-grotesk and a one-off scripts/generate-favicons.mjs that drives satori + resvg to keep the raster sizes in sync with the SVG. --- package-lock.json | 10 ++++ package.json | 1 + public/apple-touch-icon.png | Bin 4686 -> 3755 bytes public/favicon-16x16.png | Bin 416 -> 352 bytes public/favicon-180x180.png | Bin 4686 -> 3755 bytes public/favicon-192x192.png | Bin 5092 -> 3871 bytes public/favicon-32x32.png | Bin 746 -> 624 bytes public/favicon-512x512.png | Bin 18384 -> 10994 bytes public/favicon.svg | 10 +++- scripts/generate-favicons.mjs | 100 ++++++++++++++++++++++++++++++++++ 10 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 scripts/generate-favicons.mjs diff --git a/package-lock.json b/package-lock.json index 742ade6..881f713 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@astrojs/starlight": "^0.37.7", "@fontsource/inter": "^5.2.8", + "@fontsource/space-grotesk": "^5.2.10", "@resvg/resvg-js": "^2.6.2", "@tailwindcss/vite": "^4.2.1", "astro": "^5.6.1", @@ -722,6 +723,15 @@ "url": "https://github.com/sponsors/ayuhito" } }, + "node_modules/@fontsource/space-grotesk": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@fontsource/space-grotesk/-/space-grotesk-5.2.10.tgz", + "integrity": "sha512-XNXEbT74OIITPqw2H6HXwPDp85fy43uxfBwFR5PU+9sLnjuLj12KlhVM9nZVN6q6dlKjkuN8JisW/OBxwxgUew==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@img/colour": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", diff --git a/package.json b/package.json index ea3d236..39d80a4 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "@astrojs/starlight": "^0.37.7", "@fontsource/inter": "^5.2.8", + "@fontsource/space-grotesk": "^5.2.10", "@resvg/resvg-js": "^2.6.2", "@tailwindcss/vite": "^4.2.1", "astro": "^5.6.1", diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index 69243927cfe37c2a550e630f6d48791907fea484..a7460a6a1d4a43c24189bc14df4ce3e4607cf7e6 100644 GIT binary patch literal 3755 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 diff --git a/public/favicon-180x180.png b/public/favicon-180x180.png index 69243927cfe37c2a550e630f6d48791907fea484..a7460a6a1d4a43c24189bc14df4ce3e4607cf7e6 100644 GIT binary patch literal 3755 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 Q^za3`T85fM>ed1O1C4tg2LJ#7 literal 5092 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 delta 723 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 literal 18384 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 diff --git a/public/favicon.svg b/public/favicon.svg index 0eb8638..a0b3571 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1,5 +1,9 @@ - - - ilo + + + ilo diff --git a/scripts/generate-favicons.mjs b/scripts/generate-favicons.mjs new file mode 100644 index 0000000..5a20c1c --- /dev/null +++ b/scripts/generate-favicons.mjs @@ -0,0 +1,100 @@ +// Regenerates the favicon set with the brand wordmark in Space Grotesk. +// Source of truth: ilo Design System handoff (chats/chat2.md) — Space Grotesk +// 700 swapped in to fix the system-ui rendering bug in the previous favicon. + +import satori from 'satori'; +import { Resvg } from '@resvg/resvg-js'; +import { readFileSync, writeFileSync } from 'node:fs'; +import { resolve } from 'node:path'; + +const FONT = readFileSync( + resolve( + process.cwd(), + 'node_modules/@fontsource/space-grotesk/files/space-grotesk-latin-700-normal.woff', + ), +); + +// Tile dimensions are normalised to 32 — satori scales linearly via the +// outer width/height. Inside the tile we keep the same proportions as the +// hand-authored 32x32 SVG: 8/32 corner radius, wordmark optically centred. +function tile(size) { + const fontSize = size * 0.5; // 16 at 32px — matches prior hand-tuned value + const radius = size * 0.25; // 8 at 32px + return { + type: 'div', + props: { + style: { + width: `${size}px`, + height: `${size}px`, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + background: '#0a0a10', + borderRadius: `${radius}px`, + fontFamily: 'Space Grotesk', + }, + children: [ + { + type: 'div', + props: { + style: { + fontSize: `${fontSize}px`, + fontWeight: 700, + color: '#e09422', + letterSpacing: '-0.04em', + lineHeight: 1, + // Optical baseline tweak — Space Grotesk hangs slightly low. + marginTop: `${-size * 0.04}px`, + }, + children: 'ilo', + }, + }, + ], + }, + }; +} + +async function renderPng(size) { + const svg = await satori(tile(size), { + width: size, + height: size, + fonts: [ + { name: 'Space Grotesk', data: FONT, weight: 700, style: 'normal' }, + ], + }); + const resvg = new Resvg(svg, { fitTo: { mode: 'width', value: size } }); + return resvg.render().asPng(); +} + +// Hand-authored SVG favicon — embedded @import so modern browsers render +// in Space Grotesk directly. The PNGs below cover everything else. +const SVG = ` + + + ilo + +`; + +const PUB = resolve(process.cwd(), 'public'); +writeFileSync(resolve(PUB, 'favicon.svg'), SVG); + +const sizes = [ + ['favicon-16x16.png', 16], + ['favicon-32x32.png', 32], + ['favicon-180x180.png', 180], + ['favicon-192x192.png', 192], + ['favicon-512x512.png', 512], + ['apple-touch-icon.png', 180], +]; + +for (const [name, size] of sizes) { + const png = await renderPng(size); + writeFileSync(resolve(PUB, name), png); + console.log(`wrote public/${name} (${size}x${size})`); +} + +console.log('wrote public/favicon.svg'); From aa0a2d6647d38132d66a22a74dc23b0d6f59361e Mon Sep 17 00:00:00 2001 From: Daniel Morris Date: Fri, 22 May 2026 23:52:55 +0100 Subject: [PATCH 2/4] styles: add lime positive-delta semantic tokens Pulls in --ilo-lime and --ilo-ok from the design system handoff. Reserved for positive-delta indicators only (fewer tokens, +x faster), not a second brand colour. Light theme uses a darker lime so contrast holds on warm-neutral page bg. --- src/styles/global.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/styles/global.css b/src/styles/global.css index b7817f0..f06b29e 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -18,6 +18,12 @@ code, pre, .sl-markdown-content code, .sl-markdown-content pre { --sl-color-accent-high: #f5deb3; --sl-font: 'Bricolage Grotesque', system-ui, -apple-system, sans-serif; --sl-font-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace; + + /* Positive-delta semantic. Reserved for "fewer tokens" / "+x faster" + indicators. Not a second brand colour. */ + --ilo-lime: #c8f04a; + --ilo-lime-low: rgba(200, 240, 74, 0.10); + --ilo-ok: var(--ilo-lime); } /* Dark theme: warm-tinted grays with readable contrast */ @@ -42,6 +48,8 @@ code, pre, .sl-markdown-content code, .sl-markdown-content pre { --sl-color-accent-low: #fdf1da; --sl-color-accent: #b87a14; --sl-color-accent-high: #3d2408; + --ilo-lime: #6fa61a; + --ilo-lime-low: rgba(111, 166, 26, 0.10); } /* Dim ilo comments */ From bad5901bb6bb198e7f53625f3bbcd3574671d51f Mon Sep 17 00:00:00 2001 From: Daniel Morris Date: Fri, 22 May 2026 23:53:02 +0100 Subject: [PATCH 3/4] home: lime stats for deltas, honest-benchmarks section Wires the new positive-delta semantic into the homepage. The -67% / -78% stats now read in lime; the type-verified check stays amber (it's a fact, not a delta). The comparison code-badge accent moves to lime for the same reason. Adds an "Honest benchmarks" section between the manifesto principles grid and the final CTA, lifted from reference/benchmarks.md. The framing comes from the design handoff: three engines, none of them fastest, that's not the metric. Counters the self-congratulatory benchmark tables newer entrants tend to lead with. --- src/pages/index.astro | 197 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 191 insertions(+), 6 deletions(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index 3d46fde..be31750 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -168,14 +168,14 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem
-
-
67%
+
+
−67%
fewer tokens
vs Python
-
-
78%
+
+
−78%
fewer characters
vs Python
@@ -311,6 +311,47 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem
+ +
+
+
+
Honest benchmarks
+

Three engines. None of them is the fastest. That's not the metric.

+

+ ilo runs on a bytecode VM, a Cranelift JIT, and a Cranelift AOT compiler. + They sit in the middle of the runtime field—faster than Python or Ruby, slower than V8 or Go. + The number that matters is the one above the keyboard, not the one below it. +

+
+ +
+
+ numeric · sum 1..1000 · median ns/call · 10000 iterations + Darwin arm64 +
+
+
Rustnative
329ns
+
LuaJITJIT
442ns
+
Node/V8JIT
451ns
+
KotlinJVM
528ns
+
Gonative
665ns
+
PyPy 3JIT
1.5µs
+
ilo JITCranelift
4.2µs
+
ilo AOTCranelift
5.3µs
+
PHPinterp
6.7µs
+
ilo VMbytecode
14.7µs
+
Python 3interp
29.5µs
+
+
+ 7 more benchmarks in the full table—string, record, mixed, foreach, recurse… + All benchmarks + + +
+
+
+
+

Make your agents more efficient.

@@ -371,6 +412,10 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem --accent: #f59e0b; --accent-bright: #fbbf24; --accent-dim: rgba(245, 158, 11, 0.08); + /* Positive-delta semantic — "fewer tokens" / "+x faster" only. + Not a second brand colour. See src/styles/global.css. */ + --positive: #c8f04a; + --positive-dim: rgba(200, 240, 74, 0.10); --font-display: 'Bricolage Grotesque', system-ui, sans-serif; --font-body: 'Bricolage Grotesque', system-ui, sans-serif; --font-mono: 'JetBrains Mono', ui-monospace, monospace; @@ -725,6 +770,10 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem line-height: 1; } + .stat--positive .stat-number { + color: var(--positive); + } + .stat-label { font-size: 1rem; font-weight: 500; @@ -836,8 +885,8 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem } .code-badge--accent { - color: var(--accent); - background: var(--accent-dim); + color: var(--positive); + background: var(--positive-dim); } .code-body { @@ -1460,6 +1509,142 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem color: var(--accent); } + /* ===== HONEST BENCHMARKS ===== */ + .benchmarks { + padding: 6rem 0; + border-top: 1px solid var(--border); + } + + .bench-head { + max-width: 760px; + margin: 0 auto 3rem; + text-align: center; + } + + .bench-kicker { + font-family: var(--font-mono); + font-size: 0.7rem; + font-weight: 500; + color: var(--accent); + text-transform: uppercase; + letter-spacing: 0.08em; + margin-bottom: 14px; + } + + .bench-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 12px; + overflow: hidden; + } + + .bench-meta { + display: flex; + justify-content: space-between; + align-items: baseline; + flex-wrap: wrap; + gap: 8px; + padding: 14px 24px; + border-bottom: 1px solid var(--border); + font-family: var(--font-mono); + font-size: 0.72rem; + color: var(--text-dim); + } + + .bench-rows { + padding: 18px 24px; + display: flex; + flex-direction: column; + gap: 10px; + } + + .bench-row { + display: grid; + grid-template-columns: 110px 78px 1fr 80px; + align-items: center; + gap: 14px; + } + + .bench-lang { + font-family: var(--font-display); + font-size: 0.92rem; + color: var(--text); + font-weight: 400; + } + + .bench-row--ilo .bench-lang { + color: var(--accent); + font-weight: 600; + } + + .bench-tag { + font-family: var(--font-mono); + font-size: 0.68rem; + color: var(--text-dim); + } + + .bench-bar { + height: 6px; + background: rgba(255, 255, 255, 0.04); + border-radius: 3px; + overflow: hidden; + } + + .bench-fill { + height: 100%; + background: var(--text-dim); + border-radius: 3px; + } + + .bench-fill--ilo { + background: var(--accent); + } + + .bench-ns { + font-family: var(--font-mono); + font-size: 0.82rem; + color: var(--text-muted); + text-align: right; + } + + .bench-row--ilo .bench-ns { + color: var(--accent); + } + + .bench-foot { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 12px; + padding: 14px 24px; + border-top: 1px solid var(--border); + font-size: 0.85rem; + color: var(--text-muted); + } + + .bench-link { + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--accent); + font-weight: 500; + transition: color 0.2s; + } + + .bench-link:hover { + color: var(--accent-bright); + } + + @media (max-width: 640px) { + .bench-row { + grid-template-columns: 90px 1fr 70px; + } + .bench-tag { + display: none; + } + } + /* ===== FINAL CTA ===== */ .final-cta { padding: 6rem 0; From e6feb6a8ec797b55cc6783fe35dd19b25d6e42a4 Mon Sep 17 00:00:00 2001 From: Daniel Morris Date: Sat, 23 May 2026 00:04:02 +0100 Subject: [PATCH 4/4] home: rebuild hero to match design handoff, drop standalone stats Hero now uses the two-column layout from the design system handoff: kicker, headline with amber-tinted last word, subhead, single-line install command with copy, Get Started + Read the manifesto CTAs, and a side comparison of Python vs ilo with the 0.33x receipt baked in. Reframes the lead around first-of-kind positioning: ilo is the first language built from the ground up for AI agents to read and write, not just a token-efficient syntax. The subhead reaches past prefix notation into the agent-native surface area: --json on every CLI, FixSafety on every diagnostic, the six manifesto principles every feature is measured against. The standalone -67% / -78% / verified stats band goes away (the 0.33x receipt is now in the hero), and the obsolete install tab JS is replaced by a single copy-to-clipboard for the curl line. The six principles section picks up the bundle's kicker + headline + copy. Mobile collapses the hero to a single column with the comparison underneath, so the proof point still sits within thumb reach. --- src/pages/index.astro | 424 +++++++++++++++++++++++++++++++++--------- 1 file changed, 332 insertions(+), 92 deletions(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index be31750..5bded9f 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -42,38 +42,71 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem
-
-
-
programming language for AI agents
-

- Designed for machines.
- 0.33× the tokens. 0.22× the characters. Type-verified before execution. -

-
-
- - - -
-
- $ - curl -fsSL https://ilo-lang.ai/install.sh | sh - - -
+ +
-
- - Get Started - - - - View on GitHub - + +
+
+
+ Python · 30 tokens + 93 chars +
+
def tot(p: float, q: float, r: float) -> float:
+    s = p * q
+    t = s * r
+    return s + t
+
+
+
+ ilo · 10 tokens + 38 chars +
+
-- subtotal + tax
+tot p:n q:n r:n>n
+  s=*p q
+  t=*s r
+  +s t
+
+
+ 0.33× + the tokens · 0.22× the characters · same semantics +
@@ -165,29 +198,6 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem
- -
-
-
-
−67%
-
fewer tokens
-
vs Python
-
-
-
-
−78%
-
fewer characters
-
vs Python
-
-
-
-
-
type-verified
-
before execution
-
-
-
-
@@ -270,38 +280,45 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem
-

What ilo Optimizes For

-

Six principles, all measured against one metric: total tokens from intent to working code.

+
+
The Six Principles
+

Every design decision is evaluated against one number.

+

+ If a feature reduces total tokens from intent to working code, it's in. + If it increases that number, it's out. No exceptions for elegance, + readability, or convention. +

+
01

Token-Conservative

-

The north star. Every choice evaluated against total token cost across the full loop—not just short syntax, but retries, errors, and context loading.

+

Every choice evaluated against total token cost — generation, errors, retries, context loading. Prefix notation. Single-char names. Guards instead of nested if/else.

02

Constrained

-

Small vocabulary. Closed world. Few ways to do things. Fewer valid next-tokens means fewer wrong choices means fewer retries.

+

Small vocabulary, closed world. Every callable function is known ahead of time. The agent cannot hallucinate an API. Fewer valid next-tokens means fewer retries.

03

Self-Contained

-

Each unit carries its own context: deps, types, rules. The agent never needs to hunt for definitions elsewhere.

+

Each unit carries its own context: deps, types, rules. The less context required per step, the more of the window is available for the actual task.

04

Language-Agnostic

-

Minimise dependency on English or any natural language. Sigils and short names over prose keywords.

+

Minimise dependency on English. Single-char sigils outperform keywords. Agents learn the full vocabulary from spec + examples with 10/10 accuracy.

05

Graph-Reducible

-

When analysing code, load only the relevant subgraph. As programs grow, the savings compound.

+

The dependency graph is explicit and queryable. ilo graph extracts call graphs, types, callers as JSON. Modify one function, load 6–10% of the code.

06
-

Structured Compiler-to-Agent Surface

-

Every path from the compiler to an agent is machine-readable by default. JSON out, zero screen-scraping.

+

Structured Surface

+

Every CLI subcommand has --json. Every diagnostic carries an error code, source span, and FixSafety. Zero screen-scraping, zero retry cycles from format ambiguity.

@@ -741,6 +758,225 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem color: var(--accent); } + /* ===== HERO (two-column) ===== */ + .hero-grid-2col { + display: grid; + grid-template-columns: 1.05fr 1fr; + gap: 56px; + align-items: center; + position: relative; + z-index: 1; + } + + .hero-left { + display: flex; + flex-direction: column; + gap: 20px; + text-align: left; + } + + .hero-kicker { + font-family: var(--font-mono); + font-size: 0.72rem; + font-weight: 500; + color: var(--accent); + text-transform: uppercase; + letter-spacing: 0.1em; + } + + .hero-headline { + font-family: var(--font-display); + font-size: clamp(2.2rem, 4.6vw, 3.6rem); + font-weight: 700; + letter-spacing: -0.035em; + line-height: 1.05; + color: var(--text); + } + + .hero-headline-accent { + color: var(--accent); + } + + .hero-sub { + font-size: 1.05rem; + line-height: 1.6; + color: var(--text-muted); + max-width: 560px; + } + + .hero-sub-strong { + font-style: normal; + color: var(--text); + font-weight: 500; + } + + .hero-install { + display: flex; + align-items: stretch; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 8px; + max-width: 540px; + box-shadow: + 0 0 0 1px rgba(224, 148, 34, 0.08), + 0 8px 32px rgba(224, 148, 34, 0.06); + overflow: hidden; + font-family: var(--font-mono); + font-size: 0.88rem; + margin-top: 6px; + } + + .hero-install-prompt { + padding: 14px 0 14px 18px; + color: var(--text-dim); + user-select: none; + } + + .hero-install-cmd { + flex: 1; + padding: 14px 14px; + color: var(--text); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .hero-install-copy { + display: flex; + align-items: center; + gap: 6px; + background: transparent; + border: none; + border-left: 1px solid var(--border); + color: var(--accent); + padding: 0 18px; + font-family: var(--font-body); + font-size: 0.82rem; + font-weight: 500; + cursor: pointer; + transition: color 0.15s; + } + + .hero-install-copy:hover { + color: var(--accent-bright); + } + + .hero-install-copy.is-copied { + color: var(--positive); + } + + .hero-license { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 0.85rem; + color: var(--text-dim); + transition: color 0.15s; + } + + .hero-license:hover { + color: var(--text-muted); + } + + .hero-right { + display: flex; + flex-direction: column; + gap: 14px; + } + + .hero-frame { + background: var(--bg-raised); + border: 1px solid var(--border); + border-radius: 10px; + overflow: hidden; + } + + .hero-frame--py { + opacity: 0.82; + } + + .hero-frame--ilo { + border-color: rgba(224, 148, 34, 0.32); + box-shadow: 0 0 32px rgba(224, 148, 34, 0.05); + } + + .hero-frame-head { + display: flex; + justify-content: space-between; + padding: 10px 16px; + font-family: var(--font-mono); + font-size: 0.72rem; + color: var(--text-dim); + border-bottom: 1px solid var(--border); + } + + .hero-frame-head--accent { + color: var(--accent); + } + + .hero-frame-body { + padding: 16px 18px; + font-family: var(--font-mono); + font-size: 0.82rem; + line-height: 1.55; + color: var(--text); + overflow-x: auto; + } + + .hero-frame-body code { + font-family: inherit; + white-space: pre; + } + + .hero-ratio { + display: flex; + align-items: baseline; + gap: 14px; + padding-left: 4px; + } + + .hero-ratio-num { + font-family: var(--font-display); + font-weight: 700; + font-size: 2rem; + color: var(--accent); + letter-spacing: -0.02em; + line-height: 1; + } + + .hero-ratio-cap { + color: var(--text-muted); + font-size: 0.85rem; + } + + /* Buttons: extra ghost variant for "Read the manifesto" */ + .btn-ghost { + background: transparent; + color: var(--text); + border: 1px solid var(--border); + padding: 12px 18px; + border-radius: 8px; + font-family: var(--font-body); + font-weight: 500; + font-size: 0.9rem; + transition: border-color 0.15s, color 0.15s; + } + + .btn-ghost:hover { + border-color: rgba(255, 255, 255, 0.18); + color: var(--text); + } + + @media (max-width: 900px) { + .hero-grid-2col { + grid-template-columns: 1fr; + gap: 36px; + } + .hero-right { + order: 2; + } + } + /* ===== STATS ===== */ .stats { padding: 5rem 0; @@ -1380,6 +1616,32 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem /* ===== SIX PRINCIPLES ===== */ .manifesto-section { padding: 6rem 0; + border-top: 1px solid var(--border); + } + + .manifesto-head { + max-width: 760px; + margin: 0 auto 3rem; + text-align: center; + } + + .manifesto-kicker { + font-family: var(--font-mono); + font-size: 0.7rem; + font-weight: 500; + color: var(--accent); + text-transform: uppercase; + letter-spacing: 0.08em; + margin-bottom: 14px; + } + + .manifesto-card code { + font-family: var(--font-mono); + font-size: 0.82em; + background: rgba(255, 255, 255, 0.06); + padding: 0.05em 0.35em; + border-radius: 4px; + color: var(--text); } .manifesto-grid { @@ -1857,47 +2119,26 @@ import { SITE_URL, softwareApplicationSchema, websiteSchema } from '../lib/schem