/**
 * The public directory: search bar, archive, cards and the single listing page.
 *
 * Scoped under .ccw-root throughout, for the same reason as the account and
 * form styles: the Elementor kit styles bare element selectors, and scoping
 * wins the cascade without a single !important.
 *
 * @package    CCW_Directory
 * @subpackage assets/css
 * @author     Shakib Shown <hi@shakib6472.com>
 * @link       https://shakib6472.com
 * @since      1.0.0
 */

/* ------------------------------------------------------------------- Icons */

.ccw-icon {
	display: inline-block;
	flex: 0 0 auto;
	width: 16px;
	height: 16px;
	background-repeat: no-repeat;
	background-position: center;
	background-size: contain;
	vertical-align: -2px;
}

.ccw-icon--pin {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E");
}

.ccw-icon--phone {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6A19.8 19.8 0 0 1 2.1 4.2 2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 1.9.7 2.8a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.4c.9.3 1.8.5 2.8.6a2 2 0 0 1 1.7 2z'/%3E%3C/svg%3E");
}

.ccw-icon--globe {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M3 12h18M12 3a15 15 0 0 1 0 18a15 15 0 0 1 0-18z'/%3E%3C/svg%3E");
}

.ccw-icon--calendar {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M16 3v4M8 3v4M3 11h18'/%3E%3C/svg%3E");
}

.ccw-icon--search {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");
}

.ccw-icon--target {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3C/svg%3E");
}

.ccw-icon--arrow {
	width: 14px;
	height: 14px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E");
}

.ccw-icon--prev,
.ccw-icon--next {
	width: 14px;
	height: 14px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m15 6-6 6 6 6'/%3E%3C/svg%3E");
}

.ccw-icon--next {
	transform: rotate(180deg);
}

.ccw-icon--list {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01'/%3E%3C/svg%3E");
}

.ccw-icon--grid {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E");
}

.ccw-icon--clock {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E");
}

/* Category tile icons, all drawn from the same simple line set. */
.ccw-icon--cat-shield {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'/%3E%3C/svg%3E");
}

.ccw-icon--cat-instructor {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21a8 8 0 0 1 16 0'/%3E%3C/svg%3E");
}

.ccw-icon--cat-target {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Ccircle cx='12' cy='12' r='5'/%3E%3Ccircle cx='12' cy='12' r='1.5'/%3E%3C/svg%3E");
}

.ccw-icon--cat-outdoor {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m3 20 6-9 4 5 3-4 5 8z'/%3E%3Ccircle cx='7' cy='6' r='2.5'/%3E%3C/svg%3E");
}

.ccw-icon--cat-tactical {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2 4 6v6c0 5 3.4 8.8 8 10 4.6-1.2 8-5 8-10V6z'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E");
}

.ccw-icon--cat-tools {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14.7 6.3a4 4 0 0 0 5 5L21 21H3l7.5-7.5a4 4 0 0 0 5-5z'/%3E%3C/svg%3E");
}

.ccw-icon--cat-womens {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='5'/%3E%3Cpath d='M12 13v8M9 18h6'/%3E%3C/svg%3E");
}

.ccw-social__link {
	display: inline-block;
	width: 36px;
	height: 36px;
	border: 1px solid var(--ccw-line);
	border-radius: 50%;
	background-repeat: no-repeat;
	background-position: center;
	background-size: 18px 18px;
}

.ccw-social__link:hover {
	border-color: var(--ccw-accent);
	background-color: var(--ccw-accent-soft);
}

.ccw-icon--facebook {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23101828'%3E%3Cpath d='M13.5 22v-8h2.7l.4-3.1h-3.1V8.9c0-.9.25-1.5 1.5-1.5h1.7V4.6A21 21 0 0 0 14.4 4.5c-2.4 0-4 1.5-4 4.2v2.2H7.7V14h2.7v8z'/%3E%3C/svg%3E");
}

.ccw-icon--instagram {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23101828' stroke-width='2'%3E%3Crect x='3' y='3' width='18' height='18' rx='5'/%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Ccircle cx='17.5' cy='6.5' r='1'/%3E%3C/svg%3E");
}

.ccw-icon--youtube {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23101828'%3E%3Cpath d='M22 12s0-3.4-.4-5a2.6 2.6 0 0 0-1.8-1.8C18.2 4.8 12 4.8 12 4.8s-6.2 0-7.8.4A2.6 2.6 0 0 0 2.4 7C2 8.6 2 12 2 12s0 3.4.4 5a2.6 2.6 0 0 0 1.8 1.8c1.6.4 7.8.4 7.8.4s6.2 0 7.8-.4a2.6 2.6 0 0 0 1.8-1.8c.4-1.6.4-5 .4-5zM10 15.2V8.8l5.2 3.2z'/%3E%3C/svg%3E");
}

.ccw-icon--x {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23101828'%3E%3Cpath d='M17.5 3h3l-6.6 7.5L21.7 21h-6l-4.7-6.1L5.6 21h-3l7-8L2.6 3h6.2l4.3 5.6zm-1 16h1.6L7.6 4.7H5.9z'/%3E%3C/svg%3E");
}

/* ------------------------------------------------------------------ Shared */

.ccw-root .ccw-button--small {
	min-height: 38px;
	padding: 8px 16px;
	font-size: 0.875rem;
}

.ccw-root .ccw-button--dark {
	background-color: var(--ccw-surface-dark);
	color: var(--ccw-paper);
}

.ccw-root .ccw-button--dark:hover,
.ccw-root .ccw-button--dark:focus {
	background-color: var(--ccw-ink);
	color: var(--ccw-paper);
}

.ccw-chip-row {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin: 0 0 10px;
}

.ccw-root .ccw-chip--link:hover {
	border-color: var(--ccw-accent);
	color: var(--ccw-accent);
}

.ccw-root .ccw-tag-dark {
	display: inline-block;
	padding: 3px 10px;
	border-radius: var(--ccw-radius-chip);
	background-color: var(--ccw-surface-dark);
	color: var(--ccw-paper);
	font-size: 0.75rem;
	font-weight: 600;
	text-decoration: none;
}

