Compare commits

..

2 Commits

Author SHA1 Message Date
will 7c5cf2fa68 Add gradient header banner with brand mark
deploy / deploy (push) Successful in 9s
Header background is now a dark-ink-to-accent gradient instead of a
flat color, with the mountain/sun mark inlined next to the wordmark.
Text stays within the ink-dominant zone of the gradient so contrast
holds; dark mode gets its own ink value distinct from --bg so the
band doesn't blend into the page.
2026-08-27 07:42:47 -04:00
will 5eeb140aaf Add favicon: mountain/horizon/sun mark
SVG mark plus PNG fallbacks (32x32, apple-touch-icon), wired into
the page head. Reuses the site's existing accent/ink colors.
2026-08-27 07:42:42 -04:00
6 changed files with 54 additions and 8 deletions
+36 -7
View File
@@ -35,6 +35,15 @@
--font-heading: "Fraunces", Georgia, "Times New Roman", serif; --font-heading: "Fraunces", Georgia, "Times New Roman", serif;
--font-body: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; --font-body: "Work Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
/* Header banner: a fixed dark "ink" base regardless of site theme, with
the accent only showing up as a glow near the bottom edge — keeps the
gradient sunset-y without ever sitting text on top of the accent
color (white-on-accent fails contrast, see --cta note above). */
--header-ink: #241f19;
--header-accent: var(--accent);
--header-fg: #fbf8f3;
--header-fg-muted: rgba(251, 248, 243, 0.72);
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
@@ -49,6 +58,10 @@
--accent-fg: #1a1611; --accent-fg: #1a1611;
--cta: #f0834f; --cta: #f0834f;
--cta-fg: #1a1611; --cta-fg: #1a1611;
/* Distinctly darker than dark-mode --bg (#1a1611), so the band still
reads as a separate header instead of blending into the page. */
--header-ink: #100d0a;
} }
} }
@@ -101,15 +114,21 @@ h1, h2, h3 {
h1 { font-size: 2.25rem; } h1 { font-size: 2.25rem; }
h2 { font-size: 1.5rem; margin-top: 3rem; } h2 { font-size: 1.5rem; margin-top: 3rem; }
/* Header: plain wordmark + nav, no color band — the accent is saved for /* Header: a sunset gradient band — dark ink for most of the height (where
links and buttons rather than spent on chrome. */ the wordmark/nav text sits, so contrast stays solid) easing into the
accent color only at the very bottom edge, behind the mark's sun. */
header.site { header.site {
border-bottom: 1px solid var(--border); background: linear-gradient(
to bottom,
var(--header-ink) 0%,
var(--header-ink) 70%,
var(--header-accent) 100%
);
} }
header.site .inner { header.site .inner {
max-width: var(--max-width); max-width: var(--max-width);
margin: 0 auto; margin: 0 auto;
padding: 1.5rem; padding: 1.5rem 1.5rem 2.5rem;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
@@ -117,24 +136,34 @@ header.site .inner {
flex-wrap: wrap; flex-wrap: wrap;
} }
header.site .brand { header.site .brand {
display: flex;
align-items: center;
gap: 0.6rem;
font-family: var(--font-heading); font-family: var(--font-heading);
font-weight: 600; font-weight: 600;
font-size: 1.25rem; font-size: 1.25rem;
color: var(--fg); color: var(--header-fg);
text-decoration: none; text-decoration: none;
} }
header.site .brand-mark {
width: 1.75rem;
height: 1.75rem;
flex-shrink: 0;
}
header.site .brand-mark-peak { fill: var(--header-fg); }
header.site .brand-mark-sun { fill: var(--header-accent); }
header.site nav { header.site nav {
display: flex; display: flex;
gap: 1.5rem; gap: 1.5rem;
} }
header.site nav a { header.site nav a {
color: var(--fg-muted); color: var(--header-fg-muted);
text-decoration: none; text-decoration: none;
font-size: 0.95rem; font-size: 0.95rem;
} }
header.site nav a:hover, header.site nav a:hover,
header.site nav a[aria-current="page"] { header.site nav a[aria-current="page"] {
color: var(--cta); color: var(--header-fg);
} }
main { main {
+3
View File
@@ -6,6 +6,9 @@
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }}</title> <title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }}</title>
<meta name="description" content="{{ .Site.Params.description }}"> <meta name="description" content="{{ .Site.Params.description }}">
<link rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" href="{{ "index.xml" | absURL }}"> <link rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" href="{{ "index.xml" | absURL }}">
<link rel="icon" type="image/svg+xml" href="{{ "favicon.svg" | absURL }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon-32.png" | absURL }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{ "apple-touch-icon.png" | absURL }}">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600&family=Work+Sans:wght@400;500;600&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600&family=Work+Sans:wght@400;500;600&display=swap">
+9 -1
View File
@@ -1,6 +1,14 @@
<header class="site"> <header class="site">
<div class="inner"> <div class="inner">
<a class="brand" href="/">{{ .Site.Title }}</a> <a class="brand" href="/">
<svg class="brand-mark" viewBox="0 0 32 32" aria-hidden="true" focusable="false">
<circle class="brand-mark-sun" cx="17" cy="16" r="5.5"/>
<polygon class="brand-mark-peak" points="4,26 14,10 22,26"/>
<polygon class="brand-mark-peak" points="12,26 22,13 30,26"/>
<rect class="brand-mark-peak" x="0" y="25" width="32" height="2"/>
</svg>
<span>{{ .Site.Title }}</span>
</a>
<nav aria-label="Primary"> <nav aria-label="Primary">
{{ range .Site.Menus.main }} {{ range .Site.Menus.main }}
<a href="{{ .URL }}"{{ if $.IsMenuCurrent "main" . }} aria-current="page"{{ end }}>{{ .Name }}</a> <a href="{{ .URL }}"{{ if $.IsMenuCurrent "main" . }} aria-current="page"{{ end }}>{{ .Name }}</a>
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<circle cx="17" cy="16" r="5.5" fill="#d9531e"/>
<polygon points="4,26 14,10 22,26" fill="#241f19"/>
<polygon points="12,26 22,13 30,26" fill="#241f19"/>
<rect x="0" y="25" width="32" height="2" fill="#241f19"/>
</svg>

After

Width:  |  Height:  |  Size: 288 B