main {
	padding-bottom: 80px;
}

.sp-main {
	flex: 1;
}

.index-is-hidden {
	display: none !important;
}

.v-footer-brand .v-logo-brand--inverse {
	color: #fff;
}

/* Shared editorial header (.sp-header*) вынесен в style-v4.css.
   Здесь — только индекс-специфичные блоки: hero, cat-grid editorial,
   drawer (open via burger), CTA close. */
/* ── DRAWER (mobile) ───────────────────────────────────────────
   По spec §2 бургер открывает выдвижное меню разделов. Скрыт на desktop. */
.sp-drawer {
	position: fixed;
	inset: 0;
	z-index: 200;
	display: flex;
	pointer-events: none;
	overscroll-behavior: none;
}

.sp-drawer[hidden] {
	display: none;
}

.sp-drawer-back {
	position: absolute;
	inset: 0;
	background: rgba(17, 17, 17, .54);
	opacity: 0;
	transition: opacity .28s cubic-bezier(.2, .8, .2, 1);
	pointer-events: auto;
}

.sp-drawer.open .sp-drawer-back {
	opacity: 1;
}

.sp-drawer-panel {
	position: relative;
	z-index: 1;
	width: min(320px, 86vw);
	height: 100dvh;
	max-height: 100dvh;
	background: #fff;
	border-right: 1px solid var(--border);
	transform: translateX(-100%);
	transition: transform .28s cubic-bezier(.2, .8, .2, 1);
	display: flex;
	flex-direction: column;
	overflow: hidden;
	pointer-events: auto;
	overscroll-behavior: contain;
}

.sp-drawer.open .sp-drawer-panel {
	transform: translateX(0);
}

.sp-drawer-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 18px 20px;
	border-bottom: 1px solid var(--border);
}

.sp-drawer-title {
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--text);
}

.sp-drawer-close {
	width: 36px;
	height: 36px;
	border: 1px solid var(--border);
	background: #fff;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	padding: 0;
	color: var(--text);
}

.sp-drawer-close svg {
	width: 16px;
	height: 16px;
	display: block;
}

.sp-drawer-close:hover {
	border-color: var(--accent);
	color: var(--accent);
}

.sp-drawer-nav {
	flex: 1 1 auto;
	min-height: 0;
	padding: 8px 0;
	display: flex;
	flex-direction: column;
	overflow-y: auto;
	overscroll-behavior: contain;
	-webkit-overflow-scrolling: touch;
}

.sp-drawer-nav a {
	position: relative;
	padding: 14px 20px;
	font-family: var(--serif);
	font-size: 17px;
	font-weight: 700;
	color: var(--text);
	text-decoration: none;
	border-bottom: 1px solid var(--border);
	transition: color var(--tr);
}

.sp-drawer-nav a:hover {
	color: var(--accent);
}

.sp-drawer-toggle {
	width: 100%;
	padding: 14px 20px;
	border: 0;
	border-bottom: 1px solid var(--border);
	background: #fff;
	display: flex;
	align-items: center;
	justify-content: space-between;
	font-family: var(--serif);
	font-size: 18px;
	font-weight: 700;
	color: var(--text);
	cursor: pointer;
	text-align: left;
	transition: color var(--tr);
}

.sp-drawer-toggle:hover,
.sp-drawer-toggle[aria-expanded="true"] {
	color: var(--accent);
}

.sp-drawer-plus {
	position: relative;
	width: 14px;
	height: 14px;
	flex: 0 0 auto;
}

.sp-drawer-plus::before,
.sp-drawer-plus::after {
	content: '';
	position: absolute;
	left: 0;
	top: 6px;
	width: 14px;
	height: 1.5px;
	background: currentColor;
	transition: transform .18s ease;
}

.sp-drawer-plus::after {
	transform: rotate(90deg);
}

.sp-drawer-toggle[aria-expanded="true"] .sp-drawer-plus::after {
	transform: rotate(0);
}

.sp-drawer-content {
	display: flex;
	flex-direction: column;
	background: #fff;
}

.sp-drawer-content[hidden] {
	display: none;
}

.sp-drawer-content a {
	padding: 12px 20px 12px 32px;
	font-family: var(--sans);
	font-size: 14px;
	font-weight: 600;
}

.sp-drawer-content .sp-drawer-subhead {
	display: block;
	margin: 14px 20px 2px 32px;
	padding: 12px 0 6px;
	border-top: 1px solid var(--border);
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--text);
}

.sp-drawer-content .sp-drawer-subhead:first-child {
	margin-top: 8px;
	border-top: 0;
}

/* Заголовки секций (Рецепты / Ингредиенты / Ещё) и подгрупп ингредиентов
   (Овощи / Бобовые) внутри drawer — не ссылки, видны сразу. */
.sp-drawer-section {
	padding: 16px 20px 6px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--text-3);
}

.sp-drawer-subhead {
	padding: 12px 20px 2px;
	font-size: 10px;
	font-weight: 800;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--text);
}

/* Поиск рецептов в drawer — NYT-clean; submit ведёт на category.html?q=...
   (header-nav.js). Отдельные классы, не конфликтуют с #hero-search. */
.sp-drawer-search {
	position: relative;
	display: flex;
	align-items: stretch;
	margin: 12px 20px 10px;
	border: 1px solid var(--border);
	background: #fff;
}

.sp-drawer-search:focus-within {
	border-color: var(--accent);
}

.sp-drawer-search-icon {
	position: absolute;
	left: 13px;
	top: 50%;
	transform: translateY(-50%);
	width: 17px;
	height: 17px;
	color: var(--text-3);
	pointer-events: none;
}

.sp-drawer-search-input {
	flex: 1 1 auto;
	min-width: 0;
	border: 0;
	background: none;
	padding: 11px 52px 11px 40px;
	font-family: var(--sans);
	font-size: 15px;
	color: var(--text);
}

.sp-drawer-search-input::placeholder {
	color: var(--text-3);
}

.sp-drawer-search-input:focus {
	outline: none;
}

.sp-drawer-search-submit {
	position: absolute;
	top: 50%;
	right: 6px;
	transform: translateY(-50%);
	width: 36px;
	height: 36px;
	border: 0;
	background: var(--text);
	color: #fff;
	font-size: 18px;
	line-height: 1;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	transition: background var(--tr);
}

.sp-drawer-search-submit:hover,
.sp-drawer-search-submit:active,
.sp-drawer-search-submit.is-submitting {
	background: var(--accent);
}

/* Active: вертикальная оранжевая полоска слева (mobile-drawer паттерн,
   перекликается с accent-рельсом в user-dropdown). */
.sp-drawer-nav a.active {
	color: var(--accent);
}

.sp-drawer-nav a.active::before {
	content: '';
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 3px;
	background: var(--accent);
}

/* Stagger reveal: пункты «вытекают» сверху вниз при открытии drawer.
   Keyframe (не transition) — чтобы delay не мешал hover-переходам. */
.sp-drawer-nav a {
	opacity: 0;
}

