/* Sprint Core – floating menu, hero rotator, Spline layer. Author: Tech Fly */

:root {
	/* Palette (the red is fixed brand; the rest is built around it) */
	--sprint-red: #ee2c2c;      /* Signal Red: brand mark, lines, active */
	--sprint-ember: #c41f26;    /* buttons / small red text (AA with white) */
	--sprint-night: #0b1f26;    /* Petrol Night: base, hero */
	--sprint-petrol: #12313b;   /* Deep Petrol: dark bands, pill bases */
	--sprint-paper: #edf0ee;    /* Survey Paper: reading sections */
	--sprint-ink: #17242a;      /* Graphite: body text */
	--sprint-cable: #7e9399;    /* Cable Grey: secondary text, rules */
	--sprint-label-bg: var(--sprint-paper);
	--sprint-glass: rgba(255, 255, 255, .15);
	--sprint-glass-border: #ddd;
	--sprint-glass-shadow: 0 0 25px 0 rgba(153, 153, 153, .3);
	--sprint-fmenu-top: 30px;
	--sprint-fmenu-right: 30px;
	--sprint-fmenu-step: 70px;   /* distance between stacked items */
	--sprint-fmenu-first: 80px;  /* first item offset below the trigger */
	--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
	--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
}
body.admin-bar { --sprint-fmenu-top: 62px; }

/* ---------------- Theme Builder header ----------------
   Header layout section has class `sprint-header`: it takes no space and
   floats over the first section (hero / page header band). Logo top-left,
   [sprint_menu] is fixed top-right on its own. */
.et-l--header { position: relative; z-index: 60; height: 0; }
.sprint-header.et_pb_section { position: absolute !important; top: 0; left: 0; right: 0; padding: 0 !important; background: transparent !important; }
.sprint-header .et_pb_row { padding: 0 !important; min-height: 0; }
.sprint-header .sprint-header__logo { position: absolute; top: 28px; left: 32px; width: clamp(150px, 15vw, 210px); margin: 0 !important; }
.sprint-header .sprint-header__logo img { filter: drop-shadow(0 4px 12px rgb(0 0 0 / 35%)); }
body.admin-bar .sprint-header .sprint-header__logo { top: 28px; }
@media (max-width: 767px) { .sprint-header .sprint-header__logo { top: 20px; left: 16px; width: 132px; } }

/* ---------------- Floating menu ----------------
   Occasional action -> standard motion. Purpose: spatial consistency
   (items come out of the trigger and go back into it). Transform/opacity
   only, transitions (not keyframes) so a fast double-click retargets. */
.sprint-fmenu { position: fixed; top: var(--sprint-fmenu-top); right: var(--sprint-fmenu-right); z-index: 999; }
.sprint-fmenu__trigger,
.sprint-fmenu__item > a {
	display: grid; place-items: center;
	border-radius: 50%;
	background: var(--sprint-glass);
	border: 1px solid var(--sprint-glass-border);
	box-shadow: var(--sprint-glass-shadow), 0 2px 25px rgba(0, 0, 0, .1);
	-webkit-backdrop-filter: blur(15.9px);
	backdrop-filter: blur(15.9px);
	color: var(--sprint-red);
}
.sprint-fmenu__trigger {
	position: relative; z-index: 100;
	width: 70px; height: 70px; padding: 0; cursor: pointer;
	/* entrance + three pulses: see motion pass 2 */
	transition: transform 160ms var(--ease-out);
}
.sprint-fmenu__trigger:active { transform: scale(0.96); }
.sprint-fmenu__trigger svg { width: 34px; height: 34px; }
.sprint-fmenu__trigger .sprint-fmenu__ico {
	grid-area: 1 / 1;
	transition: transform 250ms var(--ease-out), opacity 200ms var(--ease-out);
}
.sprint-fmenu__ico--close { opacity: 0; transform: scale(0.6) rotate(-90deg); }
.sprint-fmenu.is-open .sprint-fmenu__ico--open { opacity: 0; transform: scale(0.6) rotate(90deg); }
.sprint-fmenu.is-open .sprint-fmenu__ico--close { opacity: 1; transform: none; }

.sprint-fmenu__list { list-style: none; margin: 0; padding: 0; }
.sprint-fmenu__item {
	position: absolute; top: 5px; right: 5px; /* resting place: behind the trigger */
	z-index: calc(99 - var(--order));
	opacity: 0; pointer-events: none;
	transform: translateY(0) scale(0.9);
	/* Closing: all items return together, fast, no stagger. */
	transition: transform 200ms var(--ease-out), opacity 150ms var(--ease-out);
}
.sprint-fmenu.is-open .sprint-fmenu__item {
	opacity: 1; pointer-events: auto;
	transform: translateY(calc(var(--sprint-fmenu-first) + var(--order) * var(--sprint-fmenu-step) - 5px)) scale(1);
	transition-duration: 250ms, 200ms;
	transition-delay: calc(var(--order) * 40ms); /* 6 items -> whole menu out in ~450ms */
}
.sprint-fmenu__item > a { position: relative; width: 60px; height: 60px; text-decoration: none; }
/* icons: block-level and centred (inline spans left descender space under them) */
.sprint-fmenu__ico { display: grid; place-items: center; line-height: 0; }
.sprint-fmenu__ico svg { display: block; }
.sprint-fmenu__item .sprint-fmenu__ico svg { width: 28px; height: 28px; }
@media (max-width: 767px) { .sprint-fmenu__item .sprint-fmenu__ico svg { width: 24px; height: 24px; } }
/* language switcher: circle shows the other language, label offers both */
.sprint-fmenu__code { font: 600 17px/1 Rubik, Helvetica, Arial, sans-serif; letter-spacing: .04em; color: var(--sprint-red); }
.sprint-fmenu__langs { position: absolute; right: calc(60px * 1.3); top: 50%; transform: translateY(-50%); display: flex; gap: 4px; padding: 5px;
	background: var(--sprint-label-bg); border-radius: 5px; }
.sprint-fmenu__langs a { display: block; padding: 7px 12px; border-radius: 3px; white-space: nowrap; text-decoration: none;
	font: 500 15px/1.2 Rubik, Helvetica, Arial, sans-serif; color: var(--sprint-ink); transition: color 150ms ease, background-color 150ms ease; }
.sprint-fmenu__langs a[aria-current] { background: var(--sprint-night); color: var(--sprint-paper); }
@media (hover: hover) and (pointer: fine) {
	.sprint-fmenu__langs a:not([aria-current]):hover, .sprint-fmenu__item--lang > a:hover ~ .sprint-fmenu__langs a:not([aria-current]) { color: var(--sprint-red); }
}
.sprint-fmenu__langs a:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 1px; }
.sprint-fmenu__label {
	position: absolute; right: 130%; top: 50%; transform: translateY(-50%);
	min-width: 130px; padding: 12px 16px; white-space: nowrap;
	background: var(--sprint-label-bg); border-radius: 5px;
	font-family: 'Rubik', Helvetica, Arial, sans-serif; font-weight: 500; font-size: 16px; line-height: 1.2;
	color: var(--sprint-ink);
	transition: color 150ms ease;
}
.sprint-fmenu__item a:focus-visible .sprint-fmenu__label,
.sprint-fmenu__item a[aria-current="page"] .sprint-fmenu__label { color: var(--sprint-red); }
@media (hover: hover) and (pointer: fine) {
	.sprint-fmenu__item a:hover .sprint-fmenu__label { color: var(--sprint-red); }
}
.sprint-fmenu a:focus-visible,
.sprint-fmenu__trigger:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 3px; }

@keyframes sprint-pulse {
	0%   { box-shadow: var(--sprint-glass-shadow), 0 0 0 0 rgba(238, 44, 44, .45); }
	100% { box-shadow: var(--sprint-glass-shadow), 0 0 0 1.25em rgba(238, 44, 44, 0); }
}

