From 4b1853d899e709a8f16c45ce5421fc03cf63feda Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Wed, 9 Sep 2026 15:45:52 +0000 Subject: [PATCH] 0.10.1: the nav button is readable without hovering `.nav a` is one class and one element more specific than `.btn`, so the header's "Post a job" and "Sign in" buttons took the nav link's --muted-foreground on the button's --primary background. In light that is oklch lightness 0.53 on 0.52, a contrast ratio of 1.05:1; in dark it is 0.71 on 0.72, 1.11:1. The label was there and invisible. Hovering appeared to fix it only because `.nav a:hover` repainted the whole thing as a plain grey nav pill, which also threw away the button's own hover state. Excluding buttons from the nav link rules with `:not(.btn)` hands them back to `.btn`, which pairs --primary with --primary-foreground: 4.89:1 light and 8.32:1 dark, and keeps the darker-green hover a button is supposed to have. sw.js VERSION follows the shell asset hash, or returning readers keep the old stylesheet. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01969fmPKb5j3PUCdBRfCnbm --- package.json | 2 +- src/config.ts | 2 +- web/public/app.css | 14 +++++++++++--- web/public/sw.js | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 177f424..dc10bfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@profullstack/agenticjobs", - "version": "0.10.0", + "version": "0.10.1", "description": "An agent-friendly job board you self-host. It posts its own jobs, never scrapes anyone else's, and answers on every surface: web, API, MCP, CLI, TUI, desktop and PWA. Instances find each other through an open directory.", "license": "MIT", "type": "module", diff --git a/src/config.ts b/src/config.ts index 41c8aab..0ebbac9 100644 --- a/src/config.ts +++ b/src/config.ts @@ -121,7 +121,7 @@ export function loadConfig(env: NodeJS.ProcessEnv = process.env): Config { } /** Kept in step with package.json by the release script. */ -export const VERSION = '0.10.0'; +export const VERSION = '0.10.1'; export const SOFTWARE_NAME = 'agenticjobs'; /** diff --git a/web/public/app.css b/web/public/app.css index 7773fc2..33451b4 100644 --- a/web/public/app.css +++ b/web/public/app.css @@ -111,7 +111,15 @@ a:hover { flex-wrap: wrap; } -.nav a { +/* + * `:not(.btn)` is load bearing. `.nav a` outranks `.btn`, so "Post a job" and + * "Sign in" used to paint --muted-foreground on the --primary background: + * two nearly identical lightnesses (0.53 on 0.52 light, 0.71 on 0.72 dark), + * so the label was invisible until the hover rule repainted it as a plain nav + * link. Excluding buttons here leaves them to .btn, which pairs --primary + * with --primary-foreground and stays legible in both states. + */ +.nav a:not(.btn) { color: var(--muted-foreground); text-decoration: none; font-size: 0.9rem; @@ -120,8 +128,8 @@ a:hover { border-radius: calc(var(--radius) - 4px); } -.nav a:hover, -.nav a[aria-current='page'] { +.nav a:not(.btn):hover, +.nav a:not(.btn)[aria-current='page'] { color: var(--foreground); background: var(--secondary); } diff --git a/web/public/sw.js b/web/public/sw.js index a03910b..dc56274 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -13,7 +13,7 @@ * drifted, which is the only version of this rule that survives contact. */ -const VERSION = 'c6b9327c'; +const VERSION = '0313cc56'; const SHELL = `shell-${VERSION}`; const ASSETS = ['/assets/app.css', '/assets/tokens.css', '/assets/icon.svg'];