AdvisoryBoardMeeting_june2026/assets/css/deck.css
Jonathan Hvid 088de7292f deck: slide 13 — wider boxes, taller colored header, numbers in color, new title
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:15:53 +02:00

1002 lines
32 KiB
CSS

/* =============================================================
Bifrost Advisory Board — deck stylesheet
Full-screen scroll-snap presentation. 19 slides.
Nordic-editorial system; Bifrost aurora used as a quiet accent.
============================================================= */
*, *::before, *::after { box-sizing: border-box; }
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
html, body {
margin: 0;
padding: 0;
height: 100%;
background: var(--paper);
color: var(--ink);
font-family: var(--font-sans);
line-height: 1.6;
}
body {
background:
radial-gradient(1200px 800px at 18% 30%, #fffcf7 0%, var(--paper) 55%, #f4efe2 100%);
}
img { display: block; max-width: 100%; }
/* ───────────────────── Scroll-snap scaffolding ───────────────────── */
.deck {
height: 100vh;
height: 100dvh;
overflow-y: scroll;
overflow-x: hidden;
scroll-snap-type: y mandatory;
scroll-behavior: smooth;
scrollbar-width: none; /* Firefox — hide the bar, the dot-nav is the wayfinder */
}
.deck::-webkit-scrollbar { width: 0; height: 0; }
.slide {
position: relative;
min-height: 100vh;
min-height: 100dvh;
scroll-snap-align: start;
scroll-snap-stop: always;
display: grid;
place-items: center;
padding: clamp(4rem, 9vh, 7rem) var(--edge) clamp(5rem, 11vh, 8rem);
overflow: hidden;
}
/* Inner column — keeps content measured and centred */
.slide-inner {
width: 100%;
max-width: 1180px;
margin-inline: auto;
}
/* Reveal-on-enter — subtle fade/rise, applied by the IntersectionObserver.
Gated behind `.js` so the deck stays fully visible if the script fails
to load (graceful degradation — content over animation). */
.js .reveal > * {
opacity: 0;
transform: translateY(22px);
transition: opacity 720ms var(--ease-entrance), transform 720ms var(--ease-entrance);
}
.slide.in-view .reveal > * { opacity: 1; transform: none; }
.slide.in-view .reveal > *:nth-child(2) { transition-delay: 90ms; }
.slide.in-view .reveal > *:nth-child(3) { transition-delay: 170ms; }
.slide.in-view .reveal > *:nth-child(4) { transition-delay: 250ms; }
.slide.in-view .reveal > *:nth-child(5) { transition-delay: 330ms; }
@media (prefers-reduced-motion: reduce) {
.deck { scroll-behavior: auto; }
.reveal > * { opacity: 1 !important; transform: none !important; transition: none !important; }
}
/* ───────────────────── Persistent chrome ───────────────────── */
/* Top-left wordmark — quiet masthead present on every slide */
.masthead {
position: fixed;
top: clamp(20px, 3vh, 34px);
left: clamp(22px, 3vw, 44px);
z-index: 60;
width: clamp(92px, 9vw, 124px);
opacity: 0.82;
pointer-events: none;
}
.masthead img { width: 100%; height: auto; }
/* Slide number — quiet top-right counter */
.slide-counter {
position: fixed;
top: clamp(22px, 3vh, 36px);
right: clamp(24px, 3vw, 46px);
z-index: 60;
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(0.85rem, 1.1vw, 1rem);
color: var(--ink-dim);
letter-spacing: 0.02em;
}
.slide-counter b { font-style: normal; font-weight: 600; color: var(--ink-soft); }
/* ───────────────────── Dot-nav (bottom) ─────────────────────
One dot per slide, centred. Active = filled ink. Hover/focus floats a
Danish label tooltip above the dot. Every slide is reachable. */
.dot-nav-tray {
position: fixed;
left: 0; right: 0; bottom: 0;
height: 96px;
z-index: 45;
pointer-events: none;
background: linear-gradient(to bottom,
rgba(250,246,238,0) 0%,
rgba(250,246,238,0.82) 55%,
rgba(250,246,238,0.96) 100%);
}
.dot-nav {
position: fixed;
bottom: clamp(20px, 3.2vh, 34px);
left: 50%;
transform: translateX(-50%);
display: flex;
gap: clamp(6px, 0.85vw, 13px);
z-index: 50;
max-width: 96vw;
flex-wrap: wrap;
justify-content: center;
}
.dot-btn {
all: unset;
position: relative;
padding: 7px;
cursor: pointer;
display: flex; align-items: center; justify-content: center;
}
.dot-btn .dot {
width: 9px; height: 9px;
border-radius: 50%;
background: transparent;
box-shadow: inset 0 0 0 1.5px var(--ink-dim);
transition: background var(--dur-fast) var(--ease),
box-shadow var(--dur-fast) var(--ease),
transform var(--dur-fast) var(--ease);
}
.dot-btn:hover .dot,
.dot-btn:focus-visible .dot { box-shadow: inset 0 0 0 1.5px var(--ink); transform: scale(1.15); }
.dot-btn.is-active .dot {
background: var(--ink);
box-shadow: inset 0 0 0 1.5px var(--ink);
}
.dot-btn .label {
position: absolute;
bottom: calc(100% - 3px);
left: 50%;
transform: translate(-50%, 4px);
background: var(--paper-high);
color: var(--ink);
font-size: 10.5px;
letter-spacing: 0.16em;
text-transform: uppercase;
font-weight: 600;
padding: 7px 11px;
white-space: nowrap;
pointer-events: none;
opacity: 0;
box-shadow:
0 0 0 0.5px rgba(56,56,49,0.08),
0 10px 18px -10px rgba(56,56,49,0.24),
0 2px 6px -3px rgba(56,56,49,0.1);
transition: opacity var(--dur-fast) var(--ease), transform var(--dur-fast) var(--ease);
}
.dot-btn:hover .label,
.dot-btn:focus-visible .label { opacity: 1; transform: translate(-50%, 0); }
.dot-btn .label::before {
content: counter(dot) " · ";
color: var(--ink-dim);
}
.dot-nav { counter-reset: dot; }
.dot-btn { counter-increment: dot; }
/* ───────────────────── Shared editorial primitives ───────────────────── */
.eyebrow {
font-family: var(--font-sans);
font-size: clamp(0.72rem, 0.95vw, 0.84rem);
letter-spacing: 0.26em;
text-transform: uppercase;
color: var(--ink-dim);
font-weight: 600;
margin: 0 0 var(--space-5);
display: inline-flex;
align-items: center;
gap: 0.85rem;
}
.eyebrow::before {
content: "";
width: 30px; height: 1px;
background: currentColor;
}
.eyebrow.center { justify-content: center; }
.slide-title {
font-family: var(--font-serif);
font-weight: 400;
font-size: clamp(2.1rem, 4.4vw, 3.6rem);
line-height: 1.08;
letter-spacing: -0.022em;
color: var(--ink);
margin: 0;
text-wrap: pretty;
}
.slide-title em { font-style: italic; font-weight: 600; color: var(--terracotta); }
.lede {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1.15rem, 1.7vw, 1.5rem);
line-height: 1.5;
color: var(--ink-soft);
max-width: 46ch;
margin: var(--space-5) 0 0;
}
/* Thin aurora rule — the signature Bifrost accent line */
.aurora-rule {
height: 2px;
border: 0;
border-radius: 2px;
background: linear-gradient(to right,
var(--aurora-1), var(--aurora-2), var(--aurora-3), var(--aurora-4));
opacity: 0.9;
}
/* ════════════════════ THE BIG-QUESTION COMPONENT ════════════════════
Stripped to just the quoted question — no eyebrow, no rule, no aurora.
Large confident serif, centred, lots of air. A deliberate pause. */
.question {
text-align: center;
max-width: min(94vw, 1100px);
margin-inline: auto;
display: grid;
justify-items: center;
gap: clamp(1.6rem, 4vh, 2.6rem);
}
.question-text {
font-family: var(--font-serif);
font-weight: 360;
font-size: clamp(2.5rem, 4.9vw, 4.4rem); /* ~30% larger than before */
line-height: 1.16;
letter-spacing: -0.02em;
color: var(--ink);
margin: 0;
max-width: 100%;
text-wrap: balance;
}
/* Emphasis stays as quiet serif italic — no rainbow. */
.question-text em {
font-style: italic;
font-weight: 500;
color: var(--ink);
}
.question-prompts {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1.05rem, 1.6vw, 1.4rem);
color: var(--ink-soft);
margin: 0;
max-width: 44ch;
line-height: 1.7;
}
.question-prompts span { white-space: nowrap; }
.question-prompts .sep { color: var(--ink-faint); font-style: normal; padding: 0 0.35em; }
/* Question slides: lift the text ~10% higher and drop a quiet Fenja
wordmark just above the menu. */
.q-slide .slide-inner { transform: translateY(-9vh); }
.q-fenja {
position: absolute;
left: 50%;
bottom: clamp(76px, 13vh, 128px);
transform: translateX(-50%);
width: clamp(96px, 10vw, 138px);
height: auto;
opacity: 0.82;
pointer-events: none;
}
/* ════════════════════ Logo lockups ════════════════════ */
/* The Bifrost logo: aurora arc above a Newsreader wordmark. Reusable. */
.bifrost-logo {
display: inline-flex;
flex-direction: column;
align-items: center;
gap: 0.35em;
line-height: 1;
}
.bifrost-logo .arc {
width: 1.7em;
height: 0.85em;
overflow: visible;
}
.bifrost-logo .word {
font-family: var(--font-serif);
font-weight: 420;
letter-spacing: -0.012em;
color: var(--ink);
}
.bifrost-logo .word em { font-style: italic; }
/* size variants driven by font-size on the lockup */
.bifrost-logo { font-size: clamp(1.6rem, 3.4vw, 2.6rem); }
.bifrost-logo.lg { font-size: clamp(2.4rem, 6vw, 5rem); }
.bifrost-logo.sm { font-size: clamp(1.15rem, 2vw, 1.5rem); }
/* Fenja · Bifrost combined lockup (mission + closing slides) */
.brand-lockup {
display: flex;
align-items: center;
justify-content: center;
gap: clamp(1.4rem, 3.5vw, 3rem);
flex-wrap: wrap;
}
.brand-lockup .fenja-mark { width: clamp(150px, 18vw, 270px); height: auto; opacity: 0.92; }
.brand-lockup .dot-sep {
font-family: var(--font-serif);
font-size: clamp(2rem, 4vw, 3.2rem);
color: var(--ink-dim);
line-height: 1;
transform: translateY(-0.08em);
}
/* ════════════════════ Hero slides (1 welcome · 19 closing) ════════════════════
The old Project Bifrost intro: a single luminous aurora arc spanning the
stage, drawing in on load and breathing slowly so it looks alive when
left running. Centred text sits beneath the apex. */
.hero-slide { place-items: center; }
.bifrost-arc {
position: absolute;
inset: 0;
z-index: 0;
display: grid;
place-items: center;
pointer-events: none;
overflow: hidden;
}
.bifrost-arc svg {
width: min(122vw, 1560px);
height: auto;
overflow: visible;
transform: translateY(-7%);
}
.bifrost-arc path { fill: none; stroke-linecap: round; }
.bifrost-arc .arc-halo { stroke: url(#bifrostAurora); stroke-width: 26; filter: url(#auroraGlow); opacity: 0.5; }
.bifrost-arc .arc-main { stroke: url(#bifrostAurora); stroke-width: 3.5; }
.bifrost-arc .arc-thin { stroke: url(#bifrostAurora); stroke-width: 1.2; opacity: 0.6; }
/* Draw-in: pathLength is normalised to 1 so the dash math is resolution-free. */
.js .bifrost-arc path { stroke-dasharray: 1; stroke-dashoffset: 1; }
.slide.in-view .bifrost-arc .arc-halo { animation: arc-draw 2.6s var(--ease-entrance) 0.1s forwards, halo-breathe 7s ease-in-out 3s infinite; }
.slide.in-view .bifrost-arc .arc-main { animation: arc-draw 2.6s var(--ease-entrance) 0.35s forwards; }
.slide.in-view .bifrost-arc .arc-thin { animation: arc-draw 2.6s var(--ease-entrance) 0.6s forwards; }
@keyframes arc-draw { to { stroke-dashoffset: 0; } }
@keyframes halo-breathe { 0%, 100% { opacity: 0.42; } 50% { opacity: 0.62; } }
.hero-text {
position: relative;
z-index: 2;
text-align: center;
display: grid;
justify-items: center;
gap: clamp(0.9rem, 2.5vh, 1.6rem);
}
.hero-eyebrow {
font-family: var(--font-sans);
font-size: clamp(1.5rem, 2.25vw, 2rem); /* +50% */
letter-spacing: 0.3em;
text-transform: uppercase;
color: var(--ink-dim);
font-weight: 600;
/* Lifted higher above the wordmark. */
margin: 0 0 clamp(2.8rem, 8.5vh, 5.5rem);
}
/* "Project Bifrost" wordmark — the old reveal's typography. */
.bifrost-name {
font-family: var(--font-serif);
font-weight: 330;
font-size: clamp(3rem, 8vw, 6.5rem);
line-height: 1.02;
letter-spacing: -0.03em;
color: var(--ink);
margin: clamp(1.3rem, 4vh, 2.8rem) 0 0; /* nudged lower */
}
.bifrost-name .accent {
font-style: italic;
font-weight: 400;
background: linear-gradient(115deg, var(--aurora-1), var(--aurora-2), var(--aurora-3), var(--aurora-4));
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Lower line — same uppercase sans + ink-dim colour as the eyebrow. */
.hero-sub {
font-family: var(--font-sans);
font-style: normal;
font-size: clamp(1.5rem, 2.25vw, 2rem); /* matches the eyebrow, +50% */
letter-spacing: 0.3em;
text-transform: uppercase;
font-weight: 600;
color: var(--ink-dim);
margin: clamp(1.2rem, 3.5vh, 2.4rem) 0 0; /* dropped a little lower */
}
@media (prefers-reduced-motion: reduce) {
.js .bifrost-arc path { stroke-dashoffset: 0; }
.slide.in-view .bifrost-arc path { animation: none; }
}
/* ════════════════════ Slide 2 — Agenda ════════════════════ */
#slide-agenda .slide-inner { max-width: 900px; }
.agenda-title { margin-bottom: clamp(2rem, 5vh, 3.25rem); }
.agenda-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
.agenda-row {
display: grid;
grid-template-columns: minmax(150px, 0.32fr) 1fr;
gap: clamp(1.2rem, 3vw, 2.6rem);
align-items: baseline;
padding: clamp(0.85rem, 1.9vh, 1.25rem) 0;
border-top: 1px solid rgba(56,56,49,0.12);
}
.agenda-row:last-child { border-bottom: 1px solid rgba(56,56,49,0.12); }
.agenda-time {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1rem, 1.5vw, 1.3rem);
color: var(--ink-soft);
white-space: nowrap;
}
.agenda-label {
font-family: var(--font-sans);
font-weight: 500;
font-size: clamp(1.05rem, 1.7vw, 1.45rem);
color: var(--ink);
letter-spacing: -0.01em;
}
.agenda-row.is-break .agenda-label { color: var(--ink-dim); font-weight: 400; font-style: normal; }
/* ════════════════════ Slide 3 — Board / introductions ════════════════════ */
/* Wider container + slightly larger portraits keep the same air between
people (they just spread further out). */
#slide-board .slide-inner { max-width: 1320px; }
/* Only the title is lifted — transform leaves its layout box in place so
the portrait grid stays put. */
.board-head { text-align: center; margin-bottom: clamp(1.8rem, 4vh, 3rem); transform: translateY(-5vh); }
.board-head .slide-title { margin-inline: auto; max-width: 20ch; }
.board-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: clamp(1rem, 2vw, 2rem) clamp(1rem, 2.2vw, 2.4rem);
}
.board-member { margin: 0; text-align: center; }
/* Portraits ~10% larger, centred in their (now wider) cell. */
.board-portrait {
width: 52%;
aspect-ratio: 1 / 1;
margin: 0 auto 0.9rem;
border-radius: var(--radius-lg);
overflow: hidden;
background: var(--paper-3);
box-shadow:
0 0 0 0.5px rgba(56,56,49,0.06),
0 14px 28px -18px rgba(56,56,49,0.22);
}
.board-portrait img { width: 100%; height: 100%; object-fit: cover; }
/* Names at roughly double size — the dominant element of each card. */
.bm-name {
font-family: var(--font-serif);
font-size: clamp(1.55rem, 2.5vw, 2.3rem);
line-height: 1.12;
color: var(--ink);
margin: 0 0 0.3rem;
letter-spacing: -0.015em;
text-wrap: balance;
}
.bm-title {
font-family: var(--font-sans);
font-size: clamp(0.98rem, 1.21vw, 1.11rem); /* +20%, then +10% */
color: var(--ink-soft);
margin: 0 0 0.15rem;
line-height: 1.35;
}
.bm-company {
font-family: var(--font-sans);
font-size: clamp(0.87rem, 1.08vw, 1rem); /* +20%, then +10% */
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--ink-dim);
font-weight: 600;
margin: 0;
}
@media (max-width: 900px) {
.board-grid { grid-template-columns: repeat(2, 1fr); }
}
/* ════════════════════ Slide 4 — Mission ════════════════════
Big Fenja wordmark centred; values directly beneath in the same ink;
Project Bifrost lockup below. The supporter row is pinned to the very
bottom of the slide, just above the menu. */
.mission-slide {
grid-template-rows: 1fr auto;
align-items: center;
justify-items: center;
padding-bottom: clamp(6rem, 12vh, 9rem); /* lift the supporter row off the bottom */
}
.mission-main {
align-self: center;
text-align: center;
display: grid;
justify-items: center;
gap: clamp(1.4rem, 3.5vh, 2.4rem);
}
.mission-fenja { width: clamp(240px, 32vw, 460px); height: auto; }
/* Values left-aligned under the wordmark — same box width as the logo,
one line (it may run a touch past the logo's right edge). */
.mission-values {
font-family: var(--font-sans);
font-weight: 600;
font-size: clamp(1.36rem, 2.42vw, 2.04rem); /* +40%, then -3% */
letter-spacing: 0.01em;
color: var(--ink);
margin: 0;
width: clamp(240px, 32vw, 460px);
text-align: left;
white-space: nowrap;
}
/* Foot — pinned to the bottom row of the slide, full width so the logos
can spread out to the edges. */
.mission-foot {
align-self: end;
justify-self: stretch;
width: 100%;
text-align: center;
display: grid;
justify-items: center;
gap: clamp(1.8rem, 4.5vh, 3rem); /* lift the caption a little off the logos */
}
.mission-foot .partner-caption {
font-size: clamp(0.85rem, 1.5vw, 1.2rem);
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--ink-dim);
font-weight: 600;
margin: 0;
}
/* Mission supporter logos — wide spacing between them, with per-logo
size adjustments. Innovationsfonden is the largest footprint, BII and
Datatilsynet held back. (Innovationsfonden's PNG is cropped tight so its
height reads true.) */
/* Spread across the full width, with an explicit horizontal margin on
every logo so each one carries its own breathing room (and the outer
marks no longer hug the screen edges). */
.partner-row.mission-logos {
width: 100%;
flex-wrap: nowrap;
justify-content: space-between;
gap: 0;
}
.mission-logos .partner-logo { margin-inline: clamp(0.32rem, 0.9vw, 1.09rem); } /* -20%, then -20% */
.mission-logos .partner-logo img {
height: clamp(34px, 4vw, 48px);
max-width: clamp(140px, 18vw, 230px);
opacity: 0.82;
}
.mission-logos .partner-logo img.logo-inf { height: clamp(40px, 4.8vw, 58px); max-width: clamp(200px, 26vw, 300px); } /* +50% footprint */
.mission-logos .partner-logo img.logo-bii { height: clamp(27px, 3.2vw, 40px); } /* -20% */
.mission-logos .partner-logo img.logo-dt { height: clamp(37px, 4.4vw, 54px); } /* +5%, then +10% */
.mission-logos .partner-logo img.logo-ds { height: clamp(62px, 7.32vw, 88px); } /* +15%, +20%, then +20% */
.mission-logos .partner-logo img.logo-dcai { height: clamp(52px, 6.1vw, 73px); } /* +15%, then +20% */
/* Quiet partner-logo row (sandbox) */
.partner-row {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: clamp(1.2rem, 3vw, 2.6rem);
}
.partner-logo {
display: flex;
align-items: center;
justify-content: center;
}
/* Authority logos, normalised to a uniform height so the row reads as one
quiet supportive band. Slightly desaturated + held back in opacity so it
never competes with the slide's headline. */
.partner-logo img {
height: clamp(24px, 2.8vw, 36px);
width: auto;
max-width: clamp(120px, 16vw, 200px);
object-fit: contain;
opacity: 0.78;
filter: saturate(0.9);
}
/* Square-ish marks (Innovationsfonden, DCAI) carry more height so their
optical weight matches the wide wordmark lockups beside them. */
.partner-logo.tall img { height: clamp(34px, 4vw, 52px); }
/* Larger, airier variant — sandbox slide. Logos are wide wordmarks, so
they're sized as large as fits side by side (width-capped); ds is the
bigger of the two. */
.partner-row.lg { gap: clamp(1.5rem, 4vw, 3rem); }
.partner-row.lg .partner-logo img { height: clamp(39px, 4.7vw, 60px); opacity: 0.85; }
/* The two sandbox wordmarks are stacked so each can be large without the
pair overrunning the viewport width. */
.sandbox-logos {
width: 100%;
flex-direction: column;
align-items: center;
flex-wrap: nowrap;
gap: clamp(0.9rem, 2.2vh, 1.6rem);
}
.partner-row.lg .partner-logo img.ds-logo { height: clamp(120px, 14.5vw, 178px); max-width: min(86vw, 828px); }
.partner-row.lg .partner-logo img.dt-logo { height: clamp(84px, 9.8vw, 118px); max-width: min(64vw, 524px); }
/* ════════════════════ Slide 6 — Pause ════════════════════ */
#slide-pause { }
#slide-pause .slide-inner { text-align: center; display: grid; justify-items: center; gap: clamp(1.5rem, 4vh, 2.5rem); position: relative; z-index: 2; }
.pause-word {
font-family: var(--font-serif);
font-weight: 330;
font-size: clamp(3.5rem, 11vw, 9rem);
letter-spacing: -0.03em;
color: var(--ink);
margin: 0;
line-height: 1;
}
.pause-sub {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1.1rem, 1.8vw, 1.5rem);
color: var(--ink-soft);
margin: 0;
}
.pause-clock {
font-family: var(--font-sans);
font-size: clamp(1.08rem, 1.45vw, 1.26rem); /* +50% */
letter-spacing: 0.28em;
text-transform: uppercase;
color: var(--ink-dim);
font-weight: 600;
}
/* ════════════════════ Slide 7 — Platform architecture ════════════════════ */
.arch-inner { max-width: 1200px; }
.arch-head { text-align: center; margin-bottom: clamp(1.2rem, 3vh, 2.2rem); }
.arch-head .arch-title {
font-family: var(--font-serif);
font-weight: 400;
font-size: clamp(2.2rem, 4.2vw, 3.4rem); /* ~30% larger */
letter-spacing: -0.02em;
color: var(--ink);
margin: 0;
}
.arch-head .arch-sub {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1.3rem, 2vw, 1.65rem);
color: var(--ink-soft);
margin: 0.35rem 0 0;
}
.arch-frame {
position: relative;
border: 1px solid rgba(56,56,49,0.16);
border-radius: var(--radius-xl);
/* More air on the sides + a clear top inset so the corner label sits clean. */
padding: clamp(2rem, 3.6vw, 3.2rem) clamp(2.2rem, 4.5vw, 4rem) clamp(1.8rem, 3.2vw, 2.6rem);
background: linear-gradient(180deg, rgba(255,252,247,0.6), rgba(246,242,232,0.35));
display: grid;
gap: clamp(0.9rem, 1.9vh, 1.5rem);
}
/* "Everything Client-Managed" — up in the top-right corner. */
.arch-frame-label {
position: absolute;
top: clamp(0.9rem, 1.8vw, 1.4rem);
right: clamp(1.4rem, 3vw, 2.4rem);
font-family: var(--font-sans);
font-size: clamp(0.72rem, 0.92vw, 0.84rem);
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--ink-dim);
font-weight: 600;
}
.arch-group { display: grid; gap: 0.7rem; }
.arch-group-head { display: flex; align-items: baseline; gap: 0.9rem; }
.arch-group-label {
font-family: var(--font-sans);
font-weight: 700;
font-size: clamp(1.1rem, 1.45vw, 1.32rem);
letter-spacing: 0.02em;
color: var(--ink);
}
.arch-group-caption {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1rem, 1.3vw, 1.24rem);
color: var(--ink-soft);
}
.arch-cards { display: grid; gap: clamp(0.7rem, 1.3vw, 1.1rem); }
.arch-cards.c3 { grid-template-columns: repeat(3, 1fr); }
.arch-cards.c4 { grid-template-columns: repeat(4, 1fr); }
.arch-card {
background: var(--paper-high);
border-radius: var(--radius-md);
padding: clamp(1rem, 1.7vw, 1.5rem) clamp(1rem, 1.6vw, 1.35rem);
box-shadow:
0 0 0 0.5px rgba(56,56,49,0.06),
0 10px 22px -16px rgba(56,56,49,0.22);
display: grid;
gap: 0.3rem;
align-content: start;
min-height: clamp(118px, 15vh, 158px); /* taller boxes */
}
.arch-card .ac-name {
font-family: var(--font-sans);
font-weight: 600;
font-size: clamp(1.05rem, 1.35vw, 1.28rem);
color: var(--ink);
margin: 0;
line-height: 1.2;
}
.arch-card .ac-italic {
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(0.95rem, 1.2vw, 1.14rem);
color: var(--ink-soft);
margin: 0;
}
.arch-card .ac-mono {
font-family: var(--font-sans);
font-size: clamp(0.78rem, 0.98vw, 0.9rem);
letter-spacing: 0.03em;
color: var(--ink-dim);
margin: 0.15rem 0 0;
}
@media (max-width: 860px) {
.arch-cards.c3, .arch-cards.c4 { grid-template-columns: repeat(2, 1fr); }
}
/* ════════════════════ Solo word slides (Demo · Roadmap) ════════════════════ */
.solo-slide .slide-inner { text-align: center; display: grid; justify-items: center; }
.solo-word {
font-family: var(--font-serif);
font-weight: 330;
font-size: clamp(4rem, 13vw, 11rem);
letter-spacing: -0.035em;
line-height: 1;
color: var(--ink);
margin: 0;
}
/* ════════════════════ Section dividers (Suverænitet · Vores tilgang) ════════════════════ */
.section-divider .slide-inner { text-align: center; display: grid; justify-items: center; gap: clamp(1.6rem, 4vh, 2.5rem); }
.divider-fenja { width: clamp(150px, 18vw, 240px); height: auto; margin-bottom: 0.5rem; opacity: 0.92; }
.section-title {
font-family: var(--font-serif);
font-weight: 360;
font-size: clamp(2.2rem, 5vw, 4.2rem);
line-height: 1.08;
letter-spacing: -0.025em;
color: var(--ink);
margin: 0;
max-width: 16ch;
text-wrap: balance;
}
.section-title em { font-style: italic; font-weight: 460; color: var(--terracotta); }
/* One-line variant (Suverænitet divider) — fits on a single line, +25%. */
.section-title.one-line {
max-width: none;
white-space: nowrap;
font-size: clamp(1.55rem, 3.85vw, 3.6rem);
}
/* ════════════════════ Slide 13 — risk boxes (icon-art styling) ════════════════════
The original card: a coloured gradient header with a line icon, then a
body of number / name / lead / two bullets. */
.hl-inner { max-width: 1580px; }
.highlights-head { text-align: center; margin-bottom: clamp(1.2rem, 3vh, 2.2rem); }
.highlights-head .slide-title { font-size: clamp(2rem, 3.6vw, 3rem); }
.highlight-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: clamp(0.9rem, 1.6vw, 1.4rem);
align-items: stretch;
}
.highlight-box {
position: relative;
border-radius: var(--radius-lg);
overflow: hidden;
background: var(--paper-high);
box-shadow:
0 0 0 0.5px rgba(56,56,49,0.06),
0 18px 36px -22px rgba(56,56,49,0.28);
display: flex;
flex-direction: column;
}
.highlight-art {
position: relative;
height: clamp(160px, 23vh, 232px);
flex: 0 0 auto;
display: grid;
place-items: center;
overflow: hidden;
}
.highlight-art svg { width: 38%; height: 38%; stroke: rgba(255,252,247,0.92); }
.highlight-box[data-tone="terracotta"] .highlight-art { background: linear-gradient(150deg, #c98a78, #a4553b); }
.highlight-box[data-tone="indigo"] .highlight-art { background: linear-gradient(150deg, #7b91a6, #5a6d83); }
.highlight-box[data-tone="heather"] .highlight-art { background: linear-gradient(150deg, #a594a0, #6e5a86); }
.highlight-box[data-tone="ochre"] .highlight-art { background: linear-gradient(150deg, #d4b478, #b08a3e); }
.highlight-body {
padding: clamp(1.3rem, 2.1vw, 1.9rem);
display: grid;
gap: 0.5rem;
align-content: start;
flex: 1;
}
.highlight-num {
position: absolute;
top: clamp(0.7rem, 1.4vh, 1.1rem);
left: clamp(0.9rem, 1.5vw, 1.4rem);
font-family: var(--font-serif);
font-style: italic;
font-size: clamp(1.5rem, 2.1vw, 2rem);
line-height: 1;
color: rgba(255,252,247,0.9);
}
.highlight-name {
font-family: var(--font-serif);
font-weight: 400;
font-size: clamp(1.55rem, 2.3vw, 2.1rem);
line-height: 1.1;
letter-spacing: -0.015em;
color: var(--ink);
margin: 0;
}
.highlight-lead {
font-family: var(--font-sans);
font-weight: 600;
font-size: clamp(1.15rem, 1.5vw, 1.45rem);
line-height: 1.34;
color: var(--ink);
margin: 0.35rem 0 0;
}
.highlight-bullets { list-style: none; margin: 0.35rem 0 0; padding: 0; display: grid; gap: 0.55rem; }
.highlight-bullets li {
position: relative;
padding-left: 1.1rem;
font-family: var(--font-sans);
font-size: clamp(1.05rem, 1.35vw, 1.28rem);
line-height: 1.36;
color: var(--ink-soft);
}
.highlight-bullets li::before {
content: "";
position: absolute;
left: 0; top: 0.55em;
width: 6px; height: 6px;
border-radius: 50%;
background: var(--ink-faint);
}
/* ════════════════════ Slide 16 — solution boxes (green text cards) ════════════════════ */
.sol-inner { max-width: 1380px; }
.solution-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: clamp(0.8rem, 1.5vw, 1.4rem);
align-items: stretch;
}
.solution-box {
background: linear-gradient(180deg, rgba(109,140,124,0.12), rgba(255,252,247,0.65));
border-radius: var(--radius-md);
border-top: 3px solid var(--copper);
box-shadow:
0 0 0 0.5px rgba(56,56,49,0.06),
0 16px 32px -22px rgba(56,56,49,0.26);
padding: clamp(1.4rem, 2.1vw, 1.95rem) clamp(1.2rem, 1.7vw, 1.55rem);
display: grid;
gap: clamp(0.85rem, 1.7vh, 1.4rem);
align-content: start;
text-align: left;
}
.sol-head {
font-family: var(--font-sans);
font-weight: 700;
font-size: clamp(1.4rem, 1.85vw, 1.7rem);
letter-spacing: -0.01em;
line-height: 1.18;
color: var(--ink);
margin: 0;
}
.sol-head .sol-num { color: var(--copper); }
.sol-lead {
font-family: var(--font-serif);
font-size: clamp(1.4rem, 1.7vw, 1.62rem);
line-height: 1.3;
color: var(--ink);
margin: 0;
}
.sol-list { list-style: none; margin: 0; padding: 0; display: grid; gap: clamp(0.7rem, 1.4vh, 1.05rem); }
.sol-list li {
position: relative;
padding-left: 1.15rem;
font-family: var(--font-sans);
font-size: clamp(1.25rem, 1.5vw, 1.42rem);
line-height: 1.38;
color: var(--ink-soft);
}
.sol-list li::before {
content: "";
position: absolute;
left: 0; top: 0.6em;
width: 6px; height: 6px;
border-radius: 50%;
background: var(--copper);
}
@media (max-width: 980px) {
.highlight-grid, .solution-grid { grid-template-columns: repeat(2, 1fr); }
}
/* ════════════════════ Slide 12 — Meme ════════════════════ */
#slide-meme .slide-inner { display: grid; justify-items: center; gap: clamp(1.2rem, 3vh, 1.9rem); text-align: center; }
.meme-title {
font-family: var(--font-serif);
font-weight: 400;
font-size: clamp(2rem, 4vw, 3.2rem);
letter-spacing: -0.02em;
color: var(--ink);
margin: 0;
}
.meme-frame {
padding: clamp(0.6rem, 1.4vw, 1rem);
background: var(--paper-high);
border-radius: var(--radius-lg);
box-shadow:
0 0 0 0.5px rgba(56,56,49,0.07),
0 30px 60px -28px rgba(56,56,49,0.34),
0 6px 16px -8px rgba(56,56,49,0.16);
max-width: min(820px, 86vw);
}
.meme-frame img {
border-radius: calc(var(--radius-lg) - 6px);
max-height: 70vh;
width: auto;
}
/* ════════════════════ Slide 15 — Regulatory sandbox ════════════════════ */
.sandbox-inner { text-align: center; display: grid; justify-items: center; gap: clamp(1.2rem, 3vh, 2rem); max-width: 980px; align-content: center; }
.sandbox-title {
font-family: var(--font-serif);
font-weight: 360;
font-size: clamp(2.86rem, 6.2vw, 5.1rem); /* +10% */
line-height: 1.06;
letter-spacing: -0.025em;
color: var(--ink);
margin: 0;
max-width: 18ch;
text-wrap: balance;
}
.sandbox-body {
font-family: var(--font-serif);
font-size: clamp(1.38rem, 2.2vw, 1.8rem); /* +20% */
line-height: 1.5;
color: var(--ink-soft);
margin: 0;
max-width: 52ch;
text-wrap: pretty;
}
/* ════════════════════ Slide 19 — Closing ════════════════════ */
/* "Tak for jeres rådgivning" sits above the arc; the full-size Project
Bifrost wordmark sits below it — a big gap splits them across the arc. */
.thanks-text { gap: clamp(11rem, 28vh, 19rem); transform: translateY(-6vh); }
.thanks-title {
font-family: var(--font-serif);
font-weight: 340;
font-size: clamp(2.8rem, 7vw, 6rem);
letter-spacing: -0.03em;
color: var(--ink);
margin: 0;
line-height: 1;
}
.thanks-title em { font-style: italic; font-weight: 440; }
/* "Project Bifrost" wordmark — same size as slide 1, sitting below the arc. */
.thanks-bifrost { font-size: clamp(3rem, 8vw, 6.5rem); margin: 0; }
/* Small responsive guard for very short viewports */
@media (max-height: 640px) {
.slide { padding-top: clamp(3rem, 6vh, 4rem); padding-bottom: clamp(3.5rem, 7vh, 5rem); }
}