/*
 * Partial: contact-form (Contact Form 7, its own stylesheet is switched off).
 * Our markup uses .sw-form__*; the wpcf7-* classes are generated by the plugin.
 */
.sw-form { display: grid; gap: var(--space-32); min-inline-size: 0; }

.sw-form__grid { display: grid; gap: var(--space-32); }

.sw-form__field {
	display: grid;
	gap: var(--space-16);
	min-inline-size: 0;
	margin: 0;
	padding: 0;
	border: 0;
}

/* A <legend> ignores the grid gap of its fieldset */
fieldset.sw-form__field { display: block; }
legend.sw-form__label { margin-block-end: var(--space-16); }

.sw-form__label {
	padding: 0;
	font-family: var(--font-heading);
	font-size: var(--text-small);
	line-height: var(--leading-small);
	letter-spacing: var(--tracking-label);
	color: var(--color-heading);
}

/* Fields: filled panel with only a bottom line */
.sw-form__input {
	display: block;
	inline-size: 100%;
	min-block-size: var(--space-40);
	padding-block: var(--space-8);
	padding-inline: var(--space-16);
	border: 0;
	border-block-end: var(--border);
	border-radius: 0;
	background: var(--color-bg);
	color: var(--color-heading);
	font-size: var(--text-body);
	line-height: var(--leading-body);
	transition: border-color var(--transition);
}
.sw-form__input::placeholder { color: var(--color-text); opacity: 0.4; }
.sw-form__input:hover { border-block-end-color: var(--color-text); }
.sw-form__input:focus { border-block-end-color: var(--color-primary); outline: 0; }
textarea.sw-form__input { block-size: calc(var(--space-128) + var(--space-8)); min-block-size: var(--space-80); resize: vertical; }

/* Service type: radio buttons shown as one segmented bar */
.sw-form__segments {
	display: inline-flex;
	flex-wrap: wrap;
	max-inline-size: 100%;
	border-block-end: var(--border);
	background: var(--color-bg);
}
.sw-form__segments .wpcf7-list-item { display: flex; margin: 0; }
.sw-form__segments label { position: relative; display: flex; cursor: pointer; }
.sw-form__segments input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.sw-form__segments .wpcf7-list-item-label {
	padding-block: var(--space-8);
	padding-inline: var(--space-24);
	font-family: var(--font-heading);
	font-size: var(--text-small);
	line-height: var(--leading-body);
	letter-spacing: var(--tracking-label);
	color: var(--color-text);
	transition: background var(--transition), color var(--transition);
}
.sw-form__segments label:hover .wpcf7-list-item-label { color: var(--color-heading); }
.sw-form__segments input:checked + .wpcf7-list-item-label { background: var(--color-primary); color: var(--color-on-primary); }
.sw-form__segments input:focus-visible + .wpcf7-list-item-label { outline: var(--focus-ring); outline-offset: -2px; }

/* Files: the native file input covers the drop zone, so dropping and clicking both work without JS */
.sw-form__drop {
	position: relative;
	display: grid;
	justify-items: center;
	gap: var(--space-4);
	padding-block: var(--space-40);
	padding-inline: var(--space-24);
	border: 1px dashed var(--color-border);
	background: var(--color-bg);
	text-align: center;
	transition: border-color var(--transition);
}
.sw-form__drop:hover,
.sw-form__drop:focus-within,
.sw-form__drop--active { border-color: var(--color-primary); }
.sw-form__drop--filled { border-style: solid; }
.sw-form__drop-title { color: var(--color-text); overflow-wrap: anywhere; }
.sw-form__drop--filled .sw-form__drop-title { color: var(--color-heading); }
.sw-form__drop-hint { font-size: var(--text-xs); line-height: var(--leading-xs); opacity: 0.6; }
.sw-form__file:focus-visible { outline: 0; }
.sw-form__file { position: absolute; inset: 0; inline-size: 100%; block-size: 100%; opacity: 0; cursor: pointer; }
.sw-form__drop .wpcf7-form-control-wrap { position: static; }

.sw-form__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-16); }
.sw-form__notice {
	padding: var(--space-16);
	border: 1px dashed var(--color-border);
	font-size: var(--text-small);
}

/* Contact Form 7 states and messages */
.wpcf7 .screen-reader-response {
	position: absolute;
	inline-size: 1px;
	block-size: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}
.wpcf7 .hidden-fields-container { display: none; }
.wpcf7-form-control-wrap { position: relative; display: block; }
.wpcf7-not-valid-tip {
	display: block;
	margin-block-start: var(--space-8);
	color: var(--color-error);
	font-size: var(--text-small);
	line-height: var(--leading-small);
}
.sw-form__input.wpcf7-not-valid { border-block-end-color: var(--color-error); }
.sw-form__drop:has(.wpcf7-not-valid) { border-color: var(--color-error); }

.wpcf7 form .wpcf7-response-output {
	margin: 0;
	padding: var(--space-16);
	border-inline-start: var(--space-4) solid var(--color-primary);
	background: var(--color-bg);
	color: var(--color-heading);
}
.wpcf7 form.init .wpcf7-response-output,
.wpcf7 form.resetting .wpcf7-response-output,
.wpcf7 form.submitting .wpcf7-response-output { display: none; }
.wpcf7 form.invalid .wpcf7-response-output,
.wpcf7 form.unaccepted .wpcf7-response-output,
.wpcf7 form.failed .wpcf7-response-output,
.wpcf7 form.aborted .wpcf7-response-output,
.wpcf7 form.spam .wpcf7-response-output { border-color: var(--color-error); }

.wpcf7-spinner {
	visibility: hidden;
	inline-size: var(--space-24);
	block-size: var(--space-24);
	border: 2px solid var(--color-border);
	border-block-start-color: var(--color-primary);
	border-radius: 50%;
	animation: sw-form-spin 800ms linear infinite;
}
form.submitting .wpcf7-spinner { visibility: visible; }
form.submitting .sw-button { pointer-events: none; opacity: 0.6; }
.wpcf7 [inert] { opacity: 0.5; }

@keyframes sw-form-spin { to { transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce) {
	.wpcf7-spinner { animation-duration: 2400ms; }
}

@media (min-width: 48em) {
	.sw-form__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--space-40); }
	.sw-form__field--wide { grid-column: 1 / -1; }
}
