diff --git a/src/pages/index.astro b/src/pages/index.astro index 5ba9ddb..a69f1ab 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -19,36 +19,37 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder

Welcome, {firstName}.

- -
+ +

Secure and sovereign AI for regulated environments. Project Bifrost is where we build it — together with the organisations who will depend on it.

-
+ - -
-
-

What Fenja is

-
-

- Fenja is a platform for running advanced AI inside the customer's own infrastructure. - We are building the premier solution for public authorities and organisations in - heavily regulated industries — where trust, auditability, and data residency are not - preferences but legal requirements. -

-

- Standard AI solutions hosted on foreign-owned public clouds are simply not a viable - or compliant option for organisations in the public sector, defence, pharmaceuticals, - or finance. Fenja enables advanced, customer-hosted AI within the client's own secure - infrastructure. Data remains under absolute, localised control, with the traceability - and documentation the market demands. -

-
+ +
+
+

+ We can't build our digital
fortress on foreign clouds. +

+
— The Project Bifrost premise
+
+
+ + +
+
+ +

+ Fenja is a platform for running advanced AI inside the customer's own infrastructure. + We build for public authorities and regulated industries — pharmaceuticals, defence, + finance — where standard AI on foreign-owned public clouds is simply not a viable + or compliant option. Data remains under absolute, localised control, + with the traceability and documentation the market demands. +

-

97%

@@ -56,11 +57,11 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder

— Stanford AI Index, 2024

-
+ -
-

What Project Bifrost is

+
+

Project Bifrost is the first pilot — a working collaboration between Fenja and five @@ -74,20 +75,20 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder knowledge base needs to understand. Their input is built in, not bolted on.

-
+ -
-
+
+
{innofoundarLogoExists ? ( ) : (
- Innofounder logo — add public/innofounder-logo.svg + Innofounder logo — add public/innofounder-logo.png
)} -

Backed by Innofounder

+

Fenja is backed by Innofounder — Innovation Fund Denmark's programme for @@ -103,15 +104,17 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder conditions for a genuine win-win: you shape the platform, and the platform works for you.

-
+ - -
-

What we ask

+ +
+

+ What we ask.
What you get. +

-

Pilot participants

-
    +

    Pilot participants

    +
    • A few hours a month over three to four months
    • Running the software in your own environment
    • Direct feedback on what works and what does not
    • @@ -120,8 +123,8 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder
-

Advisory Board members

-
    +

    Advisory Board members

    +
    • Quarterly conversations to shape direction
    • Access to all updates, roadmap, and meetings in this hub
    • No software deployment required
    • @@ -129,7 +132,7 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder
