/* Halls page — Figma «Зали театру» `3618:13611` (1440) and `4420:21576` (390),
   ТЗ §4.8, plan 06 task 7.

   The page is four kinds of block, in the frame's order:

   · the banner `3977:17449` / `4490:25798` — the shared section header in its
     `--banner` variant plus a card per hall (the photograph with the shared
     poster band across its bottom, `3618:13663` / `4420:26327`);
   · a section per hall, `3622:13686` (on its own textured band) and
     `4425:29082` (on the page's white): photograph, kind, name, description,
     specs, note, and the scheme;
   · the scheme itself, «Seating Chart» `3635:8683` / `3648:12381` — the SVG is
     built by `Podil\Core\Halls\SeatMapSvg`, this file only colours it;
   · «Яка схема застосовується до вистави» `3648:13091` / `4425:29093`.

   Widths come from the shared column (container.css): the frame draws the
   banner and the FAQ header at x=54 and everything else at x=56, so every
   block here sits on that column and the two 54s are a 2 px residual,
   recorded in task-7-report.md — the client's own ruling (ПР-3) is that
   centring wins over a frame's odd column.

   The column is the page's, not a 1328 block of this page's own: `__inner`
   used to carry `max-width: 1328px` from 1440 up, which held the whole page
   at the 1440 frame's width while the header went on to 1696 at 1920 (296…
   1624 against 112…1808) — the second residual of client fix ПР-20. The
   ceiling is gone and the row's own fixed lengths — the two banner cards,
   the hall photograph and the text column beside it — are written as shares
   of the row, each computing to the frame's own number at exactly 1440. The
   seat map is NOT one of them: `.c-seat-map__svg` is `width: 100%` under a
   800px ceiling, so the drawing keeps its size and its uniform scale, and
   the seat numbers keep the size they were fixed to (ПР-15); a wider panel
   only puts more of its own background around it.

   Vertical rhythm: 120 between blocks at 390, 180 at 1440 (measured between
   the frames' own boxes). Type comes from tokens.css, which already steps at
   the same breakpoints the file draws.

   Animations: the `.fig` has no prototype transition anywhere under these
   nodes; what it has instead are the designer's six annotation blocks
   (animations.md, «Зали театру»): parallax on the banner cards and on both
   hall photographs, zoom and a seat-view popup on the schemes, and a sticky
   FAQ heading. They are implemented with scroll-driven animations and
   `position: sticky` below, and every one of them is off under
   `prefers-reduced-motion` and `html[data-motion=reduced]`. */

/* ================================================================== банер */

.halls-hero {
	padding-inline: var(--page-gutter);
}

