/* Reusable components (prefix tc-). Compose via classes in the block editor. */

/* Neutralise the wrapper WP adds to Group blocks in classic themes */
:where(.tc-section, .tc-wrap, .tc-stack, .tc-cluster, .tc-row, .tc-grid, .tc-split, .tc-card, .tc-card__head, .tc-card__foot, .tc-panel, .tc-stats, .tc-kit) > .wp-block-group__inner-container {
	display: contents;
}

/* Layout */
.tc-section {
	padding-block: var(--space-section);
	background: var(--color-bg);
	color: var(--color-ink);
	font-family: var(--font-body);
}

.tc-section--tight {
	padding-block: var(--space-section-sm);
}

.tc-section--flush-top {
	padding-top: 0;
}

.tc-section--white {
	background: var(--color-surface);
	border-block: 1px solid var(--color-border);
}

.tc-section--slate {
	background: var(--color-slate);
	color: var(--color-on-dark);
}

.tc-wrap {
	box-sizing: border-box;
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--gutter);
}

.tc-stack {
	display: flex;
	flex-direction: column;
	gap: var(--tc-gap, var(--space-4));
	min-width: 0;
}

.tc-stack--sm {
	--tc-gap: var(--space-2);
}

.tc-stack--lg {
	--tc-gap: var(--space-stack-lg);
}

.tc-cluster {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--tc-gap, var(--space-3)) var(--space-4);
}

.tc-row {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-end;
	gap: var(--space-4) 2rem;
}

.tc-row--center {
	align-items: center;
}

.tc-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--space-grid-gap);
}

.tc-split {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--tc-split-gap, var(--hero-gap));
	align-items: center;
}

.tc-split--about {
	--tc-split-cols: minmax(0, 1fr) minmax(0, 1.3fr);
}

.tc-split--media {
	--tc-split-cols: minmax(0, 1.2fr) minmax(0, 1fr);
	--tc-split-gap: clamp(2rem, 4vw, 3rem);
}

@media (min-width: 901px) {
	.tc-grid--2 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.tc-grid--3 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.tc-split {
		grid-template-columns: var(--tc-split-cols, repeat(2, minmax(0, 1fr)));
	}
}

:where(.tc-stack, .tc-cluster, .tc-row, .tc-card, .tc-panel, .tc-stats) > * {
	margin: 0;
}

/* Typography */
.tc-eyebrow {
	margin: 0;
	font-family: var(--font-mono);
	font-size: var(--fs-eyebrow);
	letter-spacing: var(--tracking-mono);
	text-transform: uppercase;
	color: var(--color-muted);
}

.tc-eyebrow--light {
	color: var(--color-on-dark-muted);
}

.tc-eyebrow--sm {
	font-size: var(--fs-micro);
}

body :is(h1, h2, h3, h4).tc-title {
	margin: 0 0 var(--space-title-gap);
	padding: 0;
	max-width: 42.5rem;
	font-family: var(--font-display);
	font-size: var(--fs-h2);
	font-weight: 800;
	line-height: 1;
	letter-spacing: -0.03em;
	text-align: left;
	text-transform: none;
	color: inherit;
}

body :is(h1, h2, h3, h4).tc-title--lg {
	font-size: var(--fs-h2-lg);
	line-height: 0.98;
}

body :is(h1, h2, h3, h4).tc-title--accent {
	color: var(--color-accent);
}

.tc-lead {
	max-width: var(--tc-lead-width, 24rem);
	font-size: var(--fs-text);
	line-height: var(--lh-body);
	color: var(--color-text);
}

.tc-lead--lg {
	--tc-lead-width: 38rem;
	font-size: var(--fs-lead-lg);
	line-height: 1.6;
}

.tc-lead--on-dark {
	--tc-lead-width: 32.5rem;
	font-size: 1.125rem;
	color: var(--color-on-dark-soft);
}

.tc-label {
	font-size: var(--fs-ui);
	font-weight: 600;
}