@media (max-width: 767px) {
	:root { --sprint-fmenu-top: 18px; --sprint-fmenu-right: 16px; --sprint-fmenu-step: 60px; --sprint-fmenu-first: 66px; }
	.sprint-fmenu__trigger { width: 58px; height: 58px; }
	.sprint-fmenu__item > a { width: 50px; height: 50px; }
	.sprint-fmenu__langs { right: calc(50px * 1.3); }
	.sprint-fmenu__item { right: 4px; }
}

/* ---------------- Hero text rotator ----------------
   Marketing / explanatory motion -> may run longer than UI.
   Transitions, so a click mid-change retargets instead of restarting. */
.sprint-rotator {
	margin: 0; padding: 0;
	font-family: 'Rubik', Helvetica, Arial, sans-serif; font-weight: 600;
	text-transform: uppercase; font-size: clamp(2.2rem, 6vw, 4.5em); line-height: 1.15;
	color: var(--sprint-paper);
}
.sprint-rotator__before {
	display: inline-block; margin-right: 15px; padding: .1em;
	color: var(--sprint-red);
	background: var(--sprint-glass); border: 1px solid var(--sprint-glass-border);
	border-radius: 0 15px 15px 15px; box-shadow: var(--sprint-glass-shadow);
	-webkit-backdrop-filter: blur(15.9px); backdrop-filter: blur(15.9px);
}
.sprint-rotator__words { display: inline-grid; cursor: pointer; vertical-align: top; overflow: hidden; }
.sprint-rotator__word {
	grid-area: 1 / 1;
	opacity: 0;
	transform: translateY(-40%);
	transition: transform 450ms var(--ease-out), opacity 300ms var(--ease-out);
}
.sprint-rotator__word.is-leaving { opacity: 0; transform: translateY(40%); transition-duration: 300ms, 200ms; }
.sprint-rotator__word.is-active { opacity: 1; transform: none; }

/* ---------------- Inner-page H1 red line ----------------
   Once per page load, the page's one orchestrated moment.
   Add class `sprint-line` to the Divi heading module. clip-path is
   compositor-friendly and avoids scaleX distortion of the 2px stroke. */
.sprint-line .et_pb_module_header,
.sprint-line h1 { position: relative; padding-bottom: .45em; }
.sprint-line .et_pb_module_header::after,
.sprint-line h1::after {
	content: ""; position: absolute; left: 0; bottom: 0;
	width: min(320px, 60%); height: 2px; background: var(--sprint-red);
	clip-path: inset(0 100% 0 0);
	animation: sprint-line-draw 700ms var(--ease-out) 200ms forwards;
}
@keyframes sprint-line-draw { to { clip-path: inset(0 0 0 0); } }

/* ---------------- Windmill preloader ----------------
   Old site's windmill, blades spinning (2s/turn, origin 61% 55% as before).
   Exit: the windmill fades, then the petrol layer and a red layer behind it
   slide up one after the other (the old "dual colour slide up"). */
.sprint-preloader { display: none; }
html.sprint-pl-on .sprint-preloader { display: block; position: fixed; inset: 0; z-index: 100000; pointer-events: none; }
.sprint-preloader__layer { position: absolute; inset: 0; background: var(--sprint-night);
	background-image: radial-gradient(circle at center, rgb(18 49 59 / 35%) 50ex, rgb(11 31 38 / 78%) 100ex), url("bg-grid.webp");
	transition: transform 800ms var(--ease-in-out); }
.sprint-preloader__layer--accent { background: var(--sprint-red); transition-delay: 160ms; }
.sprint-preloader__mark { position: absolute; inset: 0; display: grid; place-items: center;
	transition: opacity 300ms var(--ease-out), transform 400ms var(--ease-out); }
.sprint-windmill { width: 110px; height: auto; overflow: visible; filter: drop-shadow(0 10px 30px rgb(0 0 0 / 35%)); }
.sprint-windmill #spwm-wieken { transform-box: view-box; transform-origin: 61% 55%; animation: sprint-spin 2s linear infinite; }
@keyframes sprint-spin { to { transform: rotate(360deg); } }
html.sprint-pl-done .sprint-preloader__mark { opacity: 0; transform: translateY(-12px); }
html.sprint-pl-done .sprint-preloader__layer { transform: translateY(-100%); }
html.sprint-pl-done .sprint-preloader__layer:not(.sprint-preloader__layer--accent) { transition-delay: 120ms; }
html.sprint-pl-done .sprint-preloader__layer--accent { transition-delay: 260ms; }
/* the hero entrance waits for the preloader */
html.sprint-pl-on:not(.sprint-pl-done) .sprint-hero * { animation-play-state: paused; }
@media (prefers-reduced-motion: reduce) {
	.sprint-preloader__layer, .sprint-preloader__mark { transition: opacity 300ms ease; transition-delay: 0ms !important; }
	html.sprint-pl-done .sprint-preloader__layer { transform: none; opacity: 0; }
}

/* ---------------- Hero section + Spline layer ----------------
   Divi: hero section gets CSS class `sprint-hero`. First row holds ONE Code
   module with [sprint_spline] + [sprint_hero_extras]; it becomes the full
   background layer. Following rows (rotator, intro, button) sit above it. */
.sprint-hero { position: relative; min-height: 100svh; overflow: hidden; isolation: isolate;
	background: var(--sprint-night); display: flex; flex-direction: column; justify-content: center; }
.sprint-hero::before { /* petrol radial + grid overlay */
	content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
	background-image:
		radial-gradient(circle at center, rgb(18 49 59 / 35%) 50ex, rgb(11 31 38 / 78%) 100ex),
		var(--sprint-grid, url("bg-grid.webp"));
	background-repeat: repeat;
}
.sprint-hero .et_pb_row { position: relative; z-index: 3; }
/* the background row (contains .sprint-spline) is lifted out of the flow */
.sprint-hero .et_pb_row.sprint-spline-row,
.sprint-hero .et_pb_row:has(.sprint-spline) { position: absolute !important; inset: 0; z-index: 0 !important;
	max-width: none !important; width: 100% !important; margin: 0 !important; padding: 0 !important; }
.sprint-hero .et_pb_row:has(.sprint-spline) .et_pb_column,
.sprint-hero .et_pb_row:has(.sprint-spline) .et_pb_module,
.sprint-hero .sprint-spline-row .et_pb_code_inner { position: static !important; margin: 0 !important; }
/* Oversize the Spline layer downward: the "Built with Spline" badge sits in the
   iframe's bottom-right corner, so it ends up below the hero's clipped edge. */
.sprint-spline { position: absolute; inset: 0 0 -96px 0; z-index: 0;
	background: var(--sprint-fallback, none) center / cover no-repeat; }
.sprint-spline iframe { width: 100%; height: 100%; border: 0; pointer-events: none;
	opacity: 0; transition: opacity 1s ease 1.5s; }
.sprint-spline iframe.is-loaded { opacity: 1; }

.sprint-hero__scrim { position: absolute; inset: 0; z-index: 2; pointer-events: none;
	background:
		linear-gradient(90deg, rgb(11 31 38 / 88%) 0%, rgb(11 31 38 / 55%) 38%, rgb(11 31 38 / 0%) 68%),
		linear-gradient(0deg, rgb(11 31 38 / 90%) 0%, rgb(11 31 38 / 0%) 26%); }

/* Vertical "Enter" (kept from the old site), scrolls to the units */
.sprint-hero__enter { position: absolute; z-index: 4; left: 50%; bottom: 5vh; margin-left: -29px;
	display: grid; place-items: center; width: 58px; height: 58px; border-radius: 50%;
	background: var(--sprint-glass); border: 1px solid rgb(255 255 255 / 30%);
	box-shadow: var(--sprint-glass-shadow); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
	text-decoration: none;
	animation: sprint-hero-in 700ms var(--ease-out) 600ms both, sprint-enter-nudge 1.3s var(--ease-in-out) 3s 2; }
.sprint-hero__enter span { writing-mode: vertical-rl; transform: rotate(180deg); color: var(--sprint-red);
	font: 700 13px/1 Rubik, sans-serif; letter-spacing: .14em; text-transform: uppercase; translate: 0 -38px; }
@keyframes sprint-enter-nudge { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(7px); } }

