/* Shared interaction rules: keep equivalent elements in the same selector group. */
:root {
	--d-effect-duration: 0.2s;
	--d-effect-easing: ease;
	--d-effect-distance: 4px;
	--d-button-hover: #414b39;
}
/* Navigation and contact links keep readable colors on their existing surfaces. */
.d-topbar a,
.d-footer :is(.d-footer-links, .d-footer-address) a {
	text-decoration: none;
}
.d-header .wp-block-navigation-item__content,
.d-topbar a,
.d-footer :is(.d-footer-links, .d-footer-address) a {
	text-decoration-thickness: 1px;
	text-underline-offset: 5px;
	transition: color var(--d-effect-duration) var(--d-effect-easing);
}
.d-header
	.wp-block-navigation-item:not(.d-nav-contact)
	> .wp-block-navigation-item__content:is(:hover, :focus-visible) {
	color: var(--d-muted);
	text-decoration: underline;
	text-decoration-thickness: 1px;
}
.d-topbar a:is(:hover, :focus-visible),
.d-footer :is(.d-footer-links, .d-footer-address) a:is(:hover, :focus-visible) {
	text-decoration: underline;
	text-decoration-thickness: 1px;
}
/* Text calls to action, including the Google reviews link. */
:is(.d-link, .d-map-link) a {
	display: inline-block;
	text-decoration: none;
	border-bottom: 1px solid var(--d-ink);
	padding-bottom: 5px;
	transition:
		color var(--d-effect-duration) var(--d-effect-easing),
		border-color var(--d-effect-duration) var(--d-effect-easing);
}
:is(.d-link, .d-map-link) a:is(:hover, :focus-visible) {
	color: var(--d-muted);
	border-bottom-color: currentColor;
}
/* Every visible link/button arrow travels the same distance to the right. */
.d-motion-arrow,
.wp-block-button__link img {
	display: inline-block;
	transition:
		transform var(--d-effect-duration) var(--d-effect-easing),
		opacity var(--d-effect-duration) var(--d-effect-easing);
}
a:is(:hover, :focus-visible) .d-motion-arrow,
.wp-block-button__link:is(:hover, :focus-visible) img {
	transform: translateX(var(--d-effect-distance));
}
/* Filled, light, and outline buttons share timing; color changes follow variants. */
.wp-block-button__link,
.d-header .d-nav-contact {
	transition:
		background-color var(--d-effect-duration) var(--d-effect-easing),
		color var(--d-effect-duration) var(--d-effect-easing),
		border-color var(--d-effect-duration) var(--d-effect-easing);
}
.d-button .wp-block-button__link:is(:hover, :focus-visible),
.d-header .d-nav-contact:is(:hover, :focus-within) {
	background: var(--d-button-hover);
	color: var(--d-white);
}
.d-button-light .wp-block-button__link:is(:hover, :focus-visible) {
	background: var(--d-white);
	color: var(--d-ink);
	border-color: var(--d-white);
}
.d-button-outline .wp-block-button__link:is(:hover, :focus-visible) {
	background: var(--d-ink);
	color: var(--d-white);
	border-color: var(--d-ink);
}
.wp-block-button__link:focus-visible {
	outline-color: var(--d-ink);
}
:is(.d-hero, .d-perspective) .wp-block-button__link:focus-visible {
	outline-color: var(--d-paper);
}
/* Linked headings: underline and reveal the same sliding arrow. */
:is(.d-asset, .d-article) h3 a {
	text-decoration: none;
	text-underline-offset: 5px;
}
:is(.d-asset, .d-article) h3 a:is(:hover, :focus-visible) {
	text-decoration: underline;
	text-decoration-thickness: 1px;
}
.d-article h3 a .d-motion-arrow {
	opacity: 0;
}
.d-article h3 a:is(:hover, :focus-visible) .d-motion-arrow {
	opacity: 1;
}
.d-asset h3 a::after {
	content: "↗";
	display: inline-block;
	font:
		400 17px/1 Commissioner,
		sans-serif;
	margin-left: 8px;
	opacity: 0;
	transform: translate(0, 3px);
	transition:
		opacity var(--d-effect-duration) var(--d-effect-easing),
		transform var(--d-effect-duration) var(--d-effect-easing);
}
.d-asset h3 a:is(:hover, :focus-visible)::after {
	opacity: 1;
	transform: translate(var(--d-effect-distance), 3px);
}
/* Disclosure controls share the same timing and preserve native details behavior. */
.d-faq summary::after {
	transform-origin: center;
	transition: transform var(--d-effect-duration) var(--d-effect-easing);
}
.d-faq details[open] > summary::after {
	content: "+";
	transform: rotate(45deg);
}
@media (prefers-reduced-motion: reduce) {
	:root {
		--d-effect-duration: 0s;
		--d-effect-distance: 0px;
	}
}