.tc-badge {
	align-self: flex-start;
	display: inline-flex;
	align-items: center;
	padding: 6px 14px;
	border-radius: var(--radius-pill);
	background: var(--color-accent);
	font-size: var(--fs-micro);
	font-weight: 600;
	line-height: 1.3;
	color: var(--color-ink);
}

.tc-badge--mono {
	padding: 6px 14px;
	font-family: var(--font-mono);
	letter-spacing: var(--tracking-mono);
	text-transform: uppercase;
}

/* Links and buttons (apply to a paragraph containing a link) */
.tc-link a {
	display: inline-block;
	padding-block: 0.625rem;
	font-size: var(--fs-base);
	font-weight: 600;
	color: inherit;
	text-decoration: none;
}

.tc-link--accent a {
	color: var(--color-accent);
	border-bottom: 2px solid currentColor;
}

.tc-btn a {
	display: inline-block;
	padding: 0.875rem 1.5rem;
	border-radius: var(--radius-pill);
	background: var(--color-accent);
	font-size: var(--fs-base);
	font-weight: 600;
	color: var(--color-ink);
	text-decoration: none;
}

.tc-btn--ghost a {
	padding: 0.875rem 0.5rem;
	border-radius: 0;
	border-bottom: 2px solid currentColor;
	background: none;
	color: inherit;
}

/* Cards and panels */
.tc-card {
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
	box-sizing: border-box;
	padding: var(--space-card);
	border: 1px solid var(--color-border);
	border-radius: var(--radius-lg);
	background: var(--color-surface);
	color: var(--color-ink);
	text-decoration: none;
}

.tc-card--dark {
	border-color: var(--color-ink);
	background: var(--color-ink);
	color: var(--color-on-dark);
}

.tc-card--dark .tc-card__text {
	color: var(--color-on-dark-soft);
}

.tc-card--dark .tc-card__note {
	border-top-color: var(--color-divider-dark);
	color: var(--color-on-dark-dim);
}

.tc-card--link {
	justify-content: space-between;
	gap: 2.5rem;
	min-height: 13.75rem;
	padding: 1.75rem;
	border-radius: var(--radius-card);
	transition: border-color 0.2s;
}

.tc-card--link:hover {
	border-color: var(--color-ink);
	color: var(--color-ink);
}

.tc-card__head {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--space-2);
}

.tc-card__index {
	font-family: var(--font-mono);
	font-size: var(--fs-ui);
	color: var(--color-accent);
}

body :is(h1, h2, h3, h4).tc-card__title {
	margin: 0;
	padding: 0;
	font-family: var(--font-display);
	font-size: var(--fs-h3);
	font-weight: 800;
	line-height: 1.05;
	letter-spacing: -0.02em;
	text-transform: none;
	color: inherit;
}

.tc-card__text {
	font-size: var(--fs-base);
	line-height: 1.55;
	color: var(--color-text);
}

.tc-card__note {
	padding-top: var(--space-3);
	border-top: 1px solid var(--color-border-soft);
	font-size: var(--fs-ui);
	color: var(--color-muted);
}

.tc-card__foot {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--space-2);
	margin-top: auto;
}

.tc-card__foot > p {
	font-weight: 600;
}

.tc-card__meta {
	font-family: var(--font-mono);
	font-size: var(--fs-eyebrow);
	color: var(--color-muted);
}

.tc-card__headline {
	font-family: var(--font-display);
	font-size: var(--fs-h4);
	font-weight: 600;
	line-height: 1.12;
	letter-spacing: -0.015em;
}

.tc-panel {
	box-sizing: border-box;
	padding: var(--space-panel);
	border-radius: var(--radius-xl);
}

.tc-panel--dark {
	background: var(--color-ink);
	color: var(--color-on-dark);
}

.tc-panel--accent {
	background: var(--color-accent);
	color: var(--color-ink);
}

.tc-panel--compact {
	padding: var(--space-card) clamp(1.5rem, 3vw, 2.5rem);
	border-radius: var(--radius-lg);
}

.tc-panel__label {
	flex: 1 1 20rem;
	font-family: var(--font-display);
	font-size: var(--fs-h3);
	font-weight: 800;
	letter-spacing: -0.02em;
}

