/* DumbMonit product site.
   The look is the app's Enterprise console (web/src/app.css, html.mode-enterprise):
   near-black ground, cool grey ink, Geist and Geist Mono, hairline borders, status
   hues used for status only. Always dark. No framework, no third-party request. */

/* ---- fonts (self-hosted, SIL OFL: assets/fonts/OFL.txt) ---- */
@font-face {
	font-family: 'Geist Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-latin-wght-normal.woff2) format('woff2-variations');
	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;
}
@font-face {
	font-family: 'Geist Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-latin-ext-wght-normal.woff2) format('woff2-variations');
	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-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: 'Geist Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-cyrillic-wght-normal.woff2) format('woff2-variations');
	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
	font-family: 'Geist Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-cyrillic-ext-wght-normal.woff2) format('woff2-variations');
	unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
@font-face {
	font-family: 'Geist Mono Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-mono-latin-wght-normal.woff2) format('woff2-variations');
	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;
}
@font-face {
	font-family: 'Geist Mono Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-mono-latin-ext-wght-normal.woff2) format('woff2-variations');
	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-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
	font-family: 'Geist Mono Variable';
	font-style: normal;
	font-display: swap;
	font-weight: 100 900;
	src: url(fonts/geist-mono-cyrillic-wght-normal.woff2) format('woff2-variations');
	unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* ---- tokens: the Enterprise ("Obsidian") palette of the app ---- */
:root {
	color-scheme: dark;

	--c-canvas: #07080a;
	--c-canvas-deep: #050607;
	--c-surface: #0b0d10;
	--c-surface-2: #111419;
	--c-line: #16191e;
	--c-line-strong: #23272e;

	--c-ink: #eceef1;
	--c-ink-2: #8a919c;
	--c-ink-3: #7a818c;
	--c-ghost: rgb(236 238 241 / 0.08);

	--c-signal: #2fd17c;
	--c-signal-ink: #7be3a8;
	--c-signal-soft: rgb(47 209 124 / 0.12);
	--c-advisory: #f2b033;
	--c-advisory-ink: #f7c766;
	--c-advisory-soft: rgb(242 176 51 / 0.13);
	--c-warning: #ff5c5c;
	--c-warning-ink: #ff8a8a;
	--c-warning-soft: rgb(255 92 92 / 0.13);
	--c-info: #7da9ff;
	--c-info-ink: #b3ccff;
	--c-info-soft: rgb(125 169 255 / 0.13);

	/* The solid button is ink on black, not green: green means "up". */
	--c-primary: #eceef1;
	--c-on-primary: #07080a;
	--c-focus: #7da9ff;

	--c-river-up: #1d5e3c;
	--c-river-warn: #a7761c;
	--c-river-down: #c24040;
	--c-river-none: #13161a;

	--shadow-lift: 0 1px 0 rgb(255 255 255 / 0.02) inset, 0 1px 2px rgb(0 0 0 / 0.5);
	--shadow-float: 0 2px 8px rgb(0 0 0 / 0.5), 0 24px 48px -16px rgb(0 0 0 / 0.8);

	--font-ui: 'Geist Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif;
	--font-code: 'Geist Mono Variable', ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace;

	--radius-plate: 6px;
	--radius-btn: 8px;
	--radius-card: 12px;

	--head-h: 52px;
	--gutter: 16px;
	--ease: cubic-bezier(0.16, 1, 0.3, 1);
}

/* ---- base ---- */
*,
*::before,
*::after {
	box-sizing: border-box;
}
html {
	-webkit-text-size-adjust: 100%;
	text-size-adjust: 100%;
	scroll-padding-top: calc(var(--head-h) + 16px);
}
body {
	margin: 0;
	background: var(--c-canvas);
	color: var(--c-ink);
	font-family: var(--font-ui);
	font-size: 0.9375rem;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	overflow-x: hidden;
}
img,
svg {
	display: block;
	max-width: 100%;
}
h1,
h2,
h3,
p,
ul,
ol,
figure {
	margin: 0;
}
ul,
ol {
	padding: 0;
	list-style: none;
}
h1,
h2,
h3 {
	font-weight: 600;
	letter-spacing: -0.02em;
	line-height: 1.2;
	text-wrap: balance;
	overflow-wrap: anywhere;
}
p {
	text-wrap: pretty;
}
a {
	color: var(--c-info-ink);
	text-decoration: underline;
	text-decoration-color: rgb(125 169 255 / 0.35);
	text-underline-offset: 3px;
}
a:hover {
	text-decoration-color: currentColor;
}
:focus-visible {
	outline: 2px solid var(--c-focus);
	outline-offset: 2px;
	border-radius: 4px;
}
code,
kbd,
pre,
samp {
	font-family: var(--font-code);
	font-size: 0.85em;
}
:not(pre) > code {
	padding: 1px 5px;
	border: 1px solid var(--c-line-strong);
	border-radius: 4px;
	background: var(--c-surface-2);
	color: var(--c-ink);
	overflow-wrap: anywhere;
}
strong {
	font-weight: 600;
	color: var(--c-ink);
}
::selection {
	background: rgb(125 169 255 / 0.3);
}
.muted {
	color: var(--c-ink-2);
}
.tnum,
.num {
	font-variant-numeric: tabular-nums;
}
.skip {
	position: absolute;
	left: 8px;
	top: -60px;
	z-index: 100;
	padding: 10px 14px;
	border-radius: var(--radius-btn);
	background: var(--c-primary);
	color: var(--c-on-primary);
	font-weight: 600;
	text-decoration: none;
}
.skip:focus {
	top: 8px;
}
.wrap {
	width: 100%;
	max-width: 1160px;
	margin-inline: auto;
	padding-inline: var(--gutter);
}
@media (min-width: 600px) {
	:root {
		--gutter: 24px;
	}
}
@media (min-width: 1200px) {
	:root {
		--gutter: 32px;
	}
}

/* ---- header: a classic horizontal bar ---- */
.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}
.topbar {
	position: sticky;
	top: 0;
	z-index: 30;
	height: var(--head-h);
	border-bottom: 1px solid var(--c-line);
	background: rgb(7 8 10 / 0.92);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);
}
.topbar .wrap {
	display: flex;
	align-items: center;
	gap: 16px;
	height: 100%;
	max-width: 1280px;
}
.brand {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	min-height: 40px;
	color: var(--c-ink);
	font-size: 0.9375rem;
	font-weight: 600;
	letter-spacing: -0.01em;
	text-decoration: none;
	white-space: nowrap;
}
.brand img {
	width: 28px;
	height: 28px;
	border-radius: 7px;
}
.nav {
	display: none;
}
@media (min-width: 1140px) {
	.nav {
		display: flex;
		align-items: center;
		gap: 2px;
		margin-left: 12px;
	}
	.nav a {
		display: inline-flex;
		align-items: center;
		height: 36px;
		padding: 0 11px;
		border-radius: var(--radius-btn);
		color: var(--c-ink-2);
		font-size: 0.875rem;
		font-weight: 500;
		text-decoration: none;
		white-space: nowrap;
	}
	.nav a:hover {
		color: var(--c-ink);
	}
	.nav a[aria-current] {
		color: var(--c-ink);
		box-shadow: inset 0 -2px 0 var(--c-info);
		border-radius: 0;
	}
	.nav .nav-extra {
		display: none;
	}
}
.actions {
	display: flex;
	align-items: center;
	gap: 8px;
	margin-left: auto;
}
.actions .btn {
	display: none;
}
@media (min-width: 600px) {
	.actions .btn {
		display: inline-flex;
	}
}
@media (min-width: 1140px) and (max-width: 1279px) {
	.actions .gh span {
		display: none;
	}
	.actions .gh {
		padding: 0 10px;
	}
}
.menu-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border: 1px solid var(--c-line-strong);
	border-radius: var(--radius-btn);
	background: var(--c-surface);
	color: var(--c-ink);
	cursor: pointer;
}
.menu-btn span,
.menu-btn span::before,
.menu-btn span::after {
	display: block;
	width: 16px;
	height: 1.5px;
	border-radius: 1px;
	background: currentColor;
	transition: transform 0.2s var(--ease);
}
.menu-btn span {
	position: relative;
}
.menu-btn span::before,
.menu-btn span::after {
	content: '';
	position: absolute;
	left: 0;
}
.menu-btn span::before {
	top: -5px;
}
.menu-btn span::after {
	top: 5px;
}
.menu-open .menu-btn span {
	background: transparent;
}
.menu-open .menu-btn span::before {
	transform: translateY(5px) rotate(45deg);
}
.menu-open .menu-btn span::after {
	transform: translateY(-5px) rotate(-45deg);
}
@media (min-width: 1140px) {
	.menu-btn {
		display: none;
	}
}
@media (max-width: 1139px) {
	.menu-open .nav {
		position: fixed;
		top: var(--head-h);
		left: 0;
		right: 0;
		z-index: 29;
		display: grid;
		gap: 2px;
		max-height: calc(100dvh - var(--head-h));
		overflow-y: auto;
		padding: 8px var(--gutter) 16px;
		border-bottom: 1px solid var(--c-line);
		background: var(--c-canvas-deep);
		box-shadow: var(--shadow-float);
	}
	.menu-open .nav a {
		display: flex;
		align-items: center;
		min-height: 44px;
		padding: 0 12px;
		border-radius: var(--radius-btn);
		color: var(--c-ink);
		font-weight: 500;
		text-decoration: none;
	}
	.menu-open .nav a:hover,
	.menu-open .nav a[aria-current] {
		background: var(--c-surface-2);
	}
}