.ccw-cert {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-right: 14px;
	color: var(--ccw-accent);
	font-size: 0.8125rem;
	font-weight: 600;
}

/* Holds either an uploaded image or a built-in inline SVG, so the box is sized
   here and the drawing simply fills it. currentColor lets the badge colour
   flow through from whatever context it sits in. */
.ccw-badge__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 15px;
	height: 15px;
	vertical-align: -2px;
	color: inherit;
}

.ccw-badge__icon svg,
.ccw-badge__icon img {
	width: 100%;
	height: 100%;
	display: block;
}

.ccw-verified-mark {
	display: inline-block;
	width: 17px;
	height: 17px;
	vertical-align: -2px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2316803c' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='m8.5 12 2.5 2.5 4.5-5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-size: contain;
}

.ccw-stars {
	display: inline-flex;
	gap: 1px;
	vertical-align: -2px;
}

.ccw-star {
	width: 15px;
	height: 15px;
	background-repeat: no-repeat;
	background-size: contain;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23e2e6ec'%3E%3Cpath d='m12 2 3 6.6 7 .8-5.2 4.8 1.4 7L12 17.8 5.8 21.2l1.4-7L2 9.4l7-.8z'/%3E%3C/svg%3E");
}

.ccw-star--full {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23f5821f'%3E%3Cpath d='m12 2 3 6.6 7 .8-5.2 4.8 1.4 7L12 17.8 5.8 21.2l1.4-7L2 9.4l7-.8z'/%3E%3C/svg%3E");
}

.ccw-star--half {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cdefs%3E%3ClinearGradient id='h'%3E%3Cstop offset='50%25' stop-color='%23f5821f'/%3E%3Cstop offset='50%25' stop-color='%23e2e6ec'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath fill='url(%23h)' d='m12 2 3 6.6 7 .8-5.2 4.8 1.4 7L12 17.8 5.8 21.2l1.4-7L2 9.4l7-.8z'/%3E%3C/svg%3E");
}

.ccw-rating {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.ccw-rating__value {
	font-family: var(--ccw-font-heading);
	font-weight: 700;
	color: var(--ccw-ink);
}

.ccw-rating__count,
.ccw-rating--none {
	color: var(--ccw-muted);
	font-size: 0.875rem;
}

.ccw-openstate {
	display: inline-block;
	padding: 3px 12px;
	border: 1px solid transparent;
	border-radius: 999px;
	font-size: 0.8125rem;
	font-weight: 600;
	white-space: nowrap;
}

.ccw-openstate--open {
	border-color: rgba(22, 128, 60, 0.25);
	background-color: #f0fdf4;
	color: var(--ccw-ok);
}

.ccw-openstate--closed {
	border-color: rgba(220, 38, 38, 0.2);
	background-color: #fdf2f2;
	color: var(--ccw-closed);
}

.ccw-notice--pending {
	border-left-color: var(--ccw-accent);
	background-color: var(--ccw-accent-soft);
	color: #8a5200;
}

/* -------------------------------------------------------------- Search bar */

.ccw-searchbar {
	display: flex;
	flex-wrap: wrap;
	gap: 1px;
	max-width: 900px;
	margin: 0 auto var(--ccw-space-5);
	padding: 6px;
	border: var(--ccw-border);
	border-radius: 999px;
	background-color: var(--ccw-paper);
	box-shadow: var(--ccw-shadow);
}

.ccw-searchbar__segment {
	display: flex;
	align-items: center;
	gap: 8px;
	flex: 1 1 200px;
	min-width: 0;
	padding: 0 14px;
	border-right: 1px solid var(--ccw-line);
}

.ccw-searchbar__segment:last-of-type {
	border-right: 0;
}

.ccw-root .ccw-searchbar__input {
	width: 100%;
	min-height: 42px;
	padding: 0;
	border: 0;
	background: none;
	background-color: transparent;
}

.ccw-root .ccw-searchbar__input:focus {
	outline: none;
	border: 0;
}

/*
 * The segment above clears the inherited control background so the select sits
 * flush inside the bar. That shorthand also resets background-repeat, so the
 * chevron has to be re-declared as no-repeat here or it tiles across the whole
 * control.
 */
.ccw-root select.ccw-searchbar__input {
	padding-right: 22px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right center;
	background-size: 16px 16px;
}

.ccw-root .ccw-searchbar__submit {
	display: flex;
	flex: 0 0 auto;
	align-items: center;
	justify-content: center;
	width: 46px;
	height: 46px;
	min-height: 0;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background-color: var(--ccw-accent);
	cursor: pointer;
}

.ccw-root .ccw-searchbar__submit:hover {
	background-color: var(--ccw-accent-hover);
}

.ccw-searchbar__submit .ccw-icon--search {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");
}

@media (max-width: 767px) {
	.ccw-searchbar {
		border-radius: var(--ccw-radius-card);
	}

	.ccw-searchbar__segment {
		flex-basis: 100%;
		border-right: 0;
		border-bottom: 1px solid var(--ccw-line);
	}

	.ccw-root .ccw-searchbar__submit {
		width: 100%;
		border-radius: var(--ccw-radius-button);
	}
}

/* --------------------------------------------------------------- Category grid */

.ccw-category-grid-wrap {
	max-width: var(--ccw-container);
	margin: 0 auto;
	padding: 0 var(--ccw-space-4);
}

.ccw-category-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
	gap: var(--ccw-space-3);
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-category-tile {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	padding: var(--ccw-space-4) var(--ccw-space-2);
	border: var(--ccw-border);
	border-radius: var(--ccw-radius-card);
	background-color: var(--ccw-paper);
	text-align: center;
	text-decoration: none;
	color: var(--ccw-ink);
}

.ccw-category-tile:hover {
	border-color: var(--ccw-accent);
	box-shadow: var(--ccw-shadow-raised);
}

.ccw-category-tile__icon {
	width: 44px;
	height: 44px;
	padding: 10px;
	border-radius: 50%;
	background-color: var(--ccw-accent-soft);
	background-repeat: no-repeat;
	background-position: center;
	background-size: 22px 22px;
}

.ccw-category-tile__name {
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1.35;
}

.ccw-category-tile__count {
	font-size: 0.75rem;
	color: var(--ccw-muted);
}

.ccw-level-row {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
	margin-top: var(--ccw-space-4);
	justify-content: center;
}

.ccw-level-row__label {
	font-size: 0.8125rem;
	font-weight: 600;
	color: var(--ccw-muted);
}

/* ----------------------------------------------------------------- Archive */

.ccw-archive {
	max-width: var(--ccw-container);
	margin: 0 auto;
	padding: var(--ccw-space-5) var(--ccw-space-4) var(--ccw-space-7);
}

.ccw-archive__header {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: var(--ccw-space-4);
	flex-wrap: wrap;
	margin-bottom: var(--ccw-space-5);
}

.ccw-root .ccw-archive__title {
	margin: 0 0 6px;
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.5rem, 2.4vw, 2rem);
	font-weight: 700;
	line-height: 1.2;
	color: var(--ccw-ink);
}