/* Stats */
.tc-stats {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-4) 2.5rem;
	padding-block: var(--space-1);
}

.tc-stat__value {
	margin: 0;
	font-family: var(--font-display);
	font-size: var(--fs-stat);
	font-weight: 800;
	line-height: 1.1;
	letter-spacing: -0.03em;
}

.tc-stat__label {
	margin: 0;
	font-size: var(--fs-small);
	color: var(--color-muted);
}

/* Media */
.tc-photo {
	margin: 0;
}

.tc-photo img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: var(--tc-photo-ratio, 4 / 5);
	object-fit: cover;
	object-position: center var(--tc-photo-pos, top);
	border-radius: var(--radius-lg);
	background: var(--color-photo-bg);
}

.tc-photo--landscape {
	--tc-photo-ratio: 4 / 3;
}

.tc-photo--landscape img {
	border-radius: var(--radius-card);
}

/* Inline list of names or logos */
.tc-brands {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem 2.75rem;
	margin: 0;
	padding: 0;
	list-style: none;
	font-family: var(--font-display);
	font-size: var(--fs-brand);
	font-weight: 600;
	color: var(--color-on-dark-soft);
}

.tc-brands li {
	margin: 0;
	font-size: inherit;
}

.tc-brands--muted {
	gap: 0.75rem 2rem;
	font-family: var(--font-body);
	font-size: var(--fs-ui);
	font-weight: 400;
	color: var(--color-muted);
}

/* Kit (ConvertKit) form skin */
.tc-kit .formkit-form[data-uid] .formkit-fields {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-1);
	margin: 0;
}

.tc-kit .formkit-form[data-uid] .formkit-field {
	flex: 1 1 14rem;
	min-width: 0;
	margin: 0;
}

.tc-kit--email-only .formkit-form[data-uid] .formkit-field:first-child {
	display: none;
}

.tc-kit form.formkit-form[data-uid] input.formkit-input {
	box-sizing: border-box;
	width: 100%;
	height: var(--control-height);
	padding: 0 var(--space-3);
	border: 1.5px solid var(--color-ink) !important;
	border-radius: var(--radius-pill) !important;
	background: var(--color-surface);
	color: var(--color-ink) !important;
	font: inherit;
	font-size: var(--fs-base);
	text-align: left;
}

.tc-kit form.formkit-form[data-uid] button.formkit-submit {
	flex: 0 1 auto;
	height: var(--control-height);
	margin: 0;
	padding: 0 var(--space-4);
	border: 0;
	border-radius: var(--radius-pill) !important;
	background: var(--color-accent) !important;
	color: var(--color-surface) !important;
	font: inherit;
	font-size: var(--fs-base);
	font-weight: 600 !important;
	cursor: pointer;
}

.tc-kit--dark-btn form.formkit-form[data-uid] button.formkit-submit {
	background: var(--color-ink) !important;
	color: var(--color-on-dark) !important;
}

/* The parent gap already supplies part of the title spacing */
body .tc-stack > :is(h1, h2, h3, h4).tc-title {
	margin-bottom: max(0rem, calc(var(--space-title-gap) - var(--tc-gap, var(--space-4))));
}

body .tc-row :is(h1, h2, h3, h4).tc-title {
	margin-bottom: 0;
}

.tc-grid--flush {
	gap: 0;
}

.tc-grid--flush > .tc-card {
	border-radius: 0;
}

.tc-grid--flush > .tc-card + .tc-card {
	margin-top: -1px;
}

@media (min-width: 48em) {
	.tc-grid--flush > .tc-card + .tc-card {
		margin-top: 0;
		margin-left: -1px;
	}
}

.tc-card__more {
	font-weight: 600;
	font-size: var(--fs-ui);
}

/* Beats the `.entry p` padding/color reset in pages.css */
body.tc-inner .tc-badge {
	box-sizing: border-box;
	justify-content: center;
	padding: 0.5rem 1.25rem;
	line-height: 1;
	text-align: center;
	white-space: nowrap;
	color: var(--color-ink);
}
