Skip to content

Commit 84b7648

Browse files
easly1989claude
andcommitted
brand: roll the new CloudBank logo into the app, favicon and README
Align the whole project on the new brand mark (blue gradient cloud + green-euro coin) introduced with the site rebuild: - web/src/components/Logo.tsx: replace the old accent-tinted cloud + cut-out euro with an inline version of the new mark. The mark now has fixed brand colours (no longer follows the theme accent — intended for a logo); useId keeps the gradient ids unique per instance. - web/public/logo.svg (app favicon) and docs/img/logo.svg (README) swapped to the new artwork (single source: site/public/logo.svg). Verified: app header shows the new logo in light + dark, the favicon serves the new SVG, README renders it; build + lint clean, no console errors. Closes #254 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XDMnoUVHPcyZJ5bbJd9cxv
1 parent c1086bf commit 84b7648

3 files changed

Lines changed: 79 additions & 34 deletions

File tree

docs/img/logo.svg

Lines changed: 19 additions & 7 deletions
Loading

web/public/logo.svg

Lines changed: 19 additions & 7 deletions
Loading

web/src/components/Logo.tsx

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,53 @@
1-
// Logo is the CloudBank brand mark: a cloud (the accent colour, following the
2-
// theme via currentColor) with a euro sign cut out of it. Sized by `size`.
1+
import { useId } from "react";
2+
3+
// Logo is the CloudBank brand mark: a blue gradient cloud with a green-euro
4+
// coin. The mark has fixed brand colours (it no longer follows the theme
5+
// accent — intended for a logo). The same artwork ships as web/public/logo.svg
6+
// (favicon) and docs/img/logo.svg (README). useId keeps the gradient ids unique
7+
// per instance so multiple logos on a page can't clash.
38
export function Logo({ size = 28 }: { size?: number }) {
9+
const id = useId();
10+
const cloud = `${id}-cloud`;
11+
const coin = `${id}-coin`;
412
return (
513
<svg
614
width={size}
715
height={size}
8-
viewBox="0 0 32 32"
16+
viewBox="0 0 64 64"
17+
fill="none"
918
role="img"
1019
aria-label="CloudBank"
11-
style={{ color: "var(--mantine-primary-color-filled)", display: "block" }}
20+
style={{ display: "block" }}
1221
>
13-
<g fill="currentColor">
14-
<circle cx="10" cy="19" r="6" />
15-
<circle cx="16" cy="13" r="8" />
16-
<circle cx="22" cy="19" r="6" />
17-
<rect x="7" y="18" width="18" height="7" rx="3.5" />
22+
<defs>
23+
<linearGradient id={cloud} x1="0" y1="0" x2="0" y2="1">
24+
<stop offset="0" stopColor="#8ecbfd" />
25+
<stop offset=".55" stopColor="#5aa9f4" />
26+
<stop offset="1" stopColor="#3d86e0" />
27+
</linearGradient>
28+
<radialGradient id={coin} cx=".38" cy=".32" r=".85">
29+
<stop offset="0" stopColor="#ffffff" />
30+
<stop offset="1" stopColor="#e7eef4" />
31+
</radialGradient>
32+
</defs>
33+
<ellipse cx="30" cy="55.5" rx="20" ry="3.2" fill="#000" opacity=".07" />
34+
<path
35+
transform="translate(9 7) scale(1.92)"
36+
fill={`url(#${cloud})`}
37+
d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"
38+
/>
39+
<circle
40+
cx="23"
41+
cy="45.5"
42+
r="13.2"
43+
fill={`url(#${coin})`}
44+
stroke="#3aa64a"
45+
strokeWidth="2.4"
46+
/>
47+
<g stroke="#3aa64a" strokeLinecap="round" fill="none">
48+
<path d="M28 40a7 7 0 1 0 0 11" strokeWidth="2.7" />
49+
<path d="M16.9 43.9h10.4M16.9 47.1h10.4" strokeWidth="2.3" />
1850
</g>
19-
<text
20-
x="16"
21-
y="22.5"
22-
textAnchor="middle"
23-
fontSize="12"
24-
fontWeight="700"
25-
fontFamily="Arial, Helvetica, sans-serif"
26-
fill="var(--mantine-color-body)"
27-
>
28-
29-
</text>
3051
</svg>
3152
);
3253
}

0 commit comments

Comments
 (0)