commit d0e8f28449e1992d9af502154929c8fcbeff9bab
parent 5c0703b2fbce80ff510c2f897a1db7710196dc4b
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Sun, 27 Sep 2026 14:49:39 -0400
common: the mark's dim lines reach 3:1 on their ground — child #6b5d47, Archilyzer #586977
The operator (2026-09-27): the line details inside the mark have too little
contrast with the background. The three dim lines were 1.59:1 on ink (child,
#3b3327) and 1.97:1 on graphite (Archilyzer, #3f4c56); on the dark base the
ink tile merges into the page and the mark read as one lit line.
- ICON_PALETTES: child dim #6b5d47 (3.09:1 on #0c0a08), Archilyzer dim
#586977 (3.06:1 on #151b20). Each keeps its old hue and saturation (h36 s20,
h206 s15) and sits just over the floor, to leave the lit line all the room.
- Two rules beside them, both enforced on every icon palette:
MIN_MARK_DIM_CONTRAST = 3 (WCAG 1.4.11) and MIN_MARK_LIT_OVER_DIM = 2. The
two multiply to lit-on-ground, so with the dim at 3:1 the darkest lit values
(Vermilion 7.0:1 on ink, Signal 6.3:1 on the slate) cannot sit more than
~2.3 / ~2.1 above it: 2:1 is the most both palettes can hold. Tightest now:
child Vermilion 2.28, Signal 2.31; Media Signal 2.05; bone 4.80.
- MEDIA_PALETTE takes ground and dim from ICON_PALETTES.archilyzer instead of
a copy; the banner field (#1e262d) stays under the mark's dim (held).
- Regenerated from markSvg / --video-kit: editor/app/icon.svg and umtool's
brands/archilyzer-media.json. The export, hub and homepage brand specs pin
the new computed fills.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
11 files changed, 95 insertions(+), 22 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/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/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/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/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>"
}
}