/* language selector */
.lang {
	position: relative;
}
.lang summary {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	height: 40px;
	padding: 0 10px;
	border: 1px solid var(--c-line-strong);
	border-radius: var(--radius-btn);
	background: var(--c-surface);
	color: var(--c-ink-2);
	font-family: var(--font-code);
	font-size: 0.75rem;
	font-weight: 500;
	cursor: pointer;
	list-style: none;
}
@media (min-width: 1140px) {
	.lang summary {
		height: 36px;
	}
}
.lang summary::-webkit-details-marker {
	display: none;
}
.lang summary:hover {
	color: var(--c-ink);
}
.lang summary svg {
	width: 14px;
	height: 14px;
}
.lang ul {
	position: absolute;
	right: 0;
	top: calc(100% + 6px);
	z-index: 40;
	min-width: 200px;
	padding: 4px;
	border: 1px solid var(--c-line-strong);
	border-radius: 10px;
	background: var(--c-surface);
	box-shadow: var(--shadow-float);
}
.lang a {
	display: flex;
	align-items: center;
	min-height: 40px;
	padding: 0 10px;
	border-radius: 6px;
	color: var(--c-ink);
	font-size: 0.8125rem;
	text-decoration: none;
}
.lang a:hover,
.lang a[aria-current] {
	background: var(--c-surface-2);
}
.lang a[aria-current] {
	font-weight: 600;
}
.lang a[aria-current]::after {
	content: '';
	width: 6px;
	height: 6px;
	margin-left: auto;
	border-radius: 50%;
	background: var(--c-info);
}

