/*
Theme Name: David Pérez — CTO Terminal
Theme URI: https://davidperezgar.com
Author: David Pérez
Author URI: https://davidperezgar.com
Description: Block theme for the personal portfolio of David Pérez, Founder & CTO at CLOSE and WordPress.org plugin reviewer. Terminal look, fully editable with core blocks and patterns.
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 7.4
Version: 1.0.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: davidperezgar-theme
*/

/* ==========================================================================
   Base
   ========================================================================== */

:root {
	--dp-mono: var(--wp--preset--font-family--jetbrains-mono);
	--dp-bg-grid: #ffffff06;
	--dp-grid-glow: rgba(126, 224, 143, 0.11);
	--dp-accent-bg: #7ee08f;
	--dp-accent-ink: #0a0d0c;
	--dp-accent-hover: #b6f5c0;
	--dp-code: #0c100f;
	--dp-soft: #0c1611;
	--dp-dots: #3a4440;
	--dp-logo: none;
}

/* Light scheme: same tokens, remapped. Selector is doubled to beat the global-styles :root rule. */
@media (prefers-color-scheme: light) {
	:root:root {
		--wp--preset--color--base: #f5f6f3;
		--wp--preset--color--surface: #ffffff;
		--wp--preset--color--surface-hover: #f0f3ef;
		--wp--preset--color--surface-raised: #e8ece7;
		--wp--preset--color--line: #e3e7e2;
		--wp--preset--color--border: #dde2dd;
		--wp--preset--color--border-strong: #cdd4ce;
		--wp--preset--color--foreground: #111513;
		--wp--preset--color--text: #2b332f;
		--wp--preset--color--text-soft: #3d4741;
		--wp--preset--color--muted: #56605b;
		--wp--preset--color--dim: #5f6a66;
		--wp--preset--color--primary: #1b7432;
		--wp--preset--color--primary-hover: #145a26;
		--wp--preset--color--primary-deep: #86c394;
		--wp--preset--color--accent: #94570a;
		--dp-accent-hover: #a8ecb5;
		--dp-bg-grid: #00000008;
		--dp-grid-glow: rgba(27, 116, 50, 0.1);
		--dp-code: #eef1ed;
		--dp-soft: #eef8f0;
		--dp-dots: #c7cec8;
		--dp-logo: invert(1);
	}
}

body {
	background-image:
		linear-gradient(var(--dp-bg-grid) 1px, transparent 1px),
		linear-gradient(90deg, var(--dp-bg-grid) 1px, transparent 1px);
	background-size: 32px 32px;
	-webkit-font-smoothing: antialiased;
}

.wp-site-blocks {
	min-height: 100vh;
}

/*
 * Frontend grid: the base grid and the glow are two fixed layers, so their lines always
 * coincide. The editor keeps the plain body background above.
 */
body.wp-theme-davidperezgar-theme {
	background-image: none;
}

body.wp-theme-davidperezgar-theme::before {
	content: "";
	position: fixed;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		linear-gradient(var(--dp-bg-grid) 1px, transparent 1px),
		linear-gradient(90deg, var(--dp-bg-grid) 1px, transparent 1px);
	background-size: 32px 32px;
}

/*
 * Subtle grid animation: a soft glow of the accent colour slowly wanders over the
 * grid lines (touch devices) or follows the cursor (mouse). Frontend only (the editor body class does not carry the theme class).
 */
