/*
 * ModVault — слой 6: утилиты. Подключается последним, поэтому имеет
 * приоритет над компонентами. Держим набор минимальным: утилита появляется
 * только если нужна в двух и более шаблонах.
 */

/* --- Поток и выравнивание ---------------------------------------------- */

.mv-stack {
	display: grid;
	gap: var(--mv-space-4);
}

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

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

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

.mv-row--wrap {
	flex-wrap: wrap;
}

.mv-row--between {
	justify-content: space-between;
}

.mv-row--center {
	justify-content: center;
}

.mv-row--end {
	justify-content: flex-end;
}

.mv-row--top {
	align-items: flex-start;
}

.mv-grow {
	flex: 1 1 auto;
	min-width: 0;
}

.mv-center {
	display: grid;
	place-items: center;
}

.mv-text-center {
	text-align: center;
}

.mv-text-right {
	text-align: right;
}

/* --- Отступы ----------------------------------------------------------- */

.mv-mt-0 { margin-top: 0 !important; }
.mv-mt-1 { margin-top: var(--mv-space-1); }
.mv-mt-2 { margin-top: var(--mv-space-2); }
.mv-mt-3 { margin-top: var(--mv-space-3); }
.mv-mt-4 { margin-top: var(--mv-space-4); }
.mv-mt-5 { margin-top: var(--mv-space-5); }
.mv-mt-6 { margin-top: var(--mv-space-6); }
.mv-mt-7 { margin-top: var(--mv-space-7); }
.mv-mt-8 { margin-top: var(--mv-space-8); }

.mv-mb-0 { margin-bottom: 0 !important; }
.mv-mb-1 { margin-bottom: var(--mv-space-1); }
.mv-mb-2 { margin-bottom: var(--mv-space-2); }
.mv-mb-3 { margin-bottom: var(--mv-space-3); }
.mv-mb-4 { margin-bottom: var(--mv-space-4); }
.mv-mb-5 { margin-bottom: var(--mv-space-5); }
.mv-mb-6 { margin-bottom: var(--mv-space-6); }
.mv-mb-7 { margin-bottom: var(--mv-space-7); }
.mv-mb-8 { margin-bottom: var(--mv-space-8); }

/* --- Текст ------------------------------------------------------------- */

.mv-truncate {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.mv-truncate-2,
.mv-truncate-3 {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.mv-truncate-2 {
	-webkit-line-clamp: 2;
}

.mv-truncate-3 {
	-webkit-line-clamp: 3;
}

.mv-nowrap {
	white-space: nowrap;
}

.mv-nums {
	font-variant-numeric: tabular-nums;
}

.mv-display {
	font-family: var(--mv-font-display);
	font-weight: 700;
}

.mv-mono {
	font-family: var(--mv-font-mono);
}

.mv-accent {
	color: var(--mv-accent);
}

.mv-brand {
	color: var(--mv-primary);
}

.mv-warn {
	color: var(--mv-warn);
}

.mv-danger {
	color: var(--mv-danger);
}

/* --- Видимость --------------------------------------------------------- */

.mv-hide {
	display: none !important;
}

@media (max-width: 768px) {
	.mv-hide-mobile {
		display: none !important;
	}
}

@media (min-width: 769px) {
	.mv-hide-desktop {
		display: none !important;
	}
}

@media (max-width: 1024px) {
	.mv-hide-tablet {
		display: none !important;
	}
}

/* --- Поверхности ------------------------------------------------------- */

.mv-surface {
	border: 1px solid var(--mv-border);
	border-radius: var(--mv-radius-md);
	background: var(--mv-surface);
}

.mv-divider {
	height: 1px;
	border: 0;
	margin-block: var(--mv-space-6);
	background: var(--mv-border);
}

.mv-full-bleed {
	width: 100vw;
	margin-left: 50%;
	transform: translateX(-50%);
}

/* --- Служебное --------------------------------------------------------- */

[hidden] {
	display: none !important;
}

.mv-clickable {
	cursor: pointer;
}

.mv-no-select {
	user-select: none;
}