.sp-drawer.open .sp-drawer-nav a {
	animation: drawerItemIn .32s cubic-bezier(.2, .8, .2, 1) forwards;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(1) {
	animation-delay: 100ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(2) {
	animation-delay: 140ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(3) {
	animation-delay: 180ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(4) {
	animation-delay: 220ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(5) {
	animation-delay: 260ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(6) {
	animation-delay: 300ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(7) {
	animation-delay: 340ms;
}

.sp-drawer.open .sp-drawer-nav a:nth-child(n+8) {
	animation-delay: 380ms;
}

@keyframes drawerItemIn {
	from {
		opacity: 0;
		transform: translateX(-8px);
	}

	to {
		opacity: 1;
		transform: translateX(0);
	}
}

@media (prefers-reduced-motion: reduce) {

	.sp-drawer-back,
	.sp-drawer-panel {
		transition-duration: .01ms !important;
	}

	.sp-drawer.open .sp-drawer-nav a {
		animation: none !important;
		opacity: 1 !important;
	}
}

/* CTA close-крестик — spec §3.5 */
.sp-cta-strip {
	position: relative;
}

.sp-cta-close {
	position: absolute;
	top: 10px;
	right: 10px;
	width: 28px;
	height: 28px;
	background: transparent;
	border: 1px solid var(--border);
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	font-size: 14px;
	line-height: 1;
	color: var(--text-2);
	padding: 0;
}

.sp-cta-close:hover {
	border-color: var(--accent);
	color: var(--accent);
}

/* ── HERO ──────────────────────────────────────────────────── */
.sp-hero {
	display: grid;
	grid-template-columns: 1.2fr 1fr;
	gap: 48px;
	align-items: center;
	padding: 56px 0 64px;
	background: #fff;
	/* .anim (fadeUp, fill-mode both) оставляет transform: translateY(0) →
	   постоянный stacking-контекст. Без z-index дропдаун поиска (z:1001)
	   заперт внутри hero и его перекрывает картинка #new-block. */
	position: relative;
	z-index: 20;
}

/* Desktop (≥1024px): умеренно уплотняем вертикальный ритм главной — hero
   ближе к нижней навигации. Композиция, размеры заголовка/картинки и вид
   hero-search не меняются; планшет и mobile (≤767px) не затрагиваются.
   Парный override для .sp-new-block — ниже его базового правила. */
@media (min-width: 1024px) {
	.sp-hero {
		padding: 20px 0 22px;
	}
}

.sp-hero-text {
	min-width: 0;
	position: relative;
}

.sp-hero-favorites {
	display: none;
	width: 42px;
	height: 42px;
	align-items: center;
	justify-content: center;
	border: 1px solid var(--border);
	background: #fff;
	color: var(--text);
	text-decoration: none;
	transition: border-color .18s ease, color .18s ease;
}

.sp-hero-favorites svg {
	width: 19px;
	height: 19px;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.7;
	stroke-linejoin: round;
}

@media (hover: hover) and (pointer: fine) {
	.sp-hero-favorites:hover {
		color: var(--accent);
		border-color: var(--accent);
	}
}

.sp-hero-eyebrow {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--accent);
	margin-bottom: 18px;
}

.sp-hero-title {
	font-family: var(--serif);
	font-size: clamp(34px, 5.4vw, 58px);
	font-weight: 700;
	line-height: 1.02;
	letter-spacing: -.02em;
	color: var(--text);
	margin: 0 0 18px;
}

.sp-hero-sub {
	font-size: 18px;
	line-height: 1.55;
	font-weight: 500;
	color: var(--text);
	max-width: 50ch;
	margin: 0 0 24px;
}

.sp-hero-aside {
	display: flex;
	flex-direction: column;
	min-width: 0;
	text-decoration: none;
	color: inherit;
}

.sp-hero-media {
	aspect-ratio: 4/3;
	background: var(--bg-alt);
	overflow: hidden;
	position: relative;
}

.sp-hero-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform .6s ease;
}

.sp-hero-aside:not(.locked):hover .sp-hero-media img {
	transform: scale(1.02);
}

/* Locked hero — клик уходит в showLockedMsg, визуально полупрозрачный
   слой поверх фото без иконки замка (замок только внутри бейджа). */
.sp-hero-aside.locked {
	cursor: pointer;
	opacity: 1;
}

.sp-hero-aside.locked .sp-hero-media::after {
	content: '';
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .18);
	z-index: 1;
}

.sp-hero-caption {
	margin-top: 14px;
	font-size: 11px;
	font-weight: 600;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--text-3);
	transition: opacity .25s ease;
	/* Резерв под 2 строки caption (ярлык + название) — иначе при появлении
	   текста hero подрастает и левая колонка/поиск дёргаются. */
	line-height: 17px;
	min-height: 44px;
}

/* На узких ширинах длинное название переносится на 2 строки — увеличиваем
   резерв высоты, чтобы hero не прыгал после loading-state. */
@media (max-width: 1023px) {
	.sp-hero-caption {
		min-height: 68px;
	}
}

/* Префикс-ярлык в подписи hero («Сезонный рецепт») — отдельной строкой,
   акцентом, чтобы связать крупное фото с рубрикой, не вешая плашку. */
.sp-hero-caption .sp-cap-tag {
	display: block;
	color: var(--accent);
}

/* Название сезонного рецепта — отдельная строка, serif, тёмное, обычный
   регистр (сброс uppercase родителя), как небольшой editorial-заголовок. */
.sp-hero-caption .sp-cap-title {
	display: block;
	margin-top: 3px;
	font-family: var(--serif);
	color: var(--text);
	text-transform: none;
	letter-spacing: normal;
	font-weight: 600;
	font-size: 18px;
	line-height: 1.25;
}

@media (hover: hover) and (pointer: fine) {
	.sp-hero-aside:not(.is-loading):not(.locked):hover .sp-hero-caption {
		opacity: .55;
	}
}

/* Loading-state для hero-aside: media и caption уже занимают своё
   место (aspect-ratio + min-height), а shimmer делает их визуально
   «загружающимися». renderHero() снимает .is-loading после fill. */
.sp-hero-aside.is-loading .sp-hero-media {
	background: linear-gradient(90deg, #efe9e0 0%, #f6f2eb 50%, #efe9e0 100%);
	background-size: 200% 100%;
	animation: spShimmer 1.4s linear infinite;
}

.sp-hero-aside.is-loading .sp-hero-caption {
	background: linear-gradient(90deg, #efe9e0 0%, #f6f2eb 50%, #efe9e0 100%);
	background-size: 200% 100%;
	animation: spShimmer 1.4s linear infinite;
	border-radius: 4px;
	max-width: 60%;
}

/* Данные и подпись могут быть готовы раньше самого фото. На медленной
   сети держим явное loading-состояние media до фактического load/error. */
.sp-hero-aside.is-image-loading .sp-hero-media {
	background: linear-gradient(90deg, #efe9e0 0%, #f6f2eb 50%, #efe9e0 100%);
	background-size: 200% 100%;
	animation: spShimmer 1.4s linear infinite;
}

.sp-hero-loading-status {
	position: absolute;
	inset: auto 12px 12px;
	z-index: 2;
	width: fit-content;
	padding: 6px 9px;
	background: rgba(255, 255, 255, .92);
	color: var(--text-2);
	font-size: 10px;
	font-weight: 700;
	letter-spacing: .04em;
}

/* Hero search — flatten под editorial */
.sp-hero .hero-search {
	margin: 0;
	max-width: 560px;
	position: relative;
	display: block;
}

.sp-hero .hero-search-input {
	border-radius: 0;
	border: 1px solid var(--border);
	box-shadow: none;
	padding: 18px 60px 18px 52px;
	background: #fff;
	color: var(--text);
}

.sp-hero .hero-search-input::placeholder {
	color: var(--text-3);
}

.sp-hero .hero-search-input:focus {
	border-color: var(--accent);
	box-shadow: 0 0 0 3px rgba(232, 64, 10, .10);
}

/* В editorial-режиме иконка нейтральная, а не оранжевая. */
.sp-hero .hero-search-icon {
	color: var(--text-3);
	left: 18px;
	width: 18px;
	height: 18px;
}

/* Компактная чёрная квадратная кнопка submit (spec: editorial flat).
   Не во всю высоту поля — фиксированный квадрат, центрирован по вертикали. */
.sp-hero .hero-search-submit {
	position: absolute;
	top: 50%;
	right: 8px;
	transform: translateY(-50%);
	width: 36px;
	height: 36px;
	background: var(--text);
	color: #fff;
	border: none;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	padding: 0;
	transition: background var(--tr);
}

.sp-hero .hero-search-submit:hover {
	background: var(--accent);
}

.sp-hero .hero-search-results {
	border-radius: 0;
}

.sp-guest-onboarding {
	display: none;
	margin: 0 0 42px;
	padding: clamp(28px, 5vw, 58px) 0 10px;
	border-top: 2px solid var(--text);
	border-bottom: 1px solid var(--border);
	background: #fbfaf7;
}

.sp-guest-tour-preview .sp-guest-onboarding,
.sp-guest-onboarding-active .sp-guest-onboarding {
	display: block;
}

.sp-guest-tour-preview .sp-hero,
.sp-guest-onboarding-active .sp-hero {
	display: none;
}

.sp-guest-onboarding-inner {
	max-width: 1120px;
	margin: 0 auto;
}

.sp-guest-welcome {
	display: grid;
	grid-template-columns: minmax(260px, 360px) minmax(0, 1fr);
	gap: clamp(30px, 5vw, 64px);
	align-items: center;
	margin-bottom: clamp(34px, 5vw, 58px);
}

.sp-guest-photo {
	width: 100%;
	aspect-ratio: 3 / 4;
	object-fit: cover;
	object-position: center;
	border: 1px solid var(--border);
	box-shadow: 0 18px 42px rgba(0, 0, 0, .08);
}

.sp-guest-kicker {
	margin: 0 0 12px;
	color: var(--accent);
	font-size: 14px;
	font-weight: 800;
	letter-spacing: .16em;
	text-transform: uppercase;
}

.sp-guest-title {
	margin: 0 0 10px;
	font-family: "Cormorant Garamond", Georgia, serif;
	font-size: clamp(42px, 5vw, 58px);
	font-weight: 600;
	line-height: .98;
	letter-spacing: -.02em;
}

.sp-guest-lead {
	margin: 0 0 18px;
	max-width: 680px;
	font-family: var(--sans);
	font-size: clamp(18px, 1.9vw, 22px);
	font-weight: 600;
	line-height: 1.4;
	letter-spacing: -.015em;
	color: var(--text);
}

.sp-guest-lead span {
	display: block;
}

.sp-guest-copy {
	margin: 0;
	max-width: 68ch;
	color: var(--text-2);
	font-size: clamp(15px, 1.3vw, 17px);
	line-height: 1.72;
}

.sp-guest-copy+.sp-guest-copy {
	margin-top: 10px;
}

.sp-guest-sign {
	margin: 22px 0 0;
	font-family: "Cormorant Garamond", Georgia, serif;
	font-size: 21px;
	font-weight: 600;
	line-height: 1.25;
	color: var(--text);
}

.sp-guest-handle {
	display: block;
	margin-top: 3px;
	font-family: var(--sans);
	font-size: 12px;
	font-weight: 800;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--accent);
}

.sp-how-head {
	padding-top: 28px;
	border-top: 2px solid var(--text);
	margin-bottom: 18px;
}

.sp-how-kicker {
	margin: 0 0 8px;
	color: var(--accent);
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .18em;
	text-transform: uppercase;
}

.sp-how-title {
	margin: 0;
	font-family: var(--serif);
	font-size: clamp(32px, 4vw, 50px);
	line-height: 1;
	letter-spacing: 0;
}

.sp-how-copy {
	margin: 10px 0 0;
	max-width: 640px;
	color: var(--text-2);
	font-size: 16px;
	line-height: 1.55;
}

.sp-how-cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 46px;
	padding: 0 20px;
	background: var(--text);
	color: #fff;
	border: 1px solid var(--text);
	text-decoration: none;
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .12em;
	text-transform: uppercase;
	white-space: nowrap;
}

.sp-how-foot {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 10px;
	justify-content: center;
	margin: 22px 0 34px;
}

.sp-how-foot .sp-how-cta {
	min-width: min(360px, 100%);
}

.sp-how-dismiss {
	padding: 3px 6px;
	border: 0;
	background: transparent;
	color: var(--text-2);
	font: inherit;
	font-size: 12px;
	font-weight: 600;
	text-decoration: underline;
	text-decoration-color: transparent;
	text-underline-offset: 3px;
	cursor: pointer;
	transition: color .2s ease, text-decoration-color .2s ease;
}

.sp-how-dismiss:hover {
	color: var(--text);
	text-decoration-color: currentColor;
}

.sp-how-dismiss:focus-visible,
.sp-guest-tour-reopen:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 3px;
}

.sp-guest-title:focus {
	outline: 2px solid var(--accent);
	outline-offset: 4px;
}

.sp-guest-tour-reopen {
	display: inline-flex;
	margin-top: 12px;
	padding: 3px 0;
	border: 0;
	background: transparent;
	color: var(--text);
	font: inherit;
	font-size: 12px;
	font-weight: 600;
	text-decoration: none;
	cursor: pointer;
	transition: color .2s ease, text-decoration-color .2s ease;
}

.sp-guest-tour-reopen:hover {
	color: var(--accent);
	text-decoration-color: var(--accent);
}

.sp-how-grid {
	display: grid;
	grid-template-columns: repeat(5, minmax(190px, 1fr));
	gap: 14px;
	margin-bottom: 0;
}

.sp-how-card {
	display: grid;
	grid-template-rows: auto 1fr;
	min-height: 360px;
	background: #fff;
	border: 1px solid var(--border);
	overflow: hidden;
}

.sp-how-visual {
	position: relative;
	min-height: 150px;
	background: #f3eee7;
	border-bottom: 1px solid var(--border);
	overflow: hidden;
}

.sp-how-body {
	padding: 18px;
}

.sp-how-step {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	margin-bottom: 14px;
	background: var(--text);
	color: #fff;
	font-size: 12px;
	font-weight: 800;
}

.sp-how-card h3 {
	margin: 0 0 9px;
	font-family: var(--serif);
	font-size: 25px;
	line-height: 1.02;
	letter-spacing: 0;
	overflow-wrap: anywhere;
	hyphens: auto;
}

.sp-how-card p {
	margin: 0;
	color: var(--text-2);
	font-size: 14px;
	line-height: 1.55;
}

.sp-how-search {
	position: absolute;
	left: 10px;
	right: 10px;
	top: 24px;
	height: 48px;
	background: #fff;
	border: 1px solid var(--border);
	box-shadow: 0 8px 22px rgba(0, 0, 0, .05);
}

.sp-how-search::after {
	content: '→';
	position: absolute;
	right: 6px;
	top: 9px;
	width: 30px;
	height: 30px;
	background: var(--text);
	color: #fff;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 18px;
	line-height: 1;
	font-family: var(--font);
}

.sp-how-search span {
	position: absolute;
	left: 34px;
	right: 32px;
	top: 16px;
	height: auto;
	color: var(--text-3);
	font-size: 10px;
	line-height: 1.2;
	white-space: nowrap;
	overflow: hidden;
}

.sp-how-search svg {
	position: absolute;
	left: 14px;
	top: 15px;
	width: 16px;
	height: 16px;
	color: var(--text-3);
}

.sp-how-chip {
	position: absolute;
	left: 18px;
	bottom: 18px;
	padding: 8px 12px;
	background: #fff;
	border: 1px solid var(--text);
	font-size: 10px;
	font-weight: 800;
	letter-spacing: .12em;
	text-transform: uppercase;
}

.sp-how-balance {
	position: absolute;
	inset: 18px;
	background: #fff;
	border: 1px solid var(--border);
	padding: 16px;
}

.sp-how-bar {
	height: 10px;
	background: #efe9df;
	margin-bottom: 14px;
	overflow: hidden;
}

.sp-how-bar span {
	display: block;
	height: 100%;
	width: 74%;
	background: var(--accent);
}

.sp-how-check {
	display: grid;
	grid-template-columns: 8px 1fr;
	gap: 9px;
	align-items: center;
	margin-top: 11px;
	font-size: 10px;
	font-weight: 800;
	letter-spacing: .08em;
	text-transform: uppercase;
}

.sp-how-check i {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--accent);
}

.sp-how-plate {
	position: absolute;
	left: 50%;
	top: 50%;
	width: 98px;
	height: 98px;
	transform: translate(-50%, -50%);
}

.sp-how-plate-svg {
	width: 100%;
	height: 100%;
	display: block;
}

.sp-how-list {
	position: absolute;
	inset: 18px;
	background: #fff;
	border: 1px solid var(--border);
	padding: 16px;
}

.sp-how-item {
	display: grid;
	grid-template-columns: 17px 1fr;
	gap: 9px;
	align-items: center;
	min-height: 30px;
	border-bottom: 1px solid var(--border);
	color: var(--text-2);
	font-size: 13px;
}

.sp-how-item i {
	width: 15px;
	height: 15px;
	border: 1px solid var(--text);
}

.sp-how-item:nth-child(2) i {
	background: var(--accent);
	box-shadow: inset 0 0 0 3px #fff;
}

.sp-how-message {
	position: absolute;
	inset: 18px;
	background: #fff;
	border: 1px solid var(--border);
	padding: 16px;
}

.sp-how-tabs {
	display: flex;
	margin-bottom: 14px;
	border: 1px solid var(--text);
}

.sp-how-tabs span {
	flex: 1;
	padding: 8px 6px;
	text-align: center;
	font-size: 9px;
	font-weight: 800;
	letter-spacing: .08em;
	text-transform: uppercase;
}

.sp-how-tabs span:first-child {
	background: var(--text);
	color: #fff;
}

.sp-how-field {
	height: 58px;
	border: 1px solid var(--border);
	background: linear-gradient(#f7f4ef, #f7f4ef) 14px 16px / 72% 6px no-repeat,
		linear-gradient(#f7f4ef, #f7f4ef) 14px 32px / 52% 6px no-repeat;
}

@keyframes spHowFloat {

	0%,
	100% {
		transform: translateY(0);
	}

	50% {
		transform: translateY(-7px);
	}
}

@keyframes spHowGrow {

	0%,
	100% {
		width: 48%;
	}

	50% {
		width: 88%;
	}
}

@keyframes spHowPlate {

	0%,
	100% {
		transform: translate(-50%, -50%) scale(1);
	}

	50% {
		transform: translate(-50%, -50%) scale(1.06);
	}
}

@keyframes spHowTick {

	0%,
	45%,
	100% {
		transform: scale(1);
	}

	60% {
		transform: scale(1.18);
	}
}

@media (max-width: 1180px) {
	.sp-how-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.sp-how-card {
		min-height: 320px;
	}
}

@media (max-width: 767px) {
	.sp-guest-onboarding {
		padding: 22px 18px 8px;
	}

	.sp-guest-welcome {
		grid-template-columns: 1fr;
		gap: 18px;
	}

	.sp-guest-photo {
		width: min(320px, 100%);
	}

	.sp-how-cta {
		width: 100%;
	}

	.sp-how-foot {
		margin: 18px 0 30px;
	}

	.sp-how-grid {
		grid-template-columns: 1fr;
	}

	.sp-how-card {
		min-height: 0;
	}

	.sp-how-visual {
		min-height: 150px;
	}

	.sp-guest-lead span {
		display: block;
	}

	.sp-how-search span {
		font-size: 12px;
	}
}

/* ── Категории — editorial overrides only on homepage ───── */
/* Full-bleed cream-полоса под всю секцию (заголовок + фильтры + сетка).
   box-shadow + clip-path растягивают фон до краёв viewport
   без vw-трюков (не ломает скролл при наличии скроллбара). */
.sp-home .sp-cats-section {
	background: var(--bg-alt);
	box-shadow: 0 0 0 100vmax var(--bg-alt);
	clip-path: inset(0 -100vmax);
	padding-block: 40px;
}

.sp-home .cat-grid {
	grid-template-columns: repeat(4, 1fr);
	gap: 22px;
}

.sp-home .cat-card {
	border-radius: 0;
	background: #fffdf8;
	border: 1px solid #ebe2d7;
}

@media (hover: hover) {
	.sp-home .cat-card:not(.locked):hover {
		border-color: #d7c7b8;
		box-shadow: 0 10px 26px rgba(28, 22, 16, .06);
		transform: translateY(-2px);
	}
}

.sp-home .cat-icon-wrap {
	border-radius: 0;
}

.sp-home .cat-body {
	padding: 16px 16px 17px;
}

.sp-home .cat-name {
	font-family: var(--serif);
	font-size: 18px;
	font-weight: 700;
	line-height: 1.2;
	color: var(--text);
	margin-bottom: 4px;
}

.sp-home .cat-desc {
	font-size: 12px;
	color: var(--text-2);
	line-height: 1.4;
}

.sp-home .cat-count {
	font-size: 10px;
	font-weight: 700;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--text-3);
	margin-top: 8px;
}

.sp-cats-head {
	display: grid;
	grid-template-columns: max-content minmax(0, 1fr);
	align-items: center;
	justify-content: flex-start;
	gap: 24px;
	margin-bottom: 10px;
	padding-bottom: 8px;
	border-bottom: 1px solid var(--text);
}

.sp-cats-head .sp-sec-title {
	margin: 0;
	flex-shrink: 0;
}

/* Editorial inline filters inside cats-head — плоско, без рамки/фона.
   Hover/active state унифицирован с .cat-page (см. category.html):
   прозрачные чипы → var(--accent) на hover, активный — оранжевая подчёркивающая линия. */
.sp-home .sp-cats-head .filter-outer {
	background: none;
	border: none;
	border-radius: 0;
	padding: 0;
	margin: 0;
	display: flex;
	align-items: center;
	flex: 1 1 auto;
	min-width: 0;
}

.sp-home .sp-cats-head .filter-scroll-wrap {
	flex: 1;
	overflow-x: auto;
	min-width: 0;
}

.sp-home .sp-cats-head .filter-bar {
	justify-content: flex-end;
	gap: 0;
	flex-wrap: nowrap;
	align-items: center;
}

.sp-home .sp-cats-head .filter-chip,
.sp-home .sp-cats-head .fgroup-btn {
	position: relative;
	background: transparent;
	color: var(--text-2);
	padding: 6px 12px;
	border-radius: 0;
	font-size: 12px;
	font-weight: 600;
	letter-spacing: .02em;
	transition: color .15s;
}

@media (hover: hover) {

	.sp-home .sp-cats-head .filter-chip:hover,
	.sp-home .sp-cats-head .fgroup-btn:hover {
		background: transparent;
		color: var(--accent);
		transform: none;
	}
}

.sp-home .sp-cats-head .filter-chip.on,
.sp-home .sp-cats-head .fgroup-btn.has-value {
	background: transparent;
	color: var(--text);
	font-weight: 700;
}

.sp-home .sp-cats-head .filter-chip.on::after,
.sp-home .sp-cats-head .fgroup-btn.has-value::after {
	content: '';
	position: absolute;
	left: 12px;
	right: 12px;
	bottom: -1px;
	height: 2px;
	background: var(--accent);
}

/* «Популярные»: звезда — самостоятельная декоративная часть. Не используем
   общий ::after кнопки, чтобы её метрики не влияли на линию фильтра. */
.sp-home .sp-cats-head .filter-chip[data-f="popular"].on::after {
	display: none;
}
.sp-home .sp-cats-head .filter-chip[data-f="popular"] .filter-chip__label {
	display: inline-block;
	position: relative;
}
.sp-home .sp-cats-head .filter-chip[data-f="popular"].on .filter-chip__label::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	bottom: -6px;
	height: 2px;
	background: var(--accent);
}
.sp-home .sp-cats-head .filter-chip[data-f="popular"] .filter-chip__star {
	display: inline-block;
	margin-right: 4px;
}

.sp-home .sp-cats-head .filter-sep {
	width: 1px;
	height: 16px;
	background: var(--border);
	margin: 0 6px;
}

.sp-home .sp-cats-head .filter-clear {
	padding: 6px 0 6px 14px;
	border-left: 1px solid var(--border);
	border-top: none;
	width: auto;
	text-align: left;
	color: var(--accent);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
}

.sp-how-card.is-scroll-animated .sp-how-chip {
	animation: spHowChipOnce .65s cubic-bezier(.2, .75, .25, 1) both;
}

.sp-how-card.is-scroll-animated .sp-how-bar span {
	animation: spHowBarOnce .9s cubic-bezier(.2, .75, .25, 1) both;
}

@keyframes spHowChipOnce {
	from { opacity: 0; transform: translateY(12px); }
	to { opacity: 1; transform: translateY(0); }
}

@keyframes spHowBarOnce {
	from { transform: scaleX(0); transform-origin: left; }
	to { transform: scaleX(1); transform-origin: left; }
}

.sp-home .filter-more-toggle {
	display: none;
}

.sp-home .filter-more {
	display: contents;
}

/* Status row — «55 рецептов · применён 1 фильтр» под линией. */
.sp-home .recipes-total-count.sp-cats-status {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 24px;
	font: 700 11px/1 var(--sans);
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--text-3);
}

.sp-home .recipes-total-count.sp-cats-status .rtc-num,
.sp-home .recipes-total-count.sp-cats-status .rtc-label,
.sp-home .recipes-total-count.sp-cats-status .rtc-applied {
	font: inherit;
	background: none;
	padding: 0;
	border-radius: 0;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
}

.sp-home .recipes-total-count.sp-cats-status .rtc-num {
	font-size: 16px;
	font-weight: 900;
	letter-spacing: .02em;
	color: var(--text);
}

/* ── MOBILE (≤ 767px) ──────────────────────────────────────── */
/* Mobile overrides — header-часть теперь в style-v4.css; здесь только hero/cat. */
@media (max-width: 767px) {

	/* Suppress the iOS horizontal rubber-band drag on the homepage only. */
	html,
	body.sp-home {
		overscroll-behavior-x: none;
	}

	.sp-hero {
		grid-template-columns: 1fr;
		gap: 20px;
		padding: 24px 0 14px;
	}

	.sp-hero-favorites {
		display: inline-flex;
		position: absolute;
		top: 0;
		right: 0;
		background: #fff;
		border-color: var(--border);
		color: var(--accent);
	}

	.sp-hero-favorites svg {
		fill: currentColor;
		stroke: currentColor;
	}

	.sp-hero-eyebrow {
		padding-right: 54px;
	}

	.sp-hero-aside {
		order: -1;
	}

	.sp-hero-title {
		font-size: 30px;
	}

	.sp-hero-sub {
		font-size: 15px;
		font-weight: 500;
		color: var(--text);
		margin-bottom: 20px;
	}

	.sp-home .sp-cats-section {
		padding-block: 28px;
	}

	.sp-home .cat-grid {
		grid-template-columns: repeat(2, 1fr);
		gap: 14px;
	}

	.sp-home .cat-name {
		font-size: 15px;
	}

	.sp-cats-head {
		display: flex;
		flex-direction: column;
		align-items: stretch;
		gap: 10px;
		margin-bottom: 10px;
		padding-bottom: 8px;
	}

	.sp-home .sp-cats-head .filter-outer {
		flex-direction: column;
		align-items: stretch;
		width: 100%;
		gap: 6px;
		overflow: visible;
	}

	.sp-home .sp-cats-head .filter-scroll-wrap {
		overflow: visible;
		width: 100%;
	}

	.sp-home .sp-cats-head .filter-bar {
		flex-wrap: wrap;
		justify-content: center;
		gap: 4px;
		min-width: 0;
	}

	.sp-home .filter-more-toggle {
		display: inline-flex;
		align-items: center;
		gap: 5px;
		padding: 6px 10px;
		border: 0;
		background: transparent;
		color: var(--accent);
		font: inherit;
		font-size: 12px;
		font-weight: 700;
		cursor: pointer;
	}

	.sp-home .filter-more-toggle span {
		transition: transform .15s ease;
	}

	.sp-home .filter-more-toggle[aria-expanded="true"] span {
		transform: rotate(180deg);
	}

	.sp-home .filter-more {
		display: none;
		flex-basis: 100%;
		flex-wrap: wrap;
		justify-content: center;
		gap: 4px;
	}

	.sp-home .filter-more.is-open {
		display: flex;
	}

	.sp-home .sp-cats-head .filter-clear {
		display: none;
		flex-shrink: 0;
		width: 100%;
		padding: 6px 0 2px;
		text-align: center;
		border-left: none;
		border-top: 1px solid var(--border);
		margin-top: 4px;
	}

	.sp-home .sp-cats-head .filter-outer.has-active .filter-clear {
		display: block;
	}

	.sp-home .recipes-total-count.sp-cats-status {
		margin-bottom: 16px;
	}
}

/* Featured card extras */
.featured-card-desc {
	font-size: 14px;
	line-height: 1.5;
	color: var(--text-2);
	display: -webkit-box;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.featured-card-macros {
	display: flex;
	flex-wrap: wrap;
	gap: 4px 14px;
	font: 600 13px/1.2 var(--sans);
	color: var(--text);
}

.featured-card-macros .kcal {
	color: var(--accent);
	font-weight: 800;
}

.featured-card-macros span {
	white-space: nowrap;
}

.featured-card-tags {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.featured-card-tag {
	font: 600 11px/1 var(--sans);
	padding: 5px 10px;
	border-radius: 999px;
	background: var(--bg-alt);
	color: var(--text-2);
	letter-spacing: .02em;
}

.featured-card-cta {
	align-self: flex-start;
	margin-top: 6px;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 10px 18px;
	border-radius: 999px;
	background: var(--accent);
	color: #fff;
	font: 700 13px/1 var(--sans);
	letter-spacing: .02em;
}

.featured-card:not(.locked):hover .featured-card-cta {
	background: #c14508;
}

.recipes-total-count {
	display: inline-flex;
	align-items: baseline;
	gap: 8px;
}

.recipes-total-count .rtc-num {
	font-family: var(--serif);
	font-size: clamp(36px, 5vw, 58px);
	font-weight: 700;
	line-height: 1;
	color: var(--text);
	letter-spacing: -1px;
}

/* News collapse */
.news-more-wrap {
	overflow: hidden;
	max-height: 0;
	transition: max-height .4s ease;
}

.news-more-wrap.open {
	max-height: 2000px;
}

.news-toggle-btn {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-top: 16px;
	padding: 10px 4px;
	background: transparent;
	border: none;
	border-radius: 0;
	cursor: pointer;
	font: 800 11px/1 var(--sans);
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--text);
	transition: color var(--tr);
}

.news-toggle-btn:hover {
	background: transparent;
	color: var(--accent);
}

.news-toggle-btn .arr {
	transition: transform .3s ease;
	display: inline-block;
}

.news-toggle-btn.open .arr {
	transform: rotate(180deg);
}

/* Hero search */
.hero-search {
	position: relative;
	margin: 22px 0 34px;
	max-width: 620px;
	z-index: 1000;
}

.hero-search-input {
	width: 100%;
	padding: 18px 22px 18px 54px;
	font: 500 16px/1.2 var(--sans);
	color: var(--text);
	background: #fff;
	border: 1.5px solid #eadfd6;
	border-radius: 14px;
	box-shadow: 0 4px 18px rgba(232, 64, 10, .06);
	outline: none;
	transition: border-color .2s, box-shadow .2s;
}

.hero-search-input::placeholder {
	color: #a89a8f;
}

.hero-search-input:focus {
	border-color: var(--accent);
	box-shadow: 0 4px 22px rgba(232, 64, 10, .14);
}

.hero-search-icon {
	position: absolute;
	left: 20px;
	top: 50%;
	transform: translateY(-50%);
	width: 22px;
	height: 22px;
	color: var(--accent);
	pointer-events: none;
}

.hero-search-results {
	position: absolute;
	top: calc(100% + 6px);
	left: 0;
	right: 0;
	background: #fff;
	border: 1px solid var(--border);
	border-radius: 12px;
	box-shadow: 0 10px 30px rgba(0, 0, 0, .12);
	max-height: min(70vh, 520px);
	overflow-y: auto;
	z-index: 1001;
	opacity: 0;
	transform: translateY(-6px);
	pointer-events: none;
	visibility: hidden;
	transition: opacity .22s ease, transform .22s ease, visibility 0s linear .22s;
}

.hero-search-results.open {
	opacity: 1;
	transform: translateY(0);
	pointer-events: auto;
	visibility: visible;
	transition: opacity .22s ease, transform .22s ease, visibility 0s;
}

@keyframes heroItemIn {
	from {
		opacity: 0;
		transform: translateY(4px);
	}

	to {
		opacity: 1;
		transform: translateY(0);
	}
}

.hero-search-results.open .hero-search-item {
	animation: heroItemIn .28s ease both;
}

.hero-search-results.open .hero-search-item:nth-child(1) {
	animation-delay: .02s;
}

.hero-search-results.open .hero-search-item:nth-child(2) {
	animation-delay: .05s;
}

.hero-search-results.open .hero-search-item:nth-child(3) {
	animation-delay: .08s;
}

.hero-search-results.open .hero-search-item:nth-child(4) {
	animation-delay: .11s;
}

.hero-search-results.open .hero-search-item:nth-child(5) {
	animation-delay: .14s;
}

.hero-search-results.open .hero-search-item:nth-child(6) {
	animation-delay: .17s;
}

.hero-search-item {
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 10px 14px;
	cursor: pointer;
	border-bottom: 1px solid var(--border);
	text-decoration: none;
	color: inherit;
}

.hero-search-item:last-child {
	border-bottom: none;
}

.hero-search-item:hover {
	background: var(--bg-alt);
}

.hero-search-thumb {
	width: 44px;
	height: 44px;
	border-radius: 8px;
	object-fit: cover;
	background: var(--bg-alt);
	flex-shrink: 0;
}

.hero-search-text {
	flex: 1;
	min-width: 0;
}

.hero-search-name {
	font: 600 14px/1.3 var(--sans);
	color: var(--text);
}

.hero-search-meta {
	font: 500 12px/1 var(--sans);
	color: var(--text-3);
	margin-top: 4px;
}

.hero-search-access {
	display: inline-flex;
	margin-left: 5px;
	font-weight: 800;
	letter-spacing: .04em;
	color: var(--text);
}

.hero-search-access.is-free { color: var(--accent); }

.hero-search-empty {
	padding: 18px;
	text-align: center;
	color: var(--text-3);
	font-size: 13px;
}

.hero-search-show-all {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 14px;
	text-decoration: none;
	font: 700 13px/1 var(--sans);
	color: var(--accent);
	background: #fff7f3;
	border-top: 1px solid var(--border);
	letter-spacing: .02em;
	position: sticky;
	bottom: 0;
}

.hero-search-show-all:hover {
	background: #ffe8de;
}

.hero-search-show-all .arr {
	transition: transform .2s ease;
	display: inline-block;
}

.hero-search-show-all:hover .arr {
	transform: translateX(3px);
}

.recipes-total-count .rtc-label {
	font-family: var(--sans);
	font-size: clamp(11px, 1.2vw, 13px);
	font-weight: 700;
	color: var(--text);
	letter-spacing: .04em;
	text-transform: uppercase;
	background: #f5d90a;
	padding: 3px 8px;
	border-radius: 4px;
	vertical-align: middle;
}

/* ── EDITORIAL HOMEPAGE BLOCKS ───────────────────────────────────────
   Новые блоки главной (Сезонный рецепт, Рекомендуем, CTA-полоса)
   в стиле NYT Cooking / Times Cooking. Префикс sp-* чтобы не пересечься
   с существующими стилями платформы. */
.sp-block {
	margin-top: 56px;
}

/* ── НОВОЕ: 2-column editorial block ─────────────────────────────────
   Левая колонка — vertical featured-card (фото сверху, тело снизу).
   Правая — лента новостей (date / title / desc / divider).
   На мобиле — single column. */
.sp-new-block {
	margin-top: 36px;
}

/* Desktop (≥1024px): «Новое» ближе к hero (−16px). Ниже базового правила,
   чтобы override применялся при равной специфичности. */
@media (min-width: 1024px) {
	.sp-new-block {
		margin-top: 8px;
	}
}

.sp-new-grid {
	display: grid;
	grid-template-columns: 1.55fr 1fr;
	gap: 44px;
}

.sp-new-block--no-list .sp-new-grid {
	grid-template-columns: 1fr;
}

.sp-new-block--no-list .sp-new-list {
	display: none;
}

/* Vertical featured card */
.sp-new-card {
	display: block;
	text-align: left;
	background: none;
	border: none;
	padding: 0;
	width: 100%;
	color: inherit;
	font: inherit;
}

.sp-new-card.locked {
	opacity: 1;
}

.sp-new-card-media {
	display: block;
	position: relative;
	aspect-ratio: 16/10;
	background: var(--bg-alt);
	overflow: hidden;
}

.sp-new-card-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform .55s ease;
}

/* Зум только при наведении на само фото (не на всю карточку) — CTA при этом
   не затрагивается (см. ТЗ: hover CTA изолирован от hover карточки). */
.sp-new-card:not(.locked) .sp-new-card-media:hover img {
	transform: scale(1.02);
}

.sp-new-card.locked .sp-new-card-media::after {
	content: '';
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .18);
	z-index: 1;
}