@media (prefers-reduced-motion: no-preference) {
	body.wp-theme-davidperezgar-theme::after {
		content: "";
		position: fixed;
		inset: 0;
		z-index: -1;
		pointer-events: none;
		background-image:
			linear-gradient(var(--dp-grid-glow) 1px, transparent 1px),
			linear-gradient(90deg, var(--dp-grid-glow) 1px, transparent 1px);
		background-size: 32px 32px;
		-webkit-mask-image: radial-gradient(circle at center, #000 0, transparent 70%);
		mask-image: radial-gradient(circle at center, #000 0, transparent 70%);
		-webkit-mask-size: 70vmax 70vmax;
		mask-size: 70vmax 70vmax;
		-webkit-mask-repeat: no-repeat;
		mask-repeat: no-repeat;
		animation: dp-grid-glow 48s ease-in-out infinite alternate;
	}
}

/* With a mouse, the glow follows the cursor instead (assets/js/grid-glow.js). */
@media (prefers-reduced-motion: no-preference) {
	html.has-pointer body.wp-theme-davidperezgar-theme::after {
		-webkit-mask-image: radial-gradient(circle 300px at var(--dp-mx, 50%) var(--dp-my, 50%), #000 0, transparent 100%);
		mask-image: radial-gradient(circle 300px at var(--dp-mx, 50%) var(--dp-my, 50%), #000 0, transparent 100%);
		-webkit-mask-size: auto;
		mask-size: auto;
		-webkit-mask-position: 0 0;
		mask-position: 0 0;
		--dp-grid-glow: rgba(126, 224, 143, 0.2);
		animation: none;
	}
}

@media (prefers-reduced-motion: no-preference) and (prefers-color-scheme: light) {
	html.has-pointer body.wp-theme-davidperezgar-theme::after {
		--dp-grid-glow: rgba(27, 116, 50, 0.18);
	}
}

@keyframes dp-grid-glow {
	0% {
		-webkit-mask-position: 5% 15%;
		mask-position: 5% 15%;
	}

	50% {
		-webkit-mask-position: 95% 40%;
		mask-position: 95% 40%;
	}

	100% {
		-webkit-mask-position: 30% 95%;
		mask-position: 30% 95%;
	}
}

/* Keeps cards and sections free from the generic flow margins. */
.wp-block-post-content > .section,
.wp-block-post-content > .cta-panel {
	margin-block-start: 0;
}

/* ==========================================================================
   Shared text components
   ========================================================================== */

.terminal-prompt,
.section-label,
.badge,
.metric-card,
.project-card__meta,
.pillar-card__meta,
.article-row__type,
.article-row__meta,
.talk-card__meta,
.terminal-panel__bar,
.terminal-panel__row,
.site-header,
.site-footer {
	font-family: var(--dp-mono);
}

.terminal-prompt {
	margin: 0;
	font-size: var(--wp--preset--font-size--sm);
	color: var(--wp--preset--color--dim);
}

.section-label {
	margin: 0;
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--primary);
}

.section-label.is-dim,
.terminal-prompt.is-dim {
	color: var(--wp--preset--color--dim);
}

.badge {
	margin: 0;
	padding: 3px 8px;
	border: 1px solid var(--wp--preset--color--border-strong);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--text);
}

.badge.badge--solid {
	border-color: var(--dp-accent-bg);
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
	font-weight: 700;
}

/* ==========================================================================
   Sections
   ========================================================================== */

.section {
	padding-block: 40px 56px;
	border-top: 1px solid var(--wp--preset--color--line);
}

.section.section--first {
	padding-block: 56px 48px;
	border-top: 0;
}

.section-head {
	gap: 12px;
}

.wp-block-group.section-head,
.wp-block-group.section-head__links {
	align-items: flex-end;
}

.section-head__text {
	gap: 6px;
}

.section-head__text h2 {
	margin: 0;
}

.section-head__links {
	gap: 16px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.section-head__links p,
.section-head__note {
	margin: 0;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.section-head__note {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.section-head__links .is-accent a {
	color: var(--wp--preset--color--accent);
}

/* ==========================================================================
   Header
   ========================================================================== */

.site-header-wrap {
	position: sticky;
	top: 0;
	z-index: 10;
}

.admin-bar .site-header-wrap {
	top: 32px;
}

@media (max-width: 782px) {
	.admin-bar .site-header-wrap {
		top: 46px;
	}
}

.site-header {
	padding-block: 12px;
	background: color-mix(in srgb, var(--wp--preset--color--base) 93%, transparent);
	border-bottom: 1px solid var(--wp--preset--color--line);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	font-size: var(--wp--preset--font-size--sm);
}

.site-header__inner {
	gap: 24px;
}

.site-header__brand {
	margin: 0;
	font-size: 14px;
	font-weight: 700;
}

.site-header__brand a {
	color: var(--wp--preset--color--primary);
	text-decoration: none;
}

.site-header__nav {
	flex: 1 1 auto;
	min-width: 0;
}

.site-header__nav .wp-block-navigation__container {
	flex-wrap: nowrap;
}

.site-nav {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
	gap: 4px;
}

.site-nav .wp-block-navigation-item .wp-block-navigation-item__content {
	padding: 4px 9px;
	border-radius: 3px;
	color: var(--wp--preset--color--text-soft);
	text-decoration: none;
	white-space: nowrap;
}

.site-nav .wp-block-navigation-item .wp-block-navigation-item__content:hover {
	color: var(--wp--preset--color--foreground);
}

.site-nav .wp-block-navigation-item.current-menu-item .wp-block-navigation-item__content,
.site-nav .wp-block-navigation-item.current-menu-ancestor .wp-block-navigation-item__content {
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
	font-weight: 700;
}

.site-header__tools {
	gap: 14px;
	flex: none;
}

.lang-switch {
	display: flex;
	overflow: hidden;
	border: 1px solid var(--wp--preset--color--border-strong);
	border-radius: 3px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.lang-switch > * {
	padding: 4px 8px;
	color: var(--wp--preset--color--muted);
	text-decoration: none;
}

.lang-switch a:hover {
	color: var(--wp--preset--color--foreground);
}

.lang-switch .is-current {
	background: var(--wp--preset--color--surface-raised);
	color: var(--wp--preset--color--foreground);
}

.site-header .wp-block-button .wp-block-button__link {
	padding: 6px 12px;
	font-size: var(--wp--preset--font-size--sm);
	white-space: nowrap;
}

/* Navigation overlay on small screens. */
.site-nav .wp-block-navigation__responsive-container.is-menu-open {
	background: var(--wp--preset--color--base);
	color: var(--wp--preset--color--foreground);
}

.site-nav__language {
	display: none;
}

@media (max-width: 899px) {
	.site-nav__language {
		display: block;
		margin-bottom: 16px;
	}

	.site-nav__language .lang-switch {
		font-size: var(--wp--preset--font-size--lg);
	}

	.site-nav__language .lang-switch > * {
		padding: 10px 12px;
	}

	.site-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
		gap: 4px;
	}

	.site-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation-item__content {
		padding: 10px 12px;
		font-size: var(--wp--preset--font-size--subhead);
		line-height: 1.4;
	}

	.site-nav .wp-block-navigation__responsive-container-close {
		display: flex;
		min-width: 44px;
		min-height: 44px;
		align-items: center;
		justify-content: center;
	}

	.site-header {
		-webkit-backdrop-filter: none;
		backdrop-filter: none;
	}

	.wp-block-group.site-header__inner {
		flex-wrap: nowrap;
		gap: 12px;
	}

	.site-header__nav {
		flex: 0 0 24px;
		margin-left: auto;
	}

	.site-header__nav .wp-block-navigation__responsive-container-open {
		display: flex;
	}

	.site-header__nav .wp-block-navigation__responsive-container:not(.is-menu-open) {
		display: none;
	}

	.wp-block-group.site-header__tools {
		display: none;
	}
}

/* ==========================================================================
   Buttons
   ========================================================================== */

.wp-block-button.is-style-outline > .wp-block-button__link {
	border: 1px solid var(--wp--preset--color--primary);
	background: transparent;
	color: var(--wp--preset--color--primary);
}

.wp-block-button.is-style-outline > .wp-block-button__link:hover {
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
}

.wp-block-button.is-style-ghost > .wp-block-button__link {
	border: 1px solid var(--wp--preset--color--border-strong);
	background: transparent;
	color: var(--wp--preset--color--foreground);
	font-weight: 400;
}

.wp-block-button.is-style-ghost > .wp-block-button__link:hover {
	border-color: var(--wp--preset--color--primary);
	background: transparent;
	color: var(--wp--preset--color--foreground);
}

/* ==========================================================================
   Hero
   ========================================================================== */

.hero {
	gap: 48px;
}

.wp-block-group.hero {
	align-items: center;
}

.hero__content {
	gap: 24px;
}

.hero__badges {
	gap: 8px;
}

.hero h1 {
	margin: 0;
	text-wrap: balance;
}

.hero h1 mark.has-inline-color {
	background-color: transparent;
}

.hero__lead {
	max-width: 560px;
	margin: 0;
	font-size: var(--wp--preset--font-size--xl);
	line-height: 1.55;
	text-wrap: pretty;
}

.hero .wp-block-buttons {
	gap: 12px;
}

.hero .wp-block-button .wp-block-button__link {
	padding: 14px 22px;
	font-size: 14px;
}

.hero__sponsor {
	gap: 14px;
	padding-top: 20px;
	border-top: 1px solid var(--wp--preset--color--line);
}

.hero__sponsor p {
	margin: 0;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.hero__sponsor .wp-block-image {
	margin: 0;
}

.hero__sponsor img {
	display: block;
	filter: var(--dp-logo);
	width: auto;
	height: 22px;
}

/* Terminal window with the portrait */
.terminal-panel {
	gap: 0;
	width: 100%;
	max-width: 480px;
	justify-self: center;
	overflow: hidden;
	border: 1px solid var(--wp--preset--color--border-strong);
	border-radius: 6px;
	background: var(--wp--preset--color--surface);
}

.terminal-panel__bar {
	display: flex;
	align-items: center;
	margin: 0;
	padding: 10px 12px;
	border-bottom: 1px solid var(--wp--preset--color--line);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--dim);
}

.terminal-panel__bar::before {
	content: "";
	flex: none;
	width: 9px;
	height: 9px;
	margin-right: 38px;
	border-radius: 50%;
	background: var(--dp-dots);
	box-shadow: 15px 0 var(--dp-dots), 30px 0 var(--dp-dots);
}

.terminal-panel__image {
	margin: 0;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	background: #0f1312;
}

.terminal-panel__image img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 0;
}

.terminal-panel__meta {
	gap: 6px;
	padding: 14px 16px;
}

.terminal-panel__row {
	gap: 16px;
	font-size: var(--wp--preset--font-size--xs);
}

.wp-block-group.terminal-panel__row {
	align-items: baseline;
	flex-wrap: nowrap;
}

.terminal-panel__row p {
	margin: 0;
	color: var(--wp--preset--color--foreground);
}

.terminal-panel__row p:first-child {
	flex: 0 0 6ch;
	color: var(--wp--preset--color--dim);
}

.terminal-panel__row p.is-status {
	color: var(--wp--preset--color--primary);
}

/* ==========================================================================
   Metrics
   ========================================================================== */

.metrics-grid {
	gap: 10px;
}

.metric-card {
	gap: 10px;
	padding: 18px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.metric-card__top {
	font-size: var(--wp--preset--font-size--sm);
	color: var(--wp--preset--color--text-soft);
}

.metric-card__top p,
.metric-card__value,
.metric-card__avg {
	margin: 0;
}

.metric-card__code {
	color: var(--wp--preset--color--dim);
}

.wp-block-group.metric-card__body {
	align-items: flex-end;
	flex-wrap: nowrap;
}

.metric-card__figures {
	gap: 4px;
}

.metric-card__value {
	font-size: var(--wp--preset--font-size--stat);
	font-weight: 700;
	line-height: 1;
	color: var(--wp--preset--color--foreground);
}

.metric-card__avg {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.metric-card__bars {
	gap: 3px;
	height: 44px;
	flex-wrap: nowrap;
}

.wp-block-group.metric-card__bars {
	align-items: flex-end;
}

.metric-card__bar {
	flex: none;
	width: 10px;
	background: var(--wp--preset--color--primary-deep);
}

.metric-card__bar:last-child {
	background: var(--wp--preset--color--primary);
}

.metric-note {
	padding: 18px;
	border: 1px dashed var(--wp--preset--color--border-strong);
	border-radius: 4px;
}

.wp-block-group.metric-note {
	justify-content: space-between;
	align-items: stretch;
}

.metric-note p {
	margin: 0;
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.55;
	text-wrap: pretty;
}

.metric-note p:last-child {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

/* ==========================================================================
   Pillars
   ========================================================================== */

.pillar-grid {
	gap: 10px;
}

.pillar-card {
	gap: 12px;
	padding: 22px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.pillar-card h3,
.pillar-card p {
	margin: 0;
}

.pillar-card p:last-child {
	line-height: 1.55;
	text-wrap: pretty;
}

.pillar-card__meta {
	font-size: var(--wp--preset--font-size--xs);
}

.pillar-card__meta p {
	color: var(--wp--preset--color--dim);
}

.pillar-card__meta .badge {
	padding: 2px 7px;
	color: var(--dp-accent-ink);
}

/* ==========================================================================
   Project cards (whole card clickable through the title link)
   ========================================================================== */

.project-grid {
	gap: 10px;
}

.project-card,
.talk-card {
	position: relative;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.project-card:hover,
.project-card:focus-within,
.talk-card:hover,
.talk-card:focus-within {
	border-color: var(--wp--preset--color--primary);
}

.project-card {
	gap: 12px;
	padding: 20px;
}

.wp-block-group.project-card {
	align-items: stretch;
}

.project-card h3,
.project-card p {
	margin: 0;
}

.project-card h3 a,
.talk-card h3 a {
	color: var(--wp--preset--color--foreground);
	text-decoration: none;
}

.project-card h3 a::after,
.talk-card h3 a::after {
	content: "";
	position: absolute;
	inset: 0;
}

.project-card__meta {
	font-size: var(--wp--preset--font-size--xs);
	gap: 8px;
}

.project-card__meta p:first-child {
	color: var(--wp--preset--color--primary);
}

.project-card__meta p:first-child {
	flex: 1 1 auto;
}

.project-card__tag {
	flex: none;
	white-space: nowrap;
	padding: 1px 6px;
	border: 1px solid var(--wp--preset--color--border-strong);
	color: var(--wp--preset--color--text-soft);
}

.project-card__desc {
	flex: 1;
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.55;
	text-wrap: pretty;
}

.project-card__proves {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

/* ==========================================================================
   Services
   ========================================================================== */

.services {
	gap: 40px;
}

.wp-block-group.services {
	align-items: start;
}

.services__intro {
	gap: 16px;
}

.services__intro h2,
.services__intro p {
	margin: 0;
}

.services__intro h2 {
	text-wrap: balance;
}

.services__intro .services__lead {
	font-size: var(--wp--preset--font-size--lg);
	line-height: 1.55;
	text-wrap: pretty;
}

.services__intro .wp-block-button .wp-block-button__link {
	padding: 12px 20px;
	font-size: 14px;
}

.service-list {
	gap: 0;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.service-row {
	gap: 16px;
	padding: 20px;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.service-row:last-child {
	border-bottom: 0;
}

.wp-block-group.service-row {
	align-items: flex-start;
	flex-wrap: nowrap;
}

.service-row__tag {
	flex: 0 0 64px;
	margin: 0;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--primary);
}

.service-row__text {
	gap: 6px;
	flex: 1;
	min-width: 0;
}

.service-row h3 {
	margin: 0;
	font-size: var(--wp--preset--font-size--md);
}

.service-row p:not(.service-row__tag) {
	margin: 0;
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.5;
}

/* ==========================================================================
   Talks
   ========================================================================== */

.talk-card {
	gap: 20px;
	padding: 22px;
}

.talk-card__main {
	gap: 10px;
}

.talk-card__main p,
.talk-card__main h3 {
	margin: 0;
}

.talk-card__main h3 {
	font-size: 1.25rem;
	text-wrap: balance;
}

.talk-card__meta {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.wp-block-group.talk-card__actions {
	justify-content: flex-end;
	gap: 10px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.talk-card__actions p {
	position: relative;
	z-index: 1;
	margin: 0;
}

.talk-card__chip {
	padding: 6px 10px;
	border: 1px solid var(--wp--preset--color--border-strong);
}

.talk-card__chip a {
	color: var(--wp--preset--color--text);
}

/* ==========================================================================
   Latest posts
   ========================================================================== */

.article-list {
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.article-list .wp-block-post-template {
	margin: 0;
	padding: 0;
	list-style: none;
}

.article-list .wp-block-post-template > li {
	margin: 0;
}

.article-row {
	gap: 16px;
	position: relative;
	padding: 20px;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.wp-block-group.article-row {
	align-items: flex-start;
	flex-wrap: nowrap;
}

.article-row:hover,
.article-row:focus-within {
	background: var(--wp--preset--color--surface-hover);
}

.article-list .wp-block-post-template > li:last-child .article-row {
	border-bottom: 0;
}

.article-row__type {
	flex: 0 0 90px;
	max-width: 90px;
	margin: 0;
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--primary);
}

.article-row__body {
	gap: 6px;
	flex: 1;
	min-width: 0;
}

.article-row__body > * {
	margin: 0;
}

.article-row__title {
	font-size: 1.0625rem;
	text-wrap: balance;
}

.article-row__title a {
	color: var(--wp--preset--color--foreground);
	text-decoration: none;
}

.article-row__title a::after {
	content: "";
	position: absolute;
	inset: 0;
}

.article-row__excerpt {
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.5;
	text-wrap: pretty;
}

.article-row__excerpt p {
	margin: 0;
}

.article-row__meta {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

/* ==========================================================================
   Call to action
   ========================================================================== */

.cta-panel {
	gap: 32px;
	margin-block: 16px 64px;
	padding: clamp(24px, 5vw, 48px);
	border: 1px solid var(--wp--preset--color--primary);
	border-radius: 6px;
	background: var(--wp--preset--color--surface);
}

.wp-block-group.cta-panel {
	align-items: center;
}

.cta-panel__text {
	gap: 14px;
}

.cta-panel__text h2,
.cta-panel__text p {
	margin: 0;
}

.cta-panel__text h2 {
	font-size: clamp(1.625rem, 3vw, 2.25rem);
	text-wrap: balance;
}

.cta-panel__text .cta-panel__lead {
	font-size: var(--wp--preset--font-size--lg);
	line-height: 1.55;
	text-wrap: pretty;
}

.cta-panel__action {
	gap: 12px;
}

.cta-panel .wp-block-button .wp-block-button__link {
	padding: 16px 22px;
	font-size: var(--wp--preset--font-size--base);
}

.cta-panel__note {
	margin: 0;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
	text-align: center;
}

/* ==========================================================================
   Footer
   ========================================================================== */

.site-footer {
	padding-block: 24px;
	border-top: 1px solid var(--wp--preset--color--line);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.site-footer__inner {
	gap: 16px;
}

.site-footer__copy {
	margin: 0;
	color: var(--wp--preset--color--muted);
}

.site-footer__copy strong {
	color: var(--wp--preset--color--foreground);
}

.site-footer__copy::after {
	content: "";
	display: inline-block;
	width: 7px;
	height: 13px;
	margin-left: 8px;
	background: var(--wp--preset--color--primary);
	vertical-align: -2px;
	animation: dp-blink 1s steps(1) infinite;
}

.site-footer__nav {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	gap: 18px;
}

.site-footer__nav .wp-block-navigation-item__content {
	color: var(--wp--preset--color--primary);
}

@keyframes dp-blink {
	50% {
		opacity: 0;
	}
}

@media (prefers-reduced-motion: reduce) {
	.site-footer__copy::after {
		animation: none;
	}
}

/* ==========================================================================
   Generic templates (pages, posts, archives, 404)
   ========================================================================== */

.page-main {
	padding-block: 56px 64px;
}

.page-title {
	margin-block: 0 24px;
	text-wrap: balance;
}

.page-meta {
	margin-block: 0 32px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.page-meta .wp-block-post-date,
.page-meta .wp-block-post-terms {
	font-size: inherit;
}

.page-content > * + * {
	margin-block-start: 1.25rem;
}

.page-content p {
	line-height: 1.65;
}

.page-content a {
	text-decoration: underline;
	text-underline-offset: 3px;
}

.wp-block-query-pagination {
	margin-block-start: 32px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

/* ==========================================================================
   Layout helpers
   ========================================================================== */

.wp-block-group.is-nowrap,
.wp-block-group.is-vertical {
	flex-wrap: nowrap;
}

@media (max-width: 600px) {
	.article-row__type {
		flex-basis: 64px;
		max-width: 64px;
	}
}

/* auto-fit collapses empty tracks, so two-column sections stay two columns. */
.wp-block-group.hero {
	grid-template-columns: repeat(auto-fit, minmax(min(27.5rem, 100%), 1fr));
}

.wp-block-group.services,
.wp-block-group.cta-panel {
	grid-template-columns: repeat(auto-fit, minmax(min(21.25rem, 100%), 1fr));
}

.wp-block-group.talk-card {
	grid-template-columns: repeat(auto-fit, minmax(min(17.5rem, 100%), 1fr));
}

@media (min-width: 900px) {
	.wp-block-group.site-header__inner {
		flex-wrap: nowrap;
	}
}

/* ==========================================================================
   Blog archive
   ========================================================================== */

.blog-hero {
	gap: 32px;
	padding-block: 48px 32px;
}

.wp-block-group.blog-hero {
	align-items: end;
	grid-template-columns: repeat(auto-fit, minmax(min(26.25rem, 100%), 1fr));
}

.blog-hero__text {
	gap: 18px;
}

.blog-hero h1 {
	margin: 0;
	font-size: clamp(1.875rem, 4vw, 2.875rem);
	line-height: 1.1;
	text-wrap: balance;
}

.blog-hero__lead {
	max-width: 600px;
	margin: 0;
	font-size: 1.125rem;
	line-height: 1.55;
	text-wrap: pretty;
}

.subscribe-card {
	gap: 12px;
	padding: 18px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
	font-family: var(--dp-mono);
}

.subscribe-card p {
	margin: 0;
}

.subscribe-card__label {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--accent);
}

.subscribe-card__text {
	font-size: var(--wp--preset--font-size--base);
	color: var(--wp--preset--color--foreground);
}

.wp-block-group.subscribe-card__row {
	gap: 8px;
	align-items: stretch;
}

.subscribe-card__url {
	flex: 1;
	min-width: 12.5rem;
	padding: 10px 12px;
	border: 1px solid var(--wp--preset--color--border-strong);
	background: var(--wp--preset--color--base);
	font-size: var(--wp--preset--font-size--sm);
	color: var(--wp--preset--color--text);
}

.subscribe-card .wp-block-button .wp-block-button__link {
	padding: 10px 14px;
	background: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--base);
	font-size: var(--wp--preset--font-size--sm);
}

.blog-filters {
	gap: 16px 24px;
	padding-block: 14px;
	border-block: 1px solid var(--wp--preset--color--line);
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.blog-filters__types,
.blog-filters__topics {
	gap: 4px;
}

.blog-filters__topics {
	gap: 6px;
}

.blog-filters p {
	margin: 0;
}

.blog-filters__topics > p:first-child {
	color: var(--wp--preset--color--dim);
}

.filter-pill,
.blog-filters .wp-block-categories-list li {
	padding: 6px 12px;
	border: 1px solid var(--wp--preset--color--border-strong);
	border-radius: 3px;
	color: var(--wp--preset--color--text);
	font-weight: 700;
}

.filter-pill a,
.blog-filters .wp-block-categories-list li a {
	color: inherit;
	text-decoration: none;
}

.filter-pill.is-current,
.blog-filters .wp-block-categories-list li.current-cat {
	border-color: var(--dp-accent-bg);
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
}

.blog-filters .wp-block-categories-list {
	display: flex;
	flex-wrap: wrap;
	gap: 4px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.blog-filters .wp-block-categories-list li {
	margin: 0;
}

.blog-filters .wp-block-tag-cloud {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.blog-filters .wp-block-tag-cloud a {
	padding: 4px 6px;
	color: var(--wp--preset--color--text-soft);
	font-size: var(--wp--preset--font-size--sm);
	text-decoration: none;
}

.blog-filters .wp-block-tag-cloud a::before,
.article-row__meta .taxonomy-post_tag a::before,
.post-meta .taxonomy-post_tag a::before {
	content: "#";
}

.blog-filters .wp-block-tag-cloud a:hover {
	color: var(--wp--preset--color--primary);
	text-decoration: underline;
	text-underline-offset: 4px;
}

.blog-list {
	gap: 10px;
	padding-block: 24px 16px;
}

.blog-paged .featured-post {
	display: none;
}

.featured-post {
	gap: 24px;
	position: relative;
	padding: clamp(20px, 3vw, 32px);
	border: 1px solid var(--wp--preset--color--border-strong);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.wp-block-group.featured-post {
	grid-template-columns: repeat(auto-fit, minmax(min(22.5rem, 100%), 1fr));
}

.featured-post:hover,
.featured-post:focus-within {
	border-color: var(--wp--preset--color--primary);
}

.featured-post__main {
	gap: 14px;
}

.featured-post__badges {
	gap: 8px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
}

.featured-post__badges p,
.featured-post__badges div {
	margin: 0;
}

.featured-post__badges .taxonomy-category a {
	display: inline-block;
	padding: 2px 7px;
	border: 1px solid var(--wp--preset--color--border-strong);
	color: var(--wp--preset--color--text);
	text-transform: uppercase;
}

.featured-post__title {
	margin: 0;
	font-size: clamp(1.375rem, 2.6vw, 1.875rem);
	line-height: 1.2;
	text-wrap: balance;
}

.featured-post__title a::after {
	content: "";
	position: absolute;
	inset: 0;
}

.featured-post__title a {
	color: var(--wp--preset--color--foreground);
	text-decoration: none;
}

.wp-block-group.featured-post__aside {
	justify-content: space-between;
	align-items: stretch;
}

.featured-post__excerpt {
	margin: 0;
	font-size: var(--wp--preset--font-size--lg);
	line-height: 1.6;
}

.featured-post__excerpt p {
	margin: 0;
}

.featured-post__more {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
	color: var(--wp--preset--color--primary);
}

.article-row__side {
	gap: 6px;
	flex: 0 0 104px;
	max-width: 104px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
}

.article-row__side > * {
	margin: 0;
}

.article-row__side .taxonomy-category a {
	color: var(--wp--preset--color--primary);
	text-transform: lowercase;
}

.article-row__side .wp-block-post-date {
	color: var(--wp--preset--color--muted);
}

.wp-block-group.article-row__meta-row {
	gap: 12px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.article-row__meta-row a {
	color: inherit;
}

.wp-block-query-pagination {
	padding-block: 8px 56px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.wp-block-query-pagination .page-numbers,
.wp-block-query-pagination-previous,
.wp-block-query-pagination-next {
	padding: 6px 12px;
	border: 1px solid var(--wp--preset--color--border-strong);
	color: var(--wp--preset--color--text);
	text-decoration: none;
}

.wp-block-query-pagination .page-numbers.current {
	background: var(--wp--preset--color--surface-raised);
	color: var(--wp--preset--color--foreground);
}

.cta-banner {
	gap: 16px 24px;
	margin: 10px;
	padding: 20px;
	border: 1px solid var(--wp--preset--color--primary);
	border-radius: 4px;
	background: var(--dp-soft);
}

.cta-banner__text {
	gap: 6px;
	max-width: 620px;
}

.cta-banner__text p {
	margin: 0;
}

.cta-banner__text p:last-child {
	font-size: var(--wp--preset--font-size--lg);
	line-height: 1.5;
	color: var(--wp--preset--color--foreground);
}

.cta-banner .wp-block-button .wp-block-button__link {
	padding: 12px 18px;
	font-size: 14px;
}

.talks-pointer {
	gap: 12px;
	margin-block-end: 64px;
	padding-block: 20px;
	border-top: 1px solid var(--wp--preset--color--line);
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
	color: var(--wp--preset--color--muted);
}

.talks-pointer p {
	margin: 0;
	color: inherit;
}

/* ==========================================================================
   Single post
   ========================================================================== */

.single-post .site-nav .is-blog .wp-block-navigation-item__content {
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
	font-weight: 700;
}

.post-layout {
	gap: 48px;
	padding-block: 40px 64px;
}

.wp-block-group.post-layout {
	align-items: flex-start;
}

.post-article {
	gap: 22px;
	flex: 1 1 600px;
	max-width: 720px;
	min-width: 0;
}

.post-crumbs,
.post-meta {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.post-crumbs {
	gap: 6px;
}

.post-crumbs p,
.post-crumbs div,
.post-meta p,
.post-meta div {
	margin: 0;
}

.post-crumbs a {
	color: var(--wp--preset--color--primary);
}

.post-meta {
	gap: 8px;
}

.post-meta .taxonomy-category a {
	display: inline-block;
	padding: 2px 7px;
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
	font-weight: 700;
	text-transform: uppercase;
	text-decoration: none;
}

.post-meta .taxonomy-post_tag a {
	display: inline-block;
	padding: 2px 7px;
	border: 1px solid var(--wp--preset--color--border-strong);
	color: var(--wp--preset--color--text-soft);
}

.post-title {
	margin: 0;
	font-size: clamp(1.75rem, 3.8vw, 2.625rem);
	line-height: 1.15;
	text-wrap: balance;
}

/* Article body */
.post-body {
	font-size: 1.125rem;
	line-height: 1.7;
	color: var(--wp--preset--color--text);
}

.wp-block-post-content.post-body > * + * {
	margin-block-start: 18px;
}

.post-body > p:first-child {
	font-size: 1.3125rem;
	line-height: 1.55;
}

.post-body p,
.post-body li {
	text-wrap: pretty;
}

.post-body strong {
	color: var(--wp--preset--color--foreground);
}

.post-body a:not(.wp-element-button) {
	text-decoration: underline;
	text-underline-offset: 3px;
}

.wp-block-post-content.post-body > h2 {
	margin-block-start: 36px;
	scroll-margin-top: 90px;
	font-size: 1.5rem;
	line-height: 1.3;
}

.post-body > h2::before {
	content: "## ";
	color: var(--wp--preset--color--primary);
}

.wp-block-post-content.post-body > h3 {
	margin-block-start: 28px;
	scroll-margin-top: 90px;
}

.post-body :not(pre) > code {
	padding: 1px 6px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 3px;
	background: var(--dp-code);
	font-family: var(--dp-mono);
	font-size: 0.9375rem;
}

.post-body pre.wp-block-code {
	margin-inline: 0;
	padding: 16px;
	overflow-x: auto;
	border: 1px solid var(--wp--preset--color--border-strong);
	border-radius: 4px;
	background: var(--dp-code);
	color: var(--wp--preset--color--foreground);
	font-family: var(--dp-mono);
	font-size: 0.9375rem;
	line-height: 1.6;
}

.post-body pre.wp-block-code code {
	padding: 0;
	border: 0;
	background: none;
	font: inherit;
}

.post-body ol {
	padding-left: 0;
	list-style: none;
	counter-reset: dp-step;
}

.post-body ol > li {
	position: relative;
	margin-block: 14px;
	padding-left: 44px;
	counter-increment: dp-step;
}

.post-body ol > li::before {
	content: "[" counter(dp-step) "]";
	position: absolute;
	top: 4px;
	left: 0;
	font-family: var(--dp-mono);
	font-size: 0.875rem;
	color: var(--wp--preset--color--accent);
}

/* Inline CTA (patterns/post-cta.php) */
.cta-aside {
	gap: 14px;
	margin-block: 10px;
	padding: 22px;
	border: 1px solid var(--wp--preset--color--primary);
	border-radius: 6px;
	background: var(--dp-soft);
}

.wp-block-group.cta-aside {
	align-items: stretch;
}

.cta-aside p {
	margin: 0;
}

.cta-aside p:first-child {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--primary);
}

.cta-aside p:nth-child(2) {
	font-size: 1.125rem;
	line-height: 1.55;
	color: var(--wp--preset--color--foreground);
}

.cta-aside .wp-block-button .wp-block-button__link {
	padding: 12px 18px;
	font-size: 14px;
}

/* Author box */
.author-box {
	gap: 18px;
	margin-block-start: 24px;
	padding: 20px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 6px;
	background: var(--wp--preset--color--surface);
}

.wp-block-group.author-box {
	align-items: flex-start;
	flex-wrap: nowrap;
}

.author-box__avatar {
	flex: none;
	width: 72px;
	height: 72px;
	margin: 0;
	overflow: hidden;
	border-radius: 50%;
	background: #0f1312;
}

.author-box__avatar img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.author-box__body {
	gap: 10px;
	flex: 1;
	min-width: 0;
}

.author-box__body p {
	margin: 0;
}

.author-box__name {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--base);
	font-weight: 700;
	color: var(--wp--preset--color--foreground);
}

.author-box__bio {
	line-height: 1.55;
	color: var(--wp--preset--color--text);
}

.wp-block-group.author-box__sponsor {
	gap: 10px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.author-box__sponsor .wp-block-image {
	margin: 0;
}

.author-box__sponsor img {
	display: block;
	width: auto;
	height: 16px;
	filter: var(--dp-logo);
}

/* Previous / next */
.post-nav {
	gap: 10px;
}

.post-nav .wp-block-post-navigation-link {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding: 16px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
	font-family: var(--dp-mono);
}

.post-nav .wp-block-post-navigation-link:hover,
.post-nav .wp-block-post-navigation-link:focus-within {
	border-color: var(--wp--preset--color--primary);
}

.post-nav .post-navigation-link__label {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.post-nav .wp-block-post-navigation-link a {
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.4;
	color: var(--wp--preset--color--foreground);
	text-decoration: none;
}

.post-nav .wp-block-post-navigation-link a::after {
	content: "";
	position: absolute;
	inset: 0;
}

/* Sticky sidebar */
.post-aside {
	gap: 16px;
	position: sticky;
	top: 76px;
	flex: 0 1 260px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.admin-bar .post-aside {
	top: 108px;
}

.post-aside .wp-block-group {
	gap: 10px;
	padding: 16px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.post-aside p {
	margin: 0;
	line-height: 1.5;
	color: var(--wp--preset--color--text);
}

.post-aside .post-aside__label {
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.post-aside .post-aside__label.is-accent {
	color: var(--wp--preset--color--accent);
}

.post-toc:not(.has-items) {
	display: none;
}

.post-toc a {
	display: block;
	color: var(--wp--preset--color--text);
}

.post-toc a + a {
	margin-top: 10px;
}

.post-toc a:hover {
	color: var(--wp--preset--color--primary);
}

.blog .blog-filters__types > .filter-pill {
	border-color: var(--dp-accent-bg);
	background: var(--dp-accent-bg);
	color: var(--dp-accent-ink);
}

.post-nav .wp-block-post-navigation-link:not(:has(a)) {
	display: none;
}

/* ==========================================================================
   About page
   ========================================================================== */

.terminal-panel.terminal-panel--wide {
	max-width: 440px;
}

.terminal-panel--wide .terminal-panel__row p:first-child {
	flex-basis: 9ch;
}

.bio {
	gap: 24px 40px;
}

.wp-block-group.bio {
	align-items: flex-start;
}

.bio__title {
	flex: 1 1 240px;
	gap: 6px;
}

.bio__title h2 {
	margin: 0;
	text-wrap: balance;
}

.bio__text {
	flex: 3 1 480px;
	min-width: 0;
	max-width: 720px;
	gap: 18px;
	font-size: 1.125rem;
	line-height: 1.7;
}

.bio__text p {
	margin: 0;
	text-wrap: pretty;
}

.commit-log {
	gap: 0;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.commit-row {
	gap: 16px;
	padding: 16px 20px;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.wp-block-group.commit-row {
	align-items: flex-start;
}

.commit-row__meta {
	gap: 4px;
	flex: 0 0 96px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
}

.commit-row__meta p,
.commit-row__body p,
.commit-row__body h3 {
	margin: 0;
}

.commit-row__hash {
	color: var(--wp--preset--color--accent);
}

.commit-row__date {
	font-weight: 700;
	color: var(--wp--preset--color--foreground);
}

.commit-row__body {
	gap: 4px;
	flex: 1;
	min-width: 0;
}

.commit-row__body h3 {
	font-size: var(--wp--preset--font-size--md);
	line-height: 1.4;
}

.commit-row__body p {
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.55;
	text-wrap: pretty;
}

.commit-log__head {
	margin: 0;
	padding: 14px 20px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.commit-log__head::after {
	content: "";
	display: inline-block;
	width: 7px;
	height: 13px;
	margin-left: 8px;
	background: var(--wp--preset--color--primary);
	vertical-align: -2px;
	animation: dp-blink 1s steps(1) infinite;
}

.place-card {
	gap: 12px;
	padding: 22px;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.wp-block-group.place-card {
	align-items: stretch;
}

.place-card h3,
.place-card p {
	margin: 0;
}

.place-card__label {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--primary);
}

.place-card__text {
	flex: 1;
	line-height: 1.55;
	text-wrap: pretty;
}

.place-card__link {
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--sm);
}

.place-card__list {
	flex: 1;
	margin: 0;
	padding: 0;
	list-style: none;
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.5;
	color: var(--wp--preset--color--text);
}

.place-card__list li + li {
	margin-top: 10px;
}

.talk-list {
	gap: 0;
	border: 1px solid var(--wp--preset--color--border);
	border-radius: 4px;
	background: var(--wp--preset--color--surface);
}

.talk-row {
	position: relative;
	gap: 16px;
	padding: 16px 20px;
	border-bottom: 1px solid var(--wp--preset--color--line);
}

.wp-block-group.talk-row {
	align-items: flex-start;
}

.talk-row:last-child {
	border-bottom: 0;
}

.talk-row:hover,
.talk-row:focus-within {
	background: var(--wp--preset--color--surface-hover);
}

.talk-row p {
	margin: 0;
}

.talk-row__event {
	flex: 0 0 200px;
	padding-top: 3px;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	color: var(--wp--preset--color--muted);
}

.talk-row__title {
	flex: 1;
	min-width: 0;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--base);
	line-height: 1.4;
}

.talk-row__title a {
	color: var(--wp--preset--color--foreground);
	text-decoration: none;
}

.talk-row__title a::after {
	content: "";
	position: absolute;
	inset: 0;
}

.talk-list__note {
	margin: 0;
	line-height: 1.55;
}

.cta-panel__links {
	margin: 0;
	font-family: var(--dp-mono);
	font-size: var(--wp--preset--font-size--xs);
	text-align: center;
	word-spacing: 16px;
}

@media (max-width: 600px) {
	.talk-row.talk-row,
	.wp-block-group.talk-row {
		flex-wrap: wrap;
	}

	.talk-row__event {
		flex-basis: 100%;
	}
}

/* ==========================================================================
   Review stats block (server-rendered, no block layout classes)
   ========================================================================== */

.review-stats {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.review-stats .section-head {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
}

.review-stats .section-head__text {
	display: flex;
	flex-direction: column;
	align-items: stretch;
}

.review-stats .section-head__title {
	font-size: var(--wp--preset--font-size--subhead);
}

.review-stats .metrics-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(18.75rem, 100%), 1fr));
}

.review-stats .metric-card {
	display: flex;
	flex-direction: column;
}

.review-stats .metric-card__top,
.review-stats .metric-card__body {
	display: flex;
	justify-content: space-between;
}

.review-stats .metric-card__body {
	align-items: flex-end;
}

.review-stats .metric-card__figures {
	display: flex;
	flex-direction: column;
}

.review-stats .metric-card__bars {
	display: flex;
	align-items: flex-end;
}

.review-stats .metric-note {
	display: flex;
	flex-direction: column;
	justify-content: space-between;
}

.review-stats .metric-note p {
	margin: 0;
}
