/*
 * ArneIron — blocks.css (ported from arneiron-base Lane C, P0b).
 * -----------------------------------------------------------------------------
 * 28 block-style variations (is-style-*) registered by inc/block-styles.php.
 * Token-referenced only — every value is a CSS custom property from theme.json.
 * Spacing slugs remapped from arneiron-base's 10-80 scale to arneiron's 0-10
 * scale during the P0 consolidation (issue ArneIron-net/hub#1230).
 *
 * Enqueued on the front (functions.php) AND in the editor iframe via
 * add_editor_style, so editor == front.
 *
 * Hex-grep gate:
 *   ! grep -nE '#[0-9a-fA-F]{3,8}' blocks.css | grep -v '/*'
 * -----------------------------------------------------------------------------
 */

/* `on-surface` is RETIRED from component CSS — use the --c-ink alias.

   It is a real slug in theme.json (#14181f, identical to `contrast` there), and
   that is exactly the trap: a style VARIATION that repaints the theme dark
   overrides `contrast` and leaves `on-surface` at the light literal, because
   nothing forces a variation to enumerate every slug. The result is ink the
   colour of the light theme printed on a dark panel — measured on
   dev.arneiron.net, the my-account navigation at rgb(20,24,31) on rgb(16,6,8),
   a contrast ratio of 1.12:1.

   The alias layer exists to stop precisely this (§1): a component that resolves
   through `--c-ink` follows whatever the active variation says `contrast` is,
   and cannot be left behind by a variation that did not think about it. */
/* =========================================================================
 * 0. Shared primitives
 * ========================================================================= */

:root {
	--arne-ease: cubic-bezier(0.2, 0, 0, 1);
	--arne-dur: 160ms;
}

/* A reusable "surface card" recipe used by many block styles. */
:where(.arne-surface) {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--lg);
}

/* =========================================================================
 * 1. Text blocks
 * ========================================================================= */

/* Paragraph: comfortable measure for body copy inside content. */
.entry-content > .wp-block-paragraph,
.is-measured .wp-block-paragraph {
	max-width: var(--wp--custom--type--measure);
}
.wp-block-paragraph.has-drop-cap:first-letter {
	font-family: var(--wp--preset--font-family--display);
	font-weight: 700;
	line-height: 0.8;
	color: var(--wp--preset--color--contrast);
}

/* Lists */
.wp-block-list {
	padding-inline-start: var(--wp--preset--spacing--6);
}
.wp-block-list li {
	margin-block: var(--wp--preset--spacing--1);
}
/* list style variations */
.wp-block-list.is-style-none {
	list-style: none;
	padding-inline-start: 0;
}
.wp-block-list.is-style-inline {
	list-style: none;
	padding-inline-start: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--2) var(--wp--preset--spacing--5);
}
.wp-block-list.is-style-check,
.wp-block-list.is-style-arrow,
.wp-block-list.is-style-dash {
	list-style: none;
	padding-inline-start: 0;
}
.wp-block-list.is-style-check > li,
.wp-block-list.is-style-arrow > li,
.wp-block-list.is-style-dash > li {
	position: relative;
	padding-inline-start: var(--wp--preset--spacing--5);
}
.wp-block-list.is-style-check > li::before {
	content: "\2713"; /* check mark */
	position: absolute;
	inset-inline-start: 0;
	color: var(--wp--preset--color--contrast);
	font-weight: 700;
}
.wp-block-list.is-style-arrow > li::before {
	content: "\2192"; /* rightwards arrow */
	position: absolute;
	inset-inline-start: 0;
	color: var(--wp--preset--color--accent);
}
.wp-block-list.is-style-dash > li::before {
	content: "\2014"; /* em dash */
	position: absolute;
	inset-inline-start: 0;
	color: var(--wp--preset--color--subtle);
}

/* Quote (base look also declared in theme.json; here: variations) */
.wp-block-quote {
	font-size: var(--wp--preset--font-size--md);
	color: var(--c-ink);
}
.wp-block-quote cite {
	display: block;
	margin-block-start: var(--wp--preset--spacing--2);
}
.wp-block-quote.is-style-plain {
	border: 0;
	padding-inline-start: 0;
	font-style: italic;
}
.wp-block-quote.is-style-bordered {
	border-inline-start: 3px solid var(--wp--preset--color--border-strong);
	padding-inline-start: var(--wp--preset--spacing--5);
}
.wp-block-quote.is-style-card {
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--lg);
	background-color: var(--wp--preset--color--surface);
	padding: var(--wp--preset--spacing--6);
	box-shadow: var(--wp--preset--shadow--sm);
}

/* Pullquote */
.wp-block-pullquote {
	padding-block: var(--wp--preset--spacing--6);
	text-align: center;
}
.wp-block-pullquote.is-style-plain {
	border: 0;
}
.wp-block-pullquote.is-style-bracketed blockquote::before {
	content: "\201C"; /* left double quote */
	display: block;
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--3xl);
	line-height: 1;
	color: var(--wp--preset--color--border-strong);
}
.wp-block-pullquote.is-style-large blockquote {
	font-size: var(--wp--preset--font-size--2xl);
	line-height: var(--wp--custom--type--line-height--tight);
}

/* Code / preformatted / verse — mono on a sunken surface, scrollable */
.wp-block-code,
.wp-block-preformatted,
.wp-block-verse {
	font-family: var(--wp--preset--font-family--mono);
	background-color: var(--wp--preset--color--surface-3);
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--sm);
	padding: var(--wp--preset--spacing--5);
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	font-size: var(--wp--preset--font-size--sm);
	line-height: var(--wp--custom--type--line-height--normal);
}
.wp-block-verse {
	white-space: pre-wrap;
}
:not(pre) > code {
	font-family: var(--wp--preset--font-family--mono);
	background-color: var(--wp--preset--color--surface-3);
	padding: 0.1em 0.35em;
	border-radius: var(--wp--custom--radius--sm);
	font-size: 0.9em;
}

/* Details (native disclosure) */
.wp-block-details {
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	background-color: var(--wp--preset--color--surface);
	padding: var(--wp--preset--spacing--3) var(--wp--preset--spacing--5);
}
.wp-block-details summary {
	cursor: pointer;
	font-weight: 600;
	color: var(--wp--preset--color--contrast);
	list-style-position: inside;
}
.wp-block-details[open] summary {
	margin-block-end: var(--wp--preset--spacing--3);
	border-block-end: 1px solid var(--wp--preset--color--border);
	padding-block-end: var(--wp--preset--spacing--2);
}