/* 4490:25797 — breadcrumbs → header, 24. */
.halls-hero__inner {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

/* The shared breadcrumbs is a block `<nav>` around an inline-flex row, so the
   row starts on a text baseline a few px under the block's own top. The frame
   measures the row itself («Breadcrumbs» 3694:16751 / 4420:26350), so here the
   nav is a flex box and the two boxes are the same. */
.halls-hero .breadcrumbs {
	display: flex;
}

.halls-hero__content {
	display: flex;
	flex-direction: column;

	/* 4490:25798 — header → cards. */
	gap: 40px;
}

/* «Frame 1437255399» 4490:25797 — at 390 the heading and its paragraph stand
   in a 284 column of their own, not across the page. */
.halls-hero__header {
	max-width: 284px;
}

/* «Theater Halls Section» 4420:26346 / 3905:17397. */
.halls-hero__cards {
	display: flex;
	flex-direction: column;
	gap: 24px;
	margin: 0;
	padding: 0;
	list-style: none;
}

/* «Grand Hall Card» 4420:26315 (358×260) / 3629:4911 (654×473): the
   photograph, the band across its bottom, and the two things in the band.

   `overflow: clip`, not `hidden`: `hidden` would make the card its own
   scrollport, and the photograph's scroll-driven parallax would then measure
   itself against the card instead of the page — i.e. never move. */
.halls-card {
	position: relative;
	display: block;
	aspect-ratio: 358 / 260;
	overflow: clip;
}

/* Absolute, so the photograph fills the card's own box (the frame's 358×260 /
   654×473) instead of setting it: a percentage height against a box whose own
   height comes from `aspect-ratio` is cyclic, and the card would take the
   photograph's proportions instead of the frame's. */
.halls-card__image {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;

	/* «Grand Hall Image» 3618:13650: imageTransform scales the photograph to
	   0.729 of its height and starts it at 0.259 — the bottom of the frame. */
	object-position: 50% 96%;
}

/* «Grand Hall Divider» 4420:26327 — 82 of the card's 260 at 390, 131 of 473 at
   1440, and the top edge drops 40 px over 358 (48.8 % of the band's height)
   at 390 and 65 over 654 (49.6 %) at 1440, measured on the frame renders. */
.halls-card__band {
	--c-poster-band-height: 31.5%;
	--c-poster-band-rise: 48.8%;
}

.halls-card__title {
	position: absolute;
	inset: auto auto 22px 16px;
	max-width: calc(100% - 175px);
	margin: 0;
	color: var(--color-neutral-800);
	font-family: var(--font-title);
	font-size: var(--fs-h3);
	font-weight: 400;
	line-height: var(--lh-h3);
	letter-spacing: var(--ls-h3);
	text-box: trim-both cap alphabetic;
	text-transform: uppercase;
	overflow-wrap: anywhere;
}

.halls-card__link {
	position: absolute;
	inset: auto 16px 16px auto;
}

/* =================================================================== зала */

.halls-hall {
	margin-top: 120px;
}

/* «Grand Hall Section» 3622:13686 — full-width, the .fig's own concrete
   texture at 40 % over white (`c785242b…`, TILE, scalingFactor 0.5; the
   opacity is baked into the file, so the section needs no second layer). */
.halls-hall--band {
	padding-block: 80px;
	padding-inline: var(--page-gutter);
	background-color: var(--color-base-white);
	background-image: url(../../img/halls-texture__3622-13686.jpg);
	background-repeat: repeat;
	background-size: 2048px 1366px;
}

.halls-hall {
	padding-inline: var(--page-gutter);
}

.halls-hall__inner {
	display: flex;
	flex-direction: column;

	/* 4420:26385 — the details → the scheme's own heading. */
	gap: 80px;
	margin-inline: auto;
}

.halls-hall__details {
	display: flex;
	flex-direction: column;

	/* 4420:27024 / 4420:28854. */
	gap: 24px;
}

.halls-hall__photo {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 358 / 285;
	object-fit: cover;
	object-position: 50% 90%;
}

/* «Main Hall Info» 3631:4950 / «Slavynsky Hall Description» 3648:12708: the
   name block, the specs 40 under it (24 at 390), and the note 20 under those
   («Venue Specs» 3648:12714 holds the note as its own last row). */
.halls-hall__info {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

/* «Venue Specs» 3648:12714 — the rows and the note are one block, 20 apart. */
.halls-hall__facts {
	display: flex;
	flex-direction: column;
	gap: 20px;
}

/* «Frame 1437255095» 3631:4915 / «Venue Overview» 3648:12709. */
.halls-hall__head {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

/* «Frame 1437255094» 3631:4913 / «Venue Header» 3648:12710. */
.halls-hall__name {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

/* «Spotlight Title» 3626:13690 / «Section Label» 3648:12711 — «Menu,button»
   in the accent colour. The .fig's #12AD99 is 2.81:1 on the section's white and
   fails WCAG 1.4.3 for 20 px text, so the ramp's next passing step is used —
   `--color-primary-700` (#0F766C, 5.49:1). Logged in designer-questions.md, as
   faq.css already does for the accordion's own icon. */
.halls-hall__kicker {
	margin: 0;
	color: var(--color-primary-700);
	font-family: var(--font-body);
	font-size: var(--fs-menu-button);
	font-weight: 600;
	line-height: var(--lh-menu-button);
	letter-spacing: var(--ls-menu-button);
	text-transform: uppercase;
}

/* «Hall Title» 3626:13689 / «Venue Name» 3648:12712 — «H2/H2 S». */
.halls-hall__title {
	margin: 0;

	/* Exo 2's cap is 0.659 em against Kilok's 0.70, so the trimmed box is short
	   by the difference — given back as padding, as in section-title.css. */
	padding-bottom: 0.041em;
	color: var(--color-neutral-800);
	font-family: var(--font-title);
	font-size: var(--fs-h2-s);
	font-weight: 400;
	line-height: var(--lh-h2-s);
	letter-spacing: var(--ls-h2-s);
	text-box: trim-both cap alphabetic;
	text-transform: uppercase;
	overflow-wrap: anywhere;
}

.halls-hall__lead {
	overflow-wrap: anywhere;
	margin: 0;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 400;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

.halls-hall__lead > p {
	margin: 0;
}

.halls-hall__lead > p + p {
	margin-top: 1em;
}

/* «Section/Premiere/Specs» 3631:4916 / «Venue Specs» 3648:12714. */
.halls-hall__specs {
	display: flex;
	flex-direction: column;
	align-items: flex-start;

	/* 4420:26365 — 20 between the rows. */
	gap: 20px;
	margin: 0;
}

/* «SpecRow/Genre» 3631:4917 — the icon row, then the value 4 under it. */
.halls-spec {
	display: flex;
	flex-direction: column;
	gap: 4px;
}

/* «SpecRow/Genre» 3631:4917 — the icon and its label, then the value. */
.halls-spec__label {
	display: flex;
	align-items: center;

	/* 3631:4918: icon 16, then 4 to the label. */
	gap: 4px;
	margin: 0;
	color: var(--color-neutral-600);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 400;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

.halls-spec__label svg {
	flex: 0 0 auto;
}

.halls-spec__value {
	overflow-wrap: anywhere;
	margin: 0;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 600;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

/* «Specs Note» 3648:12727 — white, a 2 px accent rule down its left side,
   italic. */
.halls-hall__note {
	box-sizing: border-box;
	margin: 0;
	padding: 20px;
	border-left: 2px solid var(--color-primary-500);
	background: var(--color-base-white);
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-style: italic;
	font-weight: 400;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

/* ================================================================= схема */

.halls-hall__chart {
	position: relative;
	display: flex;
	flex-direction: column;

	/* 4420:26385 → 4420:27890: the heading block → the drawing. */
	gap: 24px;
}

/* «Watch From Your Favorite Seat» 3656:13670 (1440) / 4420:28803 (390) — the
   group is 260.7×75.7 and turned 0.1093 rad (6.26°) counter-clockwise; the
   words are Sofia Pro Bold 20/24 uppercase over two lines, 240 wide, and the
   arrow stands to their left. #0C9586 is 3.7:1 on the section's ground, under
   4.5:1 for text, so the colour steps to --color-primary-700 — the same
   substitution performance-about.css records for this sticker's twin. */
.halls-chart__sticker {
	position: absolute;

	/* 4420:28803 — over the gap above the heading, at the column's right edge
	   (1440: 3656:13670, the same place).

	   The width is the frame's, multiplied by the reader's own text scale and
	   capped by the column: at 150 % with the dyslexia face the words are half
	   again as wide, and a fixed 172 px box — absolutely positioned, so normal
	   flow cannot reflow it — pushed 19 px past the page's right edge (fix
	   round 1, C2). */
	inset: -40px 0 auto auto;
	display: flex;
	align-items: flex-start;
	gap: 8px;
	width: min(calc(172px * var(--font-scale)), 100%);
	margin: 0;
	transform: rotate(-6.26deg);
	transform-origin: left center;
	color: var(--color-primary-700);
	font-family: var(--font-body);
	font-size: var(--fs-menu-button);
	font-weight: 700;
	line-height: var(--lh-menu-button);
	letter-spacing: var(--ls-menu-button);
	text-transform: uppercase;
}

.halls-chart__sticker-text {
	min-width: 0;
	text-wrap: balance;

	/* A long Ukrainian word at 150 % must wrap, not widen the page. */
	overflow-wrap: anywhere;
}

.halls-chart__sticker-arrow {
	flex: 0 0 auto;
	width: 32px;
	height: 43px;
}

.halls-chart__header {
	display: flex;
	flex-direction: column;

	/* 4420:26385 — «Схема залу» → the sentence under it (24 at 1440), in the
	   773 column the frame gives the pair there. */
	gap: 20px;
	max-width: 773px;
}

/* «Hall Title» 3644:10344 / «Title» 3648:12379 — «H3», a step under the hall's
   own name: the scheme is a part of its hall, and so is its heading. */
.halls-chart__title {
	margin: 0;

	/* Exo 2's shorter cap, given back as padding (see .halls-hall__title). */
	padding-bottom: 0.041em;
	color: var(--color-neutral-800);
	font-family: var(--font-title);
	font-size: var(--fs-h3);
	font-weight: 400;
	line-height: var(--lh-h3);
	letter-spacing: var(--ls-h3);
	text-box: trim-both cap alphabetic;
	text-transform: uppercase;
	overflow-wrap: anywhere;
}

.halls-chart__intro {
	max-width: 773px;
	margin: 0;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 400;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

/* «Seating Chart» 3635:8683 — the drawing on its own light panel, with the
   zoom buttons in its top-left corner (4425:29179). */
.halls-chart {
	position: relative;
	display: flex;
	flex-direction: column;

	/* 4420:27890 — the drawing → the legend under it (32 at 1440). */
	gap: 16px;
	box-sizing: border-box;

	/* At 390 the panel runs to the page's own edges (390 wide at x=0). */
	margin-inline: calc(var(--page-gutter) * -1);
	padding: 48px 16px;
	background: var(--color-neutral-50);
}

/* «seating-chart» 3648:12381 — the flexible hall's panel is deeper, because
   its «Увага! Діє вільна посадка» line stands under the drawing. */

/* «seating-chart» 3648:12381 / 4420:28894 — the flexible hall's panel stands
   further from its note, because «Увага! Діє вільна посадка» is part of it. */
.halls-chart--free {
	gap: 32px;
	padding: 32px 24px;
}

.halls-chart--free .c-seat-map {
	gap: 32px;
}

.halls-chart__viewport {
	overflow-x: auto;
	overscroll-behavior-x: contain;
}

/* «Navigation Container» 4425:29153 — two 40×40 buttons side by side at 390,
   64×64 stacked at 1440 (4425:29179). They are the annotation's «зал можна
   приблизити» (`4549:26050`); without JavaScript there is nothing to zoom, so
   assets/js/halls.js unhides them. */
.halls-chart__zoom {
	position: absolute;
	inset: 16px auto auto 16px;
	z-index: 1;
	display: flex;
	flex-direction: row;
	gap: -1px;
}

.halls-chart__zoom[hidden] {
	display: none;
}

.halls-chart__zoom-button {
	display: flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	width: 40px;
	height: 40px;
	margin: 0;
	padding: 0;
	border: 0;
	box-shadow: inset 0 0 0 1px var(--color-neutral-800);
	background: transparent;
	color: var(--color-neutral-800);
	cursor: pointer;
}

.halls-chart__zoom-button + .halls-chart__zoom-button {
	margin-left: -1px;
}

.halls-chart__zoom-button[disabled] {
	box-shadow: inset 0 0 0 1px var(--color-neutral-400);
	color: var(--color-neutral-500);
	cursor: default;
}

.halls-chart__zoom-button svg {
	fill: currentcolor;
}

/* --------------------------------------------------------- сама схема */

.c-seat-map {
	display: flex;
	flex-direction: column;
	align-items: center;

	/* 4420:27890 — the drawing → the legend (32 at 1440, 3635:8683); the
	   flexible hall stands further from its note (3648:12381). */
	gap: 16px;
	margin: 0;
}

.c-seat-map__svg {
	display: block;
	width: 100%;
	max-width: 358px;
	height: auto;
	transform-origin: top center;
}

@media (min-width: 768px) {

	.c-seat-map__svg {
		max-width: 800px;
	}
}

/* The 390 drawing carries no seat numbers at all — `Halls\SeatMapSvg` draws
   none there. 4420:27806's own «XS/XS text» holds one digit inside 14 units,
   and a real two-digit number measured 13.94 of them at 100 %, 20.91 at the
   widget's 150 % and 16.52 with its dyslexia face: it sat on the outline and
   then past it (client fix ПР-15, «в мобілці цифри вилазять»). The row numbers,
   which stand outside the seats, are unchanged. */

/* 4420:27892 / 4420:28213 — «БАЛКОН» and «СЦЕНА» are «Menu,button» at both
   widths, which the token already steps; nothing else to say here. */

/* Two drawings, one per width (fix round 1, I1): the 390 frame redraws the
   scheme at its own pitch instead of scaling the 1440 one, so each width gets
   the geometry it is drawn with and the other is out of the document. */
.c-seat-map--desktop {
	display: none;
}

@media (min-width: 768px) {

	.c-seat-map--mobile {
		display: none;
	}

	.c-seat-map--desktop {
		display: flex;
	}
}

/* «seat-1» 3643:6002 and its «designated areas» variant 4420:27636. */
.c-seat-map__seat {
	fill: var(--color-neutral-200);
	stroke: var(--color-neutral-300);
	stroke-width: 1;
}

.c-seat-map__seat--access {
	fill: var(--color-attention-200);
	stroke: var(--color-attention-300);
}

/* The number is drawn over its seat, and the seat is what answers the pointer:
   without this the text would swallow the hover of the row it sits in. */
.c-seat-map__seat-number {
	pointer-events: none;
	fill: var(--color-neutral-600);
	font-family: var(--font-body);
	font-size: 16px;
	font-weight: 600;
}

.c-seat-map__seat-number--access {
	fill: var(--color-attention-800);
}

/* «Frame 1437255101» 3644:10313 — the row's number on both sides. #12AD99 is
   2.7:1 on the panel and this is 14 px text, so it steps to
   `--color-primary-700` (5.26:1) — designer-questions.md. */
.c-seat-map__row-label {
	fill: var(--color-primary-700);
	font-family: var(--font-body);
	font-size: 14px;
	font-weight: 400;
}

/* «Title Container» 3635:8876 — «БАЛКОН» / «ПАРТЕР». */
.c-seat-map__section-name {
	fill: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: 20px;
	font-weight: 600;
	text-transform: uppercase;
}

/* «Red Arc» 3635:8687 / 4420:27895 — the balcony's outline: a rounded box with
   no top edge (the path has none), so the sector is held from the sides and
   below and stays open towards the stage. The frame's stroke is 3 there and 1
   at 390, and the drawing's own units are what it is written in, so the
   value is set per geometry rather than scaled. */
.c-seat-map__arc {
	fill: none;
	stroke: var(--color-primary-500);
	stroke-width: 1;
	stroke-linecap: round;
}

.c-seat-map--desktop .c-seat-map__arc {
	stroke-width: 3;
}

/* «Stage Block» 3635:9250. */
.c-seat-map__stage-shape {
	fill: var(--color-neutral-800);
}

.c-seat-map__stage-label {
	fill: var(--color-base-white);
	font-family: var(--font-body);
	font-size: 20px;
	font-weight: 600;
	text-transform: uppercase;
}

/* «Frame 1437255361» 4425:29083 — the accessible seat and what it means. */
.c-seat-map__legend {
	display: flex;
	align-items: center;
	box-sizing: border-box;
	min-height: 24px;
	gap: 16px;
	margin: 0;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 400;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

.c-seat-map__legend-sample {
	flex: 0 0 auto;
	box-sizing: border-box;
	width: 28px;
	height: 24px;
	border: 1px solid var(--color-attention-300);
	border-radius: 6px 6px 1px 1px;
	background: var(--color-attention-200);
}

.c-seat-map__legend-icon {
	display: flex;
	margin-right: -12px;
}

/* «Note Text» 3831:8996 — «Увага! Діє вільна посадка». #12AD99 is 2.7:1 on the
   panel, and at 390 this line is 20 px — not large text — so it takes the
   ramp's first step that clears 4.5:1 everywhere: `--color-primary-700`
   (5.26:1). Logged in designer-questions.md. */
.c-seat-map__note {
	margin: 0;
	color: var(--color-primary-700);
	font-family: var(--font-title);
	font-size: var(--fs-h6);
	font-weight: 400;
	line-height: var(--lh-h6);
	letter-spacing: var(--ls-h6);
	text-align: center;

	/* leadingTrim CAP_HEIGHT on 3831:8996, like every Kilok heading. */
	text-box: trim-both cap alphabetic;
	text-transform: uppercase;
}

/* ========================================== «Яка схема… застосовується» */

.halls-schemes {
	margin-top: 120px;
	padding-inline: var(--page-gutter);
}

.halls-schemes__inner {
	display: flex;
	flex-direction: column;

	/* 4425:29093 — the heading → the cards. */
	gap: 40px;
}

.halls-schemes__list {
	display: flex;
	flex-direction: column;
	gap: 24px;
	margin: 0;
	padding: 0;
	list-style: none;
}

/* «Card 1 - Main Stage» 3648:13063 — the number at the top, the sentence at
   the bottom, and the accent corner over the top-right. */
.halls-scheme {
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: space-between;
	box-sizing: border-box;
	gap: 24px;
	padding: 20px;
	background: var(--color-neutral-100);
}

/* «Top Corner Accent» 3648:13080: a 54.58×32.62 corner — an 8.5 wide bar down
   the right edge and a 14.5 tall bar along the top. */
.halls-scheme::after {
	position: absolute;
	inset: 0 0 auto auto;
	width: 54.58px;
	height: 32.62px;
	border-top: 14.5px solid var(--color-primary-500);
	border-right: 8.52px solid var(--color-primary-500);
	content: "";
}

/* «Step Number» 3648:13066 — 36 px, so 3:1 is the bar and
   `--color-primary-600` (3.37:1) clears it where #12AD99 (2.55:1) does not. */
.halls-scheme__number {
	color: var(--color-primary-600);
	font-family: var(--font-title);
	font-size: var(--fs-h3);
	font-weight: 400;
	line-height: var(--lh-h3);
	letter-spacing: var(--ls-h3);
	text-box: trim-both cap alphabetic;
}

/* A long Ukrainian word at 150 % (with the dyslexia face, wider still) must
   wrap inside its card, not be cut by it — fix round 1, C2. */
.halls-scheme__text {
	margin: 0;
	overflow-wrap: anywhere;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-m-text);
	font-weight: 400;
	line-height: var(--lh-m-text);
	letter-spacing: var(--ls-m-text);
}

/* The FAQ is the shared accordion; the page only has to place it. */
.page-template-page-halls .c-faq {
	margin-top: 120px;
}

/* ================================================================== 768+ */

@media (min-width: 768px) {

	.halls-hero__cards {
		flex-direction: row;
		gap: 24px;
	}

	.halls-card {
		flex: 1 1 0;
		min-width: 0;
	}

	.halls-hall__details {
		flex-direction: row;
		align-items: flex-start;
		gap: 24px;
	}

	.halls-hall__photo,
	.halls-hall__info {
		flex: 1 1 0;
		min-width: 0;
	}

	.halls-schemes__list {
		flex-direction: row;
	}

	.halls-scheme {
		flex: 1 1 0;
		min-width: 0;
	}
}

/* ================================================================= 1440+ */

@media (min-width: 1440px) {

	/* 3977:17449 — breadcrumbs → the header block. */
	.halls-hero__inner {
		gap: 36px;
	}

	/* 3905:17399. */
	.halls-hero__content {
		gap: 60px;
	}

	/* 3905:17398 puts the H1 and its paragraph in one row, 1050 wide, with the
	   paragraph in a 244 box. */
	.halls-hero__header {
		max-width: none;
	}

	.halls-hero__header .c-section-title__intro {
		width: 244px;
	}

	/* 3905:17397 — the two cards are 654 of the 1330 row, the rest between. */
	.halls-hero__cards {
		justify-content: space-between;
		gap: 22px;
	}

	/* Half the row each, less the 10 px of the 22 gap that the frame's own
	   1330 column has over the shared 1328 one (the 2 px residual named at the
	   top of this file): at exactly 1440 that is the frame's 654, and above it
	   the pair follows the column instead of standing in a 1328 block (ПР-20).
	   The card's height follows its width through `aspect-ratio`, so the
	   photographs grow with it, which is what the design does on its own step
	   1440 → 1920 everywhere else. */
	.halls-card {
		flex: 0 0 calc((100% - 20px) / 2);
		aspect-ratio: 654 / 473;
	}

	.halls-card__band {
		--c-poster-band-height: 27.7%;
		--c-poster-band-rise: 49.6%;
	}

	.halls-card__title {
		inset: auto auto 20px 24px;
		max-width: calc(100% - 200px);
	}

	.halls-card__link {
		inset: auto 24px 22px auto;
	}

	.halls-hall {
		margin-top: 180px;
	}

	.halls-hall--band {
		padding-block: 100px;
	}

	.halls-hall__inner {
		gap: 80px;
	}

	.halls-hall__details {
		gap: 24px;
	}

	/* 3626:13687 / 3648:12707 — 653 of the 1328 row for the photograph. The text
	   column is 651 beside it (`3648:12708`, flush with the row's right edge,
	   gap 24) — except in the permanent hall's own section, where the frame
	   draws it 538 wide and 80 from the photograph (`3631:4950`), leaving the
	   last 57 px of the row empty. */
	.halls-hall__photo {
		flex: 0 0 calc((100% - 24px) / 2 + 1px);
		aspect-ratio: 653 / 520;
		object-position: 50% 88%;
	}

	.halls-hall__info {
		flex: 0 1 calc((100% - 24px) / 2 - 1px);
	}

	/* The band hall's own 538: the half-row less 114, so the tail this row
	   ends up leaving empty — the frame's 57 plus the 56 its own 80-wide gap
	   has over the shared 24 — stays those 113 px as the row grows. */
	.halls-hall--band .halls-hall__info {
		flex-basis: calc((100% - 24px) / 2 - 114px);
	}

	.halls-hall__name {
		gap: 20px;
	}

	.halls-hall__info {
		gap: 40px;
	}

	.halls-hall__chart {
		gap: 32px;
	}

	.halls-chart {
		gap: 32px;
		margin-inline: 0;
		padding: 24px;
	}

	.c-seat-map {
		gap: 32px;
	}

	.halls-chart__header {
		gap: 24px;
	}

	/* 3656:13670 — beside the heading at 1440, 261 wide. */
	.halls-chart__sticker {
		inset: -24px 0 auto auto;
		width: min(calc(261px * var(--font-scale)), 100%);
	}

	.halls-chart--free {
		gap: 60px;
		padding: 60px 24px;
	}

	.halls-chart--free .c-seat-map {
		gap: 60px;
	}


	.halls-chart__zoom {
		inset: 24px auto auto 24px;
		flex-direction: column;
	}

	.halls-chart__zoom-button {
		width: 64px;
		height: 64px;
	}

	.halls-chart__zoom-button + .halls-chart__zoom-button {
		margin-top: -1px;
		margin-left: 0;
	}

	.halls-schemes {
		margin-top: 180px;
	}

	.halls-schemes__inner {
		gap: 54px;
	}

	/* «Visit Title» 3648:13090 — the heading wraps inside 991 of the 1328. */
	.halls-schemes__header {
		max-width: 991px;
	}

	.halls-scheme {
		aspect-ratio: 427 / 200;
	}

	.page-template-page-halls .c-faq {
		margin-top: 180px;
	}
}

/* ============================================ «Вид на сцену» і рух сторінки */

/* «Frame 1437255109» 3656:13678 — a 300×300 card with the photograph and two
   lines under it, over the scheme, beside the SEAT it belongs to. One card per
   scheme: the seat decides which photograph and which caption it holds (client
   fix ПР-15).

   The keyboard path to «вид на сцену» is the seats themselves now, so what is
   left in this slot is one skip link. A hall whose every seat answers the
   keyboard is several hundred tab stops, and stepping over the scheme has to
   cost one press. The frame draws no such control, so it is out of the way
   until it takes focus — the skip-link pattern — and then it stands over the
   scheme's
   own panel, where it belongs. */
.halls-chart__view-triggers {
	position: absolute;
	inset: 0 auto auto 0;
	z-index: 2;
	margin: 0;
	padding: 0;
	list-style: none;
}

.halls-chart__view-trigger {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: 0;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

.halls-chart__view-trigger:focus-visible {
	position: static;
	display: inline-flex;
	align-items: center;
	box-sizing: border-box;
	width: auto;
	height: auto;
	padding: 8px 16px;
	box-shadow: inset 0 0 0 1px var(--color-neutral-800);
	background: var(--color-base-white);
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 600;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
	overflow: visible;
	clip-path: none;
	white-space: normal;
}

.halls-chart__views {
	position: absolute;
	inset: 0;
	pointer-events: none;
}

.halls-view {
	position: absolute;
	right: 24px;
	box-sizing: border-box;
	width: 300px;
	max-width: calc(100% - 32px);
	margin: 0;
	box-shadow: 0 8px 32px rgb(7 10 13 / 25%);
	background: var(--color-base-white);
	pointer-events: none;
}

.halls-view[hidden] {
	display: none;
}

.halls-view__photo {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 300 / 235;
	object-fit: cover;
}

/* The card holds one image per photograph and shows the one the seat names; the
   `display: block` above would otherwise beat the browser's own `[hidden]`. */
.halls-view__photo[hidden] {
	display: none;
}

/* The skip link's landing point: a target for the focus, not a box. It stands
   at the bottom of the scheme's own panel and is taken out of the flow, so the
   column it sits in gains neither a row nor a gap from it. */
.halls-chart__after {
	position: absolute;
	inset: auto auto 0 0;
	width: 0;
	height: 0;
}

.halls-view__caption {
	display: flex;
	flex-direction: column;
	padding: 12px;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-s-text);
	font-weight: 400;
	line-height: var(--lh-s-text);
	letter-spacing: var(--ls-s-text);
}

.halls-view__seat {
	font-weight: 600;
}

/* A SEAT the theatre has a photograph of is the control (client fix ПР-15): the
   frame's own hover state is a variant of the seat component («Property
   1=hover» 4420:28834): fill #CCFBF0 (`--color-primary-100`), outline #5DEBD2
   (`--color-primary-300`), number #12AD99 — and nothing larger than one seat
   ever changes. The row-wide highlight that used to live here is gone with it.

   The number steps to `--color-primary-700`: #12AD99 is 2.5:1 on #CCFBF0, and
   this is 16 px semi-bold, not large text. It is the same step the row label
   and the note already take on this page, and it is in
   designer-questions.md. */
.c-seat-map__seat-view {
	cursor: pointer;
}

.c-seat-map__seat-view:hover .c-seat-map__seat,
.c-seat-map__seat-view:focus-visible .c-seat-map__seat,
.c-seat-map__seat-view.is-shown .c-seat-map__seat,
.c-seat-map__seat-view.is-selected .c-seat-map__seat {
	fill: var(--color-primary-100);
	stroke: var(--color-primary-300);
}

.c-seat-map__seat-view:hover .c-seat-map__seat-number,
.c-seat-map__seat-view:focus-visible .c-seat-map__seat-number,
.c-seat-map__seat-view.is-shown .c-seat-map__seat-number,
.c-seat-map__seat-view.is-selected .c-seat-map__seat-number {
	fill: var(--color-primary-700);
}

/* The hover skin is a colour change, and a focus ring may not be one (WCAG
   1.4.1, 2.4.7): the focused seat also gets an outline of its own. `outline` is
   the one property that draws around an SVG element without moving it — a box
   shadow does not apply inside an SVG — so the page-wide «no `outline: none`»
   rule is kept the other way round here: the outline is added, never
   removed. */
.c-seat-map__seat-view:focus-visible {
	outline: 2px solid var(--color-neutral-800);
	outline-offset: 2px;
}

/* Forced colours drop every fill this file sets, so the drawing says the same
   things with the system's own two colours: the seats and the stage keep an
   outline of their own instead of merging into the canvas, the seats kept for
   visitors in wheelchairs keep a shape of their own (a thicker, dashed
   outline, matched by the legend's sample), and what such a seat is stays in
   the legend and in the text alternative besides — never in colour alone. */
@media (forced-colors: active) {

	.c-seat-map__seat,
	.c-seat-map__seat--access {
		fill: Canvas;
		stroke: CanvasText;
	}

	/* The seat kept for a visitor in a wheelchair is told apart by its fill in
	   the frame (`4420:27636`), and forced colours take every fill away — so
	   here it says the same thing with its outline instead: twice as thick and
	   dashed, which no colour scheme can flatten (re-review, Important). The
	   legend's own sample carries the identical outline, so the key still
	   reads, and the text alternative names those seats besides. */
	.c-seat-map__seat--access {
		stroke-width: 2;
		stroke-dasharray: 3 2;
	}

	/* The seat the reader is on says so by its fill in colour, and forced colours
	   take every fill away: here it says it by a heavier outline instead — solid,
	   so it is still not the dashed one of a seat kept for a visitor in a
	   wheelchair. */
	.c-seat-map__seat-view:hover .c-seat-map__seat,
	.c-seat-map__seat-view:focus-visible .c-seat-map__seat,
	.c-seat-map__seat-view.is-shown .c-seat-map__seat,
	.c-seat-map__seat-view.is-selected .c-seat-map__seat {
		fill: Highlight;
		stroke: CanvasText;
		stroke-width: 3;
	}

	.c-seat-map__seat-view:hover .c-seat-map__seat-number,
	.c-seat-map__seat-view:focus-visible .c-seat-map__seat-number,
	.c-seat-map__seat-view.is-shown .c-seat-map__seat-number,
	.c-seat-map__seat-view.is-selected .c-seat-map__seat-number {
		fill: HighlightText;
	}

	.c-seat-map__seat-number,
	.c-seat-map__seat-number--access,
	.c-seat-map__row-label,
	.c-seat-map__section-name {
		fill: CanvasText;
	}

	.c-seat-map__arc {
		stroke: CanvasText;
	}

	.c-seat-map__stage-shape {
		fill: Canvas;
		stroke: CanvasText;
		stroke-width: 2;
	}

	.c-seat-map__stage-label {
		fill: CanvasText;
	}

	.c-seat-map__legend-sample {
		border-width: 2px;
		border-style: dashed;
		border-color: CanvasText;
		background: Canvas;
	}
}

/* Parallax — annotations `4549:26039` (the banner's cards), `4549:26046` and
   `4550:25435` (both hall photographs): «зображення рухається повільніше за
   основний контент під час скролу», with no number written on any of them.
   The movement is the crop inside the box, not the box: `object-position`
   travels 8 % of the photograph's height across the block's own pass through
   the viewport, so nothing overflows, nothing reflows, and the layout the
   frames measure is untouched at every scroll position.
   Scroll-driven, so it never runs on its own and stops with the page. */
@media (prefers-reduced-motion: no-preference) {

	html:not([data-motion="reduced"]) .halls-card__image {
		animation: halls-parallax-card linear both;
		animation-timeline: view();
		animation-range: cover 0% cover 100%;
	}

	html:not([data-motion="reduced"]) .halls-hall__photo {
		animation: halls-parallax-photo linear both;
		animation-timeline: view();
		animation-range: cover 0% cover 100%;
	}
}

@keyframes halls-parallax-card {

	from {
		object-position: 50% 92%;
	}

	to {
		object-position: 50% 100%;
	}
}

@keyframes halls-parallax-photo {

	from {
		object-position: 50% 84%;
	}

	to {
		object-position: 50% 92%;
	}
}

/* Sticky FAQ heading — annotation `4550:25441`: «Sticky effect для заголовків:
   заголовок залишається зафіксованим під час скролу секції та рухається далі,
   коли секція закінчується». That is `position: sticky` on the header of the
   two-column FAQ, which exists only from 1440 up (faq.css turns the section
   into a grid there); at 390 the heading stands above the list and has nothing
   to stay beside. The offset is the section's own top padding, so the heading
   stops exactly where it starts. */
@media (min-width: 1440px) {

	.page-template-page-halls .c-faq__header {
		position: sticky;
		top: 100px;
		align-self: start;
	}
}