.ccw-archive__intro {
	margin: 0;
	max-width: 60ch;
	color: var(--ccw-muted);
}

.ccw-archive__count {
	margin: 0;
	text-align: right;
	line-height: 1.2;
}

.ccw-archive__count-number {
	display: block;
	font-family: var(--ccw-font-heading);
	font-size: 1.75rem;
	font-weight: 700;
	color: var(--ccw-ink);
}

.ccw-archive__count-label {
	font-size: 0.8125rem;
	color: var(--ccw-muted);
}

.ccw-archive__layout {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--ccw-space-5);
	align-items: start;
}

@media (min-width: 1024px) {
	.ccw-archive__layout {
		grid-template-columns: 260px minmax(0, 1fr);
		gap: var(--ccw-space-6);
	}
}

/* ----------------------------------------------------------------- Filters */

.ccw-filters {
	padding: var(--ccw-space-4);
	border: var(--ccw-border);
	border-radius: var(--ccw-radius-card);
	background-color: var(--ccw-paper);
	box-shadow: var(--ccw-shadow);
}

.ccw-filters__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	margin-bottom: var(--ccw-space-4);
}

.ccw-root .ccw-filters__title {
	margin: 0;
	font-family: var(--ccw-font-heading);
	font-size: 1rem;
	font-weight: 600;
}

.ccw-filters__group {
	margin: 0 0 var(--ccw-space-5);
	padding: 0;
	border: 0;
}

.ccw-filters__legend {
	margin-bottom: 10px;
	padding: 0;
	font-size: 0.8125rem;
	font-weight: 700;
	color: var(--ccw-ink);
}

.ccw-filters__list {
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-filters__list--scroll {
	max-height: 260px;
	overflow-y: auto;
}

.ccw-filters__option {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 4px 0;
	font-size: 0.875rem;
	cursor: pointer;
}

.ccw-root .ccw-filters__option input {
	flex: 0 0 auto;
	width: 16px;
	height: 16px;
	min-height: 0;
	margin: 0;
	accent-color: var(--ccw-accent);
}

.ccw-filters__label {
	flex: 1 1 auto;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-width: 0;
}

.ccw-filters__count {
	flex: 0 0 auto;
	color: var(--ccw-muted);
	font-size: 0.75rem;
}

.ccw-root .ccw-filters__search {
	margin-bottom: 8px;
	min-height: 38px;
	padding: 8px 12px;
	font-size: 0.875rem;
}

.ccw-filters__toggle {
	padding: 8px 0;
	font-size: 0.875rem;
}

.ccw-filters__toggle .ccw-switch-row__text {
	font-weight: 400;
}

.ccw-filters__apply {
	margin-top: var(--ccw-space-2);
}

/* Scripting fills the results in as filters change, so the button is only
   needed as the no-JS fallback. */
.ccw-js .ccw-filters__apply {
	display: none;
}

/* ----------------------------------------------------------------- Toolbar */

.ccw-toolbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	flex-wrap: wrap;
	margin-bottom: var(--ccw-space-4);
}

.ccw-toolbar__showing {
	margin: 0;
	color: var(--ccw-muted);
	font-size: 0.875rem;
}

.ccw-toolbar__controls {
	display: flex;
	align-items: center;
	gap: var(--ccw-space-3);
}

.ccw-toolbar__sort {
	display: flex;
	gap: 8px;
}

.ccw-root .ccw-toolbar__sort select {
	min-height: 40px;
	padding: 8px 34px 8px 12px;
	font-size: 0.875rem;
}

.ccw-viewswitch {
	display: flex;
	border: var(--ccw-border);
	border-radius: var(--ccw-radius-button);
	overflow: hidden;
}

.ccw-root .ccw-viewswitch__button {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	background-color: var(--ccw-paper);
	text-decoration: none;
}

.ccw-root .ccw-viewswitch__button.is-active {
	background-color: var(--ccw-accent);
}

.ccw-viewswitch__button.is-active .ccw-icon {
	filter: brightness(0) invert(1);
}

/* ----------------------------------------------------------------- Results */

.ccw-results {
	display: grid;
	gap: var(--ccw-space-4);
}

.ccw-results--grid {
	grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}

/*
 * Fixed column rows for the home page. The archive stays fluid, because there
 * the column count should follow whatever width the theme gives it, but a
 * promotional row needs to land on an exact count so it reads as a designed
 * block: one card on a phone, two on a tablet, the requested number from
 * desktop up.
 *
 * These come after --grid deliberately. Both modifiers can sit on the same
 * element and they carry equal specificity, so source order is what decides.
 *
 * minmax(0, 1fr) rather than 1fr: a long business name in a card would
 * otherwise widen its own track past the container.
 */
