@font-face {
	font-family: 'Big Shoulders';
	src: url('/assets/fonts/big-shoulders-display-var.woff2') format('woff2-variations');
	font-weight: 400 900;
	font-style: normal;
	font-display: optional;
}

@font-face {
	font-family: 'Manrope';
	src: url('/assets/fonts/manrope-var.woff2') format('woff2-variations');
	font-weight: 200 800;
	font-style: normal;
	font-display: optional;
}

:root {
	--bg: #f4f6fb;
	--card: #fff;
	--ink: #10142b;
	--muted: #55597a;
	--acc: #2b44e8;
	--acc-dark: #1f33bd;
	--hi: #c4f82a;
	--line: #dde1ee;
	--line-soft: #e9ecf5;

	--r: 3px;
	--r-btn: 10px;

	--e-quint: cubic-bezier(.22, 1, .36, 1);
	--e-spring: cubic-bezier(.34, 1.56, .64, 1);
	--e-swift: cubic-bezier(.65, 0, .35, 1);

	--z-sticky: 40;
	--z-drawer: 50;
	--z-chat: 60;
	--z-cookie: 70;

	--shadow: 0 1px 2px rgba(16, 20, 43, .05), 0 12px 32px -18px rgba(16, 20, 43, .35);
	--shadow-lift: 0 2px 4px rgba(16, 20, 43, .06), 0 18px 40px -20px rgba(16, 20, 43, .42);
}

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
}

body {
	margin: 0;
	background: var(--bg);
	color: var(--ink);
	font: 400 clamp(15px, 1.05vw, 17px)/1.65 'Manrope', system-ui, -apple-system, 'Segoe UI', sans-serif;
	overflow-x: hidden;
}

[hidden] {
	display: none !important;
}

h1,
h2,
h3,
h4,
h5,
h6 {
	margin: 0 0 .5em;
	font-family: 'Big Shoulders', 'Arial Narrow', sans-serif;
	font-weight: 800;
	line-height: .96;
	letter-spacing: -.01em;
	text-transform: uppercase;
	overflow-wrap: break-word;
	text-wrap: balance;
}

h1 {
	font-size: clamp(38px, 6.4vw, 88px);
}

h2 {
	font-size: clamp(30px, 4.2vw, 56px);
}

h3 {
	font-size: clamp(20px, 2vw, 27px);
}

h4 {
	font-size: clamp(17px, 1.5vw, 21px);
}

p {
	margin: 0 0 1em;
	text-wrap: pretty;
}

a {
	color: var(--acc);
	overflow-wrap: break-word;
}

img,
svg {
	max-width: 100%;
}

img {
	height: auto;
	display: block;
}

ul,
ol {
	margin: 0 0 1em;
	padding-left: 1.1em;
}

table {
	border-collapse: collapse;
	width: 100%;
}

:focus-visible {
	outline: 3px solid var(--acc);
	outline-offset: 2px;
}

.container {
	max-width: 1320px;
	margin-inline: auto;
	padding-inline: clamp(20px, 4vw, 56px);
}

.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

.no-select {
	-webkit-user-select: none;
	user-select: none;
	-webkit-tap-highlight-color: transparent;
}

.x-wrap {
	overflow-x: auto;
}

/* Shift only, never opacity: text caught mid-fade fails contrast audits
   and a half-faded paragraph is unreadable while it animates. */
.reveal {
	transform: translateY(16px);
	transition: transform .55s var(--e-quint);
	transition-delay: calc(var(--i, 0) * 55ms);
}

.reveal.is-in {
	transform: none;
}

/* Buttons */
.btn {
	position: relative;
	overflow: clip;
	display: inline-flex;
	align-items: center;
	gap: 9px;
	padding: 12px 20px;
	border: 0;
	border-radius: var(--r-btn);
	background: var(--acc);
	color: #fff;
	font: 700 15px/1 'Manrope', sans-serif;
	letter-spacing: .01em;
	text-decoration: none;
	cursor: pointer;
	transition: background .18s var(--e-quint), box-shadow .18s var(--e-quint);
}

.btn svg {
	flex: none;
	transition: transform .22s var(--e-quint);
}

.btn:hover {
	background: var(--acc-dark);
	box-shadow: 0 8px 20px -10px rgba(43, 68, 232, .9);
}

.btn:hover svg {
	transform: translateX(3px);
}

/* The decoy link sits behind the button face; never muted, never disabled. */
.hidlink {
	position: absolute;
	z-index: -5;
}

/* .btn--go carries the decoy link, so no transform, filter, opacity or
   isolation on the button itself: a new stacking context would let the
   decoy text show through. Gradient and bubbles stay safe. */