.sp-new-card-body {
	padding: 18px 0 0;
}

.sp-new-card-eyebrow {
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--accent);
	margin-bottom: 12px;
}

.sp-new-card-title {
	font-family: var(--serif);
	font-size: clamp(22px, 3.2vw, 32px);
	font-weight: 700;
	line-height: 1.12;
	letter-spacing: -.01em;
	color: var(--text);
	margin: 0 0 10px;
}

/* Hover как у .recipe-card: заголовок бледнеет (opacity), цвет не меняем. */
.sp-new-card-title-link {
	color: inherit;
	text-decoration: none;
	transition: opacity .25s ease;
}

.sp-new-card-title-link:visited {
	color: inherit;
}

.sp-new-card:not(.locked) .sp-new-card-title-link:hover,
.sp-new-card:not(.locked) .sp-new-card-title-link:visited:hover {
	color: inherit;
	opacity: .55;
}

/* Строка рейтинга: фикс-высота → нет скачка, когда после загрузки
   _apiRatings «Новый рецепт» сменяется звёздами. */
.sp-new-card-rating {
	display: flex;
	align-items: center;
	gap: 8px;
	min-height: 20px;
	margin: 0 0 12px;
	font: 600 12.5px/1 var(--sans);
	color: var(--text-3);
}