.ccw-results--cols-2,
.ccw-results--cols-3,
.ccw-results--cols-4 {
	grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 768px) {
	.ccw-results--cols-2,
	.ccw-results--cols-3,
	.ccw-results--cols-4 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1024px) {
	.ccw-results--cols-3 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.ccw-results--cols-4 {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.ccw-listing-card {
	position: relative;
	overflow: hidden;
	/* Named properties rather than "all": the theme animates colour on hover
	   too, and transitioning everything made the card flicker. */
	transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

/*
 * A deliberate hover state. Without one the theme supplied its own, which is
 * why the card picked up an accent border that did not match anything else.
 * The lift is a shadow and a slightly darker edge, and nothing moves.
 */
.ccw-root .ccw-listing-card:hover,
.ccw-root .ccw-listing-card:focus-within {
	border-color: var(--ccw-line-strong);
	box-shadow: var(--ccw-shadow-raised);
}

/*
 * The footer buttons keep their own colours on card hover. The extra class in
 * the selector is there to outrank the Elementor kit's own anchor hover rule,
 * which was repainting "View Details" in the theme accent.
 */
.ccw-root .ccw-listing-card__actions .ccw-button--dark:hover,
.ccw-root .ccw-listing-card__actions .ccw-button--dark:focus {
	background-color: var(--ccw-ink);
	border-color: var(--ccw-ink);
	color: var(--ccw-paper);
}

.ccw-root .ccw-listing-card__actions .ccw-button--action:hover,
.ccw-root .ccw-listing-card__actions .ccw-button--action:focus {
	background-color: var(--ccw-action-hover);
	border-color: var(--ccw-action-hover);
	color: var(--ccw-paper);
}

.ccw-root .ccw-listing-card:hover .ccw-button,
.ccw-root .ccw-listing-card:focus-within .ccw-button {
	text-decoration: none;
}

.ccw-listing-card__ribbon {
	position: absolute;
	top: 12px;
	left: 0;
	z-index: 2;
	padding: 3px 10px;
	background-color: var(--ccw-accent);
	color: var(--ccw-paper);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.ccw-listing-card__media {
	display: block;
	overflow: hidden;
	background-color: var(--ccw-wash);
}

.ccw-listing-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.ccw-listing-card__placeholder {
	display: block;
	width: 100%;
	height: 100%;
	min-height: 160px;
	background-color: var(--ccw-wash);
}

.ccw-listing-card__body {
	padding: var(--ccw-space-4);
}

.ccw-root .ccw-listing-card__title {
	margin: 0 0 8px;
	font-family: var(--ccw-font-heading);
	font-size: 1.0625rem;
	font-weight: 700;
	line-height: 1.3;
}

.ccw-root .ccw-listing-card__title a {
	color: var(--ccw-ink);
	text-decoration: none;
}

.ccw-root .ccw-listing-card__title a:hover {
	color: var(--ccw-accent);
}

.ccw-listing-card__certs {
	margin: 0 0 8px;
}

.ccw-listing-card__meta {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
	margin: 0 0 10px;
}

.ccw-listing-card__excerpt {
	margin: 0 0 10px;
	color: var(--ccw-muted);
	font-size: 0.875rem;
	line-height: 1.6;
}

.ccw-listing-card__address {
	display: flex;
	align-items: flex-start;
	gap: 6px;
	margin: 0 0 var(--ccw-space-4);
	color: var(--ccw-muted);
	font-size: 0.8125rem;
}

.ccw-listing-card__actions {
	display: flex;
	gap: 8px;
	margin: 0;
	flex-wrap: wrap;
	/*
	 * Cards in a grid row stretch to match the tallest one, and the footer
	 * absorbs whatever height is left over. Without this the buttons stretched
	 * with it, so the same button was a different height on every card.
	 */
	align-items: center;
}

/*
 * The two footer buttons share the row equally. Left at their content width
 * they came out unequal, and "View Details" is long enough that the narrower
 * one wrapped onto a second line and grew taller than its neighbour.
 */
.ccw-root .ccw-listing-card__actions .ccw-button {
	flex: 1 1 0;
	min-width: 0;
	white-space: nowrap;
}

/* One button on its own should not stretch across the whole card. */
.ccw-root .ccw-listing-card__actions .ccw-button:only-child {
	flex: 0 1 auto;
}

/* List view puts the photo beside the copy from tablet up. */
@media (min-width: 768px) {
	.ccw-listing-card--list {
		display: grid;
		grid-template-columns: 220px minmax(0, 1fr);
	}

	.ccw-listing-card--list .ccw-listing-card__media {
		height: 100%;
	}
}

.ccw-listing-card--grid .ccw-listing-card__media {
	aspect-ratio: 16 / 10;
}

/* -------------------------------------------------------------- Pagination */

.ccw-pagination {
	margin-top: var(--ccw-space-5);
}

.ccw-pagination__list {
	display: flex;
	gap: 6px;
	justify-content: center;
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * Direct children only. paginate_links() nests an icon span and a screen reader
 * span inside the previous and next links, and a descendant selector gave each
 * of those its own 38px bordered box, which is what pulled the row apart.
 */
.ccw-root .ccw-pagination__list > li > a,
.ccw-root .ccw-pagination__list > li > span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0;
	min-width: 38px;
	height: 38px;
	padding: 0 10px;
	border: var(--ccw-border);
	border-radius: var(--ccw-radius-button);
	background-color: var(--ccw-paper);
	color: var(--ccw-ink);
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1;
	text-decoration: none;
	transition: border-color 0.15s ease, background-color 0.15s ease, color 0.15s ease;
}

.ccw-root .ccw-pagination__list > li > a:hover,
.ccw-root .ccw-pagination__list > li > a:focus-visible {
	border-color: var(--ccw-accent);
	color: var(--ccw-accent);
}

/* The arrow links carry only an icon, so they stay square. */
.ccw-root .ccw-pagination__list > li > a.prev,
.ccw-root .ccw-pagination__list > li > a.next {
	padding: 0;
	width: 38px;
}

.ccw-root .ccw-pagination__list .current {
	background-color: var(--ccw-accent);
	border-color: var(--ccw-accent);
	color: var(--ccw-paper);
}

/* ------------------------------------------------------------ Testimonials */

.ccw-testimonials {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--ccw-space-6);
	align-items: start;
}

@media (min-width: 900px) {
	.ccw-testimonials {
		grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
		gap: var(--ccw-space-7);
	}
}

.ccw-eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 var(--ccw-space-4);
	padding: 7px 14px;
	border-radius: 999px;
	background-color: var(--ccw-surface-dark);
	color: var(--ccw-paper);
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.ccw-eyebrow__dot {
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background-color: var(--ccw-accent);
}

.ccw-root .ccw-testimonials__title {
	margin: 0 0 var(--ccw-space-5);
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.625rem, 3vw, 2.25rem);
	font-weight: 700;
	line-height: 1.15;
	letter-spacing: -0.02em;
	color: var(--ccw-ink);
}

.ccw-quote {
	margin: 0;
}

.ccw-quote__mark {
	display: block;
	width: 40px;
	color: var(--ccw-accent);
}

.ccw-quote__mark svg {
	width: 100%;
	height: auto;
	display: block;
}

.ccw-root .ccw-quote__body {
	margin: var(--ccw-space-4) 0 var(--ccw-space-4);
	padding: 0;
	border: 0;
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.125rem, 1.7vw, 1.5rem);
	font-weight: 500;
	line-height: 1.45;
	letter-spacing: -0.01em;
	color: var(--ccw-ink);
}

.ccw-quote__cite {
	display: flex;
	align-items: center;
	gap: var(--ccw-space-3);
	margin-top: var(--ccw-space-4);
	font-style: normal;
}

.ccw-quote__avatar,
.ccw-testimonial__avatar {
	flex: 0 0 auto;
	border-radius: 50%;
}

.ccw-quote__who {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.ccw-quote__name {
	font-weight: 700;
	color: var(--ccw-ink);
}

.ccw-quote__meta {
	font-size: 0.8125rem;
	color: var(--ccw-muted);
}

.ccw-root .ccw-quote__business {
	color: var(--ccw-muted);
	text-decoration: none;
}

.ccw-root .ccw-quote__business:hover,
.ccw-root .ccw-quote__business:focus-visible {
	color: var(--ccw-accent);
	text-decoration: underline;
}

.ccw-testimonials__list {
	display: flex;
	flex-direction: column;
	gap: var(--ccw-space-4);
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-testimonial {
	padding: var(--ccw-space-5);
}

.ccw-testimonial__head {
	display: flex;
	align-items: center;
	gap: var(--ccw-space-3);
	margin-bottom: 10px;
}

.ccw-testimonial__who {
	display: flex;
	flex-direction: column;
	gap: 1px;
	min-width: 0;
	flex: 1 1 auto;
}

.ccw-testimonial__name {
	font-weight: 700;
	line-height: 1.3;
	color: var(--ccw-ink);
}

.ccw-testimonial__date {
	flex: 0 0 auto;
	font-size: 0.75rem;
	font-variant-numeric: tabular-nums;
	color: var(--ccw-muted);
	align-self: flex-start;
}

.ccw-testimonial__body {
	margin: 10px 0 0;
	font-size: 0.9375rem;
	line-height: 1.6;
	color: var(--ccw-muted);
}

/* ---------------------------------------------------- Taxonomy index pages */

.ccw-taxpage {
	max-width: var(--ccw-container);
	margin: 0 auto;
	padding: var(--ccw-space-6) var(--ccw-space-4) var(--ccw-space-7);
}

.ccw-taxpage--embedded {
	padding: 0;
}

.ccw-taxpage__header {
	margin-bottom: var(--ccw-space-5);
}

.ccw-root .ccw-taxpage__title {
	margin: 0 0 8px;
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.75rem, 3vw, 2.5rem);
	font-weight: 700;
	line-height: 1.15;
	letter-spacing: -0.02em;
	color: var(--ccw-ink);
}

.ccw-taxpage__intro {
	max-width: 62ch;
	margin: 0;
	font-size: 1rem;
	line-height: 1.6;
	color: var(--ccw-muted);
}

.ccw-taxpage__count {
	margin: var(--ccw-space-3) 0 0;
	font-size: 0.875rem;
	color: var(--ccw-muted);
}

/*
 * A plain list that becomes columns as the screen allows. Rows read across a
 * phone and down a desktop, which is how someone scanning for their own state
 * expects an alphabetical list to behave.
 */
.ccw-termindex {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0 var(--ccw-space-5);
	margin: 0;
	padding: 0;
	list-style: none;
	border-top: var(--ccw-border);
}

@media (min-width: 560px) {
	.ccw-termindex--cols-2,
	.ccw-termindex--cols-3,
	.ccw-termindex--cols-4 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 900px) {
	.ccw-termindex--cols-3 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.ccw-termindex--cols-4 {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.ccw-termindex__item {
	border-bottom: var(--ccw-border);
}

.ccw-root .ccw-termindex__link {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	padding: 13px 4px;
	color: var(--ccw-ink);
	text-decoration: none;
	font-size: 0.9375rem;
}

.ccw-root .ccw-termindex__link:hover,
.ccw-root .ccw-termindex__link:focus-visible {
	color: var(--ccw-accent);
}

.ccw-termindex__name {
	font-weight: 500;
}

.ccw-termindex__count {
	flex: 0 0 auto;
	font-size: 0.875rem;
	font-variant-numeric: tabular-nums;
	color: var(--ccw-muted);
}

.ccw-termindex__empty {
	margin: 0;
	color: var(--ccw-muted);
}

/* -------------------------------------------------------------- Breadcrumb */

.ccw-breadcrumb {
	max-width: var(--ccw-container);
	margin: 0 auto;
	padding: var(--ccw-space-5) var(--ccw-space-4) 0;
}

.ccw-breadcrumb__list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px;
	margin: 0;
	padding: 0;
	list-style: none;
	font-size: 0.8125rem;
	color: var(--ccw-muted);
}

.ccw-breadcrumb__item + .ccw-breadcrumb__item::before {
	content: '›';
	margin-right: 6px;
	color: var(--ccw-line-strong);
}

.ccw-root .ccw-breadcrumb__link {
	color: var(--ccw-muted);
	text-decoration: none;
}

.ccw-root .ccw-breadcrumb__link:hover,
.ccw-root .ccw-breadcrumb__link:focus-visible {
	color: var(--ccw-accent);
	text-decoration: underline;
}

.ccw-breadcrumb__item--current {
	color: var(--ccw-ink);
	font-weight: 600;
}

.ccw-empty {
	padding: var(--ccw-space-6);
	text-align: center;
}

.ccw-root .ccw-empty__title {
	margin: 0 0 8px;
	font-family: var(--ccw-font-heading);
	font-size: 1.25rem;
	font-weight: 700;
}

.ccw-empty__text {
	margin: 0 0 var(--ccw-space-4);
	color: var(--ccw-muted);
}

.ccw-results.is-loading {
	opacity: 0.45;
	pointer-events: none;
}

/* ---------------------------------------------------------- Single listing */

.ccw-single {
	max-width: var(--ccw-container);
	margin: 0 auto;
	padding: var(--ccw-space-4) var(--ccw-space-4) var(--ccw-space-7);
}

.ccw-breadcrumbs {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin-bottom: var(--ccw-space-4);
	font-size: 0.8125rem;
	color: var(--ccw-muted);
}

.ccw-root .ccw-breadcrumbs a {
	color: var(--ccw-muted);
	text-decoration: none;
}

.ccw-root .ccw-breadcrumbs a:hover {
	color: var(--ccw-accent);
}

.ccw-single__layout {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--ccw-space-5);
	align-items: start;
}

@media (min-width: 1024px) {
	.ccw-single__layout {
		grid-template-columns: 320px minmax(0, 1fr);
	}

	.ccw-single__aside {
		position: sticky;
		top: var(--ccw-space-4);
	}
}

.ccw-single__main {
	display: grid;
	gap: var(--ccw-space-4);
	min-width: 0;
}

.ccw-hero {
	overflow: hidden;
}

.ccw-hero__media {
	position: relative;
	aspect-ratio: 21 / 8;
	background-color: var(--ccw-wash);
}

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

.ccw-hero__placeholder {
	display: block;
	width: 100%;
	height: 100%;
	background-color: var(--ccw-wash);
}

.ccw-hero__logo {
	position: absolute;
	bottom: -22px;
	left: var(--ccw-space-4);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 64px;
	border: 1px solid var(--ccw-line);
	border-radius: var(--ccw-radius-card);
	background-color: var(--ccw-paper);
	font-family: var(--ccw-font-heading);
	font-size: 1.125rem;
	font-weight: 700;
	color: var(--ccw-ink);
	overflow: hidden;
}

.ccw-hero__logo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.ccw-hero__body {
	padding: calc(var(--ccw-space-5) + 14px) var(--ccw-space-5) var(--ccw-space-5);
}

.ccw-hero__topline {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	flex-wrap: wrap;
}

.ccw-root .ccw-hero__title {
	margin: 0 0 8px;
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.5rem, 2.6vw, 2.125rem);
	font-weight: 700;
	line-height: 1.15;
	color: var(--ccw-ink);
}

.ccw-hero__byline {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
	margin: 0 0 10px;
	color: var(--ccw-muted);
	font-size: 0.875rem;
}

.ccw-hero__rating {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
	margin: 0 0 10px;
}

.ccw-hero__certs {
	margin: 0 0 8px;
}

.ccw-hero__where {
	margin: 0 0 var(--ccw-space-4);
	color: var(--ccw-muted);
	font-size: 0.875rem;
}

.ccw-hero__actions {
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
	margin: 0 0 10px;
}

.ccw-hero__contactline {
	display: flex;
	gap: 6px;
	flex-wrap: wrap;
	margin: 0;
	color: var(--ccw-muted);
	font-size: 0.8125rem;
}

.ccw-panel {
	padding: var(--ccw-space-5);
}

.ccw-root .ccw-panel__title {
	margin: 0 0 var(--ccw-space-4);
	font-family: var(--ccw-font-heading);
	font-size: 1.25rem;
	font-weight: 700;
	color: var(--ccw-ink);
}

.ccw-panel__text {
	margin: 0;
	color: var(--ccw-ink);
}

.ccw-panel__footer {
	margin: var(--ccw-space-3) 0 0;
}

.ccw-prose p {
	margin: 0 0 var(--ccw-space-3);
	color: var(--ccw-muted);
	line-height: 1.75;
}

.ccw-prose p:last-child {
	margin-bottom: 0;
}

.ccw-badgegrid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
	gap: var(--ccw-space-4);
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-badgegrid__item {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	text-align: center;
}

.ccw-badgegrid__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	border-radius: var(--ccw-radius-card);
	background-color: var(--ccw-accent-soft);
	background-repeat: no-repeat;
	background-position: center;
	background-size: 22px 22px;
	color: var(--ccw-accent);
}