/* EN | DE switch, bottom-right (also sits over the Spline badge corner) */
.sprint-hero__lang { position: absolute; z-index: 4; right: 28px; bottom: 26px; display: flex; gap: 2px; padding: 5px;
	border-radius: 999px; background: rgb(18 49 59 / 72%); border: 1px solid rgb(255 255 255 / 22%);
	-webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); }
.sprint-hero__lang a { display: grid; place-items: center; min-width: 44px; height: 34px; padding: 0 12px; border-radius: 999px;
	color: rgb(237 240 238 / 75%); font: 500 14px/1 Rubik, sans-serif; text-decoration: none;
	transition: color 150ms ease, background-color 150ms ease; }
.sprint-hero__lang a[aria-current] { background: var(--sprint-paper); color: var(--sprint-night); }
@media (hover: hover) and (pointer: fine) { .sprint-hero__lang a:not([aria-current]):hover { color: var(--sprint-paper); } }

/* Hero text: two fixed lines (badge, then rotating words) + one load sequence */
.sprint-hero .sprint-rotator { font-size: clamp(40px, 6.2vw, 92px); line-height: 1.04; letter-spacing: -.01em; }
.sprint-hero .sprint-rotator__before { display: table; margin-bottom: .14em; }
.sprint-hero .sprint-rotator__words { display: grid; }
.sprint-hero .sprint-rotator, .sprint-hero .sprint-hero-intro, .sprint-hero .sprint-hero-cta {
	animation: sprint-hero-in 700ms var(--ease-out) both; }
.sprint-hero .sprint-hero-intro { animation-delay: 120ms; }
.sprint-hero .sprint-hero-cta { animation-delay: 220ms; }
@keyframes sprint-hero-in { from { opacity: 0; transform: translateY(14px); } }
@supports (animation-timeline: view()) { /* content drifts up as the hero scrolls away */
	.sprint-hero .et_pb_row:not(:has(.sprint-spline)) { animation: sprint-hero-out linear both; animation-timeline: view(); animation-range: exit 5% exit 75%; }
	@keyframes sprint-hero-out { to { opacity: 0; transform: translateY(-70px); } }
}
@media (max-width: 767px) {
	.sprint-hero__scrim { background: linear-gradient(0deg, rgb(11 31 38 / 92%) 10%, rgb(11 31 38 / 45%) 60%, rgb(11 31 38 / 70%) 100%); }
	.sprint-hero__lang { right: 16px; bottom: 18px; }
	.sprint-spline { background-image: var(--sprint-fallback-m, var(--sprint-fallback, none)); background-position: center top; }
	.sprint-hero__enter { bottom: 20px; }
}

/* ---------------- Dot navigation ----------------
   Built by sprint-core.js from sections with class `sprint-dot`.
   Network style: a line with one junction per section; passed sections
   turn red as the line fills. Desktop only (as on the old site). */
.sprint-dotnav {
	position: fixed; right: 12px; top: 50%; z-index: 40; /* below the header layer (menu) */
	padding: 14px 8px; border-radius: 999px;
	background: rgb(11 31 38 / 58%); border: 1px solid rgb(255 255 255 / 18%);
	-webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
	box-shadow: 0 8px 30px rgb(11 31 38 / 25%);
	opacity: 0; pointer-events: none;
	transform: translate(12px, -50%);
	transition: opacity 250ms var(--ease-out), transform 300ms var(--ease-out);
}
.sprint-dotnav.is-visible { opacity: 1; pointer-events: auto; transform: translate(0, -50%); }
.sprint-dotnav ol { position: relative; list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
/* the line behind the junctions (track + red progress fill) */
.sprint-dotnav ol::before,
.sprint-dotnav__fill { content: ""; position: absolute; left: 50%; top: 14px; bottom: 14px; width: 2px; margin-left: -1px; }
.sprint-dotnav ol::before { background: rgb(126 147 153 / 45%); }
.sprint-dotnav__fill { background: var(--sprint-red); transform: scaleY(0); transform-origin: center top;
	transition: transform 450ms var(--ease-out); }
.sprint-dotnav a { position: relative; z-index: 1; display: grid; place-items: center; width: 28px; height: 28px; text-decoration: none; border-radius: 50%; }
.sprint-dotnav__dot { width: 12px; height: 12px; border-radius: 50%; background: var(--sprint-night);
	border: 2px solid rgb(126 147 153 / 85%);
	transition: border-color 200ms ease, box-shadow 200ms ease, transform 200ms var(--ease-out); }
.sprint-dotnav a.is-passed .sprint-dotnav__dot { border-color: var(--sprint-red); }
.sprint-dotnav a[aria-current] .sprint-dotnav__dot { border-color: var(--sprint-red); transform: scale(1.25);
	box-shadow: inset 0 0 0 2px var(--sprint-night), inset 0 0 0 6px var(--sprint-red); }
.sprint-dotnav__label {
	position: absolute; right: calc(100% + 16px); top: 50%; white-space: nowrap;
	padding: 8px 14px; border-radius: 5px; background: var(--sprint-paper); color: var(--sprint-ink);
	font: 500 14px/1.2 Rubik, Helvetica, Arial, sans-serif; box-shadow: 0 6px 20px rgb(11 31 38 / 22%);
	opacity: 0; transform: translate(6px, -50%); pointer-events: none;
	transition: opacity 150ms var(--ease-out), transform 200ms var(--ease-out);
}
.sprint-dotnav a:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 2px; }
.sprint-dotnav a:focus-visible .sprint-dotnav__label { opacity: 1; transform: translate(0, -50%); }
@media (hover: hover) and (pointer: fine) {
	.sprint-dotnav a:hover .sprint-dotnav__label { opacity: 1; transform: translate(0, -50%); }
	.sprint-dotnav a:hover .sprint-dotnav__dot { border-color: var(--sprint-paper); }
}
@media (max-width: 980px) { .sprint-dotnav { display: none; } }
@media (prefers-reduced-motion: reduce) {
	.sprint-dotnav, .sprint-dotnav.is-visible { transform: translate(0, -50%); transition: opacity 200ms ease; }
	.sprint-dotnav__fill, .sprint-dotnav__dot, .sprint-dotnav__label { transition: none; }
	.sprint-dotnav a[aria-current] .sprint-dotnav__dot { transform: none; }
}

/* ---------------- Scroll reveal ----------------
   Add class `sprint-reveal` (+ optional `sprint-d1`..`sprint-d4` for a
   stagger) to a Divi module. Runs once. Content stays visible without JS. */
html.sprint-js .sprint-reveal { opacity: 0; transform: translateY(18px);
	transition: opacity 600ms var(--ease-out), transform 700ms var(--ease-out); transition-delay: var(--d, 0ms); }
html.sprint-js .sprint-reveal.is-in { opacity: 1; transform: none; }
.sprint-d1 { --d: 80ms; } .sprint-d2 { --d: 160ms; } .sprint-d3 { --d: 240ms; } .sprint-d4 { --d: 320ms; }

@media (prefers-reduced-motion: reduce) {
	html.sprint-js .sprint-reveal { transform: none; transition: opacity 300ms ease; transition-delay: 0ms; }
	/* Fewer, gentler: keep opacity changes, drop movement. */
	.sprint-hero .sprint-rotator, .sprint-hero .sprint-hero-intro, .sprint-hero .sprint-hero-cta, .sprint-hero__enter { animation: sprint-fade 300ms ease both; }
	.sprint-hero .et_pb_row { animation: none !important; }
	.sprint-fmenu__trigger { animation: none; }
	.sprint-fmenu__item,
	.sprint-fmenu.is-open .sprint-fmenu__item { transform: translateY(calc(var(--sprint-fmenu-first) + var(--order) * var(--sprint-fmenu-step) - 5px)); transition: opacity 150ms ease; transition-delay: 0ms; }
	.sprint-fmenu__trigger .sprint-fmenu__ico { transform: none !important; transition: opacity 150ms ease; }
	.sprint-rotator__word, .sprint-rotator__word.is-leaving { transform: none; transition: opacity 200ms ease; }
	.sprint-line .et_pb_module_header::after, .sprint-line h1::after { animation: none; clip-path: none; }
}