/* Table — overflow wrapper + variations */
.wp-block-table {
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
}
.wp-block-table table {
	width: 100%;
	border-collapse: collapse;
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-table th,
.wp-block-table td {
	padding: var(--wp--preset--spacing--3) var(--wp--preset--spacing--5);
	text-align: start;
	border-block-end: 1px solid var(--wp--preset--color--border);
}
.wp-block-table thead th {
	background-color: var(--wp--preset--color--surface-2);
	color: var(--wp--preset--color--contrast);
	font-weight: 600;
	border-block-end: 2px solid var(--wp--preset--color--border-strong);
}
.wp-block-table tfoot td {
	background-color: var(--wp--preset--color--surface-2);
	font-weight: 600;
}
.wp-block-table figcaption {
	color: var(--wp--preset--color--subtle);
	font-size: var(--wp--preset--font-size--xs);
}
.wp-block-table.is-style-stripes tbody tr:nth-child(odd) {
	background-color: var(--wp--preset--color--surface-2);
}
.wp-block-table.is-style-stripes th,
.wp-block-table.is-style-stripes td {
	border-block-end: 0;
}
.wp-block-table.is-style-bordered table,
.wp-block-table.is-style-bordered th,
.wp-block-table.is-style-bordered td {
	border: 1px solid var(--wp--preset--color--border);
}
.wp-block-table.is-style-compact th,
.wp-block-table.is-style-compact td {
	padding: var(--wp--preset--spacing--2) var(--wp--preset--spacing--3);
}
.wp-block-table.is-style-plain th,
.wp-block-table.is-style-plain td {
	border: 0;
}
.wp-block-table.is-style-plain thead th {
	background-color: transparent;
}

/* Footnotes + Table of Contents */
.wp-block-footnotes {
	font-size: var(--wp--preset--font-size--sm);
	color: var(--wp--preset--color--subtle);
	border-block-start: 1px solid var(--wp--preset--color--border);
	padding-block-start: var(--wp--preset--spacing--3);
}
.wp-block-table-of-contents {
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	background-color: var(--wp--preset--color--surface-2);
	padding: var(--wp--preset--spacing--5);
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-table-of-contents a {
	text-decoration: none;
}
.wp-block-table-of-contents a:hover {
	text-decoration: underline;
}

/* =========================================================================
 * 2. Media blocks
 * ========================================================================= */

.wp-block-image img {
	border-radius: var(--wp--custom--radius--md);
	height: auto;
}
.wp-block-image figcaption,
.wp-block-audio figcaption,
.wp-block-video figcaption,
.wp-block-gallery figcaption,
.wp-block-embed figcaption {
	color: var(--wp--preset--color--subtle);
	font-size: var(--wp--preset--font-size--sm);
	text-align: center;
	margin-block-start: var(--wp--preset--spacing--2);
}
/* image style variations */
.wp-block-image.is-style-frame img {
	border: 1px solid var(--wp--preset--color--border);
	padding: var(--wp--preset--spacing--2);
	background-color: var(--wp--preset--color--surface);
	border-radius: var(--wp--custom--radius--sm);
}
.wp-block-image.is-style-rounded img {
	border-radius: var(--wp--custom--radius--lg);
}
.wp-block-image.is-style-circle img {
	border-radius: var(--wp--custom--radius--pill);
	aspect-ratio: 1;
	object-fit: cover;
}
.wp-block-image.is-style-polaroid {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	padding: var(--wp--preset--spacing--3) var(--wp--preset--spacing--3) var(--wp--preset--spacing--6);
	box-shadow: var(--wp--preset--shadow--md);
	border-radius: var(--wp--custom--radius--sm);
	width: fit-content;
}
.wp-block-image.is-style-polaroid img {
	border-radius: 0;
}
.wp-block-image.is-style-duotone-gray img {
	filter: grayscale(1) contrast(1.05);
}

/* Gallery */
.wp-block-gallery {
	gap: var(--wp--preset--spacing--3);
}
.wp-block-gallery.is-style-masonry {
	display: block;
	columns: 3 16rem;
	column-gap: var(--wp--preset--spacing--3);
}
.wp-block-gallery.is-style-masonry .wp-block-image {
	break-inside: avoid;
	margin-block-end: var(--wp--preset--spacing--3);
}

/* Audio / video / file */
.wp-block-audio audio {
	width: 100%;
}
.wp-block-video video {
	width: 100%;
	border-radius: var(--wp--custom--radius--md);
}
.wp-block-file {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--3);
	background-color: var(--wp--preset--color--surface-2);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	padding: var(--wp--preset--spacing--3) var(--wp--preset--spacing--5);
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-file .wp-block-file__button {
	background-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent-contrast);
	border-radius: var(--wp--custom--radius--md);
	padding: 0.5em 1em;
}

/* Cover */
.wp-block-cover {
	border-radius: var(--wp--custom--radius--lg);
	overflow: hidden;
	min-height: 320px;
	padding: var(--wp--preset--spacing--7);
}
.wp-block-cover .wp-block-cover__background {
	background-color: var(--wp--preset--color--contrast-2);
}
.wp-block-cover.is-style-text-card .wp-block-cover__inner-container {
	background-color: var(--wp--preset--color--surface);
	color: var(--c-ink);
	border-radius: var(--wp--custom--radius--md);
	padding: var(--wp--preset--spacing--6);
	max-width: 30rem;
	box-shadow: var(--wp--preset--shadow--lg);
}

/* Media & text */
.wp-block-media-text {
	gap: var(--wp--preset--spacing--6);
}
.wp-block-media-text .wp-block-media-text__content {
	padding-inline: var(--wp--preset--spacing--5);
}

/* Embeds keep aspect ratio (responsive-embeds support handles most) */
.wp-block-embed__wrapper {
	border-radius: var(--wp--custom--radius--md);
	overflow: hidden;
}

/* =========================================================================
 * 3. Design blocks
 * ========================================================================= */

/* Group style variations (card / panel / bordered / well / plain) */
.wp-block-group.is-style-card {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--lg);
	box-shadow: var(--wp--preset--shadow--sm);
	padding: var(--wp--preset--spacing--6);
}
.wp-block-group.is-style-panel {
	background-color: var(--wp--preset--color--surface-2);
	border-radius: var(--wp--custom--radius--md);
	padding: var(--wp--preset--spacing--6);
}
.wp-block-group.is-style-bordered {
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	padding: var(--wp--preset--spacing--6);
}
.wp-block-group.is-style-well {
	background-color: var(--wp--preset--color--surface-3);
	border-radius: var(--wp--custom--radius--md);
	box-shadow: var(--wp--preset--shadow--inset);
	padding: var(--wp--preset--spacing--6);
}
.wp-block-group.is-style-plain {
	background-color: transparent;
	border: 0;
	box-shadow: none;
}

/* Columns: stack on mobile (WP class), + card/divided variations */
@media (max-width: 781px) {
	.wp-block-columns.is-not-stacked-on-mobile {
		flex-wrap: wrap;
	}
}
.wp-block-columns.is-style-cards > .wp-block-column {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--lg);
	box-shadow: var(--wp--preset--shadow--sm);
	padding: var(--wp--preset--spacing--6);
}
.wp-block-columns.is-style-divided > .wp-block-column + .wp-block-column {
	border-inline-start: 1px solid var(--wp--preset--color--border);
	padding-inline-start: var(--wp--preset--spacing--6);
}
@media (max-width: 781px) {
	.wp-block-columns.is-style-divided > .wp-block-column + .wp-block-column {
		border-inline-start: 0;
		border-block-start: 1px solid var(--wp--preset--color--border);
		padding-inline-start: 0;
		padding-block-start: var(--wp--preset--spacing--6);
	}
}

/* Buttons */
.wp-block-button__link {
	transition: background-color var(--arne-dur) var(--arne-ease),
		color var(--arne-dur) var(--arne-ease),
		box-shadow var(--arne-dur) var(--arne-ease);
}
.wp-block-button.is-style-outline .wp-block-button__link {
	background-color: transparent;
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--border-strong);
}
.wp-block-button.is-style-outline .wp-block-button__link:hover,
.wp-block-button.is-style-outline .wp-block-button__link:focus {
	background-color: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--accent-contrast);
	border-color: var(--wp--preset--color--contrast);
}
.wp-block-button.is-style-ghost .wp-block-button__link {
	background-color: transparent;
	color: var(--wp--preset--color--contrast);
	border: 1px solid transparent;
}
.wp-block-button.is-style-ghost .wp-block-button__link:hover,
.wp-block-button.is-style-ghost .wp-block-button__link:focus {
	background-color: var(--wp--preset--color--surface-3);
}
.wp-block-button.is-style-link .wp-block-button__link {
	background-color: transparent;
	color: var(--wp--custom--color--link);
	padding-inline: 0;
	border-radius: 0;
	text-decoration: underline;
}
.wp-block-button.is-style-pill .wp-block-button__link {
	border-radius: var(--wp--custom--radius--pill);
}
.wp-block-button.is-style-block {
	width: 100%;
}
.wp-block-button.is-style-block .wp-block-button__link {
	width: 100%;
	text-align: center;
}
.wp-block-button.is-style-icon .wp-block-button__link {
	padding: 0.6em;
	aspect-ratio: 1;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--wp--custom--radius--pill);
}