/* ---- buttons, plates, marks ---- */
.btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 40px;
	padding: 0 16px;
	border: 1px solid transparent;
	border-radius: var(--radius-btn);
	font-family: inherit;
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
	cursor: pointer;
	transition: filter 0.2s, border-color 0.2s, background-color 0.2s, transform 0.1s;
}
.btn:active {
	transform: translateY(1px);
}
.btn svg {
	width: 16px;
	height: 16px;
	flex-shrink: 0;
}
.btn-primary {
	background: var(--c-primary);
	color: var(--c-on-primary);
	box-shadow: var(--shadow-lift);
}
.btn-primary:hover {
	filter: brightness(1.1);
}
.btn-secondary {
	border-color: var(--c-line-strong);
	background: var(--c-surface);
	color: var(--c-ink);
	box-shadow: var(--shadow-lift);
}
.btn-secondary:hover {
	border-color: var(--c-ink-3);
}
.btn-lg {
	min-height: 48px;
	padding: 0 22px;
	font-size: 0.9375rem;
}
.btn-sm {
	min-height: 36px;
	padding: 0 12px;
	font-size: 0.8125rem;
}
@media (max-width: 1139px) {
	.btn-sm {
		min-height: 40px;
	}
}
.plate {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	height: 22px;
	padding: 0 8px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-plate);
	background: var(--c-ghost);
	color: var(--c-ink-2);
	font-size: 0.75rem;
	font-weight: 600;
	line-height: 1;
	white-space: nowrap;
}
.plate svg {
	width: 13px;
	height: 13px;
	flex-shrink: 0;
}
.plate-signal {
	border-color: rgb(47 209 124 / 0.3);
	background: var(--c-signal-soft);
	color: var(--c-signal-ink);
}
.plate-info {
	border-color: rgb(125 169 255 / 0.3);
	background: var(--c-info-soft);
	color: var(--c-info-ink);
}
.plate-advisory {
	border-color: rgb(242 176 51 / 0.35);
	background: var(--c-advisory-soft);
	color: var(--c-advisory-ink);
}
.plate-warning {
	border-color: rgb(255 92 92 / 0.35);
	background: var(--c-warning-soft);
	color: var(--c-warning-ink);
}
/* A state is a shape and a word, never a colour alone (app: enterprise/status.ts). */
.mk {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-family: var(--font-code);
	font-size: 0.625rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	white-space: nowrap;
}
.mk::before {
	content: '';
	width: 7px;
	height: 7px;
	flex-shrink: 0;
}
.mk-up {
	color: var(--c-signal-ink);
}
.mk-up::before {
	border-radius: 50%;
	background: var(--c-signal);
}
.mk-deg {
	color: var(--c-advisory-ink);
}
.mk-deg::before {
	transform: rotate(45deg);
	background: var(--c-advisory);
}
.mk-down {
	color: var(--c-warning-ink);
}
.mk-down::before {
	border-radius: 2px;
	background: var(--c-warning);
}
.eyebrow,
.label-tape {
	color: var(--c-ink-3);
	font-family: var(--font-code);
	font-size: 0.6875rem;
	font-weight: 500;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

/* ---- sections ---- */
main {
	flex: 1;
}
.block {
	padding-block: 48px;
	border-top: 1px solid var(--c-line);
}
@media (min-width: 900px) {
	.block {
		padding-block: 72px;
	}
}
.block.flush {
	border-top: 0;
	padding-top: 8px;
}
.section-head {
	display: grid;
	gap: 10px;
	max-width: 44rem;
	margin-bottom: 28px;
}
.section-head h2 {
	font-size: clamp(1.375rem, 1.1rem + 1vw, 1.75rem);
}
.section-head p {
	color: var(--c-ink-2);
}
.section-head.tight {
	margin-bottom: 0;
}
.page-head {
	padding-block: 40px 28px;
}
@media (min-width: 900px) {
	.page-head {
		padding-block: 64px 36px;
	}
}
.page-head h1 {
	margin-top: 8px;
	font-size: clamp(1.75rem, 1.3rem + 2vw, 2.5rem);
}
.page-head .lede {
	max-width: 44rem;
	margin-top: 14px;
	color: var(--c-ink-2);
	font-size: 1rem;
}
.page-head .code-note {
	max-width: 44rem;
}
.crumbs {
	font-size: 0.8125rem;
}
.crumbs a {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	color: var(--c-ink-2);
}

/* two columns: a heading column and a content column, like a settings page */
.split {
	display: grid;
	gap: 28px;
}
@media (min-width: 900px) {
	.split {
		grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
		gap: 56px;
		align-items: start;
	}
	.split.even {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}
}

/* hairline grid of cells (the console's figure strip) */
.cells {
	display: grid;
	gap: 1px;
	overflow: hidden;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background: var(--c-line);
}
.cells > li {
	min-width: 0;
	padding: 20px;
	background: var(--c-surface);
}
.cells h3 {
	font-size: 0.9375rem;
	letter-spacing: -0.01em;
}
.cells p {
	margin-top: 6px;
	color: var(--c-ink-2);
	font-size: 0.875rem;
}
@media (min-width: 640px) {
	.cells-2,
	.cells-3,
	.cells-4 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}
@media (min-width: 1000px) {
	.cells-3 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
	.cells-4 {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}
.cells .icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	margin-bottom: 14px;
	border: 1px solid var(--c-line-strong);
	border-radius: 8px;
	background: var(--c-surface-2);
	color: var(--c-ink-2);
}
.cells .icon svg {
	width: 16px;
	height: 16px;
}

/* cards (family cards from build.py, community cards) */
.cards {
	display: grid;
	gap: 12px;
}
@media (min-width: 640px) {
	.cards-fam,
	.cards-3 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}
@media (min-width: 1000px) {
	.cards-fam,
	.cards-3 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}
.card {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 8px;
	min-width: 0;
	padding: 18px 20px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background: var(--c-surface);
	transition: border-color 0.2s, background-color 0.2s;
}
.card:hover {
	border-color: var(--c-line-strong);
	background: var(--c-surface-2);
}
.card h3,
.card .card-h {
	font-size: 0.9375rem;
	letter-spacing: -0.01em;
}
.card h3 a {
	color: var(--c-ink);
	text-decoration: none;
}
.card h3 a::after {
	content: '';
	position: absolute;
	inset: 0;
	border-radius: inherit;
}
.card p {
	color: var(--c-ink-2);
	font-size: 0.875rem;
}
.card .label-tape {
	margin-top: auto;
	padding-top: 4px;
}
.more {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-height: 40px;
	font-size: 0.875rem;
	font-weight: 500;
}
.more::after {
	content: '→';
	transition: transform 0.2s var(--ease);
}
.more:hover::after {
	transform: translateX(3px);
}

/* points: a definition-style list */
.points {
	display: grid;
	border-top: 1px solid var(--c-line);
}
.points > li {
	display: grid;
	gap: 4px;
	padding-block: 16px;
	border-bottom: 1px solid var(--c-line);
}
.points strong {
	font-size: 0.9375rem;
}
.points p {
	color: var(--c-ink-2);
	font-size: 0.875rem;
}

.chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.chips li {
	display: inline-flex;
	align-items: center;
	min-height: 28px;
	padding: 2px 10px;
	border: 1px solid var(--c-line);
	border-radius: 6px;
	background: var(--c-surface);
	color: var(--c-ink-2);
	font-size: 0.8125rem;
}

.notice {
	display: flex;
	gap: 12px;
	align-items: flex-start;
	padding: 14px 16px;
	border: 1px solid rgb(242 176 51 / 0.3);
	border-radius: var(--radius-card);
	background: var(--c-advisory-soft);
	color: var(--c-ink);
	font-size: 0.875rem;
}
.notice svg {
	width: 18px;
	height: 18px;
	flex-shrink: 0;
	margin-top: 2px;
	color: var(--c-advisory);
}
.notice a {
	color: var(--c-advisory-ink);
}

/* ---- code blocks ---- */
.code {
	position: relative;
	max-width: min(40rem, 100%);
	min-width: 0;
	margin-inline: auto;
	border: 1px solid var(--c-line-strong);
	border-radius: 10px;
	background: var(--c-canvas-deep);
}
.code pre {
	margin: 0;
	padding: 16px 84px 16px 16px;
	overflow-x: auto;
	white-space: pre-wrap;
	overflow-wrap: anywhere;
	color: var(--c-ink);
	font-size: 0.8125rem;
	line-height: 1.75;
	scrollbar-width: thin;
}
.code .prompt,
.code .comment {
	color: var(--c-ink-3);
}
.code .prompt {
	user-select: none;
}
.copy {
	position: absolute;
	top: 10px;
	right: 10px;
	min-height: 32px;
	padding: 0 10px;
	border: 1px solid var(--c-line-strong);
	border-radius: 6px;
	background: var(--c-surface-2);
	color: var(--c-ink-2);
	font-family: inherit;
	font-size: 0.75rem;
	font-weight: 600;
	cursor: pointer;
}
@media (max-width: 959px) {
	.copy {
		min-height: 40px;
		top: 6px;
		right: 6px;
	}
}
.copy:hover {
	color: var(--c-ink);
}
.copy.done {
	border-color: rgb(47 209 124 / 0.4);
	color: var(--c-signal-ink);
}
.code-note {
	margin-top: 10px;
	color: var(--c-ink-2);
	font-size: 0.8125rem;
}
.cta {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

/* ---- home ---- */
.hero {
	padding-block: 44px 56px;
	background:
		radial-gradient(48rem 26rem at 70% 10%, rgb(125 169 255 / 0.09), transparent 70%),
		linear-gradient(var(--c-line) 1px, transparent 1px) 0 0 / 44px 44px,
		linear-gradient(90deg, var(--c-line) 1px, transparent 1px) 0 0 / 44px 44px;
	border-bottom: 1px solid var(--c-line);
}
@media (min-width: 900px) {
	.hero {
		padding-block: 80px 88px;
	}
}
.hero-grid {
	display: grid;
	gap: 40px;
	max-width: 1280px;
}
@media (min-width: 1100px) {
	.hero-grid {
		grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
		gap: 56px;
		align-items: center;
	}
}
.hero-text {
	min-width: 0;
}
.hero h1 {
	margin-top: 18px;
	font-size: clamp(2.125rem, 1.4rem + 3vw, 3.4rem);
	letter-spacing: -0.035em;
	line-height: 1.08;
}
/* The word that turns: every word sits in the same cell, one is shown at a time. */
.rot {
	display: inline-grid;
	vertical-align: bottom;
	overflow: hidden;
	color: var(--c-info-ink);
}
.rot > span {
	grid-area: 1 / 1;
	opacity: 0;
	transform: translateY(0.6em);
	transition: opacity 0.45s var(--ease), transform 0.45s var(--ease);
}
.rot > span.on {
	opacity: 1;
	transform: none;
}
.rot > span.off {
	opacity: 0;
	transform: translateY(-0.6em);
}
.hero .lede {
	max-width: 36rem;
	margin-top: 18px;
	color: var(--c-ink-2);
	font-size: 1.125rem;
}
.status-row {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.hero .cta {
	margin-top: 28px;
}

/* the demo in the hero: a framed browser window that plays by itself, then hands over to the visitor */
.demo-fig {
	min-width: 0;
}
.demo {
	overflow: hidden;
	border: 1px solid var(--c-line-strong);
	border-radius: 14px;
	background: var(--c-canvas);
	box-shadow: var(--shadow-float), 0 0 0 6px rgb(255 255 255 / 0.02);
}
.browser-bar {
	display: flex;
	align-items: center;
	gap: 6px;
	height: 34px;
	padding: 0 12px;
	border-bottom: 1px solid var(--c-line);
	background: var(--c-surface-2);
}
.browser-bar i {
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: var(--c-line-strong);
}
.browser-bar i:nth-child(1) {
	background: #4a3434;
}
.browser-bar i:nth-child(2) {
	background: #4a4330;
}
.browser-bar i:nth-child(3) {
	background: #2f4636;
}
.browser-bar span {
	margin-inline: auto;
	padding: 2px 10px;
	border-radius: 6px;
	background: var(--c-canvas);
	color: var(--c-ink-3);
	font-family: var(--font-code);
	font-size: 0.6875rem;
	transform: translateX(-14px);
}
.demo-app {
	container: demo / inline-size;
	position: relative;
	height: 330px;
	overflow: hidden;
	font-size: 0.75rem;
	line-height: 1.4;
}
.d-head {
	display: flex;
	align-items: center;
	gap: 8px;
	height: 40px;
	padding: 0 14px;
	border-bottom: 1px solid var(--c-line);
}
.d-head b {
	font-weight: 600;
}
.c-live {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	height: 20px;
	padding: 0 7px;
	border-radius: 5px;
	background: var(--c-signal-soft);
	color: var(--c-signal-ink);
	font-family: var(--font-code);
	font-size: 0.625rem;
	font-weight: 500;
}
.c-live::before {
	content: '';
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: var(--c-signal);
	animation: live 1.4s ease-in-out infinite;
}
@keyframes live {
	50% {
		opacity: 0.35;
	}
}
.d-list {
	margin: 10px;
	overflow: hidden;
	border: 1px solid var(--c-line);
	border-radius: 10px;
	background: var(--c-surface);
}
.d-list li {
	border-top: 1px solid var(--c-line);
}
.d-list li:first-child {
	border-top: 0;
}
.d-row {
	display: grid;
	grid-template-columns: 5.6rem minmax(0, 1fr) minmax(0, 0.9fr) 3.6rem;
	gap: 10px;
	align-items: center;
	width: 100%;
	height: 40px;
	padding: 0 12px;
	border: 0;
	background: transparent;
	color: inherit;
	font: inherit;
	text-align: left;
	cursor: pointer;
	transition: background-color 0.4s;
}
.d-row:hover {
	background: var(--c-ghost);
}
.d-row[aria-pressed='true'] {
	background: var(--c-info-soft);
	box-shadow: inset 2px 0 0 var(--c-info);
}
.d-row:focus-visible,
.d-replay:focus-visible,
.d-toast:focus-visible,
.d-x:focus-visible,
.d-ack:focus-visible {
	outline: 2px solid var(--c-info);
	outline-offset: -2px;
}
.d-list .nm {
	overflow: hidden;
	color: var(--c-ink);
	font-family: var(--font-code);
	font-size: 0.6875rem;
	white-space: nowrap;
	text-overflow: ellipsis;
}
.d-list .ty,
.d-ph .ty {
	overflow: hidden;
	color: var(--c-ink-2);
	white-space: nowrap;
	text-overflow: ellipsis;
}
.d-list .n {
	display: grid;
	justify-items: end;
	color: var(--c-ink-2);
	font-family: var(--font-code);
	font-size: 0.6875rem;
	text-align: right;
}
@media (max-width: 479px) {
	.d-row {
		grid-template-columns: 5.2rem minmax(0, 1fr) 3.2rem;
	}
	.d-list .ty {
		display: none;
	}
}
/* a row shows one of three states: up, down, acknowledged (word and shape, not colour alone) */
.d-st {
	display: grid;
	min-width: 0;
}
.d-st > *,
.d-list .n > * {
	grid-area: 1 / 1;
}
.d-st > .mk {
	overflow: hidden;
	text-overflow: ellipsis;
}
.d-list .d-down,
.d-list .d-acked,
.st-down .d-up,
.st-ack .d-up {
	visibility: hidden;
}
.st-down .d-down,
.st-ack .d-acked {
	visibility: visible;
}
.st-down .d-row {
	background: var(--c-warning-soft);
}
.st-ack .d-row {
	background: var(--c-advisory-soft);
}
.st-down .d-row[aria-pressed='true'],
.st-ack .d-row[aria-pressed='true'] {
	box-shadow: inset 2px 0 0 var(--c-info);
}
.d-head .d-hint {
	margin-inline-start: auto;
	overflow: hidden;
	color: var(--c-ink-3);
	white-space: nowrap;
	text-overflow: ellipsis;
	opacity: 0;
	transition: opacity 0.4s;
}
.s-manual:not(.s-panel) .d-hint {
	opacity: 1;
}
.d-replay {
	display: inline-flex;
	flex-shrink: 0;
	align-items: center;
	gap: 6px;
	height: 28px;
	margin-inline-start: auto;
	padding: 0 10px;
	border: 1px solid var(--c-line-strong);
	border-radius: 7px;
	background: var(--c-surface);
	color: var(--c-ink-2);
	font: inherit;
	font-weight: 500;
	cursor: pointer;
}
.d-hint + .d-replay {
	margin-inline-start: 10px;
}
.d-replay:hover {
	border-color: var(--c-ink-3);
	color: var(--c-ink);
}
.d-replay svg {
	width: 13px;
	height: 13px;
}
/* the tap target grows past the drawn button without moving the layout */
.d-replay,
.d-x,
.d-ack {
	position: relative;
}
.d-replay::after,
.d-x::after,
.d-ack::after {
	content: '';
	position: absolute;
	inset: -6px;
}
@container demo (max-width: 460px) {
	.d-head .d-hint {
		display: none;
	}
	.d-head .d-replay {
		margin-inline-start: auto;
	}
}
.d-toast {
	position: absolute;
	top: 48px;
	right: 10px;
	z-index: 3;
	display: flex;
	gap: 10px;
	align-items: flex-start;
	width: min(260px, calc(100% - 20px));
	padding: 10px 12px;
	border: 1px solid rgb(255 92 92 / 0.4);
	border-radius: 10px;
	background: var(--c-surface-2);
	box-shadow: var(--shadow-float);
	color: inherit;
	font: inherit;
	text-align: left;
	cursor: pointer;
	opacity: 0;
	visibility: hidden;
	transform: translateX(calc(100% + 20px));
	transition: transform 0.5s var(--ease), opacity 0.5s var(--ease), visibility 0s 0.5s;
}
.d-toast b {
	display: block;
	color: var(--c-warning-ink);
}
.d-toast span span {
	color: var(--c-ink-2);
}
.d-bell svg {
	width: 16px;
	height: 16px;
	color: var(--c-warning);
}
.s-toast .d-toast {
	opacity: 1;
	visibility: visible;
	transform: none;
	transition: transform 0.5s var(--ease), opacity 0.5s var(--ease), visibility 0s;
}
.d-panel {
	position: absolute;
	left: 10px;
	right: 10px;
	bottom: 10px;
	z-index: 2;
	display: grid;
	gap: 6px;
	padding: 12px 14px;
	border: 1px solid var(--c-line-strong);
	border-radius: 10px;
	background: var(--c-surface-2);
	box-shadow: var(--shadow-float);
	visibility: hidden;
	transform: translateY(calc(100% + 16px));
	transition: transform 0.55s var(--ease), visibility 0s 0.55s;
}
.s-panel .d-panel {
	visibility: visible;
	transform: none;
	transition: transform 0.55s var(--ease), visibility 0s;
}
.d-ph {
	display: flex;
	align-items: center;
	gap: 10px;
	min-width: 0;
}
.d-ph b {
	font-family: var(--font-code);
	font-weight: 600;
	white-space: nowrap;
}
.d-pst {
	display: inline-flex;
}
.d-x {
	display: inline-grid;
	place-items: center;
	flex-shrink: 0;
	width: 28px;
	height: 28px;
	margin-inline-start: auto;
	margin-block: -4px;
	border: 0;
	border-radius: 7px;
	background: transparent;
	color: var(--c-ink-2);
	cursor: pointer;
}
.d-x:hover {
	background: var(--c-ghost);
	color: var(--c-ink);
}
.d-x svg {
	width: 14px;
	height: 14px;
}
.d-cap {
	color: var(--c-ink-3);
	font-size: 0.6875rem;
}
/* the graph: grid lines drawn by the box, the curve uncovered left to right (a clip, never a
   dash: a dashed stroke with a non-scaling width is measured differently by each browser) */
.d-chart {
	height: 56px;
	background:
		linear-gradient(var(--c-line-strong), var(--c-line-strong)) 0 25% / 100% 1px no-repeat,
		linear-gradient(var(--c-line-strong), var(--c-line-strong)) 0 50% / 100% 1px no-repeat,
		linear-gradient(var(--c-line-strong), var(--c-line-strong)) 0 75% / 100% 1px no-repeat;
}
.d-chart svg {
	display: block;
	width: 100%;
	height: 100%;
	overflow: visible;
	clip-path: inset(-4px 100% -4px 0);
}
.d-chart.drawn svg {
	clip-path: inset(-4px -4px -4px 0);
	transition: clip-path 1.4s cubic-bezier(0.3, 0.6, 0.2, 1) 0.15s;
}
.d-line {
	fill: none;
	stroke: var(--c-advisory);
	stroke-width: 1.8;
	stroke-linejoin: round;
	stroke-linecap: round;
	vector-effect: non-scaling-stroke;
}
.d-chart.calm .d-line {
	stroke: var(--c-signal);
}
.d-foot {
	display: flex;
	align-items: center;
	min-height: 30px;
}
.d-ack {
	display: inline-grid;
	align-items: center;
	height: 30px;
	padding: 0 12px;
	border: 0;
	border-radius: 7px;
	background: var(--c-primary);
	color: var(--c-on-primary);
	font: inherit;
	font-weight: 600;
	cursor: pointer;
	transition: background-color 0.3s, color 0.3s;
}
.d-ack[hidden],
.d-quiet[hidden] {
	display: none;
}
.d-ack > span {
	grid-area: 1 / 1;
}
.d-ack .a2 {
	visibility: hidden;
}
.d-ack.done {
	background: var(--c-signal-soft);
	color: var(--c-signal-ink);
	cursor: default;
}
.d-ack.done .a1 {
	visibility: hidden;
}
.d-ack.done .a2 {
	visibility: visible;
}
.d-quiet {
	color: var(--c-ink-2);
}
.d-cursor {
	position: absolute;
	left: 0;
	top: 0;
	z-index: 4;
	width: 16px;
	height: 20px;
	fill: var(--c-ink);
	stroke: var(--c-canvas);
	stroke-width: 1.2;
	opacity: 0;
	pointer-events: none;
	transform: translate(70%, 280px);
	transition: transform 0.95s cubic-bezier(0.45, 0, 0.2, 1), opacity 0.3s;
	filter: drop-shadow(0 2px 3px rgb(0 0 0 / 0.6));
}
.s-run .d-cursor {
	opacity: 1;
}
.s-click .d-cursor {
	scale: 0.85;
}
.s-run .d-list li {
	animation: row-in 0.5s var(--ease) both;
}
.s-run .d-list li:nth-child(2) { animation-delay: 0.08s; }
.s-run .d-list li:nth-child(3) { animation-delay: 0.16s; }
.s-run .d-list li:nth-child(4) { animation-delay: 0.24s; }
.s-run .d-list li:nth-child(5) { animation-delay: 0.32s; }
.s-run .d-list li:nth-child(6) { animation-delay: 0.4s; }
@keyframes row-in {
	from {
		opacity: 0;
		transform: translateY(6px);
	}
}
.demo-fig figcaption {
	margin-top: 10px;
	color: var(--c-ink-3);
	font-size: 0.75rem;
}

.block.alt {
	background: var(--c-surface);
	border-top-color: var(--c-line);
	border-bottom: 1px solid var(--c-line);
}
.block.alt + .block {
	border-top: 0;
}
.section-head.center {
	justify-items: center;
	margin-inline: auto;
	margin-bottom: 36px;
	text-align: center;
}
.center-row {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px;
	margin-top: 28px;
}
.benefits {
	display: grid;
	gap: 28px 32px;
}
@media (min-width: 640px) {
	.benefits {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}
@media (min-width: 1000px) {
	.benefits {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}
.benefits li {
	min-width: 0;
}
.benefits h3 {
	font-size: 1rem;
}
.benefits p {
	margin-top: 6px;
	color: var(--c-ink-2);
	font-size: 0.9375rem;
}
.icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	margin-bottom: 14px;
	border: 1px solid var(--c-line-strong);
	border-radius: 10px;
	background: var(--c-canvas);
	color: var(--c-info);
}
.icon svg {
	width: 20px;
	height: 20px;
}
.card .icon {
	width: 36px;
	height: 36px;
	margin-bottom: 4px;
	background: var(--c-surface-2);
}
.card .icon svg {
	width: 18px;
	height: 18px;
}
.int-search {
	display: grid;
	gap: 6px;
	max-width: 34rem;
	margin: 0 auto 28px;
}
.int-row {
	display: flex;
	gap: 8px;
}
.int-row input {
	flex: 1;
	min-width: 0;
	height: 44px;
	padding: 0 14px;
	border: 1px solid var(--c-line-strong);
	border-radius: var(--radius-btn);
	background: var(--c-canvas);
	color: var(--c-ink);
	font: inherit;
	font-size: 0.9375rem;
}
.int-row input::placeholder {
	color: var(--c-ink-3);
}
.int-row input:focus {
	outline: 2px solid var(--c-focus);
	outline-offset: 0;
	border-color: transparent;
}
.int-row .btn {
	min-height: 44px;
}
.stats {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 28px 16px;
	text-align: center;
}
@media (min-width: 760px) {
	.stats {
		grid-template-columns: repeat(5, minmax(0, 1fr));
	}
}
.stats li {
	display: grid;
	gap: 4px;
	min-width: 0;
}
.stats li:last-child:nth-child(odd) {
	grid-column: 1 / -1;
}
@media (min-width: 760px) {
	.stats li:last-child:nth-child(odd) {
		grid-column: auto;
	}
}
.stats b {
	font-family: var(--font-code);
	font-size: clamp(1.75rem, 1.3rem + 1.6vw, 2.5rem);
	font-weight: 500;
	letter-spacing: -0.04em;
	font-variant-numeric: tabular-nums;
}
.stats span {
	color: var(--c-ink-2);
	font-size: 0.875rem;
}
.final-box {
	display: grid;
	gap: 28px;
	max-width: 70rem;
	margin-inline: auto;
	padding: 28px 18px;
	border: 1px solid var(--c-line-strong);
	border-radius: 16px;
	background: radial-gradient(40rem 16rem at 0 0, rgb(125 169 255 / 0.08), transparent 70%), var(--c-surface);
}
@media (min-width: 900px) {
	.final-box {
		grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
		align-items: center;
		gap: 48px;
		padding: 44px 48px;
	}
}
.final-text h2 {
	font-size: clamp(1.75rem, 1.3rem + 1.4vw, 2.4rem);
	letter-spacing: -0.03em;
}
.final-text p {
	max-width: 28rem;
	margin-top: 10px;
	color: var(--c-ink-2);
}
.final-text .cta {
	margin-top: 24px;
}
.final-code {
	min-width: 0;
}
.final-code .code {
	max-width: none;
	margin-inline: 0;
	text-align: left;
}
/* the warning under the box: same column, same width */
.final-note {
	box-sizing: border-box;
	max-width: 70rem;
	margin: 24px auto 0;
}
.dev-badge {
	height: 18px;
	padding: 0 6px;
	font-size: 0.625rem;
	letter-spacing: 0.02em;
}
.toc a .dev-badge {
	margin-inline-start: 6px;
}

/* audience: two side-by-side panels */
.aud {
	display: grid;
	gap: 12px;
}
@media (min-width: 900px) {
	.aud {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}
.aud > li {
	min-width: 0;
	padding: 22px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background: var(--c-surface);
}
.aud h3 {
	margin-top: 8px;
	font-size: 1.0625rem;
}
.aud p {
	margin-top: 8px;
	color: var(--c-ink-2);
	font-size: 0.875rem;
}

/* bottom call to action */
.feedback {
	display: grid;
	gap: 20px;
	padding: 24px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background: var(--c-surface);
}
@media (min-width: 900px) {
	.feedback {
		grid-template-columns: minmax(0, 1fr) auto;
		align-items: center;
		padding: 28px 32px;
	}
}
.feedback h2 {
	font-size: clamp(1.25rem, 1.1rem + 0.6vw, 1.5rem);
}
.feedback p {
	margin-top: 6px;
	color: var(--c-ink-2);
}
.feedback + .feedback {
	margin-top: 12px;
}

/* ---- support / donations ---- */
.wallets {
	display: grid;
	border-top: 1px solid var(--c-line);
}
.wallets li {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 4px 12px;
	align-items: center;
	padding-block: 10px;
	border-bottom: 1px solid var(--c-line);
}
.wallets .label-tape {
	grid-column: 1 / -1;
}
.wallets code {
	font-size: 0.75rem;
	word-break: break-all;
}
.wallets .copy {
	position: static;
}

/* ---- features ---- */
.toc {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: 24px;
}
.toc a {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: 0 12px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-btn);
	background: var(--c-surface);
	color: var(--c-ink-2);
	font-size: 0.8125rem;
	text-decoration: none;
}
@media (min-width: 960px) {
	.toc a {
		min-height: 32px;
	}
}
.toc a:hover {
	border-color: var(--c-line-strong);
	color: var(--c-ink);
}
.os-list {
	display: grid;
	border-top: 1px solid var(--c-line);
}
.os-list li {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	gap: 4px 12px;
	align-items: center;
	padding-block: 14px;
	border-bottom: 1px solid var(--c-line);
}
.os-list .os {
	font-weight: 600;
}
.os-list .how {
	grid-column: 1 / -1;
	color: var(--c-ink-2);
	font-size: 0.875rem;
}

/* ---- install ---- */
.steps {
	display: grid;
	max-width: 46rem;
	counter-reset: step;
}
.steps > li {
	position: relative;
	display: grid;
	gap: 10px;
	min-width: 0;
	padding: 0 0 32px 46px;
	counter-increment: step;
}
.steps > li::before {
	content: counter(step);
	position: absolute;
	left: 0;
	top: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	border: 1px solid var(--c-line-strong);
	border-radius: 8px;
	background: var(--c-surface-2);
	color: var(--c-ink);
	font-family: var(--font-code);
	font-size: 0.8125rem;
	font-weight: 600;
}
.steps > li::after {
	content: '';
	position: absolute;
	left: 15px;
	top: 38px;
	bottom: 8px;
	width: 1px;
	background: var(--c-line-strong);
}
.steps > li:last-child::after {
	display: none;
}
.steps h2 {
	font-size: 1.0625rem;
	line-height: 30px;
}
.steps p {
	color: var(--c-ink-2);
}
.steps .code {
	max-width: none;
}
.facts {
	display: grid;
	border-top: 1px solid var(--c-line);
}
.facts li {
	padding-block: 10px;
	border-bottom: 1px solid var(--c-line);
	font-size: 0.875rem;
}
.facts a {
	display: inline-flex;
	align-items: center;
	min-height: 24px;
}
.h-sm {
	margin-bottom: 14px;
	font-size: 1rem;
}

/* ---- community ---- */
.badges {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: 4px;
}
.badges a {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: 0 12px;
	border: 1px solid var(--c-line-strong);
	border-radius: var(--radius-btn);
	background: var(--c-surface);
	color: var(--c-ink);
	font-size: 0.8125rem;
	font-weight: 500;
	text-decoration: none;
}
.badges a:hover {
	border-color: var(--c-ink-3);
}

/* ---- devices catalogue ---- */
.filter {
	display: grid;
	gap: 14px;
	margin-bottom: 20px;
}
.search {
	display: grid;
	gap: 6px;
	max-width: 30rem;
}
.search[hidden] {
	display: none;
}
.search input {
	width: 100%;
	height: 40px;
	padding: 0 12px;
	border: 1px solid var(--c-line-strong);
	border-radius: var(--radius-btn);
	background: var(--c-surface);
	color: var(--c-ink);
	font: inherit;
	font-size: 0.875rem;
}
.search input::placeholder {
	color: var(--c-ink-3);
}
.search input:focus {
	outline: 2px solid var(--c-focus);
	outline-offset: 0;
	border-color: transparent;
}
.fam-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.fam-chips a {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: 0 12px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-btn);
	background: var(--c-surface);
	color: var(--c-ink-2);
	font-size: 0.8125rem;
	font-weight: 500;
	text-decoration: none;
}
@media (min-width: 960px) {
	.fam-chips a {
		min-height: 32px;
	}
}
.fam-chips a:hover {
	border-color: var(--c-line-strong);
	color: var(--c-ink);
}
.fam-chips a[aria-current] {
	border-color: var(--c-line-strong);
	background: var(--c-surface-2);
	color: var(--c-ink);
}
#dev-count {
	font-size: 0.8125rem;
}
.catalog {
	display: grid;
	gap: 8px;
}
@media (min-width: 640px) {
	.catalog {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}
@media (min-width: 1000px) {
	.catalog {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}
.catalog > li {
	min-width: 0;
}
.catalog > li[hidden] {
	display: none;
}
.dev-card {
	display: grid;
	gap: 6px;
	height: 100%;
	padding: 14px 16px;
	border: 1px solid var(--c-line);
	border-radius: 10px;
	background: var(--c-surface);
	color: var(--c-ink);
	text-decoration: none;
	transition: border-color 0.2s, background-color 0.2s;
}
.dev-card:hover {
	border-color: var(--c-line-strong);
	background: var(--c-surface-2);
}
.dev-card .name {
	display: flex;
	align-items: center;
	gap: 8px;
	font-size: 0.875rem;
	font-weight: 600;
	overflow-wrap: anywhere;
}
.led {
	width: 7px;
	height: 7px;
	flex-shrink: 0;
	border-radius: 50%;
	background: var(--c-signal);
}
.dev-card .what {
	color: var(--c-ink-2);
	font-size: 0.8125rem;
	line-height: 1.5;
}
.dev-card .fam {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	margin-top: 4px;
	font-size: 0.625rem;
}
.dev-card .go::after {
	content: '→';
	display: inline-block;
	color: var(--c-ink-3);
	font-family: var(--font-ui);
	font-size: 0.875rem;
	transition: transform 0.2s var(--ease), color 0.2s;
}
.dev-card:hover .go::after {
	transform: translateX(3px);
	color: var(--c-ink);
}

/* ---- family pages ---- */
.devs {
	display: grid;
	gap: 16px;
	padding-bottom: 48px;
}
.dev {
	min-width: 0;
	padding: 20px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background: var(--c-surface);
}
@media (min-width: 900px) {
	.dev {
		padding: 28px;
	}
}
.dev > header {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 6px 12px;
}
.dev > header h2 {
	font-size: 1.25rem;
}
.dev .summary {
	margin-top: 8px;
	color: var(--c-ink-2);
}
.dev-grid {
	display: grid;
	gap: 24px;
	margin-top: 22px;
	padding-top: 22px;
	border-top: 1px solid var(--c-line);
}
@media (min-width: 900px) {
	.dev-grid {
		grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
		gap: 40px;
	}
}
.dev-grid section {
	min-width: 0;
}
.dev-grid h3 {
	display: flex;
	align-items: center;
	gap: 8px;
	margin-bottom: 12px;
	font-size: 0.875rem;
}
.dev-grid p {
	font-size: 0.875rem;
}
.dev-grid p + p {
	margin-top: 8px;
}
.needs {
	display: grid;
	gap: 10px;
	margin-bottom: 10px;
}
.needs li {
	display: grid;
	gap: 2px;
	font-size: 0.875rem;
}
.needs span {
	color: var(--c-ink-2);
}
.rules {
	display: grid;
	border-top: 1px solid var(--c-line);
}
.rules li {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: 2px 10px;
	align-items: start;
	padding-block: 9px;
	border-bottom: 1px solid var(--c-line);
	font-size: 0.8125rem;
}
.rules li .plate {
	grid-row: span 2;
	margin-top: 1px;
}
.rules strong {
	overflow-wrap: anywhere;
}
.rules span:not(.plate) {
	color: var(--c-ink-2);
}
details > summary {
	cursor: pointer;
}
.more-rules summary,
.setup summary {
	display: flex;
	align-items: center;
	min-height: 40px;
	color: var(--c-info-ink);
	font-size: 0.8125rem;
	font-weight: 500;
}
.setup {
	margin-top: 18px;
	padding-top: 6px;
	border-top: 1px solid var(--c-line);
}
.setup-steps {
	display: grid;
	gap: 12px;
	margin-top: 8px;
	padding-left: 20px;
	list-style: decimal;
	font-size: 0.875rem;
}
.setup-steps li {
	min-width: 0;
}
.setup-steps li::marker {
	color: var(--c-ink-3);
	font-family: var(--font-code);
}
.setup-steps pre {
	margin: 8px 0 0;
	padding: 12px 14px;
	overflow-x: auto;
	border: 1px solid var(--c-line-strong);
	border-radius: 8px;
	background: var(--c-canvas-deep);
	font-size: 0.75rem;
}
.warn {
	margin-top: 12px;
	padding: 10px 12px;
	border: 1px solid rgb(242 176 51 / 0.3);
	border-radius: 8px;
	background: var(--c-advisory-soft);
	font-size: 0.8125rem;
}
.dev-doc {
	margin-top: 18px;
}

/* ---- roadmap ---- */
.rm-discuss {
	margin-bottom: 24px;
	color: var(--c-ink-2);
}
.rm-sec {
	padding-block: 28px;
	border-top: 1px solid var(--c-line);
}
.rm-head {
	display: grid;
	gap: 4px;
	margin-bottom: 14px;
}
.rm-head h2 {
	font-size: 1.125rem;
}
.rm-list {
	display: grid;
	overflow: hidden;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background: var(--c-surface);
}
.rm-list li {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 6px;
	padding: 12px 16px;
	border-top: 1px solid var(--c-line);
	font-size: 0.875rem;
}
.rm-list li:first-child {
	border-top: 0;
}
.rm-list .plate {
	justify-self: start;
}
@media (min-width: 700px) {
	.rm-list li {
		grid-template-columns: 9.5rem minmax(0, 1fr);
		gap: 14px;
		align-items: start;
	}
}
.rm-vote-box {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 4px 14px;
	grid-column: 1 / -1;
}
@media (min-width: 700px) {
	.rm-vote-box {
		grid-column: 2;
	}
}
.rm-votes {
	font-weight: 600;
}
.rm-vote {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	text-decoration: underline;
}
.rm-ver {
	font-family: var(--font-code);
	font-size: 0.8125rem;
}
.rm-group {
	border: 1px solid var(--c-line);
	border-radius: 10px;
	background: var(--c-surface);
}
.rm-group + .rm-group {
	margin-top: 6px;
}
.rm-group summary {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px 12px;
	min-height: 44px;
	padding: 8px 14px;
	list-style: none;
}
.rm-group summary::-webkit-details-marker {
	display: none;
}
.rm-group summary::before {
	content: '';
	width: 6px;
	height: 6px;
	border-right: 1.5px solid var(--c-ink-3);
	border-bottom: 1.5px solid var(--c-ink-3);
	transform: rotate(-45deg);
	transition: transform 0.2s var(--ease);
}
.rm-group[open] summary::before {
	transform: rotate(45deg);
}
.rm-gtitle {
	font-size: 0.875rem;
	font-weight: 600;
}
.rm-count {
	margin-left: auto;
	color: var(--c-ink-3);
	font-family: var(--font-code);
	font-size: 0.6875rem;
}
.rm-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	padding: 4px 14px 14px;
}
.rm-chips li {
	padding: 3px 9px;
	border: 1px solid var(--c-line);
	border-radius: 6px;
	background: var(--c-canvas);
	color: var(--c-ink-2);
	font-size: 0.8125rem;
}
.rm-foot {
	margin-top: 24px;
}

/* ---- footer: columns ---- */
footer {
	padding-block: 48px 28px;
	border-top: 1px solid var(--c-line);
	background: var(--c-canvas-deep);
	color: var(--c-ink-2);
	font-size: 0.875rem;
}
.foot-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 32px 24px;
}
@media (min-width: 900px) {
	.foot-grid {
		grid-template-columns: minmax(0, 1.4fr) repeat(4, minmax(0, 1fr)) minmax(0, 1.4fr);
	}
}
.foot-about,
.foot-support {
	grid-column: 1 / -1;
}
@media (min-width: 900px) {
	.foot-about,
	.foot-support {
		grid-column: auto;
	}
}
.foot-grid > * {
	min-width: 0;
}
.foot-grid h2 {
	margin-bottom: 10px;
	color: var(--c-ink);
	font-size: 0.8125rem;
	font-weight: 600;
	letter-spacing: 0;
}
.foot-grid ul {
	display: grid;
}
.foot-grid ul a {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	color: var(--c-ink-2);
	text-decoration: none;
}
@media (min-width: 900px) {
	.foot-grid ul a {
		min-height: 30px;
	}
}
.foot-grid ul a:hover,
.foot-grid ul a[aria-current] {
	color: var(--c-ink);
}
.foot-about p + p,
.foot-support p + p {
	margin-top: 10px;
}
.foot-brand {
	display: flex;
	align-items: center;
	gap: 10px;
	color: var(--c-ink);
	font-weight: 600;
}
.foot-brand img {
	width: 24px;
	height: 24px;
	border-radius: 6px;
}
.foot-ver a {
	color: var(--c-ink-3);
	font-family: var(--font-code);
	font-size: 0.75rem;
}
.foot-support p:not(:first-of-type) a:not(.btn) {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
}
.foot-note {
	margin-top: 36px;
	padding-top: 20px;
	border-top: 1px solid var(--c-line);
	color: var(--c-ink-3);
	font-size: 0.75rem;
}

/* ---- 404 ---- */
.lost {
	display: grid;
	place-content: center;
	justify-items: center;
	gap: 16px;
	min-height: 100vh;
	min-height: 100dvh;
	padding: 48px var(--gutter);
	text-align: center;
}
.lost img {
	width: 56px;
	height: 56px;
	border-radius: 14px;
}
.lost h1 {
	font-size: clamp(1.5rem, 1.2rem + 1.5vw, 2.25rem);
}

/* ---- motion: a block settles in once, nothing more ---- */
.js .reveal {
	opacity: 0;
	transform: translateY(8px);
}
.js .reveal.in {
	opacity: 1;
	transform: none;
	transition: opacity 0.5s var(--ease) var(--rd, 0ms), transform 0.5s var(--ease) var(--rd, 0ms);
}
@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation: none !important;
		transition: none !important;
	}
}

