dedupe: single canonical hyperhive.svg for favicon + og + hero
mara nit on #1: the three SVGs in static/ were identical copies (md5 1108d7bd79ca…). Dropped favicon.svg + hex-mark.svg; kept hyperhive.svg as the single source. Both consumers now point at it: `<link rel="icon">` and the hero's `load_data(path="static/ hyperhive.svg", format="plain")`. Also fixed: the original `load_data(path="hex-mark.svg")` would have failed at build time anyway — Zola's `load_data` resolves from project root, so files in `static/` need the full prefix + `format="plain"` to come back as raw markup. Build was never validated locally (remote-builder unreachable from agent), so the typo would have surfaced on the operator's first `nix build`. Caught it during the dedupe pass. If a future visual divergence is wanted (simpler favicon, titled og:image), can split back into named copies then.
This commit is contained in:
parent
d3a55c5631
commit
3b4668aea8
5 changed files with 10 additions and 200 deletions
|
|
@ -31,9 +31,8 @@ templates/
|
||||||
sass/
|
sass/
|
||||||
main.scss # theme — Catppuccin Mocha + amber accent
|
main.scss # theme — Catppuccin Mocha + amber accent
|
||||||
static/
|
static/
|
||||||
favicon.svg # hyperhive hex motif (copy of dashboard branding)
|
hyperhive.svg # single canonical hex motif — favicon + og:image
|
||||||
hex-mark.svg # same SVG, used inline in the hero
|
# + inline hero (via Zola `load_data`)
|
||||||
hyperhive.svg # og:image
|
|
||||||
flake.nix # `nix build` → site dist, `nix develop` → zola shell
|
flake.nix # `nix build` → site dist, `nix develop` → zola shell
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
||||||
<svg width="300" height="300" viewBox="0 0 300 300" role="img" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<title>HyperHive</title>
|
|
||||||
<desc>HyperHive icon — hexagonal hive, amber on dark</desc>
|
|
||||||
<defs>
|
|
||||||
<clipPath id="clipH"><circle cx="150" cy="150" r="140"/></clipPath>
|
|
||||||
</defs>
|
|
||||||
|
|
||||||
<g clip-path="url(#clipH)">
|
|
||||||
<rect x="0" y="0" width="300" height="300" fill="#0a0600"/>
|
|
||||||
<g stroke="#ffb300" stroke-width="0.35" opacity="0.07">
|
|
||||||
<line x1="0" x2="300" y1="10" y2="10"/> <line x1="0" x2="300" y1="20" y2="20"/>
|
|
||||||
<line x1="0" x2="300" y1="30" y2="30"/> <line x1="0" x2="300" y1="40" y2="40"/>
|
|
||||||
<line x1="0" x2="300" y1="50" y2="50"/> <line x1="0" x2="300" y1="60" y2="60"/>
|
|
||||||
<line x1="0" x2="300" y1="70" y2="70"/> <line x1="0" x2="300" y1="80" y2="80"/>
|
|
||||||
<line x1="0" x2="300" y1="90" y2="90"/> <line x1="0" x2="300" y1="100" y2="100"/>
|
|
||||||
<line x1="0" x2="300" y1="110" y2="110"/> <line x1="0" x2="300" y1="120" y2="120"/>
|
|
||||||
<line x1="0" x2="300" y1="130" y2="130"/> <line x1="0" x2="300" y1="140" y2="140"/>
|
|
||||||
<line x1="0" x2="300" y1="150" y2="150"/> <line x1="0" x2="300" y1="160" y2="160"/>
|
|
||||||
<line x1="0" x2="300" y1="170" y2="170"/> <line x1="0" x2="300" y1="180" y2="180"/>
|
|
||||||
<line x1="0" x2="300" y1="190" y2="190"/> <line x1="0" x2="300" y1="200" y2="200"/>
|
|
||||||
<line x1="0" x2="300" y1="210" y2="210"/> <line x1="0" x2="300" y1="220" y2="220"/>
|
|
||||||
<line x1="0" x2="300" y1="230" y2="230"/> <line x1="0" x2="300" y1="240" y2="240"/>
|
|
||||||
<line x1="0" x2="300" y1="250" y2="250"/> <line x1="0" x2="300" y1="260" y2="260"/>
|
|
||||||
<line x1="0" x2="300" y1="270" y2="270"/> <line x1="0" x2="300" y1="280" y2="280"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<circle cx="150" cy="150" r="118" fill="none" stroke="#ffb300" stroke-width="1" opacity="0.4"/>
|
|
||||||
<circle cx="150" cy="150" r="104" fill="none" stroke="#ff8f00" stroke-width="0.5" opacity="0.25" stroke-dasharray="4 6"/>
|
|
||||||
|
|
||||||
<!-- RING 2 — 6 between-axis hexes, centered on (150,150) instead of (170,170) -->
|
|
||||||
<g fill="#0e0800" stroke="#ffb300" stroke-width="0.7" opacity="0.4">
|
|
||||||
<polygon points="254,105 241,127.5 215,127.5 202,105 215,82.5 241,82.5"/>
|
|
||||||
<polygon points="98,105 85,127.5 59,127.5 46,105 59,82.5 85,82.5"/>
|
|
||||||
<polygon points="176,60 163,82.5 137,82.5 124,60 137,37.5 163,37.5"/>
|
|
||||||
<polygon points="254,195 241,217.5 215,217.5 202,195 215,172.5 241,172.5"/>
|
|
||||||
<polygon points="98,195 85,217.5 59,217.5 46,195 59,172.5 85,172.5"/>
|
|
||||||
<polygon points="176,240 163,262.5 137,262.5 124,240 137,217.5 163,217.5"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- RING 1 — 6 hexes -->
|
|
||||||
<g fill="#150c00" stroke="#ffb300" stroke-width="1.2" opacity="0.8">
|
|
||||||
<polygon points="228,150 215,172.5 189,172.5 176,150 189,127.5 215,127.5"/>
|
|
||||||
<polygon points="202,105 189,127.5 163,127.5 150,105 163,82.5 189,82.5"/>
|
|
||||||
<polygon points="150,105 137,127.5 111,127.5 98,105 111,82.5 137,82.5"/>
|
|
||||||
<polygon points="124,150 111,172.5 85,172.5 72,150 85,127.5 111,127.5"/>
|
|
||||||
<polygon points="150,195 137,217.5 111,217.5 98,195 111,172.5 137,172.5"/>
|
|
||||||
<polygon points="202,195 189,217.5 163,217.5 150,195 163,172.5 189,172.5"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- CENTER hex -->
|
|
||||||
<polygon points="176,150 163,172.5 137,172.5 124,150 137,127.5 163,127.5"
|
|
||||||
fill="#1a0f00" stroke="#ffb300" stroke-width="1.8"/>
|
|
||||||
|
|
||||||
<!-- connections -->
|
|
||||||
<g stroke="#ffb300" stroke-width="1" opacity="0.6">
|
|
||||||
<line x1="176" y1="150" x2="202" y2="150"/>
|
|
||||||
<line x1="124" y1="150" x2="98" y2="150"/>
|
|
||||||
<line x1="163" y1="128" x2="176" y2="105"/>
|
|
||||||
<line x1="137" y1="128" x2="124" y2="105"/>
|
|
||||||
<line x1="163" y1="173" x2="176" y2="195"/>
|
|
||||||
<line x1="137" y1="173" x2="124" y2="195"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- CENTER node -->
|
|
||||||
<circle cx="150" cy="150" r="10" fill="#ffb300" opacity="0.95"/>
|
|
||||||
<circle cx="150" cy="150" r="5" fill="#0a0600"/>
|
|
||||||
|
|
||||||
<!-- ring 1 nodes -->
|
|
||||||
<g fill="#ff8f00" opacity="0.9">
|
|
||||||
<circle cx="202" cy="150" r="6"/>
|
|
||||||
<circle cx="176" cy="105" r="6"/>
|
|
||||||
<circle cx="124" cy="105" r="6"/>
|
|
||||||
<circle cx="98" cy="150" r="6"/>
|
|
||||||
<circle cx="124" cy="195" r="6"/>
|
|
||||||
<circle cx="176" cy="195" r="6"/>
|
|
||||||
</g>
|
|
||||||
<g fill="#0a0600">
|
|
||||||
<circle cx="202" cy="150" r="2.5"/>
|
|
||||||
<circle cx="176" cy="105" r="2.5"/>
|
|
||||||
<circle cx="124" cy="105" r="2.5"/>
|
|
||||||
<circle cx="98" cy="150" r="2.5"/>
|
|
||||||
<circle cx="124" cy="195" r="2.5"/>
|
|
||||||
<circle cx="176" cy="195" r="2.5"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<rect x="0" y="143" width="300" height="2" fill="#ffb300" opacity="0.07"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<circle cx="150" cy="150" r="140" fill="none" stroke="#ffb300" stroke-width="2.5"/>
|
|
||||||
<circle cx="150" cy="150" r="145" fill="none" stroke="#ff8f00" stroke-width="0.5" opacity="0.4" stroke-dasharray="8 4"/>
|
|
||||||
<g stroke="#ffb300" stroke-width="1.5" fill="none" opacity="0.8">
|
|
||||||
<path d="M44,44 L20,44 L20,70"/>
|
|
||||||
<path d="M256,44 L280,44 L280,70"/>
|
|
||||||
<path d="M44,256 L20,256 L20,230"/>
|
|
||||||
<path d="M256,256 L280,256 L280,230"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.9 KiB |
|
|
@ -1,97 +0,0 @@
|
||||||
<svg width="300" height="300" viewBox="0 0 300 300" role="img" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<title>HyperHive</title>
|
|
||||||
<desc>HyperHive icon — hexagonal hive, amber on dark</desc>
|
|
||||||
<defs>
|
|
||||||
<clipPath id="clipH"><circle cx="150" cy="150" r="140"/></clipPath>
|
|
||||||
</defs>
|
|
||||||
|
|
||||||
<g clip-path="url(#clipH)">
|
|
||||||
<rect x="0" y="0" width="300" height="300" fill="#0a0600"/>
|
|
||||||
<g stroke="#ffb300" stroke-width="0.35" opacity="0.07">
|
|
||||||
<line x1="0" x2="300" y1="10" y2="10"/> <line x1="0" x2="300" y1="20" y2="20"/>
|
|
||||||
<line x1="0" x2="300" y1="30" y2="30"/> <line x1="0" x2="300" y1="40" y2="40"/>
|
|
||||||
<line x1="0" x2="300" y1="50" y2="50"/> <line x1="0" x2="300" y1="60" y2="60"/>
|
|
||||||
<line x1="0" x2="300" y1="70" y2="70"/> <line x1="0" x2="300" y1="80" y2="80"/>
|
|
||||||
<line x1="0" x2="300" y1="90" y2="90"/> <line x1="0" x2="300" y1="100" y2="100"/>
|
|
||||||
<line x1="0" x2="300" y1="110" y2="110"/> <line x1="0" x2="300" y1="120" y2="120"/>
|
|
||||||
<line x1="0" x2="300" y1="130" y2="130"/> <line x1="0" x2="300" y1="140" y2="140"/>
|
|
||||||
<line x1="0" x2="300" y1="150" y2="150"/> <line x1="0" x2="300" y1="160" y2="160"/>
|
|
||||||
<line x1="0" x2="300" y1="170" y2="170"/> <line x1="0" x2="300" y1="180" y2="180"/>
|
|
||||||
<line x1="0" x2="300" y1="190" y2="190"/> <line x1="0" x2="300" y1="200" y2="200"/>
|
|
||||||
<line x1="0" x2="300" y1="210" y2="210"/> <line x1="0" x2="300" y1="220" y2="220"/>
|
|
||||||
<line x1="0" x2="300" y1="230" y2="230"/> <line x1="0" x2="300" y1="240" y2="240"/>
|
|
||||||
<line x1="0" x2="300" y1="250" y2="250"/> <line x1="0" x2="300" y1="260" y2="260"/>
|
|
||||||
<line x1="0" x2="300" y1="270" y2="270"/> <line x1="0" x2="300" y1="280" y2="280"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<circle cx="150" cy="150" r="118" fill="none" stroke="#ffb300" stroke-width="1" opacity="0.4"/>
|
|
||||||
<circle cx="150" cy="150" r="104" fill="none" stroke="#ff8f00" stroke-width="0.5" opacity="0.25" stroke-dasharray="4 6"/>
|
|
||||||
|
|
||||||
<!-- RING 2 — 6 between-axis hexes, centered on (150,150) instead of (170,170) -->
|
|
||||||
<g fill="#0e0800" stroke="#ffb300" stroke-width="0.7" opacity="0.4">
|
|
||||||
<polygon points="254,105 241,127.5 215,127.5 202,105 215,82.5 241,82.5"/>
|
|
||||||
<polygon points="98,105 85,127.5 59,127.5 46,105 59,82.5 85,82.5"/>
|
|
||||||
<polygon points="176,60 163,82.5 137,82.5 124,60 137,37.5 163,37.5"/>
|
|
||||||
<polygon points="254,195 241,217.5 215,217.5 202,195 215,172.5 241,172.5"/>
|
|
||||||
<polygon points="98,195 85,217.5 59,217.5 46,195 59,172.5 85,172.5"/>
|
|
||||||
<polygon points="176,240 163,262.5 137,262.5 124,240 137,217.5 163,217.5"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- RING 1 — 6 hexes -->
|
|
||||||
<g fill="#150c00" stroke="#ffb300" stroke-width="1.2" opacity="0.8">
|
|
||||||
<polygon points="228,150 215,172.5 189,172.5 176,150 189,127.5 215,127.5"/>
|
|
||||||
<polygon points="202,105 189,127.5 163,127.5 150,105 163,82.5 189,82.5"/>
|
|
||||||
<polygon points="150,105 137,127.5 111,127.5 98,105 111,82.5 137,82.5"/>
|
|
||||||
<polygon points="124,150 111,172.5 85,172.5 72,150 85,127.5 111,127.5"/>
|
|
||||||
<polygon points="150,195 137,217.5 111,217.5 98,195 111,172.5 137,172.5"/>
|
|
||||||
<polygon points="202,195 189,217.5 163,217.5 150,195 163,172.5 189,172.5"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- CENTER hex -->
|
|
||||||
<polygon points="176,150 163,172.5 137,172.5 124,150 137,127.5 163,127.5"
|
|
||||||
fill="#1a0f00" stroke="#ffb300" stroke-width="1.8"/>
|
|
||||||
|
|
||||||
<!-- connections -->
|
|
||||||
<g stroke="#ffb300" stroke-width="1" opacity="0.6">
|
|
||||||
<line x1="176" y1="150" x2="202" y2="150"/>
|
|
||||||
<line x1="124" y1="150" x2="98" y2="150"/>
|
|
||||||
<line x1="163" y1="128" x2="176" y2="105"/>
|
|
||||||
<line x1="137" y1="128" x2="124" y2="105"/>
|
|
||||||
<line x1="163" y1="173" x2="176" y2="195"/>
|
|
||||||
<line x1="137" y1="173" x2="124" y2="195"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<!-- CENTER node -->
|
|
||||||
<circle cx="150" cy="150" r="10" fill="#ffb300" opacity="0.95"/>
|
|
||||||
<circle cx="150" cy="150" r="5" fill="#0a0600"/>
|
|
||||||
|
|
||||||
<!-- ring 1 nodes -->
|
|
||||||
<g fill="#ff8f00" opacity="0.9">
|
|
||||||
<circle cx="202" cy="150" r="6"/>
|
|
||||||
<circle cx="176" cy="105" r="6"/>
|
|
||||||
<circle cx="124" cy="105" r="6"/>
|
|
||||||
<circle cx="98" cy="150" r="6"/>
|
|
||||||
<circle cx="124" cy="195" r="6"/>
|
|
||||||
<circle cx="176" cy="195" r="6"/>
|
|
||||||
</g>
|
|
||||||
<g fill="#0a0600">
|
|
||||||
<circle cx="202" cy="150" r="2.5"/>
|
|
||||||
<circle cx="176" cy="105" r="2.5"/>
|
|
||||||
<circle cx="124" cy="105" r="2.5"/>
|
|
||||||
<circle cx="98" cy="150" r="2.5"/>
|
|
||||||
<circle cx="124" cy="195" r="2.5"/>
|
|
||||||
<circle cx="176" cy="195" r="2.5"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<rect x="0" y="143" width="300" height="2" fill="#ffb300" opacity="0.07"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<circle cx="150" cy="150" r="140" fill="none" stroke="#ffb300" stroke-width="2.5"/>
|
|
||||||
<circle cx="150" cy="150" r="145" fill="none" stroke="#ff8f00" stroke-width="0.5" opacity="0.4" stroke-dasharray="8 4"/>
|
|
||||||
<g stroke="#ffb300" stroke-width="1.5" fill="none" opacity="0.8">
|
|
||||||
<path d="M44,44 L20,44 L20,70"/>
|
|
||||||
<path d="M256,44 L280,44 L280,70"/>
|
|
||||||
<path d="M44,256 L20,256 L20,230"/>
|
|
||||||
<path d="M256,256 L280,256 L280,230"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.9 KiB |
|
|
@ -14,7 +14,7 @@
|
||||||
<meta property="og:image" content="{{ get_url(path='hyperhive.svg') }}">
|
<meta property="og:image" content="{{ get_url(path='hyperhive.svg') }}">
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
|
||||||
<link rel="icon" type="image/svg+xml" href="{{ get_url(path='favicon.svg') }}">
|
<link rel="icon" type="image/svg+xml" href="{{ get_url(path='hyperhive.svg') }}">
|
||||||
<link rel="stylesheet" href="{{ get_url(path='main.css') }}">
|
<link rel="stylesheet" href="{{ get_url(path='main.css') }}">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,13 @@
|
||||||
<div class="hero-art" aria-hidden="true">
|
<div class="hero-art" aria-hidden="true">
|
||||||
{# Inline so the SVG inherits the page's font + can be styled
|
{# Inline so the SVG inherits the page's font + can be styled
|
||||||
(hover pulse animation on the rings). Same source as the
|
(hover pulse animation on the rings). Same source as the
|
||||||
dashboard branding/hyperhive.svg. #}
|
dashboard branding/hyperhive.svg — single canonical copy at
|
||||||
{% set hex_svg = load_data(path="hex-mark.svg") %}
|
static/hyperhive.svg drives favicon + og:image + hero inline.
|
||||||
|
If a future visual divergence is wanted (smaller favicon,
|
||||||
|
titled og:image), split into named copies then.
|
||||||
|
`format="plain"` returns the raw markup string instead of
|
||||||
|
parsing the SVG as XML. #}
|
||||||
|
{% set hex_svg = load_data(path="static/hyperhive.svg", format="plain") %}
|
||||||
{{ hex_svg | safe }}
|
{{ hex_svg | safe }}
|
||||||
</div>
|
</div>
|
||||||
<div class="hero-text">
|
<div class="hero-text">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue