Skip to content

Commit 7935b97

Browse files
ccross2claude
andcommitted
brand: integrate v3 system — nav mark, peak accent CTAs, OG regeneration
Wire the hexagonal knot mark into Nav.svelte (inline SVG, currentColor theme-aware), add .btn-peak CSS class using --accent-peak token, apply peak accent to awakening-moment CTAs (READ THE CODEX on home + Esver, EXPLORE THE STACK on Codex page). Regenerate OG image. Update CLAUDE.md with design decisions, trade-offs, and remaining work. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c68b171 commit 7935b97

File tree

7 files changed

+112
-18
lines changed

7 files changed

+112
-18
lines changed

CLAUDE.md

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -158,14 +158,15 @@ Reusable Svelte components in `src/lib/`:
158158
| `PillarList.svelte` | label, pillars[] | Panel-bordered pillars with violet number badges |
159159
| `CtaSection.svelte` | title, body, actions[] | Panel-framed CTA section |
160160
| `StatusBar.svelte` | (none) | Bottom status bar: version, operational status, copyright |
161-
| `Nav.svelte` | theme, onToggleTheme | Top nav with `//` separators, `SYS:LIGHT`/`SYS:DARK` toggle |
161+
| `Nav.svelte` | theme, onToggleTheme | Top nav with hexagonal knot mark, `//` separators, `SYS:LIGHT`/`SYS:DARK` toggle |
162162