/* ---- diagrams: real text in boxes, wires that carry a packet ----
   Each diagram lays itself out from its own width (container queries), not the window's:
   the same diagram is horizontal when it has the room and vertical in a half-width card or on
   a phone, and a box never gets so narrow that a word has to break. */
.dg-fig {
	display: flex;
	flex-direction: column;
	min-width: 0;
	height: 100%;
}
.dg {
	container: dg / inline-size;
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	min-width: 0;
	padding: 18px;
	border: 1px solid var(--c-line);
	border-radius: var(--radius-card);
	background:
		radial-gradient(circle at 1px 1px, var(--c-line-strong) 1px, transparent 1.5px) 0 0 / 16px 16px,
		var(--c-canvas-deep);
}
@media (min-width: 900px) {
	.dg {
		padding: 28px;
	}
}
.dg + figcaption,
.dg-fig figcaption {
	margin-top: 10px;
	color: var(--c-ink-2);
	font-size: 0.8125rem;
}
.dg-title {
	margin-bottom: 14px;
}
/* the drawing sits in the middle of the card, so two cards side by side keep the same height */
.dg > .flow,
.dg > .arch {
	margin-block: auto;
}
.flow {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	min-width: 0;
}
.node {
	position: relative;
	display: grid;
	gap: 2px;
	min-width: 0;
	padding: 11px 14px;
	border: 1px solid var(--c-line-strong);
	border-radius: 10px;
	background: var(--c-surface);
	font-size: 0.8125rem;
	line-height: 1.4;
	transition: border-color 0.4s, background-color 0.4s;
}
.node b {
	display: flex;
	align-items: center;
	gap: 8px;
	font-weight: 600;
	overflow-wrap: break-word;
	hyphens: manual;
}
.node b svg {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
	color: var(--c-ink-2);
}
.node > span {
	color: var(--c-ink-2);
	font-size: 0.75rem;
}
.node .tag {
	justify-self: start;
	margin-top: 4px;
	padding: 1px 6px;
	border: 1px solid var(--c-line-strong);
	border-radius: 4px;
	color: var(--c-ink-2);
	font-family: var(--font-code);
	font-size: 0.625rem;
}
.node.main {
	border-color: rgb(125 169 255 / 0.45);
	background: linear-gradient(var(--c-info-soft), var(--c-info-soft)), var(--c-surface);
}
.node.main b svg {
	color: var(--c-info);
}
.zone {
	position: relative;
	display: grid;
	gap: 0;
	min-width: 0;
	padding: 26px 12px 12px;
	border: 1px dashed var(--c-line-strong);
	border-radius: 12px;
}
.zone > .label-tape {
	position: absolute;
	top: 7px;
	left: 12px;
	font-size: 0.625rem;
}
/* A wire: vertical on phones, horizontal on wide screens (.flow only). */
.wire {
	position: relative;
	align-self: center;
	width: 1px;
	height: 34px;
	flex-shrink: 0;
	background: var(--c-line-strong);
}
.wire::after {
	content: '';
	position: absolute;
	left: -2px;
	top: 0;
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: var(--c-info);
	box-shadow: 0 0 6px rgb(125 169 255 / 0.8);
	animation: pkt-y 2.4s linear infinite;
	animation-delay: var(--d, 0s);
}
.wire.ok::after {
	background: var(--c-signal);
	box-shadow: 0 0 6px rgb(47 209 124 / 0.7);
}
.wire em {
	position: absolute;
	left: 10px;
	top: 50%;
	transform: translateY(-50%);
	color: var(--c-ink-3);
	font-family: var(--font-code);
	font-size: 0.625rem;
	font-style: normal;
	white-space: nowrap;
}
@keyframes pkt-y {
	from {
		top: -2px;
		opacity: 0;
	}
	15%,
	85% {
		opacity: 1;
	}
	to {
		top: calc(100% - 3px);
		opacity: 0;
	}
}
@keyframes pkt-x {
	from {
		left: -2px;
		opacity: 0;
	}
	15%,
	85% {
		opacity: 1;
	}
	to {
		left: calc(100% - 3px);
		opacity: 0;
	}
}
@container dg (min-width: 720px) {
	.flow.row {
		flex-direction: row;
		align-items: center;
	}
	.flow.row > .node,
	.flow.row > .zone {
		flex: 1 1 0;
	}
	.flow.row > .wire {
		flex: 0 0 56px;
		width: 56px;
		height: 1px;
	}
	.flow.row > .wire::after {
		top: -2px;
		animation-name: pkt-x;
	}
	.flow.row > .wire em {
		left: 50%;
		top: auto;
		bottom: 8px;
		transform: translateX(-50%);
	}
}
.pair {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 10px;
}
.pair > div {
	display: grid;
	min-width: 0;
}
.dg-note {
	margin-top: 14px;
	color: var(--c-ink-2);
	font-size: 0.8125rem;
}
/* the alert path: four steps need more room than the other rows before they sit side by side */
@container dg (max-width: 839px) {
	.flow.row.steps-dg {
		flex-direction: column;
		align-items: stretch;
	}
	.flow.row.steps-dg > .node {
		flex: none;
	}
	.flow.row.steps-dg > .wire {
		flex: 0 0 26px;
		width: 1px;
		height: 26px;
	}
	.flow.row.steps-dg > .wire::after {
		top: 0;
		animation-name: pkt-y;
	}
}
.steps-dg .node {
	grid-template-columns: auto minmax(0, 1fr);
	column-gap: 10px;
	align-items: baseline;
}
.steps-dg .node > * {
	grid-column: 2;
}
.steps-dg .node > .n {
	grid-column: 1;
	grid-row: 1 / span 2;
}
@container dg (min-width: 840px) {
	.steps-dg .node {
		grid-template-columns: minmax(0, 1fr);
	}
	.steps-dg .node > *,
	.steps-dg .node > .n {
		grid-column: 1;
		grid-row: auto;
	}
}
/* the alert path: the steps light up one after the other, once in view */
.steps-dg .node .n {
	color: var(--c-ink-3);
	font-family: var(--font-code);
	font-size: 0.625rem;
}
.steps-dg.play .node {
	animation: lit 7s var(--ease) infinite;
}
.steps-dg.play .node:nth-of-type(2) {
	animation-delay: 1.2s;
}
.steps-dg.play .node:nth-of-type(3) {
	animation-delay: 2.4s;
}
.steps-dg.play .node:nth-of-type(4) {
	animation-delay: 3.6s;
}
@keyframes lit {
	0%,
	22%,
	100% {
		border-color: var(--c-line-strong);
	}
	6%,
	14% {
		border-color: var(--c-info);
	}
}
.mini {
	display: flex;
	flex-wrap: wrap;
	gap: 4px 10px;
	margin-top: 6px;
}
.dg-grid {
	display: grid;
	gap: 16px;
	align-items: stretch;
}
@media (min-width: 1000px) {
	.dg-grid {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}
}
/* the architecture: what talks to the container, and what is inside it */
.arch {
	display: grid;
	gap: 0;
}
.arch .ins {
	display: grid;
	gap: 8px;
}
@container dg (min-width: 440px) and (max-width: 759px) {
	.arch .ins {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}
@container dg (min-width: 760px) {
	.arch {
		grid-template-columns: minmax(0, 1fr) 56px minmax(0, 1.5fr);
		align-items: center;
	}
	.arch > .wire {
		width: 56px;
		height: 1px;
	}
	.arch > .wire::after {
		top: -2px;
		animation-name: pkt-x;
	}
}
.zone .wire {
	height: 26px;
}
.arch > .wire,
.zone .wire,
.pair .wire {
	justify-self: center;
}
.dg-clients {
	display: grid;
	gap: 8px;
}
@container dg (min-width: 720px) {
	.flow.row > .zone.grow {
		flex-grow: 1.6;
	}
	.flow.row > .wire.wide {
		flex-basis: 150px;
		width: 150px;
	}
}
