commit 606d46b07d578a038d8fc276bc96491141b918eb
parent 5c0703b2fbce80ff510c2f897a1db7710196dc4b
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Sun, 27 Sep 2026 14:59:46 -0400
Merge r10/mark-contrast — release 10 slice MC: the Found-line mark's dim lines reach 3:1 against their tile (child #6b5d47, Archilyzer #586977), every lit value stays 2:1 above them; icons, the editor favicon, the Media kit and the YouTube assets regenerated
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
16 files changed, 207 insertions(+), 25 deletions(-)
diff --git a/common/bin/brand-media.test.ts b/common/bin/brand-media.test.ts
@@ -83,6 +83,6 @@ test("umtool/report-to-video/brands/archilyzer-media.json is what --video-kit wr
muted: "#8496a2",
accent: "#5fa8a0",
amber: "#e3b15c",
- dim: "#3f4c56",
+ dim: "#586977",
});
});
diff --git a/common/lib/brand.test.ts b/common/lib/brand.test.ts
@@ -9,6 +9,8 @@ import {
ICON_PALETTES,
MARK,
MIN_ACCENT_CONTRAST,
+ MIN_MARK_DIM_CONTRAST,
+ MIN_MARK_LIT_OVER_DIM,
childIconPalette,
contrastRatio,
isAccentId,
@@ -93,14 +95,55 @@ test("contrastRatio: the sRGB curve, at the 4.5:1 boundary on white", () => {
test("bases and icon palettes are the plan's", () => {
assert.deepEqual(BASE_GROUNDS, { light: "#f3f6f7", sepia: "#f4ecd8", dark: "#0c0a08" });
- assert.deepEqual(ICON_PALETTES.archilyzer, { ground: "#151b20", dim: "#3f4c56", lit: "#e7edf1" });
+ assert.deepEqual(ICON_PALETTES.archilyzer, { ground: "#151b20", dim: "#586977", lit: "#e7edf1" });
assert.deepEqual(childIconPalette(ACCENTS.brass.onDark), {
ground: "#0c0a08",
- dim: "#3b3327",
+ dim: "#6b5d47",
lit: "#e3b15c",
});
});
+// The mark's two rules (brand.ts MIN_MARK_DIM_CONTRAST, MIN_MARK_LIT_OVER_DIM).
+// A child site can be lit by any named accent — its own, Signal when it has
+// none, or the one a reader picks, which the header mark follows — so the
+// child dim is held against all seven. The parent mark is lit in bone; the
+// Media mark's Signal on the same slate is held in brandMedia.test.ts.
+const LIT_OF: ReadonlyArray<[string, string, string]> = [
+ ...ACCENT_IDS.map((id): [string, string, string] => [`child · ${id}`, ICON_PALETTES.child.dim, ACCENTS[id].onDark]),
+ ["archilyzer · bone", ICON_PALETTES.archilyzer.dim, ICON_PALETTES.archilyzer.lit],
+];
+
+test("icon palettes: every dim line reaches 3:1 on its ground (WCAG 1.4.11)", () => {
+ assert.equal(MIN_MARK_DIM_CONTRAST, 3);
+ for (const [name, p] of Object.entries(ICON_PALETTES)) {
+ const r = contrastRatio(p.dim, p.ground);
+ assert.ok(r >= MIN_MARK_DIM_CONTRAST, `${name}: dim ${p.dim} on ${p.ground} is ${r.toFixed(2)}:1`);
+ }
+ // Pinned, so a retune shows its numbers: was 1.59 and 1.97 (2026-09-27).
+ assert.equal(contrastRatio(ICON_PALETTES.child.dim, ICON_PALETTES.child.ground).toFixed(2), "3.09");
+ assert.equal(contrastRatio(ICON_PALETTES.archilyzer.dim, ICON_PALETTES.archilyzer.ground).toFixed(2), "3.06");
+});
+
+test("icon palettes: every lit value stands 2:1 above its dim, so the found line stays found", () => {
+ assert.equal(MIN_MARK_LIT_OVER_DIM, 2);
+ for (const [name, dim, lit] of LIT_OF) {
+ const r = contrastRatio(lit, dim);
+ assert.ok(r >= MIN_MARK_LIT_OVER_DIM, `${name}: lit ${lit} over dim ${dim} is ${r.toFixed(2)}:1`);
+ }
+ // Pinned. The tightest are Vermilion and Signal, the darkest lit values.
+ const ratios = Object.fromEntries(LIT_OF.map(([name, dim, lit]) => [name, contrastRatio(lit, dim).toFixed(2)]));
+ assert.deepEqual(ratios, {
+ "child · signal": "2.31",
+ "child · brass": "3.26",
+ "child · vermilion": "2.28",
+ "child · violet": "2.74",
+ "child · sakura": "2.81",
+ "child · blue": "2.65",
+ "child · green": "3.04",
+ "archilyzer · bone": "4.80",
+ });
+});
+
test("MARK: the Found-line geometry, back to front", () => {
assert.deepEqual(
MARK.map((s) => [s.part, s.tone]),
@@ -132,11 +175,11 @@ test("MARK: the Found-line geometry, back to front", () => {
const PARENT = ICON_PALETTES.archilyzer;
const FG =
- '<rect x="112" y="128" width="288" height="44" rx="22" fill="#3f4c56"/>' +
+ '<rect x="112" y="128" width="288" height="44" rx="22" fill="#586977"/>' +
'<polygon points="112,210 172,234 112,258" fill="#e7edf1"/>' +
'<rect x="188" y="212" width="212" height="44" rx="22" fill="#e7edf1"/>' +
- '<rect x="112" y="296" width="232" height="44" rx="22" fill="#3f4c56"/>' +
- '<rect x="112" y="380" width="152" height="44" rx="22" fill="#3f4c56"/>';
+ '<rect x="112" y="296" width="232" height="44" rx="22" fill="#586977"/>' +
+ '<rect x="112" y="380" width="152" height="44" rx="22" fill="#586977"/>';
const OPEN = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">';
test("markSvg any: the rounded square", () => {
@@ -169,7 +212,7 @@ test("markSvg: a child site's lit line is its accent; colours are lowercased", (
assert.match(svg, /<polygon points="112,210 172,234 112,258" fill="#e3b15c"\/>/);
assert.match(svg, /<rect x="188" y="212" width="212" height="44" rx="22" fill="#e3b15c"\/>/);
assert.match(svg, /rx="112" fill="#0c0a08"/);
- assert.equal((svg.match(/fill="#3b3327"/g) ?? []).length, 3);
+ assert.equal((svg.match(/fill="#6b5d47"/g) ?? []).length, 3);
});
test("markSvg refuses a colour that is not #rrggbb", () => {
diff --git a/common/lib/brand.ts b/common/lib/brand.ts
@@ -143,11 +143,29 @@ export const MARK: ReadonlyArray<MarkShape> = [
export type IconPalette = { ground: string; dim: string; lit: string };
+// THE MARK'S TWO RULES, which brand.test.ts enforces on every icon palette:
+//
+// - a dim line reaches MIN_MARK_DIM_CONTRAST against its ground, the WCAG
+// 1.4.11 floor for a graphic that has to be seen at all (at 1.6:1 the three
+// dim lines vanished and the mark read as one lit line);
+// - every named lit value stands MIN_MARK_LIT_OVER_DIM above the dim, so the
+// found line still reads as THE found line.
+//
+// The two multiply to lit-on-ground, which fixes the second: with the dim at
+// 3:1, the darkest lit values (Vermilion, 7.0:1 on ink; Signal, 6.3:1 on the
+// Media slate) cannot sit more than ~2.3 and ~2.1 above any dim. 2:1 — the lit
+// line at least double the dim's luminance — is the most both palettes can
+// hold. A custom accent is fitted only to the 4.5:1 ground rule, so one at
+// that floor sits nearer its dim (~1.5:1): its hue carries the difference.
+export const MIN_MARK_DIM_CONTRAST = 3;
+export const MIN_MARK_LIT_OVER_DIM = 2;
+
// The two icon palettes. A child site's lit line is its accent's on-dark value
// (childIconPalette); the parent mark — homepage, hub, editor — is achromatic.
+// Each dim keeps its ground's hue (warm ink, slate) and sits just over 3:1.
export const ICON_PALETTES = {
- child: { ground: "#0c0a08", dim: "#3b3327" },
- archilyzer: { ground: "#151b20", dim: "#3f4c56", lit: "#e7edf1" },
+ child: { ground: "#0c0a08", dim: "#6b5d47" },
+ archilyzer: { ground: "#151b20", dim: "#586977", lit: "#e7edf1" },
} as const satisfies {
child: Omit<IconPalette, "lit">;
archilyzer: IconPalette;
diff --git a/common/lib/brandMedia.test.ts b/common/lib/brandMedia.test.ts
@@ -4,9 +4,10 @@ import { execFileSync, spawnSync } from "node:child_process";
import { readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
-import { ACCENTS, ICON_PALETTES, markSvg } from "./brand";
+import { ACCENTS, ICON_PALETTES, MIN_MARK_DIM_CONTRAST, MIN_MARK_LIT_OVER_DIM, contrastRatio, markSvg } from "./brand";
import {
MEDIA_BANNER,
+ MEDIA_FIELD_LINE,
MEDIA_MARK_PALETTE,
MEDIA_PALETTE,
MEDIA_RATIO,
@@ -32,7 +33,7 @@ test("palette: mark M2 is the parent mark's slate, lit in Signal", () => {
});
assert.deepEqual(MEDIA_PALETTE, {
ground: "#151b20",
- dim: "#3f4c56",
+ dim: "#586977",
lit: "#5fa8a0",
fg: "#e7edf1",
muted: "#8496a2",
@@ -45,6 +46,17 @@ test("palette: mark M2 is the parent mark's slate, lit in Signal", () => {
assert.equal(mediaMarkSvg(), markSvg(MEDIA_MARK_PALETTE));
});
+// brand.ts's two mark rules, on the one palette brand.test.ts does not hold:
+// Signal on the slate is the tightest lit-over-dim pair in the family.
+test("palette: mark M2's dim reaches 3:1 on the slate and Signal stands 2:1 above it", () => {
+ const { ground, dim, lit } = MEDIA_MARK_PALETTE;
+ assert.ok(contrastRatio(dim, ground) >= MIN_MARK_DIM_CONTRAST);
+ assert.ok(contrastRatio(lit, dim) >= MIN_MARK_LIT_OVER_DIM);
+ assert.equal(contrastRatio(lit, dim).toFixed(2), "2.05");
+ // The banner's field stays texture: above the ground, under the mark's dim.
+ assert.ok(contrastRatio(MEDIA_FIELD_LINE, ground) < contrastRatio(dim, ground));
+});
+
test("glyphs: the measured widths of plans/brand-and-themes.md S4 (5.334 em, 3.953 em, caps 0.686 em)", () => {
assert.equal(MEDIA_GLYPH_SOURCE.wdth, 118);
assert.deepEqual(
diff --git a/common/lib/brandMedia.ts b/common/lib/brandMedia.ts
@@ -21,7 +21,7 @@
//
// PURE: no I/O, no framework imports. The PNG side is common/bin/brand-media.ts.
-import { ACCENTS, MARK_VIEWBOX, markSvg, type IconPalette, type MarkVariant } from "./brand";
+import { ACCENTS, ICON_PALETTES, MARK_VIEWBOX, markSvg, type IconPalette, type MarkVariant } from "./brand";
import {
MEDIA_CAP_HEIGHT,
MEDIA_RUNS,
@@ -45,8 +45,8 @@ export type MediaPalette = {
};
export const MEDIA_PALETTE = {
- ground: "#151b20",
- dim: "#3f4c56",
+ ground: ICON_PALETTES.archilyzer.ground,
+ dim: ICON_PALETTES.archilyzer.dim,
lit: ACCENTS.signal.onDark,
fg: "#e7edf1",
muted: "#8496a2",
diff --git a/editor/CHANGELOG.md b/editor/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog
+## [Unreleased]
+- **The lines inside the Archilyzer mark are easier to see.** The three unlit lines of the sidebar mark and the favicon now read at 3:1 against the slate tile instead of 2:1. The Archilyzer Media mark in umtool's report videos and the YouTube channel's picture, watermark and banner use the same lighter slate.
+
## [0.9.2] - 2026-09-27
- **The homepage's Official Instances cards, and the hub's official instances, wear each site's own accent on every ground.** A card's left stripe is the accent set on the site's form, at that accent's value for the reader's ground (Light, Sepia or Dark) rather than its dark value everywhere. A site with a custom hex wears the hex, and a site with none keeps the chart colour it wore. On the hub the same colour marks the card, the scope chip, the result cards' left edge and the channel group. The homepage's growth chart, its legend and the `/stats` charts and cards draw each site in the chart colour of its accent's hue family: Brass in the chart's amber, Blue in its blue, Violet in its violet, Green in its green and Sakura in its magenta. They do not use the accents themselves, because the seven accents cannot tell five sites apart on a chart: Brass and Vermilion look alike to a red-green colour-blind reader, and Blue and Violet to nearly everyone. So a card and its chart layer are the same hue. A site with no accent keeps its chart colour on both. Vermilion, Signal or a custom hex have no chart family, so such a site gets a chart colour no other site wears. On `/stats` the By-site leaderboard now keeps each site's colour instead of colouring by rank. `homepage-summary.json` and `hub-summary.json` gain an optional `accentId` per site beside the published hex (still versions 5 and 1). Needs the sites' accents set, then a rebuild and deploy of the homepage and the hub.
diff --git a/editor/app/icon.svg b/editor/app/icon.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><rect width="512" height="512" rx="112" fill="#151b20"/><rect x="112" y="128" width="288" height="44" rx="22" fill="#3f4c56"/><polygon points="112,210 172,234 112,258" fill="#e7edf1"/><rect x="188" y="212" width="212" height="44" rx="22" fill="#e7edf1"/><rect x="112" y="296" width="232" height="44" rx="22" fill="#3f4c56"/><rect x="112" y="380" width="152" height="44" rx="22" fill="#3f4c56"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><rect width="512" height="512" rx="112" fill="#151b20"/><rect x="112" y="128" width="288" height="44" rx="22" fill="#586977"/><polygon points="112,210 172,234 112,258" fill="#e7edf1"/><rect x="188" y="212" width="212" height="44" rx="22" fill="#e7edf1"/><rect x="112" y="296" width="232" height="44" rx="22" fill="#586977"/><rect x="112" y="380" width="152" height="44" rx="22" fill="#586977"/></svg>
diff --git a/export/CHANGELOG.md b/export/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog
+## [Unreleased]
+- **The lines inside the mark are easier to see.** The three unlit lines of the header mark and the site's icons were a dark brown barely lighter than their ink tile, so on the Dark ground the mark read as a single lit line. They are now a lighter warm grey that reads at 3:1 against the tile; the lit line is unchanged. The hub's mark, bone on slate, gets the same fix. Needs a rebuild and deploy of every export site and the hub.
+
## [0.9.2] - 2026-09-27
- **The search bar's "Press Enter or click Search to apply" is in the site's accent.** It was the warning yellow on every site. It now follows the site's accent, or the one the reader picked, at that accent's value for the reader's ground (Light, Sepia or Dark), like the site's links, and reads at 4.5:1 or better on each. The words are unchanged. Needs a rebuild and deploy of every export site and the hub.
diff --git a/export/e2e-hub/brand.spec.ts b/export/e2e-hub/brand.spec.ts
@@ -46,5 +46,5 @@ test("the hub header is the parent mark + Archi|lyzer", async ({ page }) => {
(t) => getComputedStyle(svg.querySelector(`[data-tone="${t}"]`) as Element).fill,
),
);
- expect(fills).toEqual(["rgb(21, 27, 32)", "rgb(63, 76, 86)", "rgb(231, 237, 241)"]);
+ expect(fills).toEqual(["rgb(21, 27, 32)", "rgb(88, 105, 119)", "rgb(231, 237, 241)"]);
});
diff --git a/export/e2e/brand.spec.ts b/export/e2e/brand.spec.ts
@@ -67,7 +67,7 @@ test("the header mark is the ink tile, its lit line following the reader's accen
const mark = page.getByRole("banner").locator("svg[data-brand-mark]");
const f = await markFills(mark);
expect(f.ground).toBe("rgb(12, 10, 8)"); // ICON_PALETTES.child.ground
- expect(f.dim).toBe("rgb(59, 51, 39)"); // ICON_PALETTES.child.dim
+ expect(f.dim).toBe("rgb(107, 93, 71)"); // ICON_PALETTES.child.dim, #6b5d47
expect(f.lit).toBe(f.accent);
expect(f.lit).not.toBe(f.dim);
});
diff --git a/homepage/CHANGELOG.md b/homepage/CHANGELOG.md
@@ -2,6 +2,7 @@
## [Unreleased]
+- **The lines inside the Archilyzer mark are easier to see.** The header mark's and the icons' three unlit lines now read at 3:1 against the slate tile instead of 2:1.
- **The homepage opens on the Dark ground in Signal, even with JavaScript off, and a reader can pick another ground or accent.**
The theme menu has **Base** (System, Light, Sepia, Dark) and **Accent** (the seven named
accents, Signal tagged *default*); the toggle cycles System → Light → Sepia → Dark. The old
diff --git a/homepage/e2e/brand.spec.ts b/homepage/e2e/brand.spec.ts
@@ -21,7 +21,7 @@ test("the header is the parent mark + Archi|lyzer, still named 'Archilyzer home'
(t) => getComputedStyle(svg.querySelector(`[data-tone="${t}"]`) as Element).fill,
),
);
- expect(fills).toEqual(["rgb(21, 27, 32)", "rgb(63, 76, 86)", "rgb(231, 237, 241)"]);
+ expect(fills).toEqual(["rgb(21, 27, 32)", "rgb(88, 105, 119)", "rgb(231, 237, 241)"]);
});
test("the icon set is rendered from the parent mark", async ({ request }) => {
diff --git a/plans/brand-and-themes.md b/plans/brand-and-themes.md
@@ -49,10 +49,19 @@ Everything is in a 512 viewBox. The shapes, back to front:
| line 4 | rect x112 y380 w152 h44 rx22 | dim |
Icon palettes:
-- **Child site:** ground `#0c0a08`, dim `#3b3327`, lit = the site accent's on-dark value.
-- **Archilyzer** (homepage, hub, editor): ground `#151b20`, dim `#3f4c56`, lit `#e7edf1`
+- **Child site:** ground `#0c0a08`, dim `#6b5d47`, lit = the site accent's on-dark value.
+- **Archilyzer** (homepage, hub, editor): ground `#151b20`, dim `#586977`, lit `#e7edf1`
(bone). The parent mark is achromatic.
+The dims were raised on 2026-09-27 (release 10, slice MC; `release-10.md`), from `#3b3327` (1.59:1
+on ink) and `#3f4c56` (1.97:1 on slate), which the operator found too faint: on the dark base the
+ink tile merges into the page and the mark read as one lit line. Two rules now hold every icon
+palette (`brand.ts`, enforced in `brand.test.ts`): **a dim reaches 3:1 on its ground** (WCAG
+1.4.11) and **every named lit value stands 2:1 above its dim**. The new dims keep the old hue and
+saturation and sit just over 3:1 (3.09, 3.06), because the two rules multiply to lit-on-ground and
+the darkest lit values leave little room: Vermilion is 2.28:1 over the child dim, and Signal on
+the Media slate 2.05:1.
+
Icon variants:
- `any`: `rx=112`.
- `maskable`: full-bleed ground, the mark scaled 0.8 about (256,256).
@@ -1271,7 +1280,7 @@ S4 ships after release 10's cut and is **not part of the site rollout**: it touc
### Decisions (operator, 2026-09-26)
- **Mark M2 · Signal.** The parent mark's geometry, lit in Signal: ground `#151b20`, dim `#3f4c56`,
- lit `#5fa8a0`. The avatar uses the maskable variant (scale 0.8 on full-bleed ground).
+ lit `#5fa8a0`. (Dim `#586977` since 2026-09-27, with the parent mark's; see "The design".) The avatar uses the maskable variant (scale 0.8 on full-bleed ground).
- **Lockup "flush · caps matched".** The `Archi|lyzer` wordmark sits over `MEDIA`:
- Both are Archivo at wdth 118. The wordmark is 720 / 380 at -0.01em; MEDIA is 700, in Signal.
- MEDIA's size is **1.035×** the wordmark's, and it is letter-spaced to exactly the wordmark's
diff --git a/plans/release-10.md b/plans/release-10.md
@@ -1983,6 +1983,99 @@ one colour.
its chart colour, as today. Rollout: every export site and the hub rebuilt for the hint; the
homepage and the hub rebuilt after the accents are set.
+### Slice MC, as shipped — mark contrast (2026-09-27)
+
+The operator's asks (2026-09-27): **"the line details inside have too little contrast with the
+background"** — the Found-line mark's three dim lines were 1.59:1 on the child ink tile (`#3b3327`
+on `#0c0a08`) and 1.97:1 on the Archilyzer slate (`#3f4c56` on `#151b20`); on the dark base the
+header's ink tile merges into the ink page and the mark read as a lone lit line. And the accents
+were swapped through the site form (the parent): **hasanalyzer = Violet, bonnellyzer = Blue**, so the
+homepage chart is re-validated. Branch `r10/mark-contrast` off `main` `51c5b562`, worktree
+`/home/user/Projects/r10-mark-contrast`, one Opus implementer. Scratch files `mc-*` in the job's
+`tmp/brand`.
+
+**The values.** Each new dim keeps its old hue and saturation (warm ink h36 s20; slate h206 s15) and
+sits just over 3:1, because the two rules below multiply to lit-on-ground: with the dim at 3:1 the
+darkest lit values (Vermilion 7.03:1 on ink, Signal 6.28:1 on the slate — darker than Blue, 8.19)
+cannot sit more than ~2.3 and ~2.1 above any dim.
+
+| palette | dim before → after | on its ground | tightest lit over the dim |
+|---|---|---|---|
+| child (ink `#0c0a08`) | `#3b3327` → **`#6b5d47`** | 1.59 → **3.09** | Vermilion 2.28, Signal 2.31, Blue 2.65, Violet 2.74, Sakura 2.81, Green 3.04, Brass 3.26 |
+| Archilyzer (slate `#151b20`) | `#3f4c56` → **`#586977`** | 1.97 → **3.06** | bone 4.80; Signal (the Media mark) 2.05 |
+
+The rules, in `brand.ts` beside `ICON_PALETTES` and enforced on every icon palette:
+`MIN_MARK_DIM_CONTRAST = 3` (WCAG 1.4.11, a graphic that must be seen) and
+`MIN_MARK_LIT_OVER_DIM = 2` (the lit line at least double the dim's luminance: the most both
+palettes can hold with the dim at 3:1). A custom accent is fitted only to the 4.5:1 ground rule, so
+one at that floor sits ~1.5:1 over the dim (the e2e fixture's `#cc3366` → `#d14574`: 1.47:1); its
+hue carries it. Rendered at 16, 32, 56 and 128 px on the ink and light pages before choosing
+(`mc-sheet-{ink,light}.png`).
+
+**The chart after the swap: every adjacent pair passes** (`mc-palette.md`, `mc-layers.log`: Slice
+AC's script with the new mapping, `siteChartColors` → each base's `--chart-N` → the dataviz
+validator against `--chart-surface`):
+
+| order | layers | adjacent, light / sepia / dark | all pairs |
+|---|---|---|---|
+| today (Jer, Ani, Bon, Has, Rek) | amber · magenta · blue · violet · green | PASS; CVD 13.1 / 11.1 / 11.0, normal 17.7 / 15.3 / 16.7 | CVD WARN 6.2 / 6.1 / 6.9, normal ≥ 15.3 |
+| Has and Rek swapped | amber · magenta · blue · green · violet | PASS; CVD 13.1 / 13.4 / 11.0, normal 19.6 / 19.7 / 21.7 | the same set |
+
+The all-pairs WARN is `--chart-1..5`'s own 6–8 floor band, the same pairs as AC's (Green–Amber,
+Green–Magenta on dark). The tightest adjacent pair is Violet–Blue on sepia (normal 15.3), which AC
+also had adjacent in the other order. No chart change is owed.
+
+**What shipped**
+- `ICON_PALETTES` child dim `#6b5d47`, Archilyzer dim `#586977`; the two rules as exported constants.
+- `MEDIA_PALETTE` takes ground and dim from `ICON_PALETTES.archilyzer` instead of a copy; the
+ banner's field (`#1e262d`) stays under the mark's dim (a test holds it).
+- Regenerated from the code, not by hand: `editor/app/icon.svg` (`markSvg`, parity test green) and
+ umtool's `brands/archilyzer-media.json` (`brand-media.ts --video-kit`). The header `BrandMark`s,
+ the export/hub/homepage icon routes and the favicon read the palette, so nothing else changed.
+- Tests: `brand.test.ts` holds both rules on all seven accents over the child dim and bone over the
+ slate, and pins every ratio; `brandMedia.test.ts` holds them on mark M2. The export, hub and
+ homepage `brand.spec`s pin the new computed fills (`rgb(107, 93, 71)`, `rgb(88, 105, 119)`).
+- The YouTube channel assets are regenerated at `~/reports/archilyzer-media/brand/` (avatar,
+ watermark, banner, `INDEX.html`); the previous set is kept in `mc-media-before/`
+ (`mc-avatar-compare.png`, `mc-banner-compare.png`).
+
+| sha | what |
+|---|---|
+| `c05e6daf` | `common:` the dims, the two rules, `MEDIA_PALETTE` from `ICON_PALETTES`, 3 unit tests, `icon.svg` + the video kit regenerated, three e2e fills |
+| `79d687c9` | `changelogs:` a new `[Unreleased]` above `[0.9.2]` in export and editor; a bullet in the homepage's |
+| _this_ | `plans:` this record; `brand-and-themes.md`'s icon palettes, with a dated note |
+
+**Gates** (logs `mc-*.log`):
+- **tsc** clean (65 s) on the code tree of `c05e6daf`; the later commits are Markdown only.
+- **common 2,034/2,034** (2,031 + 3), editor unit **85/85**, `test:scripts` **174 + 1 skipped** (the
+ report-to-video tests among them), mcp **269/269**, homepage unit **2/2**.
+- **They bite:** with the old dims, 9 of the 23 `brand`/`brandMedia` tests fail, both new rules among
+ them (`child: dim #3b3327 on #0c0a08 is 1.59:1`); with a too-bright child dim `#807055` the 2:1
+ rule fails (`child · signal … 1.74:1`).
+- **Builds:** editor ok (35 s; the built `icon.svg` carries `#586977`); export site ok (22 s;
+ `out/icons/icon.svg` 3× `#6b5d47`); export hub ok (24 s; 3× `#586977`, `out/ask` present);
+ homepage ok (14 s; 3× `#586977`). The primary's `export/public` byte-identical before and after
+ the builds and the e2e.
+- **e2e** (no queue wait, nothing failed, so no re-runs): export `brand` + `pwa` + `site-branding`
+ **15 passed** (29 s); `e2e:hub` **25 passed** (1.0 min); homepage full **28 passed** (44 s); editor
+ `branding.spec` **3 passed** (23 s).
+- **Visual** (`mc-header-compare.png`): the live Jeralyzer (Brass) and Bonnellyzer (reader accent Blue)
+ headers at 2× DPR on dark and light, as served and with only the dim set to `#6b5d47` — the value
+ the build now inlines; plus the favicon at 32 px (1:1 and 4×) and 16 px, before and after, for
+ Brass, Blue and the parent bone, rendered by `renderIconPng` (the "before" 32 px render is
+ byte-identical to live Jeralyzer's `/icons/icon-32.png`). After: four lines on both bases; the lit
+ line is still the found line.
+
+**Found and left**
+- **On the dark base the ink tile still merges into the ink page** (both `#0c0a08`): the mark now reads
+ as four lines, but not as a tile. A hairline ring or a lifted tile on dark would fix it; not asked,
+ and it changes the mark's silhouette, so it is the operator's call.
+- **The live sites carry none of this until rebuilt:** every export site and the hub (the site mark and
+ icons), the homepage (the parent mark), and the editor on its next restart (`icon.svg`, sidebar).
+ Bonnellyzer still serves Violet and Hasanalyzer Blue until they, the homepage and the hub are
+ rebuilt for the swap. The regenerated YouTube picture, watermark and banner are the operator's to
+ upload in Studio (`INDEX.html` has the steps).
+
## Rollout
Nothing is rolled out, except that **Jeralyzer is already on the brand, in Signal** (a build-deploy
diff --git a/umtool/report-to-video/brand.test.mjs b/umtool/report-to-video/brand.test.mjs
@@ -63,7 +63,7 @@ test("no brand: the header is the accent tick and one drawtext line, as it alway
test("the preset owns palette and face, and resolves the end card", () => {
const r = resolveBrandRender({ ...PLAIN_RENDER, brand: "archilyzer-media" });
assert.deepEqual(r.palette, {
- bg: "#151b20", fg: "#e7edf1", muted: "#8496a2", accent: "#5fa8a0", amber: "#e3b15c", dim: "#3f4c56",
+ bg: "#151b20", fg: "#e7edf1", muted: "#8496a2", accent: "#5fa8a0", amber: "#e3b15c", dim: "#586977",
});
assert.equal(r.fontRegular, MONO_FONT_FILE);
assert.deepEqual(r.endCard, { seconds: END_CARD_DEFAULT_SECONDS, url: END_CARD_DEFAULT_URL });
diff --git a/umtool/report-to-video/brands/archilyzer-media.json b/umtool/report-to-video/brands/archilyzer-media.json
@@ -7,10 +7,10 @@
"muted": "#8496a2",
"accent": "#5fa8a0",
"amber": "#e3b15c",
- "dim": "#3f4c56"
+ "dim": "#586977"
},
"mark": {
- "any": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><rect width=\"512\" height=\"512\" rx=\"112\" fill=\"#151b20\"/><rect x=\"112\" y=\"128\" width=\"288\" height=\"44\" rx=\"22\" fill=\"#3f4c56\"/><polygon points=\"112,210 172,234 112,258\" fill=\"#5fa8a0\"/><rect x=\"188\" y=\"212\" width=\"212\" height=\"44\" rx=\"22\" fill=\"#5fa8a0\"/><rect x=\"112\" y=\"296\" width=\"232\" height=\"44\" rx=\"22\" fill=\"#3f4c56\"/><rect x=\"112\" y=\"380\" width=\"152\" height=\"44\" rx=\"22\" fill=\"#3f4c56\"/></svg>"
+ "any": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><rect width=\"512\" height=\"512\" rx=\"112\" fill=\"#151b20\"/><rect x=\"112\" y=\"128\" width=\"288\" height=\"44\" rx=\"22\" fill=\"#586977\"/><polygon points=\"112,210 172,234 112,258\" fill=\"#5fa8a0\"/><rect x=\"188\" y=\"212\" width=\"212\" height=\"44\" rx=\"22\" fill=\"#5fa8a0\"/><rect x=\"112\" y=\"296\" width=\"232\" height=\"44\" rx=\"22\" fill=\"#586977\"/><rect x=\"112\" y=\"380\" width=\"152\" height=\"44\" rx=\"22\" fill=\"#586977\"/></svg>"
},
"lockup": {
"px": 100,
@@ -18,6 +18,6 @@
"height": 173.401,
"blockTop": 3.8,
"blockHeight": 169.601,
- "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"749.001\" height=\"173.401\" viewBox=\"0 0 749.001 173.401\"><svg x=\"0\" y=\"3.8\" width=\"169.601\" height=\"169.601\" viewBox=\"0 0 512 512\"><rect width=\"512\" height=\"512\" rx=\"112\" fill=\"#151b20\"/><rect x=\"112\" y=\"128\" width=\"288\" height=\"44\" rx=\"22\" fill=\"#3f4c56\"/><polygon points=\"112,210 172,234 112,258\" fill=\"#5fa8a0\"/><rect x=\"188\" y=\"212\" width=\"212\" height=\"44\" rx=\"22\" fill=\"#5fa8a0\"/><rect x=\"112\" y=\"296\" width=\"232\" height=\"44\" rx=\"22\" fill=\"#3f4c56\"/><rect x=\"112\" y=\"380\" width=\"152\" height=\"44\" rx=\"22\" fill=\"#3f4c56\"/></svg><g fill=\"#e7edf1\"><path transform=\"translate(215.601 72.4) scale(0.1)\" d=\"M15.8 0 334.8 -687.1H532.2L851.4 0H664.3L609.1 -124.2H248.1L193.1 0ZM306.3 -256.8H550.8L483.3 -413.3Q479 -423.5 471.5 -441.8Q464.1 -460.2 456.4 -480.5Q448.6 -500.8 442.1 -518Q435.5 -535.3 432.6 -542.8H425.4Q418 -523.5 408.2 -498.6Q398.4 -473.6 389.3 -450.4Q380.2 -427.2 373.8 -412.8Z\"/><path transform=\"translate(301.568 72.4) scale(0.1)\" d=\"M66.7 0V-527.1H194.4L205.7 -438.5H213.6Q226.2 -467.5 247.1 -490.4Q268 -513.2 297.3 -526.3Q326.6 -539.4 362.6 -539.4Q381.2 -539.4 397.9 -536.5Q414.7 -533.7 427.6 -528.8V-396.2H358.5Q322.8 -396.2 297.3 -384.9Q271.8 -373.6 255.6 -353.5Q239.4 -333.3 231.6 -307.2Q223.8 -281.2 223.8 -251.1V0Z\"/><path transform=\"translate(343.334 72.4) scale(0.1)\" d=\"M359.3 12Q260.8 12 190.3 -18.3Q119.7 -48.6 82.2 -109.9Q44.6 -171.2 44.6 -263.8Q44.6 -356.7 82.3 -417.7Q119.9 -478.8 190.5 -509Q261 -539.2 359.3 -539.2Q422.3 -539.2 476.3 -525.7Q530.4 -512.2 571.1 -484.8Q611.8 -457.3 634.2 -416.5Q656.5 -375.7 656.5 -321.2H498.4Q498.4 -354.6 480.2 -377.6Q462 -400.6 430.6 -412.6Q399.2 -424.6 358.9 -424.6Q309 -424.6 274.9 -406.9Q240.9 -389.3 223.6 -355.8Q206.4 -322.4 206.4 -274.4V-252.9Q206.4 -205.6 224 -171.9Q241.7 -138.1 276.9 -120.3Q312.2 -102.5 364.6 -102.5Q404.4 -102.5 435.9 -115.3Q467.4 -128.1 486 -151.7Q504.6 -175.3 504.6 -206.7H656.5Q656.5 -151.9 633.9 -110.7Q611.3 -69.5 571 -42.3Q530.8 -15.1 476.5 -1.6Q422.3 12 359.3 12Z\"/><path transform=\"translate(412.801 72.4) scale(0.1)\" d=\"M66.7 0V-724.1H223.8V-460.6H231Q255.7 -488.9 287 -506Q318.3 -523.2 353.5 -531.1Q388.8 -539.1 424.4 -539.1Q493.7 -539.1 540.9 -516.5Q588.1 -494 612.4 -447.8Q636.7 -401.7 636.7 -330.2V0H479.4V-306Q479.4 -334.8 471.6 -355.5Q463.8 -376.2 449.2 -389.2Q434.6 -402.2 413.6 -408.2Q392.5 -414.3 366 -414.3Q327.3 -414.3 295.1 -397.9Q262.8 -381.6 243.3 -352.7Q223.8 -323.9 223.8 -285.8V0Z\"/><path transform=\"translate(482.068 72.4) scale(0.1)\" d=\"M66.7 -605.3V-724.1H223.8V-605.3ZM66.7 0V-527.1H223.8V0Z\"/></g><g fill=\"#8496a2\"><path transform=\"translate(510.334 72.4) scale(0.1)\" d=\"M74.8 0V-723.4H166.4V0Z\"/><path transform=\"translate(533.701 72.4) scale(0.1)\" d=\"M122.5 187.7Q100.1 187.7 81 184.7Q62 181.6 46.7 177.4V113.2H99.5Q142.7 113.2 170.5 102.3Q198.3 91.3 217.2 66.6Q236.1 41.9 253.5 0L9.2 -526.4H109.3L232.3 -251.9Q241.3 -233.3 253.1 -204.8Q264.8 -176.3 277.5 -146.4Q290.1 -116.5 299.5 -93.6H306.1Q309.9 -105 316.8 -124.9Q323.7 -144.8 332.5 -168.7Q341.4 -192.5 350.4 -215.9Q359.4 -239.2 366.4 -257.4L470.9 -526.4H566.4L357.1 -15.1Q336.4 34.3 315.4 72.3Q294.5 110.2 268.7 136Q242.9 161.8 207.4 174.8Q171.9 187.7 122.5 187.7Z\"/><path transform=\"translate(590.568 72.4) scale(0.1)\" d=\"M33.7 0V-48.6L384.7 -451.4H59.2V-526.4H525.6V-480L172.2 -74.9H540.3V0Z\"/><path transform=\"translate(645.234 72.4) scale(0.1)\" d=\"M338 12Q247.2 12 183.4 -17.7Q119.6 -47.4 86 -108.5Q52.5 -169.7 52.5 -263Q52.5 -355.5 85.5 -416.5Q118.5 -477.6 182.2 -508Q245.9 -538.4 337.4 -538.4Q430.4 -538.4 491.6 -507.4Q552.7 -476.5 582.7 -420.1Q612.7 -363.7 612.7 -286.4V-239H148.9Q150.3 -175.2 174.5 -136.1Q198.8 -97 241.9 -79.7Q285 -62.4 342.2 -62.4Q381.1 -62.4 412.4 -72.1Q443.6 -81.9 466.4 -98Q489.2 -114.1 502.3 -135Q515.4 -155.9 516.9 -178.3H608Q607.5 -142.1 591.1 -108Q574.6 -73.9 541.6 -46.9Q508.6 -20 457.7 -4Q406.9 12 338 12ZM149.2 -306.6H516.5Q516.5 -351.4 501.9 -381.4Q487.3 -411.5 461.9 -429.7Q436.6 -447.9 403.9 -455.9Q371.3 -463.8 334.8 -463.8Q282.4 -463.8 241.8 -447.3Q201.2 -430.7 177.4 -395.8Q153.5 -360.9 149.2 -306.6Z\"/><path transform=\"translate(711.001 72.4) scale(0.1)\" d=\"M74.8 0V-526.4H148.3L155.8 -431.1H162.6Q169.9 -454.8 186.9 -479.5Q204 -504.1 233.4 -521.3Q262.8 -538.4 304.8 -538.4Q320.9 -538.4 336.3 -536.2Q351.8 -534.1 362.5 -530.5V-449.3H316Q273.7 -449.3 245 -433.8Q216.3 -418.2 199 -392.2Q181.8 -366.2 174.1 -335.4Q166.4 -304.7 166.4 -274.1V0Z\"/></g><g fill=\"#5fa8a0\"><path transform=\"translate(215.601 173.401) scale(0.103)\" d=\"M87.4 0V-687H344.8L474 -350.2Q480.8 -332.7 490.3 -305.1Q499.8 -277.4 509.7 -248.2Q519.7 -218.9 527.2 -195.6H534.5Q541.1 -216.2 550.3 -243.8Q559.6 -271.5 569.4 -299.8Q579.2 -328.2 586.8 -349.3L716.1 -687H967.7V0H802V-374.7Q802 -400.8 802.6 -430Q803.3 -459.1 804.3 -484.8Q805.4 -510.4 806 -525H798Q793.4 -509.8 785.4 -484.9Q777.3 -460.1 768.9 -434.4Q760.6 -408.6 753.5 -389.6L601.1 0H447.1L294 -389.4Q285.6 -411.5 277.1 -436.6Q268.6 -461.8 261.8 -485.3Q254.9 -508.9 249.7 -524.9H241.7Q242.7 -508.2 243.4 -482.6Q244 -456.9 244.6 -428.9Q245.2 -400.8 245.2 -374.7V0Z\"/><path transform=\"translate(355.86 173.401) scale(0.103)\" d=\"M87.6 0V-687H747.7V-554.3H254V-414.7H690.5V-283.9H254V-132.7H755.2V0Z\"/><path transform=\"translate(471.175 173.401) scale(0.103)\" d=\"M87.4 0V-687H434.6Q555.6 -687 642.3 -648.1Q728.9 -609.2 775.4 -532.9Q821.8 -456.6 821.8 -343.2Q821.8 -230.7 775.4 -154.2Q728.9 -77.8 642.3 -38.9Q555.6 0 434.6 0ZM253.6 -132.7H427.5Q477.7 -132.7 518.6 -145.6Q559.5 -158.5 589.1 -183.4Q618.6 -208.3 634.5 -245.4Q650.5 -282.5 650.5 -331.1V-356Q650.5 -404.8 634.5 -441.8Q618.6 -478.9 589.1 -503.8Q559.5 -528.7 518.6 -541.5Q477.7 -554.3 427.5 -554.3H253.6Z\"/><path transform=\"translate(593.217 173.401) scale(0.103)\" d=\"M87.4 0V-687H253.6V0Z\"/><path transform=\"translate(659.577 173.401) scale(0.103)\" d=\"M16.5 0 336.2 -687H527.3L847.3 0H666.5L609.7 -127.1H244.1L187.4 0ZM301.5 -256.6H552.2L482.5 -416.9Q478.1 -427.3 470.4 -445.9Q462.8 -464.6 454.9 -485.1Q446.9 -505.7 440.2 -522.9Q433.5 -540.2 430.8 -547.1H423.7Q416.1 -527.7 406.1 -502.5Q396.1 -477.3 386.8 -454Q377.6 -430.6 371.2 -416.3Z\"/></g></svg>"
+ "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"749.001\" height=\"173.401\" viewBox=\"0 0 749.001 173.401\"><svg x=\"0\" y=\"3.8\" width=\"169.601\" height=\"169.601\" viewBox=\"0 0 512 512\"><rect width=\"512\" height=\"512\" rx=\"112\" fill=\"#151b20\"/><rect x=\"112\" y=\"128\" width=\"288\" height=\"44\" rx=\"22\" fill=\"#586977\"/><polygon points=\"112,210 172,234 112,258\" fill=\"#5fa8a0\"/><rect x=\"188\" y=\"212\" width=\"212\" height=\"44\" rx=\"22\" fill=\"#5fa8a0\"/><rect x=\"112\" y=\"296\" width=\"232\" height=\"44\" rx=\"22\" fill=\"#586977\"/><rect x=\"112\" y=\"380\" width=\"152\" height=\"44\" rx=\"22\" fill=\"#586977\"/></svg><g fill=\"#e7edf1\"><path transform=\"translate(215.601 72.4) scale(0.1)\" d=\"M15.8 0 334.8 -687.1H532.2L851.4 0H664.3L609.1 -124.2H248.1L193.1 0ZM306.3 -256.8H550.8L483.3 -413.3Q479 -423.5 471.5 -441.8Q464.1 -460.2 456.4 -480.5Q448.6 -500.8 442.1 -518Q435.5 -535.3 432.6 -542.8H425.4Q418 -523.5 408.2 -498.6Q398.4 -473.6 389.3 -450.4Q380.2 -427.2 373.8 -412.8Z\"/><path transform=\"translate(301.568 72.4) scale(0.1)\" d=\"M66.7 0V-527.1H194.4L205.7 -438.5H213.6Q226.2 -467.5 247.1 -490.4Q268 -513.2 297.3 -526.3Q326.6 -539.4 362.6 -539.4Q381.2 -539.4 397.9 -536.5Q414.7 -533.7 427.6 -528.8V-396.2H358.5Q322.8 -396.2 297.3 -384.9Q271.8 -373.6 255.6 -353.5Q239.4 -333.3 231.6 -307.2Q223.8 -281.2 223.8 -251.1V0Z\"/><path transform=\"translate(343.334 72.4) scale(0.1)\" d=\"M359.3 12Q260.8 12 190.3 -18.3Q119.7 -48.6 82.2 -109.9Q44.6 -171.2 44.6 -263.8Q44.6 -356.7 82.3 -417.7Q119.9 -478.8 190.5 -509Q261 -539.2 359.3 -539.2Q422.3 -539.2 476.3 -525.7Q530.4 -512.2 571.1 -484.8Q611.8 -457.3 634.2 -416.5Q656.5 -375.7 656.5 -321.2H498.4Q498.4 -354.6 480.2 -377.6Q462 -400.6 430.6 -412.6Q399.2 -424.6 358.9 -424.6Q309 -424.6 274.9 -406.9Q240.9 -389.3 223.6 -355.8Q206.4 -322.4 206.4 -274.4V-252.9Q206.4 -205.6 224 -171.9Q241.7 -138.1 276.9 -120.3Q312.2 -102.5 364.6 -102.5Q404.4 -102.5 435.9 -115.3Q467.4 -128.1 486 -151.7Q504.6 -175.3 504.6 -206.7H656.5Q656.5 -151.9 633.9 -110.7Q611.3 -69.5 571 -42.3Q530.8 -15.1 476.5 -1.6Q422.3 12 359.3 12Z\"/><path transform=\"translate(412.801 72.4) scale(0.1)\" d=\"M66.7 0V-724.1H223.8V-460.6H231Q255.7 -488.9 287 -506Q318.3 -523.2 353.5 -531.1Q388.8 -539.1 424.4 -539.1Q493.7 -539.1 540.9 -516.5Q588.1 -494 612.4 -447.8Q636.7 -401.7 636.7 -330.2V0H479.4V-306Q479.4 -334.8 471.6 -355.5Q463.8 -376.2 449.2 -389.2Q434.6 -402.2 413.6 -408.2Q392.5 -414.3 366 -414.3Q327.3 -414.3 295.1 -397.9Q262.8 -381.6 243.3 -352.7Q223.8 -323.9 223.8 -285.8V0Z\"/><path transform=\"translate(482.068 72.4) scale(0.1)\" d=\"M66.7 -605.3V-724.1H223.8V-605.3ZM66.7 0V-527.1H223.8V0Z\"/></g><g fill=\"#8496a2\"><path transform=\"translate(510.334 72.4) scale(0.1)\" d=\"M74.8 0V-723.4H166.4V0Z\"/><path transform=\"translate(533.701 72.4) scale(0.1)\" d=\"M122.5 187.7Q100.1 187.7 81 184.7Q62 181.6 46.7 177.4V113.2H99.5Q142.7 113.2 170.5 102.3Q198.3 91.3 217.2 66.6Q236.1 41.9 253.5 0L9.2 -526.4H109.3L232.3 -251.9Q241.3 -233.3 253.1 -204.8Q264.8 -176.3 277.5 -146.4Q290.1 -116.5 299.5 -93.6H306.1Q309.9 -105 316.8 -124.9Q323.7 -144.8 332.5 -168.7Q341.4 -192.5 350.4 -215.9Q359.4 -239.2 366.4 -257.4L470.9 -526.4H566.4L357.1 -15.1Q336.4 34.3 315.4 72.3Q294.5 110.2 268.7 136Q242.9 161.8 207.4 174.8Q171.9 187.7 122.5 187.7Z\"/><path transform=\"translate(590.568 72.4) scale(0.1)\" d=\"M33.7 0V-48.6L384.7 -451.4H59.2V-526.4H525.6V-480L172.2 -74.9H540.3V0Z\"/><path transform=\"translate(645.234 72.4) scale(0.1)\" d=\"M338 12Q247.2 12 183.4 -17.7Q119.6 -47.4 86 -108.5Q52.5 -169.7 52.5 -263Q52.5 -355.5 85.5 -416.5Q118.5 -477.6 182.2 -508Q245.9 -538.4 337.4 -538.4Q430.4 -538.4 491.6 -507.4Q552.7 -476.5 582.7 -420.1Q612.7 -363.7 612.7 -286.4V-239H148.9Q150.3 -175.2 174.5 -136.1Q198.8 -97 241.9 -79.7Q285 -62.4 342.2 -62.4Q381.1 -62.4 412.4 -72.1Q443.6 -81.9 466.4 -98Q489.2 -114.1 502.3 -135Q515.4 -155.9 516.9 -178.3H608Q607.5 -142.1 591.1 -108Q574.6 -73.9 541.6 -46.9Q508.6 -20 457.7 -4Q406.9 12 338 12ZM149.2 -306.6H516.5Q516.5 -351.4 501.9 -381.4Q487.3 -411.5 461.9 -429.7Q436.6 -447.9 403.9 -455.9Q371.3 -463.8 334.8 -463.8Q282.4 -463.8 241.8 -447.3Q201.2 -430.7 177.4 -395.8Q153.5 -360.9 149.2 -306.6Z\"/><path transform=\"translate(711.001 72.4) scale(0.1)\" d=\"M74.8 0V-526.4H148.3L155.8 -431.1H162.6Q169.9 -454.8 186.9 -479.5Q204 -504.1 233.4 -521.3Q262.8 -538.4 304.8 -538.4Q320.9 -538.4 336.3 -536.2Q351.8 -534.1 362.5 -530.5V-449.3H316Q273.7 -449.3 245 -433.8Q216.3 -418.2 199 -392.2Q181.8 -366.2 174.1 -335.4Q166.4 -304.7 166.4 -274.1V0Z\"/></g><g fill=\"#5fa8a0\"><path transform=\"translate(215.601 173.401) scale(0.103)\" d=\"M87.4 0V-687H344.8L474 -350.2Q480.8 -332.7 490.3 -305.1Q499.8 -277.4 509.7 -248.2Q519.7 -218.9 527.2 -195.6H534.5Q541.1 -216.2 550.3 -243.8Q559.6 -271.5 569.4 -299.8Q579.2 -328.2 586.8 -349.3L716.1 -687H967.7V0H802V-374.7Q802 -400.8 802.6 -430Q803.3 -459.1 804.3 -484.8Q805.4 -510.4 806 -525H798Q793.4 -509.8 785.4 -484.9Q777.3 -460.1 768.9 -434.4Q760.6 -408.6 753.5 -389.6L601.1 0H447.1L294 -389.4Q285.6 -411.5 277.1 -436.6Q268.6 -461.8 261.8 -485.3Q254.9 -508.9 249.7 -524.9H241.7Q242.7 -508.2 243.4 -482.6Q244 -456.9 244.6 -428.9Q245.2 -400.8 245.2 -374.7V0Z\"/><path transform=\"translate(355.86 173.401) scale(0.103)\" d=\"M87.6 0V-687H747.7V-554.3H254V-414.7H690.5V-283.9H254V-132.7H755.2V0Z\"/><path transform=\"translate(471.175 173.401) scale(0.103)\" d=\"M87.4 0V-687H434.6Q555.6 -687 642.3 -648.1Q728.9 -609.2 775.4 -532.9Q821.8 -456.6 821.8 -343.2Q821.8 -230.7 775.4 -154.2Q728.9 -77.8 642.3 -38.9Q555.6 0 434.6 0ZM253.6 -132.7H427.5Q477.7 -132.7 518.6 -145.6Q559.5 -158.5 589.1 -183.4Q618.6 -208.3 634.5 -245.4Q650.5 -282.5 650.5 -331.1V-356Q650.5 -404.8 634.5 -441.8Q618.6 -478.9 589.1 -503.8Q559.5 -528.7 518.6 -541.5Q477.7 -554.3 427.5 -554.3H253.6Z\"/><path transform=\"translate(593.217 173.401) scale(0.103)\" d=\"M87.4 0V-687H253.6V0Z\"/><path transform=\"translate(659.577 173.401) scale(0.103)\" d=\"M16.5 0 336.2 -687H527.3L847.3 0H666.5L609.7 -127.1H244.1L187.4 0ZM301.5 -256.6H552.2L482.5 -416.9Q478.1 -427.3 470.4 -445.9Q462.8 -464.6 454.9 -485.1Q446.9 -505.7 440.2 -522.9Q433.5 -540.2 430.8 -547.1H423.7Q416.1 -527.7 406.1 -502.5Q396.1 -477.3 386.8 -454Q377.6 -430.6 371.2 -416.3Z\"/></g></svg>"
}
}