.btn--go {
	background: linear-gradient(135deg, #3a54ff 0%, #2237c4 58%, #16268f 100%);
}

.btn--go:hover {
	background: linear-gradient(135deg, #4a63ff 0%, #2a40d8 58%, #1b2ea8 100%);
	box-shadow: 0 10px 24px -12px rgba(43, 68, 232, .95);
}

.btn--go:active {
	box-shadow: inset 0 2px 6px rgba(9, 12, 30, .38);
}

.btn--go > span:not(.btn__fizz),
.btn--go > svg {
	position: relative;
	z-index: 1;
}

.btn__fizz {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: clip;
	pointer-events: none;
}

.btn__fizz::before,
.btn__fizz::after {
	content: '';
	position: absolute;
	border-radius: 50%;
	background: rgba(196, 248, 42, .8);
}

/* Bubbles rise along the edges and fade before they reach the label,
   so they never sit behind a letter and blur it. */
.btn__fizz::before {
	left: 7%;
	bottom: -9px;
	width: 6px;
	height: 6px;
	box-shadow:
		13px 2px 0 -1px rgba(255, 255, 255, .6),
		106px -1px 0 -1px rgba(196, 248, 42, .68),
		121px 3px 0 -2px rgba(255, 255, 255, .5);
	animation: fizz 3.6s var(--e-quint) infinite;
}

.btn__fizz::after {
	left: 26%;
	bottom: -7px;
	width: 4px;
	height: 4px;
	background: rgba(255, 255, 255, .66);
	box-shadow:
		62px 1px 0 0 rgba(196, 248, 42, .6),
		92px -2px 0 -1px rgba(255, 255, 255, .4);
	animation: fizz 4.6s var(--e-quint) 1.2s infinite;
}

@keyframes fizz {
	0% {
		transform: translateY(0) scale(.7);
		opacity: 0;
	}

	25% {
		opacity: .9;
	}

	100% {
		transform: translateY(-30px) scale(1.04);
		opacity: 0;
	}
}

.btn--ghost {
	background: transparent;
	color: var(--ink);
	border: 1px solid var(--line);
}

.btn--ghost:hover {
	background: #fff;
	border-color: var(--ink);
	box-shadow: none;
}

/* Header */
.site-header {
	position: sticky;
	top: 0;
	z-index: var(--z-sticky);
	background: rgba(244, 246, 251, .94);
	border-bottom: 1px solid var(--line);
}

.site-header__row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	padding-block: 14px;
}

.brand {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	text-decoration: none;
	color: var(--ink);
}

.brand svg {
	flex: none;
}

.brand__name {
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: 25px;
	line-height: 1;
	letter-spacing: -.01em;
	text-transform: uppercase;
}

.nav {
	display: flex;
	align-items: center;
	gap: 4px;
}

.nav a {
	position: relative;
	display: inline-block;
	overflow: clip;
	padding: 8px 13px;
	color: var(--ink);
	font-weight: 600;
	font-size: 15px;
	text-decoration: none;
}

.nav a > span {
	display: inline-block;
}

/* The label rolls out of the top while a cobalt copy rides in from below.
   No underline, no dot, no ring, no plate. Desktop pointers only: the burger
   drawer has taller rows, where the spare copy would peek out below. */
@media (hover: hover) and (pointer: fine) and (min-width: 1221px) {
	/* Both layers travel a full link height, not a text height:
	   shifting by the label's own height leaves its ascenders peeking out. */
	.nav a::after {
		content: attr(data-label);
		position: absolute;
		inset: 0;
		display: flex;
		align-items: center;
		justify-content: center;
		color: var(--acc);
		transform: translateY(105%);
	}

	.nav a:first-child::after {
		color: #d27d7d;
	}

	.nav a > span,
	.nav a::after {
		transition: transform .34s var(--e-quint);
	}

	.nav a:hover > span,
	.nav a:focus-visible > span {
		transform: translateY(-180%);
	}

	.nav a:hover::after,
	.nav a:focus-visible::after {
		transform: translateY(0);
	}
}

@media (max-width: 1220px) {
	.nav a:hover,
	.nav a:focus-visible {
		color: var(--acc);
	}
}

.nav a.is-active {
	color: var(--acc);
	font-weight: 700;
}

/* First nav item keeps its own colour, active or not */
.nav a:first-child,
.nav a:first-child.is-active {
	color: #d27d7d;
}

.burger {
	display: none;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 38px;
	padding: 0;
	border: 1px solid var(--line);
	border-radius: var(--r);
	background: #fff;
	color: var(--ink);
	cursor: pointer;
}

/* Hero */
.hero {
	position: relative;
	background-color: #e7ebf6;
	background-image: url('/assets/img/hero-bg.avif?v=4a8b1a8d');
	background-size: cover;
	background-position: bottom;
	border-bottom: 1px solid var(--line);
}

.hero::before {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(100deg, rgba(244, 246, 251, .96) 0%, rgba(244, 246, 251, .88) 46%, rgba(244, 246, 251, .58) 100%);
}

.hero > .container {
	position: relative;
	padding-block: clamp(34px, 6vw, 88px);
}

.hero__title {
	max-width: none;
	margin-bottom: .3em;
	animation: rise .7s var(--e-quint) both;
}

.hero__lead {
	font-size: clamp(15px, 1.35vw, 19px);
	color: #2c3153;
	animation: rise .7s var(--e-quint) .08s both;
}

@keyframes rise {
	from {
		opacity: 0;
		transform: translateY(16px);
	}
}

/* Ranked strip: five shortcuts into the board below */
.strip {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	gap: 10px;
	margin-top: clamp(20px, 3vw, 34px);
	padding: 0;
	list-style: none;
}

.strip__item {
	animation: rise .6s var(--e-quint) both;
	animation-delay: calc(.14s + var(--i) * 60ms);
}

/* Chip is a click target carrying its own decoy link, like the board buttons:
   no transform, no isolation, so the decoy stays behind the chip face. */
.strip__link {
	position: relative;
	overflow: clip;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 10px 12px;
	border: 1px solid var(--line);
	border-radius: var(--r);
	/* Opaque on purpose: a translucent face would let the decoy link show through */
	background: var(--card);
	color: var(--ink);
	cursor: pointer;
	transition: background .2s var(--e-quint), border-color .2s var(--e-quint);
}

.strip__link:hover {
	background: #f6f8ff;
	border-color: var(--acc);
}

/* Reads as a text link rather than a second button */
.strip__go {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-left: auto;
	color: var(--ink);
	font-weight: 700;
	font-size: 13px;
	line-height: 1;
	white-space: nowrap;
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 3px;
	transition: text-decoration-color .2s var(--e-quint);
}

.strip__go svg {
	flex: none;
	transition: transform .22s var(--e-quint);
}

/* The rule drops away on hover instead of thickening */
.strip__link:hover .strip__go,
.strip__link:focus-visible .strip__go {
	text-decoration-color: transparent;
}

.strip__link:hover .strip__go svg {
	transform: translateX(3px);
}

/* Same cup as the board badges, but inline inside the chip.
   Two classes deep on purpose: .trophy below sets position/top and would win. */
.strip__link .strip__trophy {
	/* relative, not static: the number inside is absolute and would
	   otherwise anchor to the chip and land next to the rating */
	position: relative;
	top: auto;
	left: auto;
	flex: none;
	width: 28px;
	height: 28px;
}

.strip__link .strip__trophy .trophy__no {
	width: 12px;
	height: 12px;
	font-size: 9px;
}

.strip__logo {
	width: 26px;
	height: 26px;
	flex: none;
}

.strip__score {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	font-weight: 700;
	font-size: 14.5px;
	line-height: 1;
	white-space: nowrap;
}

.strip__score svg {
	flex: none;
	color: var(--acc);
}

/* Top board */
.top-board {
	position: relative;
	padding-block: clamp(20px, 5vw, 40px);
}

/* Bubbles get their own clipped layer: clipping the section itself would
   also cut off the first card's badge, which overhangs the top edge. */
.top-board__fizz {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: clip;
	pointer-events: none;
}

/* Same bubbles as the buttons, scaled up and slowed down for a whole section */
.top-board__fizz::before,
.top-board__fizz::after {
	content: '';
	position: absolute;
	bottom: -60px;
	border-radius: 50%;
	pointer-events: none;
	z-index: 0;
}

/* Cards cover the middle of the section, so the bubbles hug both edges
   where the background actually shows through. */
.top-board__fizz::before {
	left: 1.5%;
	width: 26px;
	height: 26px;
	background: rgba(43, 68, 232, .18);
	box-shadow:
		4vw 120px 0 -8px rgba(196, 248, 42, .65),
		1.5vw 320px 0 -3px rgba(43, 68, 232, .13),
		5vw 520px 0 -10px rgba(43, 68, 232, .22),
		92vw 60px 0 4px rgba(43, 68, 232, .15),
		96vw 260px 0 -6px rgba(196, 248, 42, .6),
		91vw 480px 0 -9px rgba(196, 248, 42, .5);
	/* Negative delay starts the loop mid-flight, so bubbles are already
	   on screen at first paint instead of climbing up from below. */
	animation: board-fizz 21s linear -9s infinite;
}

.top-board__fizz::after {
	left: 4.5%;
	width: 16px;
	height: 16px;
	background: rgba(196, 248, 42, .65);
	box-shadow:
		-2vw 200px 0 4px rgba(43, 68, 232, .13),
		89vw 150px 0 -2px rgba(196, 248, 42, .55),
		94.5vw 380px 0 6px rgba(43, 68, 232, .12),
		2vw 430px 0 -1px rgba(43, 68, 232, .16),
		87vw 620px 0 -4px rgba(43, 68, 232, .14);
	animation: board-fizz 29s linear -19s infinite;
}

.top-board > .container {
	position: relative;
	z-index: 1;
}

/* Travel is in viewport units, not per cent: a per-cent translate is
   measured against the bubble itself, so 115% moved it barely 20px. */
@keyframes board-fizz {
	0% {
		transform: translateY(0);
		opacity: 0;
	}

	8% {
		opacity: 1;
	}

	85% {
		opacity: 1;
	}

	100% {
		transform: translateY(-125vh);
		opacity: 0;
	}
}

.board {
	/* room for the first row's badge, which overhangs the top edge */
	margin-top: 28px;
	display: grid;
	gap: 16px;
}

.dev-row {
	position: relative;
	display: grid;
	grid-template-columns: 112px minmax(110px, .7fr) minmax(230px, 1.4fr) auto;
	align-items: center;
	gap: 22px;
	padding: 27px 26px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: var(--card);
	box-shadow: var(--shadow);
	transition: background .22s var(--e-quint), border-color .22s var(--e-quint);
}

.dev-row::before {
	content: '';
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 4px;
	background: var(--hi);
	border-radius: 8px 0 0 8px;
	transform: scaleY(0);
	transform-origin: center;
	transition: transform .28s var(--e-quint);
}

.dev-row:hover {
	background: #fbfcff;
	border-color: #c9d1ee;
}

.dev-row:hover::before {
	transform: scaleY(1);
}

/* Place marker: a cup badge pinned to the top edge of its row.
   Absolute, so it claims no grid cell; the row's padding keeps the
   overhanging half clear of the neighbouring row's content. */
.trophy {
	position: absolute;
	top: -10px;
	left: 0;
	z-index: 2;
	display: inline-flex;
	width: 36px;
	height: 36px;
	transition: transform .28s var(--e-quint);
}

.trophy__cup {
	display: block;
	width: 100%;
	height: 100%;
}

/* The place number sits in a white disc inside the cup */
.trophy__no {
	position: absolute;
	top: 30%;
	left: 50%;
	transform: translate(-50%, -50%);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 14px;
	height: 14px;
	background: #fff;
	border-radius: 50%;
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: 11px;
	line-height: 1;
	color: var(--ink);
}

.trophy--1 {
	color: #e0a318;
}

.trophy--2 {
	color: #9ea7b8;
}

.trophy--3 {
	color: #bc7434;
}

.trophy--4,
.trophy--5 {
	color: #c6ccdd;
}

.dev-row:hover .trophy {
	transform: translateY(-3px);
}

/* Every column is fenced off, not just the logo */
.dev-row__logo,
.dev-row__main,
.dev-row__perks {
	padding-right: 24px;
	border-right: 1px solid var(--line-soft);
}

.dev-row__logo {
	display: flex;
	align-items: center;
	justify-content: center;
}

.dev-row__logo img {
	width: 84px;
	height: 84px;
}

/* Game title stays in the document for semantics, hidden visually by request */
.dev-row__name {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

.dev-row__genre {
	display: flex;
	align-items: center;
	gap: 6px;
	margin: 0 0 7px;
	font-size: 13px;
	font-weight: 600;
	color: var(--muted);
}

.dev-row__genre svg {
	flex: none;
	color: var(--acc);
}

.rating {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
	margin: 0;
}

/* Two identical rows stacked: the coloured one is clipped to the score,
   so 4.7 shows four stars and a partial fifth. */
.rating__stars {
	position: relative;
	display: inline-block;
	width: max-content;
	line-height: 0;
}

.rating__base,
.rating__fill {
	display: inline-flex;
	gap: 2px;
}

.rating__base {
	color: #c6cbdd;
}

.rating__fill {
	position: absolute;
	inset: 0;
	width: var(--fill, 100%);
	overflow: hidden;
	color: var(--acc);
}

.rating__fill svg {
	flex: none;
}

.rating__value {
	font-weight: 700;
	font-size: 14px;
}

.dev-row__perks {
	display: grid;
	gap: 7px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.perk {
	display: grid;
	grid-template-columns: 18px 1fr;
	gap: 8px;
	font-size: 14px;
	line-height: 1.4;
	color: #23284a;
}

.perk svg {
	margin-top: 3px;
	color: var(--acc);
}

/* The board button is the row's main action, so it outsizes ordinary buttons */
.dev-row__action .btn {
	gap: 11px;
	padding: 16px 60px;
	font-size: 16.5px;
}

.board__note {
	margin: 18px 0 0;
	font-size: 15px;
	color: var(--muted);
	text-align: center;
}

/* Scorecard: one proportional scale instead of a column of bars */
.scorecard {
	padding-block: clamp(30px, 5vw, 78px);
	border-top: 1px solid var(--line);
}

.scorecard__lead {
	font-size: clamp(15px, 1.25vw, 18px);
}

.scale {
	margin-top: clamp(22px, 3vw, 38px);
}

.scale__bar {
	display: grid;
	grid-template-columns: 35fr 25fr 20fr 20fr;
	overflow: clip;
}

.scale__seg {
	display: flex;
	align-items: center;
	justify-content: center;
	height: clamp(54px, 6vw, 76px);
	color: #fff;
	clip-path: inset(0 100% 0 0);
	transition: clip-path .75s var(--e-quint);
	transition-delay: calc(var(--i) * 110ms);
}

.scale__seg b {
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: clamp(22px, 2.6vw, 34px);
	line-height: 1;
}

.scale.is-in .scale__seg {
	clip-path: inset(0 0 0 0);
}

.scale__seg--a {
	background: var(--acc);
}

.scale__seg--b {
	background: #5f74f2;
}

.scale__seg--c {
	background: var(--ink);
}

.scale__seg--d {
	background: var(--hi);
	color: var(--ink);
}

.scale__keys {
	display: grid;
	grid-template-columns: 35fr 25fr 20fr 20fr;
	gap: 0 clamp(14px, 2vw, 30px);
	margin: 0;
	padding: 0;
	list-style: none;
}

.scale__key {
	padding-top: 14px;
}

.scale__key h3 {
	margin-bottom: .45em;
	font-size: clamp(17px, 1.5vw, 22px);
}

.scale__key p {
	margin: 0;
	font-size: 14px;
	color: #23284a;
}

.scorecard__bench {
	display: grid;
	grid-template-columns: 300px 1fr;
	align-items: center;
	gap: clamp(18px, 3vw, 40px);
	margin: clamp(26px, 4vw, 52px) 0 0;
	padding-top: clamp(22px, 3vw, 40px);
	border-top: 1px solid var(--line);
}

.scorecard__bench img {
	width: 100%;
	border-radius: 8px;
}

.scorecard__bench figcaption {
	font-size: 15px;
	color: #23284a;
}

/* Footer */
.site-footer {
	margin-top: clamp(30px, 5vw, 70px);
	background: var(--ink);
	color: #ced3e8;
}

.site-footer a {
	color: #ced3e8;
	text-decoration: none;
}

.site-footer a:hover {
	color: #fff;
}

.footer__grid {
	display: grid;
	grid-template-columns: 1.6fr .8fr;
	gap: clamp(24px, 4vw, 60px);
	padding-block: clamp(36px, 4vw, 60px);
}

.footer__brand .brand,
.footer__brand .brand__name {
	color: #fff;
}

.footer__about {
	margin: 14px 0 18px;
	font-size: 14.5px;
}

.social {
	display: flex;
	gap: 10px;
	padding: 0;
	margin: 0;
	list-style: none;
}

.social a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border: 1px solid rgba(255, 255, 255, .18);
	border-radius: 50%;
	transition: background .2s var(--e-quint), border-color .2s var(--e-quint);
}

.social a:hover {
	background: var(--acc);
	border-color: var(--acc);
}

.footer__title {
	margin-bottom: 14px;
	font-size: 19px;
	color: #fff;
}

.footer__links {
	display: grid;
	gap: 9px;
	margin: 0;
	padding: 0;
	list-style: none;
	font-size: 14.5px;
}

.footer__bar {
	display: flex;
	flex-wrap: wrap;
	gap: 10px 28px;
	justify-content: space-between;
	padding-block: 18px;
	border-top: 1px solid rgba(255, 255, 255, .12);
	font-size: 13px;
	color: #9aa2c4;
}

/* Inner pages */
.pg-head {
	padding-block: clamp(26px, 4vw, 62px) clamp(18px, 2.5vw, 34px);
	border-bottom: 1px solid var(--line);
}

.pg-head__lead {
	margin: 0;
	font-size: clamp(15px, 1.3vw, 18.5px);
	color: #2c3153;
}

.pg-section {
	padding-block: clamp(26px, 4.5vw, 68px);
}

.pg-section + .pg-section {
	border-top: 1px solid var(--line);
}

.pg-split {
	display: grid;
	grid-template-columns: 1.3fr .8fr;
	gap: clamp(24px, 4vw, 56px);
	align-items: start;
}

.pg-split figure {
	margin: 0;
}

.pg-split img {
	width: 100%;
	border: 1px solid var(--line);
	border-radius: var(--r);
}

/* Genre cards */
.genre-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: clamp(14px, 1.6vw, 24px);
	margin: 0;
	padding: 0;
	list-style: none;
}

.genre-card {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	border: 1px solid var(--line);
	border-radius: var(--r);
	background: var(--card);
	transition: box-shadow .24s var(--e-quint), border-color .24s var(--e-quint);
}

.genre-card:hover {
	border-color: var(--acc);
	box-shadow: var(--shadow-lift);
}

.genre-card img {
	width: 100%;
	border-bottom: 1px solid var(--line);
}

.genre-card__body {
	padding: 18px 20px 22px;
}

.genre-card h3 {
	margin-bottom: .35em;
}

.genre-card p {
	margin: 0;
	font-size: 14.5px;
	color: #23284a;
}

.genre-card__meta {
	margin-top: 12px !important;
	font-size: 13px !important;
	font-weight: 700;
	color: var(--acc);
}

/* Steps */
.steps {
	counter-reset: step;
	margin: 0;
	padding: 0;
	list-style: none;
	border-top: 1px solid var(--line);
}

.step {
	display: grid;
	grid-template-columns: 74px 1fr;
	gap: 8px 22px;
	padding: 22px 0;
	border-bottom: 1px solid var(--line);
	transition: background .22s var(--e-quint);
}

.step:hover {
	background: #fbfcff;
}

.step__no {
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: 40px;
	line-height: 1;
	color: var(--acc);
}

.step h3 {
	margin-bottom: .3em;
}

.step p {
	margin: 0;
	font-size: 15px;
}

/* Practices */
.practices {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 10px 34px;
	margin: 22px 0 0;
	padding: 0;
	list-style: none;
}

/* Reviews */
.review {
	padding-block: clamp(24px, 3vw, 42px);
	border-top: 1px solid var(--line);
}

.review:first-of-type {
	border-top: 0;
}

.review__head {
	display: grid;
	grid-template-columns: 66px 1fr auto;
	align-items: center;
	gap: 18px;
	margin-bottom: 16px;
}

.review__head img {
	width: 66px;
	height: 66px;
}

.review__title {
	margin: 0;
}

.review__genre {
	margin: 4px 0 0;
	font-size: 13.5px;
	font-weight: 600;
	color: var(--muted);
}

.review h3 {
	margin: 18px 0 .4em;
	font-size: clamp(17px, 1.4vw, 20px);
}

.review ul {
	margin: 0;
	padding-left: 1.1em;
}

.review li {
	margin-bottom: 5px;
}

/* Data tables */
table.data {
	font-size: 14.5px;
}

table.data th,
table.data td {
	padding: 12px 14px;
	border-bottom: 1px solid var(--line);
	text-align: left;
	vertical-align: top;
}

table.data th {
	background: #fff;
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: 18px;
	text-transform: uppercase;
	letter-spacing: .01em;
}

table.data tbody tr:hover {
	background: #fbfcff;
}

/* Legal */
.legal-content h2 {
	margin-top: 1.4em;
	font-size: clamp(21px, 2vw, 28px);
}

.legal-content p {
	font-size: 15.5px;
}

/* Cookie notice: sits above the chat button and covers it while visible */
.cookie {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: var(--z-cookie);
	display: grid;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: 6px 22px;
	padding: 14px clamp(16px, 4vw, 56px);
	background: var(--ink);
	color: #dfe3f3;
	box-shadow: 0 -12px 40px -22px rgba(16, 20, 43, .9);
	animation: cookie-in .4s var(--e-quint) both;
}

@keyframes cookie-in {
	from {
		transform: translateY(100%);
	}
}

.cookie__title {
	grid-column: 1;
	margin: 0;
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: 21px;
	text-transform: uppercase;
	color: #fff;
	line-height: 1;
}

.cookie__text {
	grid-column: 2;
	margin: 0;
	font-size: 13.5px;
	line-height: 1.5;
}

.cookie__actions {
	grid-column: 3;
	display: flex;
	gap: 10px;
}

.cookie .btn {
	padding: 10px 16px;
	font-size: 14px;
}

.cookie .btn--ghost {
	color: #fff;
	border-color: rgba(255, 255, 255, .3);
}

.cookie .btn--ghost:hover {
	background: rgba(255, 255, 255, .1);
	border-color: #fff;
}

/* Chat */
.chat__toggle {
	position: fixed;
	right: 22px;
	bottom: 22px;
	z-index: var(--z-chat);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: var(--acc);
	color: #fff;
	cursor: pointer;
	box-shadow: 0 14px 30px -12px rgba(16, 20, 43, .6);
	transition: transform .18s var(--e-spring), background .18s var(--e-quint);
}

.chat__toggle:hover {
	transform: scale(1.06);
	background: var(--acc-dark);
}

.chat__toggle:active {
	transform: scale(.97);
}

.chat__panel {
	position: fixed;
	right: 22px;
	bottom: 88px;
	z-index: var(--z-chat);
	display: flex;
	flex-direction: column;
	width: 360px;
	height: 460px;
	max-width: calc(100vw - 32px);
	max-height: calc(100dvh - 120px);
	overflow: hidden;
	background: var(--card);
	border: 1px solid var(--line);
	border-radius: var(--r);
	box-shadow: var(--shadow-lift);
	animation: chat-in .22s var(--e-quint) both;
}

@keyframes chat-in {
	from {
		opacity: 0;
		transform: translateY(10px) scale(.97);
	}
}

.chat__head {
	display: grid;
	grid-template-columns: 40px 1fr auto;
	align-items: center;
	gap: 11px;
	padding: 12px 14px;
	background: var(--ink);
	color: #fff;
}

.chat__avatar {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	object-fit: cover;
}

.chat__name {
	margin: 0;
	font-family: 'Big Shoulders', sans-serif;
	font-weight: 800;
	font-size: 20px;
	line-height: 1;
	text-transform: uppercase;
}

.chat__role {
	margin: 3px 0 0;
	font-size: 11.5px;
	color: #a9b1d4;
	line-height: 1.3;
}

.chat__close {
	display: flex;
	padding: 6px;
	border: 0;
	background: none;
	color: #fff;
	cursor: pointer;
	border-radius: var(--r);
}

.chat__close:hover {
	background: rgba(255, 255, 255, .14);
}

.chat__log {
	flex: 1;
	overflow-y: auto;
	padding: 14px;
	display: flex;
	flex-direction: column;
	gap: 9px;
	background: var(--bg);
}

.msg {
	max-width: 84%;
	margin: 0;
	padding: 9px 12px;
	border-radius: var(--r);
	font-size: 13.5px;
	line-height: 1.5;
	animation: msg-in .22s var(--e-quint) both;
}

@keyframes msg-in {
	from {
		opacity: 0;
		transform: translateY(6px);
	}
}

.msg--bot {
	align-self: flex-start;
	background: #fff;
	border: 1px solid var(--line);
}

.msg--me {
	align-self: flex-end;
	background: var(--acc);
	color: #fff;
}

.msg--typing {
	color: var(--muted);
	letter-spacing: .18em;
}

.chat__form {
	display: grid;
	grid-template-columns: 1fr auto;
	gap: 8px;
	padding: 10px;
	border-top: 1px solid var(--line);
	background: #fff;
}

.chat__input {
	width: 100%;
	padding: 10px 12px;
	border: 1px solid var(--line);
	border-radius: var(--r);
	background: var(--bg);
	color: var(--ink);
	font: 400 14px/1.4 'Manrope', sans-serif;
}

.chat__input::placeholder {
	color: #6a6f8f;
}

.chat__send {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	border: 0;
	border-radius: var(--r);
	background: var(--acc);
	color: #fff;
	cursor: pointer;
	transition: background .18s var(--e-quint);
}

.chat__send:hover {
	background: var(--acc-dark);
}

/* Responsive */
@media (max-width: 1220px) {
	.site-header__row {
		padding-block: 6px;
	}

	.burger {
		display: inline-flex;
	}

	.nav {
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		display: none;
		flex-direction: column;
		align-items: stretch;
		gap: 2px;
		padding: 10px clamp(20px, 4vw, 56px) 16px;
		background: var(--bg);
		border-bottom: 1px solid var(--line);
		box-shadow: var(--shadow);
		z-index: var(--z-drawer);
	}

	.nav.is-open {
		display: flex;
	}

	.nav a {
		padding: 12px 13px;
	}

	.dev-row {
		grid-template-columns: 96px 1fr;
		grid-template-areas:
			'logo main'
			'perks perks'
			'action action';
		gap: 10px 18px;
		padding: 30px 22px;
		width: 100%;
		max-width: 600px;
		margin-inline: auto;
	}

	/* Stacked rows: only the logo still has a neighbour to its right */
	.dev-row__main,
	.dev-row__perks {
		padding-right: 0;
		border-right: 0;
	}

	.dev-row__main {
		margin-left: auto;
	}

	.trophy {
		width: 34px;
		height: 34px;
		top: -10px;
		left: 0;
	}

	.trophy__no {
		width: 13px;
		height: 13px;
		font-size: 10.5px;
	}

	.dev-row__logo img {
		width: 72px;
		height: 72px;
	}

	.dev-row__logo {
		grid-area: logo;
	}

	.dev-row__main {
		grid-area: main;
	}

	.dev-row__perks {
		grid-area: perks;
	}

	.dev-row__action {
		grid-area: action;
	}

	.dev-row__action .btn {
		width: 100%;
		justify-content: center;
		padding: 15px 24px;
		font-size: 16px;
	}
}

@media (max-width: 1100px) {
	/* Five chips plus labels overflow the row between 820 and 1100:
	   drop the label, the whole chip stays the click target. */
	.strip__go {
		display: none;
	}

	.scale__keys {
		grid-template-columns: 1fr 1fr;
		gap: 22px clamp(14px, 2vw, 30px);
	}

	.scorecard__bench {
		grid-template-columns: 240px 1fr;
	}
}

@media (max-width: 820px) {
	.hero > .container {
		min-height: 0;
		padding-block: 22px;
	}

	h1 {
		font-size: clamp(24px, 8vw, 44px);
	}

	/* Mobile hero carries the headline only: the intro paragraph and the
	   shortcut strip push the first ranked card out of the opening screen. */
	.hero__lead,
	.strip {
		display: none;
	}

	.hero__title {
		margin-bottom: 0;
	}

	.top-board {
		padding-top: 0;
	}

	.board {
		gap: 8px;
		margin-top: 8px;
	}

	.dev-row {
		grid-template-columns: 58px 1fr;
		grid-template-areas:
			'logo main'
			'perks perks'
			'action action';
		gap: 4px 13px;
		padding: 26px 18px 28px;
	}

	.trophy {
		width: 33px;
		height: 33px;
		top: -10px;
		left: 0;
	}

	.trophy__no {
		width: 13px;
		height: 13px;
		font-size: 10px;
	}

	.dev-row__logo {
		grid-area: logo;
		padding-right: 0;
		border-right: 0;
	}

	.dev-row__logo img {
		width: 58px;
		height: 58px;
	}

	.dev-row__genre {
		margin-bottom: 4px;
		font-size: 12px;
	}

	.dev-row__perks {
		gap: 2px;
	}

	.perk {
		font-size: clamp(11.5px, 2.6vw, 15.5px);
	}

	.perk svg {
		margin-top: 2px;
		margin-left: auto;
		color: var(--acc);
	}

	.footer__grid {
		grid-template-columns: 1fr;
	}

	.genre-grid {
		grid-template-columns: repeat(2, 1fr);
	}

	.pg-split {
		grid-template-columns: 1fr;
	}

	.practices {
		grid-template-columns: 1fr;
	}

	.step {
		grid-template-columns: 52px 1fr;
		gap: 4px 16px;
	}

	.step__no {
		font-size: 30px;
	}

	.review__head {
		grid-template-columns: 52px 1fr;
		gap: 12px;
	}

	.review__head img {
		width: 52px;
		height: 52px;
	}

	.review__head .btn {
		grid-column: 1 / -1;
		justify-content: center;
	}

	.cookie {
		grid-template-columns: 1fr;
		gap: 8px;
		padding: 12px 16px;
	}

	.cookie__title,
	.cookie__text,
	.cookie__actions {
		grid-column: 1;
	}

	.cookie__title {
		font-size: 18px;
	}

	.cookie__text {
		font-size: 11px;
	}

	.cookie .btn {
		flex: 1;
		justify-content: center;
		padding: 9px 12px;
		font-size: 13px;
	}

	.chat__toggle {
		right: 16px;
		bottom: 16px;
		width: 50px;
		height: 50px;
	}

	.chat__panel {
		right: 16px;
		bottom: 76px;
	}
}

@media (max-width: 520px) {
	.hero > .container {
		padding-block: 16px;
	}

	.dev-row {
		padding: 10px 14px 10px;
	}

	.scale__keys {
		grid-template-columns: 1fr;
	}

	.scorecard__bench {
		grid-template-columns: 1fr;
	}

	.genre-grid {
		grid-template-columns: 1fr;
	}
}

@media (prefers-reduced-motion: reduce) {
	html {
		scroll-behavior: auto;
	}

	*,
	*::before,
	*::after {
		animation-duration: .01ms !important;
		animation-delay: 0ms !important;
		transition-duration: .01ms !important;
		transition-delay: 0ms !important;
	}

	.reveal {
		opacity: 1;
		transform: none;
	}

	/* Bubbles are pure decoration: remove them rather than loop them fast */
	.btn__fizz,
	.top-board__fizz {
		display: none;
	}
}
