diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index dc2f723..aed7f2a 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -142,8 +142,7 @@ export default async function BlogPost({

{post.title}

@@ -189,10 +188,7 @@ export default async function BlogPost({ {" "} earlier - + {older.title} @@ -213,10 +209,7 @@ export default async function BlogPost({ → - + {newer.title} diff --git a/app/blog/page.tsx b/app/blog/page.tsx index 87e6c97..cb46cc4 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -61,8 +61,7 @@ export default function BlogIndex() {

field notes @@ -73,10 +72,7 @@ export default function BlogIndex() { dimmed lead sits inside a .rise wrapper rather than carrying the class itself. */}
-

+

long-form posts on the deCDN protocol — what it is, why now, and how the pieces fit together. published when something's worth saying. @@ -87,12 +83,7 @@ export default function BlogIndex() { {posts.length === 0 ? ( <> -

- nothing yet. -

+

nothing yet.

) : (
diff --git a/app/globals.css b/app/globals.css index 204d98e..2065e5b 100644 --- a/app/globals.css +++ b/app/globals.css @@ -34,17 +34,20 @@ ); /* floor coupled to nav height — see --nav-h note above */ --frame-min-h-cap: 54rem; - /* Type scale: micro and CTA are fixed; body and headlines scale with viewport. */ - --fs-micro: 0.6875rem; - --fs-cta: 0.8125rem; - --fs-body: clamp(0.9375rem, 0.55vw + 0.78rem, 1.0625rem); - --fs-lead: clamp(1rem, 0.6vw + 0.82rem, 1.125rem); - --fs-h3: clamp(1.375rem, 4vw, 3.5rem); - --fs-h2: clamp(1.875rem, 5.8vw, 5.25rem); - --fs-method-row: clamp(2rem, 6.5vw, 6rem); - --fs-h1: clamp(2.25rem, 7vw, 6.5rem); - --fs-display: clamp(3.5rem, 14vw, 12.5rem); - --fs-price: clamp(1.125rem, 5vw, 4rem); + /* Type scale: micro and CTA are fixed; body and headlines scale with viewport. + Named under Tailwind v4's --text-* namespace so `text-body`, `text-h1`, … + utilities auto-generate. Each key is bare (no --text-*--line-height sibling), + so the utilities set font-size only — every call site brings its own leading-*. */ + --text-micro: 0.6875rem; + --text-cta: 0.8125rem; + --text-body: clamp(0.9375rem, 0.55vw + 0.78rem, 1.0625rem); + --text-lead: clamp(1rem, 0.6vw + 0.82rem, 1.125rem); + --text-h3: clamp(1.375rem, 4vw, 3.5rem); + --text-h2: clamp(1.875rem, 5.8vw, 5.25rem); + --text-method-row: clamp(2rem, 6.5vw, 6rem); + --text-h1: clamp(2.25rem, 7vw, 6.5rem); + --text-display: clamp(3.5rem, 14vw, 12.5rem); + --text-price: clamp(1.125rem, 5vw, 4rem); } html { @@ -846,11 +849,11 @@ a.underline-brutal:hover .arrow { /* --- prose: MDX body styling ------------------------------------------ */ /* Long-form post body. Wrapped in . Tokens drawn from the shared - scale (--fs-body, --fs-lead, --fs-h3) so headings track the same + scale (--text-body, --text-lead, --text-h3) so headings track the same responsive curve as everywhere else on the site. We deliberately do not pull in @tailwindcss/typography: Tailwind v4 with @theme inline in globals.css makes the plugin awkward to wire, - and the plugin's defaults override our shared --fs-* scale, which is + and the plugin's defaults override our shared --text-* scale, which is what we wanted to keep. The block is paper-tone only by current usage (every wrapping it is tone="paper"); if it's ever reused on a dark surface, swap var(--ink) → currentColor here and @@ -871,7 +874,7 @@ a.underline-brutal:hover .arrow { "ss01" on, "zero" on; font-variant-numeric: tabular-nums; - font-size: var(--fs-h3); + font-size: var(--text-h3); font-weight: 600; letter-spacing: -0.03em; line-height: 1.05; @@ -886,7 +889,7 @@ a.underline-brutal:hover .arrow { } .prose h3 { - font-size: var(--fs-lead); + font-size: var(--text-lead); font-weight: 600; letter-spacing: -0.01em; line-height: 1.2; @@ -894,7 +897,7 @@ a.underline-brutal:hover .arrow { .prose p, .prose li { - font-size: var(--fs-body); + font-size: var(--text-body); line-height: 1.7; } @@ -972,7 +975,7 @@ a.underline-brutal:hover .arrow { .prose table { width: 100%; border-collapse: collapse; - font-size: var(--fs-body); + font-size: var(--text-body); } .prose th, diff --git a/components/site/Chrome.tsx b/components/site/Chrome.tsx index 6e8c17d..5f48837 100644 --- a/components/site/Chrome.tsx +++ b/components/site/Chrome.tsx @@ -140,15 +140,11 @@ export function Chrome() { data-scrolled={scrolled ? "true" : undefined} data-tone={onDark ? "ink" : "paper"} data-mobile-open={mobileOpen ? "true" : undefined} - className={`chrome-nav fixed inset-x-0 top-0 z-50 py-5 ${ + className={`chrome-nav fixed inset-x-0 top-0 z-50 px-[var(--frame-gutter)] py-5 ${ onDark ? "text-paper" : "text-ink" }`} - style={{ paddingInline: "var(--frame-gutter)" }} > -
+
deCDN{" "}is a peer-to-peer delivery layer for large files — software releases, datasets, media libraries, ai models, anything meant to be pulled a million times and that shouldn't depend on one bucket. the code is open. the network is open. the price is posted.

@@ -53,8 +50,7 @@ export function Close() { className="flex flex-col flex-wrap gap-x-10 gap-y-4 @md:flex-row @md:items-baseline" > read the docs @@ -75,8 +70,7 @@ export function Close() { source on github diff --git a/components/site/Comparison.tsx b/components/site/Comparison.tsx index 0dc2b61..f504ca4 100644 --- a/components/site/Comparison.tsx +++ b/components/site/Comparison.tsx @@ -15,8 +15,7 @@ export function Comparison() {

information scaled. supply didn't. @@ -24,11 +23,8 @@ export function Comparison() {

the pattern repeats whenever something big ships: mirrors fork, cdns rate-limit, small teams burn tens of thousands hosting bytes they @@ -62,13 +58,7 @@ export function Comparison() {

price
-
+
$0.085–$0.17 @@ -82,13 +72,7 @@ export function Comparison() {
-
+
$0.01 /GB
diff --git a/components/site/Faq.tsx b/components/site/Faq.tsx index d603909..d8abb4b 100644 --- a/components/site/Faq.tsx +++ b/components/site/Faq.tsx @@ -12,8 +12,7 @@ export function Faq() {

frequently asked.

diff --git a/components/site/Footer.tsx b/components/site/Footer.tsx index 16c48f9..7c3db33 100644 --- a/components/site/Footer.tsx +++ b/components/site/Footer.tsx @@ -2,19 +2,10 @@ import { links } from "@/lib/links"; export function Footer() { return ( -