/* =========================================================
   VetHelp – main stylesheet
   Дизайн-токени відтворюють затверджений шаблон (Woldlife):
   акцентний синій (за логотипом VetHelp), темна шапка, шрифти Crimson Pro / Nunito Sans.
   ========================================================= */

:root {
	--color-accent: #4a63c9;
	--color-accent-dark: #262c78;
	--color-dark: #14183f;
	--color-dark-soft: #1c2150;
	--color-brand: #262c78;
	--color-heading: #1a1a1a;
	--color-text: #55595e;
	--color-text-light: #6b6f75;
	--color-border: #e7e5e1;
	--color-surface: #f7f6f3;
	--color-white: #ffffff;

	--font-heading: 'Crimson Pro', Georgia, 'Times New Roman', serif;
	--font-body: 'Nunito Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

	--container: 1220px;
	--container-narrow: 800px;
	--radius-sm: 6px;
	--radius: 10px;
	--radius-lg: 20px;
	--shadow: 0 10px 30px rgba(20, 20, 20, 0.08);
	--shadow-lg: 0 20px 50px rgba(20, 20, 20, 0.16);
	--transition: 0.3s ease;
}

/* -------------------- Reset -------------------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
	margin: 0;
	font-family: var(--font-body);
	font-size: 16px;
	line-height: 1.7;
	color: var(--color-text);
	background: var(--color-white);
	-webkit-font-smoothing: antialiased;
}
img { max-width: 100%; height: auto; display: block; }
a { color: inherit; text-decoration: none; }
ul, ol { margin: 0; padding: 0; list-style: none; }
button { font: inherit; cursor: pointer; background: none; border: none; color: inherit; }
input, textarea, select { font: inherit; }
h1, h2, h3, h4, h5, h6 {
	font-family: var(--font-heading);
	color: var(--color-heading);
	line-height: 1.25;
	margin: 0 0 0.5em;
	font-weight: 700;
}
p { margin: 0 0 1em; }
p:last-child { margin-bottom: 0; }

.screen-reader-text {
	position: absolute !important;
	width: 1px; height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	white-space: nowrap;
}
.skip-link {
	position: fixed; top: -100px; left: 1rem; z-index: 9999;
	background: var(--color-dark); color: #fff; padding: 0.75rem 1.25rem;
	border-radius: var(--radius-sm); transition: top 0.2s;
}
.skip-link:focus { top: 1rem; }

.container { max-width: var(--container); margin: 0 auto; padding: 0 20px; }
.container--narrow { max-width: var(--container-narrow); }

section { padding: 80px 0; }
@media (max-width: 782px) { section { padding: 50px 0; } }

.eyebrow {
	display: inline-block;
	color: var(--color-accent-dark);
	font-weight: 800;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	font-size: 0.8rem;
	margin-bottom: 0.75rem;
}
.section-heading { max-width: 700px; margin: 0 0 3rem; text-align: left; }
.section-heading h2 { font-size: clamp(1.7rem, 3vw, 2.5rem); }
.section-heading--center { text-align: center; margin-left: auto; margin-right: auto; }
.section-heading--split {
	max-width: none;
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 1.5rem;
	flex-wrap: wrap;
}
.section-heading--split h2 { margin-bottom: 0; }

/* -------------------- Icons -------------------- */
.icon { width: 22px; height: 22px; flex-shrink: 0; }
.icon-sm { width: 16px; height: 16px; }
.icon-lg { width: 34px; height: 34px; }
.icon-xl { width: 48px; height: 48px; }
.icon-star { width: 16px; height: 16px; color: var(--color-accent); }
.icon-placeholder { width: 40px; height: 40px; color: #c7c3ba; }
.icon-chevron { width: 14px; height: 14px; transition: transform var(--transition); }

/* -------------------- Buttons -------------------- */
.btn {
	display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
	padding: 0.85rem 1.6rem;
	border-radius: var(--radius-sm);
	font-weight: 700;
	font-size: 0.95rem;
	transition: all var(--transition);
	white-space: nowrap;
}
.btn--primary { background: var(--color-accent); color: #fff; }
.btn--primary:hover { background: var(--color-accent-dark); transform: translateY(-2px); }
.btn--dark { background: var(--color-dark); color: #fff; }
.btn--dark:hover { background: #000; transform: translateY(-2px); }
.btn--outline { background: transparent; color: var(--color-dark); border: 1.5px solid var(--color-border); }
.btn--outline:hover { border-color: var(--color-dark); background: var(--color-dark); color: #fff; }
.btn--ghost { background: transparent; padding: 0.6rem; }
.btn--ghost-light { border: 1.5px solid rgba(255,255,255,0.5); color: #fff; }
.btn--ghost-light:hover { background: rgba(255,255,255,0.12); }
.btn--lg { padding: 1.125rem 2.5rem; font-size: 1.125rem; font-weight: 600; border-radius: 5px; }
.btn--sm { padding: 0.55rem 1.1rem; font-size: 0.85rem; }

.check-list li { display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.75rem; }
.check-list .icon { color: var(--color-accent-dark); margin-top: 3px; }
.check-list.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 0 1rem; }
@media (max-width: 600px) { .check-list.two-col { grid-template-columns: 1fr; } }

.img-placeholder {
	background: linear-gradient(135deg, var(--color-surface), #ece9e2);
	display: flex; align-items: center; justify-content: center;
	border: 1px dashed #d8d4cb;
	min-height: 160px;
}
.img-placeholder--sm { width: 56px; height: 56px; border-radius: var(--radius-sm); flex-shrink: 0; }

.empty-state {
	text-align: center; padding: 3rem 1.5rem; background: var(--color-surface);
	border-radius: var(--radius); color: var(--color-text-light); font-style: italic;
}

/* -------------------- Scroll reveal -------------------- */
.reveal-fade, .reveal-left { opacity: 0; transform: translateY(18px); transition: opacity 0.7s ease, transform 0.7s ease; transition-delay: var(--delay, 0s); }
.reveal-left { transform: translateX(-24px); }
.reveal-fade.is-visible, .reveal-left.is-visible { opacity: 1; transform: none; }

/* =========================================================
   HEADER
   ========================================================= */
.site-header { position: sticky; top: 0; z-index: 200; }
.header-top { background: var(--color-dark); color: #cfcfcf; font-size: 0.85rem; }
.header-top__inner { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding-top: 10px; padding-bottom: 10px; flex-wrap: wrap; }
.header-top__info { display: flex; gap: 1.5rem; flex-wrap: wrap; }
.header-top__info li { display: flex; align-items: center; gap: 0.4rem; }
.header-top__info a:hover { color: var(--color-accent); }
.header-top__social { display: flex; gap: 0.6rem; }
.header-top__social a {
	width: 30px; height: 30px; border-radius: 50%; background: rgba(255,255,255,0.08);
	display: flex; align-items: center; justify-content: center; transition: background var(--transition);
}
.header-top__social a:hover { background: var(--color-accent); color: #fff; }

.header-main { background: #fff; box-shadow: none; transition: box-shadow var(--transition); }
/* Sticky header blends into white page content once scrolled – add a
   clear shadow only while scrolled, so it visibly separates from what's
   underneath (no shadow needed at the very top, over the hero photo). */
.site-header.is-scrolled .header-main { box-shadow: 0 8px 24px rgba(20, 24, 63, 0.16); }
.header-main__inner { display: flex; align-items: center; gap: 1.5rem; padding-top: 14px; padding-bottom: 14px; }
.site-logo { flex-shrink: 0; }
.site-logo img { height: 60px; width: auto; }

.main-nav { flex: 1; }
.main-nav__list { display: flex; align-items: center; gap: 0.25rem; flex-wrap: wrap; }
.main-nav__list > li { position: relative; }
.main-nav__list > li > a {
	display: flex; align-items: center; gap: 4px;
	padding: 0.9rem 0.9rem; font-weight: 700; color: var(--color-heading);
	transition: color var(--transition);
}
.main-nav__list > li > a:hover,
.main-nav__list > li.current-menu-item > a { color: var(--color-accent-dark); }

/* Underline for the current page's menu item (also previews on hover for
   every item), drawn under just the label text – not the dropdown chevron. */
.main-nav__list > li > a > span { position: relative; }
.main-nav__list > li > a > span::after {
	content: ""; position: absolute; left: 0; right: 0; bottom: -8px;
	height: 2px; border-radius: 2px; background: var(--color-accent);
	transform: scaleX(0); transform-origin: left; transition: transform var(--transition);
}
.main-nav__list > li > a:hover > span::after { transform: scaleX(1); }
.main-nav__list > li.current-menu-item > a > span::after { transform: scaleX(1); background: var(--color-accent-dark); }

.main-nav .sub-menu {
	position: absolute; top: 100%; left: 0; min-width: 240px;
	background: #fff; box-shadow: var(--shadow-lg); border-radius: var(--radius-sm);
	padding: 0.5rem; opacity: 0; visibility: hidden; transform: translateY(8px);
	transition: all var(--transition); z-index: 50;
}
.main-nav .has-children:hover > .sub-menu,
.main-nav .has-children:focus-within > .sub-menu { opacity: 1; visibility: visible; transform: none; }
.main-nav .sub-menu li a { display: block; padding: 0.6rem 0.75rem; border-radius: var(--radius-sm); font-weight: 600; color: var(--color-text); }
.main-nav .sub-menu li a:hover { background: var(--color-surface); color: var(--color-accent-dark); }

.header-main__actions { display: flex; align-items: center; gap: 0.75rem; flex-shrink: 0; }
.menu-toggle { display: none; width: 42px; height: 42px; align-items: center; justify-content: center; position: relative; }
.menu-toggle .icon-close { display: none; }
.menu-toggle[aria-expanded="true"] .icon-open { display: none; }
.menu-toggle[aria-expanded="true"] .icon-close { display: block; }

.search-panel__form { max-width: var(--container); margin: 0 auto; padding: 1rem 20px; display: flex; align-items: center; gap: 0.75rem; }
.search-panel__form input { flex: 1; border: none; background: transparent; font-size: 1.1rem; outline: none; }
.search-panel__form--404 { max-width: 420px; margin: 1.5rem auto; background: var(--color-surface); border-radius: var(--radius-sm); border: 1px solid var(--color-border); }

/* Search widget form (sidebar, footer, etc. – see get_search_form filter
 * in inc/template-helpers.php: vethelp_search_form()). The field fills
 * the width, the submit button sits inside it as a small icon-only
 * circle instead of a separate full-height "Пошук" button. */
.search-form { position: relative; display: flex; }
.search-form .search-field {
	width: 100%;
	padding: 0.75rem 3rem 0.75rem 1rem;
	border-radius: var(--radius-sm);
	border: 1.5px solid var(--color-border);
	background: #fff;
	font-size: 0.95rem;
	font-family: inherit;
	color: var(--color-text);
	outline: none;
	transition: border-color var(--transition);
}
.search-form .search-field::placeholder { color: var(--color-text-light); }
.search-form .search-field:focus { border-color: var(--color-accent); }
.search-form .search-submit {
	position: absolute;
	top: 50%;
	right: 6px;
	transform: translateY(-50%);
	width: 34px;
	height: 34px;
	padding: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 0;
	border-radius: var(--radius-sm);
	background: var(--color-accent);
	color: #fff;
	cursor: pointer;
	transition: background var(--transition);
}
.search-form .search-submit:hover { background: var(--color-accent-dark); }
.search-form .search-submit .icon { width: 1rem; height: 1rem; }

@media (max-width: 992px) {
	.header-main__inner { flex-wrap: wrap; justify-content: space-between; gap: 0.75rem; }
	.site-logo img { height: 48px; }
	.header-main__actions { gap: 0.5rem; }
	.header-main__actions .btn--primary { padding: 0.65rem 1.1rem; font-size: 0.9rem; }
	.menu-toggle { display: flex; width: 38px; height: 38px; }
	.main-nav {
		order: 10; flex-basis: 100%;
		max-height: 0; overflow: hidden; transition: max-height var(--transition);
	}
	.main-nav.is-open { max-height: 1200px; }
	.main-nav__list { flex-direction: column; align-items: stretch; padding: 1rem 0; }
	.main-nav__list > li > a { padding: 0.75rem 0.25rem; justify-content: space-between; border-bottom: 1px solid var(--color-border); }
	.main-nav .sub-menu {
		position: static; box-shadow: none; opacity: 1; visibility: visible; transform: none;
		max-height: 0; overflow: hidden; padding: 0; background: var(--color-surface);
		transition: max-height var(--transition), padding var(--transition);
	}
	.main-nav .has-children.is-open > .sub-menu { max-height: 600px; padding: 0.5rem; }
	.main-nav .has-children > a .icon-chevron { transition: transform var(--transition); }
	.main-nav .has-children.is-open > a .icon-chevron { transform: rotate(90deg); }
	.header-top__info li:nth-child(1), .header-top__info li:nth-child(3) { display: none; }
}
@media (max-width: 480px) {
	.site-logo img { height: 40px; }
	.header-main__inner { padding-top: 10px; padding-bottom: 10px; }
	.header-main__actions .btn--primary span,
	.header-main__actions .btn--primary { padding: 0.6rem 0.9rem; font-size: 0.82rem; }
}

/* =========================================================
   PAGE HEADER (breadcrumb banner)
   ========================================================= */
.page-header {
	background: var(--color-dark);
	background-image: radial-gradient(circle at 15% 20%, rgba(74,99,201,0.22), transparent 45%);
	color: #fff; padding: 70px 0 50px; text-align: center;
}
.page-header__title { color: #fff; margin-bottom: 0.5rem; font-size: clamp(1.8rem, 4vw, 2.6rem); position: relative; z-index: 2; }
.page-header__subtitle { color: #cfcfcf; max-width: 560px; margin: 0 auto 1rem; position: relative; z-index: 2; }

/* Optional taller banner with a photo/video background – only applied
   when Customizer → «Фон хедера внутрішніх сторінок» has something set
   (see template-parts/page-header.php). Smaller than the homepage hero
   (.hero, ~86vh) but noticeably bigger than the plain bar above. */
.page-header--media {
	position: relative;
	overflow: hidden;
	min-height: 380px;
	padding: 160px 0 70px;
	background: var(--color-dark);
}
.page-header--media .breadcrumb { position: relative; z-index: 2; }
.page-header__media {
	position: absolute; inset: 0; z-index: 0;
	background-size: cover; background-position: center; background-color: var(--color-dark);
}
.page-header__media video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.page-header__scrim { position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(8,10,30,0.35) 0%, rgba(8,10,30,0.75) 100%); }
@media (max-width: 700px) {
	.page-header--media { min-height: 300px; padding: 130px 0 50px; }
}
.breadcrumb ol { display: flex; justify-content: center; gap: 0.5rem; flex-wrap: wrap; color: #b7b7b7; font-size: 0.9rem; }
.breadcrumb li:not(:last-child)::after { content: '/'; margin-left: 0.5rem; color: #6a6a6a; }
.breadcrumb a:hover { color: var(--color-accent); }
.breadcrumb li[aria-current] { color: var(--color-accent); }

/* =========================================================
   HERO SLIDER – full-bleed, matches the approved (Woldlife) layout:
   near full-height slides, minimal chevrons, large "N / total" counter
   bottom-right instead of dots.
   ========================================================= */
.hero { position: relative; overflow: hidden; height: 86vh; min-height: 620px; max-height: 850px; padding: 0; }
.hero__track { position: relative; width: 100%; height: 100%; }
.hero__slide {
	position: absolute; inset: 0; opacity: 0; visibility: hidden;
	/* visibility is listed here too (same duration) purely so its switch
	   to hidden is deferred to the END of the fade instead of happening
	   the instant .is-active is removed – without it the outgoing slide
	   (photo + text + button) disappears in a single frame while the
	   incoming one is still fading in from opacity 0, which is what
	   read as a flicker right where the button sits. */
	transition: opacity 0.9s ease, visibility 0.9s ease;
}
.hero__slide.is-active { opacity: 1; visibility: visible; z-index: 1; }
.hero__media {
	position: absolute; inset: 0; background-size: cover; background-position: center;
	background-color: #2b2b2b;
}
.hero__media video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.hero__media--placeholder {
	background-image:
		radial-gradient(circle at 20% 30%, rgba(95,134,204,0.4), transparent 45%),
		radial-gradient(circle at 80% 70%, rgba(38,44,120,0.55), transparent 50%),
		linear-gradient(135deg, #1c2150, #14183f);
}
.hero__scrim { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(8,10,30,0.58) 0%, rgba(8,10,30,0.28) 55%, rgba(8,10,30,0.06) 100%); }
/* .hero__content also carries the site's ".container" class (same
   max-width/gutters as every other section) – the old fixed 680px cap
   here made it sit centered with huge equal gaps on both sides, very
   different from the approved design's wide, left-hugging text column.
   Dropping the cap lets it use the normal container width; the heading
   itself still wraps at a readable measure via its own max-width. */
.hero__content {
	position: relative; z-index: 2; height: 100%; display: flex; flex-direction: column;
	align-items: flex-start; justify-content: flex-end;
	/* padding-top guards against a long heading (4+ wrapped lines) landing
	   flush against the very top edge of the slide – without it,
	   justify-content: flex-end only ever reserved space at the bottom.
	   Longhand top/bottom only (not the old "90px 0 100px" shorthand) –
	   that shorthand also set left/right to 0, which – same bug as
	   .single-post__grid above – wiped out this same element's own
	   .container padding:0 20px, leaving the badge/heading/text flush
	   against the screen edge on a narrow viewport. */
	padding-top: 90px; padding-bottom: 150px; color: #fff;
}
/* Used only for a split-second by initHeroSlider()'s syncHeroHeight() to
   measure this slide's real content height (badge+heading+text+button) –
   height:auto lets it size to its natural content instead of the fixed
   height:100% above, so JS can grow .hero itself when needed instead of
   letting content quietly get clipped off the top. Never seen visually:
   toggled on, measured, toggled off again in the same tick. */
.hero__content.is-measuring { height: auto; }
.hero__content h1 { color: #fff; font-size: clamp(2.2rem, 4.6vw, 5rem); line-height: 1.08; margin: 0.3em 0 0.35em; max-width: 820px; }
.hero__content p { color: #f0f0f0; max-width: 640px; margin-bottom: 1.75rem; font-size: 1.125rem; font-weight: 700; }
.badge {
	display: inline-flex; background: var(--color-accent); color: #fff; font-weight: 700;
	padding: 0.55rem 1.3rem; border-radius: 999px; font-size: 0.95rem;
	/* Довжина напису – довільна (редагується в Customizer), тож бейдж не
	   має фіксованої ширини: fit-content дає йому природний розмір під
	   короткий текст, а max-width + normal white-space – гарантія, що
	   довший текст переноситься у 2 рядки всередині самого бейджа, а не
	   вилазить за межі блоку чи екрана. */
	width: fit-content; max-width: min(640px, 100%); white-space: normal; word-break: break-word;
	line-height: 1.3; text-align: left;
}

.hero__arrow {
	position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
	width: 44px; height: 44px; border-radius: 0; background: transparent;
	color: #fff; display: flex; align-items: center; justify-content: center;
	filter: drop-shadow(0 1px 4px rgba(0,0,0,0.5));
	transition: color var(--transition), transform var(--transition);
}
.hero__arrow .icon { width: 30px; height: 30px; }
.hero__arrow:hover { background: transparent; color: var(--color-accent); transform: translateY(-50%) scale(1.12); }
.hero__arrow--prev { left: 28px; }
.hero__arrow--next { right: 28px; }

/* Dot pagination – replaces the old "1 / 3" counter and the thumbnail
   strip that used to sit below the slider. */
.hero__dots { position: absolute; left: 50%; bottom: 24px; transform: translateX(-50%); z-index: 3; display: flex; align-items: center; gap: 10px; }
.hero__dot { width: 10px; height: 10px; padding: 0; border: 0; border-radius: 50%; background: rgba(255,255,255,0.45); cursor: pointer; transition: background var(--transition), transform var(--transition); }
.hero__dot:hover { background: rgba(255,255,255,0.75); }
.hero__dot.is-active { background: #fff; transform: scale(1.3); }

@media (max-width: 782px) {
	/* 78vh of a tall modern phone (844–926px) is 660–720px – far more than
	   the badge+heading+text+button stack actually needs, and since that
	   stack is anchored to the BOTTOM (.hero__content's justify-content:
	   flex-end), all the leftover space lands above it as one big empty
	   gap under the header, with the text pushed down near the bottom.
	   Capping the height keeps the hero full-bleed on a phone without
	   that gap; syncHeroHeight() in main.js still grows it automatically
	   on any slide whose text genuinely needs more room than this. */
	.hero { height: 78vh; min-height: 480px; max-height: 600px; }
	.hero__arrow .icon { width: 22px; height: 22px; }
	.hero__arrow--prev { left: 12px; }
	.hero__arrow--next { right: 12px; }
	.hero__dots { bottom: 14px; }
	.hero__content { padding-top: 32px; padding-bottom: 56px; }
}

/* =========================================================
   VIDEO FEATURE SECTION – short intro text + video thumbnail with a
   play button (matches the approved design's "Zoo Animals Features"
   block right after the hero).
   ========================================================= */
.video-feature__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; align-items: center; }
.video-feature__content .eyebrow { display: block; }
.video-feature__content h2 { margin: 0.3em 0 0.75rem; }
.video-feature__content p { color: var(--color-text); margin-bottom: 1.5rem; max-width: 480px; }
.video-feature__media { position: relative; }
.video-feature__poster {
	position: relative; border-radius: var(--radius-lg); overflow: hidden;
	aspect-ratio: 4 / 3; background-size: cover; background-position: center;
	background-color: var(--color-surface); display: flex; align-items: center; justify-content: center;
}
.video-feature__play {
	position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
	width: 80px; height: 80px; border-radius: 50%; background: var(--color-accent);
	color: #fff; display: flex; align-items: center; justify-content: center;
	box-shadow: 0 10px 30px rgba(0,0,0,0.25);
	transition: transform var(--transition), background var(--transition);
	animation: vethelp-play-pulse 2.4s ease-out infinite;
}
.video-feature__play .icon { width: 30px; height: 30px; margin-left: 3px; }
.video-feature__play:hover { transform: translate(-50%, -50%) scale(1.08); background: var(--color-accent-dark); }
/* A soft ring that repeatedly expands out from the button and fades –
   draws the eye to "press play" without anything else on the block
   moving. rgba here is #4a63c9 (--color-accent) spelled out, since a CSS
   variable can't be split into rgba() channels on its own – keep the two
   in sync if the accent colour ever changes. */
@keyframes vethelp-play-pulse {
	0%   { box-shadow: 0 10px 30px rgba(0,0,0,0.25), 0 0 0 0 rgba(74,99,201,0.55); }
	70%  { box-shadow: 0 10px 30px rgba(0,0,0,0.25), 0 0 0 18px rgba(74,99,201,0); }
	100% { box-shadow: 0 10px 30px rgba(0,0,0,0.25), 0 0 0 0 rgba(74,99,201,0); }
}
@media (prefers-reduced-motion: reduce) {
	.video-feature__play { animation: none; }
}
@media (max-width: 900px) {
	.video-feature__grid { grid-template-columns: 1fr; gap: 2rem; }
}

/* =========================================================
   INTRO SECTION
   ========================================================= */
.intro__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; align-items: center; }
.intro__media { position: relative; }
.intro__media-main {
	position: relative; width: 62%; border-radius: var(--radius-lg); overflow: hidden; aspect-ratio: 4/5;
	background-size: cover; background-position: center;
}
/* Same fix as .intro__media-sub.media-slider below: without this, the
   generic .media-slider rule's width:100% (it sits later in this file, so
   wins the equal-specificity tie) overrides the 62% above and the main
   photo renders full width again, leaving the small photo nowhere to sit
   but on top of it. */
.intro__media-main.media-slider { width: 62%; height: auto; aspect-ratio: 4/5; }
/* Sits beside the main photo (not on top of it, as on the reference layout)
   in the space .intro__media-main's own 62% width leaves free – only a
   small corner overlap, and flush with the main photo's bottom edge. */
.intro__media-sub {
	position: absolute; width: 40%; aspect-ratio: 1/1; right: 6%; bottom: 0;
	border-radius: var(--radius); border: 6px solid #fff; box-shadow: var(--shadow-lg);
	background-size: cover; background-position: center; overflow: hidden;
}
/* Higher specificity than the generic .media-slider rule below (which sets
   width/height:100%) so the sub media slot keeps its own box size even when
   it also carries the .media-slider class – this was the cause of the
   "small block became huge" bug: equal-specificity + later source order let
   .media-slider win and stretch the box to the size of its containing block. */
.intro__media-sub.media-slider { width: 40%; height: auto; aspect-ratio: 1/1; }
/* Floats in the gap above the small photo (not on the main photo's corner),
   matching the reference layout. */
.intro__badge {
	position: absolute; left: 64%; top: 6%; background: #fff; box-shadow: var(--shadow-lg);
	border-radius: var(--radius); width: 110px; height: 110px; display: flex; flex-direction: column;
	align-items: center; justify-content: center; text-align: center; line-height: 1.1; z-index: 2;
}
.intro__badge strong { font-family: var(--font-heading); font-size: 1.8rem; color: var(--color-accent-dark); }
.intro__badge span { font-size: 0.72rem; color: var(--color-text-light); padding: 0 8px; }

.intro__heading h2 { font-size: clamp(1.7rem, 3vw, 2.3rem); }
.intro__actions { display: flex; align-items: center; gap: 1.5rem; margin-top: 1.75rem; flex-wrap: wrap; }
.intro__phone { display: flex; align-items: center; gap: 0.75rem; }
.intro__phone-icon { width: 46px; height: 46px; border-radius: 50%; background: var(--color-surface); display: flex; align-items: center; justify-content: center; color: var(--color-accent-dark); }
.intro__phone small { display: block; color: var(--color-text-light); font-size: 0.78rem; }
.intro__phone strong { font-size: 1.05rem; }

@media (max-width: 900px) {
	.intro__grid { grid-template-columns: 1fr; gap: 3rem; }
	/* On mobile only, split the heading out and let it lead: heading,
	   then the photo/video collage, then the text + buttons. Desktop
	   keeps its normal two-column layout untouched – .intro__text-group
	   only becomes `display: contents` here, so .intro__heading and
	   .intro__content act as independent grid items just for this
	   breakpoint and can be reordered with `order`. */
	.intro__text-group { display: contents; }
	.intro__heading { order: 1; }
	.intro__media { order: 2; }
	.intro__content { order: 3; }
	/* width:100% is required alongside max-width here: .intro__media is a
	   CSS grid item with auto margins and no other explicit width, so
	   without it the browser falls back to shrink-to-fit sizing based on
	   its CHILDREN – but .intro__media-main's own width is 62% of THIS
	   box, a circular dependency the browser resolves by collapsing
	   .intro__media to 0x0. That silently deleted the whole photo/video
	   collage on mobile (confirmed live via getBoundingClientRect: 0x0),
	   leaving only the absolutely-positioned .intro__badge visible –
	   which is exactly why it looked like it was "floating alone". */
	.intro__media { width: 100%; max-width: 420px; margin: 0 auto 2rem; }
	.intro__badge {
		/* bottom:0 lines the badge's bottom edge up with .intro__media's
		   bottom edge (the same line .intro__media-sub sits flush against),
		   then translateY(50%) drops it down by exactly half of its OWN
		   rendered height – computed live by the browser, so it always
		   straddles that line half-on/half-off the photo no matter how
		   tall the pill ends up (long label, font scaling, etc). The old
		   fixed bottom:-18px guessed a pixel offset that didn't match the
		   badge's real height, so most of it hung below the photo with a
		   visible gap – reading as a disconnected floating pill. */
		left: auto; right: 6%; top: auto; bottom: 0; transform: translateY(50%);
		flex-direction: row; gap: 10px; width: auto; height: auto;
		padding: 10px 18px; border-radius: 999px;
	}
	.intro__badge strong { font-size: 1.3rem; }
	.intro__badge span { padding: 0; text-align: left; }
}

/* =========================================================
   SERVICES GRID
   ========================================================= */
.services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.75rem; }
.services-grid--archive { grid-template-columns: repeat(3, 1fr); }
.service-card {
	position: relative; overflow: hidden;
	background: var(--color-surface); border-radius: var(--radius); padding: 2.2rem 1.8rem;
	transition: transform var(--transition), box-shadow var(--transition), background var(--transition);
	border: 1px solid transparent;
	/* Flex column so .service-card__footer (margin-top: auto) always
	   lands on the same bottom edge across a row, no matter how many
	   lines the title/excerpt above it wrap to. */
	display: flex; flex-direction: column;
}
.service-card:hover { background: #fff; box-shadow: var(--shadow-lg); border-color: var(--color-border); transform: translateY(-6px); }

/* Photo reveal on hover – only for cards that have an image (service's
   featured image in wp-admin); cards without one keep the plain hover
   above untouched. Matches the approved design's "featured" card look. */
.service-card__bg {
	position: absolute; inset: 0; background-size: cover; background-position: center;
	opacity: 0; transform: scale(1.06); transition: opacity var(--transition), transform var(--transition);
	z-index: 0;
}
.service-card__scrim {
	position: absolute; inset: 0; z-index: 0;
	background: linear-gradient(180deg, rgba(20,24,63,0.45) 0%, rgba(20,24,63,0.82) 100%);
	opacity: 0; transition: opacity var(--transition);
}
.service-card.has-bg:hover .service-card__bg { opacity: 1; transform: scale(1); }
.service-card.has-bg:hover .service-card__scrim { opacity: 1; }
.service-card.has-bg:hover { border-color: transparent; }

.service-card__icon {
	position: relative; z-index: 1;
	display: flex; align-items: center; justify-content: center;
	width: 74px; height: 74px; border-radius: var(--radius); background: #fff;
	color: var(--color-accent-dark); margin-bottom: 1.25rem; box-shadow: var(--shadow);
	transition: background var(--transition), color var(--transition);
}
.service-card.has-bg:hover .service-card__icon { background: rgba(255,255,255,0.18); color: #fff; box-shadow: none; }
.service-card h3, .service-card h2 { position: relative; z-index: 1; font-size: 1.2rem; margin-bottom: 0.6rem; transition: color var(--transition); }
.service-card h3 a, .service-card h2 a { transition: color var(--transition); }
.service-card h3 a:hover, .service-card h2 a:hover { color: var(--color-accent-dark); }
.service-card.has-bg:hover h3 a, .service-card.has-bg:hover h2 a { color: #fff; }
.service-card p { position: relative; z-index: 1; color: var(--color-text-light); font-size: 0.95rem; transition: color var(--transition); }
.service-card.has-bg:hover p { color: rgba(255,255,255,0.88); }
.service-card__footer {
	position: relative; z-index: 1; margin-top: auto; padding-top: 1rem;
	display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap;
}
.service-card__more { display: inline-flex; align-items: center; gap: 0.4rem; font-weight: 700; color: var(--color-heading); transition: color var(--transition); }
.service-card__more:hover { color: var(--color-accent-dark); gap: 0.6rem; }
.service-card.has-bg:hover .service-card__more { color: #fff; }
.service-card.has-bg:hover .service-card__more:hover { color: var(--color-accent); }
.service-card.has-bg:hover .service-card__footer .btn--primary { background: #fff; color: var(--color-dark); }
.service-card.has-bg:hover .service-card__footer .btn--primary:hover { background: var(--color-accent); color: #fff; }

/* Touch devices have no :hover, so the scroll-driven "active" card (see
   initServiceCardScrollActive in main.js) gets an .is-inview class that
   mirrors every rule above 1:1. Scoped to (hover: none) so it never
   fires on a mouse/desktop visitor, where the real :hover already works. */
@media (hover: none) {
	.service-card.is-inview { background: #fff; box-shadow: var(--shadow-lg); border-color: var(--color-border); transform: translateY(-6px); }
	.service-card.has-bg.is-inview .service-card__bg { opacity: 1; transform: scale(1); }
	.service-card.has-bg.is-inview .service-card__scrim { opacity: 1; }
	.service-card.has-bg.is-inview { border-color: transparent; }
	.service-card.has-bg.is-inview .service-card__icon { background: rgba(255,255,255,0.18); color: #fff; box-shadow: none; }
	.service-card.has-bg.is-inview h3 a, .service-card.has-bg.is-inview h2 a { color: #fff; }
	.service-card.has-bg.is-inview p { color: rgba(255,255,255,0.88); }
	.service-card.has-bg.is-inview .service-card__more { color: #fff; }
	.service-card.has-bg.is-inview .service-card__footer .btn--primary { background: #fff; color: var(--color-dark); }
}
.services-section { position: relative; }
.services-section--video { overflow: hidden; }
.services-section__bg-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.services-section__scrim { position: absolute; inset: 0; background: rgba(255,255,255,0.88); z-index: 0; }
.services-section--video > .container { position: relative; z-index: 1; }
.services-section__footer { text-align: center; margin-top: 3rem; }

@media (max-width: 992px) { .services-grid, .services-grid--archive { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .services-grid, .services-grid--archive { grid-template-columns: 1fr; } }

/* =========================================================
   PETS TABS
   ========================================================= */
.pets-tabs { background: var(--color-surface); border-radius: var(--radius-lg); padding: 2.5rem; display: grid; grid-template-columns: 260px 1fr; gap: 2.5rem; }
.pets-tabs__list { display: flex; flex-direction: column; gap: 0.5rem; }
.pets-tabs__tab { display: flex; align-items: center; gap: 0.75rem; padding: 0.9rem 1.1rem; border-radius: var(--radius-sm); background: #fff; font-weight: 700; text-align: left; color: var(--color-text); transition: all var(--transition); }
.pets-tabs__tab:hover { color: var(--color-accent-dark); }
.pets-tabs__tab.is-active { background: var(--color-accent); color: #fff; box-shadow: var(--shadow); }
.pets-tabs__panel { display: none; }
.pets-tabs__panel.is-active { display: block; animation: fadeIn 0.4s ease; }
.pets-tabs__icon { display: inline-flex; align-items: center; justify-content: center; width: 84px; height: 84px; border-radius: 50%; background: #fff; color: var(--color-accent-dark); margin-bottom: 1.25rem; box-shadow: var(--shadow); }
.pets-tabs__panel h3 { font-size: 1.5rem; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px);} to { opacity: 1; transform: none; } }

@media (max-width: 782px) {
	.pets-tabs { grid-template-columns: 1fr; padding: 1.5rem; }
	.pets-tabs__list { flex-direction: row; flex-wrap: wrap; }
	.pets-tabs__tab { flex: 1 1 45%; }
}

/* =========================================================
   WHY US (dark section + counters)
   ========================================================= */
.why-us { position: relative; background: var(--color-dark) center/cover no-repeat; color: #fff; overflow: hidden; }
.why-us--placeholder { background: linear-gradient(135deg, #1c1c1c, #262523); }
.why-us__scrim { position: absolute; inset: 0; background: linear-gradient(100deg, rgba(10,10,10,0.92) 20%, rgba(10,10,10,0.55) 100%); }
.why-us__bg-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.why-us__grid { position: relative; z-index: 1; display: grid; grid-template-columns: 1.1fr 1fr; gap: 3rem; align-items: center; }
.why-us__content h2 { color: #fff; font-size: clamp(1.7rem, 3vw, 2.3rem); }
.why-us__content p { color: #d6d6d6; max-width: 460px; }
.why-us__actions { display: flex; gap: 1rem; margin-top: 1.75rem; flex-wrap: wrap; }
.why-us__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 1.75rem; }
.stat:first-child { grid-column: 1 / -1; }
.stat__number { font-family: var(--font-heading); font-size: 2.8rem; font-weight: 700; color: var(--color-accent); display: block; }
.stat h3 { color: #fff; font-size: 1.05rem; margin: 0.25rem 0 0.35rem; }
.stat p { color: #b9b9b9; font-size: 0.88rem; }

@media (max-width: 900px) {
	.why-us__grid { grid-template-columns: 1fr; }
	.why-us__stats { grid-template-columns: 1fr 1fr; }
	.stat:first-child { grid-column: auto; }
}

/* =========================================================
   TEAM
   ========================================================= */
.team-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.75rem; }
/* display:flex + height:100% (grid rows already stretch items to equal
   height) + margin-top:auto on the button – without this, two cards in
   the same row with a different amount of position text (one line vs
   two) ended up with their "Детальніше" button sitting at a different
   vertical position, even though the cards themselves were equal height. */
.team-card { text-align: center; display: flex; flex-direction: column; align-items: center; height: 100%; }
.team-card__photo { width: 100%; border-radius: var(--radius); overflow: hidden; aspect-ratio: 1/1; margin-bottom: 1rem; background: var(--color-surface); }
.team-card__photo img, .team-card__photo .img-placeholder { width: 100%; height: 100%; object-fit: cover; }
.team-card h3 { font-size: 1.1rem; margin-bottom: 0.2rem; }
.team-card p { color: var(--color-accent-dark); font-weight: 700; font-size: 0.9rem; }
.team-card__bio { color: var(--color-text-light); font-size: 0.9rem; margin-top: 0.5rem; }
button.team-card__photo { display: block; width: 100%; padding: 0; margin: 0 0 1rem; border: 0; background: var(--color-surface); font-family: inherit; cursor: pointer; }
.team-card__more { margin-top: auto; }
@media (max-width: 992px) { .team-grid { grid-template-columns: repeat(2, 1fr); } }

/* Doctors page (page-team.php): 3-column grid, photo on top, name and
   specialization tags underneath. Bio / quote still render if filled in. */
.team-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; }
.team-doctor { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 1.1rem; }
.team-doctor__photo { width: 100%; aspect-ratio: 1/1; border-radius: var(--radius); overflow: hidden; background: var(--color-surface); }
.team-doctor__photo img, .team-doctor__photo .img-placeholder { width: 100%; height: 100%; object-fit: cover; }
.team-doctor__body { width: 100%; min-width: 0; }
.team-doctor__body h3 { font-size: 1.25rem; margin-bottom: 0.6rem; }
.team-doctor__tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; margin-bottom: 0.5rem; }
.team-doctor__tag { display: inline-block; padding: 0.3rem 0.85rem; border-radius: 999px; background: var(--color-surface); border: 1px solid var(--color-border); color: var(--color-accent-dark); font-weight: 700; font-size: 0.82rem; }
.team-doctor__bio { color: var(--color-text); margin: 0.5rem 0 1rem; }
.team-doctor__bio p:last-child { margin-bottom: 0; }
.team-doctor__quote { font-style: italic; font-weight: 700; color: var(--color-heading); margin-bottom: 1rem; }
@media (max-width: 992px) { .team-list { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .team-list { grid-template-columns: 1fr; } .team-doctor__photo { max-width: 360px; } }

/* =========================================================
   GALLERY
   ========================================================= */
.slider-arrows { display: flex; gap: 0.6rem; }
.slider-arrow { width: 44px; height: 44px; border-radius: 50%; border: 1.5px solid var(--color-border); display: flex; align-items: center; justify-content: center; transition: all var(--transition); }
.slider-arrow:hover { background: var(--color-dark); color: #fff; border-color: var(--color-dark); }

.gallery-track { display: flex; gap: 1.25rem; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 0.5rem; }
.gallery-track::-webkit-scrollbar { display: none; }
.gallery-track__item { flex: 0 0 clamp(220px, 26vw, 300px); scroll-snap-align: start; border-radius: var(--radius); overflow: hidden; aspect-ratio: 4/3; position: relative; }
.gallery-track__item img, .gallery-track__item video { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; }
.gallery-track__item:hover img, .gallery-track__item:hover video { transform: scale(1.08); }

.gallery-filters { display: flex; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 2rem; }
.gallery-filters__btn { padding: 0.55rem 1.2rem; border-radius: 999px; border: 1.5px solid var(--color-border); font-weight: 700; font-size: 0.88rem; transition: all var(--transition); }
.gallery-filters__btn.is-active, .gallery-filters__btn:hover { background: var(--color-dark); color: #fff; border-color: var(--color-dark); }

/* A uniform grid, not a Pinterest-style masonry – photos and (especially)
 * video posters come in all sorts of aspect ratios, and letting a CSS
 * column layout stack them at their natural height produced a ragged
 * look with uneven column bottoms, worst of all once the Фото/Відео
 * filter hides most items and leaves lopsided gaps. Every tile is now
 * the same 4:3 box (cropped via object-fit, same technique already used
 * for the homepage preview strip – see .gallery-track__item above). */
.gallery-masonry { display: grid; grid-template-columns: repeat( 3, 1fr ); gap: 1.5rem; }
.gallery-masonry__item {
	display: block;
	aspect-ratio: 4/3;
	border-radius: var(--radius);
	overflow: hidden;
	box-shadow: 0 6px 18px rgba(20,20,30,.06);
	transition: box-shadow 0.3s ease;
}
.gallery-masonry__item img, .gallery-masonry__item video { width: 100%; height: 100%; display: block; object-fit: cover; transition: transform 0.5s ease; }
.gallery-masonry__item:hover { box-shadow: 0 12px 28px rgba(20,20,30,.12); }
.gallery-masonry__item:hover img, .gallery-masonry__item:hover video { transform: scale(1.06); }
.gallery-masonry__item.is-hidden { display: none; }
@media (max-width: 900px) { .gallery-masonry { grid-template-columns: repeat( 2, 1fr ); } }
@media (max-width: 560px) { .gallery-masonry { grid-template-columns: 1fr; gap: 1rem; } }

/* Gallery cards (photo/video) – shared look for both the homepage preview
   strip (.gallery-track__item, a <button> that opens the theme's own
   .media-trigger lightbox) and the full gallery page (.gallery-masonry__item,
   an <a class="glightbox"> instead - see initGallery() in main.js). The
   reset below covers both tags, then adds the video play-icon overlay. */
.gallery-card { border: 0; padding: 0; background: none; cursor: pointer; display: block; width: 100%; position: relative; font: inherit; text-align: left; }
.gallery-card video { display: block; aspect-ratio: 4/3; background: var(--color-border); }
.gallery-card__placeholder { display: block; aspect-ratio: 4/3; }
.gallery-card__play { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; }
.gallery-card__play .icon { width: 46px; height: 46px; color: #fff; filter: drop-shadow(0 2px 10px rgba(0,0,0,.45)); transition: transform var(--transition); }
.gallery-card:hover .gallery-card__play .icon { transform: scale(1.12); }

.gallery-page__more { display: flex; justify-content: center; margin-top: 2.5rem; }
.gallery-page__more .btn[disabled] { opacity: 0.6; pointer-events: none; }
.gallery-page__instagram { display: flex; justify-content: center; margin-top: 1.25rem; }
.gallery-page__instagram .btn .icon { width: 1.1em; height: 1.1em; }

/* "Send us your pet's photo" invite at the bottom of the gallery page. */
.gallery-cta { display: flex; align-items: center; gap: 1.5rem; margin-top: 3rem; padding: 1.75rem 2rem; border: 1.5px dashed var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); flex-wrap: wrap; }
.gallery-cta__icon { width: 48px; height: 48px; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-shadow: 0 4px 14px rgba(0,0,0,.06); }
.gallery-cta__icon .icon { width: 22px; height: 22px; color: var(--color-accent); }
.gallery-cta__text { flex: 1 1 260px; }
.gallery-cta__text strong { display: block; font-size: 1.05rem; margin-bottom: 0.25rem; }
.gallery-cta__text p { margin: 0; color: var(--color-text-light); font-size: 0.9rem; }
.gallery-cta .btn { flex-shrink: 0; }
@media (max-width: 600px) { .gallery-cta { flex-direction: column; text-align: center; } }

/* -------------------- Price page (PDF viewer) -------------------- */
.price-page__intro { text-align: center; max-width: 640px; margin: 0 auto 2rem; color: var(--color-text-light); }

.price-viewer { max-width: 760px; margin: 0 auto; }

.price-viewer__page-wrap {
	position: relative; display: flex; justify-content: center; align-items: center;
	min-height: 320px; background: var(--color-surface); border: 1px solid var(--color-border);
	border-radius: var(--radius); padding: 1rem; overflow: hidden;
}
.price-viewer__canvas { max-width: 100%; height: auto; box-shadow: var(--shadow); background: #fff; }

.price-viewer__loading,
.price-viewer__fallback { margin: 0; color: var(--color-text-light); font-style: italic; text-align: center; padding: 2rem 1rem; }
.price-viewer__fallback a { font-style: normal; font-weight: 700; }

.price-viewer__zone {
	position: absolute; top: 0; bottom: 0; width: 30%; border: 0; background: transparent;
	cursor: pointer; padding: 0;
}
.price-viewer__zone:disabled { cursor: default; }
.price-viewer__zone--prev { left: 0; }
.price-viewer__zone--next { right: 0; }

.price-viewer__toolbar {
	display: flex; align-items: center; justify-content: center; gap: 1rem; flex-wrap: wrap;
	margin-top: 1.25rem;
}
.price-viewer__toolbar--top { margin-top: 0; margin-bottom: 1.25rem; }
.price-viewer__nav {
	display: inline-flex; align-items: center; justify-content: center;
	width: 42px; height: 42px; border-radius: 50%; border: 1px solid var(--color-border);
	background: #fff; color: var(--color-heading); cursor: pointer; transition: var(--transition);
}
.price-viewer__nav .icon { width: 18px; height: 18px; }
.price-viewer__nav:hover:not(.is-disabled) { background: var(--color-accent); color: #fff; border-color: var(--color-accent); }
.price-viewer__nav.is-disabled { opacity: 0.4; cursor: default; }
.price-viewer__page-indicator { font-weight: 700; color: var(--color-heading); min-width: 110px; text-align: center; }
.price-viewer__download {
	display: inline-flex; align-items: center; gap: 0.4rem; font-weight: 700;
	color: var(--color-text-light); transition: var(--transition);
}
.price-viewer__download .icon { width: 18px; height: 18px; }
.price-viewer__download:hover { color: var(--color-accent-dark); }
@media (max-width: 600px) {
	.price-viewer__toolbar { gap: 0.6rem; }
	.price-viewer__download span { display: none; }
}

/* lightbox */
.lightbox-overlay {
	position: fixed; inset: 0; background: rgba(10,10,10,0.92); z-index: 999;
	display: flex; align-items: center; justify-content: center; padding: 2rem;
	opacity: 0; visibility: hidden; transition: opacity var(--transition);
}
.lightbox-overlay.is-open { opacity: 1; visibility: visible; }
.lightbox-overlay img { max-width: 92vw; max-height: 86vh; border-radius: var(--radius-sm); box-shadow: var(--shadow-lg); }
.lightbox-close { position: absolute; top: 20px; right: 24px; color: #fff; width: 44px; height: 44px; }

/* Generic media lightbox – image / uploaded video / YouTube, with
   prev-next arrows when its group has more than one item. Replaces the
   old YouTube-only .video-lightbox. */
.media-lightbox {
	position: fixed; inset: 0; background: rgba(10,10,10,0.92); z-index: 999;
	display: flex; align-items: center; justify-content: center; padding: 2rem;
}
.media-lightbox__inner { position: relative; width: 100%; max-width: 960px; }
.media-lightbox__frame {
	position: relative; width: 100%; aspect-ratio: 16 / 9; background: #000;
	border-radius: var(--radius-sm); overflow: hidden; box-shadow: var(--shadow-lg);
}
.media-lightbox__frame iframe,
.media-lightbox__frame video,
.media-lightbox__frame img {
	position: absolute; inset: 0; width: 100%; height: 100%; border: 0; object-fit: contain; background: #000;
}
.media-lightbox__close {
	position: absolute; top: -48px; right: 0; color: #fff; width: 40px; height: 40px;
	border-radius: 50%; background: rgba(255,255,255,0.14); border: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; transition: background var(--transition);
}
.media-lightbox__close:hover { background: var(--color-accent); }
.media-lightbox__close .icon { width: 22px; height: 22px; }
.media-lightbox__arrow {
	position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
	width: 46px; height: 46px; border-radius: 50%; background: rgba(255,255,255,0.14); color: #fff; border: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; transition: background var(--transition);
}
.media-lightbox__arrow:hover { background: var(--color-accent); }
.media-lightbox__arrow--prev { left: -60px; }
.media-lightbox__arrow--next { right: -60px; }
@media (max-width: 900px) {
	.media-lightbox__arrow--prev { left: 4px; }
	.media-lightbox__arrow--next { right: 4px; }
}

/* On-page mini "slider" for a photo/video slot that can hold more than
   one item (intro block's main/sub media). Only the .is-active slide is
   shown; arrows only render (in the template) when there's more than one. */
.media-slider { width: 100%; height: 100%; }
.media-slider__slide {
	position: absolute; inset: 0; width: 100%; height: 100%; padding: 0; margin: 0; border: 0;
	background-size: cover; background-position: center; background-color: var(--color-surface);
	display: flex; align-items: center; justify-content: center;
	opacity: 0; pointer-events: none; transition: opacity 0.6s ease;
	cursor: pointer; font-family: inherit;
}
.media-slider__slide.is-active { opacity: 1; pointer-events: auto; }
.media-slider__slide video { width: 100%; height: 100%; object-fit: cover; }
.media-slider__play {
	width: 56px; height: 56px; border-radius: 50%; background: var(--color-accent); color: #fff;
	display: flex; align-items: center; justify-content: center; box-shadow: 0 10px 30px rgba(0,0,0,0.25);
}
.media-slider__play .icon { width: 22px; height: 22px; margin-left: 2px; }
.media-slider__arrow {
	position: absolute; top: 50%; transform: translateY(-50%); z-index: 3;
	width: 34px; height: 34px; border-radius: 50%; background: #fff; border: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 14px rgba(0,0,0,0.18);
	transition: background var(--transition);
}
.media-slider__arrow:hover { background: var(--color-surface); }
.media-slider__arrow .icon { width: 18px; height: 18px; color: var(--color-dark); }
.media-slider__arrow--prev { left: 10px; }
.media-slider__arrow--next { right: 10px; }

/* Buttons rendered as <button> (media triggers) must look identical to the
   <a class="btn ..."> markup they stand in for – reset default UA chrome. */
button.media-trigger, button.video-feature__play { font-family: inherit; border: 0; cursor: pointer; }
/* .media-trigger's own reset above (element+class selector) beats
   .btn--outline's border (a single class) on specificity alone, no
   matter which comes first in the file – so a <button class="btn
   btn--outline media-trigger"> (e.g. the video block's "переглянути
   відео") never showed its border, in either state. This re-adds it
   with matching (two-class) specificity, scoped to that exact
   combination only – other media-trigger buttons are untouched. */
.btn--outline.media-trigger { border: 1.5px solid var(--color-border); }
.btn--outline.media-trigger:hover { border-color: var(--color-dark); }

/* =========================================================
   TESTIMONIALS
   ========================================================= */
.testimonials-track { display: flex; gap: 1.5rem; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; padding-bottom: 0.5rem; }
.testimonials-track::-webkit-scrollbar { display: none; }
.testimonial-card, .testimonials-grid .testimonial-card {
	flex: 0 0 clamp(280px, 40vw, 400px); scroll-snap-align: start;
	background: var(--color-surface); border-radius: var(--radius); padding: 2.2rem; position: relative;
}
.testimonials-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.75rem; }
.testimonials-grid .testimonial-card { flex: none; }
.testimonial-card__quote { color: var(--color-accent); opacity: 0.5; display: block; margin-bottom: 0.75rem; }
.testimonial-card .stars { display: flex; gap: 2px; margin-bottom: 0.75rem; }
.testimonial-card p { font-style: italic; color: var(--color-text); }
.testimonial-card footer { display: flex; align-items: center; gap: 0.75rem; margin-top: 1.25rem; }
.testimonial-card__avatar { width: 46px; height: 46px; border-radius: 50%; object-fit: cover; }
.testimonial-card cite { font-style: normal; font-weight: 800; display: block; }
.testimonial-card footer span { font-size: 0.85rem; color: var(--color-text-light); }

@media (max-width: 992px) { .testimonials-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .testimonials-grid { grid-template-columns: 1fr; } }

/* =========================================================
   FAQ / ACCORDION
   ========================================================= */
.faq-section__grid { display: grid; grid-template-columns: 0.8fr 1.2fr; gap: 3rem; }
.faq-section__intro .btn { margin-top: 1.5rem; }
.accordion__item { border-bottom: 1px solid var(--color-border); }
.accordion__item:first-child { border-top: 1px solid var(--color-border); }
.accordion__trigger { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1.4rem 0; text-align: left; font-weight: 700; font-size: 1.05rem; color: var(--color-heading); }
.accordion__trigger:hover { color: var(--color-accent-dark); }
.accordion__item.is-open .accordion__chevron { transform: rotate(90deg); color: var(--color-accent-dark); }
.accordion__panel { max-height: 0; overflow: hidden; transition: max-height 0.35s ease; }
.accordion__item.is-open .accordion__panel { max-height: 400px; }
.accordion__panel-inner { padding-bottom: 1.4rem; color: var(--color-text-light); }

@media (max-width: 900px) { .faq-section__grid { grid-template-columns: 1fr; } }

/* =========================================================
   PARTNERS BAND (carousel of partner logos – replaces the
   earlier newsletter/"Корисні поради" band)
   ========================================================= */
.partners-band { position: relative; background: var(--color-accent); padding: 64px 0; overflow: hidden; }
/* Optional background video (Контент → Партнери) – sits behind everything,
   with a dark scrim on top so the white heading text and logo cards stay
   readable over any footage. Falls back to the plain accent colour when
   no video is set (partners-band--video is only added then). */
.partners-band__bg-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.partners-band__scrim { position: absolute; inset: 0; background: rgba(20, 24, 63, 0.55); z-index: 1; }
.partners-band > .container, .partners-band > .partners-marquee { position: relative; z-index: 2; }
.partners-band__head { text-align: center; margin-bottom: 2.5rem; }
.partners-band__head .eyebrow { color: rgba(255,255,255,0.75); }
.partners-band__head h2 { font-size: 1.5rem; color: #fff; margin: 0; }
.partners-marquee { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.partners-track { display: flex; width: max-content; gap: 2.5rem; align-items: center; }
.partners-track.is-static { justify-content: center; width: 100%; flex-wrap: wrap; row-gap: 1.5rem; }
.partners-track.is-looping { animation: partners-scroll calc(var(--partners-count, 6) * 4s) linear infinite; }
.partners-track.is-looping:hover, .partners-track.is-looping:focus-within { animation-play-state: paused; }
/* White cards behind each logo – shows the logo in its real colours
   (works regardless of whether the uploaded file has transparency) and
   gives even a handful of partners real visual weight on the band. */
.partners-track__item {
	flex: 0 0 auto; display: flex; align-items: center; justify-content: center;
	background: #fff; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg);
	min-width: 250px; height: 150px; padding: 1.5rem 2.75rem;
	transition: transform var(--transition), box-shadow var(--transition);
}
.partners-track__item:hover { transform: translateY(-4px); box-shadow: 0 26px 55px rgba(20,20,20,0.22); }
.partners-track__item img { max-height: 88px; max-width: 190px; width: auto; height: auto; object-fit: contain; }
.partners-track__name { font-weight: 800; font-size: 1.35rem; color: var(--color-dark); letter-spacing: 0.02em; white-space: nowrap; }

@media (max-width: 700px) {
	.partners-track__item { min-width: 190px; height: 120px; padding: 1.1rem 1.75rem; }
	.partners-track__item img { max-height: 64px; max-width: 150px; }
}
@media (max-width: 460px) {
	.partners-track__item { min-width: 150px; height: 100px; padding: 0.9rem 1.4rem; }
	.partners-track__item img { max-height: 52px; max-width: 120px; }
}

@keyframes partners-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .partners-track.is-looping { animation: none; overflow-x: auto; } }

.hp-field { position: absolute !important; left: -9999px; width: 1px; height: 1px; }
.form-notice { width: 100%; margin-top: 0.5rem; font-weight: 700; font-size: 0.9rem; }
.form-notice--success { color: #14532d; }
.form-notice--error { color: #7f1d1d; }

/* =========================================================
   FOOTER
   ========================================================= */
.site-footer { background: var(--color-dark-soft); color: #c9c7c2; padding-top: 70px; }
.footer-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.2fr; gap: 2.5rem; padding-bottom: 50px; }
.footer-col h3 { color: #fff; font-size: 1.1rem; margin-bottom: 1.25rem; }
.footer-logo img { height: 52px; margin-bottom: 1rem; }
.footer-col--about p { font-size: 0.92rem; color: #a9a7a2; }
.footer-social { display: flex; gap: 0.6rem; margin-top: 1.25rem; }
.footer-social a { width: 38px; height: 38px; border-radius: 50%; background: rgba(255,255,255,0.06); display: flex; align-items: center; justify-content: center; transition: background var(--transition); }
.footer-social a:hover { background: var(--color-accent); color: #fff; }

.footer-col--links ul li, .footer-col--links > ul > li { margin-bottom: 0.65rem; }
.footer-col--links a { font-size: 0.92rem; transition: color var(--transition); }
.footer-col--links a:hover { color: var(--color-accent); }
.footer-col--links .sub-menu { display: none; }

.footer-col--contact ul li { display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 1rem; font-size: 0.9rem; }
.footer-col--contact .icon { color: var(--color-accent); margin-top: 2px; }
.footer-col--contact a:hover { color: var(--color-accent); }

.footer-recent-posts li { display: flex; gap: 0.75rem; margin-bottom: 1rem; }
.footer-recent-posts img, .footer-recent-posts .img-placeholder { width: 56px; height: 56px; border-radius: var(--radius-sm); object-fit: cover; flex-shrink: 0; }
.footer-recent-posts strong { display: block; font-size: 0.85rem; color: #e5e3df; font-weight: 700; line-height: 1.35; }
.footer-recent-posts time { font-size: 0.78rem; color: #8a8883; }
.footer-empty { font-size: 0.88rem; color: #8a8883; }

.footer-bottom { border-top: 1px solid rgba(255,255,255,0.08); padding: 20px 0; }
.footer-bottom__inner { display: flex; justify-content: space-between; align-items: center; gap: 1rem; flex-wrap: wrap; font-size: 0.85rem; color: #8a8883; }
.footer-bottom__inner p { margin: 0; }
.footer-credit a { color: var(--color-accent); }

/* footer.js (Lisa Studio's shared client-sites script, loaded in
   footer.php) is moved into .footer-bottom__inner by an inline script
   right after it – see footer.php – so it sits on the same line as the
   copyright text instead of its own centered block below. footer.js
   injects its OWN <style> tag later in <head>, which would otherwise
   win the cascade on equal specificity, hence !important here; this is
   scoped to .footer-bottom__inner so it only affects this site, not the
   many other client sites that also load footer.js. */
.footer-bottom__inner #lisa-global-footer-link {
	margin-top: 0 !important;
	padding: 0 !important;
	text-align: right !important;
	border-top: none !important;
	line-height: inherit !important;
	font-size: inherit !important;
	opacity: 1 !important;
}
.footer-bottom__inner #lisa-global-footer-link .lisa-foot-text {
	display: inline !important;
	margin-bottom: 0 !important;
	margin-right: 0.4em;
}

@media (max-width: 992px) { .footer-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .footer-grid { grid-template-columns: 1fr; } }
/* text-align:center on .footer-logo does nothing – the theme's global
   `img { display:block; }` reset (see line ~45) makes the logo a block
   box, and text-align only centers inline/inline-block content. img has
   a fixed height + auto width here (no percentage sizing), so centering
   it with margin:auto works with no circular-sizing risk. */
@media (max-width: 560px) { .footer-logo img { margin: 0 auto; } }

.back-to-top {
	position: fixed; right: 24px; bottom: 24px; width: 48px; height: 48px; border-radius: 50%;
	background: var(--color-accent); color: #fff; display: flex; align-items: center; justify-content: center;
	box-shadow: var(--shadow-lg); opacity: 0; visibility: hidden; transform: translateY(10px);
	transition: all var(--transition); z-index: 150;
}
.back-to-top.is-visible { opacity: 1; visibility: visible; transform: none; }

/* -------------------- Admin-only: hide/show WP admin bar -------------------- */
.admin-bar-toggle {
	position: fixed; left: 20px; bottom: 20px; z-index: 999999;
	width: 40px; height: 40px; border-radius: 50%; border: 0;
	background: rgba(20, 24, 63, 0.85); color: #fff;
	display: flex; align-items: center; justify-content: center;
	box-shadow: var(--shadow-lg); transition: background var(--transition), transform var(--transition);
}
.admin-bar-toggle:hover { background: var(--color-accent); transform: translateY(-2px); }
.admin-bar-toggle .icon { width: 19px; height: 19px; }
.admin-bar-toggle__icon--on { display: none; }
.admin-bar-toggle.is-hidden-state .admin-bar-toggle__icon--off { display: none; }
.admin-bar-toggle.is-hidden-state .admin-bar-toggle__icon--on { display: block; }

html.vethelp-hide-adminbar { margin-top: 0 !important; }
html.vethelp-hide-adminbar #wpadminbar { display: none !important; }
/* The sticky header stuck at top:0 the same place as the fixed admin bar
   (which sits above it, z-index-wise) - keep it just below the bar while
   it's showing, and back at the very top once the bar is hidden. */
body.admin-bar .site-header { top: 32px; }
@media (max-width: 782px) {
	body.admin-bar .site-header { top: 46px; }
}
html.vethelp-hide-adminbar .site-header { top: 0 !important; }

/* =========================================================
   CONTACT PAGE
   ========================================================= */
.contact-grid { display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 3rem; margin-bottom: 3rem; }
.contact-info__list li { display: flex; gap: 1rem; margin-bottom: 1.5rem; }
.contact-info__icon { width: 48px; height: 48px; border-radius: 50%; background: var(--color-surface); color: var(--color-accent-dark); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.contact-info__list strong { display: block; margin-bottom: 0.2rem; }
.contact-info__hours-row { display: block; }
.contact-info__social { margin-top: 1.5rem; }
.contact-info__social a { background: var(--color-surface); color: var(--color-heading); }
.contact-info__social a:hover { background: var(--color-accent); }

.contact-form-wrap { background: var(--color-surface); border-radius: var(--radius-lg); padding: 2.5rem; }
.contact-form { margin-top: 1.5rem; display: grid; gap: 1.1rem; }
.form-row { display: flex; flex-direction: column; gap: 0.4rem; }
.form-row label { font-weight: 700; font-size: 0.9rem; }
.form-row input, .form-row textarea, .form-row select {
	padding: 0.85rem 1rem; border-radius: var(--radius-sm); border: 1.5px solid var(--color-border);
	background: #fff; transition: border-color var(--transition); width: 100%;
}
.form-row input:focus, .form-row textarea:focus, .form-row select:focus { outline: none; border-color: var(--color-accent); }
.form-row textarea { resize: vertical; }

.contact-map { border-radius: var(--radius-lg); overflow: hidden; }
.contact-map iframe { display: block; }
/* Карта у правій колонці сітки контактів: займає всю висоту колонки (мінімум 460px),
   тож вирівнюється по низу з блоком контактів зліва; кнопка маршруту лежить поверх карти. */
.contact-map--side { position: relative; min-height: 460px; box-shadow: 0 14px 40px rgba(20,20,30,.12); border: 1px solid var(--color-border); }
.contact-map--side iframe { position: absolute; inset: 0; width: 100%; height: 100%; }
.contact-map__route { position: absolute; left: 1rem; bottom: 1rem; z-index: 2; box-shadow: 0 6px 18px rgba(0,0,0,.25); }
.contact-info__messengers { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: 1.5rem; }
.contact-messenger { display: inline-flex; align-items: center; gap: .55rem; }
.contact-messenger .icon { width: 20px; height: 20px; }
.contact-messenger--telegram .icon { color: #229ed9; }
.contact-messenger--viber .icon { color: #7360f2; }
.contact-messenger--telegram:hover { background: #229ed9; border-color: #229ed9; color: #fff; }
.contact-messenger--viber:hover { background: #7360f2; border-color: #7360f2; color: #fff; }
.contact-messenger:hover .icon { color: #fff; }
@media (max-width: 900px) { .contact-map--side { min-height: 360px; } }

@media (max-width: 900px) { .contact-grid { grid-template-columns: 1fr; } }

.contact-cta { text-align: center; background: var(--color-surface); border-radius: var(--radius-lg); padding: 3rem 2rem; margin-top: 3rem; }
.contact-cta .btn { margin-top: 1rem; }
.contact-cta .why-us__actions { justify-content: center; }

/* =========================================================
   BLOG / SINGLE
   ========================================================= */
.blog-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; }
.blog-card__media { display: block; border-radius: var(--radius); overflow: hidden; aspect-ratio: 4/3; margin-bottom: 1.1rem; }
.blog-card__media img, .blog-card__media .img-placeholder { width: 100%; height: 100%; object-fit: cover; }
.blog-card__date { display: flex; align-items: center; gap: 0.4rem; font-size: 0.82rem; color: var(--color-text-light); margin-bottom: 0.5rem; }
.blog-card h2 { font-size: 1.2rem; margin-bottom: 0.5rem; }
.blog-card h2 a:hover { color: var(--color-accent-dark); }
.blog-card p { font-size: 0.92rem; color: var(--color-text-light); }
@media (max-width: 992px) { .blog-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .blog-grid { grid-template-columns: 1fr; } }

.pagination { display: flex; justify-content: center; gap: 0.5rem; margin-top: 3rem; }
.pagination .page-numbers {
	width: 42px; height: 42px; display: flex; align-items: center; justify-content: center;
	border-radius: 50%; font-weight: 700; border: 1.5px solid var(--color-border);
}
.pagination .page-numbers.current { background: var(--color-dark); color: #fff; border-color: var(--color-dark); }
.pagination .page-numbers:hover { border-color: var(--color-dark); }

/* padding-top/bottom only (not the padding:60px 0 shorthand this used
   to be) – that shorthand also sets left/right to 0, wiping out the
   20px side padding .container already gives this same element. On
   desktop the loss was invisible (the container's own max-width still
   left big side margins from being centered on a wide viewport), but
   on mobile, where the viewport IS roughly the container's width,
   there was nothing left to show any padding at all – the article
   text ran edge-to-edge. */
.single-post__grid, .single-service__grid { display: grid; grid-template-columns: 1fr 300px; gap: 3rem; padding-top: 60px; padding-bottom: 60px; }
.single-post__meta { display: flex; gap: 1.25rem; flex-wrap: wrap; font-size: 0.88rem; color: var(--color-text-light); margin-bottom: 1.5rem; }
.single-post__meta span { display: flex; align-items: center; gap: 0.4rem; }
.single-post__thumb, .single-service__thumb { border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 2rem; aspect-ratio: 16/9; }
.single-post__thumb img { width: 100%; height: 100%; object-fit: cover; }
.entry-content h2 { margin-top: 1.75em; font-size: 1.5rem; }
.entry-content h3 { margin-top: 1.5em; font-size: 1.2rem; }
.entry-content ul, .entry-content ol { margin: 0 0 1.25em; padding-left: 1.25em; list-style: disc; }
.entry-content ol { list-style: decimal; }
.entry-content a { color: var(--color-accent-dark); text-decoration: underline; }
.entry-content img { border-radius: var(--radius); margin: 1.5em 0; }
.entry-content blockquote {
	margin: 1.75em 0; padding: 1.25rem 1.5rem; border-left: 3px solid var(--color-accent);
	background: var(--color-surface); border-radius: var(--radius-sm);
	font-size: 1.05rem; font-style: italic; color: var(--color-heading);
}
.entry-content blockquote p { margin-bottom: 0; }
.single-post__tags { margin-top: 2rem; display: flex; gap: 0.5rem; flex-wrap: wrap; }
.single-post__tags a { border: 1px solid var(--color-border); padding: 0.3rem 0.8rem; border-radius: 999px; font-size: 0.82rem; }

.single-service__icon { margin: 1.5rem 0; }

/* Sub-items list (e.g. the specific vaccines under "Профілактичні заходи") */
.single-service__list-block { margin: 2rem 0; padding: 1.75rem 2rem; background: var(--color-surface); border-radius: var(--radius-lg); }
.single-service__list-heading { font-size: 1.1rem; margin: 1.5rem 0 1rem; }
.single-service__list-heading:first-child { margin-top: 0; }
.single-service__list { margin-bottom: 0; }
.single-service__list:last-child { margin-bottom: 0; }

.service-list li { border-bottom: 1px solid var(--color-border); }
.service-list a { display: flex; align-items: center; gap: 0.75rem; padding: 0.9rem 0.25rem; font-weight: 700; }
.service-list .icon { color: var(--color-accent-dark); }
.service-list a:hover { color: var(--color-accent-dark); }

.widget { background: var(--color-surface); padding: 1.75rem; border-radius: var(--radius); margin-bottom: 1.5rem; }
.widget-title { font-size: 1.05rem; margin-bottom: 0.75rem; }
/* WP core widgets (Recent Posts / "Недавні записи", Categories, Archives…)
   render a bare <ul><li> with no spacing at all, so entries ran together
   into one block. Give every item its own row and a light divider. */
.widget ul { list-style: none; margin: 0; padding: 0; }
.widget ul li { padding: 0.85rem 0; border-bottom: 1px solid var(--color-border); }
.widget ul li:first-child { padding-top: 0; }
.widget ul li:last-child { border-bottom: 0; padding-bottom: 0; }
.widget ul a { display: block; font-weight: 700; color: var(--color-heading); }
.widget ul a:hover { color: var(--color-accent-dark); }
.widget .post-date { display: block; margin-top: 0.3rem; font-size: 0.8rem; font-weight: 400; color: var(--color-text-light); }

/* "Інші послуги" sidebar – stays in view while scrolling on desktop, and
   scrolls internally (within its own box) once the service list grows too
   tall to fit under the sticky header, so future services never get cut off. */
@media (min-width: 901px) {
	.single-service__sidebar {
		position: sticky;
		top: calc(var(--header-sticky-bottom, 90px) + 24px);
		max-height: calc(100vh - var(--header-sticky-bottom, 90px) - 48px);
		overflow-y: auto;
	}
}

@media (max-width: 900px) {
	.single-post__grid, .single-service__grid { grid-template-columns: 1fr; }
}

.generic-page__thumb { border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 2rem; aspect-ratio: 21/9; }
.generic-page__thumb img { width: 100%; height: 100%; object-fit: cover; }

/* =========================================================
   404
   ========================================================= */
.error-404 { text-align: center; padding: 100px 0; }
.error-404__code { font-family: var(--font-heading); font-size: 6rem; color: var(--color-accent); font-weight: 700; line-height: 1; }
.error-404 p { max-width: 420px; margin: 1rem auto 1.5rem; }

/* =========================================================
   COMMENTS
   ========================================================= */
.comments-area { margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--color-border); }
.comment-list { margin: 1.5rem 0; }
.comment-list .comment-body { padding: 1.25rem 0; border-bottom: 1px solid var(--color-border); }
.comment-form input, .comment-form textarea { width: 100%; padding: 0.85rem 1rem; border-radius: var(--radius-sm); border: 1.5px solid var(--color-border); margin-bottom: 1rem; }

/* =========================================================
   Misc / stars
   ========================================================= */
.stars { display: inline-flex; gap: 2px; }
.stars .star { color: #d8d5cd; }
.stars .star.is-filled { color: var(--color-accent); }


/* =========================================================
   BOOKING MODAL – "Записатися на прийом"
   Same visual language as .media-lightbox (dark overlay, centered card,
   floating close button) but a form dialog instead of a media viewer.
   ========================================================= */
.booking-modal { position: fixed; inset: 0; z-index: 1000; display: none; align-items: center; justify-content: center; padding: 2rem; }
.booking-modal.is-open { display: flex; }
.booking-modal__overlay { position: absolute; inset: 0; background: rgba(10, 10, 10, 0.92); }
.booking-modal__dialog {
	position: relative; width: 100%; max-width: 480px; max-height: 100%; overflow-y: auto;
	background: #fff; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg);
}
.booking-modal__body { padding: 2.5rem; }
.booking-modal__body h2 { font-size: 1.5rem; margin-bottom: 0.4rem; }
.booking-modal__subtitle { color: var(--color-text-light); margin-bottom: 1.5rem; }
.booking-modal__close {
	position: absolute; top: -48px; right: 0; color: #fff; width: 40px; height: 40px;
	border-radius: 50%; background: rgba(255,255,255,0.14); border: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; transition: background var(--transition);
}
.booking-modal__close:hover { background: var(--color-accent); }
.booking-modal__close .icon { width: 22px; height: 22px; }
@media (max-width: 560px) {
	.booking-modal { padding: 0.75rem; }
	.booking-modal__body { padding: 1.75rem; }
	.booking-modal__close {
		top: 10px; right: 10px; width: 34px; height: 34px;
		color: var(--color-dark); background: rgba(0,0,0,0.06);
	}
	.booking-modal__close:hover { background: rgba(0,0,0,0.12); }
}

.booking-form { display: grid; gap: 1.1rem; }
.booking-form__submit { width: 100%; margin-top: 0.25rem; }
.booking-form__submit[disabled] { opacity: 0.6; cursor: default; }
.booking-form__error { color: #7f1d1d; font-weight: 700; font-size: 0.9rem; margin: 0; }

.booking-modal__success { text-align: center; padding: 1rem 0; }
.booking-modal__success-icon {
	display: inline-flex; align-items: center; justify-content: center; width: 60px; height: 60px;
	border-radius: 50%; background: var(--color-surface); color: var(--color-accent-dark); margin-bottom: 1rem;
}
.booking-modal__success-icon .icon { width: 28px; height: 28px; }
.booking-modal__success h3 { margin-bottom: 0.5rem; }
.booking-modal__success p { color: var(--color-text-light); margin-bottom: 1.5rem; }


/* =========================================================
   TEAM LIGHTBOX – doctor profile (photo + посада + опис), opened by
   ".js-team-lightbox" buttons (see initTeamLightbox() in main.js). Same
   visual language as .booking-modal / .media-lightbox; adds prev/next
   arrows to page through EVERY doctor (not just the ones on the current
   page) with wraparound.
   ========================================================= */
.team-lightbox { position: fixed; inset: 0; z-index: 1000; display: none; align-items: center; justify-content: center; padding: 2rem; }
.team-lightbox.is-open { display: flex; }
.team-lightbox__overlay { position: absolute; inset: 0; background: rgba(10, 10, 10, 0.92); }
.team-lightbox__dialog { position: relative; width: 100%; max-width: 720px; max-height: 100%; }
/* The scrollable "card" is a separate element from .team-lightbox__dialog
   on purpose: .team-lightbox__arrow--prev/--next hang outside the dialog
   (left/right: -60px) to sit beside it, and an overflow:auto directly on
   their positioning parent would turn that overhang into scrollable
   content – producing a spurious horizontal scrollbar (same reason
   .media-lightbox keeps its own overflow on .media-lightbox__frame, not
   on .media-lightbox__inner, which positions its arrows the same way). */
.team-lightbox__card {
	/* max-height:100% here used to resolve against .team-lightbox__dialog,
	   but that parent has no explicit height of its own (only its own
	   max-height:100%, auto otherwise) – a percentage height on a child
	   needs the parent's height to be a definite value, not "auto", so
	   in practice this never actually clamped anything: a tall card
	   (square photo + a longer bio) just grew past the viewport instead
	   of scrolling internally, hiding the photo with no way to reach it.
	   Sizing directly off the viewport (minus .team-lightbox's own
	   padding, matched per breakpoint below) gives it a real, definite
	   cap so overflow-y:auto actually kicks in. */
	max-height: calc(100vh - 4rem); overflow-y: auto;
	background: #fff; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg);
	display: grid; grid-template-columns: 260px 1fr;
}
/* The card's right column (bio text) is usually taller than the
   260px-wide square photo – without an explicit align, the photo
   (a grid item with its own aspect-ratio) doesn't stretch to fill
   that height, so it sat anchored at the top instead of centered
   in the leftover space. place-self centers it on both axes. */
.team-lightbox__photo { aspect-ratio: 1/1; background: var(--color-surface); place-self: center; overflow: hidden; }
.team-lightbox__photo img { width: 100%; height: 100%; object-fit: contain; display: block; }
.team-lightbox__body { padding: 2.5rem; align-self: center; }
.team-lightbox__body h3 { font-size: 1.4rem; margin-bottom: 0.3rem; }
.team-lightbox__position { color: var(--color-accent-dark); font-weight: 700; margin-bottom: 1rem; }
.team-lightbox__bio { color: var(--color-text-light); }
.team-lightbox__bio p { margin-bottom: 0.75rem; }
.team-lightbox__bio p:last-child { margin-bottom: 0; }
.team-lightbox__close {
	position: absolute; top: -48px; right: 0; color: #fff; width: 40px; height: 40px;
	border-radius: 50%; background: rgba(255,255,255,0.14); border: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; transition: background var(--transition);
}
.team-lightbox__close:hover { background: var(--color-accent); }
.team-lightbox__close .icon { width: 22px; height: 22px; }
.team-lightbox__arrow {
	position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
	width: 46px; height: 46px; border-radius: 50%; background: rgba(255,255,255,0.14); color: #fff; border: 0; cursor: pointer;
	display: flex; align-items: center; justify-content: center; transition: background var(--transition);
}
.team-lightbox__arrow:hover { background: var(--color-accent); }
.team-lightbox__arrow--prev { left: -60px; }
.team-lightbox__arrow--next { right: -60px; }
@media (max-width: 840px) {
	.team-lightbox__arrow--prev { left: 4px; }
	.team-lightbox__arrow--next { right: 4px; }
}
@media (max-width: 700px) {
	.team-lightbox__card { grid-template-columns: 1fr; }
	.team-lightbox__photo { aspect-ratio: 16/9; }
}
@media (max-width: 560px) {
	.team-lightbox { padding: 0.75rem; }
	.team-lightbox__card { max-height: calc(100vh - 1.5rem); }
	.team-lightbox__body { padding: 1.75rem; }
	.team-lightbox__close {
		top: 10px; right: 10px; width: 34px; height: 34px;
		color: var(--color-dark); background: rgba(0,0,0,0.06);
	}
	.team-lightbox__close:hover { background: rgba(0,0,0,0.12); }
}

/* Desktop: phone number is plain selectable text (see initDesktopPhone in main.js) */
.is-phone-static { cursor: text; -webkit-user-select: text; user-select: text; }
a.is-phone-static:hover { color: inherit; }
.btn.is-phone-static:hover { transform: none; }
.btn--primary.is-phone-static:hover { background: var(--color-accent); color: #fff; }
.btn--outline.is-phone-static:hover { background: transparent; border-color: var(--color-border); color: var(--color-dark); }
