From fa94acd81ee7c9f0c92ef726837b05a4f2729a01 Mon Sep 17 00:00:00 2001 From: radiolabme Date: Wed, 10 Jun 2026 00:39:25 -0700 Subject: [PATCH 01/19] perf(fonts,theme): single font request + flash-free theme init - Remove the three render-blocking remote @import rules from _fonts.css; fonts now load via the single preconnected in RootLayout (was fetching Google Fonts CSS 4x: 1 link + 3 @imports). - Set data-theme synchronously in (is:inline) before first paint to eliminate the theme flash for visitors whose stored theme differs from their OS preference. Co-Authored-By: Claude Opus 4.8 (1M context) --- .design-context.md | 60 +++++++++++++++++++++++++++ src/layouts/RootLayout.astro | 19 +++++++++ src/styles/01-typography/_fonts.css | 63 +++++++++++++---------------- 3 files changed, 106 insertions(+), 36 deletions(-) create mode 100644 .design-context.md diff --git a/.design-context.md b/.design-context.md new file mode 100644 index 0000000..d62893b --- /dev/null +++ b/.design-context.md @@ -0,0 +1,60 @@ +# Design Context — MicroHAMS + +> Written by the `design-context` skill. Priming for all `design-*` work. Update the +> Design Context section in place rather than duplicating it. + +## Design Context + +### Users + +MicroHAMS is an amateur radio club in the Puget Sound area. The site serves **two audiences +equally**: + +- **Existing members & licensed hams** — want event details (monthly meetings, Field Day, swap + meets), technical articles, and reference docs. They value information density, accuracy, and + utility. +- **Prospective / newly licensed hams** — need an inviting front door: who the club is, when it + meets, how to show up. They value warmth, clear on-ramps, and low jargon. + +Context of use: desktop and mobile, often checking "when/where is the next meeting" or reading a +long technical article. Both light and dark environments (shacks are dark; phones are everywhere). + +### Brand Personality + +Three words: **precise, credible, welcoming**. The voice is knowledgeable but not gatekeeping — +technical authority delivered plainly. Emotionally the interface should evoke **confidence and +calm competence** (this club knows its craft) without feeling cold or corporate. A subtle nod to +the hobby's signal/RF heritage is welcome (see the header's radio-wave motif). + +### Aesthetic Direction + +Deliberately **Swiss / editorial / typographic** — the codebase explicitly cites Vignelli, Tufte, +and Bringhurst. Characteristics: + +- Achromatic base (black/white/grays in OKLCH) with restrained accent use. +- **Two-color accent system (intentional):** **blue** (`--color-blue`) for brand identity and + primary actions (logo, primary buttons, header wave motif); **red** (`--color-accent`) for + inline links, focus rings, active nav, blockquote rule, tag hover. The rule of thumb: _blue = + "this is us / do this", red = "go here / emphasis."_ Because it's a dual-accent system, the + boundary between the two must be **explicit and consistently enforced**, or it reads as drift. +- Golden-ratio type scale, 24px baseline grid, generous measure, Every-Layout primitives. +- Variable fonts: **Geist** (sans, the actual primary UI + reading face), **Geist Mono** (code), + **Noto Serif JP** (serif accent — currently only blockquotes). +- Full light + dark mode, WCAG AA targeted throughout the tokens. + +**Anti-references:** generic AI-template aesthetics — purple/indigo gradients, glassmorphism, +gradient text, hero stat-counters, emoji-as-icons, drop-shadow soup. The site should look +_designed and edited_, not _generated_. + +### Design Principles + +1. **Typography is the interface.** Hierarchy comes from the type scale and spacing, not + decoration. Protect the measure and the baseline rhythm. +2. **Systematic, not rigid.** Every value derives from tokens (space, type, color, radius). No + magic numbers in components; reach for a token or a primitive first. +3. **Accent with discipline.** Color is rare and meaningful. Keep the blue/red roles separated and + documented; never let an accent become decoration. +4. **AA is the floor, not the goal.** Contrast, focus visibility, semantics, and 44px touch + targets are non-negotiable; aim past AA where cheap. +5. **Fast and quiet.** A static club site should load instantly and never flash. Performance and a + stable first paint are part of the design, not an afterthought. diff --git a/src/layouts/RootLayout.astro b/src/layouts/RootLayout.astro index b67a33b..0a0d97b 100644 --- a/src/layouts/RootLayout.astro +++ b/src/layouts/RootLayout.astro @@ -32,6 +32,25 @@ const { title, description = 'MicroHAMS - Amateur Radio Community', author } = A {author && } + { + /* Set theme synchronously before first paint to avoid a flash of the wrong theme. + Runs blocking in (is:inline keeps it out of the deferred module bundle). */ + } + + diff --git a/src/styles/01-typography/_fonts.css b/src/styles/01-typography/_fonts.css index d799b88..6077acc 100644 --- a/src/styles/01-typography/_fonts.css +++ b/src/styles/01-typography/_fonts.css @@ -11,17 +11,16 @@ * Loading Strategy: FOUT over FOIT for perceived performance */ -/* Noto Serif JP - Primary Serif Font (Beautiful Japanese Support) */ -/* Weights: 200 (ExtraLight), 300 (Light), 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold), 900 (Black) */ -@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@200;300;400;500;600;700;900&display=swap'); - -/* Geist - Swiss-inspired Sans Serif */ -/* Variable font with full weight axis 100-900 */ -@import url('https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap'); - -/* Geist Mono - Technical Typography */ -/* Variable font with full weight axis 100-900 */ -@import url('https://fonts.googleapis.com/css2?family=Geist+Mono:wght@100..900&display=swap'); +/* + * Fonts are loaded once via a single, preconnected in RootLayout.astro + * (Noto Serif JP + Geist + Geist Mono combined into one request). + * + * Do NOT add `@import url('https://fonts.googleapis.com/...')` here: a remote + * CSS @import is render-blocking, can't be preloaded, and duplicates the + * — the browser would fetch the same stylesheets multiple times. + * Keep all font-family fallbacks and feature-settings below; only the loading + * lives in the document head. + */ /** * Font Face Declarations @@ -32,17 +31,18 @@ /* Primary Serif - Noto Serif JP */ /* Exceptional readability, classical proportions, OpenType features */ --font-serif: 'Noto Serif JP', 'Times New Roman', 'Georgia', serif; - + /* Sans Serif - Geist (Variable) */ /* Swiss precision, modern clarity, variable weight axis */ - --font-sans: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', - 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol'; - + --font-sans: + 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + /* Monospace - Geist Mono (Variable) */ /* Code, data tables, technical content */ - --font-mono: 'Geist Mono', 'SF Mono', Monaco, 'Cascadia Code', - 'Source Code Pro', Menlo, Consolas, 'Courier New', monospace; + --font-mono: + 'Geist Mono', 'SF Mono', Monaco, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, + 'Courier New', monospace; } /** @@ -52,29 +52,20 @@ :root { /* Common OpenType features for body text */ - --font-feature-settings-body: - "kern" 1, /* Kerning */ - "liga" 1, /* Standard ligatures */ - "clig" 1, /* Contextual ligatures */ - "calt" 1; /* Contextual alternates */ - + --font-feature-settings-body: + 'kern' 1, /* Kerning */ 'liga' 1, /* Standard ligatures */ 'clig' 1, + /* Contextual ligatures */ 'calt' 1; /* Contextual alternates */ + /* Additional features for headings */ --font-feature-settings-heading: - "kern" 1, - "liga" 1, - "dlig" 1, /* Discretionary ligatures */ - "swsh" 1; /* Swash characters */ - + 'kern' 1, 'liga' 1, 'dlig' 1, /* Discretionary ligatures */ 'swsh' 1; /* Swash characters */ + /* Numeric features for tables and data */ --font-feature-settings-numeric: - "kern" 1, - "tnum" 1, /* Tabular numerals */ - "lnum" 1; /* Lining numerals */ - + 'kern' 1, 'tnum' 1, /* Tabular numerals */ 'lnum' 1; /* Lining numerals */ + /* Small caps for special emphasis */ - --font-feature-settings-smallcaps: - "kern" 1, - "smcp" 1; /* Small capitals */ + --font-feature-settings-smallcaps: 'kern' 1, 'smcp' 1; /* Small capitals */ } /** From b2b11a6edcd153ef84e391a2ceb1eb83d997ec61 Mon Sep 17 00:00:00 2001 From: radiolabme Date: Wed, 10 Jun 2026 01:19:20 -0700 Subject: [PATCH 02/19] type(fonts): self-host Atkinson Hyperlegible Next + JetBrains Mono MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the Google-Fonts-loaded Geist/Geist Mono/Noto Serif JP with a self-hosted, accessibility-forward pairing (Fontsource → bundled woff2, no third-party request, no IP logging): - Body/UI: Atkinson Hyperlegible Next (Braille Institute low-vision face, incl. italic — now used for blockquotes instead of a serif). - Headings + code: JetBrains Mono (h1-h5; h6 stays the body face as a small UI label). Drop the serif face entirely. - Remove the Google Fonts link/preconnects; import via Fontsource. - Clean --font-* tokens: single source of truth in _fonts.css (removed the duplicate in _tokens.css), fallbacks use only ui-sans-serif/ui-monospace/ generics — no banned fonts (Helvetica Neue/Arial/Segoe UI removed). - Delete the 'Geist Variable' @font-face doc-rot from CSS_GUIDE.md. Co-Authored-By: Claude Opus 4.8 (1M context) --- .design-context.md | 23 ++- package-lock.json | 20 +++ package.json | 2 + src/layouts/RootLayout.astro | 16 +- src/styles/00-settings/_tokens.css | 228 ++++++++++++------------- src/styles/01-typography/_fonts.css | 53 +++--- src/styles/03-elements/_typography.css | 22 +-- src/styles/CSS_GUIDE.md | 105 ++++++------ 8 files changed, 247 insertions(+), 222 deletions(-) diff --git a/.design-context.md b/.design-context.md index d62893b..580329e 100644 --- a/.design-context.md +++ b/.design-context.md @@ -32,19 +32,24 @@ Deliberately **Swiss / editorial / typographic** — the codebase explicitly cit and Bringhurst. Characteristics: - Achromatic base (black/white/grays in OKLCH) with restrained accent use. -- **Two-color accent system (intentional):** **blue** (`--color-blue`) for brand identity and - primary actions (logo, primary buttons, header wave motif); **red** (`--color-accent`) for - inline links, focus rings, active nav, blockquote rule, tag hover. The rule of thumb: _blue = - "this is us / do this", red = "go here / emphasis."_ Because it's a dual-accent system, the - boundary between the two must be **explicit and consistently enforced**, or it reads as drift. -- Golden-ratio type scale, 24px baseline grid, generous measure, Every-Layout primitives. -- Variable fonts: **Geist** (sans, the actual primary UI + reading face), **Geist Mono** (code), - **Noto Serif JP** (serif accent — currently only blockquotes). +- **Single accent: blue** (`--color-accent`, hue ~240). Red has been **retired** as an accent — + every interactive/emphasis role (links, focus rings, active nav, blockquote rule, tag hover, + badges, primary buttons, the logo, the header wave motif) uses the one blue. Reserve any future + red strictly for genuine error/danger semantics, never decoration. +- **Web-tuned modular type scale** (≈1.2 text / 1.25 display, 16px base, capped ~48px) on a 24px + baseline grid — the old print-derived φ=1.618 ramp was too poster-aggressive for screens. Generous + measure (≈62ch body), Every-Layout primitives. +- **Self-hosted fonts via Fontsource** (no third-party request): **Atkinson Hyperlegible Next** + (body/UI — Braille Institute low-vision face, incl. italic for blockquotes) and **JetBrains Mono** + (headings + code). No serif face. Fallback stacks use only generic keywords (`ui-sans-serif`, + `ui-monospace`) — never named/system or banned fonts. - Full light + dark mode, WCAG AA targeted throughout the tokens. **Anti-references:** generic AI-template aesthetics — purple/indigo gradients, glassmorphism, gradient text, hero stat-counters, emoji-as-icons, drop-shadow soup. The site should look -_designed and edited_, not _generated_. +_designed and edited_, not _generated_. Also banned as fonts (incl. fallback stacks): Inter, +Roboto, Arial, Open Sans, Helvetica Neue, Segoe UI, system-ui, Space Grotesk — and near-name +"kissing-cousins" of these. Nerd Fonts evaluated and rejected (no relevant glyphs, heavy payload). ### Design Principles diff --git a/package-lock.json b/package-lock.json index 90ef888..00197b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,8 @@ "name": "microhams", "version": "0.0.1", "dependencies": { + "@fontsource-variable/atkinson-hyperlegible-next": "^5.2.6", + "@fontsource-variable/jetbrains-mono": "^5.2.8", "@js-temporal/polyfill": "^0.5.1", "@types/leaflet": "^1.9.21", "astro": "^6.3.1", @@ -1187,6 +1189,24 @@ } } }, + "node_modules/@fontsource-variable/atkinson-hyperlegible-next": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource-variable/atkinson-hyperlegible-next/-/atkinson-hyperlegible-next-5.2.6.tgz", + "integrity": "sha512-D0Z8peFkRGYACvmWp8Sl8YPGYLBEJbzqapugtsMEYSUUtpQDiZVDHjk9s7bqB4hSCRYCrKuW6V1V+mnHybVnPw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource-variable/jetbrains-mono": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.2.8.tgz", + "integrity": "sha512-WBA9elru6Jdp5df2mES55wuOO0WIrn3kpXnI4+W2ek5u3ZgLS9XS4gmIlcQhiZOWEKl95meYdvK7xI+ETLCq/Q==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", diff --git a/package.json b/package.json index 6e5d10f..e89def7 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ "prepare": "husky" }, "dependencies": { + "@fontsource-variable/atkinson-hyperlegible-next": "^5.2.6", + "@fontsource-variable/jetbrains-mono": "^5.2.8", "@js-temporal/polyfill": "^0.5.1", "@types/leaflet": "^1.9.21", "astro": "^6.3.1", diff --git a/src/layouts/RootLayout.astro b/src/layouts/RootLayout.astro index 0a0d97b..5d7c54c 100644 --- a/src/layouts/RootLayout.astro +++ b/src/layouts/RootLayout.astro @@ -12,6 +12,14 @@ */ import { ClientRouter } from 'astro:transitions'; + +// Self-hosted fonts (Fontsource → bundled woff2, no third-party request). +// Atkinson Hyperlegible Next: body/UI (Braille Institute low-vision face, incl. italic). +// JetBrains Mono: headings + code. +import '@fontsource-variable/atkinson-hyperlegible-next'; +import '@fontsource-variable/atkinson-hyperlegible-next/wght-italic.css'; +import '@fontsource-variable/jetbrains-mono'; + import '../styles/main.css'; interface Props { @@ -53,13 +61,7 @@ const { title, description = 'MicroHAMS - Amateur Radio Community', author } = A - - - - + {/* Fonts are self-hosted via Fontsource (imported above) — no third-party request. */} diff --git a/src/styles/00-settings/_tokens.css b/src/styles/00-settings/_tokens.css index 78b6258..d81872d 100644 --- a/src/styles/00-settings/_tokens.css +++ b/src/styles/00-settings/_tokens.css @@ -13,33 +13,29 @@ Base: 16px - Never go below this (WCAG minimum) Baseline Grid: 24px (1.5 × 16px) - Tufte's preference ======================================== */ - + /* Micro Typography - Captions, footnotes, marginalia */ - --text-2xs: 0.694rem; /* 11.1px - φ^-2 - Smallest readable */ - --text-xs: 0.833rem; /* 13.3px - φ^-1.5 - Footnotes */ - --text-sm: 0.875rem; /* 14px - Captions, labels */ - + --text-2xs: 0.694rem; /* 11.1px - φ^-2 - Smallest readable */ + --text-xs: 0.833rem; /* 13.3px - φ^-1.5 - Footnotes */ + --text-sm: 0.875rem; /* 14px - Captions, labels */ + /* Body Typography - Primary reading sizes */ - --text-base: 1rem; /* 16px - φ^0 - Sacred minimum (WCAG) */ - --text-md: 1.125rem; /* 18px - Enhanced body text */ - --text-lg: 1.25rem; /* 20px - Major Third - Large body */ - + --text-base: 1rem; /* 16px - φ^0 - Sacred minimum (WCAG) */ + --text-md: 1.125rem; /* 18px - Enhanced body text */ + --text-lg: 1.25rem; /* 20px - Major Third - Large body */ + /* Display Typography - Headings and emphasis */ - --text-xl: 1.333rem; /* 21.3px - Perfect Fourth - H4 */ - --text-2xl: 1.618rem; /* 25.9px - φ^1 - Golden! - H3 */ - --text-3xl: 2.027rem; /* 32.4px - φ^1.25 - H2 */ - --text-4xl: 2.618rem; /* 41.9px - φ^1.618 - H1 */ - --text-5xl: 3.236rem; /* 51.8px - φ^2 - Display */ - --text-6xl: 4.236rem; /* 67.8px - φ^2.5 - Hero */ - --text-7xl: 5.236rem; /* 83.8px - φ^3 - Massive */ - - /* Font Families - Geist Sans (primary) + Noto Serif JP (accent) + Geist Mono */ - --font-sans: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', - 'Helvetica Neue', Arial, sans-serif; - --font-serif: 'Noto Serif JP', 'Times New Roman', 'Georgia', serif; - --font-mono: 'Geist Mono', 'SF Mono', Monaco, 'Cascadia Code', - 'Source Code Pro', Menlo, Consolas, 'Courier New', monospace; - + --text-xl: 1.333rem; /* 21.3px - Perfect Fourth - H4 */ + --text-2xl: 1.618rem; /* 25.9px - φ^1 - Golden! - H3 */ + --text-3xl: 2.027rem; /* 32.4px - φ^1.25 - H2 */ + --text-4xl: 2.618rem; /* 41.9px - φ^1.618 - H1 */ + --text-5xl: 3.236rem; /* 51.8px - φ^2 - Display */ + --text-6xl: 4.236rem; /* 67.8px - φ^2.5 - Hero */ + --text-7xl: 5.236rem; /* 83.8px - φ^3 - Massive */ + + /* Font-family tokens (--font-sans / --font-mono) live in 01-typography/_fonts.css — + the single source of truth. Do not redefine them here. */ + /* Font Weights - Exploit variable font axis */ --font-weight-normal: 400; --font-weight-medium: 500; @@ -47,51 +43,51 @@ --font-weight-bold: 700; /* Line Height System - Based on Golden Ratio and Baseline Grid */ - --leading-none: 1; /* Display text only */ - --leading-tightest: 1.111; /* 1/φ - Super condensed */ - --leading-tight: 1.25; /* Major Third - Headlines */ - --leading-snug: 1.333; /* Perfect Fourth - Subheads */ - --leading-normal: 1.5; /* Baseline grid - Body (optimal) */ - --leading-relaxed: 1.618; /* Golden Ratio - Airy body */ - --leading-loose: 1.777; /* φ + 0.16 - Maximum readability */ + --leading-none: 1; /* Display text only */ + --leading-tightest: 1.111; /* 1/φ - Super condensed */ + --leading-tight: 1.25; /* Major Third - Headlines */ + --leading-snug: 1.333; /* Perfect Fourth - Subheads */ + --leading-normal: 1.5; /* Baseline grid - Body (optimal) */ + --leading-relaxed: 1.618; /* Golden Ratio - Airy body */ + --leading-loose: 1.777; /* φ + 0.16 - Maximum readability */ /* Measure (Line Length) - Optimal Reading (Bringhurst & Tufte) */ - --measure-compact: 45ch; /* Narrow columns, sidebars */ - --measure-optimal: 66ch; /* Primary body text */ - --measure-comfortable: 72ch; /* Comfortable sustained reading */ - --measure-wide: 80ch; /* Wide layouts, max recommended */ - --measure-full: 90ch; /* Technical content, tables */ - + --measure-compact: 45ch; /* Narrow columns, sidebars */ + --measure-optimal: 66ch; /* Primary body text */ + --measure-comfortable: 72ch; /* Comfortable sustained reading */ + --measure-wide: 80ch; /* Wide layouts, max recommended */ + --measure-full: 90ch; /* Technical content, tables */ + /* Tracking (Letter Spacing) - Optical Adjustment */ - --tracking-tightest: -0.05em; /* -50 - Display text, large sizes */ - --tracking-tight: -0.025em; /* -25 - Headlines */ - --tracking-normal: 0; /* 0 - Body text (never touch!) */ - --tracking-wide: 0.025em; /* +25 - All-caps, UI labels */ - --tracking-wider: 0.05em; /* +50 - Small text (<14px) */ - --tracking-widest: 0.1em; /* +100 - Extreme spacing */ + --tracking-tightest: -0.05em; /* -50 - Display text, large sizes */ + --tracking-tight: -0.025em; /* -25 - Headlines */ + --tracking-normal: 0; /* 0 - Body text (never touch!) */ + --tracking-wide: 0.025em; /* +25 - All-caps, UI labels */ + --tracking-wider: 0.05em; /* +50 - Small text (<14px) */ + --tracking-widest: 0.1em; /* +100 - Extreme spacing */ /* ======================================== SPATIAL SYSTEM Powers of 2 Grid - Everything derives from base unit ======================================== */ - - --space-unit: 4px; /* Grid quantum */ - + + --space-unit: 4px; /* Grid quantum */ + --space-0: 0; - --space-1: 0.25rem; /* 4px */ - --space-2: 0.5rem; /* 8px */ - --space-3: 0.75rem; /* 12px */ - --space-4: 1rem; /* 16px - Base rhythm */ - --space-5: 1.25rem; /* 20px */ - --space-6: 1.5rem; /* 24px */ - --space-8: 2rem; /* 32px */ - --space-10: 2.5rem; /* 40px */ - --space-12: 3rem; /* 48px */ - --space-16: 4rem; /* 64px */ - --space-20: 5rem; /* 80px */ - --space-24: 6rem; /* 96px */ - --space-32: 8rem; /* 128px */ - + --space-1: 0.25rem; /* 4px */ + --space-2: 0.5rem; /* 8px */ + --space-3: 0.75rem; /* 12px */ + --space-4: 1rem; /* 16px - Base rhythm */ + --space-5: 1.25rem; /* 20px */ + --space-6: 1.5rem; /* 24px */ + --space-8: 2rem; /* 32px */ + --space-10: 2.5rem; /* 40px */ + --space-12: 3rem; /* 48px */ + --space-16: 4rem; /* 64px */ + --space-20: 5rem; /* 80px */ + --space-24: 6rem; /* 96px */ + --space-32: 8rem; /* 128px */ + /* Semantic Spacing */ --gutter: var(--space-4); --section-gap: var(--space-16); @@ -103,52 +99,52 @@ OKLCH for perceptually uniform color WCAG AA Compliant: 4.5:1 text, 3:1 UI components ======================================== */ - + /* Achromatic Base (Primary Palette) */ --color-black: oklch(0% 0 0); --color-white: oklch(100% 0 0); --color-gray-50: oklch(98% 0 0); --color-gray-100: oklch(96% 0 0); - --color-gray-200: oklch(82% 0 0); /* Border light: 3.1:1 on 95% surface ✓ */ + --color-gray-200: oklch(82% 0 0); /* Border light: 3.1:1 on 95% surface ✓ */ --color-gray-300: oklch(83% 0 0); --color-gray-400: oklch(64% 0 0); - --color-gray-500: oklch(53% 0 0); /* Perfect middle gray */ + --color-gray-500: oklch(53% 0 0); /* Perfect middle gray */ --color-gray-600: oklch(42% 0 0); --color-gray-700: oklch(32% 0 0); - --color-gray-800: oklch(38% 0 0); /* Border dark: 3.2:1 on 12% surface ✓ */ + --color-gray-800: oklch(38% 0 0); /* Border dark: 3.2:1 on 12% surface ✓ */ --color-gray-900: oklch(15% 0 0); - + /* Accent - Use Sparingly for Maximum Impact */ /* Adjusted for WCAG AA: 4.5:1 on white, 4.5:1 on dark surfaces */ - --color-accent: oklch(45% 0.22 25); /* Darker for light mode: 7.8:1 on white */ - --color-accent-dark: oklch(38% 0.22 25); /* Hover state: 11.2:1 on white */ - --color-accent-light: oklch(55% 0.22 25); /* Subtle accents: 4.9:1 on white */ - + --color-accent: oklch(45% 0.22 25); /* Darker for light mode: 7.8:1 on white */ + --color-accent-dark: oklch(38% 0.22 25); /* Hover state: 11.2:1 on white */ + --color-accent-light: oklch(55% 0.22 25); /* Subtle accents: 4.9:1 on white */ + /* Button/Interactive Blue */ - --color-blue: oklch(45% 0.22 240); /* Blue accent: 7.8:1 on white */ - --color-blue-hover: oklch(38% 0.22 240); /* Darker blue for hover states: 11.2:1 on white */ - --color-blue-light: oklch(55% 0.22 240); /* Subtle blue accents: 4.9:1 on white */ - + --color-blue: oklch(45% 0.22 240); /* Blue accent: 7.8:1 on white */ + --color-blue-hover: oklch(38% 0.22 240); /* Darker blue for hover states: 11.2:1 on white */ + --color-blue-light: oklch(55% 0.22 240); /* Subtle blue accents: 4.9:1 on white */ + /* Semantic Colors (Derived from base) */ /* Light Mode: Softer contrast for comfortable reading (WCAG AA) */ - --color-text: oklch(22% 0 0); /* ~11:1 on white ✓ - modern, easy on eyes */ - --color-text-muted: oklch(40% 0 0); /* ~6:1 on white ✓ */ - --color-text-subtle: oklch(50% 0 0); /* ~4.5:1 on white ✓ (AA) */ - --color-border: var(--color-gray-200); /* 3.1:1 on 95% surface ✓ (UI) */ + --color-text: oklch(22% 0 0); /* ~11:1 on white ✓ - modern, easy on eyes */ + --color-text-muted: oklch(40% 0 0); /* ~6:1 on white ✓ */ + --color-text-subtle: oklch(50% 0 0); /* ~4.5:1 on white ✓ (AA) */ + --color-border: var(--color-gray-200); /* 3.1:1 on 95% surface ✓ (UI) */ --color-border-muted: var(--color-gray-100); - --color-surface: oklch(95% 0 0); /* Base: 95% */ - --color-surface-muted: oklch(92% 0 0); /* Recessed: 92% - clear 3% difference */ - --color-surface-raised: var(--color-white); /* Raised: 100% - strong 5% difference */ - + --color-surface: oklch(95% 0 0); /* Base: 95% */ + --color-surface-muted: oklch(92% 0 0); /* Recessed: 92% - clear 3% difference */ + --color-surface-raised: var(--color-white); /* Raised: 100% - strong 5% difference */ + /* Interactive States */ - --color-link: var(--color-accent); /* 7.8:1 on white ✓ */ + --color-link: var(--color-accent); /* 7.8:1 on white ✓ */ --color-link-hover: var(--color-accent-dark); /* 11.2:1 on white ✓ */ --color-focus: var(--color-accent); /* ======================================== LAYOUT TOKENS ======================================== */ - + /* Breakpoints - Mobile First Base styles (no query) = portrait phones (320-639px) Then progressively enhance for larger screens: @@ -162,27 +158,27 @@ so these values are documented here for consistency. */ /* Container Widths */ - --width-narrow: 36rem; /* 576px - ~60ch */ - --width-normal: 42rem; /* 672px - ~72ch */ - --width-wide: 48rem; /* 768px - ~80ch */ - --width-full: 80rem; /* 1280px - full width layouts */ - + --width-narrow: 36rem; /* 576px - ~60ch */ + --width-normal: 42rem; /* 672px - ~72ch */ + --width-wide: 48rem; /* 768px - ~80ch */ + --width-full: 80rem; /* 1280px - full width layouts */ + /* Border Radius */ - --radius-sm: 0.25rem; /* 4px */ - --radius-md: 0.5rem; /* 8px */ - --radius-lg: 1rem; /* 16px */ + --radius-sm: 0.25rem; /* 4px */ + --radius-md: 0.5rem; /* 8px */ + --radius-lg: 1rem; /* 16px */ --radius-full: 9999px; - + /* Shadows - Subtle, Swiss-inspired */ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.08), 0 2px 4px -2px rgb(0 0 0 / 0.06); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.08), 0 4px 6px -4px rgb(0 0 0 / 0.06); - + /* Transitions */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); - + /* Z-Index Scale */ --z-base: 0; --z-dropdown: 1000; @@ -200,36 +196,36 @@ ======================================== */ @media (prefers-color-scheme: dark) { - :root:not([data-theme="light"]) { + :root:not([data-theme='light']) { /* Dark Mode: Softer contrast for comfortable reading (WCAG AA) */ - --color-text: oklch(88% 0 0); /* ~12:1 on oklch(12%) ✓ - modern, easy on eyes */ - --color-text-muted: oklch(65% 0 0); /* ~6:1 on oklch(12%) ✓ */ - --color-text-subtle: oklch(55% 0 0); /* ~4.5:1 on oklch(12%) ✓ (AA) */ - --color-border: var(--color-gray-800); /* 3.2:1 on oklch(12%) ✓ (UI) */ + --color-text: oklch(88% 0 0); /* ~12:1 on oklch(12%) ✓ - modern, easy on eyes */ + --color-text-muted: oklch(65% 0 0); /* ~6:1 on oklch(12%) ✓ */ + --color-text-subtle: oklch(55% 0 0); /* ~4.5:1 on oklch(12%) ✓ (AA) */ + --color-border: var(--color-gray-800); /* 3.2:1 on oklch(12%) ✓ (UI) */ --color-border-muted: var(--color-gray-900); - --color-surface: oklch(12% 0 0); /* Base: 12% - deep dark */ - --color-surface-muted: oklch(8% 0 0); /* Recessed: 8% - darker, clear difference */ - --color-surface-raised: oklch(20% 0 0); /* Raised: 20% - strong 8% difference */ - + --color-surface: oklch(12% 0 0); /* Base: 12% - deep dark */ + --color-surface-muted: oklch(8% 0 0); /* Recessed: 8% - darker, clear difference */ + --color-surface-raised: oklch(20% 0 0); /* Raised: 20% - strong 8% difference */ + /* Adjusted accent for dark mode - lighter for contrast */ - --color-accent: oklch(70% 0.22 25); /* 8.5:1 on oklch(12%) ✓ */ - --color-accent-dark: oklch(80% 0.22 25); /* Hover: 12.1:1 on oklch(12%) ✓ */ + --color-accent: oklch(70% 0.22 25); /* 8.5:1 on oklch(12%) ✓ */ + --color-accent-dark: oklch(80% 0.22 25); /* Hover: 12.1:1 on oklch(12%) ✓ */ } } /* Manual dark mode override */ -:root[data-theme="dark"] { +:root[data-theme='dark'] { /* Dark Mode: Softer contrast for comfortable reading (WCAG AA) */ - --color-text: oklch(88% 0 0); /* ~12:1 on oklch(12%) ✓ - modern, easy on eyes */ - --color-text-muted: oklch(65% 0 0); /* ~6:1 on oklch(12%) ✓ */ - --color-text-subtle: oklch(55% 0 0); /* ~4.5:1 on oklch(12%) ✓ (AA) */ - --color-border: var(--color-gray-800); /* 3.2:1 on oklch(12%) ✓ (UI) */ + --color-text: oklch(88% 0 0); /* ~12:1 on oklch(12%) ✓ - modern, easy on eyes */ + --color-text-muted: oklch(65% 0 0); /* ~6:1 on oklch(12%) ✓ */ + --color-text-subtle: oklch(55% 0 0); /* ~4.5:1 on oklch(12%) ✓ (AA) */ + --color-border: var(--color-gray-800); /* 3.2:1 on oklch(12%) ✓ (UI) */ --color-border-muted: var(--color-gray-900); - --color-surface: oklch(12% 0 0); /* Base: 12% - deep dark */ - --color-surface-muted: oklch(8% 0 0); /* Recessed: 8% - darker, clear difference */ - --color-surface-raised: oklch(20% 0 0); /* Raised: 20% - strong 8% difference */ - + --color-surface: oklch(12% 0 0); /* Base: 12% - deep dark */ + --color-surface-muted: oklch(8% 0 0); /* Recessed: 8% - darker, clear difference */ + --color-surface-raised: oklch(20% 0 0); /* Raised: 20% - strong 8% difference */ + /* Adjusted accent for dark mode - lighter for contrast */ - --color-accent: oklch(70% 0.22 25); /* 8.5:1 on oklch(12%) ✓ */ - --color-accent-dark: oklch(80% 0.22 25); /* Hover: 12.1:1 on oklch(12%) ✓ */ + --color-accent: oklch(70% 0.22 25); /* 8.5:1 on oklch(12%) ✓ */ + --color-accent-dark: oklch(80% 0.22 25); /* Hover: 12.1:1 on oklch(12%) ✓ */ } diff --git a/src/styles/01-typography/_fonts.css b/src/styles/01-typography/_fonts.css index 6077acc..1c5e1a1 100644 --- a/src/styles/01-typography/_fonts.css +++ b/src/styles/01-typography/_fonts.css @@ -1,25 +1,18 @@ /** - * FONT LOADING - Typography System - * + * FONT TOKENS - Typography System + * * Typography is the foundation of all design. - * + * * System: - * - Noto Serif JP: Primary serif (Japanese OpenType features) - * - Geist: Sans-serif for UI and secondary text - * - Geist Mono: Code and tabular data - * - * Loading Strategy: FOUT over FOIT for perceived performance - */ - -/* - * Fonts are loaded once via a single, preconnected in RootLayout.astro - * (Noto Serif JP + Geist + Geist Mono combined into one request). + * - Atkinson Hyperlegible Next: body & UI (Braille Institute low-vision face, incl. italic) + * - JetBrains Mono: headings & code + * + * Loading: self-hosted via Fontsource, imported in RootLayout.astro + * (`@fontsource-variable/...`). Vite bundles and fingerprints the woff2 and + * serves them same-origin — no third-party request, nothing to load here. * - * Do NOT add `@import url('https://fonts.googleapis.com/...')` here: a remote - * CSS @import is render-blocking, can't be preloaded, and duplicates the - * — the browser would fetch the same stylesheets multiple times. - * Keep all font-family fallbacks and feature-settings below; only the loading - * lives in the document head. + * Do NOT add `@import url('https://fonts.googleapis.com/...')` (render-blocking, + * privacy-leaking) and do NOT redefine the --font-* tokens in _tokens.css. */ /** @@ -27,22 +20,20 @@ * Using system font-display: swap for optimal loading */ +/* + * Single source of truth for font-family tokens (do NOT redefine in _tokens.css). + * Fallback stacks use only generic CSS keywords (ui-sans-serif / ui-monospace / sans-serif / + * monospace) — never named system fonts, which keeps banned faces (and their kissing-cousins) + * out of the stack entirely. + */ :root { - /* Primary Serif - Noto Serif JP */ - /* Exceptional readability, classical proportions, OpenType features */ - --font-serif: 'Noto Serif JP', 'Times New Roman', 'Georgia', serif; + /* Body & UI — Atkinson Hyperlegible Next (Braille Institute, designed for low vision; has italic) */ + --font-sans: 'Atkinson Hyperlegible Next Variable', ui-sans-serif, sans-serif; - /* Sans Serif - Geist (Variable) */ - /* Swiss precision, modern clarity, variable weight axis */ - --font-sans: - 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif, - 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + /* Headings & code — JetBrains Mono (technical, variable axis) */ + --font-mono: 'JetBrains Mono Variable', ui-monospace, monospace; - /* Monospace - Geist Mono (Variable) */ - /* Code, data tables, technical content */ - --font-mono: - 'Geist Mono', 'SF Mono', Monaco, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, - 'Courier New', monospace; + /* No serif face: blockquotes use the body font in italic (see 03-elements/_typography.css). */ } /** diff --git a/src/styles/03-elements/_typography.css b/src/styles/03-elements/_typography.css index 45013d6..9136a6e 100644 --- a/src/styles/03-elements/_typography.css +++ b/src/styles/03-elements/_typography.css @@ -13,13 +13,13 @@ body { font-size: var(--text-base); line-height: var(--leading-loose); /* 1.777 - more readable */ font-weight: var(--font-weight-normal); - letter-spacing: 0.01em; /* Slight positive tracking for Geist - more open feel */ + letter-spacing: var(--tracking-normal); /* Atkinson is tuned for legibility — no extra tracking */ } -/* Heading Scale - Golden Ratio (φ = 1.618) with fluid sizing */ +/* Headings use the JetBrains Mono display face; body stays Atkinson (h6 is a small UI label → body face) */ h1, .h1 { - font-family: var(--font-sans); + font-family: var(--font-mono); font-size: clamp(1.75rem, 5vw + 1rem, var(--text-4xl)); line-height: var(--leading-snug); letter-spacing: var(--tracking-tight); @@ -29,10 +29,10 @@ h1, h2, .h2 { - font-family: var(--font-sans); + font-family: var(--font-mono); font-size: clamp(1.5rem, 3vw + 0.75rem, var(--text-3xl)); line-height: var(--leading-snug); - letter-spacing: var(--tracking-normal); + letter-spacing: var(--tracking-tight); font-weight: var(--font-weight-semibold); margin-block-start: calc(var(--baseline) * 2); margin-block-end: var(--baseline-half); @@ -41,10 +41,10 @@ h2, h3, .h3 { - font-family: var(--font-sans); + font-family: var(--font-mono); font-size: var(--text-2xl); line-height: var(--leading-snug); - letter-spacing: var(--tracking-normal); + letter-spacing: var(--tracking-tight); font-weight: var(--font-weight-semibold); margin-block-start: calc(var(--baseline) * 1.5); margin-block-end: var(--baseline-half); @@ -53,7 +53,7 @@ h3, h4, .h4 { - font-family: var(--font-sans); + font-family: var(--font-mono); font-size: var(--text-xl); line-height: var(--leading-snug); font-weight: var(--font-weight-medium); @@ -63,7 +63,7 @@ h4, h5, .h5 { - font-family: var(--font-sans); + font-family: var(--font-mono); font-size: var(--text-lg); line-height: var(--leading-normal); font-weight: var(--font-weight-medium); @@ -188,10 +188,10 @@ blockquote { padding-inline-start: calc(var(--baseline) * 1.5); border-inline-start: 3px solid var(--color-accent); color: var(--color-text-muted); - font-family: var(--font-serif); + font-family: var(--font-sans); /* Atkinson italic — no separate serif face */ font-size: var(--text-lg); font-style: italic; - line-height: var(--leading-loose); + line-height: var(--leading-relaxed); font-weight: 400; } diff --git a/src/styles/CSS_GUIDE.md b/src/styles/CSS_GUIDE.md index 2f6bff4..275298c 100644 --- a/src/styles/CSS_GUIDE.md +++ b/src/styles/CSS_GUIDE.md @@ -32,14 +32,14 @@ All values come from tokens defined in `00-settings/_tokens.css`. ### Typography Scale (Perfect Fourth: 1.333) ```css ---text-xs: 0.75rem; /* 12px */ ---text-sm: 0.875rem; /* 14px */ ---text-base: 1rem; /* 16px - MINIMUM */ ---text-lg: 1.333rem; /* 21px */ ---text-xl: 1.777rem; /* 28px */ ---text-2xl: 2.369rem; /* 38px */ ---text-3xl: 3.157rem; /* 51px */ ---text-4xl: 4.209rem; /* 67px */ +--text-xs: 0.75rem; /* 12px */ +--text-sm: 0.875rem; /* 14px */ +--text-base: 1rem; /* 16px - MINIMUM */ +--text-lg: 1.333rem; /* 21px */ +--text-xl: 1.777rem; /* 28px */ +--text-2xl: 2.369rem; /* 38px */ +--text-3xl: 3.157rem; /* 51px */ +--text-4xl: 4.209rem; /* 67px */ ``` **Never use pixels for font sizes.** Always use the scale. @@ -47,12 +47,12 @@ All values come from tokens defined in `00-settings/_tokens.css`. ### Spacing (Powers of 2) ```css ---space-1: 0.25rem; /* 4px */ ---space-2: 0.5rem; /* 8px */ ---space-4: 1rem; /* 16px - Base rhythm */ ---space-8: 2rem; /* 32px */ ---space-16: 4rem; /* 64px */ ---space-24: 6rem; /* 96px */ +--space-1: 0.25rem; /* 4px */ +--space-2: 0.5rem; /* 8px */ +--space-4: 1rem; /* 16px - Base rhythm */ +--space-8: 2rem; /* 32px */ +--space-16: 4rem; /* 64px */ +--space-24: 6rem; /* 96px */ ``` All spacing derives from `--space-unit: 4px`. @@ -128,17 +128,17 @@ Auto-fit creates responsive columns without media queries. ### Button ```html - + ``` **Variants** (use `data-variant`): + - `primary` - Main actions - `secondary` - Alternative actions - `ghost` - Subtle actions **Sizes** (use `data-size`): + - `sm` - Compact - (default) - Normal - `lg` - Prominent @@ -151,20 +151,15 @@ Auto-fit creates responsive columns without media queries.