/* Separator variations */
.wp-block-separator {
	border: 0;
	border-block-start: 1px solid var(--wp--preset--color--border);
	opacity: 1;
}
.wp-block-separator.is-style-hairline {
	border: 0;
	height: 1px;
	background-image: var(--wp--preset--gradient--hairline);
}
.wp-block-separator.is-style-wide {
	border-block-start-width: 2px;
	max-width: none;
	width: 100%;
}
.wp-block-separator.is-style-short-center {
	border-block-start: 2px solid var(--wp--preset--color--border-strong);
	width: var(--wp--preset--spacing--8);
	margin-inline: auto;
}
.wp-block-separator.is-style-dots {
	border: 0;
	text-align: center;
	line-height: 1;
}
.wp-block-separator.is-style-dots::before {
	content: "\00B7 \00B7 \00B7"; /* middle dots */
	color: var(--wp--preset--color--border-strong);
	font-size: var(--wp--preset--font-size--xl);
	letter-spacing: 0.5em;
	padding-inline-start: 0.5em;
}

/* Heading label variations */
.wp-block-heading.is-style-overline,
.wp-block-heading.is-style-eyebrow,
.wp-block-heading.is-style-kicker {
	font-family: var(--wp--preset--font-family--mono);
	font-size: var(--wp--preset--font-size--xs);
	font-weight: 600;
	letter-spacing: var(--wp--custom--type--tracking--wide);
	text-transform: uppercase;
	color: var(--wp--preset--color--subtle);
}
.wp-block-heading.is-style-overline {
	border-block-start: 2px solid var(--wp--preset--color--border-strong);
	padding-block-start: var(--wp--preset--spacing--2);
	display: inline-block;
}
.wp-block-heading.is-style-eyebrow {
	color: var(--wp--preset--color--accent);
}

/* =========================================================================
 * 4. Widget blocks
 * ========================================================================= */

.wp-block-archives,
.wp-block-categories,
.wp-block-page-list,
.wp-block-latest-posts,
.wp-block-rss {
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-archives li,
.wp-block-categories li,
.wp-block-latest-posts li,
.wp-block-rss li {
	margin-block: var(--wp--preset--spacing--1);
}
.wp-block-latest-posts.is-grid,
.wp-block-latest-posts__list.is-grid {
	gap: var(--wp--preset--spacing--5);
}
.wp-block-latest-posts .wp-block-latest-posts__post-date,
.wp-block-latest-comments article {
	color: var(--wp--preset--color--subtle);
	font-size: var(--wp--preset--font-size--xs);
}
.wp-block-latest-posts.is-style-cards li {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	padding: var(--wp--preset--spacing--5);
}
.wp-block-latest-posts.is-style-minimal .wp-block-latest-posts__post-excerpt,
.wp-block-latest-posts.is-style-minimal .wp-block-latest-posts__featured-image {
	display: none;
}

/* Calendar */
.wp-block-calendar table {
	width: 100%;
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-calendar th {
	background-color: var(--wp--preset--color--surface-2);
	padding: var(--wp--preset--spacing--2);
}
.wp-block-calendar td {
	padding: var(--wp--preset--spacing--2);
	border: 1px solid var(--wp--preset--color--border);
	text-align: center;
}
.wp-block-calendar tfoot a {
	color: var(--wp--custom--color--link);
}

/* Search — token-styled input + button, both positions */
.wp-block-search__input {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	padding: 0.6em 0.9em;
	color: var(--c-ink);
	font-size: var(--wp--preset--font-size--base);
}
.wp-block-search__button {
	background-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent-contrast);
	border: 0;
	border-radius: var(--wp--custom--radius--md);
	padding: 0.6em 1em;
}
.wp-block-search.wp-block-search__button-inside .wp-block-search__inside-wrapper {
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	background-color: var(--wp--preset--color--surface);
	padding: 3px;
}
.wp-block-search.wp-block-search__button-inside .wp-block-search__input {
	border: 0;
	background: transparent;
}

/* Tag cloud */
.wp-block-tag-cloud a {
	display: inline-block;
	background-color: var(--wp--preset--color--surface-2);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--pill);
	padding: 0.2em 0.7em;
	margin: 0.15em;
	color: var(--wp--preset--color--subtle);
	text-decoration: none;
	font-size: var(--wp--preset--font-size--xs) !important;
}
.wp-block-tag-cloud a:hover {
	border-color: var(--wp--preset--color--border-strong);
	color: var(--wp--preset--color--contrast);
}

/* Social links — icon color from tokens + variations */
.wp-block-social-links {
	gap: var(--wp--preset--spacing--2);
}
.wp-block-social-links:not(.is-style-logos-only) .wp-social-link {
	background-color: var(--wp--preset--color--surface-2);
	color: var(--wp--preset--color--contrast);
}
.wp-block-social-links.is-style-outline .wp-social-link {
	background-color: transparent;
	border: 1px solid var(--wp--preset--color--border-strong);
	color: var(--wp--preset--color--contrast);
}
.wp-block-social-links.is-style-filled .wp-social-link {
	background-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent-contrast);
}
.wp-block-social-links.is-style-plain .wp-social-link {
	background-color: transparent;
	color: var(--wp--preset--color--subtle);
}
.wp-block-social-links.is-style-pill {
	background-color: var(--wp--preset--color--surface-2);
	border-radius: var(--wp--custom--radius--pill);
	padding: var(--wp--preset--spacing--2) var(--wp--preset--spacing--3);
	width: fit-content;
}

/* RSS */
.wp-block-rss__item-title a {
	font-weight: 600;
	text-decoration: none;
}
.wp-block-rss__item-publish-date,
.wp-block-rss__item-author {
	color: var(--wp--preset--color--subtle);
	font-size: var(--wp--preset--font-size--xs);
}

/* Custom HTML / shortcode fall back to inherited type; keep them readable */
.wp-block-html,
.wp-block-shortcode {
	font-size: var(--wp--preset--font-size--base);
}

/* =========================================================================
 * 5. Theme / query blocks
 * ========================================================================= */

.wp-block-site-title a {
	text-decoration: none;
	color: var(--wp--preset--color--contrast);
}
.wp-block-site-tagline {
	color: var(--wp--preset--color--subtle);
	font-size: var(--wp--preset--font-size--sm);
}

/* Query pagination */
.wp-block-query-pagination {
	gap: var(--wp--preset--spacing--3);
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-query-pagination .wp-block-query-pagination-numbers .page-numbers {
	padding: 0.2em 0.6em;
	border-radius: var(--wp--custom--radius--sm);
	text-decoration: none;
}
.wp-block-query-pagination .page-numbers.current {
	background-color: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--accent-contrast);
}
.wp-block-query-pagination-previous,
.wp-block-query-pagination-next,
.wp-block-comments-pagination-previous,
.wp-block-comments-pagination-next {
	text-decoration: none;
	color: var(--wp--custom--color--link);
}

/* Query style variations */
.wp-block-post-template.is-style-list-divided > li + li {
	border-block-start: 1px solid var(--wp--preset--color--border);
	padding-block-start: var(--wp--preset--spacing--6);
	margin-block-start: var(--wp--preset--spacing--6);
}
.wp-block-post-template.is-style-cards > li {
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--lg);
	box-shadow: var(--wp--preset--shadow--sm);
	padding: var(--wp--preset--spacing--5);
}
.wp-block-post-template.is-style-minimal .wp-block-post-excerpt,
.wp-block-post-template.is-style-minimal .wp-block-post-featured-image {
	display: none;
}

