/*
 * Combo Media — оверрайды поверх верстки.
 * main.css приходит из верстки и не правится. Все правки темы — здесь.
 */

/* Любая карточка обучения, оказавшаяся в featured-слоте грида,
   растягивается на полную высоту, как large_card. */
.training-grid .training-card--featured {
	width: 413px;
	height: 532px;
}

/* =====================================================================
 * Авторизация — состояния форм в модалках входа/регистрации/сброса.
 * Базовые стили модалок приходят из main.css.
 * ===================================================================== */

.auth-form__message {
	display: none;
	margin: 0 0 14px;
	padding: 10px 14px;
	border-radius: 8px;
	font-size: 14px;
	line-height: 1.4;
}
.auth-form__message--error {
	background: rgba(255, 86, 86, 0.12);
	color: #d63838;
	border: 1px solid rgba(255, 86, 86, 0.3);
}
.auth-form__message--success {
	background: rgba(80, 200, 120, 0.12);
	color: #1f7a3f;
	border: 1px solid rgba(80, 200, 120, 0.3);
}

.auth-form .form-group--error input {
	border-color: #d63838;
	box-shadow: 0 0 0 1px rgba(214, 56, 56, 0.25);
}

.auth-form.is-loading {
	opacity: 0.7;
	pointer-events: none;
}
.auth-form button[type="submit"][disabled] {
	cursor: progress;
	opacity: 0.7;
}

/* =====================================================================
 * User-menu в шапке для авторизованных
 * ===================================================================== */

.header-user {
	position: relative;
	display: inline-flex;
	align-items: center;
}
.header-user__trigger {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 6px;
/*     border: 1px solid rgba(255, 255, 255, 0.15); */
	border-radius: 999px;
/*     background: rgba(255, 255, 255, 0.04); */
	color: inherit;
	cursor: pointer;
	font: inherit;
}
.header-user__trigger:hover {
	background: rgba(255, 255, 255, 0.08);
}
.header-user__avatar {
	width: 36px;
	height: 36px;
	border-radius: 50%;
	object-fit: cover;
	flex-shrink: 0;
}
.header-user__name {
	max-width: 140px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	display: none;
}
.header-user__caret {
	width: 0;
	height: 0;
	border-left: 4px solid transparent;
	border-right: 4px solid transparent;
	border-top: 5px solid currentColor;
	opacity: 0.6;
	display: none;
}
.header-user__dropdown {
	position: absolute;
	top: calc(100% + 8px);
	right: 0;
	min-width: 200px;
	padding: 8px;
	background: #1a1a1a;
	border: 1px solid rgba(255, 255, 255, 0.08);
	border-radius: 12px;
	box-shadow: 0 12px 36px rgba(0, 0, 0, 0.35);
	z-index: 100;
}
.header-user__dropdown[hidden] {
	display: none;
}
.header-user__link {
	display: block;
	padding: 10px 12px;
	border-radius: 8px;
	color: #fff;
	text-decoration: none;
	font-size: 14px;
}
.header-user__link:hover {
	background: rgba(255, 255, 255, 0.06);
}
.header-user__link--logout {
	color: #ff8888;
}

/* =====================================================================
 * Личный кабинет (.personal-page)
 * Базовый блок перенесён из обновлённой верстки (style.css), т.к. наш
 * main.css — замороженная копия без него. Ниже — оверрайды под реальную
 * обвязку: фото-аватар, сообщения, строка Kick, спиннер.
 * ===================================================================== */