/* The shared 15px box is right beside a line of text, but inside this tile it
   needs to fill the plate. */
.ccw-badgegrid__icon .ccw-badge__icon {
	width: 22px;
	height: 22px;
	vertical-align: baseline;
}

.ccw-badgegrid__label {
	font-size: 0.8125rem;
	font-weight: 600;
	line-height: 1.35;
}

.ccw-contactgrid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
	gap: var(--ccw-space-4);
	margin-bottom: var(--ccw-space-4);
}

.ccw-contactgrid__label {
	display: block;
	margin-bottom: 4px;
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--ccw-muted);
}

.ccw-contactgrid__value {
	display: flex;
	align-items: flex-start;
	gap: 6px;
	font-size: 0.875rem;
	word-break: break-word;
}

.ccw-map--static {
	height: 220px;
	margin-bottom: 0;
}

.ccw-hours-strip {
	display: grid;
	grid-template-columns: repeat(7, minmax(0, 1fr));
	gap: 6px;
	margin: 0 0 var(--ccw-space-3);
	padding: 0;
	list-style: none;
}

.ccw-hours-strip__day {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 2px;
	padding: 10px 4px;
	border: var(--ccw-border);
	border-radius: var(--ccw-radius-chip);
	text-align: center;
}

.ccw-hours-strip__day.is-today {
	border-color: var(--ccw-accent);
	border-top-width: 2px;
	background-color: var(--ccw-accent-soft);
}