163163
**Product pages** use all four main components with zero local CSS (except Esver's launch briefing form). **Home/Ecosystem** retain unique layouts but use design tokens and panel classes throughout.
164164

165165
### Rules
166166

167167
- Never add a second typeface
168-
- Violet accent (`--accent`) is used sparingly: active nav state, pillar numbers, tags, blockquote borders, hover states, status dot
168+
- Violet accent (`--accent`) is used sparingly: active nav state, nav mark, pillar numbers, tags, blockquote borders, hover states, status dot
169+
- Peak accent (`--accent-peak`) is reserved for awakening-moment CTAs only (`.btn-peak`). Max 1 per viewport. Currently on: "READ THE CODEX" (home, Esver), "EXPLORE THE STACK →" (Codex)
169170
- All color values must use theme-aware CSS variables — never hardcode colors
170171
- All transitions: `var(--transition-fast)` (0.15s) or `var(--transition-slow)` (0.4s)
171172
- All sections have opaque `var(--bg)` backgrounds (no transparent backgrounds)
@@ -346,11 +347,8 @@ The original site was pure monochrome (black/white) with a Three.js 3D wireframe
346347
- No blog platform for content launch strategy
347348
- `esver.computer` has no standalone landing page
348349
- MrHaven SDK not yet documented
349-
- OG image uses static bone palette — needs regeneration with new color system
350350
- Glyph animations are CSS-only — no scroll-linked parallax or mouse interaction
351351
- `AsciiArt.svelte` and `EsperCrystal.svelte` are created but unused (superseded by HeroGlyph approach) — candidates for cleanup
352-
- Nav does not yet use the hexagonal knot mark (still text-only "SOVREN" wordmark)
353-
- `--accent-peak` token defined but not yet applied to any CTA components
354352

355353
### Component Inventory (new in redesign)
356354
| Component | Purpose | Status |
@@ -390,12 +388,11 @@ The site had no logo mark (text-only "SOVREN" wordmark), the dark mode was a bro
390388
- Mark is infinitely scalable (SVG), works from 16px favicon to print
391389

392390
### Known Limitations
393-
- Mark not yet integrated into site Nav (still text-only wordmark)
394-
- `--accent-peak` defined but not yet wired to any CTA components
395-
- Dark mode visual QA not yet done — tokens landed, browser testing needed
396-
- OG image not yet regenerated with new palette
391+
- Dark mode visual QA not yet done — tokens landed, mark + peak CTAs wired, browser testing needed
397392
- X/Twitter banner text rendering uses fallback font (not Geist Mono) — cosmetic only
398393
- Brand kit PNGs are rasterized from SVG; re-export if SVG sources change
394+
- OG image does not include hexagonal knot mark (satori doesn't support inline SVG elements; would require data URI or different pipeline)
395+
- Nav mark uses `stroke-dasharray` Celtic knot weave which may render slightly differently across browsers at 20px — visually verified in build but not cross-browser tested
399396

400397
### Files Added
401398
| File | Purpose |
@@ -412,6 +409,36 @@ The site had no logo mark (text-only "SOVREN" wordmark), the dark mode was a bro
412409
| `brand/preview.html` | Brand kit reference — all variants, scale tests, nav mockups |
413410
| `brand/color-study.html` | Color theory rationale — emotional arc, text warmth, token system |
414411

412+
## Design Decisions (2026-03-18 Brand v3 Integration)
413+
414+
### Rationale
415+
Brand system v3 shipped tokens and assets (c68b171) but nothing in the site consumed them — the nav was still text-only, CTAs used `--accent` not `--accent-peak`, and the OG image hadn't been regenerated. This integration wires v3 into every visible surface.
416+
417+
### What Changed
418+
1. **Nav mark** — Hexagonal knot SVG inlined in `Nav.svelte` before "SOVREN" text. Uses `currentColor` inheriting from a `.nav-mark` class colored `var(--accent)`, so it theme-swaps automatically. Flexbox layout with `gap: var(--space-sm)`.
419+
2. **`.btn-peak` CSS class** — New button variant in `app.css` that mirrors `.btn-primary` structure (border, fill animation via `::before` pseudo-element) but uses `--accent-peak` for border, text, and fill. Hover inverts to `var(--bg)` text on peak-colored background.
420+
3. **Peak CTAs on awakening moments** — "READ THE CODEX" (home + Esver pages) and "EXPLORE THE STACK →" (Codex page) now use `.btn-peak`. Functional CTAs ("SUBSCRIBE", "VIEW ON GITHUB", "LAUNCH APP") remain `.btn-primary`.
421+
4. **CtaSection component** — Added `'peak'` as a recognized `style` prop value alongside `'secondary'`.
422+
5. **OG image regenerated**`npm run generate-og` re-rendered the PNG from current palette constants (which already matched light-mode tokens, so no visual change — but the file is now freshly built).
423+
6. **Legacy static assets**`og-image.svg` and `x-banner.svg` were already deleted in a prior commit; confirmed absent.
424+
425+
### Trade-offs
426+
- **Inline SVG in Nav vs `<img>` tag** — Inline SVG enables `currentColor` theme-awareness without extra HTTP request, but adds ~1.2KB to the Nav component markup. At 20px render size the Celtic knot weave is decorative rather than legible, but it provides brand recognition at a glance.
427+
- **Separate `.btn-peak` class vs extending `.btn-primary`** — Could have used a modifier class (`.btn-primary.btn-peak`) to avoid duplicating the base button styles. Chose a standalone class for clarity and to avoid specificity issues. The duplication is ~15 lines of CSS.
428+
- **Peak accent on 3 CTAs** — The brand system specifies "max 1 per viewport." These 3 CTAs are on different pages, so the constraint is satisfied. If future pages add more peak CTAs, this rule should be enforced.
429+
- **OG image without mark** — Satori (the OG image generator) doesn't support inline SVG elements natively. Adding the mark would require a data URI or a different rendering pipeline (Playwright screenshot, etc.). The current schematic layout is clean without it.
430+
431+
### Expected Benefits
432+
- Every page now reflects the v3 brand identity — mark in nav, peak accent on doctrine CTAs
433+
- Dark mode gets full visual coherence: violet mark + violet-bordered peak buttons on violet-black background
434+
- The emotional arc (environment → accent → peak) is now structurally enforced in the CSS, not just documented
435+
436+
### Known Limitations
437+
- Nav mark at 20px may lose Celtic knot weave detail — the over/under crossings are very small. Cross-browser rendering of `stroke-dasharray` at this scale not yet tested.
438+
- Dark mode visual QA still needed — all tokens and components are wired but not browser-tested together
439+
- OG image doesn't include the mark (satori limitation)
440+
- `.btn-peak` duplicates `.btn-primary` base styles — acceptable at current scale, but if more button variants emerge, consider a shared base class
441+
415442
## Backlog (external systems — not actionable from this repo)
416443

417444
These require access to external dashboards, registrars, or depend on work that doesn't exist yet:
@@ -422,14 +449,12 @@ These require access to external dashboards, registrars, or depend on work that
422449
- MrHaven SDK section on the MrHaven page (blocked on SDK docs)
423450
- Cloudflare Transform Rules for CDN-level security headers (see `SECURITY.md`)
424451
- Clean up unused components (AsciiArt.svelte, EsperCrystal.svelte)
425-
- Dark mode visual QA session — glyphs, panels, dot grid against new violet atmosphere tokens (2026-03-18 color system landed, QA not yet done)
426-
- Integrate hexagonal knot mark into Nav.svelte (replace "SOVREN" text-only wordmark with mark + text lockup)
427-
- Apply `--accent-peak` to CTA buttons site-wide (currently CTAs use `--accent`, peak reserved for "Awaken yours" moments)
428-
- Regenerate OG image (`npm run generate-og`) to reflect new color system
452+
- Dark mode visual QA session — glyphs, panels, dot grid, nav mark, peak CTAs against violet atmosphere tokens (2026-03-18 all wired, QA not yet done)
429453
- Update X profiles with new banner/profile assets (PNGs ready in `brand/`)
430454
- Update `@TheCesarCross` bio: "Augmentum OS" → "Esver OS"
431455

432456
### Completed
457+
- [x] Brand v3 integration — nav mark, `.btn-peak` CTA class, peak accent on awakening CTAs, OG image regenerated (2026-03-18)
433458
- [x] Brand system v3 — hexagonal knot mark, violet atmosphere dark mode, peak state accent, warm text (2026-03-18)
434459
- [x] Favicon SVG updated to hexagonal knot on violet-black (2026-03-18)
435460
- [x] Dark mode CSS tokens rewritten — violet-tinted backgrounds, borders, warm off-white text (2026-03-18)

src/app.css

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,43 @@ a {
314314
transform-origin: left;
315315
}
316316

317+
.btn-peak {
318+
display: inline-block;
319+
font-family: var(--font-mono);
320+
font-size: var(--fs-btn);
321+
font-weight: var(--fw-bold);
322+
letter-spacing: var(--ls-wider);
323+
padding: var(--btn-pad);
324+
border: 1px solid var(--accent-peak);
325+
background: transparent;
326+
color: var(--accent-peak);
327+
text-decoration: none;
328+
text-transform: uppercase;
329+
transition: all var(--transition-slow);
330+
position: relative;
331+
overflow: hidden;
332+
}
333+
334+
.btn-peak::before {
335+
content: '';
336+
position: absolute;
337+
top: 0; left: 0; right: 0; bottom: 0;
338+
background: var(--accent-peak);
339+
transform: scaleX(0);
340+
transform-origin: right;
341+
transition: transform var(--transition-slow);
342+
z-index: -1;
343+
}
344+
345+
.btn-peak:hover {
346+
color: var(--bg);
347+
}
348+
349+
.btn-peak:hover::before {
350+
transform: scaleX(1);
351+
transform-origin: left;
352+
}
353+
317354
.btn-secondary {
318355
display: inline-block;
319356
font-family: var(--font-mono);

src/lib/CtaSection.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
{#each actions as a}
1919
<a
2020
href={a.href}
21-
class={a.style === 'secondary' ? 'btn-secondary' : 'btn-primary'}
21+
class={a.style === 'secondary' ? 'btn-secondary' : a.style === 'peak' ? 'btn-peak' : 'btn-primary'}
2222
target={a.external ? '_blank' : undefined}
2323
rel={a.external ? 'noreferrer' : undefined}
2424
>

src/lib/Nav.svelte

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,30 @@
1515

1616
<nav aria-label="Primary">
1717
<div class="nav-inner">
18-
<a href="/" class="wordmark" on:click={close}>SOVREN</a>
18+
<a href="/" class="wordmark" on:click={close}>
19+
<svg class="nav-mark" viewBox="0 0 512 512" aria-hidden="true">
20+
<g fill="none" stroke="currentColor" stroke-width="16" stroke-linecap="butt">
21+
<line x1="256" y1="56" x2="429.21" y2="356" stroke-dasharray="218.94 24 103.47"/>
22+
<line x1="429.21" y1="356" x2="82.79" y2="356" stroke-dasharray="218.94 24 103.47"/>
23+
<line x1="82.79" y1="356" x2="256" y2="56" stroke-dasharray="218.94 24 103.47"/>
24+
<line x1="429.21" y1="156" x2="256" y2="456" stroke-dasharray="218.94 24 103.47"/>
25+
<line x1="256" y1="456" x2="82.79" y2="156" stroke-dasharray="218.94 24 103.47"/>
26+
<line x1="82.79" y1="156" x2="429.21" y2="156" stroke-dasharray="218.94 24 103.47"/>
27+
</g>
28+
<polygon points="256,56 429.21,156 429.21,356 256,456 82.79,356 82.79,156"
29+
fill="none" stroke="currentColor" stroke-width="16"
30+
stroke-linejoin="miter" stroke-miterlimit="4"/>
31+
<g fill="none" stroke="currentColor" stroke-width="16" stroke-linecap="butt">
32+
<line x1="298.74" y1="130.01" x2="328.75" y2="181.97"/>
33+
<line x1="343.75" y1="356" x2="283.74" y2="356"/>
34+
<line x1="125.53" y1="281.99" x2="155.54" y2="230.03"/>
35+
<line x1="386.47" y1="230.01" x2="356.46" y2="281.97"/>
36+
<line x1="213.26" y1="381.99" x2="183.25" y2="330.03"/>
37+
<line x1="168.25" y1="156" x2="228.26" y2="156"/>
38+
</g>
39+
</svg>
40+
SOVREN
41+
</a>
1942

2043
<div class="nav-links" class:open={menuOpen}>
2144
<span class="sep">//</span>
@@ -65,13 +88,22 @@
6588
}
6689
6790
.wordmark {
91+
display: flex;
92+
align-items: center;
93+
gap: var(--space-sm);
6894
font-size: var(--fs-wordmark);
6995
font-weight: var(--fw-bold);
7096
letter-spacing: var(--ls-wider);
7197
color: var(--text-primary);
7298
text-decoration: none;
7399
}
74100
101+
.nav-mark {
102+
width: 20px;
103+
height: 20px;
104+
color: var(--accent);
105+
}
106+
75107
.nav-actions {
76108
display: flex;
77109
align-items: center;

src/routes/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
</h2>
112112
<div class="thesis-foot">
113113
<p>We build infrastructure for operators who refuse to rent their own stack. Sovereign compute, local identity, and programmable capital — UX, privacy, and security without compromise.</p>
114-
<a href="/ecosystem" class="btn-primary">READ THE CODEX</a>
114+
<a href="/ecosystem" class="btn-peak">READ THE CODEX</a>
115115
</div>
116116
</div>
117117
</section>

src/routes/ecosystem/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
<div class="closing-inner panel--strong reveal" use:reveal>
104104
<h2>ONE OPERATOR.<br />TOTAL AUTHORITY.</h2>
105105
<p>The Sovren Stack is unified sovereign infrastructure built on a single commitment: UX, privacy, and security without compromise at every layer. Esver OS is the command center — voice-ready, biometric-secured, AI-augmented, declaratively configured. Visage is the identity primitive — your face, verified on your hardware, never leaving it. Mr. Haven is the capital layer — programmable rules, autonomous execution, no custodian. Together they give one operator total authority over compute, identity, and capital.</p>
106-
<a href="/" class="btn-primary">EXPLORE THE STACK →</a>
106+
<a href="/" class="btn-peak">EXPLORE THE STACK →</a>
107107
</div>
108108
</section>
109109
</main>

src/routes/esver/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115
title="AWAKEN<br />YOURS."
116116
body="Most people accept tools that watch them. You awakened one that answers only to you."
117117
actions={[
118-
{ label: 'READ THE CODEX →', href: '/ecosystem' },
118+
{ label: 'READ THE CODEX →', href: '/ecosystem', style: 'peak' },
119119
{ label: 'EXPLORE VISAGE →', href: '/visage', style: 'secondary' },
120120
]}
121121
/>

0 commit comments

Comments
 (0)