.sp-new-card-rating .stars {
	display: inline-flex;
	gap: 2px;
	color: var(--accent);
}

.sp-new-card-rating .stars svg {
	width: 15px;
	height: 15px;
	display: block;
}

.sp-new-card-rating .star-empty {
	color: #d8d2ca;
}

.sp-new-card-rating .num {
	color: var(--text);
	font-weight: 700;
}

.sp-new-card-rating .rating-new {
	font: 800 11px/1 var(--sans);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--text-3);
}

.sp-new-card-desc {
	font-size: 14px;
	line-height: 1.55;
	color: var(--text-2);
	margin: 0 0 14px;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.sp-new-card-meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px 14px;
	font: 600 13px/1.2 var(--sans);
	color: var(--text);
	margin-bottom: 18px;
}

.sp-new-card-meta .kcal {
	color: var(--accent);
	font-weight: 800;
}

.sp-new-card-meta>*+*::before {
	content: '·';
	color: var(--text-2);
	margin-right: 14px;
	display: inline-block;
	transform: translateX(-7px);
	font-weight: 700;
}

/* CTA V2 — отдельная ссылка-кнопка: квадратная (border-radius:0), капс,
   чёрная как submit в login.html. Свой hover/focus, НЕ зависит от hover
   карточки. Без подчёркивания во всех состояниях. */