.ccw-hours-strip__name {
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	color: var(--ccw-muted);
}

.ccw-hours-strip__time {
	font-size: 0.75rem;
	color: var(--ccw-ink);
	white-space: nowrap;
}

.ccw-hours-strip__time--closed {
	color: var(--ccw-muted);
}

.ccw-hours-strip__footer {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	margin: 0;
	padding-top: var(--ccw-space-3);
	border-top: 1px solid var(--ccw-line);
}

.ccw-hours-strip__label {
	font-size: 0.6875rem;
	font-weight: 600;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--ccw-muted);
}

.ccw-hours-strip__notes {
	margin: var(--ccw-space-3) 0 0;
	color: var(--ccw-muted);
	font-size: 0.8125rem;
}

@media (max-width: 640px) {
	.ccw-hours-strip {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

.ccw-ticklist {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: 10px var(--ccw-space-4);
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-ticklist li {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	font-size: 0.9375rem;
}

.ccw-ticklist__mark {
	flex: 0 0 auto;
	width: 16px;
	height: 16px;
	margin-top: 3px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f5821f' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 5 5 9-10'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-size: contain;
}

.ccw-gallery {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--ccw-space-3);
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-gallery__item {
	overflow: hidden;
	border-radius: var(--ccw-radius-card);
	aspect-ratio: 4 / 3;
}

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

.ccw-specs {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 0 var(--ccw-space-5);
	margin: 0;
}

.ccw-specs__row {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	padding: 10px 0;
	border-bottom: 1px solid var(--ccw-line);
}

.ccw-specs dt {
	margin: 0;
	color: var(--ccw-muted);
	font-size: 0.875rem;
}

.ccw-specs dd {
	margin: 0;
	font-weight: 600;
	text-align: right;
}

.ccw-social {
	display: flex;
	gap: 10px;
	margin: 0;
}

.ccw-single__similar {
	margin-top: var(--ccw-space-6);
	padding-top: var(--ccw-space-6);
	border-top: 1px solid var(--ccw-line);
}

/* -------------------------------------------------------- Contact and relay */

.ccw-contactform__intro {
	margin: 0 0 var(--ccw-space-4);
	color: var(--ccw-muted);
	font-size: 0.875rem;
	line-height: 1.6;
}

/*
 * The honeypot. Taken out of the layout and out of the accessibility tree, so
 * no person ever meets it, while a bot reading the markup fills it in and gives
 * itself away. Not display:none, which some bots specifically skip.
 */
.ccw-hp {
	position: absolute !important;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.ccw-recaptcha-notice {
	margin-top: var(--ccw-space-3);
	font-size: 0.75rem;
	line-height: 1.5;
}

.ccw-thread {
	max-width: 720px;
	margin: 0 auto;
	padding: var(--ccw-space-6) var(--ccw-space-4) var(--ccw-space-7);
}

.ccw-root .ccw-thread__title {
	margin: 0 0 8px;
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.375rem, 2.2vw, 1.75rem);
	font-weight: 700;
	line-height: 1.25;
	color: var(--ccw-ink);
}

.ccw-thread__intro {
	margin: 0 0 8px;
	color: var(--ccw-muted);
	line-height: 1.6;
}

.ccw-thread__header {
	margin-bottom: var(--ccw-space-5);
}

.ccw-thread__messages {
	display: grid;
	gap: var(--ccw-space-3);
	margin: 0 0 var(--ccw-space-5);
	padding: 0;
	list-style: none;
}

.ccw-bubble {
	max-width: 82%;
	padding: 12px 16px;
	border: var(--ccw-border);
	border-radius: var(--ccw-radius-card);
	background-color: var(--ccw-paper);
}

.ccw-bubble--you {
	justify-self: end;
	border-color: transparent;
	background-color: var(--ccw-accent-soft);
}

.ccw-bubble--them {
	justify-self: start;
	background-color: var(--ccw-wash);
}

.ccw-bubble__who {
	margin: 0 0 4px;
	font-family: var(--ccw-font-heading);
	font-size: 0.8125rem;
	font-weight: 600;
	color: var(--ccw-ink);
}

.ccw-bubble__body p {
	margin: 0 0 8px;
	line-height: 1.65;
}

.ccw-bubble__body p:last-child {
	margin-bottom: 0;
}

.ccw-bubble__time {
	margin: 6px 0 0;
	font-size: 0.75rem;
	color: var(--ccw-muted);
}

.ccw-thread__reply {
	padding: var(--ccw-space-5);
}

.ccw-thread__note {
	margin: var(--ccw-space-4) 0 0;
	color: var(--ccw-muted);
	font-size: 0.8125rem;
	text-align: center;
}

/* ----------------------------------------------------------------- Reviews */

.ccw-reviews__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--ccw-space-3);
	flex-wrap: wrap;
	margin-bottom: var(--ccw-space-4);
}

.ccw-reviews__header .ccw-panel__title {
	margin: 0;
}

.ccw-root .ccw-reviews__sort select {
	min-height: 40px;
	padding: 8px 34px 8px 12px;
	font-size: 0.875rem;
}

.ccw-reviews__summary {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--ccw-space-4);
	margin-bottom: var(--ccw-space-5);
	padding-bottom: var(--ccw-space-5);
	border-bottom: 1px solid var(--ccw-line);
}