@keyframes sprint-fade { from { opacity: 0; } }

/* =====================================================================
   COMPONENTS for native Divi sections (add the class in Advanced > CSS Class)
   ===================================================================== */
/* Section heading with a network junction: class `sprint-junction` on a Heading module */
.sprint-junction .et_pb_module_header { display: flex; align-items: center; gap: 14px; }
.sprint-junction .et_pb_module_header::before {
	content: ""; flex: 0 0 auto; width: 46px; height: 14px;
	background:
		radial-gradient(circle at calc(100% - 7px) 50%, var(--sprint-red) 2.5px, transparent 3px),
		radial-gradient(circle at calc(100% - 7px) 50%, transparent 5px, var(--sprint-red) 5.5px, var(--sprint-red) 7px, transparent 7.5px),
		linear-gradient(var(--sprint-red), var(--sprint-red)) left center / calc(100% - 14px) 2px no-repeat; }
html.sprint-js .sprint-junction.sprint-reveal .et_pb_module_header::before { clip-path: inset(0 100% 0 0); transition: clip-path 700ms var(--ease-out) 100ms; }
html.sprint-js .sprint-junction.sprint-reveal.is-in .et_pb_module_header::before { clip-path: inset(0 0 0 0); }
@media (max-width: 600px) { .sprint-junction .et_pb_module_header { flex-direction: column; align-items: flex-start; gap: 12px; } }

/* Text link (used by shortcodes) */
.sprint-textlink { color: inherit; font-weight: 500; text-decoration: none; border-bottom: 1px solid currentColor; padding-bottom: 3px; transition: color 150ms ease; }
@media (hover: hover) and (pointer: fine) { .sprint-textlink:hover { color: var(--sprint-ember); } }

/* Business units: row class `sprint-units`, each column `sprint-unit`.
   A red power line joins the columns; each junction lights as the line reaches it. */
.sprint-units { position: relative; padding-top: 34px !important; }
.sprint-units::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: var(--sprint-red); }
.sprint-unit { position: relative; }
.sprint-unit::before { content: ""; position: absolute; top: -41px; left: 0; width: 16px; height: 16px; border-radius: 50%; z-index: 1;
	background: var(--sprint-paper); border: 2px solid var(--sprint-red);
	box-shadow: inset 0 0 0 3px var(--sprint-paper), inset 0 0 0 8px var(--sprint-red); }
.sprint-unit .et_pb_image_wrap { display: block; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 2px 18px 2px 2px; }
.sprint-unit .et_pb_image img { width: 100%; height: 100%; object-fit: cover; transition: transform 600ms var(--ease-out); }
@media (hover: hover) and (pointer: fine) { .sprint-unit:hover .et_pb_image img { transform: scale(1.035); } }
html.sprint-js .sprint-units.sprint-reveal { opacity: 1; transform: none; }
html.sprint-js .sprint-units::before { transform: scaleX(0); transform-origin: left center; transition: transform 1100ms var(--ease-in-out); }
html.sprint-js .sprint-units.is-in::before { transform: none; }
html.sprint-js .sprint-unit::before { opacity: 0; transform: scale(.6); transition: opacity 250ms var(--ease-out), transform 350ms var(--ease-out); }
html.sprint-js .sprint-unit > * { opacity: 0; transform: translateY(18px); transition: opacity 600ms var(--ease-out), transform 700ms var(--ease-out); }
html.sprint-js .sprint-units.is-in .sprint-unit::before, html.sprint-js .sprint-units.is-in .sprint-unit > * { opacity: 1; transform: none; }
html.sprint-js .sprint-units.is-in .sprint-unit:nth-child(1)::before { transition-delay: 60ms; }
html.sprint-js .sprint-units.is-in .sprint-unit:nth-child(2)::before { transition-delay: 420ms; }
html.sprint-js .sprint-units.is-in .sprint-unit:nth-child(3)::before { transition-delay: 780ms; }
html.sprint-js .sprint-units.is-in .sprint-unit:nth-child(1) > * { transition-delay: 160ms; }
html.sprint-js .sprint-units.is-in .sprint-unit:nth-child(2) > * { transition-delay: 520ms; }
html.sprint-js .sprint-units.is-in .sprint-unit:nth-child(3) > * { transition-delay: 880ms; }
@media (max-width: 980px) {
	.sprint-units { padding-top: 0 !important; padding-left: 28px !important; }
	.sprint-units::before { left: 7px; right: auto; top: 0; bottom: 0; width: 2px; height: auto; }
	html.sprint-js .sprint-units::before { transform: scaleY(0); transform-origin: center top; }
	.sprint-unit::before { top: 2px; left: -28px; }
}

/* Dark grid band: section class `sprint-band-dark` */
.sprint-band-dark { background-color: var(--sprint-night) !important;
	background-image: radial-gradient(circle at 70% 50%, rgb(18 49 59 / 55%) 0, rgb(11 31 38 / 92%) 70ex), url("bg-grid.webp") !important;
	background-size: auto, 150px 150px !important; background-repeat: no-repeat, repeat !important; }
/* links on dark bands follow the text colour, red underline on hover */
.sprint-band-dark .et_pb_text a, .sprint-person a { color: inherit; text-decoration: none; border-bottom: 1px solid transparent; transition: border-color 150ms ease; }
@media (hover: hover) and (pointer: fine) { .sprint-band-dark .et_pb_text a:hover { border-color: var(--sprint-red); } }

/* Project index ([sprint_project_index]) */
.sprint-pi { display: grid; grid-template-columns: 6fr 5fr; gap: clamp(32px, 5vw, 80px); align-items: start; }
.sprint-pi__preview { position: sticky; top: 40px; aspect-ratio: 5 / 4; overflow: hidden; border-radius: 2px 22px 2px 2px; background: var(--sprint-petrol); }
.sprint-pi__preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0;
	transform: scale(1.045); transition: opacity 320ms var(--ease-out), transform 900ms var(--ease-out); }
.sprint-pi__preview img.is-on { opacity: 1; transform: none; }
html.sprint-js .sprint-pi__preview.sprint-reveal { transform: none; clip-path: inset(0 0 100% 0); transition: clip-path 900ms var(--ease-in-out), opacity 300ms ease; }
html.sprint-js .sprint-pi__preview.sprint-reveal.is-in { clip-path: inset(0 0 0 0); }
.sprint-pi__caption { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 60px 26px 22px; color: var(--sprint-paper);
	background: linear-gradient(0deg, rgb(11 31 38 / 85%), rgb(11 31 38 / 0%)); font: 500 19px/1.3 Rubik, sans-serif; }
.sprint-pi__caption small { display: block; color: rgb(237 240 238 / 70%); font-weight: 400; font-size: 14px; margin-bottom: 2px; }
.sprint-pi__group { margin: 34px 0 6px !important; padding: 0 !important; font: 500 15px/1.3 Rubik, sans-serif !important; color: var(--sprint-cable) !important; }
.sprint-pi__group:first-child { margin-top: 0 !important; }
.sprint-pi ul { list-style: none !important; margin: 0 !important; padding: 0 !important; border-top: 1px solid rgb(23 36 42 / 14%); }
.sprint-pi li { border-bottom: 1px solid rgb(23 36 42 / 14%); padding: 0 !important; }
.sprint-pi li a { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 13px 0; text-decoration: none;
	color: var(--sprint-ink); font: 500 18px/1.35 Rubik, sans-serif; transition: color 150ms ease; }
.sprint-pi li a::after { content: ""; flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; border: 2px solid rgb(23 36 42 / 25%);
	transition: border-color 150ms ease, background-color 150ms ease; }
.sprint-pi li a.is-on { color: var(--sprint-ember); }
.sprint-pi li a.is-on::after { border-color: var(--sprint-red); background: var(--sprint-red); }
.sprint-pi__all { margin-top: 30px !important; }
@media (max-width: 980px) { .sprint-pi { grid-template-columns: 1fr; } .sprint-pi__preview { position: relative; top: 0; } }