/* Post pieces */
.wp-block-post-title a {
	text-decoration: none;
	color: inherit;
}
.wp-block-post-title a:hover {
	text-decoration: underline;
}
.wp-block-post-excerpt__excerpt {
	color: var(--wp--preset--color--subtle);
}
.wp-block-post-excerpt__more-text a,
.wp-block-read-more {
	font-size: var(--wp--preset--font-size--sm);
	font-weight: 600;
	text-decoration: none;
}
.wp-block-post-date,
.wp-block-post-author,
.wp-block-post-author-name {
	color: var(--wp--preset--color--subtle);
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-post-terms a {
	text-decoration: none;
	color: var(--wp--preset--color--accent);
}
.wp-block-post-terms a:hover {
	text-decoration: underline;
}
.wp-block-avatar img {
	border-radius: var(--wp--custom--radius--pill);
}
.wp-block-term-description {
	color: var(--wp--preset--color--subtle);
}
.wp-block-loginout a {
	text-decoration: none;
}

/* Featured image variations */
.wp-block-post-featured-image.is-style-rounded img {
	border-radius: var(--wp--custom--radius--lg);
}
.wp-block-post-featured-image.is-style-frame img {
	border: 1px solid var(--wp--preset--color--border);
	padding: var(--wp--preset--spacing--2);
	background-color: var(--wp--preset--color--surface);
}
.wp-block-post-featured-image.is-style-wide-bleed {
	border-radius: 0;
}
.wp-block-post-featured-image.is-style-wide-bleed img {
	border-radius: 0;
}

/* Post navigation link */
.wp-block-post-navigation-link {
	font-size: var(--wp--preset--font-size--sm);
}
.wp-block-post-navigation-link a {
	text-decoration: none;
	color: var(--wp--custom--color--link);
}

/* Comments */
.wp-block-comments {
	margin-block-start: var(--wp--preset--spacing--8);
}
.wp-block-comment-author-name a {
	text-decoration: none;
	color: var(--wp--preset--color--contrast);
}
.wp-block-comment-content {
	color: var(--c-ink);
}
.wp-block-comment-date a,
.wp-block-comment-edit-link,
.wp-block-comment-reply-link a {
	color: var(--wp--preset--color--subtle);
	text-decoration: none;
	font-size: var(--wp--preset--font-size--xs);
}
.wp-block-post-comments-form input[type="text"],
.wp-block-post-comments-form input[type="email"],
.wp-block-post-comments-form input[type="url"],
.wp-block-post-comments-form textarea {
	width: 100%;
	background-color: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--border);
	border-radius: var(--wp--custom--radius--md);
	padding: 0.6em 0.9em;
	color: var(--c-ink);
}
.wp-block-post-comments-form .submit {
	background-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent-contrast);
	border: 0;
	border-radius: var(--wp--custom--radius--md);
	padding: 0.6em 1.2em;
	cursor: pointer;
}

/* Navigation block style variations (chrome owned by Lane B; C only registers
 * the desktop link treatments so they coexist). */
.wp-block-navigation.is-style-underline .wp-block-navigation-item__content {
	text-decoration: none;
	border-block-end: 2px solid transparent;
}
.wp-block-navigation.is-style-underline .wp-block-navigation-item__content:hover {
	border-block-end-color: var(--wp--preset--color--contrast);
}
.wp-block-navigation.is-style-pill .wp-block-navigation-item__content {
	padding: 0.25em 0.8em;
	border-radius: var(--wp--custom--radius--pill);
}
.wp-block-navigation.is-style-pill .current-menu-item .wp-block-navigation-item__content {
	background-color: var(--wp--preset--color--surface-3);
}
.wp-block-navigation.is-style-plain .wp-block-navigation-item__content {
	text-decoration: none;
}

/* =========================================================================
 * 6. Notice / callout group styles (achromatic tonal grays)
 * ========================================================================= */

.wp-block-group.is-style-notice-info,
.wp-block-group.is-style-notice-note,
.wp-block-group.is-style-notice-warning,
.wp-block-group.is-style-notice-tip {
	border-radius: var(--wp--custom--radius--md);
	padding: var(--wp--preset--spacing--5);
	border-inline-start: 4px solid var(--wp--preset--color--border-strong);
	background-color: var(--wp--preset--color--surface-2);
}
.wp-block-group.is-style-notice-info {
	border-inline-start-color: var(--wp--preset--color--subtle);
}
.wp-block-group.is-style-notice-note {
	border-inline-start-color: var(--wp--preset--color--muted);
	background-color: var(--wp--preset--color--surface-3);
}
.wp-block-group.is-style-notice-warning {
	border-inline-start-color: var(--wp--preset--color--contrast);
	background-color: var(--wp--preset--color--surface-2);
}
.wp-block-group.is-style-notice-tip {
	border-inline-start-color: var(--wp--preset--color--accent);
}

/* =========================================================================
 * 7. Responsive safety — no horizontal scroll, sensible stacking
 * ========================================================================= */

/*
 * hub#1687 — the no-horizontal-scroll safety net must not defeat WordPress's
 * own layout. `.wp-block-columns { max-width: 100% }` is specificity (0,1,0) and
 * beat core's `:where(.is-layout-constrained) > *` (0,0,0), so every columns
 * block inside a constrained group lost its content-size cap and its auto
 * margins and bled to the group's full inner width — measured on a live
 * tenant's front page, where a columns row jumped from x=183 to x=36 while its
 * own section heading stayed put. In the `arneiron-ds` layer this rule still applies
 * wherever WordPress says nothing, and always yields where WordPress does.
 */
@layer arneiron-ds {
	.wp-block-media-text,
	.wp-block-columns {
		max-width: 100%;
	}
}
@media (max-width: 599px) {
	.wp-block-media-text {
		grid-template-columns: 1fr !important;
	}
	.wp-block-media-text .wp-block-media-text__content {
		padding-inline: 0;
		padding-block: var(--wp--preset--spacing--5);
	}
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
	.wp-block-button__link {
		transition: none;
	}
}

/* --------------------------------------------------------------------------
 * ArneIron block retirement (hub#3614 item 3)
 *
 * arneiron/title, arneiron/button and arneiron/section duplicated core
 * Heading, Buttons and Row/Group. Their settings move here so the capability
 * survives the blocks being deleted.
 *
 * ONLY the settings core has no equivalent for are reproduced. Alignment, font
 * size, colour, spacing, layout width, background and border radius are core
 * controls already and are deliberately NOT duplicated — duplicating them is
 * how the two block sets diverged in the first place.
 *
 * Ported from blocks/build/{title,button,section}/style-index.css, which are
 * enqueued per-block and therefore disappear with those blocks.
 * -------------------------------------------------------------------------- */

/* core/heading — the ArneIron section-title treatment. */
.wp-block-heading.is-style-arneiron-title,
.wp-block-heading.is-style-arneiron-title-decor {
	color: var(--arneiron-title-color);
	font-family: var(--arneiron-title-font);
	font-size: var(--arneiron-title-size);
	font-style: var(--arneiron-title-style);
	font-weight: var(--arneiron-title-weight);
	line-height: 1.3;
	position: relative;
}

/* show_decor: the old block emitted a .sep-element span. A core heading has no
   inner markup, so the same mark is drawn with ::after — no extra element and
   nothing for an author to delete by accident. */
.wp-block-heading.is-style-arneiron-title-decor::after {
	background: var(--arneiron-button-color, currentColor);
	content: "";
	display: block;
	height: 2px;
	margin-top: .5em;
	width: 40px;
}
.wp-block-heading.is-style-arneiron-title-decor.has-text-align-center::after { margin-inline: auto; }
.wp-block-heading.is-style-arneiron-title-decor.has-text-align-right::after  { margin-inline-start: auto; }

/* no_wrap */
.wp-block-heading.is-style-arneiron-nowrap { white-space: nowrap; }

