Skip to content

Commit 3e3f4aa

Browse files
authored
Merge pull request #35 from mobiera/feat/verana-lockups
feat(trust): real Verana lockups on the three bodies' cards, Playground button
2 parents c040626 + 8489da7 commit 3e3f4aa

10 files changed

Lines changed: 101 additions & 10 deletions

File tree

app/components/VeranaLockup.tsx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* The three Verana lockups, reproduced from the sister sites' own Nav
3+
* components so the marks, wordmark typefaces and colors match:
4+
* - verana.io: gradient tile with a white bull-horn V, "Verana" in Space
5+
* Grotesk 700 (letter-spacing -0.03em).
6+
* - Verana Foundation: purple V with the green triangle, "Verana" +
7+
* "Foundation" in Inter 600 (-0.02em), "Foundation" in the Foundation's
8+
* purple.
9+
* - Verana Council: the V and both words in the ink color, Inter 600.
10+
* The official mark files are kept in public/assets/logos/ for reference.
11+
*/
12+
const V_OUTER = "M26.9932 51.6972L5.805 11.0977L2.91263 16.2161L0 10.6048L5.98725 0L26.9932 40.2483L47.9993 0L54 10.6217L51.0773 16.2161L48.1849 11.0977L26.9932 51.6972Z";
13+
const V_INNER = "M13.696 0L26.9935 25.4637L39.9367 0H13.696Z";
14+
15+
export type LockupVariant = "verana" | "foundation" | "council";
16+
17+
const LABEL: Record<LockupVariant, string> = { verana: "Verana", foundation: "Verana Foundation", council: "Verana Council" };
18+
19+
export default function VeranaLockup({ variant, size = 24 }: { variant: LockupVariant; size?: number }) {
20+
return (
21+
<span className={`lockup lockup-${variant}`} role="img" aria-label={LABEL[variant]}>
22+
{variant === "verana" ? (
23+
<svg width={size} height={size} viewBox="0 0 64 64" fill="none" aria-hidden="true">
24+
<defs>
25+
<linearGradient id="verana-mark-gradient" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse">
26+
<stop offset="0%" stopColor="#763EF0" />
27+
<stop offset="100%" stopColor="#9F7AEA" />
28+
</linearGradient>
29+
</defs>
30+
<rect width="64" height="64" rx="12" fill="url(#verana-mark-gradient)" />
31+
<g transform="translate(12.3 13.1) scale(0.7407)">
32+
<path d={V_OUTER} fill="#fff" />
33+
<path d={V_INNER} fill="#fff" />
34+
</g>
35+
</svg>
36+
) : (
37+
<svg width={size} height={Math.round((size * 52) / 54)} viewBox="0 0 54 52" aria-hidden="true">
38+
<path d={V_OUTER} fill={variant === "foundation" ? "#763EF0" : "currentColor"} />
39+
<path d={V_INNER} fill={variant === "foundation" ? "#1FB57A" : "currentColor"} />
40+
</svg>
41+
)}
42+
{variant === "verana" && <span className="lockup-grotesk" aria-hidden="true">Verana</span>}
43+
{variant === "foundation" && <span className="lockup-inter" aria-hidden="true">Verana<span className="dot">Foundation</span></span>}
44+
{variant === "council" && <span className="lockup-inter" aria-hidden="true">Verana<span>Council</span></span>}
45+
</span>
46+
);
47+
}

app/globals.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
--glow: rgba(131, 83, 242, 0.28);
4646
--mark-fill: rgba(131, 83, 242, 0.06);
4747
--mark-stroke: rgba(131, 83, 242, 0.35);
48+
--verana-purple: #a892ff; /* veranafoundation.org --color-purple, dark */
4849
--shadow: 0 20px 50px -30px rgba(0, 0, 0, 0.7);
4950
}
5051

@@ -68,6 +69,7 @@
6869
--glow: rgba(131, 83, 242, 0.16);
6970
--mark-fill: rgba(131, 83, 242, 0.05);
7071
--mark-stroke: rgba(131, 83, 242, 0.30);
72+
--verana-purple: #763ef0; /* veranafoundation.org --color-purple, light */
7173
--shadow: 0 20px 50px -30px rgba(12, 18, 60, 0.5);
7274
}
7375

@@ -237,6 +239,16 @@ a { color: inherit; }
237239
.pot-score i.off { background: var(--rule); }
238240
.pot-verdict { margin-left: auto; font-family: var(--font-display); font-weight: 600; color: var(--green-ink); }
239241