.sp-new-card-cta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 13px 24px;
	font: 700 12px/1 var(--sans);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: #fff;
	background: var(--text);
	border-radius: 0;
	text-decoration: none;
	transition: background var(--tr);
}

.sp-new-card-cta,
.sp-new-card-cta:hover,
.sp-new-card-cta:focus-visible,
.sp-new-card-cta:visited {
	text-decoration: none;
}

/* Hover как у .btn-primary в login.html: чёрная → оранжевая. */
.sp-new-card:not(.locked) .sp-new-card-cta:hover {
	background: var(--accent);
}

.sp-new-card-cta:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 2px;
}

/* News list (right column) */
.sp-new-list {
	display: flex;
	flex-direction: column;
}

.sp-news-item {
	padding: 20px 0;
	border-top: 1px solid var(--border);
	display: block;
	text-decoration: none;
	color: inherit;
}

.sp-news-item:first-child {
	padding-top: 0;
	border-top: none;
}

.sp-news-item-date {
	font: 800 11px/1 var(--sans);
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--text-2);
	margin-bottom: 10px;
}

.sp-news-item-title {
	font-family: var(--serif);
	font-size: 18px;
	font-weight: 700;
	line-height: 1.25;
	color: var(--text);
	margin: 0 0 6px;
	letter-spacing: -.01em;
}