/* core/button — shadow settings. The custom properties are the same ones the
   old block set inline, so an author can still drive them from theme.json or a
   custom style without this stylesheet knowing the values. */
.wp-block-button.is-style-arneiron-shadow .wp-block-button__link {
	box-shadow: var(--arneiron-button-shadow, 0 6px 18px rgba(0, 0, 0, .18));
}
.wp-block-button.is-style-arneiron-shadow-lift .wp-block-button__link {
	background-color: var(--arneiron-button-shadow-bg, transparent);
	box-shadow: var(--arneiron-button-shadow, 0 6px 18px rgba(0, 0, 0, .18));
	transition: box-shadow var(--arneiron-button-shadow-transition, .35s),
	            transform var(--arneiron-button-shadow-transition, .35s);
}
.wp-block-button.is-style-arneiron-shadow-lift .wp-block-button__link:hover {
	transform: translateY(-2px);
}

/* core/group — the four ArneIron Section settings core has no control for.
   These are driven by REAL Inspector controls (assets/js/editor-group-settings.js),
   not by style presets, so they compose with the core Background / Shadow /
   Dimensions panels instead of competing with them. */
.wp-block-group.arneiron-shape-rounded { border-radius: var(--arneiron-radius-l, 12px); }
.wp-block-group.arneiron-shape-pill    { border-radius: 999px; }
.wp-block-group.arneiron-row-overflow  { overflow: visible; }
.wp-block-group.arneiron-section-equal-height { align-items: stretch; display: flex; }
.wp-block-group.arneiron-section-equal-height > * { display: flex; flex-direction: column; }

/* =========================================================================
   ArneIron block consolidation — hub#3614 items 2b + 2c
   =========================================================================
   arneiron/testimonials and arneiron/pricing-packages were retired. Their
   markup and their attributes moved onto arneiron/testimonial and
   arneiron/price-table, where each is reachable as a block STYLE VARIATION
   registered in inc/block-styles.php. Their stylesheets move here, rescoped
   from the deleted block's wrapper class onto the survivor's wrapper + the
   is-style-* class.

   Nothing here is new design. Every declaration is the retired block's own,
   copied value-for-value. What CHANGED is selectors, and only for reasons
   stated at each site.
   ========================================================================= */

/* --- 2b: arneiron/testimonial, is-style-quote-card ------------------------
   The retired arneiron/testimonials card look, applied to arneiron/testimonial.

   CSS ONLY, and that is a constraint not a preference. arneiron/testimonial is
   STATIC-SAVED: its compiled save() writes real markup into post_content (dev
   stores it paired, 11 closing delimiters, 0 self-closing), so a style variation
   cannot introduce the retired block's <figure> markup without desynchronising
   render.php from save() and making every instance invalid in the editor. See
   the long note in blocks/build/testimonial/render.php.

   So these rules restyle the markup the block ACTUALLY emits:

     .news-card-people  >  .arneiron-overlay
                        +  .news-card-people__image  (avatar)
                        +  .arneiron-block-content   >  h5.arneiron-block-title
                                                        ( NAME <span>ROLE</span> )
                                                     +  p  ( the quote )
                                                     +  a.arneiron-socials*

   The retired card read quote-first, then avatar + author + role on one row.
   This markup is in the other order and nests the byline one level deeper, so
   the card is a grid and .arneiron-block-content is display:contents, which
   promotes its h5/p to grid items and lets both orders be expressed. Every
   colour, size, radius and shadow below is copied value-for-value from the
   retired blocks/build/testimonials/style.css; only the selectors are new. */

