/**
 * Formulários do frontend.
 *
 * Seletores restritos a .form e .search-form para não afetar
 * o editor, o painel ou campos internos de plugins.
 */

.form,
.search-form {
	display: flex;
	flex-direction: column;
	gap: var(--space-md);
}

.search-form {
	flex-direction: row;
	flex-wrap: wrap;
	align-items: flex-end;
}

.form-field {
	display: flex;
	flex-direction: column;
	gap: var(--space-xs);
	width: 100%;
	min-width: 0;
}

.form-label {
	color: var(--color-text);
	font-size: 0.9375rem;
	font-weight: 600;
}

.required-indicator {
	color: var(--color-error);
	font-weight: 700;
}

.form-help,
.form-error,
.form-success {
	margin: 0;
	font-size: 0.875rem;
}

.form-help {
	color: var(--color-text-muted);
}

.form-error {
	color: var(--color-error);
	font-weight: 500;
}

.form-success {
	color: var(--color-brand-primary-dark);
	font-weight: 500;
}

.form-control,
.search-form .search-field {
	width: 100%;
	min-width: 0;
	max-width: 100%;
	min-height: var(--control-height);
	padding: 0.65rem var(--control-padding-inline);
	border: var(--border-width) solid var(--color-border-strong);
	border-radius: var(--radius-md);
	background-color: var(--color-surface);
	color: var(--color-text);
	font-family: inherit;
	font-size: 1rem;
	line-height: 1.4;
}

.form textarea.form-control {
	min-height: 8rem;
	resize: vertical;
}

.form-control::placeholder,
.search-form .search-field::placeholder {
	color: var(--color-text-muted);
	opacity: 1;
}

@media (hover: hover) and (pointer: fine) {
	.form-control:hover,
	.search-form .search-field:hover {
		border-color: var(--color-text);
	}
}

.form-control:focus,
.form-control:focus-visible,
.search-form .search-field:focus,
.search-form .search-field:focus-visible {
	border-color: var(--color-focus);
	outline: 2px solid var(--color-focus);
	outline-offset: 2px;
	box-shadow: 0 0 0 1px var(--color-surface);
}

.form-control:disabled,
.search-form .search-field:disabled {
	background-color: var(--color-disabled-background);
	border-style: dashed;
	color: var(--color-disabled);
	cursor: not-allowed;
}

.form-control[readonly] {
	background-color: var(--color-surface-muted);
	border-style: solid;
	color: var(--color-text);
	cursor: default;
}

.form-field.has-error .form-control,
.form-control[aria-invalid="true"] {
	border-color: var(--color-error);
	background-color: var(--color-error-surface);
}

.form-field.has-success .form-control {
	border-color: var(--color-brand-primary);
	background-color: var(--color-success-surface);
}

.form-field--choice {
	flex-direction: row;
	align-items: flex-start;
	gap: var(--space-sm);
	min-height: var(--control-height);
}

.form-field--choice .form-label {
	font-weight: 500;
}

.form-field--choice input[type="checkbox"],
.form-field--choice input[type="radio"] {
	width: 1.25rem;
	height: 1.25rem;
	min-width: 1.25rem;
	margin-block-start: 0.2rem;
	accent-color: var(--color-brand-primary);
}

.form-field--choice input[type="checkbox"]:focus-visible,
.form-field--choice input[type="radio"]:focus-visible {
	outline: 2px solid var(--color-focus);
	outline-offset: 3px;
}

.form-row {
	display: grid;
	gap: var(--space-md);
}

.form-row--2 {
	grid-template-columns: minmax(0, 1fr);
}

@media (min-width: 782px) {
	.form-row--2 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

.form-actions {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-sm);
	align-items: center;
}

.search-form .form-field {
	flex: 1 1 12rem;
	min-width: 0;
}

.search-form .form-actions {
	flex: 0 0 auto;
}

.form-control:-webkit-autofill {
	-webkit-text-fill-color: var(--color-text);
	box-shadow: 0 0 0 1000px var(--color-surface) inset;
}

@media (prefers-reduced-motion: no-preference) {
	.form-control,
	.search-form .search-field {
		transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background-color var(--transition-fast);
	}
}