/* People: column class `sprint-person` (image + name + role + bio). Greyscale, colour on hover. */
.sprint-person .et_pb_image_wrap { display: block; aspect-ratio: 4 / 5; overflow: hidden; border-radius: 2px 22px 2px 2px;
	background: radial-gradient(circle at 50% 35%, rgb(126 147 153 / 35%), rgb(11 31 38 / 0%) 70%), url("bg-grid.webp") var(--sprint-night); }
.sprint-person .et_pb_image img { width: 100%; height: 100%; object-fit: cover; object-position: center top;
	filter: grayscale(1) contrast(1.06) brightness(.98); transition: filter 400ms ease; }
@media (hover: hover) and (pointer: fine) { .sprint-person:hover .et_pb_image img { filter: none; } }
@media (hover: none) { .sprint-person .et_pb_image img { filter: none; } }
html.sprint-js .sprint-person.sprint-reveal { transform: none; }
html.sprint-js .sprint-person.sprint-reveal .et_pb_image_wrap { clip-path: inset(100% 0 0 0); transition: clip-path 900ms var(--ease-in-out); }
html.sprint-js .sprint-person.sprint-reveal.is-in .et_pb_image_wrap { clip-path: inset(0 0 0 0); transition-delay: var(--d, 0ms); }

/* "Let's talk." heading: class `sprint-talk`; the red full stop lands last */
.sprint-talk .et_pb_module_header span { color: var(--sprint-red); display: inline-block; }
html.sprint-js .sprint-talk.sprint-reveal .et_pb_module_header span { opacity: 0; transform: translateY(-40%) scale(.5);
	transition: opacity 300ms var(--ease-out) 450ms, transform 600ms cubic-bezier(0.34, 1.56, 0.64, 1) 450ms; }
html.sprint-js .sprint-talk.sprint-reveal.is-in .et_pb_module_header span { opacity: 1; transform: none; }

/* Footer (TB footer section class `sprint-footer`) */
.sprint-footer a { color: rgb(237 240 238 / 70%); text-decoration: none; transition: color 150ms ease; }
@media (hover: hover) and (pointer: fine) { .sprint-footer a:hover { color: var(--sprint-paper); } }

@media (prefers-reduced-motion: reduce) {
	html.sprint-js .sprint-units::before, html.sprint-js .sprint-unit::before, html.sprint-js .sprint-junction .et_pb_module_header::before,
	html.sprint-js .sprint-person .et_pb_image_wrap, html.sprint-js .sprint-pi__preview.sprint-reveal { clip-path: none !important; transform: none !important; transition: none !important; }
	html.sprint-js .sprint-unit > *, html.sprint-js .sprint-talk .et_pb_module_header span { transform: none !important; transition: opacity 300ms ease !important; }
	.sprint-pi__preview img { transform: none; transition: opacity 200ms ease; }
}

/* Footer bar ([sprint_footer]) */
.sprint-footer { border-top: 1px solid rgb(237 240 238 / 10%); }
.sprint-footer .sprint-footer__logo { max-width: 150px; }
.sprint-footbar { display: flex; flex-wrap: wrap; gap: 14px 40px; align-items: center; justify-content: space-between;
	color: rgb(237 240 238 / 70%); font: 400 15px/1.5 Rubik, sans-serif; }
.sprint-footbar ul { list-style: none !important; display: flex; flex-wrap: wrap; gap: 6px 22px; margin: 0 !important; padding: 0 !important; }
.sprint-footbar li { padding: 0 !important; }
.sprint-footbar p { margin: 0; padding: 0; }

/* Inner-page chapters (Energy stages etc.): photo column `sprint-chapter__media` */
.sprint-chapter__media .et_pb_image_wrap { display: block; aspect-ratio: 4 / 5; overflow: hidden; border-radius: 2px 22px 2px 2px; background: var(--sprint-petrol); }
.sprint-chapter__media .et_pb_image img { width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 980px) { .sprint-chapter__media .et_pb_image_wrap { aspect-ratio: 16 / 10; } }
/* Page head band: H1 sits on the dark grid, red line draws once */
.sprint-pagehead .sprint-line .et_pb_module_header { color: var(--sprint-paper); }
/* Checklist on light bands */
.sprint-checklist ul { list-style: none !important; padding: 0 0 0 1.7em !important; margin: 0 !important; }
.sprint-checklist ul li { position: relative; padding: 6px 0 !important; border-bottom: 1px solid rgb(23 36 42 / 10%); }
.sprint-checklist ul li:last-child { border-bottom: 0; }
.sprint-checklist ul li::before { content: ""; position: absolute; left: -1.6em; top: 15px; width: 10px; height: 10px; border-radius: 50%;
	border: 2px solid var(--sprint-red); box-shadow: inset 0 0 0 2px transparent, inset 0 0 0 5px var(--sprint-red); background: transparent; }

/* Checklist on dark bands */
.sprint-checklist--dark ul li { border-bottom-color: rgb(237 240 238 / 12%); }
/* Client list: grid of name + sector */
.sprint-clients ul { list-style: none !important; margin: 0 !important; padding: 0 !important;
	display: grid; grid-template-columns: repeat(3, 1fr); gap: 0 36px; border-top: 1px solid rgb(23 36 42 / 14%); }