-
+
@@ -169,7 +172,7 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder section.innerHTML = `

Welcome to Project Bifrost.

-

+

We will be in touch shortly to arrange the next step.

@@ -194,6 +197,11 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder padding: 0 var(--space-20) var(--space-16); } + /* ── Reading column — prose-density sections ─────────────────────── */ + .reading-col { + max-width: var(--reading-max); + } + /* ── Hero ────────────────────────────────────────────────────────── */ .hero { padding-top: var(--space-16); @@ -213,11 +221,9 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder letter-spacing: var(--tracking-snug); } - /* ── Opening statement ───────────────────────────────────────────── */ + /* ── Opening ─────────────────────────────────────────────────────── */ .opening { - padding-bottom: var(--space-12); - border-bottom: var(--ghost-border); - max-width: 52rem; + margin-bottom: var(--space-10); } .opening-statement { @@ -230,52 +236,76 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder margin: 0; } - /* ── Sections ────────────────────────────────────────────────────── */ - .section { - padding: var(--space-12) 0; - border-bottom: var(--ghost-border); + /* ── Pulled quote — full-width breakout ──────────────────────────── */ + .quote-break { + margin: var(--space-20) 0; } - .section-heading { + .pulled-quote { + margin: 0; + padding: 0 0 0 var(--space-6); + border-left: 3px solid var(--secondary); + display: flex; + flex-direction: column; + gap: var(--space-4); + max-width: 52rem; + } + + .pulled-quote__text { + font-family: var(--font-serif); + font-size: var(--text-display-md); + font-style: italic; + font-weight: 400; + letter-spacing: var(--tracking-tight); + line-height: var(--leading-snug); + color: var(--on-surface); + margin: 0; + } + + .pulled-quote__attribution { + font-family: var(--font-sans); + font-size: var(--text-label-md); letter-spacing: var(--tracking-wider); text-transform: uppercase; color: var(--on-surface-muted); - margin-bottom: var(--space-6); } - /* ── Fenja section — two-column layout ──────────────────────────── */ - .fenja-section { + /* ── Fenja row — asymmetric two-column ───────────────────────────── */ + .fenja-row { display: grid; - grid-template-columns: 1fr 18rem; + grid-template-columns: 1fr 16rem; gap: var(--space-12); align-items: start; + margin-bottom: var(--space-10); } - .section-text { - display: flex; - flex-direction: column; - } - - .section-text .section-heading { - margin-bottom: var(--space-6); - } - - /* ── Prose ───────────────────────────────────────────────────────── */ - .prose { + .fenja-text { display: flex; flex-direction: column; gap: var(--space-5); + max-width: 36rem; } - .prose .body-lg { + .fenja-text .body-lg { margin: 0; color: var(--on-surface-variant); line-height: var(--leading-relaxed); } + /* ── Section label ───────────────────────────────────────────────── */ + .section-label { + font-family: var(--font-sans); + font-size: var(--text-label-md); + font-weight: 500; + letter-spacing: var(--tracking-wider); + text-transform: uppercase; + color: var(--on-surface-muted); + margin: 0 0 var(--space-4); + } + /* ── Stat figure ─────────────────────────────────────────────────── */ .stat-figure { - margin: var(--space-8) 0 0; + margin: var(--space-4) 0 0; display: flex; flex-direction: column; gap: var(--space-3); @@ -295,7 +325,7 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder font-family: var(--font-sans); font-size: var(--text-body-md); color: var(--on-surface-variant); - max-width: 16rem; + max-width: 14rem; line-height: var(--leading-relaxed); } @@ -305,93 +335,141 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder margin: 0; } - /* ── Innofounder section ─────────────────────────────────────────── */ - .innofounder-section { + /* ── Prose ───────────────────────────────────────────────────────── */ + .prose { display: flex; flex-direction: column; + gap: var(--space-5); } - .innofounder-header { - display: flex; - align-items: center; - gap: var(--space-5); - margin-bottom: var(--space-6); + .prose .body-lg { + margin: 0; + color: var(--on-surface-variant); + line-height: var(--leading-relaxed); + } + + /* ── Bifrost block ───────────────────────────────────────────────── */ + .bifrost-block { + margin-bottom: var(--space-10); + } + + /* ── Innofounder block ───────────────────────────────────────────── */ + .innofounder-block { + margin-bottom: 0; + } + + .innofounder-logo-row { + margin-bottom: var(--space-5); } .innofounder-logo { - height: 32px; - width: auto; + width: 120px; + height: auto; display: block; } .innofounder-placeholder { - display: flex; + display: inline-flex; align-items: center; justify-content: center; - height: 32px; - padding: 0 var(--space-4); + width: 120px; + height: 40px; background: var(--surface-container); border-radius: var(--radius-sm); + padding: 0 var(--space-3); } .innofounder-placeholder .label-sm { color: var(--on-surface-muted); - letter-spacing: var(--tracking-wide); + letter-spacing: var(--tracking-normal); + font-size: var(--text-label-sm); + text-align: center; + line-height: var(--leading-snug); } .innofounder-placeholder code { font-family: var(--font-mono); font-size: 0.9em; - color: var(--on-surface-variant); } - .innofounder-section .section-heading { + /* ── What we ask — full-width breakout ───────────────────────────── */ + .ask-break { + margin-top: var(--space-24); margin-bottom: 0; } - .innofounder-section .prose { - margin-top: 0; + .ask-headline { + font-family: var(--font-serif); + font-size: var(--text-display-md); + font-weight: 400; + letter-spacing: var(--tracking-tight); + line-height: var(--leading-snug); + color: var(--on-surface); + margin: 0 0 var(--space-10); + } + + .ask-headline em { + font-weight: 700; + font-style: italic; } - /* ── What we ask — two cards ─────────────────────────────────────── */ .ask-grid { display: grid; grid-template-columns: 1fr 1fr; - gap: var(--space-6); - max-width: 52rem; + gap: var(--space-8); + max-width: 56rem; } .ask-card { - background: var(--surface-container-lowest); - border-radius: var(--radius-md); - padding: var(--space-6); display: flex; flex-direction: column; - gap: var(--space-4); + gap: var(--space-5); + padding: var(--space-8); + background: var(--surface-container-lowest); + border-radius: var(--radius-md); } .ask-card-title { font-family: var(--font-serif); + font-size: var(--text-headline-sm); font-weight: 700; font-style: italic; letter-spacing: var(--tracking-snug); + line-height: var(--leading-snug); color: var(--on-surface); margin: 0; } .ask-list { - padding-left: var(--space-5); + list-style: none; + padding: 0; margin: 0; - color: var(--on-surface-variant); display: flex; flex-direction: column; - gap: var(--space-2); + gap: var(--space-4); + } + + .ask-list li { + font-family: var(--font-sans); + font-size: var(--text-body-lg); + color: var(--on-surface-variant); line-height: var(--leading-relaxed); + padding-left: var(--space-5); + position: relative; + } + + .ask-list li::before { + content: '—'; + position: absolute; + left: 0; + color: var(--on-surface-muted); + font-family: var(--font-serif); } /* ── Join CTA ────────────────────────────────────────────────────── */ .join-section { - padding: var(--space-16) 0 var(--space-12); + margin-top: var(--space-24); + padding-bottom: var(--space-16); max-width: 44rem; } @@ -417,13 +495,8 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder text-align: left; transition: color var(--duration-fast) var(--ease-standard); } - .join-btn:hover { - color: var(--secondary-dim); - } - .join-btn:disabled { - opacity: 0.6; - cursor: default; - } + .join-btn:hover { color: var(--secondary-dim); } + .join-btn:disabled { opacity: 0.6; cursor: default; } .join-hint { color: var(--on-surface-muted); @@ -432,7 +505,6 @@ const innofoundarLogoExists = existsSync(join(process.cwd(), 'public/innofounder line-height: var(--leading-relaxed); } - /* Confirmed state (injected by JS or server-rendered) */ .join-confirmed { display: flex; flex-direction: column;