/* ============================================================= 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). Whole block lifted a touch. */ #slide-board .slide-inner { max-width: 1320px; transform: translateY(-9vh); } .board-head { text-align: center; margin-bottom: clamp(1.8rem, 4vh, 3rem); } .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 share the logo's box width and indent to where the "Fenja AI" wordmark begins, so the text sits left-aligned under the wordmark. */ .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); box-sizing: border-box; padding-left: 27%; text-align: left; } /* 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 the logos across the full width — Innovationsfonden hard left, DCAI hard right, the rest evenly spaced between. */ .mission-logos { width: 100%; max-width: 1500px; margin-inline: auto; flex-wrap: nowrap; justify-content: space-between; gap: clamp(1rem, 2.5vw, 2.5rem); } .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(34px, 4vw, 49px); } /* +5% */ .mission-logos .partner-logo img.logo-ds { height: clamp(43px, 5.1vw, 61px); } /* +15% */ .mission-logos .partner-logo img.logo-dcai { height: clamp(43px, 5.1vw, 61px); } /* +15% */ /* 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 ~30% bigger than the mission row, digitaliseringsstyrelsen a further 10% on top. */ .partner-row.lg { gap: clamp(2.4rem, 6vw, 5rem); } .partner-row.lg .partner-logo img { height: clamp(39px, 4.7vw, 60px); opacity: 0.85; } .partner-row.lg .partner-logo img.ds-logo { height: clamp(91px, 11vw, 143px); } /* +50%, then +30% */ .partner-row.lg .partner-logo img.dt-logo { height: clamp(66px, 7.9vw, 101px); } /* +30%, then +30% */ /* ════════════════════ 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: 1200px; } .highlights-head { text-align: center; margin-bottom: clamp(1rem, 2.6vh, 1.8rem); } .highlights-head .slide-title { font-size: clamp(1.5rem, 2.8vw, 2.3rem); } .highlight-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(0.9rem, 1.8vw, 1.5rem); 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 { height: clamp(108px, 15vh, 150px); flex: 0 0 auto; display: grid; place-items: center; overflow: hidden; } .highlight-art svg { width: 44%; height: 44%; 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(1rem, 1.6vw, 1.35rem); display: grid; gap: 0.4rem; align-content: start; flex: 1; } .highlight-num { font-family: var(--font-serif); font-style: italic; font-size: 0.85rem; color: var(--ink-dim); } .highlight-name { font-family: var(--font-serif); font-weight: 400; font-size: clamp(1.1rem, 1.55vw, 1.38rem); line-height: 1.12; letter-spacing: -0.015em; color: var(--ink); margin: 0; } .highlight-lead { font-family: var(--font-sans); font-weight: 600; font-size: clamp(0.8rem, 1vw, 0.92rem); line-height: 1.38; color: var(--ink); margin: 0.2rem 0 0; } .highlight-bullets { list-style: none; margin: 0.2rem 0 0; padding: 0; display: grid; gap: 0.35rem; } .highlight-bullets li { position: relative; padding-left: 0.85rem; font-family: var(--font-sans); font-size: clamp(0.72rem, 0.9vw, 0.82rem); line-height: 1.38; color: var(--ink-soft); } .highlight-bullets li::before { content: ""; position: absolute; left: 0; top: 0.5em; width: 5px; height: 5px; 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.1rem, 1.7vw, 1.55rem) clamp(1rem, 1.5vw, 1.3rem); display: grid; gap: clamp(0.6rem, 1.2vh, 1rem); align-content: start; text-align: left; } .sol-head { font-family: var(--font-sans); font-weight: 700; font-size: clamp(0.95rem, 1.25vw, 1.15rem); letter-spacing: -0.01em; color: var(--ink); margin: 0; } .sol-head .sol-num { color: var(--copper); } .sol-lead { font-family: var(--font-serif); font-size: clamp(0.95rem, 1.18vw, 1.12rem); line-height: 1.32; color: var(--ink); margin: 0; } .sol-list { list-style: none; margin: 0; padding: 0; display: grid; gap: clamp(0.45rem, 0.95vh, 0.75rem); } .sol-list li { position: relative; padding-left: 0.95rem; font-family: var(--font-sans); font-size: clamp(0.78rem, 0.95vw, 0.9rem); line-height: 1.42; color: var(--ink-soft); } .sol-list li::before { content: ""; position: absolute; left: 0; top: 0.5em; width: 5px; height: 5px; 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.6rem, 4vh, 2.6rem); 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); } }