.sprint-clients li { padding: 14px 0 !important; border-bottom: 1px solid rgb(23 36 42 / 14%); }
.sprint-clients li strong { display: block; font-weight: 500; color: var(--sprint-night); }
.sprint-clients li span { display: block; font-size: 14px; color: var(--sprint-cable); }
@media (max-width: 980px) { .sprint-clients ul { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .sprint-clients ul { grid-template-columns: 1fr; } }

/* Process steps on dark bands: junctions filled with the band colour */
.sprint-band-dark .sprint-unit::before { background: var(--sprint-night); box-shadow: inset 0 0 0 3px var(--sprint-night), inset 0 0 0 8px var(--sprint-red); }
/* troveo audiences: photo on top, 16:10 */
.sprint-audience .et_pb_image_wrap { aspect-ratio: 16 / 10 !important; margin-bottom: 28px; }

/* snippet:projects-grid */

/* Projects grid ([sprint_projects_grid]) */
.sprint-pgrid__filter { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 36px; }
.sprint-pgrid__filter button { font: 500 15px/1 Rubik, sans-serif; padding: 11px 18px; border-radius: 999px; cursor: pointer;
	background: transparent; color: var(--sprint-night); border: 1px solid rgb(23 36 42 / 22%);
	transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease; }
.sprint-pgrid__filter button.is-on { background: var(--sprint-night); color: var(--sprint-paper); border-color: var(--sprint-night); }
@media (hover: hover) and (pointer: fine) { .sprint-pgrid__filter button:not(.is-on):hover { border-color: var(--sprint-red); } }
.sprint-pgrid__filter button:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 2px; }
.sprint-pgrid__list { list-style: none !important; margin: 0 !important; padding: 0 !important; display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px 32px; }
.sprint-pgrid__card { padding: 0 !important; transition: opacity 200ms var(--ease-out), transform 200ms var(--ease-out); }
.sprint-pgrid__card.is-out { opacity: 0; transform: scale(.97); }
.sprint-pgrid__card[hidden] { display: none; }
.sprint-pgrid__card a { display: block; text-decoration: none; color: var(--sprint-ink); }
.sprint-pgrid__img { display: block; aspect-ratio: 4 / 3; overflow: hidden; border-radius: 2px 18px 2px 2px; background: var(--sprint-petrol); margin-bottom: 16px; }
.sprint-pgrid__img img { width: 100%; height: 100%; object-fit: cover; transition: transform 600ms var(--ease-out); }
@media (hover: hover) and (pointer: fine) { .sprint-pgrid__card a:hover img { transform: scale(1.035); } .sprint-pgrid__card a:hover .sprint-pgrid__title { color: var(--sprint-ember); } }
.sprint-pgrid__cat { display: block; font: 500 14px/1.3 Rubik, sans-serif; color: var(--sprint-cable); margin-bottom: 4px; }
.sprint-pgrid__title { display: block; font: 600 21px/1.25 Rubik, sans-serif; color: var(--sprint-night); margin-bottom: 8px; transition: color 150ms ease; }
.sprint-pgrid__excerpt { display: block; font-size: 16px; line-height: 1.55; color: rgb(23 36 42 / 80%); }
@media (max-width: 980px) { .sprint-pgrid__list { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .sprint-pgrid__list { grid-template-columns: 1fr; } }
@media (prefers-reduced-motion: reduce) { .sprint-pgrid__card { transition: opacity 150ms ease; } .sprint-pgrid__card.is-out { transform: none; } }

/* Project single (TB body: sections `sprint-project-body`, image column `sprint-project-media`) */
.sprint-project-body .et_pb_post_content ul { list-style: none; padding-left: 1.7em; }
.sprint-project-body .et_pb_post_content li { position: relative; padding: 6px 0; border-bottom: 1px solid rgb(23 36 42 / 10%); }
.sprint-project-body .et_pb_post_content li::before { content: ""; position: absolute; left: -1.6em; top: 15px; width: 10px; height: 10px; border-radius: 50%;
	box-shadow: inset 0 0 0 2px var(--sprint-red); background: radial-gradient(circle, var(--sprint-red) 2px, transparent 2.5px); }
.sprint-project-body .et_pb_post_content p { margin-bottom: 1em; }
.sprint-project-media .et_pb_image_wrap { display: block; aspect-ratio: 4 / 5; overflow: hidden; border-radius: 2px 22px 2px 2px; }
.sprint-project-media .et_pb_image img { width: 100%; height: 100%; object-fit: cover; }

/* snippet:bio-toggle */

/* Bio toggle (Divi Toggle module with class `sprint-bio`) */
.sprint-bio.et_pb_toggle { border-top: 1px solid rgb(23 36 42 / 16%) !important; margin-top: 10px !important; }
.sprint-bio .et_pb_toggle_title { font: 500 16px/1.3 Rubik, sans-serif !important; color: var(--sprint-night) !important; padding: 14px 32px 14px 0 !important; cursor: pointer; }
.sprint-bio .et_pb_toggle_title::before { content: "" !important; font-family: inherit !important; right: 2px !important; width: 14px; height: 14px; margin-top: -7px !important; top: 50% !important;
	background: linear-gradient(var(--sprint-red), var(--sprint-red)) center / 14px 2px no-repeat, linear-gradient(var(--sprint-red), var(--sprint-red)) center / 2px 14px no-repeat;
	transition: transform 200ms var(--ease-out); }
.sprint-bio.et_pb_toggle_open .et_pb_toggle_title::before { transform: rotate(45deg); }
.sprint-bio .et_pb_toggle_content { padding-top: 0 !important; font-size: 16px; line-height: 1.6; color: var(--sprint-ink); }
.sprint-bio--dark.et_pb_toggle { border-top-color: rgb(237 240 238 / 18%) !important; }
.sprint-bio--dark .et_pb_toggle_title { color: var(--sprint-paper) !important; }
.sprint-bio--dark .et_pb_toggle_content { color: rgb(237 240 238 / 82%); }
.sprint-bio a { color: inherit; border-bottom: 1px solid var(--sprint-red); text-decoration: none; }
@media (prefers-reduced-motion: reduce) { .sprint-bio .et_pb_toggle_title::before { transition: none; } }

/* snippet:person-size */

/* Portrait size cap: people sections stay calm, text leads */
.sprint-person .et_pb_image { max-width: 320px; }
@media (max-width: 980px) { .sprint-person .et_pb_image { max-width: 280px; } }

/* snippet:credit */

.sprint-footbar__credit { margin-left: 18px; padding-left: 18px; border-left: 1px solid rgb(237 240 238 / 18%); }
.sprint-footbar__credit a { color: var(--sprint-paper) !important; }
@media (max-width: 600px) { .sprint-footbar__credit { display: block; margin: 6px 0 0; padding: 0; border: 0; } }

/* snippet:videos */

/* Video grid ([sprint_videos]) */
.sprint-videos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 36px 28px; }
.sprint-video { margin: 0; }
.sprint-video__play, .sprint-video iframe { position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; border: 0; padding: 0;
	border-radius: 2px 18px 2px 2px; overflow: hidden; background: var(--sprint-night); cursor: pointer; }
.sprint-video__play img { width: 100%; height: 100%; object-fit: cover; opacity: .82; transition: opacity 200ms ease, transform 600ms var(--ease-out); }
.sprint-video__icon { position: absolute; left: 50%; top: 50%; width: 64px; height: 64px; margin: -32px 0 0 -32px; border-radius: 50%;
	background: rgb(11 31 38 / 55%); border: 1px solid rgb(255 255 255 / 40%); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
	transition: transform 200ms var(--ease-out), background-color 200ms ease; }
.sprint-video__icon::after { content: ""; position: absolute; left: 26px; top: 21px; border-style: solid; border-width: 11px 0 11px 17px; border-color: transparent transparent transparent var(--sprint-paper); }
.sprint-video__num { position: absolute; left: 14px; top: 12px; font: 600 14px/1 Rubik, sans-serif; color: var(--sprint-paper);
	background: var(--sprint-red); border-radius: 0 8px 8px 8px; padding: 6px 9px; }