.personal-page {
	display: flex;
	flex-direction: column;
	gap: 30px;
}
.personal-page__head {
	display: flex;
	align-items: center;
	gap: 30px;
}
.personal-page__avatar-wrap {
	position: relative;
	width: 160px;
	height: 160px;
	flex: 0 0 160px;
}
.personal-page__avatar {
	width: 160px;
	height: 160px;
	border-radius: 50%;
	background: #d5dce1;
	display: flex;
	align-items: center;
	justify-content: center;
}
.personal-page__avatar img {
	width: 24px;
	height: 24px;
}
.personal-page__avatar-edit {
	position: absolute;
	right: 0;
	bottom: 0;
	width: 44px;
	height: 44px;
	border: 0;
	border-radius: 50%;
	background: #3e3e3e;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
}
.personal-page__avatar-edit img {
	width: 18px;
	height: 18px;
}
.personal-page__name-line {
	display: flex;
	align-items: center;
	gap: 12px;
}
.personal-page__name {
	margin: 0;
	font-size: 20px;
	line-height: 1.2;
	font-weight: 600;
	color: #e5ebee;
}
.personal-page__logout {
	width: 30px;
	height: 30px;
	padding: 0;
	border: 0;
	background: transparent;
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.personal-page__logout img {
	width: 18px;
	height: 18px;
}
.personal-page__title,
.personal-page__comments-title {
	margin: 0;
	font-size: 28px;
	line-height: 1.1;
	font-weight: 600;
	color: #e5ebee;
}
.personal-page__title {
	margin-top: 20px;
}
.personal-page__form {
	margin-top: 0;
}
.personal-page .form-modal_groups {
	gap: 4px;
}
.personal-page .form-group input {
	padding-right: 42px;
}
.personal-page .form-group input.personal-page__input--locked {
	color: #888888;
}
.personal-page .form-group input:not(.personal-page__input--locked) {
	color: #e5ebee;
}
.personal-page__field-icon {
	position: absolute;
	top: 50%;
	right: 12px;
	transform: translateY(-50%);
	width: 24px;
	height: 24px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
}
.personal-page__field-icon img {
	width: 22px;
	height: 22px;
	pointer-events: none;
	position: relative;
	z-index: 1;
}
.personal-page__field-icon--active::after {
	content: "";
	position: absolute;
	left: 2px;
	right: 2px;
	top: 50%;
	height: 2px;
	background: #888888;
	transform: rotate(-134deg);
	transform-origin: center;
	z-index: 3;
	pointer-events: none;
	box-shadow: 0 0 0 1px rgba(29, 31, 32, 0.2);
}
.personal-page__form-actions {
	margin-top: 22px;
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 12px;
}
.personal-page__form-actions .btn {
	height: 44px;
	font-size: 14px;
	font-weight: 600;
	border-radius: 8px;
	color: #3e3e3e;
	background: none;
	border-color: transparent;
}
.personal-page__form-actions .btn:disabled,
.personal-page__form-actions .btn.is-disabled {
	--btn-fill: #888888;
	--btn-hover-fill: #888888;
	opacity: 1;
}
.personal-page__form-actions .btn:not(:disabled):not(.is-disabled) {
	--btn-fill: #FFFFFF;
	--btn-hover-fill: #FFFFFF;
}
.personal-page__form-actions .btn:hover,
.personal-page__form-actions .btn:focus-visible,
.personal-page__form-actions .btn:active {
	background:
		linear-gradient(transparent, transparent) padding-box,
		linear-gradient(90deg, #e76714 0%, #fbba15 100%) border-box;
	border-color: transparent;
}
.personal-page__form-actions .btn:hover::before,
.personal-page__form-actions .btn:focus-visible::before,
.personal-page__form-actions .btn:active::before {
	opacity: 1;
	transform: translateY(0);
}
.personal-page__comments {
	padding: 25px 0;
	display: flex;
	flex-direction: column;
	gap: 24px;
}
.personal-page__comment-item {
	display: flex;
	flex-direction: column;
	gap: 14px;
}
.personal-page__comment-date {
	margin: 0;
	color: #8c8b8b;
	font-size: 12px;
	line-height: 1.2;
}
.personal-page__comment-text {
	margin: 0;
	color: #e5ebee;
	font-size: 14px;
	line-height: 1.45;
}
.personal-page__comment-remove {
	min-width: 164px;
	height: 36px;
	width: max-content;
	min-height: 36px;
	padding: 5px 10px;
	border-radius: 8px;
	font-size: 14px;
	font-weight: 600;
	line-height: 1;
	display: flex;
	align-items: center;
	justify-content: center;
	background: none;
	border-color: transparent;
	color: #010101;
	--btn-fill: #ececec;
	--btn-hover-fill: #ececec;
	cursor: pointer;
	padding-bottom: 6px;
}
.personal-page__comment-remove:hover,
.personal-page__comment-remove:focus-visible,
.personal-page__comment-remove:active {
	background:
		linear-gradient(transparent, transparent) padding-box,
		linear-gradient(90deg, #e76714 0%, #fbba15 100%) border-box;
	border-color: transparent;
}
.personal-page__comment-remove:hover::before,
.personal-page__comment-remove:focus-visible::before,
.personal-page__comment-remove:active::before {
	opacity: 1;
	transform: translateY(0);
}
.personal-page__form-actions button[type="submit"]:not(:disabled):not(.is-disabled) {
	--btn-fill: linear-gradient(90deg, #e76714 0%, #fbba15 100%);
	--btn-hover-fill: linear-gradient(90deg, #e76714 0%, #fbba15 100%);
	color: #e5ebee;
}
@media (max-width: 640px) {
	.personal-page__form-actions { grid-template-columns: 1fr; }
	.personal-page__head {
		flex-direction: column;
		align-items: center;
		justify-content: center;
		text-align: center;
		width: 100%;
	}
	.personal-page__name-line { justify-content: center; width: 100%; }
	.personal-page__title { margin-top: 10px; }
	.personal-page { gap: 10px; }
}

/* --- Оверрайды под реальную обвязку --- */

/* Реальное фото вместо 24px-плейсхолдера из верстки. */
.personal-page__avatar--photo { background: transparent; }
.personal-page__avatar--photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 50%;
}

/* Баннер сообщений сейва. */
.personal-page__message {
	margin: 0 0 14px;
	padding: 10px 14px;
	border-radius: 8px;
	font-size: 14px;
	line-height: 1.4;
}
.personal-page__message--success {
	background: rgba(80, 200, 120, 0.12);
	border: 1px solid rgba(80, 200, 120, 0.3);
	color: #6dd690;
}
.personal-page__message--error {
	background: rgba(255, 86, 86, 0.12);
	border: 1px solid rgba(255, 86, 86, 0.3);
	color: #ff9a9a;
}

/* Строка привязки Kick — поле + кнопка действия справа. */
.personal-page__kick { position: relative; }
.personal-page__kick-input { padding-right: 130px !important; }
.personal-page__kick-action {
	position: absolute;
	top: 50%;
	right: 8px;
	transform: translateY(-50%);
	display: inline-flex;
	align-items: center;
	height: 32px;
	padding: 0 14px;
	border: 0;
	border-radius: 6px;
	font-size: 13px;
	font-weight: 600;
	line-height: 1;
	color: #fff;
	text-decoration: none;
	cursor: pointer;
	background: linear-gradient(90deg, #e76714 0%, #fbba15 100%);
	padding-bottom: 1px;
}
.personal-page__kick-action:hover,
.personal-page__kick-action:focus-visible { opacity: 0.9; }

.personal-page__kick-flash {
	margin: 0;
	font-size: 13px;
	line-height: 1.4;
}
.personal-page__kick-flash--success { color: #6dd690; }
.personal-page__kick-flash--error   { color: #ff9a9a; }

/* Пустое состояние списка комментариев. */
.personal-page__comments-empty {
	margin: 0;
	color: #8c8b8b;
	font-size: 14px;
}

/* Спиннер во время сохранения. */
.personal-page__form.is-loading { position: relative; opacity: 0.7; pointer-events: none; }

/* =====================================================================
 * Поиск — дропдаун в сайдбаре, состояния, карточки
 * Базовые стили формы и контейнера .search-results приходят из main.css.
 * ===================================================================== */

.search-panel { position: relative; }

.search-dropdown {
	position: absolute;
	top: calc(100% + 8px);
	left: 0;
	right: 0;
	max-height: 480px;
	overflow-y: auto;
	background: #1a1a1a;
	border: 1px solid rgba(255, 255, 255, 0.08);
	border-radius: 12px;
	box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
	z-index: 50;
}
.search-dropdown[hidden] { display: none; }

.search-dropdown__state {
	padding: 16px;
	color: rgba(255, 255, 255, 0.7);
	font-size: 14px;
	text-align: center;
}
.search-dropdown__state--loading { color: rgba(255, 255, 255, 0.5); }
.search-dropdown__state--error   { color: #ff8888; }
.search-dropdown__state--empty   { color: rgba(255, 255, 255, 0.6); }

.search-group { padding: 8px 0; }
.search-group + .search-group { border-top: 1px solid rgba(255, 255, 255, 0.06); }
.search-group__label {
	padding: 6px 16px;
	font-size: 11px;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.45);
}
.search-group__items { display: flex; flex-direction: column; }

.search-result-item {
	display: flex;
	gap: 12px;
	align-items: flex-start;
	padding: 10px 16px;
	color: inherit;
	text-decoration: none;
	transition: background 120ms;
}
.search-result-item:hover,
.search-result-item.is-active {
	background: rgba(255, 255, 255, 0.05);
}
.search-result-item__thumb {
	width: 48px;
	height: 48px;
	border-radius: 8px;
	object-fit: cover;
	flex-shrink: 0;
}
.search-result-item__body { flex: 1; min-width: 0; }
.search-result-item__title {
	margin: 0 0 4px;
	font-size: 14px;
	line-height: 1.3;
	color: #fff;
	overflow: hidden;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
}
.search-result-item__excerpt {
	margin: 0;
	font-size: 12px;
	line-height: 1.4;
	color: rgba(255, 255, 255, 0.55);
	overflow: hidden;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
}
.search-result-item mark,
.search-page__card mark {
	background: rgba(177, 76, 255, 0.25);
	color: inherit;
	padding: 0 2px;
	border-radius: 2px;
}

.search-dropdown__all {
	display: block;
	padding: 12px 16px;
	border-top: 1px solid rgba(255, 255, 255, 0.06);
	color: #b14cff;
	font-size: 13px;
	text-align: center;
	text-decoration: none;
}
.search-dropdown__all:hover { background: rgba(177, 76, 255, 0.08); }

.search-dropdown__recent { padding: 8px 0; }
.search-dropdown__recent-item {
	display: block;
	width: 100%;
	padding: 8px 16px;
	background: transparent;
	border: 0;
	color: rgba(255, 255, 255, 0.8);
	font: inherit;
	text-align: left;
	cursor: pointer;
}
.search-dropdown__recent-item:hover,
.search-dropdown__recent-item.is-active { background: rgba(255, 255, 255, 0.05); }

/* Дропдаун в модалке использует существующий .search-results, но мы хотим там
 * те же подсветки/состояния. */
#modal-search .search-results {
	max-height: 60vh;
	overflow-y: auto;
}
#modal-search .search-results .search-result-item { padding: 14px 16px; }
#modal-search .search-results .search-result-item__title { font-size: 16px; }
#modal-search .search-results .search-result-item__excerpt { font-size: 13px; }

/* =====================================================================
 * Страница полной выдачи /?s=...
 * ===================================================================== */

.search-page { padding: 40px 0 80px; }
.search-page__header { margin-bottom: 24px; }
.search-page__title { margin: 0 0 8px; font-size: 28px; }
.search-page__meta { margin: 0; opacity: 0.6; font-size: 14px; }

.search-page__filters {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-bottom: 28px;
}
.search-page__filter {
	padding: 8px 16px;
	border: 1px solid rgba(255, 255, 255, 0.12);
	border-radius: 999px;
	color: inherit;
	text-decoration: none;
	font-size: 13px;
}
.search-page__filter:hover { background: rgba(255, 255, 255, 0.04); }
.search-page__filter.is-active {
	background: linear-gradient(90deg, #b14cff 0%, #7838ff 100%);
	border-color: transparent;
	color: #fff;
}

.search-page__form {
	display: flex;
	gap: 12px;
	max-width: 560px;
}
.search-page__form .form-control {
	flex: 1;
}

.search-page__results {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
	gap: 20px;
	margin-bottom: 40px;
}
.search-page__card {
	display: flex;
	flex-direction: column;
	background: rgba(255, 255, 255, 0.03);
	border: 1px solid rgba(255, 255, 255, 0.06);
	border-radius: 14px;
	overflow: hidden;
	color: inherit;
	text-decoration: none;
	transition: transform 200ms, border-color 200ms;
}
.search-page__card:hover {
	transform: translateY(-2px);
	border-color: rgba(177, 76, 255, 0.4);
}
.search-page__card-thumb {
	aspect-ratio: 16 / 9;
	overflow: hidden;
}
.search-page__card-thumb img { width: 100%; height: 100%; object-fit: cover; }
.search-page__card-body { padding: 16px; display: flex; flex-direction: column; gap: 8px; }
.search-page__card-type {
	font-size: 11px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.5);
}
.search-page__card-title { margin: 0; font-size: 18px; line-height: 1.3; }
.search-page__card-excerpt {
	margin: 0;
	font-size: 14px;
	opacity: 0.7;
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.search-page__card-date { font-size: 12px; opacity: 0.5; margin-top: auto; }

.search-page__pagination {
	display: flex;
	gap: 6px;
	justify-content: center;
	flex-wrap: wrap;
}
.search-page__pagination .page-numbers {
	padding: 8px 14px;
	border-radius: 8px;
	background: rgba(255, 255, 255, 0.04);
	color: inherit;
	text-decoration: none;
	font-size: 14px;
}
.search-page__pagination .page-numbers.current {
	background: linear-gradient(90deg, #b14cff 0%, #7838ff 100%);
	color: #fff;
}
.search-page__pagination .page-numbers:hover { background: rgba(255, 255, 255, 0.08); }

.search-page__empty {
	padding: 40px;
	text-align: center;
	background: rgba(255, 255, 255, 0.03);
	border-radius: 16px;
}
.search-page__empty-hint { opacity: 0.6; margin-top: 8px; }

/* =====================================================================
 * Kick-чат на combo.conf — статус подключения и read-only подпись
 * ===================================================================== */

.conf-live-chat__readonly {
	margin-top: 10px;
	font-size: 12px;
	color: #888;
}

.conf-live-chat__status {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-bottom: 12px;
	padding: 10px 14px;
	border-radius: 8px;
	font-size: 13px;
	line-height: 1.4;
}
.conf-live-chat__status[hidden] { display: none; }

.conf-live-chat__status--connecting {
	background: rgba(255, 255, 255, 0.04);
	border: 1px solid rgba(255, 255, 255, 0.08);
	color: rgba(255, 255, 255, 0.75);
}
.conf-live-chat__status--connecting::before {
	content: '';
	display: inline-block;
	width: 12px;
	height: 12px;
	border: 2px solid rgba(255, 255, 255, 0.2);
	border-top-color: #b14cff;
	border-radius: 50%;
	animation: combomedia-spin 800ms linear infinite;
	flex-shrink: 0;
}

.conf-live-chat__status--error {
	background: rgba(255, 86, 86, 0.1);
	border: 1px solid rgba(255, 86, 86, 0.3);
	color: #ff9a9a;
}

.conf-live-chat__status-text { flex: 1; }

.conf-live-chat__status-retry {
	padding: 6px 12px;
	background: rgba(255, 255, 255, 0.08);
	border: 1px solid rgba(255, 255, 255, 0.12);
	border-radius: 6px;
	color: inherit;
	font-size: 12px;
	cursor: pointer;
	white-space: nowrap;
}
.conf-live-chat__status-retry:hover { background: rgba(255, 255, 255, 0.14); }

@keyframes combomedia-spin {
	from { transform: rotate(0deg); }
	to   { transform: rotate(360deg); }
}

/* Disabled-стейт textarea в чате (для гостей и непривязанного Kick).
   Сами textarea и button — из верстки, не оверрайдим. */

.conf-live-chat textarea[disabled] {
	opacity: 0.6;
	cursor: not-allowed;
}
.conf-live-chat .btn[disabled] {
	opacity: 0.6;
	cursor: not-allowed;
}

/* =====================================================================
 * Лайк в шапке статьи (article-entry__meta)
 * Интерактивный лайк — это <button>. Сбрасываем дефолтный вид кнопки,
 * чтобы цифра наследовала цвет меты (а не становилась чёрной). При is-liked
 * сердце закрашивается (свап на залитый icon2-liked.svg), цвет цифры НЕ меняется.
 * ===================================================================== */

.article-entry__meta-item--likes {
	background: none;
	border: 0;
	padding: 0;
	margin: 0;
	font: inherit;
	color: inherit;
	cursor: pointer;
}

.article-entry__like-icon--liked { display: none; }

.article-entry__meta-item--likes.is-liked .article-entry__like-icon--default { display: none; }
.article-entry__meta-item--likes.is-liked .article-entry__like-icon--liked { display: inline-block; }

/* =====================================================================
 * Шапка: оверрайды top-cta + ticker
 * - усиливаем полоску top-cta (в макете толще/насыщеннее).
 * - когда плашка скрыта, ticker идёт сразу за header и липнет — добавляем отступ
 *   через adjacent-sibling селектор (срабатывает только когда .top-cta отсутствует).
 * ===================================================================== */

.top-cta {
	border-top-width: 2px;
	border-bottom-width: 2px;
	border-top-color: #E74314;
	border-bottom-color: #E74314;
	background: rgba(231, 67, 20, 0.35);
}

.header + .ticker {
	margin-top: 20px;
}

/* =====================================================================
 * Аватар автора в карточке combo.conf
 * Вёрстка рисует серый круг-плейсхолдер через ::before. При наличии своей
 * аватарки прячем плейсхолдер и показываем реальную картинку того же размера.
 * ===================================================================== */
.playlist-item-author__avatar {
	width: 24px;
	height: 24px;
	border-radius: 50%;
	object-fit: cover;
	flex-shrink: 0;
}
.playlist-item__content .playlist-item-author:has(.playlist-item-author__avatar)::before {
	display: none;
}

/* =====================================================================
 * Видео-блок «Смотреть combo.conf» — постер для YouTube/Kick
 * Вёрстка ставит у `.watch-box__video` background:#000, который перекрывает
 * background-image постера на `.watch-box__screen`. Для embed-режима (youtube/kick)
 * делаем чёрный фон прозрачным — постер становится виден до клика. При клике
 * theme.js вставляет в `.watch-box__video` iframe плеера, который перекрывает всё.
 * Для mp4-режима data-combomedia-embed отсутствует — чёрный фон остаётся
 * (там <video poster=""> сам показывает постер нативно).
 * ===================================================================== */
.watch-box[data-combomedia-embed] .watch-box__video {
	background: transparent;
}

/* MP4-режим: у <video> есть нативный poster, но вёрстка держит плеер
 * `.watch-box__video-player { opacity: 0 }` до класса `.is-playing` — из-за чего
 * ДО клика виден пустой серый бокс `.watch-box__video` (#F7F9F9), а постер
 * скрыт. Выглядит как «видео не добавилось». Показываем плеер (и его постер)
 * сразу; при воспроизведении вёрстка и так держит opacity:1. Эмбеды
 * (youtube/kick) не задеваем — там <video> нет, iframe грузится по клику. */
.watch-box:not([data-combomedia-embed]) .watch-box__video-player {
	opacity: 1;
}

/* =====================================================================
 * Поиск в сайдбаре: убираем дубль empty-state
 * main.js из вёрстки строит свою прототипную панель `.sidebar-search-results`
 * со статикой «Результаты не найдены», которая показывается рядом с нашим
 * AJAX-дропдауном `.search-dropdown` (из search.js). Реальную выдачу даёт
 * search.js — панель вёрстки прячем.
 * ===================================================================== */
.sidebar-search-results {
	display: none !important;
}

/* =====================================================================
 * Карточка новости — многоточие у обрезанного заголовка
 * Вёрстка использует line-clamp: 2 + overflow: hidden, но без text-overflow:
 * ellipsis — поэтому многоточие в конце не появляется. Доводим.
 * ===================================================================== */
.news-card__body div,
.news-card__body h2,
.news-card__body h3,
.news-card__body h4,
.news-card__body h5,
.news-card__body h6 {
	text-overflow: ellipsis;
	word-break: break-word;
}

/* Иконка слева от партнёр-надписи в hero combo.conf — отступ от текста. */
.conf-hero__partner .conf-hero__partner-icon {
	width: 24px;
	height: 24px;
	margin-right: 8px;
	object-fit: contain;
	flex-shrink: 0;
	position: static;
}

/* Спонсоры combo.conf — пагинация reveal'ом по 6 + кнопка «Показать ещё». */
.conf-sponsor-card--hidden {
	display: none !important;
}

/* Свечение `.conf-sponsor-card::after` уходит ниже карточки (bottom: -7px + blur:6px).
   У нижнего ряда оно подрезалось краем секции — даём грид-сетке нижний паддинг. */
.conf-sponsors-grid {
	padding-bottom: 24px;
}

/* Карточка-ссылка в теле статьи: ограничиваем ширину заголовка по макету. */
.article-link-card__title {
	max-width: 380px;
}

/* Заголовок формы ответа: «Комментарий к записи %nick% Отменить ответ» — отступ перед cancel-link. */
.comment-reply-title small,
.comment-reply-title #cancel-comment-reply-link {
	margin-left: 12px;
}
/* .conf-sponsors__more {
    display: block;
    margin: 28px auto 0;
    padding: 8px 16px;
    background: none;
    border: 0;
    color: #8c8b8b;
    font-size: 14px;
    cursor: pointer;
    transition: color 0.15s ease;
}
.conf-sponsors__more:hover,
.conf-sponsors__more:focus-visible {
    color: #e5ebee;
} */

/* Фоновое видео в hero combo.conf — позиционируется как .conf-section--hero img. */
.conf-hero__bg-video {
	position: absolute;
	right: 0;
	bottom: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: right bottom;
	pointer-events: none;
}
@media (max-width: 639px) {
	.conf-hero__bg-video {
		object-fit: cover;
		object-position: 80% 100%;
	}
}


/* ===========================================================
   Соц-вход: официальная видимая кнопка Telegram (Login Widget)
   (cross-origin iframe — стилизуется только через атрибуты виджета)
   =========================================================== */
.auth-modal__socials {
	flex-wrap: wrap;
}
.auth-tg-login {
	display: inline-flex;
	align-items: center;
	line-height: 0;
}
.auth-tg-login iframe {
	border: 0 !important;
	margin: 0 !important;
	vertical-align: middle;
}


/* ===========================================================
   Аватар автора в карточке новости (MCF-поле author_avatar).
   Опционален: если аватар задан — реальное фото вместо серого
   кружка-плейсхолдера (::before из вёрстки), иначе — кружок как есть.
   =========================================================== */
.news-card__author--has-avatar::before {
	display: none;
}
.news-card__author-avatar {
	width: 24px;
	height: 24px;
	border-radius: 50%;
	object-fit: cover;
	flex: 0 0 auto;
}


/* ===========================================================
   Combo.conf — спикеры: видео-превью на мобиле.
   В main.css есть .conf-speaker-row__mobile-video(-player) + JS-ветка
   (IntersectionObserver играет при попадании в вьюпорт), но грид ряда в
   @media(max-width:900px) свёрстан с невалидным grid-template-areas
   (нет ; → значение отбрасывается, gap теряется). Не трогаем main.css —
   перекрываем корректным гридом здесь. Разметку рендерит
   template-parts/conf-speakers.php.
   =========================================================== */
@media (max-width: 900px) {
	.conf-speaker-row {
		grid-template-columns: 100px minmax(0, 1fr) auto;
		grid-template-areas:
			"time topic topic"
			"video video video"
			"person person social";
		gap: 14px 16px;
	}
	.conf-speaker-row__mobile-video {
		grid-area: video;
	}
	
	.header-user__dropdown {
		top: -35px;
		left: 60px;
		right: unset;
	}
}


/* =====================================================================
 * Telegram Login Widget в модалках входа/регистрации выдаёт внутри своего
 * iframe надпись «Bot domain invalid», пока боту не задан домен (/setdomain
 * в @BotFather для боевого домена). На тест-стенде temp125 домен не
 * зарегистрирован → прячем виджет, чтобы ошибка не отображалась. Статичная
 * иконка Telegram (.auth-social--tg) остаётся как в вёрстке.
 * ⚠️ Когда сайт переедет на боевой домен И домен будет задан в BotFather —
 * убрать это правило, чтобы вернуть рабочую кнопку «Log in with Telegram».
 * ===================================================================== */
.auth-tg-login {
	display: none !important;
}


/* =====================================================================
 * Активный пункт нижней (моб.) и футер-навигации — оранжевая иконка.
 * Класс `active` вешается на `.footer-nav__item` в footer.php по текущей
 * странице (combomedia_nav_item_is_active). В main.css оранжевая иконка
 * (--hover) есть только для `:hover` — здесь зеркалим её для `.active`.
 * ===================================================================== */
.footer-nav__item.active .footer-nav__icon--default {
	opacity: 0;
}
.footer-nav__item.active .footer-nav__icon--hover {
	opacity: 1;
}


/* =====================================================================
 * Аватар автора в «Лучших материалах» (MCF-поле author_avatar).
 * Как в карточке новостей: если аватар задан — фото вместо серого
 * кружка-плейсхолдера (::before из вёрстки), иначе кружок как есть.
 * ===================================================================== */
.materials-slide__author--has-avatar::before {
	display: none;
}
.materials-slide__author-avatar {
	width: 24px;
	height: 24px;
	border-radius: 50%;
	object-fit: cover;
	flex: 0 0 auto;
}


/* =====================================================================
 * Карточки «Обучение» — отдельный фон для мобильных.
 * Если задан MCF-поле «Фон (моб.)», training-card.php выводит его в inline
 * CSS-переменную --card-bg-mobile (десктопный фон остаётся background-image).
 * На ≤900px применяем мобильный фон. Разметку/данные даёт education-feed.php.
 * ===================================================================== */
@media (max-width: 900px) {
	.training-card[style*="--card-bg-mobile"] {
		background-image: var(--card-bg-mobile) !important;
	}
}


/* =====================================================================
 * Combo.conf: меню в подвале — в два столбца (4 пункта conf-меню:
 * Combo.media / Спонсоры / Трансляция / Лайнап). На обычных страницах
 * футер-меню остаётся 3-колоночным (из main.css).
 * ===================================================================== */
.page-combo-conf .footer-nav--desktop {
	grid-template-columns: repeat(2, max-content);
}