@media (min-width: 640px) {
	.ccw-reviews__summary {
		grid-template-columns: 180px minmax(0, 1fr);
		gap: var(--ccw-space-6);
		align-items: center;
	}
}

.ccw-reviews__score {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 4px;
}

.ccw-reviews__average {
	font-family: var(--ccw-font-heading);
	font-size: 3rem;
	font-weight: 700;
	line-height: 1;
	color: var(--ccw-ink);
}

.ccw-reviews__total {
	color: var(--ccw-muted);
	font-size: 0.875rem;
}

.ccw-breakdown {
	margin: 0;
	padding: 0;
	list-style: none;
}

.ccw-breakdown__row {
	display: grid;
	grid-template-columns: 56px minmax(0, 1fr) 32px;
	align-items: center;
	gap: 10px;
	padding: 3px 0;
	font-size: 0.8125rem;
	color: var(--ccw-muted);
}

.ccw-breakdown__bar {
	display: block;
	height: 8px;
	border-radius: 4px;
	background-color: var(--ccw-line);
	overflow: hidden;
}

.ccw-breakdown__fill {
	display: block;
	height: 100%;
	border-radius: 4px;
	background-color: var(--ccw-accent);
}

.ccw-breakdown__count {
	text-align: right;
}

.ccw-review {
	display: flex;
	gap: var(--ccw-space-3);
	padding: var(--ccw-space-4) 0;
	border-bottom: 1px solid var(--ccw-line);
}