@media (hover: hover) and (pointer: fine) {
	.sprint-video__play:hover img { opacity: 1; transform: scale(1.03); }
	.sprint-video__play:hover .sprint-video__icon { transform: scale(1.08); background: var(--sprint-ember); }
}
.sprint-video__play:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 3px; }
.sprint-video figcaption { margin-top: 12px; font: 500 17px/1.35 Rubik, sans-serif; color: var(--sprint-night); }
.sprint-videos__note { margin-top: 24px !important; font-size: 14px; color: var(--sprint-cable); }
@media (max-width: 980px) { .sprint-videos { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .sprint-videos { grid-template-columns: 1fr; } }

/* Event ledger: text module with class `sprint-ledger` containing <ul><li><time>…</time><p>…</p></li></ul> */
.sprint-ledger ul { list-style: none !important; margin: 0 !important; padding: 0 !important; border-top: 1px solid rgb(237 240 238 / 16%); }
.sprint-ledger li { display: grid; grid-template-columns: 210px 1fr; gap: 28px; padding: 22px 0 !important; border-bottom: 1px solid rgb(237 240 238 / 16%); }
.sprint-ledger time { font: 500 16px/1.5 Rubik, sans-serif; color: var(--sprint-red); }
.sprint-ledger li p { margin: 0 !important; padding: 0 !important; color: rgb(237 240 238 / 84%); font-size: 17px; line-height: 1.6; }
.sprint-ledger li p strong { color: var(--sprint-paper); font-weight: 500; }
@media (max-width: 767px) { .sprint-ledger li { grid-template-columns: 1fr; gap: 6px; } }

/* snippet:menu-over-dots */

/* Open menu wins: the dot navigation steps aside while the floating menu is open */
html.sprint-menu-open .sprint-dotnav { opacity: 0 !important; pointer-events: none !important; }

/* snippet:legal */

/* Legal pages: readable long text (text module class `sprint-legal`) */
.sprint-legal h3 { font: 600 22px/1.3 Rubik, sans-serif !important; color: var(--sprint-night) !important; margin: 36px 0 10px !important; padding: 0 !important; }
.sprint-legal h3:first-child { margin-top: 0 !important; }
.sprint-legal p { margin: 0 0 1em !important; padding: 0 !important; }
.sprint-legal ul { margin: 0 0 1.2em 1.2em !important; padding: 0 !important; }
.sprint-legal li { padding: 2px 0 !important; }
.sprint-legal a { color: var(--sprint-ember); text-decoration: underline; text-underline-offset: 3px; }

/* snippet:gcid-vars */

/* Sprint global colours, defined site-wide. Divi only prints a global colour's
   variable on pages where it detects it in use; without this, colours set as
   var(--gcid-sprint-*) fall back to the dark default on some pages. */
:root {
	--gcid-sprint-red: #ee2c2c; --gcid-sprint-ember: #c41f26; --gcid-sprint-night: #0b1f26; --gcid-sprint-petrol: #12313b;
	--gcid-sprint-paper: #edf0ee; --gcid-sprint-ink: #17242a; --gcid-sprint-cable: #7e9399;
}

/* snippet:fonts */

/* Rubik, self-hosted (no Google Fonts request; GDPR). Variable font 400–700. */
@font-face { font-family: 'Rubik'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('fonts/rubik-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Rubik'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('fonts/rubik-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* snippet:motion2 */

/* ================= LOAD + REVEAL MOTION (pass 2) =================
   One orchestrated load moment per inner page (page head), then each block
   reveals once when it enters the view. Transform / opacity / clip-path only. */

/* Page head: title rises, red line draws, intro + extras follow; a power line sweeps the bottom edge */
.sprint-pagehead { position: relative; overflow: hidden; }
.sprint-pagehead .et_pb_row { position: relative; z-index: 1; }
.sprint-pagehead .sprint-line { animation: sprint-head-in 800ms var(--ease-out) 80ms both; }
.sprint-pagehead .sprint-line h1::after, .sprint-pagehead .sprint-line .et_pb_module_header::after { animation-delay: 500ms; }
.sprint-pagehead .et_pb_text { animation: sprint-head-in 700ms var(--ease-out) 260ms both; }
.sprint-pagehead .et_pb_row + .et_pb_row { animation: sprint-head-in 700ms var(--ease-out) 420ms both; }
.sprint-pagehead::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px; z-index: 2;
	background: linear-gradient(90deg, rgb(238 44 44 / 0%), var(--sprint-red) 40%, rgb(238 44 44 / 0%));
	transform: scaleX(0); transform-origin: left center; animation: sprint-sweep 1600ms var(--ease-in-out) 350ms forwards; }
@keyframes sprint-head-in { from { opacity: 0; transform: translateY(18px); } }
@keyframes sprint-sweep { 0% { transform: scaleX(0); opacity: 1; } 70% { transform: scaleX(1); opacity: 1; } 100% { transform: scaleX(1); opacity: .35; } }
@supports (animation-timeline: view()) {
	.sprint-pagehead > .et_pb_row:first-child { animation: sprint-head-out linear both; animation-timeline: view(); animation-range: exit 0% exit 80%; }
	@keyframes sprint-head-out { to { opacity: .2; transform: translateY(-40px); } }
}
/* the page entrance waits for the windmill preloader on a first visit */
html.sprint-pl-on:not(.sprint-pl-done) .sprint-pagehead *, html.sprint-pl-on:not(.sprint-pl-done) .sprint-pagehead::after { animation-play-state: paused; }

/* Chapter photos: wipe in from the left edge and settle from a slight zoom */
html.sprint-js .sprint-chapter__media .et_pb_image.sprint-reveal { transform: none; opacity: 1; }
html.sprint-js .sprint-chapter__media .sprint-reveal .et_pb_image_wrap { clip-path: inset(0 100% 0 0 round 2px 22px 2px 2px); transition: clip-path 1000ms var(--ease-in-out) 120ms; }
html.sprint-js .sprint-chapter__media .sprint-reveal img { transform: scale(1.08); transition: transform 1400ms var(--ease-out) 120ms; }
html.sprint-js .sprint-chapter__media .sprint-reveal.is-in .et_pb_image_wrap { clip-path: inset(0 0 0 0 round 2px 22px 2px 2px); }
html.sprint-js .sprint-chapter__media .sprint-reveal.is-in img { transform: none; }

/* Item stagger (set up by sprint-core.js): list items, cards, videos, clients, timeline rows */
html.sprint-js .sprint-rv { opacity: 0; transform: translateY(14px);
	transition: opacity 500ms var(--ease-out), transform 600ms var(--ease-out); transition-delay: calc(var(--i, 0) * 60ms); }
html.sprint-js .sprint-rv.is-in { opacity: 1; transform: none; }
html.sprint-js .sprint-pgrid__card.sprint-rv.is-out { opacity: 0; transform: scale(.97); transition-delay: 0ms; }

/* Floating menu button: a soft entrance after the page settles */
.sprint-fmenu__trigger { animation: sprint-pulse 2.5s var(--ease-out) 1.6s 3, sprint-pop 600ms cubic-bezier(0.34, 1.56, 0.64, 1) 300ms both; }
@keyframes sprint-pop { from { opacity: 0; transform: scale(.6); } }

@media (prefers-reduced-motion: reduce) {
	.sprint-pagehead .sprint-line, .sprint-pagehead .et_pb_text, .sprint-pagehead .et_pb_row + .et_pb_row { animation: sprint-fade 300ms ease both; }
	.sprint-pagehead::after { animation: none; transform: scaleX(1); opacity: .35; }
	.sprint-pagehead > .et_pb_row:first-child { animation: none; }
	html.sprint-js .sprint-chapter__media .sprint-reveal .et_pb_image_wrap { clip-path: none; transition: none; }
	html.sprint-js .sprint-chapter__media .sprint-reveal img { transform: none; transition: none; }
	html.sprint-js .sprint-rv { transform: none; transition: opacity 250ms ease; transition-delay: 0ms; }
	.sprint-fmenu__trigger { animation: sprint-fade 300ms ease both; }
}

/* snippet:de-hyphens */

/* Long German compounds: hyphenate headings and the rotator instead of overflowing on phones */
html[lang^="de"] h1, html[lang^="de"] h2, html[lang^="de"] h3, html[lang^="de"] .sprint-rotator__word,
html[lang^="de"] .sprint-pgrid__title, html[lang^="de"] .sprint-pi li a { hyphens: auto; -webkit-hyphens: auto; overflow-wrap: break-word; }
@media (max-width: 767px) {
	.sprint-hero .sprint-rotator { font-size: clamp(30px, 9.4vw, 44px); }
	.sprint-rotator__words { max-width: 100%; }
}

/* rotator column capped to screen width (long German words) */
.sprint-hero .sprint-rotator__words { grid-template-columns: minmax(0, 1fr); width: 100%; }

/* snippet:footer2 */

/* ================= FOOTER ([sprint_footer_full]) ================= */
.sprint-footer.et_pb_section { padding: 0 !important; background-color: var(--sprint-night) !important;
	background-image: radial-gradient(circle at 15% 0%, rgb(18 49 59 / 70%), rgb(11 31 38 / 96%) 70ex), url("bg-grid.webp") !important;
	background-size: auto, 150px 150px !important; background-repeat: no-repeat, repeat !important; }
.sprint-footer .et_pb_row { width: min(1200px, 90%) !important; max-width: none !important; padding: 0 !important; }
.sprint-foot { position: relative; padding: 36px 0 0; color: rgb(237 240 238 / 74%); font: 400 16px/1.6 Rubik, sans-serif; }
.sprint-foot a { color: rgb(237 240 238 / 74%); text-decoration: none; transition: color 150ms ease; }
@media (hover: hover) and (pointer: fine) { .sprint-foot a:hover { color: var(--sprint-paper); } }
.sprint-foot a:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 3px; }

/* the power line with one junction per column */
.sprint-foot__line { position: absolute; left: 0; right: 0; top: 36px; height: 2px; background: var(--sprint-red); transform-origin: left center; }
.sprint-foot__cols { position: relative; display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, .8fr) auto minmax(0, .8fr); gap: 40px 48px; padding-top: 40px; }
.sprint-foot__col { position: relative; }
.sprint-foot__col::before { content: ""; position: absolute; top: -47px; left: 0; width: 14px; height: 14px; border-radius: 50%;
	background: var(--sprint-night); border: 2px solid var(--sprint-red); box-shadow: inset 0 0 0 2px var(--sprint-night), inset 0 0 0 6px var(--sprint-red); }
.sprint-footer .sprint-footer__logo.et_pb_image { max-width: 210px !important; width: 210px !important; margin: 72px 0 0 !important; }
.sprint-footer .sprint-footer__logo img { width: 100%; height: auto; }
.sprint-foot__brand p { max-width: 34ch; margin: 0; }
.sprint-foot__h { font: 500 14px/1.3 Rubik, sans-serif !important; color: var(--sprint-cable) !important; margin: 0 0 14px !important; padding: 0 !important; letter-spacing: 0; }
.sprint-foot ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }
.sprint-foot li { padding: 4px 0 !important; }
.sprint-foot__cols li a { color: var(--sprint-paper); }
@media (hover: hover) and (pointer: fine) { .sprint-foot__cols li a:hover { color: var(--sprint-red); } }
.sprint-foot__cols svg { vertical-align: -2px; opacity: .6; }
.sprint-foot__note { font-size: 13px; color: var(--sprint-cable); margin-left: 4px; }
.sprint-foot__addr { margin-top: 6px; line-height: 1.5; }
.sprint-foot__cols a[href^="mailto"], .sprint-foot__cols a[href^="tel"] { white-space: nowrap; }