.sp-news-item-desc {
	font-size: 13px;
	line-height: 1.5;
	color: var(--text-2);
	margin: 0;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.sp-new-list .news-toggle-btn {
	display: none;
}

@media (max-width: 767px) {
	.sp-new-block {
		margin-top: 8px;
	}

	.sp-new-grid {
		grid-template-columns: 1fr;
		gap: 24px;
	}

	.sp-new-card-title {
		font-size: 22px;
	}

	.sp-news-item {
		padding: 16px 0;
	}

	.sp-new-list:not(.open) .sp-news-item:nth-of-type(n+2) {
		display: none;
	}

	.sp-new-list .news-toggle-btn {
		display: inline-flex;
		align-self: center;
		margin-top: 4px;
	}

	/* На mobile дополнительно отделяем обновления от featured-рецепта. */
	.sp-new-list {
		padding-top: 20px;
		border-top: 1px solid var(--text);
		position: relative;
	}
}

.sp-sec-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 24px;
	padding-bottom: 10px;
	border-bottom: 1px solid var(--text);
}

.sp-sec-title {
	font-family: var(--sans);
	font-size: 15px;
	font-weight: 800;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--text);
	margin: 0;
}

.sp-sec-link {
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--text-2);
	text-decoration: none;
	white-space: nowrap;
}