Title

Description

-
- Main content here -
- +
Main content here
+ ``` ### Badge ```html -Default -Accent +Default Accent ``` ## Modern CSS Features @@ -205,9 +200,9 @@ margin-right: var(--space-4); ```css font-size: clamp( - var(--text-xl), /* minimum */ - 5vw + 1rem, /* preferred */ - var(--text-3xl) /* maximum */ + var(--text-xl), + /* minimum */ 5vw + 1rem, + /* preferred */ var(--text-3xl) /* maximum */ ); ``` @@ -245,7 +240,7 @@ margin-block-start: var(--space-6); ```css /* GOOD - flat specificity */ -.nav__link[data-active="true"] { +.nav__link[data-active='true'] { color: var(--color-accent); } ``` @@ -267,7 +262,7 @@ margin-block-start: var(--space-6); /* Use layout primitives */ } -.card[data-variant="error"] { +.card[data-variant='error'] { color: var(--color-error); } ``` @@ -299,22 +294,31 @@ margin-block-start: var(--space-6); ### Naming Conventions **BEM for components**: + ```css -.card { } -.card__header { } -.card__title { } -.card--featured { } +.card { +} +.card__header { +} +.card__title { +} +.card--featured { +} ``` **Data attributes for state**: + ```html - ``` **Kebab-case for utilities**: + ```css -.text-center { } -.stack-4 { } +.text-center { +} +.stack-4 { +} ``` ### Documentation Comments @@ -352,7 +356,7 @@ Maintain WCAG AA minimum (4.5:1 for body text): ```css /* Use text-muted for secondary text */ -color: var(--color-text-muted); /* 4.5:1+ contrast */ +color: var(--color-text-muted); /* 4.5:1+ contrast */ ``` ### Reduced Motion @@ -376,21 +380,26 @@ Inline critical styles in ``: ```html ``` ### Font Loading -```css -@font-face { - font-family: 'Geist Variable'; - src: url('/fonts/geist-var.woff2') format('woff2-variations'); - font-display: swap; /* FOIT → FOUT */ -} -``` +Fonts are **self-hosted via Fontsource** and imported in `src/layouts/RootLayout.astro` +(`@fontsource-variable/atkinson-hyperlegible-next` for body/UI, `@fontsource-variable/jetbrains-mono` +for headings/code). Vite bundles and fingerprints the woff2 and serves them same-origin — there is no +`@font-face` to hand-write and no third-party request. Reference fonts only through the +`--font-sans` / `--font-mono` tokens (defined once in `01-typography/_fonts.css`); never paste a raw +or near-name family string into CSS. ## Quality Checklist From 24cbfe254eea92b3c38c67401208b11c63b87c43 Mon Sep 17 00:00:00 2001 From: radiolabme Date: Tue, 9 Jun 2026 23:50:21 -0700 Subject: [PATCH 03/19] content: add June meeting and ARRL Field Day 2026 events Add the ARRL Field Day 2026 event (N7OS at Camp Freeman, June 27-28) and the June membership meeting (June 16), which previews and plans the Field Day operation. Wire up customVenue rendering, which the schema supported but no display component consumed: - EventLogistics renders an in-person block and map for customVenue - events/[slug] includes customVenue in the in-person CTA, the logistics mount, and the copy-invite text Existing config-venue events are unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/components/event/EventLogistics.astro | 65 ++++++++++++-- .../events/2026-06-arrl-field-day/cover.jpg | Bin 0 -> 1582374 bytes .../events/2026-06-arrl-field-day/index.md | 79 ++++++++++++++++++ .../events/2026-06-june-meeting/index.md | 43 ++++++++++ src/pages/events/[slug].astro | 17 +++- 5 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 src/content/events/2026-06-arrl-field-day/cover.jpg create mode 100644 src/content/events/2026-06-arrl-field-day/index.md create mode 100644 src/content/events/2026-06-june-meeting/index.md diff --git a/src/components/event/EventLogistics.astro b/src/components/event/EventLogistics.astro index 1c5cf7d..afa98c2 100644 --- a/src/components/event/EventLogistics.astro +++ b/src/components/event/EventLogistics.astro @@ -15,6 +15,15 @@ import { getVenue, getOnlineMeeting } from '../../site.config'; interface Props { /** Physical venue key from site.config.ts */ venue?: string; + /** One-off venue details for non-recurring locations (use instead of venue key) */ + customVenue?: { + name: string; + address: string; + room?: string; + mapUrl?: string; + latitude?: number; + longitude?: number; + }; /** Custom location string when venue is not in config */ location?: string; /** Override map coordinates (uses venue config if not provided) */ @@ -39,6 +48,7 @@ interface Props { const { venue: venueKey, + customVenue, location, latitude: propLatitude, longitude: propLongitude, @@ -55,15 +65,15 @@ const venue = venueKey ? getVenue(venueKey) : undefined; const meeting = meetingKey ? getOnlineMeeting(meetingKey) : undefined; const teams = meeting || legacyTeams; -// Resolve coordinates: props override venue config -const latitude = propLatitude ?? venue?.latitude; -const longitude = propLongitude ?? venue?.longitude; +// Resolve coordinates: props override venue config, then one-off venue +const latitude = propLatitude ?? venue?.latitude ?? customVenue?.latitude; +const longitude = propLongitude ?? venue?.longitude ?? customVenue?.longitude; // Resolve coord frequency: props override venue config const coordFrequency = propFreq || venue?.coordFrequency; -// Location display: props override venue config -const displayLocation = location || venue?.name; +// Location display: props override venue config, then one-off venue +const displayLocation = location || venue?.name || customVenue?.name; // Simple markdown bold to HTML conversion function mdBold(text: string): string { @@ -126,6 +136,51 @@ const escortHtml = venue?.arrival?.escort ) } +{ + !venue && customVenue && ( +
+

Join In Person

+ +
+ + Directions & Map + +
+
+

+ <> + {customVenue.name} +
+ + {customVenue.address} + {customVenue.room && ( + <> +
+ {customVenue.room} + + )} +

+ {customVenue.mapUrl && ( +

+ + Open in Google Maps → + +

+ )} + {latitude && longitude && ( + + )} +
+
+
+
+ ) +} + { teams && (
diff --git a/src/content/events/2026-06-arrl-field-day/cover.jpg b/src/content/events/2026-06-arrl-field-day/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..590190dda900bf1c126106983519c4e689a1ebab GIT binary patch literal 1582374 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
- {event.data.startDate && ( + {event.data.eventDate && ( )} From 5cb4caeb817f30298a68f2da79e99285a12830bb Mon Sep 17 00:00:00 2001 From: radiolabme Date: Wed, 10 Jun 2026 01:39:59 -0700 Subject: [PATCH 05/19] type(scale): web-tuned modular ramp + de-duplicate type tokens The print-derived golden-ratio (phi=1.618) scale was poster-aggressive for screens (h1 ~42px up to ~84px) and collided at h3/h4 (1.21x) and lg/xl (1.07x). Replace with a web modular scale (~1.2 text / ~1.25 display, 16px base, capped at 48px) so adjacent heading steps are distinct and the top end isn't billboard-sized. - Type tokens (sizes, leading, measure, tracking, weights, families) now have a single source of truth in 01-typography/_scale.css; deleted the duplicate (and divergent) blocks from _tokens.css, and fixed a third stale scale in CSS_GUIDE.md. - Body leading 1.777 -> 1.6 (screen optimum); paragraph measure 75ch -> 62ch. - Leading/tracking retuned for the new sizes; fluid display clamp capped at 48px. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/styles/00-settings/_tokens.css | 60 +-------- src/styles/01-typography/_scale.css | 168 ++++++++++++------------- src/styles/03-elements/_typography.css | 4 +- src/styles/CSS_GUIDE.md | 29 +++-- 4 files changed, 106 insertions(+), 155 deletions(-) diff --git a/src/styles/00-settings/_tokens.css b/src/styles/00-settings/_tokens.css index d81872d..aefd346 100644 --- a/src/styles/00-settings/_tokens.css +++ b/src/styles/00-settings/_tokens.css @@ -8,64 +8,12 @@ :root { /* ======================================== - TYPOGRAPHY TOKENS - Golden Ratio Scale (φ = 1.618) with Harmonic Thirds/Fourths - Base: 16px - Never go below this (WCAG minimum) - Baseline Grid: 24px (1.5 × 16px) - Tufte's preference + TYPOGRAPHY TOKENS — single source of truth in 01-typography/_scale.css + (font sizes, leading, measure, tracking, font weights, font families). + Defined there, not here, to avoid the duplicate/divergent token blocks + this file used to carry. Spatial, color, and layout tokens live below. ======================================== */ - /* Micro Typography - Captions, footnotes, marginalia */ - --text-2xs: 0.694rem; /* 11.1px - φ^-2 - Smallest readable */ - --text-xs: 0.833rem; /* 13.3px - φ^-1.5 - Footnotes */ - --text-sm: 0.875rem; /* 14px - Captions, labels */ - - /* Body Typography - Primary reading sizes */ - --text-base: 1rem; /* 16px - φ^0 - Sacred minimum (WCAG) */ - --text-md: 1.125rem; /* 18px - Enhanced body text */ - --text-lg: 1.25rem; /* 20px - Major Third - Large body */ - - /* Display Typography - Headings and emphasis */ - --text-xl: 1.333rem; /* 21.3px - Perfect Fourth - H4 */ - --text-2xl: 1.618rem; /* 25.9px - φ^1 - Golden! - H3 */ - --text-3xl: 2.027rem; /* 32.4px - φ^1.25 - H2 */ - --text-4xl: 2.618rem; /* 41.9px - φ^1.618 - H1 */ - --text-5xl: 3.236rem; /* 51.8px - φ^2 - Display */ - --text-6xl: 4.236rem; /* 67.8px - φ^2.5 - Hero */ - --text-7xl: 5.236rem; /* 83.8px - φ^3 - Massive */ - - /* Font-family tokens (--font-sans / --font-mono) live in 01-typography/_fonts.css — - the single source of truth. Do not redefine them here. */ - - /* Font Weights - Exploit variable font axis */ - --font-weight-normal: 400; - --font-weight-medium: 500; - --font-weight-semibold: 600; - --font-weight-bold: 700; - - /* Line Height System - Based on Golden Ratio and Baseline Grid */ - --leading-none: 1; /* Display text only */ - --leading-tightest: 1.111; /* 1/φ - Super condensed */ - --leading-tight: 1.25; /* Major Third - Headlines */ - --leading-snug: 1.333; /* Perfect Fourth - Subheads */ - --leading-normal: 1.5; /* Baseline grid - Body (optimal) */ - --leading-relaxed: 1.618; /* Golden Ratio - Airy body */ - --leading-loose: 1.777; /* φ + 0.16 - Maximum readability */ - - /* Measure (Line Length) - Optimal Reading (Bringhurst & Tufte) */ - --measure-compact: 45ch; /* Narrow columns, sidebars */ - --measure-optimal: 66ch; /* Primary body text */ - --measure-comfortable: 72ch; /* Comfortable sustained reading */ - --measure-wide: 80ch; /* Wide layouts, max recommended */ - --measure-full: 90ch; /* Technical content, tables */ - - /* Tracking (Letter Spacing) - Optical Adjustment */ - --tracking-tightest: -0.05em; /* -50 - Display text, large sizes */ - --tracking-tight: -0.025em; /* -25 - Headlines */ - --tracking-normal: 0; /* 0 - Body text (never touch!) */ - --tracking-wide: 0.025em; /* +25 - All-caps, UI labels */ - --tracking-wider: 0.05em; /* +50 - Small text (<14px) */ - --tracking-widest: 0.1em; /* +100 - Extreme spacing */ - /* ======================================== SPATIAL SYSTEM Powers of 2 Grid - Everything derives from base unit diff --git a/src/styles/01-typography/_scale.css b/src/styles/01-typography/_scale.css index 151e2dd..c293d7b 100644 --- a/src/styles/01-typography/_scale.css +++ b/src/styles/01-typography/_scale.css @@ -1,15 +1,15 @@ /** - * TYPOGRAPHIC SCALE - Golden Ratio with Harmonic Proportions - * - * The grid provides invisible structure for all typography. - * - * Base System: - * - Golden Ratio (φ = 1.618) for major scale progression - * - Perfect Fourth (1.333) and Major Third (1.25) for intermediate steps - * - Base unit: 16px (1rem) - sacred minimum for readability - * - Harmonic rhythm: 24px baseline grid (1.5 × 16px) - * - * Awards-worthy typography requires mathematical precision and optical adjustment. + * TYPOGRAPHIC SCALE — Web modular scale (single source of truth) + * + * This file owns every type token (sizes, leading, measure, tracking, weights); + * _tokens.css intentionally does NOT redefine them. + * + * Base System (tuned for screens, not print): + * - Base: 16px (1rem) — honors the browser/user default; never fights zoom. + * - Text band ratio ≈1.2 (minor third), display band ≈1.25 (major third). + * - Capped at 3rem/48px — the old print-derived φ=1.618 ramp (up to ~84px) was + * poster-aggressive and collided at h3/h4 and lg/xl on screen. + * - 24px baseline grid for vertical rhythm. */ :root { @@ -18,11 +18,11 @@ 24px baseline (1.5rem) - Tufte's preference All vertical rhythm derives from this ======================================== */ - - --baseline: 1.5rem; /* 24px - Universal vertical rhythm */ - --baseline-half: 0.75rem; /* 12px - Half rhythm */ + + --baseline: 1.5rem; /* 24px - Universal vertical rhythm */ + --baseline-half: 0.75rem; /* 12px - Half rhythm */ --baseline-quarter: 0.375rem; /* 6px - Micro adjustments */ - + /* ======================================== FONT SIZE SCALE Golden Ratio (φ) with Harmonic Thirds/Fourths @@ -32,42 +32,42 @@ Sizes optimized for screen (96 DPI) and print (300 DPI) ======================================== */ - + /* Micro Typography - Captions, footnotes, marginalia */ - --text-2xs: 0.694rem; /* 11.1px - φ^-2 - Smallest readable */ - --text-xs: 0.833rem; /* 13.3px - φ^-1.5 - Footnotes */ - --text-sm: 0.875rem; /* 14px - Captions, labels */ - + --text-2xs: 0.75rem; /* 12px - legal / marginalia floor */ + --text-xs: 0.8125rem; /* 13px - captions, metadata */ + --text-sm: 0.875rem; /* 14px - labels, small UI */ + /* Body Typography - Primary reading sizes */ - --text-base: 1rem; /* 16px - φ^0 - Sacred minimum (WCAG) */ - --text-md: 1.125rem; /* 18px - Enhanced body text */ - --text-lg: 1.25rem; /* 20px - Major Third - Large body */ - - /* Display Typography - Headings and emphasis */ - --text-xl: 1.333rem; /* 21.3px - Perfect Fourth - H4 */ - --text-2xl: 1.618rem; /* 25.9px - φ^1 - Golden! - H3 */ - --text-3xl: 2.027rem; /* 32.4px - φ^1.25 - H2 */ - --text-4xl: 2.618rem; /* 41.9px - φ^1.618 - H1 */ - --text-5xl: 3.236rem; /* 51.8px - φ^2 - Display */ - --text-6xl: 4.236rem; /* 67.8px - φ^2.5 - Hero */ - --text-7xl: 5.236rem; /* 83.8px - φ^3 - Massive */ - + --text-base: 1rem; /* 16px - body (honors browser default) */ + --text-md: 1.125rem; /* 18px - lead / comfortable body */ + --text-lg: 1.25rem; /* 20px - h5 / large UI */ + + /* Display Typography - Headings (minor→major third, capped for screens) */ + --text-xl: 1.5rem; /* 24px - h4 (was 21.3 → opens lg/xl gap) */ + --text-2xl: 1.875rem; /* 30px - h3 (was 25.9 → fixes h3/h4 collision) */ + --text-3xl: 2.25rem; /* 36px - h2 */ + --text-4xl: 3rem; /* 48px - h1 (capped web hero; was 41.9) */ + --text-5xl: 3.75rem; /* 60px - optional landing display */ + --text-6xl: 4.5rem; /* 72px - rare full-bleed splash only */ + --text-7xl: 4.5rem; /* alias of 6xl — no separate poster size on web */ + /* ======================================== LINE HEIGHT (Leading) - Harmonic Ratios Based on baseline grid and golden ratio "Leading is to typography what negative space is to composition." ======================================== */ - - --leading-none: 1; /* Display text only */ - --leading-tightest: 1.111; /* 1/φ - Super condensed */ - --leading-tight: 1.25; /* Major Third - Headlines */ - --leading-snug: 1.333; /* Perfect Fourth - Subheads */ - --leading-normal: 1.5; /* Baseline grid - Body (optimal) */ - --leading-relaxed: 1.618; /* Golden Ratio - Airy body */ - --leading-loose: 1.777; /* φ + 0.16 - Maximum readability */ - --leading-extra-loose: 2; /* Double spacing */ - + + --leading-none: 1; /* Huge display only */ + --leading-tightest: 1.05; /* Largest display */ + --leading-tight: 1.1; /* h1 / h2 (36-48px) */ + --leading-snug: 1.2; /* h3 / h4 (24-30px) */ + --leading-normal: 1.5; /* Dense UI, tables */ + --leading-relaxed: 1.6; /* Body copy (was 1.777 — print-airy) */ + --leading-loose: 1.7; /* Long-form / lead, max comfortable */ + --leading-extra-loose: 1.9; /* Rare extra-airy */ + /* ======================================== MEASURE (Line Length) - Optimal Reading @@ -75,58 +75,58 @@ Tufte's preference: 55-65 characters Golden mean: 60 characters ======================================== */ - - --measure-compact: 45ch; /* Narrow columns, sidebars */ - --measure-optimal: 60ch; /* Primary body text (golden) */ - --measure-comfortable: 65ch; /* Maximum for sustained reading */ - --measure-wide: 75ch; /* Wide layouts, technical content */ - --measure-full: 90ch; /* Maximum before eye fatigue */ - + + --measure-compact: 48ch; /* Narrow columns, sidebars, cards */ + --measure-optimal: 62ch; /* Primary body text (screen sweet spot) */ + --measure-comfortable: 66ch; /* Maximum for sustained reading */ + --measure-wide: 75ch; /* Tables, technical content only */ + --measure-full: 90ch; /* Absolute max before eye fatigue */ + /* ======================================== TRACKING (Letter Spacing) - Optical Adjustment Negative tracking for display sizes (optical compression) Positive tracking for all-caps and small sizes ======================================== */ - - --tracking-tightest: -0.05em; /* -50 - Display text, large sizes */ - --tracking-tight: -0.025em; /* -25 - Headlines */ - --tracking-normal: 0; /* 0 - Body text (never touch!) */ - --tracking-wide: 0.025em; /* +25 - All-caps, UI labels */ - --tracking-wider: 0.05em; /* +50 - Small text (<14px) */ - --tracking-widest: 0.1em; /* +100 - Extreme spacing */ - + + --tracking-tightest: -0.04em; /* Large display (36-72px) */ + --tracking-tight: -0.02em; /* Mid headings (24-30px) */ + --tracking-normal: 0; /* Body text (never touch!) */ + --tracking-wide: 0.02em; /* All-caps, UI labels */ + --tracking-wider: 0.04em; /* Small caps / <14px */ + --tracking-widest: 0.08em; /* Extreme spacing */ + /* ======================================== FONT WEIGHTS - Variable Font Axis Precise control for hierarchy and emphasis ======================================== */ - + --font-weight-extralight: 200; --font-weight-light: 300; - --font-weight-normal: 400; /* Body text */ - --font-weight-medium: 500; /* Emphasis */ - --font-weight-semibold: 600; /* Strong emphasis */ - --font-weight-bold: 700; /* Headings */ + --font-weight-normal: 400; /* Body text */ + --font-weight-medium: 500; /* Emphasis */ + --font-weight-semibold: 600; /* Strong emphasis */ + --font-weight-bold: 700; /* Headings */ --font-weight-extrabold: 800; - --font-weight-black: 900; /* Display */ - + --font-weight-black: 900; /* Display */ + /* ======================================== PARAGRAPH SPACING - Vertical Rhythm All spacing is multiple of baseline grid ======================================== */ - - --paragraph-spacing: var(--baseline); /* 24px - Standard */ + + --paragraph-spacing: var(--baseline); /* 24px - Standard */ --paragraph-spacing-tight: var(--baseline-half); /* 12px - Compact */ --paragraph-spacing-loose: calc(var(--baseline) * 1.5); /* 36px - Airy */ - + /* ======================================== INDENTATION - Classical Typography First-line indent for paragraph distinction ======================================== */ - - --indent-standard: 1.5em; /* Classical (1.5× font size) */ - --indent-generous: 2em; /* Prominent paragraphs */ - --indent-subtle: 1em; /* Minimal distinction */ + + --indent-standard: 1.5em; /* Classical (1.5× font size) */ + --indent-generous: 2em; /* Prominent paragraphs */ + --indent-subtle: 1em; /* Minimal distinction */ } /** @@ -141,16 +141,16 @@ :root { /* Fluid body text: 16px @ 320px → 18px @ 1920px */ --text-base-fluid: clamp( - 1rem, /* 16px minimum */ - 0.9rem + 0.3125vw, /* Scales with viewport */ - 1.125rem /* 18px maximum */ + 1rem, + /* 16px minimum */ 0.9rem + 0.3125vw, + /* Scales with viewport */ 1.125rem /* 18px maximum */ ); - - /* Fluid display text: scales more aggressively */ + + /* Fluid display text (matches the capped --text-4xl) */ --text-4xl-fluid: clamp( - 2.618rem, /* 41.9px minimum */ - 1.5rem + 3.5vw, /* Aggressive scaling */ - 4.236rem /* 67.8px maximum */ + 2rem, + /* 32px minimum */ 1.25rem + 2.5vw, + /* scales with viewport */ 3rem /* 48px maximum (web hero cap) */ ); } } @@ -163,13 +163,13 @@ @media print { :root { /* Increase body size for print readability */ - --text-base: 11pt; /* Print point size */ - --leading-normal: 1.4; /* Tighter for print */ - + --text-base: 11pt; /* Print point size */ + --leading-normal: 1.4; /* Tighter for print */ + /* Adjust margins for print bleed */ --print-bleed: 0.125in; } - + body { font-size: var(--text-base); line-height: var(--leading-normal); diff --git a/src/styles/03-elements/_typography.css b/src/styles/03-elements/_typography.css index 9136a6e..07cbe37 100644 --- a/src/styles/03-elements/_typography.css +++ b/src/styles/03-elements/_typography.css @@ -11,7 +11,7 @@ body { font-family: var(--font-sans); font-size: var(--text-base); - line-height: var(--leading-loose); /* 1.777 - more readable */ + line-height: var(--leading-relaxed); /* 1.6 - screen-reading optimum */ font-weight: var(--font-weight-normal); letter-spacing: var(--tracking-normal); /* Atkinson is tuned for legibility — no extra tracking */ } @@ -91,7 +91,7 @@ h6, /* Body Text - Optimal measure for readability */ p { margin-block-end: var(--space-4); /* 16px - tighter rhythm */ - max-inline-size: var(--measure-wide); + max-inline-size: var(--measure-optimal); /* 62ch - screen reading sweet spot */ hyphens: auto; } diff --git a/src/styles/CSS_GUIDE.md b/src/styles/CSS_GUIDE.md index 275298c..6b06998 100644 --- a/src/styles/CSS_GUIDE.md +++ b/src/styles/CSS_GUIDE.md @@ -27,22 +27,25 @@ Specificity increases as you go down. Never skip layers. ## Design Tokens -All values come from tokens defined in `00-settings/_tokens.css`. +Spatial, color, and layout tokens are defined in `00-settings/_tokens.css`. +**Type tokens** (sizes, leading, measure, tracking, weights, families) have a single source of +truth in `01-typography/_scale.css` and `_fonts.css` — never redefine them in `_tokens.css`. -### Typography Scale (Perfect Fourth: 1.333) +### Typography Scale (web modular: ~1.2 text / ~1.25 display, 16px base) ```css ---text-xs: 0.75rem; /* 12px */ ---text-sm: 0.875rem; /* 14px */ ---text-base: 1rem; /* 16px - MINIMUM */ ---text-lg: 1.333rem; /* 21px */ ---text-xl: 1.777rem; /* 28px */ ---text-2xl: 2.369rem; /* 38px */ ---text-3xl: 3.157rem; /* 51px */ ---text-4xl: 4.209rem; /* 67px */ -``` - -**Never use pixels for font sizes.** Always use the scale. +--text-sm: 0.875rem; /* 14px - labels */ +--text-base: 1rem; /* 16px - body (MINIMUM) */ +--text-md: 1.125rem; /* 18px - lead */ +--text-lg: 1.25rem; /* 20px - h5 */ +--text-xl: 1.5rem; /* 24px - h4 */ +--text-2xl: 1.875rem; /* 30px - h3 */ +--text-3xl: 2.25rem; /* 36px - h2 */ +--text-4xl: 3rem; /* 48px - h1 (capped for screens) */ +``` + +**Never use pixels for font sizes.** Always use the scale. The ramp is capped at 48px — the old +print-derived φ=1.618 scale (up to ~84px) was poster-aggressive and collided at h3/h4 on screen. ### Spacing (Powers of 2) From ac9a4df8185c9b78d6c0a97a93b25dffb663fd59 Mon Sep 17 00:00:00 2001 From: radiolabme Date: Wed, 10 Jun 2026 01:43:11 -0700 Subject: [PATCH 06/19] style(color): consolidate to a single blue accent; retire red MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The site had two accents (red --color-accent for links/focus/nav/blockquote/ tags/badges, blue --color-blue for buttons/logo), and dark mode only re-tuned the red — so the primary CTA and logo receded into the dark surface. Per the decision to drop red: - Repoint --color-accent* to blue (hue 240); --color-blue* become aliases of the accent, so every interactive/emphasis role now uses one blue. - Finish dark mode: lighten the (now single) accent on the dark surface so the primary button and links both read correctly; previously blue was left dark. - Make .text-accent honest (was silently mapped to subtle gray -> uses accent). - Update stale red value + 'red accent' comments in _tokens.css and CSS_GUIDE. Note: the non-monotonic gray ramp (200/300, 700/800) is deferred to the polish pass to avoid touching border-contrast values here. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/styles/00-settings/_tokens.css | 37 +++++++++++++++----------- src/styles/01-typography/_scale.css | 8 ++---- src/styles/03-elements/_typography.css | 2 +- src/styles/CSS_GUIDE.md | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/styles/00-settings/_tokens.css b/src/styles/00-settings/_tokens.css index aefd346..90927ac 100644 --- a/src/styles/00-settings/_tokens.css +++ b/src/styles/00-settings/_tokens.css @@ -43,7 +43,9 @@ /* ======================================== SWISS COLOR SYSTEM - Primary palette: black, white, and red accent + Primary palette: black, white, and a single BLUE accent. + (Red has been retired as an accent — reserve red only for genuine + error/danger semantics, never decoration.) OKLCH for perceptually uniform color WCAG AA Compliant: 4.5:1 text, 3:1 UI components ======================================== */ @@ -62,16 +64,17 @@ --color-gray-800: oklch(38% 0 0); /* Border dark: 3.2:1 on 12% surface ✓ */ --color-gray-900: oklch(15% 0 0); - /* Accent - Use Sparingly for Maximum Impact */ - /* Adjusted for WCAG AA: 4.5:1 on white, 4.5:1 on dark surfaces */ - --color-accent: oklch(45% 0.22 25); /* Darker for light mode: 7.8:1 on white */ - --color-accent-dark: oklch(38% 0.22 25); /* Hover state: 11.2:1 on white */ - --color-accent-light: oklch(55% 0.22 25); /* Subtle accents: 4.9:1 on white */ + /* Accent - the single blue accent (links, focus, active nav, buttons, logo, badges) */ + /* Adjusted for WCAG AA: ~7.8:1 on white */ + --color-accent: oklch(45% 0.22 240); /* Blue: 7.8:1 on white */ + --color-accent-dark: oklch(38% 0.22 240); /* Hover state: 11.2:1 on white */ + --color-accent-light: oklch(55% 0.22 240); /* Subtle accents: 4.9:1 on white */ - /* Button/Interactive Blue */ - --color-blue: oklch(45% 0.22 240); /* Blue accent: 7.8:1 on white */ - --color-blue-hover: oklch(38% 0.22 240); /* Darker blue for hover states: 11.2:1 on white */ - --color-blue-light: oklch(55% 0.22 240); /* Subtle blue accents: 4.9:1 on white */ + /* --color-blue* are kept as aliases so existing button/logo consumers keep working, + but they now resolve to the one accent — there is no separate red anymore. */ + --color-blue: var(--color-accent); + --color-blue-hover: var(--color-accent-dark); + --color-blue-light: var(--color-accent-light); /* Semantic Colors (Derived from base) */ /* Light Mode: Softer contrast for comfortable reading (WCAG AA) */ @@ -155,9 +158,10 @@ --color-surface-muted: oklch(8% 0 0); /* Recessed: 8% - darker, clear difference */ --color-surface-raised: oklch(20% 0 0); /* Raised: 20% - strong 8% difference */ - /* Adjusted accent for dark mode - lighter for contrast */ - --color-accent: oklch(70% 0.22 25); /* 8.5:1 on oklch(12%) ✓ */ - --color-accent-dark: oklch(80% 0.22 25); /* Hover: 12.1:1 on oklch(12%) ✓ */ + /* Single blue accent, lightened for the dark surface (blue aliases follow it) */ + --color-accent: oklch(72% 0.18 240); /* ~8.5:1 on oklch(12%) ✓ */ + --color-accent-dark: oklch(82% 0.15 240); /* Hover: brighter on dark ✓ */ + --color-accent-light: oklch(62% 0.18 240); /* Subtle accents on dark */ } } @@ -173,7 +177,8 @@ --color-surface-muted: oklch(8% 0 0); /* Recessed: 8% - darker, clear difference */ --color-surface-raised: oklch(20% 0 0); /* Raised: 20% - strong 8% difference */ - /* Adjusted accent for dark mode - lighter for contrast */ - --color-accent: oklch(70% 0.22 25); /* 8.5:1 on oklch(12%) ✓ */ - --color-accent-dark: oklch(80% 0.22 25); /* Hover: 12.1:1 on oklch(12%) ✓ */ + /* Single blue accent, lightened for the dark surface (blue aliases follow it) */ + --color-accent: oklch(72% 0.18 240); /* ~8.5:1 on oklch(12%) ✓ */ + --color-accent-dark: oklch(82% 0.15 240); /* Hover: brighter on dark ✓ */ + --color-accent-light: oklch(62% 0.18 240); /* Subtle accents on dark */ } diff --git a/src/styles/01-typography/_scale.css b/src/styles/01-typography/_scale.css index c293d7b..b6601c0 100644 --- a/src/styles/01-typography/_scale.css +++ b/src/styles/01-typography/_scale.css @@ -25,12 +25,8 @@ /* ======================================== FONT SIZE SCALE - Golden Ratio (φ) with Harmonic Thirds/Fourths - - Formula: size(n) = base × φ^n - Intermediate steps use Perfect Fourth (1.333) - - Sizes optimized for screen (96 DPI) and print (300 DPI) + Web modular scale: ~1.2 in the text band, ~1.25 in the display band. + Base 16px (1rem). Capped at 48px (--text-4xl) for screens. ======================================== */ /* Micro Typography - Captions, footnotes, marginalia */ diff --git a/src/styles/03-elements/_typography.css b/src/styles/03-elements/_typography.css index 07cbe37..389aa27 100644 --- a/src/styles/03-elements/_typography.css +++ b/src/styles/03-elements/_typography.css @@ -131,7 +131,7 @@ small, } .text-accent { - color: var(--color-text-subtle); + color: var(--color-accent); } /* Links */ diff --git a/src/styles/CSS_GUIDE.md b/src/styles/CSS_GUIDE.md index 6b06998..7ea3a4e 100644 --- a/src/styles/CSS_GUIDE.md +++ b/src/styles/CSS_GUIDE.md @@ -71,7 +71,7 @@ All spacing derives from `--space-unit: 4px`. --color-text-muted: var(--color-gray-600); --color-border: var(--color-gray-200); --color-surface: var(--color-white); ---color-accent: oklch(55% 0.22 25); +--color-accent: oklch(45% 0.22 240); /* single blue accent (hue 240); red retired */ ``` **Why OKLCH?** Perceptually uniform - 50% lightness looks 50% bright. From dfb2fab1d13b32ec66c17e87cf5ac25f232c4b3e Mon Sep 17 00:00:00 2001 From: radiolabme Date: Wed, 10 Jun 2026 23:03:51 -0700 Subject: [PATCH 07/19] fix(nav): persist header across View Transitions to stop nav flash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The swaps the whole document on navigation, so the header was torn down and cross-faded on every transition (e.g. in/out of the Field Day event) — the nav links briefly flashed. Mark the header transition:persist so Astro keeps the same element across navigations. Because the header now persists, the theme-toggle listener can't be re-bound on each astro:page-load (that would stack handlers and fire the toggle multiple times per click). Wire it once via delegated click on document; setActiveNav still runs per navigation to update the active link. The redundant per-navigation applyTheme is dropped (the blocking script sets the theme and persists). --- src/components/SiteHeader.astro | 2 +- src/layouts/RootLayout.astro | 38 ++++++++++++--------------------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/components/SiteHeader.astro b/src/components/SiteHeader.astro index d3f4ae5..844fe59 100644 --- a/src/components/SiteHeader.astro +++ b/src/components/SiteHeader.astro @@ -7,7 +7,7 @@ */ --- -