From 3efa0f6aef2de43f6e1ba11206e9259292f6a56e Mon Sep 17 00:00:00 2001 From: istos Date: Thu, 30 Jul 2026 11:16:25 +0200 Subject: [PATCH] The header wears the design's wordmark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The design's answer to "what is the bench logo" is that there isn't a drawn one: the word is the logo — "bench", lowercase, set in Zilla Slab SemiBold and tracked -.015em, with the b lifted out of the same face as the icon. The board still showed the old "Bench" in Plex Sans and a dot in the tab. Bring both in line. The board may not fetch a font for a logo, so the wordmark ships as outlines: one path per letter on a 1000-unit em, filled with currentColor so Night and Daylight each get their own ink and the mark never wears a colour that means state. --logo-h is the single number that sizes it. The tab icon is the wordmark's own b on the accent tile it already had, reusing the b's outline string character for character. Nothing beside it moves: the mono path line still sits on the wordmark's baseline, at the design's 11px, and the header's padding, switcher and chips are untouched. Co-Authored-By: Claude Opus 5 --- manager/core/board.html | 31 ++++++- tests/test_header_logo.py | 169 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 tests/test_header_logo.py diff --git a/manager/core/board.html b/manager/core/board.html index ddcbc9e..fbc07dc 100644 --- a/manager/core/board.html +++ b/manager/core/board.html @@ -6,7 +6,10 @@ bench - + + @@ -23,6 +26,8 @@ --on-accent:#0a161b; --on-calm:#141a10; --shadow:0 10px 24px -18px rgba(0,0,0,.9); --pad:14px; --gap:10px; --radius:10px; --col:296px; --col-min:240px; + /* the wordmark's b-height — the one number that sizes the logo */ + --logo-h:14px; --sans:'IBM Plex Sans',system-ui,sans-serif; --mono:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace; } @@ -74,8 +79,13 @@ display:flex;align-items:center;gap:14px;padding:10px 18px;flex-wrap:wrap; background:var(--canvas);border-bottom:1px solid var(--border); } - .brand{display:flex;align-items:baseline;gap:10px} - .brand b{font-size:15px;font-weight:600;letter-spacing:-.01em} + /* The word is the logo — "bench" set in Zilla Slab SemiBold, tracked + -.015em. It ships as outlines, not text: this page may not fetch a font + for it, and outlines can never fall back to something else. currentColor + gives it the theme's own ink, so it is never a colour that means state, + and --logo-h scales it in one place rather than per theme. */ + .brand{display:flex;align-items:baseline;gap:11px} + .brand .mark{height:var(--logo-h);width:auto;fill:currentColor;flex:none} .brand .path{font-family:var(--mono);font-size:11.5px;color:var(--dim)} .views{display:flex;gap:2px;padding:3px;background:var(--sunken);border:1px solid var(--border-soft);border-radius:8px} .views button{padding:5px 12px;border:1px solid transparent;border-radius:6px;font-size:12.5px;font-weight:500;color:var(--muted)} @@ -476,7 +486,20 @@
-
Bench
+ +
+ + + + + + + + +
", self.html, re.DOTALL) + self.assertIsNotNone(header, "board.html lost its header") + order = re.findall(r'id="(views|syncchip|livechip|themebtn|refresh)"', + header.group(0)) + self.assertEqual(order, ["views", "syncchip", "livechip", + "themebtn", "refresh"]) + + +if __name__ == "__main__": + unittest.main()