.ccw-review:last-child {
	border-bottom: 0;
}

.ccw-review__avatar {
	flex: 0 0 auto;
}

.ccw-review__photo,
.ccw-review__avatar img {
	width: 44px;
	height: 44px;
	border-radius: 50%;
	object-fit: cover;
	display: block;
}

.ccw-review__body {
	flex: 1 1 auto;
	min-width: 0;
}

.ccw-review__meta {
	margin: 0 0 2px;
}

.ccw-review__author {
	font-family: var(--ccw-font-heading);
	font-weight: 600;
	color: var(--ccw-ink);
}

.ccw-review__line {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
	margin: 0 0 8px;
}

.ccw-review__date {
	color: var(--ccw-muted);
	font-size: 0.8125rem;
}

.ccw-review__text p {
	margin: 0 0 8px;
	line-height: 1.7;
	color: var(--ccw-ink);
}

.ccw-review__text p:last-child {
	margin-bottom: 0;
}

.ccw-review__response {
	margin: var(--ccw-space-3) 0 0;
	padding: 12px 16px;
	border-left: 3px solid var(--ccw-accent);
	border-radius: 0 var(--ccw-radius-chip) var(--ccw-radius-chip) 0;
	background-color: var(--ccw-wash);
}

.ccw-review__response-label {
	margin: 0 0 4px;
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--ccw-accent);
}

.ccw-review__actions {
	display: flex;
	gap: var(--ccw-space-4);
	flex-wrap: wrap;
	margin: var(--ccw-space-3) 0 0;
	font-size: 0.875rem;
}

.ccw-review__report .ccw-form {
	margin-top: 10px;
	max-width: 460px;
}

.ccw-reviews__empty {
	margin: 0;
	padding: var(--ccw-space-5) 0;
	color: var(--ccw-muted);
}

.ccw-reviews__more {
	margin: var(--ccw-space-4) 0 0;
	text-align: center;
}

.ccw-reviews__form {
	margin-top: var(--ccw-space-5);
	padding-top: var(--ccw-space-5);
	border-top: 1px solid var(--ccw-line);
	scroll-margin-top: var(--ccw-space-5);
}

.ccw-root .ccw-reviews__form-title {
	margin: 0 0 var(--ccw-space-4);
	font-family: var(--ccw-font-heading);
	font-size: 1.125rem;
	font-weight: 700;
	color: var(--ccw-ink);
}

/*
 * The star picker is five real radio buttons. Laying them out in reverse lets
 * the sibling selector light up every star to the left of the hovered or
 * checked one, which is what a rating control is expected to do, without any
 * script involved.
 */
.ccw-starpicker {
	display: inline-flex;
	flex-direction: row-reverse;
	justify-content: flex-end;
	gap: 4px;
}

.ccw-starpicker__option {
	cursor: pointer;
}

.ccw-root .ccw-starpicker__option input {
	position: absolute;
	width: 1px;
	height: 1px;
	min-height: 0;
	margin: -1px;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
}

.ccw-starpicker__star {
	display: block;
	width: 28px;
	height: 28px;
	background-repeat: no-repeat;
	background-size: contain;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23cbd2dc' stroke-width='1.6' stroke-linejoin='round'%3E%3Cpath d='m12 2 3 6.6 7 .8-5.2 4.8 1.4 7L12 17.8 5.8 21.2l1.4-7L2 9.4l7-.8z'/%3E%3C/svg%3E");
}

.ccw-starpicker__option input:checked ~ .ccw-starpicker__star,
.ccw-starpicker__option:hover .ccw-starpicker__star,
.ccw-starpicker__option:hover ~ .ccw-starpicker__option .ccw-starpicker__star,
.ccw-starpicker__option:has(input:checked) ~ .ccw-starpicker__option .ccw-starpicker__star {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23f5821f'%3E%3Cpath d='m12 2 3 6.6 7 .8-5.2 4.8 1.4 7L12 17.8 5.8 21.2l1.4-7L2 9.4l7-.8z'/%3E%3C/svg%3E");
}

.ccw-root .ccw-starpicker__option input:focus-visible ~ .ccw-starpicker__star {
	outline: 2px solid var(--ccw-accent);
	outline-offset: 2px;
	border-radius: 3px;
}

/* ---------------------------------------------------------------- Card row */

.ccw-cardrow {
	max-width: var(--ccw-container);
	margin: 0 auto;
	padding: 0 var(--ccw-space-4);
}

.ccw-cardrow__header {
	margin-bottom: var(--ccw-space-5);
	text-align: center;
}

.ccw-root .ccw-cardrow__title {
	margin: 0 0 8px;
	font-family: var(--ccw-font-heading);
	font-size: clamp(1.375rem, 2.2vw, 1.875rem);
	font-weight: 700;
	color: var(--ccw-ink);
}

.ccw-cardrow__intro {
	max-width: 60ch;
	margin: 0 auto;
	color: var(--ccw-muted);
}

.ccw-cardrow__more {
	margin: var(--ccw-space-5) 0 0;
	text-align: center;
}