.wp-block-arneiron-testimonial.is-style-quote-card .news-card-people {
	display: grid;
	grid-template-columns: 44px 1fr;
	grid-template-areas:
		"quote  quote"
		"avatar byline"
		"social social";
	align-items: center;
	column-gap: var(--wp--preset--spacing--4, 12px);
	row-gap: var(--wp--preset--spacing--4, 12px);
	margin: 0;
	padding: var(--wp--preset--spacing--6, 24px);
	background: var(--c-bg, #fff);
	border: 1px solid var(--c-border, #d7dbe2);
	border-radius: var(--wp--custom--radius--lg, 12px);
	box-shadow: var(--wp--custom--shadow--sm, 0 1px 2px rgba(20,24,31,.06));
}

/* The overlay is a pix-theme-g hover wash. It has no stylesheet in this theme,
   so it is already inert; it is removed from the grid so it cannot claim a
   cell. */
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-overlay {
	display: none;
}

/* Lift h5 and p out of their wrapper so the grid can place them. */
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-block-content {
	display: contents;
}

/* The quote. */
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-block-content > p {
	grid-area: quote;
	margin: 0;
	font-family: var(--wp--preset--font-family--prose, Georgia, serif);
	font-size: var(--wp--preset--font-size--lg, 1.125rem);
	line-height: 1.6;
	color: var(--c-ink, #14181f);
	font-style: italic;
}

/* Avatar: a 44px circle, falling back to the empty circle when the block has
   no image (the div is emitted either way). */
.wp-block-arneiron-testimonial.is-style-quote-card .news-card-people__image {
	grid-area: avatar;
	flex: none;
	width: 44px;
	height: 44px;
	border-radius: var(--wp--custom--radius--pill, 999px);
	background: var(--c-surface-2, #eceef2);
	border: 1px solid var(--c-border, #d7dbe2);
	overflow: hidden;
}
.wp-block-arneiron-testimonial.is-style-quote-card .news-card-people__image img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* Byline. The h5 holds the author with the role in a nested <span>, so the two
   are stacked with the span on its own line. */
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-block-title {
	grid-area: byline;
	display: grid;
	gap: 2px;
	margin: 0;
	font-style: normal;
	font-weight: 700;
	color: var(--c-ink, #14181f);
	font-size: var(--wp--preset--font-size--base, 1rem);
	line-height: 1.3;
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-block-title span {
	font-weight: 400;
	color: var(--c-ink-3, #6b7280);
	font-size: var(--wp--preset--font-size--sm, 0.875rem);
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-block-title a {
	color: inherit;
	text-decoration: none;
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-block-title a:hover {
	text-decoration: underline;
}

/* Social links, when the block carries any. */
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-socials {
	grid-area: social;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	margin-inline-end: var(--wp--preset--spacing--2, 4px);
	border: 1px solid var(--c-border, #d7dbe2);
	border-radius: var(--wp--custom--radius--pill, 999px);
	color: var(--c-ink-2, #4b5462);
	text-decoration: none;
}

/* The block's OTHER layout (any `style` value that is not news-card-people)
   renders .arneiron-testimonial instead. It gets the same card surface and the
   same type scale, without the reordering — that markup already reads
   role, name, quote top to bottom. */
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial {
	display: grid;
	gap: var(--wp--preset--spacing--3, 8px);
	margin: 0;
	padding: var(--wp--preset--spacing--6, 24px);
	background: var(--c-bg, #fff);
	border: 1px solid var(--c-border, #d7dbe2);
	border-radius: var(--wp--custom--radius--lg, 12px);
	box-shadow: var(--wp--custom--shadow--sm, 0 1px 2px rgba(20,24,31,.06));
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial-img {
	width: 44px;
	height: 44px;
	border-radius: var(--wp--custom--radius--pill, 999px);
	background: var(--c-surface-2, #eceef2);
	border: 1px solid var(--c-border, #d7dbe2);
	overflow: hidden;
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial-img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial-job span,
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial-name {
	font-size: var(--wp--preset--font-size--sm, 0.875rem);
	color: var(--c-ink-3, #6b7280);
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial-name {
	font-weight: 700;
	font-size: var(--wp--preset--font-size--base, 1rem);
	color: var(--c-ink, #14181f);
}
.wp-block-arneiron-testimonial.is-style-quote-card .arneiron-testimonial-text > p {
	margin: 0;
	font-family: var(--wp--preset--font-family--prose, Georgia, serif);
	font-size: var(--wp--preset--font-size--lg, 1.125rem);
	line-height: 1.6;
	color: var(--c-ink, #14181f);
	font-style: italic;
}

/* The retired block's section heading, preserved for content migrated by
   tools/migrate-testimonials-pricing.php, which re-emits it as a core/heading
   carrying this class. Declarations copied verbatim. */
.arneiron-testimonials-heading {
	margin: 0 0 var(--wp--preset--spacing--7, 32px);
	color: var(--c-ink, #14181f);
	font-size: var(--wp--preset--font-size--2-xl, 1.75rem);
	font-weight: 700;
	line-height: 1.15;
}

/* --- 2c: arneiron/price-table, is-style-packages --------------------------
   Ported WHOLE from the retired blocks/build/pricing-packages/style.css.

   Unlike 2b nothing is dropped and no selector is restructured: the card grid
   IS this variation's layout, the <section> is still the block wrapper, and
   the cards are still its children — the same shape the rules were written
   for. render.php emits the retired block's markup verbatim, so the ONLY
   change below is the wrapper selector, 51 occurrences of
   `.wp-block-arneiron-pricing-packages` rewritten to
   `.wp-block-arneiron-price-table.is-style-packages`. Media queries included. */

.wp-block-arneiron-price-table.is-style-packages.pricing-packages {
	margin-block: var(--wp--custom--section--rhythm, 96px);
}

/* Section / catalog head. */
.wp-block-arneiron-price-table.is-style-packages .landing-section-head,
.wp-block-arneiron-price-table.is-style-packages .pricing-cat-head {
	display: flex;
	gap: var(--wp--preset--spacing--6, 24px);
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: space-between;
	margin-bottom: var(--wp--preset--spacing--7, 32px);
}
.wp-block-arneiron-price-table.is-style-packages .landing-section-head .stack,
.wp-block-arneiron-price-table.is-style-packages .pricing-cat-head .stack {
	display: grid;
	gap: var(--wp--preset--spacing--3, 8px);
	max-width: 60ch;
}
.wp-block-arneiron-price-table.is-style-packages .eyebrow {
	margin: 0;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-size: var(--wp--preset--font-size--xs, 0.75rem);
	color: var(--c-ink-3, #6b7280);
	font-weight: 600;
}
.wp-block-arneiron-price-table.is-style-packages .landing-section-heading {
	margin: 0;
	color: var(--c-ink, #14181f);
	font-size: var(--wp--preset--font-size--2-xl, 1.75rem);
	font-weight: 700;
	line-height: 1.15;
}
.wp-block-arneiron-price-table.is-style-packages .pricing-intro {
	margin: 0;
	color: var(--c-ink-2, #4b5462);
	line-height: 1.6;
}

/* Rate pill (top-right of head). */
.wp-block-arneiron-price-table.is-style-packages .value-pill {
	flex: none;
	display: inline-flex;
	flex-direction: column;
	padding: var(--wp--preset--spacing--3, 8px) var(--wp--preset--spacing--5, 16px);
	border: 1px solid var(--c-border, #d7dbe2);
	border-radius: var(--wp--custom--radius--md, 6px);
	background: var(--c-bg, #fff);
	box-shadow: var(--wp--custom--shadow--sm, 0 1px 2px rgba(20,24,31,.06));
}
.wp-block-arneiron-price-table.is-style-packages .value-pill .k {
	font-size: var(--wp--preset--font-size--xs, 0.75rem);
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--c-ink-3, #6b7280);
	font-weight: 600;
}
.wp-block-arneiron-price-table.is-style-packages .value-pill .v {
	font-weight: 700;
	color: var(--c-ink, #14181f);
}

/* Catalog filter chips. */
.wp-block-arneiron-price-table.is-style-packages .pricing-cat-filters {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--2, 4px);
	margin-bottom: var(--wp--preset--spacing--5, 16px);
}
.wp-block-arneiron-price-table.is-style-packages .chip {
	padding: var(--wp--preset--spacing--2, 4px) var(--wp--preset--spacing--4, 12px);
	border: 1px solid var(--c-border, #d7dbe2);
	border-radius: var(--wp--custom--radius--pill, 999px);
	font-size: var(--wp--preset--font-size--sm, 0.875rem);
	color: var(--c-ink-2, #4b5462);
	background: var(--c-bg, #fff);
}

/* Responsive grid. */
.wp-block-arneiron-price-table.is-style-packages .pricing-packages-grid {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: var(--wp--preset--spacing--5, 16px);
}
.wp-block-arneiron-price-table.is-style-packages .grid-2 { grid-template-columns: repeat(2, 1fr); }
.wp-block-arneiron-price-table.is-style-packages .grid-3 { grid-template-columns: repeat(3, 1fr); }
.wp-block-arneiron-price-table.is-style-packages .grid-4 { grid-template-columns: repeat(4, 1fr); }

/* Each pricing card. */
.wp-block-arneiron-price-table.is-style-packages .pricing {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--2, 4px);
	padding: var(--wp--preset--spacing--6, 24px);
	background: var(--c-bg, #fff);
	border: 1px solid var(--c-border, #d7dbe2);
	border-radius: var(--wp--custom--radius--lg, 12px);
	box-shadow: var(--wp--custom--shadow--sm, 0 1px 2px rgba(20,24,31,.06));
	margin: 0;
	transition: box-shadow .15s ease, transform .15s ease;
}
.wp-block-arneiron-price-table.is-style-packages .pricing:hover {
	box-shadow: var(--wp--custom--shadow--md, 0 4px 12px rgba(20,24,31,.08));
	transform: translateY(-2px);
}

/* MOST POPULAR ribbon + highlighted card. */
.wp-block-arneiron-price-table.is-style-packages .pricing.is-popular {
	border-color: var(--c-accent, #3f4654);
	border-width: 2px;
	box-shadow: var(--wp--custom--shadow--md, 0 4px 12px rgba(20,24,31,.08));
}
.wp-block-arneiron-price-table.is-style-packages .ribbon {
	position: absolute;
	top: -12px;
	left: 50%;
	transform: translateX(-50%);
	padding: var(--wp--preset--spacing--1, 2px) var(--wp--preset--spacing--4, 12px);
	background: var(--c-accent, #3f4654);
	color: var(--c-on-accent, #fff);
	border-radius: var(--wp--custom--radius--pill, 999px);
	font-size: var(--wp--preset--font-size--xs, 0.75rem);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	white-space: nowrap;
	box-shadow: var(--wp--custom--shadow--sm, 0 1px 2px rgba(20,24,31,.06));
}

/* Tier / tokens / price. */
.wp-block-arneiron-price-table.is-style-packages .tier {
	font-size: var(--wp--preset--font-size--sm, 0.875rem);
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--c-ink-3, #6b7280);
	font-weight: 700;
}
.wp-block-arneiron-price-table.is-style-packages .tokens {
	color: var(--c-ink-2, #4b5462);
	font-size: var(--wp--preset--font-size--base, 1rem);
}
.wp-block-arneiron-price-table.is-style-packages .price {
	color: var(--c-ink, #14181f);
	font-size: var(--wp--preset--font-size--2-xl, 1.75rem);
	font-weight: 800;
	line-height: 1.1;
	margin-top: var(--wp--preset--spacing--1, 2px);
}

/* Per-token effective-rate row + badge. */
.wp-block-arneiron-price-table.is-style-packages .pricing .eff {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--2, 4px);
	flex-wrap: wrap;
	margin: var(--wp--preset--spacing--1, 2px) 0 var(--wp--preset--spacing--3, 8px);
}
.wp-block-arneiron-price-table.is-style-packages .pricing .eff .per {
	font-size: var(--wp--preset--font-size--xs, 0.75rem);
	color: var(--c-ink-3, #6b7280);
}
.wp-block-arneiron-price-table.is-style-packages .badge {
	display: inline-flex;
	padding: 2px var(--wp--preset--spacing--3, 8px);
	border-radius: var(--wp--custom--radius--pill, 999px);
	font-size: var(--wp--preset--font-size--xs, 0.75rem);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	border: 1px solid var(--c-border, #d7dbe2);
	background: var(--c-surface-2, #eceef2);
	color: var(--c-ink-2, #4b5462);
}
.wp-block-arneiron-price-table.is-style-packages .badge--success { border-color: var(--c-success, #3f7a4a); background: color-mix(in srgb, var(--c-success, #3f7a4a) 12%, var(--c-bg, #fff)); color: var(--c-success, #3f7a4a); }
.wp-block-arneiron-price-table.is-style-packages .badge--warning { border-color: var(--c-warning, #8a5a1f); background: color-mix(in srgb, var(--c-warning, #8a5a1f) 12%, var(--c-bg, #fff)); color: var(--c-warning, #8a5a1f); }
.wp-block-arneiron-price-table.is-style-packages .badge--danger  { border-color: var(--c-danger, #9a3535);  background: color-mix(in srgb, var(--c-danger, #9a3535) 12%, var(--c-bg, #fff)); color: var(--c-danger, #9a3535); }
.wp-block-arneiron-price-table.is-style-packages .badge--outline { background: transparent; color: var(--c-ink-2, #4b5462); }

/* Features list. */
.wp-block-arneiron-price-table.is-style-packages .feat {
	list-style: none;
	margin: 0 0 var(--wp--preset--spacing--4, 12px);
	padding: var(--wp--preset--spacing--3, 8px) 0 0;
	border-top: 1px solid var(--c-border, #d7dbe2);
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--2, 4px);
}
.wp-block-arneiron-price-table.is-style-packages .feat li {
	position: relative;
	padding-left: var(--wp--preset--spacing--5, 16px);
	color: var(--c-ink-2, #4b5462);
	font-size: var(--wp--preset--font-size--sm, 0.875rem);
	line-height: 1.5;
}
.wp-block-arneiron-price-table.is-style-packages .feat li::before {
	content: "✓";
	position: absolute;
	left: 0;
	color: var(--c-success, #3f7a4a);
	font-weight: 700;
}

/* Buy CTA at card foot. */
.wp-block-arneiron-price-table.is-style-packages .pricing .btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--wp--preset--spacing--2, 4px);
	padding: var(--wp--preset--spacing--3, 8px) var(--wp--preset--spacing--5, 16px);
	border-radius: var(--wp--custom--radius--md, 6px);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--base, 1rem);
	text-decoration: none;
	cursor: pointer;
	min-height: 44px;
	margin-top: auto;
	align-self: stretch;
	transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.wp-block-arneiron-price-table.is-style-packages .btn--block { width: 100%; }
.wp-block-arneiron-price-table.is-style-packages .btn--primary,
.wp-block-arneiron-price-table.is-style-packages .is-popular .btn {
	background: var(--c-accent, #3f4654);
	color: var(--c-on-accent, #fff);
	border: 1px solid var(--c-accent, #3f4654);
}
.wp-block-arneiron-price-table.is-style-packages .btn--primary:hover,
.wp-block-arneiron-price-table.is-style-packages .is-popular .btn:hover {
	background: var(--c-accent-strong, #2a2f3a);
	border-color: var(--c-accent-strong, #2a2f3a);
}
.wp-block-arneiron-price-table.is-style-packages .btn--secondary {
	background: transparent;
	color: var(--c-accent, #3f4654);
	border: 1px solid var(--c-accent, #3f4654);
}
.wp-block-arneiron-price-table.is-style-packages .btn--secondary:hover {
	background: var(--c-surface-2, #eceef2);
}
.wp-block-arneiron-price-table.is-style-packages .btn:focus-visible {
	outline: 2px solid var(--c-accent-strong, #2a2f3a);
	outline-offset: 2px;
}

/* Responsive collapse. */
@media ( max-width: 980px ) {
	.wp-block-arneiron-price-table.is-style-packages .grid-4 { grid-template-columns: repeat(2, 1fr); }
}
@media ( max-width: 720px ) {
	.wp-block-arneiron-price-table.is-style-packages .grid-3 { grid-template-columns: repeat(2, 1fr); }
}
@media ( max-width: 560px ) {
	.wp-block-arneiron-price-table.is-style-packages .grid-2,
	.wp-block-arneiron-price-table.is-style-packages .grid-3,
	.wp-block-arneiron-price-table.is-style-packages .grid-4 { grid-template-columns: 1fr; }
	.wp-block-arneiron-price-table.is-style-packages .pricing:hover { transform: none; }
}

@media (prefers-reduced-motion: reduce) {
	.wp-block-arneiron-price-table.is-style-packages .pricing,
	.wp-block-arneiron-price-table.is-style-packages .btn { transition: none; }
}

/* --------------------------------------------------------------------------
 * core/heading — the retired arneiron/title settings, as CONTROLS
 * (assets/js/editor-heading-settings.js), not style presets.
 *
 * The `is-style-arneiron-title*` rules above stay where they are for any
 * content already using them, but they are not the delivery path: a preset is a
 * one-of-N radio and cannot carry a pre-title string or a padding value. Note
 * also that those preset rules reference --arneiron-title-color / -font / -size
 * / -style / -weight, and NONE of those custom properties is defined anywhere in
 * this theme — with no fallback, every one of those five declarations is
 * invalid-at-computed-value and does nothing. The rules below use only
 * currentColor and the theme's real presets, so they render.
 *
 * pre_title and after_title_text were real elements (<div> and <p>) around the
 * old block's <h2>. core/heading IS the <h2> and has no inner markup to inject,
 * so they are carried as data-* attributes and drawn with generated content.
 * That matches visually but NOT for assistive tech: generated content is not
 * reliably announced and cannot be selected. Decorative use only.
 * -------------------------------------------------------------------------- */

.wp-block-heading.arneiron-title-pre::before {
	content: attr(data-arneiron-pre-title);
	display: block;
	font-size: .6em;
	font-weight: 600;
	letter-spacing: .08em;
	margin-bottom: .35em;
	text-transform: uppercase;
}

.wp-block-heading.arneiron-title-after::after {
	content: attr(data-arneiron-after-title);
	display: block;
	font-size: .55em;
	font-weight: 400;
	line-height: 1.5;
	margin-top: .5em;
}

/* show_decor. There are only two pseudo-elements per element and
   after_title_text already claims ::after, so the separator is drawn two ways:
   as the ::after itself when there is no after-text, and as a background stripe
   ON the after-text block when there is — which also keeps the original stacking
   order (heading, separator, caption). */
.wp-block-heading.arneiron-title-decor:not(.arneiron-title-after)::after {
	background: currentColor;
	content: "";
	display: block;
	height: 2px;
	margin-top: .5em;
	width: 40px;
}
.wp-block-heading.arneiron-title-decor.arneiron-title-after::after {
	background-image: linear-gradient(currentColor, currentColor);
	background-position: left top;
	background-repeat: no-repeat;
	background-size: 40px 2px;
	padding-top: .9em;
}
.wp-block-heading.arneiron-title-decor.has-text-align-center:not(.arneiron-title-after)::after { margin-inline: auto; }
.wp-block-heading.arneiron-title-decor.has-text-align-right:not(.arneiron-title-after)::after  { margin-inline-start: auto; }
.wp-block-heading.arneiron-title-decor.arneiron-title-after.has-text-align-center::after { background-position: center top; }
.wp-block-heading.arneiron-title-decor.arneiron-title-after.has-text-align-right::after  { background-position: right top; }

/* no_wrap */
.wp-block-heading.arneiron-no-wrap { white-space: nowrap; }

/* text_tone. `:not(.has-text-color)` is load-bearing: that is the class core
   adds whenever an author picks a Text Color, so an explicit colour always wins
   and the two controls never fight over the same declaration. */
.wp-block-heading.arneiron-tone-light:not(.has-text-color) { color: var(--wp--preset--color--bg, #fff); }
.wp-block-heading.arneiron-tone-dark:not(.has-text-color)  { color: var(--wp--preset--color--ink, #14181f); }
.wp-block-heading.arneiron-tone-muted:not(.has-text-color) { color: var(--wp--preset--color--ink-3, #6b7280); }

/* --------------------------------------------------------------------------
 * core/button — the retired arneiron/button settings, as CONTROLS
 * (assets/js/editor-button-settings.js).
 *
 * The custom properties are set inline on the wrapper .wp-block-button by the
 * save filter and inherit down to the <a>. They are the SAME names the retired
 * render.php emitted, so anything already written against them keeps working.
 * -------------------------------------------------------------------------- */

.wp-block-button.arneiron-btn-transparent > .wp-block-button__link {
	/* !important because core serialises a chosen background colour INLINE on
	   the <a>, and an inline declaration beats any stylesheet rule. Without it
	   this toggle would silently do nothing on exactly the buttons an author is
	   most likely to use it on. */
	background-color: transparent !important;
	background-image: none !important;
}

.wp-block-button.arneiron-btn-icon > .wp-block-button__link {
	align-items: center;
	display: inline-flex;
	gap: .5em;
}
.wp-block-button.arneiron-btn-icon > .wp-block-button__link::after {
	content: var(--arneiron-btn-icon, "");
	line-height: 1;
}
.wp-block-button.arneiron-btn-icon-left > .wp-block-button__link::after { order: -1; }
/* Declared even though `order: 0` is already the default: the save filter emits
   this class, and an emitted class with no rule anywhere reads as dead code to
   the next person to grep for it. */
.wp-block-button.arneiron-btn-icon-right > .wp-block-button__link::after { order: 0; }

.wp-block-button.arneiron-btn-shadow > .wp-block-button__link {
	box-shadow: var(--arneiron-button-shadow, 0 6px 18px rgba(0, 0, 0, .18));
}

.wp-block-button.arneiron-btn-effect-lift > .wp-block-button__link,
.wp-block-button.arneiron-btn-effect-glow > .wp-block-button__link {
	transition: box-shadow var(--arneiron-button-shadow-transition, .35s),
	            transform var(--arneiron-button-shadow-transition, .35s);
}
.wp-block-button.arneiron-btn-effect-lift > .wp-block-button__link:hover {
	transform: translateY(-2px);
}
.wp-block-button.arneiron-btn-effect-glow > .wp-block-button__link:hover {
	box-shadow: var(--arneiron-button-shadow, 0 6px 18px rgba(0, 0, 0, .18)),
	            0 0 0 4px var(--arneiron-button-shadow-bg, rgba(0, 0, 0, .08));
}

@media (prefers-reduced-motion: reduce) {
	.wp-block-button.arneiron-btn-effect-lift > .wp-block-button__link,
	.wp-block-button.arneiron-btn-effect-glow > .wp-block-button__link {
		transition: none;
	}
	.wp-block-button.arneiron-btn-effect-lift > .wp-block-button__link:hover {
		transform: none;
	}
}

/* =========================================================================
   core/group — SHADOW PRESETS
   =========================================================================
   Two ready-made drop shadows the retired `arneiron/section` block could draw,
   ported so the default Row can use them. Driven by a real Inspector control
   (assets/js/editor-group-settings.js), in the Styles tab beside core's
   Border & Shadow.

   THESE ARE SHADOWS, NOT DECOR. They were first shipped under the "decor" name,
   which was wrong: a decor is the shaped SVG band rendered by inc/group-decor.php
   and configured in the Decor panel. Keeping the two apart matters because they
   compose - a row can carry a shaped band AND a lifted-corner shadow.

   DRAWN WITH ::before/::after, NOT the original spans. The old block emitted
   `.arneiron-shadow-corner` twice and `.arneiron-shadow-curve` once as real
   children. core/group saves statically and the only hook available on save,
   `blocks.getSaveContent.extraProps`, can add a className or a style and
   nothing else — it cannot insert child elements. Pseudo-elements give the same
   two corners and the same curve without touching the row's inner markup, which
   also means switching the decor off leaves no orphan nodes behind.

   Geometry, colour and stacking are the originals, kept so a row decorated here
   matches a legacy section pixel for pixel:
     corner   bottom 15px, height 20%, width 50%, rotate ∓4deg, z-index -1
     curve    inset 10px, top 50%, border-radius 20% / 10px, z-index -2

   TWO THINGS WILL MAKE IT INVISIBLE, both by design rather than by fault:
     - the row needs a background. The decor sits BEHIND the row (negative
       z-index) and reads as a shadow escaping from under it; with a transparent
       row there is nothing for it to escape from.
     - `overflow: hidden` clips it. The Overflow Visible control above is the
       switch for that, and the two are meant to be used together.
   ========================================================================= */

.wp-block-group[class*="arneiron-shadow-preset-"] {
	position: relative;
}

.wp-block-group[class*="arneiron-shadow-preset-"]::before,
.wp-block-group[class*="arneiron-shadow-preset-"]::after {
	content: "";
	position: absolute;
	pointer-events: none;
}

/* --- lifted corners: two rotated shadows peeking out at the bottom --- */
.wp-block-group.arneiron-shadow-preset-lifted-corners::before,
.wp-block-group.arneiron-shadow-preset-lifted-corners::after {
	bottom: 15px;
	height: 20%;
	width: 50%;
	box-shadow: 0 15px 10px var(--arneiron-section-shadow-color, rgba(0, 0, 0, .3));
	z-index: -1;
}

.wp-block-group.arneiron-shadow-preset-lifted-corners::before {
	left: 10px;
	transform: rotate(-4deg);
}

.wp-block-group.arneiron-shadow-preset-lifted-corners::after {
	right: 10px;
	transform: rotate(4deg);
}

/* --- bottom curve: one soft curved shadow under the row --- */
.wp-block-group.arneiron-shadow-preset-bottom-curve::before {
	left: 10px;
	right: 10px;
	top: 50%;
	bottom: 0;
	border-radius: 20% / 10px;
	box-shadow: 0 0 15px var(--arneiron-section-shadow-color, rgba(0, 0, 0, .3));
	z-index: -2;
}

/* The curve variant uses only ::before; ::after would otherwise inherit the
   shared rule above and paint an empty box over the row. */
.wp-block-group.arneiron-shadow-preset-bottom-curve::after {
	display: none;
}

@media (prefers-reduced-motion: reduce) {
	.wp-block-group[class*="arneiron-shadow-preset-"]::before,
	.wp-block-group[class*="arneiron-shadow-preset-"]::after {
		transition: none;
	}
}

/* =========================================================================
   core/group — DECOR BANDS (the shaped SVG divider)
   =========================================================================
   Markup comes from inc/group-decor.php at render time; these rules only
   position it. The band deliberately sits OUTSIDE the row — inline `top` /
   `bottom` are negative by its own height — so the shape reads as the row's
   edge rather than as something inside it.

   `overflow: hidden` on the row will clip the band away completely. That is the
   single most likely reason a configured decor looks like it did nothing, and
   the Overflow Visible control in ArneIron Settings is the switch for it.
   ========================================================================= */

.wp-block-group.arneiron-has-decor {
	position: relative;
}

.arneiron-decor-wrap {
	position: absolute;
	left: 0;
	right: 0;
	width: 100%;
	line-height: 0;
	pointer-events: none;
	z-index: 1;
}

.arneiron-decor-wrap > svg {
	display: block;
	width: 100%;
}