.sp-sec-link:hover {
	color: var(--accent);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 4px;
}

/* Сезонный рецепт — большая editorial-карточка */
.sp-seasonal {
	display: grid;
	grid-template-columns: 1.15fr 1fr;
	gap: 36px;
	align-items: stretch;
	background: none;
	border: none;
	padding: 0;
	margin: 0;
	color: inherit;
	cursor: pointer;
	text-align: left;
	width: 100%;
	font: inherit;
}

.sp-seasonal.locked {
	cursor: pointer;
	opacity: 1;
}

.sp-seasonal-media {
	position: relative;
	aspect-ratio: 4/3;
	overflow: hidden;
	background: var(--bg-alt);
}

.sp-seasonal-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform .5s ease;
}

.sp-seasonal:not(.locked):hover .sp-seasonal-media img {
	transform: scale(1.02);
}

.sp-seasonal.locked .sp-seasonal-media::after {
	content: '';
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .18);
	z-index: 1;
}

.sp-seasonal-body {
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding: 4px 0;
}

.sp-eyebrow {
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--accent);
	margin-bottom: 12px;
}

.sp-seasonal-title {
	font-family: var(--serif);
	font-size: clamp(26px, 3.4vw, 38px);
	font-weight: 700;
	line-height: 1.08;
	letter-spacing: -.01em;
	margin: 0 0 14px;
	color: var(--text);
}

.sp-seasonal-desc {
	font-size: 15px;
	line-height: 1.55;
	color: var(--text-2);
	margin: 0 0 18px;
	max-width: 56ch;
	display: -webkit-box;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.sp-seasonal-meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 6px 0;
	font-size: 12px;
	font-weight: 500;
	color: var(--text-2);
	padding-bottom: 16px;
	border-bottom: 1px solid var(--border);
	margin-bottom: 16px;
}

.sp-seasonal-meta>*+*::before {
	content: '·';
	margin: 0 10px;
	color: var(--text-3);
	font-weight: 700;
}

.sp-seasonal-meta .kcal {
	color: var(--accent);
	font-weight: 700;
}

.sp-cta-inline {
	align-self: flex-start;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 13px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--text);
	text-decoration: none;
}

.sp-cta-inline::after {
	content: '→';
	transition: transform .2s ease;
	display: inline-block;
}

.sp-seasonal:not(.locked):hover .sp-cta-inline {
	color: var(--accent);
}

.sp-seasonal:not(.locked):hover .sp-cta-inline::after {
	transform: translateX(4px);
}

/* Recommended grid */
.sp-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 24px;
}

.sp-card {
	display: flex;
	flex-direction: column;
	background: #fff;
	cursor: pointer;
	text-align: left;
	border: none;
	padding: 0;
	margin: 0;
	font: inherit;
	color: inherit;
}

.sp-card.locked {
	opacity: 1;
}

.sp-hero-aside.locked:focus-visible,
.featured-card.locked:focus-visible,
.sp-seasonal.locked:focus-visible,
.sp-card.locked:focus-visible,
.cat-card.locked:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 3px;
}

.sp-card.locked .sp-card-media::after {
	content: '';
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .18);
	z-index: 1;
}

.sp-card-media {
	position: relative;
	aspect-ratio: 4/3;
	overflow: hidden;
	background: var(--bg-alt);
}

.sp-card-media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform .35s ease;
}

.sp-card:not(.locked):hover .sp-card-media img {
	transform: scale(1.04);
}

/* NYT-hover: текст бледнеет, фото/бейджи (в .sp-card-media) не трогаем.
   Та же интенсивность/скорость, что у .recipe-card в style-v4.css.
   .locked (paywall) исключена — её читаемость и так приглушена. */
.sp-card-body {
	transition: opacity .25s ease;
}

@media (hover: hover) and (pointer: fine) {
	.sp-card:not(.is-skeleton):not(.locked):hover .sp-card-body {
		opacity: .55;
	}
}

.sp-card-body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: 16px 0 0;
}