/* legal bar */
.sprint-foot__bar { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; align-items: center; gap: 14px 28px; margin-top: 64px; padding: 26px 0 30px;
	border-top: 1px solid rgb(237 240 238 / 12%); font-size: 14px; }
.sprint-foot__bar p { margin: 0; padding: 0; }
.sprint-foot__bar ul { display: flex; flex-wrap: wrap; gap: 4px 20px; }
.sprint-foot__bar li { padding: 0 !important; }
.sprint-foot__credit { white-space: nowrap; }
.sprint-foot__credit a { color: var(--sprint-paper); }
.sprint-foot__top { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; color: var(--sprint-red) !important;
	border: 1px solid rgb(237 240 238 / 22%); background: rgb(255 255 255 / 6%); transition: transform 200ms var(--ease-out), border-color 150ms ease; }
@media (hover: hover) and (pointer: fine) { .sprint-foot__top:hover { transform: translateY(-3px); border-color: var(--sprint-red); } }

html.sprint-js .sprint-footer:not(.is-in) .sprint-footer__logo { opacity: 0; transform: translateY(12px); }
html.sprint-js .sprint-footer .sprint-footer__logo { transition: opacity 600ms var(--ease-out), transform 700ms var(--ease-out); }
/* motion: the line draws, junctions light in turn, columns rise (once, when the footer enters) */
html.sprint-js .sprint-foot:not(.is-in) .sprint-foot__line { transform: scaleX(0); }
html.sprint-js .sprint-foot .sprint-foot__line { transition: transform 1100ms var(--ease-in-out); }
html.sprint-js .sprint-foot .sprint-foot__col { transition: opacity 600ms var(--ease-out), transform 700ms var(--ease-out); }
html.sprint-js .sprint-foot .sprint-foot__col::before { transition: opacity 250ms var(--ease-out), transform 350ms var(--ease-out); }
html.sprint-js .sprint-foot:not(.is-in) .sprint-foot__col { opacity: 0; transform: translateY(16px); }
html.sprint-js .sprint-foot:not(.is-in) .sprint-foot__col::before { opacity: 0; transform: scale(.6); }
.sprint-foot.is-in .sprint-foot__col:nth-child(1), .sprint-foot.is-in .sprint-foot__col:nth-child(1)::before { transition-delay: 80ms; }
.sprint-foot.is-in .sprint-foot__col:nth-child(2), .sprint-foot.is-in .sprint-foot__col:nth-child(2)::before { transition-delay: 330ms; }
.sprint-foot.is-in .sprint-foot__col:nth-child(3), .sprint-foot.is-in .sprint-foot__col:nth-child(3)::before { transition-delay: 580ms; }
.sprint-foot.is-in .sprint-foot__col:nth-child(4), .sprint-foot.is-in .sprint-foot__col:nth-child(4)::before { transition-delay: 830ms; }

@media (max-width: 980px) {
	.sprint-foot__cols { grid-template-columns: 1fr 1fr; gap: 48px 32px; }
	.sprint-foot__col::before { display: none; }
	.sprint-foot__bar { grid-template-columns: minmax(0, 1fr) auto; }
	.sprint-foot__bar nav, .sprint-foot__credit { grid-column: 1 / -1; }
	.sprint-foot__top { grid-row: 1; grid-column: 2; }
}
@media (max-width: 600px) {
	.sprint-footer .sprint-footer__logo.et_pb_image { width: 180px !important; margin-top: 56px !important; }
	.sprint-foot__cols { grid-template-columns: 1fr 1fr; grid-auto-flow: dense; gap: 40px 24px; }
	.sprint-foot__brand, .sprint-foot__col:nth-child(3) { grid-column: 1 / -1; }
}
@media (prefers-reduced-motion: reduce) {
	html.sprint-js .sprint-foot .sprint-foot__line, html.sprint-js .sprint-foot .sprint-foot__col, html.sprint-js .sprint-foot .sprint-foot__col::before { transition: opacity 250ms ease !important; transform: none !important; }
}

/* snippet:logo-anim */

/* ================= LOGO MOTION (inlined SVG logos) ================= */
.sprint-logo { display: block; width: 100%; height: auto; overflow: visible; }
.sprint-header__logo .sprint-logo { filter: drop-shadow(0 4px 12px rgb(0 0 0 / 35%)); }
.sprint-logo .sl-symbol { transform-box: fill-box; transform-origin: 50% 50%; }
.sprint-logo.is-wait path { opacity: 0; }
/* intro: the rotor spins up and comes to rest, then the wordmark wipes in */
.sprint-logo.is-intro .sl-symbol { animation: sl-rotor 1500ms var(--ease-out) both; }
.sprint-logo.is-intro .sl-sprint { animation: sl-wipe 700ms var(--ease-out) 420ms both; }
.sprint-logo.is-intro .sl-energy { animation: sl-wipe 700ms var(--ease-out) 560ms both; }
/* later pages: a short rotor settle, nothing hidden */
.sprint-logo.is-settle .sl-symbol { animation: sl-settle 900ms var(--ease-out) both; }
/* hover: one turn of the rotor */
.sprint-logo.is-turn .sl-symbol { animation: sl-turn 1200ms var(--ease-in-out); }
@keyframes sl-rotor { from { transform: rotate(-540deg) scale(.82); opacity: 0; } 20% { opacity: 1; } to { transform: none; opacity: 1; } }
@keyframes sl-wipe { from { clip-path: inset(0 100% 0 0); transform: translateX(-6px); } to { clip-path: inset(0 0 0 0); transform: none; } }
@keyframes sl-settle { from { transform: rotate(-120deg); } to { transform: none; } }
@keyframes sl-turn { from { transform: none; } to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
	/* gentler: half a turn, no scale; the wordmark wipe stays (no movement) */
	.sprint-logo.is-intro .sl-symbol { animation: sl-rotor-soft 1000ms var(--ease-out) both; }
	.sprint-logo.is-intro .sl-sprint, .sprint-logo.is-intro .sl-energy { animation-name: sl-wipe-soft; }
	.sprint-logo.is-settle .sl-symbol, .sprint-logo.is-turn .sl-symbol { animation: none; }
}
@keyframes sl-rotor-soft { from { transform: rotate(-180deg); opacity: 0; } 30% { opacity: 1; } to { transform: none; opacity: 1; } }
@keyframes sl-wipe-soft { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }

/* snippet:notfound */

/* ================= 404 ================= */
ul.sprint-404 { list-style: none !important; display: flex; flex-wrap: wrap; gap: 10px; margin: 28px 0 0 !important; padding: 0 !important; }
ul.sprint-404 li { padding: 0 !important; }
ul.sprint-404 a { display: inline-block; padding: 10px 18px; border: 1px solid rgb(237 240 238 / 28%); border-radius: 999px; color: var(--sprint-paper);
	text-decoration: none; font-weight: 500; transition: border-color 150ms ease, color 150ms ease; }
@media (hover: hover) and (pointer: fine) { ul.sprint-404 a:hover { border-color: var(--sprint-red); color: var(--sprint-red); } }
ul.sprint-404 a:focus-visible { outline: 2px solid var(--sprint-red); outline-offset: 3px; }