242+
/* Verana lockups (marks and wordmarks as on the sister sites) ------------ */
243+
.lockup { display: inline-flex; align-items: center; gap: 10px; white-space: nowrap; color: var(--ink); line-height: 1; }
244+
.lockup-grotesk { font-family: var(--font-space-grotesk), "Space Grotesk", sans-serif; font-weight: 700; letter-spacing: -0.03em; font-size: 1.3rem; }
245+
.lockup-inter { font-family: var(--font-inter), "Inter", sans-serif; font-weight: 600; letter-spacing: -0.02em; font-size: 1.3rem; }
246+
.lockup-inter .dot { color: var(--verana-purple); }
247+
.btn-lockup { gap: 12px; padding-left: 12px; }
248+
.btn-lockup .lockup-grotesk { font-size: 1.05rem; }
249+
.btn-lockup > span:not(.lockup) { border-left: 1px solid var(--rule); padding-left: 12px; }
250+
.btn-lockup .arrow { border-left: 0; padding-left: 0; }
251+
240252
/* Logos ------------------------------------------------------------------- */
241253
/* The customer and partner logos are white artwork on transparent grounds
242254
(carried over from the old site, which showed them on its navy footer).

app/layout.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Metadata } from "next";
2-
import { IBM_Plex_Mono, Manrope, Sora } from "next/font/google";
2+
import { IBM_Plex_Mono, Inter, Manrope, Sora, Space_Grotesk } from "next/font/google";
33
import "@fortawesome/fontawesome-svg-core/styles.css";
44
import { config as faConfig } from "@fortawesome/fontawesome-svg-core";
55
import "./globals.css";
@@ -14,6 +14,9 @@ import { SITE_DESCRIPTION, SITE_NAME, SITE_TAGLINE, SITE_URL } from "./lib/site"
1414
const sora = Sora({ subsets: ["latin"], weight: ["500", "600", "700"], variable: "--font-sora", display: "swap" });
1515
const manrope = Manrope({ subsets: ["latin"], weight: ["400", "500", "600"], variable: "--font-manrope", display: "swap" });
1616
const plexMono = IBM_Plex_Mono({ subsets: ["latin"], weight: ["400", "500"], variable: "--font-plex-mono", display: "swap" });
17+
// Wordmark faces of the Verana sites, used only by the VeranaLockup component.
18+
const inter = Inter({ subsets: ["latin"], weight: ["600"], variable: "--font-inter", display: "swap" });
19+
const spaceGrotesk = Space_Grotesk({ subsets: ["latin"], weight: ["700"], variable: "--font-space-grotesk", display: "swap" });
1720

1821
export const metadata: Metadata = {
1922
metadataBase: new URL(SITE_URL),
@@ -38,7 +41,7 @@ const themeInitScript = `
3841

3942
export default function RootLayout({ children }: { children: React.ReactNode }) {
4043
return (
41-
<html lang="en" data-theme="dark" suppressHydrationWarning className={`${sora.variable} ${manrope.variable} ${plexMono.variable}`}>
44+
<html lang="en" data-theme="dark" suppressHydrationWarning className={`${sora.variable} ${manrope.variable} ${plexMono.variable} ${inter.variable} ${spaceGrotesk.variable}`}>
4245
<head>
4346
<script dangerouslySetInnerHTML={{ __html: themeInitScript }} />
4447
</head>

app/trust/page.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { Metadata } from "next";
22
import { faCertificate, faDiagramProject, faHandshake, faHeadset, faMobileScreen, faSitemap } from "@fortawesome/free-solid-svg-icons";
3+
import VeranaLockup from "@/app/components/VeranaLockup";
34
import { ButtonLink, Card, CardTitle, Chips, CtaBand, Feature, MoreLink, PageHero, Section } from "@/app/components/ui";
45
import { TRUST_STANDARDS } from "@/app/lib/content";
56
import { LINKS } from "@/app/lib/site";
@@ -43,7 +44,11 @@ export default function Page() {
4344
</Section>
4445

4546
<Section eyebrow="What Verana is, in one paragraph" lead="Verana is the open, public, neutral trust infrastructure for the internet, in three parts: sovereign trust ecosystems that define who is accredited to issue and verify credentials; verifiable identity, where a service, a person or an AI agent proves who is behind it before any connection; and the Trust Graph, which makes services discoverable by the credentials they hold. Open source, owned by no one.">
46-
<ButtonLink href={LINKS.verana}>Read more on verana.io</ButtonLink>
47+
<a href={LINKS.verana} className="btn btn-lockup" rel="noopener">
48+
<VeranaLockup variant="verana" size={22} />
49+
<span>Read more on verana.io</span>
50+
<span className="arrow" aria-hidden="true"></span>
51+
</a>
4752
</Section>
4853

4954
<Section eyebrow="Use cases we lead with">

app/trust/services/page.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Metadata } from "next";
22
import { faIdCard, faServer, faSitemap, faWallet } from "@fortawesome/free-solid-svg-icons";
33
import { ButtonLink, CtaBand, Feature, PageHero, Section, Steps } from "@/app/components/ui";
4+
import { LINKS } from "@/app/lib/site";
45

56
export const metadata: Metadata = {
67
title: "Trust services",
@@ -13,6 +14,7 @@ export default function Page() {
1314
<>
1415
<PageHero eyebrow="Trust services" title="From governance framework to production issuer." lead="We design the ecosystem, deploy the verifiable services, integrate the wallets, and run what you do not want to run yourself.">
1516
<ButtonLink href="/contact?topic=trust" variant="primary">Talk to us</ButtonLink>
17+
<ButtonLink href={LINKS.playground}>Playground</ButtonLink>
1618
</PageHero>
1719

1820
<Section>

app/trust/verana/page.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Metadata } from "next";
2-
import { faGavel, faGlobe, faGraduationCap, faLandmark, faTowerCell, faUsers } from "@fortawesome/free-solid-svg-icons";
3-
import { ButtonLink, Card, CardTitle, CtaBand, Feature, PageHero, Section } from "@/app/components/ui";
2+
import { faGraduationCap, faTowerCell, faUsers } from "@fortawesome/free-solid-svg-icons";
3+
import VeranaLockup from "@/app/components/VeranaLockup";
4+
import { ButtonLink, Card, CtaBand, Feature, PageHero, Section } from "@/app/components/ui";
45
import { LINKS } from "@/app/lib/site";
56

67
export const metadata: Metadata = {
@@ -21,17 +22,17 @@ export default function Page() {
2122
<Section eyebrow="Three bodies, three sites" lead="Mobiera's site describes Mobiera's role. For the protocol itself, read those three.">
2223
<div className="grid-3">
2324
<Card>
24-
<CardTitle icon={faLandmark}>Verana Foundation</CardTitle>
25+
<h3 className="card-title"><VeranaLockup variant="foundation" /></h3>
2526
<p className="text-muted">The steward. Specifications, software, membership, working groups.</p>
2627
<a className="more" href={LINKS.foundation} rel="noopener">veranafoundation.org ↗</a>
2728
</Card>
2829
<Card>
29-
<CardTitle icon={faGavel}>Verana Council</CardTitle>
30+
<h3 className="card-title"><VeranaLockup variant="council" /></h3>
3031
<p className="text-muted">The governor. A non-profit Swiss association that governs and secures the live network and its ECS Ecosystem, one member one vote.</p>
3132
<a className="more" href={LINKS.council} rel="noopener">veranacouncil.org ↗</a>
3233
</Card>
3334
<Card>
34-
<CardTitle icon={faGlobe}>verana.io</CardTitle>
35+
<h3 className="card-title"><VeranaLockup variant="verana" /></h3>
3536
<p className="text-muted">The network and its software. Documentation, the Playground, the roadmap.</p>
3637
<a className="more" href={LINKS.verana} rel="noopener">verana.io ↗</a>
3738
</Card>

public/assets/logos/verana-io.svg

Lines changed: 17 additions & 0 deletions
Loading
Lines changed: 4 additions & 0 deletions
Loading

spec/pages/trust-services.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ url: /trust/services
99
We design the ecosystem, deploy the verifiable services, integrate the wallets,
1010
and run what you do not want to run yourself.
1111

12-
> CTA: Talk to us → /contact?topic=trust
12+
> CTA: Talk to us → /contact?topic=trust · Playground → https://playground.testnet.verana.network/
1313
1414
## Ecosystem design and governance
1515

spec/pages/trust.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ agent proves who is behind it before any connection; and the Trust Graph, which
5656
makes services discoverable by the credentials they hold. Open source, owned by
5757
no one.
5858

59-
> CTA: Read more on verana.io → https://verana.io
59+
> CTA: Read more on verana.io → https://verana.io (button carries the verana.io lockup: gradient tile, white V, "Verana" in Space Grotesk)
6060
6161
## Use cases we lead with
6262

0 commit comments

Comments
 (0)