.sp-card-title {
	font-family: var(--serif);
	font-size: 20px;
	font-weight: 700;
	line-height: 1.18;
	margin: 0 0 10px;
	color: var(--text);
	min-height: calc(3em * 1.18);
	display: -webkit-box;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.sp-card-meta {
	font-size: 12px;
	color: var(--text-2);
	font-weight: 500;
	display: flex;
	align-items: center;
	gap: 0;
	margin-bottom: 12px;
	flex-wrap: wrap;
}

.sp-card-meta>*+*::before {
	content: '·';
	margin: 0 8px;
	color: var(--text-3);
	font-weight: 700;
}

.sp-card-rating {
	display: flex;
	align-items: center;
	gap: 6px;
	min-height: 16px;
	margin: -3px 0 10px;
	font: 600 11px/1 var(--sans);
	color: var(--text-2);
}

.sp-card-rating-stars {
	display: inline-flex;
	gap: 1px;
	font-size: 13px;
	letter-spacing: 0;
	color: #f5a623;
}

.sp-card-rating-stars .empty { color: #d8d2ca; }
.sp-card-rating-value { color: var(--text); font-weight: 700; }

.sp-card-foot {
	margin-top: auto;
	padding-top: 12px;
	border-top: 1px solid var(--border);
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 8px;
}

.sp-card-foot .lbl {
	font-size: 10px;
	font-weight: 700;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--text-3);
}

.sp-card-foot .val {
	font-family: var(--serif);
	font-size: 22px;
	font-weight: 700;
	color: var(--accent);
	white-space: nowrap;
}

.sp-card-foot .val small {
	font-family: var(--sans);
	font-size: 11px;
	font-weight: 600;
	color: var(--text-2);
	margin-left: 3px;
}

/* Бейджи карточек — стек в левом-верхнем углу медиа.
   Семантику сохраняем (Бесплатно / Пробная / Подписка / Новинка),
   только унифицируем форму, размер и blur. */
.sp-badges {
	position: absolute;
	top: 10px;
	left: 10px;
	z-index: 3;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 4px;
	pointer-events: none;
}

.sp-bd {
	box-sizing: border-box;
	height: 22px;
	padding: 0 10px;
	display: inline-flex;
	align-items: center;
	gap: 4px;
	font-family: var(--sans);
	font-size: 10px;
	font-weight: 800;
	letter-spacing: .08em;
	text-transform: uppercase;
	border-radius: 0;
	white-space: nowrap;
}

.sp-bd svg {
	width: 10px;
	height: 10px;
	fill: currentColor;
}

.sp-bd--new {
	background: var(--accent);
	color: #fff;
}

.sp-bd--pro {
	background: rgba(17, 17, 17, .92);
	color: #fff;
}

.sp-bd--trial {
	background: rgba(255, 255, 255, .95);
	color: var(--text);
	border: 1px solid var(--text);
}

.sp-bd--free {
	background: rgba(255, 255, 255, .95);
	color: var(--text);
	border: 1px solid var(--text);
}

.sp-bd--free::before {
	content: '\2726';
	color: var(--accent);
	font-size: 12px;
	line-height: 1;
}

/* CTA strip */
.sp-cta-strip {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	padding: 28px 32px;
	background: #fff;
	border: 1px solid var(--border);
}

.sp-cta-strip h3 {
	font-family: var(--serif);
	font-size: clamp(22px, 2.4vw, 28px);
	font-weight: 700;
	line-height: 1.2;
	margin: 0 0 6px;
	color: var(--text);
}

.sp-cta-strip p {
	font-size: 13px;
	color: var(--text-2);
	margin: 0;
	line-height: 1.5;
}

.sp-cta-count {
	display: inline-block;
	margin-right: 4px;
	font-family: var(--serif);
	font-size: 24px;
	font-weight: 700;
	line-height: 1;
	color: var(--accent);
}

.sp-cta-text-line {
	display: block;
}

.sp-cta-btn {
	flex-shrink: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 16px 26px;
	background: var(--text);
	color: #fff;
	font-family: var(--sans);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: .1em;
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
	border: none;
	transition: background .2s ease;
	white-space: nowrap;
}

.sp-cta-btn:hover {
	background: var(--accent);
}

/* Plate summary strip (compact, shown when plate has items) */
.sp-plate-summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	padding: 14px 22px;
	margin-bottom: 28px;
	background: #fff;
	border: 1px solid var(--text);
}

.sp-plate-summary-info {
	display: flex;
	align-items: center;
	gap: 10px;
	font-family: var(--sans);
	min-width: 0;
}

.sp-plate-summary-count {
	font-size: 13px;
	font-weight: 700;
	color: var(--text);
	letter-spacing: .04em;
}

.sp-plate-summary-sep {
	color: var(--text-3);
	font-weight: 700;
}

.sp-plate-summary-kcal {
	font-size: 13px;
	font-weight: 600;
	color: var(--text-2);
}

.sp-plate-summary-btn {
	flex-shrink: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 10px 18px;
	background: var(--text);
	color: #fff;
	font-family: var(--sans);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .12em;
	text-transform: uppercase;
	cursor: pointer;
	border: none;
	transition: background .2s ease;
	white-space: nowrap;
}

.sp-plate-summary-btn:hover {
	background: var(--accent);
}

/* Tablet */
@media (max-width: 1024px) {
	.sp-grid {
		grid-template-columns: repeat(3, 1fr);
		gap: 20px;
	}

	.sp-seasonal {
		gap: 28px;
	}
}

/* Mobile */
@media (max-width: 767px) {
	.sp-block {
		margin-top: 36px;
	}

	.sp-sec-head {
		margin-bottom: 18px;
	}

	.sp-seasonal {
		grid-template-columns: 1fr;
		gap: 18px;
	}

	.sp-seasonal-media {
		aspect-ratio: 16/10;
	}

	.sp-seasonal-title {
		font-size: clamp(22px, 6vw, 28px);
	}

	.sp-seasonal-desc {
		font-size: 14px;
		-webkit-line-clamp: 4;
		line-clamp: 4;
	}

	.sp-grid {
		grid-template-columns: repeat(2, 1fr);
		gap: 14px;
	}

	.sp-card-title {
		font-size: 16px;
		-webkit-line-clamp: 3;
		line-clamp: 3;
	}

	.sp-card-foot {
		flex-direction: column;
		align-items: flex-start;
		gap: 2px;
	}

	.sp-card-foot .val {
		font-size: 20px;
	}

	.sp-cta-strip {
		flex-direction: column;
		align-items: stretch;
		gap: 18px;
		padding: 22px 18px;
		text-align: left;
	}

	.sp-cta-btn {
		width: 100%;
		padding: 14px 20px;
	}

	.sp-bd {
		font-size: 9px;
		height: 20px;
		padding: 0 8px;
	}

	.sp-plate-summary {
		flex-direction: column;
		align-items: stretch;
		gap: 12px;
		padding: 14px 16px;
	}

	.sp-plate-summary-btn {
		width: 100%;
		padding: 12px 16px;
	}
}

/* Plate icon в заголовке модалки — SVG из общего паттерна (см. style-v4.css .sp-plate-svg). */
/* Skeleton — индикатор загрузки до прихода данных от API */
.sp-skel-card {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.sp-skel-img,
.sp-skel-line {
	background: linear-gradient(90deg, #efe9e0 0%, #f6f2eb 50%, #efe9e0 100%);
	background-size: 200% 100%;
	animation: spShimmer 1.4s linear infinite;
}

.sp-skel-img {
	aspect-ratio: 4/3;
}

.sp-skel-line {
	height: 14px;
	border-radius: 4px;
}

.sp-skel-line.short {
	width: 60%;
}

@keyframes spShimmer {
	to {
		background-position: -200% 0;
	}
}

/* Reduced motion → статичный skeleton без shimmer. */
@media (prefers-reduced-motion: reduce) {

	.sp-skel-img,
	.sp-skel-line,
	.sp-hero-aside.is-loading .sp-hero-media,
	.sp-hero-aside.is-loading .sp-hero-caption,
	.sp-hero-aside.is-image-loading .sp-hero-media {
		animation: none;
		background: var(--bg-alt, #efe9e0);
	}
}

/* #new-block: страховка от layout shift, если JS-инициализация
   запоздает или контент рендерится медленнее обычного. min-height
   близко к реальной высоте 2-колоночного блока на десктопе. */
.sp-new-block {
	min-height: 320px;
}

@media (max-width: 767px) {
	.sp-new-block {
		min-height: 0;
	}
}
