/* «Безбар'єрність» — Figma `3651:13595` (1440) and `4429:31316` (390),
   ТЗ §4.10, plan 06 task 9.

   Seven kinds of block, in the frame's order:

   · the banner `3977:17454` / `4429:31418` — the H1 with its paragraph and
     four cards, each a photograph with the shared poster band across its
     bottom and «Дізнатися більше» pointing at a section of this page;
   · «Постійні елементи доступності театру» `3671:14030` / `4430:31648` — a
     card per `access_feature`, two photographs wide or one narrow;
   · «про безбар'єрність Театру у відео» `4106:11469` / `4430:31678`;
   · the three service sections `3671:14031`, `3671:14079`, `3673:14131` —
     the same composition three times: photograph and telephone on the left,
     that service's questions on the right;
   · «Як підготуватися до візиту» `3673:14445` / `4430:31844` — five numbered
     steps;
   · «Залишилися питання?» `3673:14446` / `4430:31913` — the shared FAQ
     component in its own frame, with a sentence and the questionnaire link
     in the heading's column;
   · «Потрібна допомога?» `3673:14736` — the dark block that closes the page.

   Widths come from the shared column (container.css): the frame draws the
   banner and the features heading at x=57 and everything else at x=56, so
   every block sits on the shared 1328 column and the 1 px is a residual
   (task-9-report.md).

   Vertical rhythm: 120 between blocks at 390, 180 at 1440, measured between
   the frames' own boxes; the dark block alone sits flush under the grey FAQ
   band, as the frame draws it. Type comes from tokens.css, which steps at the
   same breakpoints the file draws. There is no 768 or 1920 frame for this
   page (inventory.md), so the 390 layout stays fluid up to 1440 and the 1440
   one grows with the column above it.

   Animations — the four annotation blocks of the 22.09 .fig (animations.md,
   «Безбар'єрність»): parallax on the banner cards (`4550:25438`) and on the
   feature photographs (`4550:25448`) through the shared `c-parallax`
   (parallax.css), and `position: sticky` on the service photograph
   (`4550:25445`) and on the FAQ heading (`4550:25451`). Both sticky effects
   are off under `prefers-reduced-motion` and `html[data-motion=reduced]`:
   they are what the reader scrolls past, and a layer that stays put while the
   page moves is motion (accessibility-ua.md §4). The accordion itself has no
   transition — `interactions` is empty on every node of these frames. */

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

/* «Hero» 3977:17454 starts at y=0 and its own 136 px of top padding puts the
   breadcrumbs under the bar (`3651:13596`), which carries the same #F3F4F6 as
   an override fill. The banner used to paint that strip itself, from below,
   with a `::before` carried up over the header's box — one colour drawn by two
   things, and only one of them stayed put: the header is sticky, the banner is
   not, so on the way back up the menu row met the feature photographs instead
   of the grey. The header now carries the grey, as the frame has it
   (`podil_header_variant()` → 'gray', inc/parts/accessibility.php); the strip
   is gone and with it the second mechanism (client fix ПР-10). */
.access-hero {
	padding-inline: var(--page-gutter);
	padding-block: 0 80px;
	background: var(--color-neutral-100);
}

.access-hero__inner,
.access-features__inner,
.access-video__inner,
.access-topic__inner,
.access-steps__inner,
.access-help__inner {
	margin-inline: auto;
}

.access-hero__inner {
	display: flex;
	flex-direction: column;

	/* 4429:31418 itemSpacing — the head block → the cards. */
	gap: 40px;
}

/* 4429:31417 — breadcrumbs → the H1 block, in a 292 column of its own. */
.access-hero__head {
	display: flex;
	flex-direction: column;
	gap: 24px;
	max-width: 292px;
}

/* 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:16759 / 4429:31410), so here the
   nav is a flex box and the two boxes are the same. */
.access-hero .breadcrumbs {
	display: flex;
	width: fit-content;
}

/* The trail's muted step is --color-neutral-500 (#697482, the frame's own
   `3694:16761`), which is 4.66:1 on the white every other page puts it on and
   4.31:1 on this banner's #F3F4F6 — under WCAG 1.4.3. The next token down is
   6.7:1 on the same ground; the component keeps its own colour everywhere
   else (R13's exception for a shown failure, designer-questions.md). */
.access-hero .breadcrumbs a {
	color: var(--color-neutral-600);
}

/* 3977:17450 / 4429:31433. */
.access-hero__cards {
	display: flex;
	flex-direction: column;
	gap: 24px;
	margin: 0;
	padding: 0;
	list-style: none;
}

/* «Wheelchair Access Card» 3656:13709 / 4429:31434: the photograph, the band
   across its bottom and, over the band's lower half, the white card content.
   The frame draws the content 41 px up into the photograph at both widths
   (1440: photo ends 613, content starts 572; 390: 538 / 497), which is what
   the negative margin is. */
.access-card {
	display: flex;
	flex-direction: column;
	background: var(--color-base-white);
}

/* «Image» 3656:13634 — 314×281 at 1440, 358×281 at 390 (the audio card's own
   273 is hidden under the band, which starts 65 px above the photograph's
   bottom edge in every card).

   `overflow: clip`, not `hidden`: `hidden` would make the box its own
   scrollport and the photograph's scroll-driven parallax would measure itself
   against the box instead of the page — i.e. never move (parallax.css). */
.access-card__photo {
	position: relative;
	display: flex;
	flex-direction: column;

	/* «Wheelchair Access Card» 3656:13709 itemSpacing — the frame's own column
	   spacing; both of this box's children are absolute, so it spaces nothing. */
	gap: 16px;
	height: 281px;
	overflow: clip;
	background: var(--color-base-white);
}

.access-card__image {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* «Accent Line» 3656:13710 / 4429:31436 — 65 of the photograph's 281 at both
   widths; the top edge drops 22 px over 358 (33.8 % of the band's height) at
   390 and 23 over 314 (35.4 %) at 1440, measured on the 1:1 frame renders
   (design/figma/frames), because the REST dump carries no vector geometry. */
.access-card__band {
	--c-poster-band-height: 65px;
	--c-poster-band-rise: 33.8%;

	/* The band is white here, not the component's own #F3F4F6: it cuts a white
	   card out of the photograph («Accent Line» 3656:13710 fill). */
	background: var(--color-base-white);
}

/* «Card Content» 3656:13708 / 4429:31437. */
.access-card__content {
	position: relative;
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;

	/* The link hugs its words, so the content column does not stretch it. */
	align-items: flex-start;

	/* 4429:31437 itemSpacing — the text block → the link. */
	gap: 32px;
	box-sizing: border-box;
	margin-top: -41px;
	padding: 0 16px 16px;
	background: var(--color-base-white);
}

/* «Text Block» 3656:13717 — the pair fills the card's width, while the link
   under it hugs. */
.access-card__text {
	display: flex;
	flex-direction: column;
	align-self: stretch;
	gap: 16px;
}

/* «Heading 3» 3656:13636 — «H6/2», 20/20 at 390, 24/24 at 1440, uppercase,
   leadingTrim CAP_HEIGHT. Kilok is not licensed, so Exo 2 runs under its name
   (fonts.css) and the 0.041 em cap difference goes back as bottom padding —
   the same remedy section-title.css uses. #2A2A2A in the frame is an unbound
   literal; its nearest token is --color-neutral-800, the substitution this
   project already made for it everywhere else. */
.access-card__title,
.access-feature__title,
.access-step__title {
	margin: 0;
	padding-bottom: 0.041em;
	color: var(--color-neutral-800);
	font-family: var(--font-title);
	font-size: var(--fs-h6);
	font-weight: 400;
	line-height: var(--lh-h6);
	letter-spacing: var(--ls-h6);
	text-box: trim-both cap alphabetic;
	text-transform: uppercase;

	/* A long Ukrainian word at 150 % text scale must wrap, not widen the page
	   (WCAG 1.4.4/1.4.10), which is the guard every page of this plan carries.
	   At 100 % nothing breaks, so the Figma measurement is untouched. */
	overflow-wrap: anywhere;
}

/* «Paragraph» 3656:13638 — «S/S text (regular)» in a 262 column at both
   widths (the frame fixes the text box, not the card). */
.access-card__lead {
	max-width: 262px;
	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);
}

/* ========================================= постійні елементи (7 карт) */

.access-features,
.access-video,
.access-topic,
.access-steps {
	padding-inline: var(--page-gutter);
}

.access-features,
.access-video,
.access-topic,
.access-steps,
.access-questions {
	margin-top: 120px;
}

.access-features__inner,
.access-steps__inner,
.access-topic__inner {
	display: flex;
	flex-direction: column;

	/* 4430:31844 / 4430:31764 itemSpacing — heading → content. */
	gap: 40px;
}

/* 4430:31648 — the features are the one section the 390 frame draws tighter. */
.access-features__inner {
	gap: 24px;
}

/* 4430:31487 — the paragraph beside the heading stands in a 283 box at both
   widths; 4430:31488 puts it under the heading at 390 and 3663:13795 beside it
   at 1440 (below). The shared header's own gap is already 40. */
.access-features__header .c-section-title__intro {
	max-width: 283px;
}

/* 4430:31488 — the heading and its paragraph stand in one column at 390 and
   in one row at 1440 (below). The shared header's own gap is already 40. */
.access-features__grid,
.access-steps__list {
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
	margin: 0;
	padding: 0;
	list-style: none;
}

/* «Barrier-Free Entrance Feature» 3668:13928 / 4430:31489. */
.access-feature {
	display: flex;
	flex-direction: column;
	background: var(--color-neutral-100);
}

/* «Photo Grid» 3668:13937 — two photographs side by side, no gap between
   them, in a box of the frame's own proportion; one photograph fills a taller
   box (`4430:31532`, 358×301.8). `clip`, not `hidden`, for the parallax. */
.access-feature__photos {
	display: flex;
	aspect-ratio: 358 / 154.3;
	overflow: clip;
}

.access-feature--narrow .access-feature__photos {
	aspect-ratio: 358 / 301.8;
}

.access-feature__photo {
	position: relative;
	flex: 1 1 0;
	min-width: 0;
	overflow: clip;
}

.access-feature__image {
	position: absolute;
	inset: 0;
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* «Feature Info» 3668:13930 / 4430:31493 — padding 24/16/16 around the text
   block; its own 32 itemSpacing has nothing to space, the frame gives it one
   child. */
.access-feature__info {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 32px;
	box-sizing: border-box;
	padding: 24px 16px 16px;
}

/* «Text Block» 4430:31494 itemSpacing — the heading over its sentence. */
.access-feature__block {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 16px;
}

.access-feature__text,
.access-step__text,
.access-topic__intro {
	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);
}

.access-feature__text > :first-child {
	margin-top: 0;
}

.access-feature__text > :last-child {
	margin-bottom: 0;
}

/* ================================================================== відео */

.access-video {
	padding-block: 80px;
	background: var(--color-neutral-100);
}

.access-video__inner {
	display: flex;
	flex-direction: column;

	/* 4430:31678 itemSpacing — heading → player. */
	gap: 40px;
}

/* «Trailer Video Player» 4430:31690 / 4106:11481 — the shared player's own
   box; the slider around it renders no controls for a single video. */
.access-video__player .c-slider {
	margin-inline: auto;
	max-width: 1207px;
}

/* ============================ крісло колісне / аудіодескрипція / титри */

.access-topic--audio-description {
	padding-block: 80px;
	background: var(--color-neutral-100);
}

/* «Section Title» 3671:14040 — the section's own H2, the same type as every
   other section heading (section-title.css owns it; this is one heading and
   not a header block, so the type is repeated here rather than the component
   wrapped around a single line). */
.access-topic__title {
	margin: 0;
	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;
}

.access-topic__body {
	display: flex;
	flex-direction: column;

	/* 4430:31764 — the photograph block → the accordion. */
	gap: 40px;
}

/* «Contact Info Block» 3730:16874 / 4430:31774 itemSpacing. */
.access-topic__aside {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

/* «Photo» 3671:14041 — 496×404 at 1440, 358×291.6 at 390: one proportion. */
.access-topic__photo {
	aspect-ratio: 496 / 404;
	overflow: clip;
}

.access-topic__image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* «Box Office Info» 3671:14119 — the teal rule on the left, the label over
   the number and the hours under it. */
.access-topic__contact {
	display: flex;
	flex-direction: column;

	/* 3671:14119 hugs its own widest line (348 of the 496 column). */
	align-self: flex-start;

	/* 3671:14119 itemSpacing. */
	gap: 16px;
	box-sizing: border-box;
	padding-left: 12px;
	box-shadow: inset 2px 0 0 0 var(--color-primary-500);
}

/* «Box Office Heading» 3671:14120 — «S/S text (semi bold) caps». */
.access-topic__contact-heading {
	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);
	text-transform: uppercase;
}

/* «Box Office Details» 3671:14121 itemSpacing. */
.access-topic__contact-details {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

/* «Box Office Phone Number» 3671:14122 — «M/M text (semi bold)», uppercase in
   the frame (it is a number, so the case only affects nothing visible). */
.access-topic__phone {
	margin: 0;
	color: var(--color-neutral-800);
	font-family: var(--font-body);
	font-size: var(--fs-m-text);
	font-weight: 600;
	line-height: var(--lh-m-text);
	letter-spacing: var(--ls-m-text);
	text-box: trim-both cap alphabetic;
	text-decoration: none;
	text-transform: uppercase;
}

.access-topic__phone:hover,
.access-topic__phone:focus-visible {
	text-decoration: underline;
}

/* «Box Office Hours» 3671:14123 — «S/S text (regular)».

   The frame's #697482 (--color-neutral-500) is 4.66:1 on white but only
   4.31:1 on the #F3F4F6 of «Аудіодескрипція», i.e. below WCAG 1.4.3 for body
   text in one of the three sections that draw this line. The next step of the
   same ramp, --color-neutral-600, is 6.7:1 on that ground and is used in all
   three, so the same line is not two colours on one page (R13's exception for
   a shown failure; logged in designer-questions.md). */
.access-topic__hours {
	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);
}

/* The accordion of a service section carries no header and no ground of its
   own: the section around it already has both. */
.access-topic__faq.c-faq {
	padding: 0;
	background: transparent;
}

/* ========================================== як підготуватися до візиту */

/* «Gallery Item 1» 3673:14173 / 4430:31847 — the number, the step and the
   teal corner bracket. `<ol>`, so the number is the item's own position:
   `counter()` writes «01», not the content. */
.access-steps__list {
	counter-reset: access-step;
}

.access-step {
	position: relative;
	display: flex;
	flex-direction: column;

	/* «Gallery Caption 1» 4430:31848 itemSpacing — the number → the step. */
	gap: 32px;
	box-sizing: border-box;
	padding: 16px;
	background: var(--color-neutral-100);
	counter-increment: access-step;
}

/* «01» 3673:14175 — «H3» in the teal, two digits with a leading zero. */
.access-step::before {
	content: counter(access-step, decimal-leading-zero);
	padding-bottom: 0.041em;
	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;
}

/* «Frame 1437255142» 3673:14233 itemSpacing. */
.access-step__body {
	display: flex;
	flex-direction: column;
	gap: 16px;
}

/* «Gallery Photo 1» 3673:14440 — two teal rectangles in the top right corner:
   the bar along the top (54.58×14.5 at 1440, 29.97×10.87 at 390) and the one
   down the right edge (8.516×32.62 / 4.676×24.47). Two background layers, so
   the shape needs no markup of its own and no icon export. The frame scales
   the group with the card at 390 (24.47…30.67 tall); one size is used here,
   the smallest one the frame draws (task-9-report.md). */
.access-step__corner {
	position: absolute;
	top: 0;
	right: 0;
	width: 29.97px;
	height: 24.47px;
	background-image:
		linear-gradient(var(--color-primary-500), var(--color-primary-500)),
		linear-gradient(var(--color-primary-500), var(--color-primary-500));
	background-repeat: no-repeat;
	background-position: left top, right top;
	background-size: 29.97px 10.87px, 4.676px 24.47px;
}

/* ============================================== «Залишилися питання?» (FAQ) */

/* The section is the shared FAQ component; only two things differ from the
   halls' and the buffet's frame: the heading's column is wider here (the
   frame's own «Section Header» 3673:14452 is 351), and the heading carries a
   sentence and the questionnaire link under it, 54 px below itself
   («Frame 1437255241» 4112:11507 itemSpacing). The shared header's gap is 24,
   so the sentence adds the other 30. */

/* At 390 the grey band hugs the section's own content — the frame gives it no
   vertical padding of its own (`4430:31913`), where the shared component's
   other two pages have 80.

   The column is the page's, not the component's own 16/56: every section of
   this page lands on the same two edges (container.css, the client's ruling
   ПР-3), and the component's fixed gutter would put this one section 16 px
   from the edge at 768 and hold it to 1328 at 1920. */
.access-questions.c-faq {
	padding-block: 0;
	padding-inline: var(--page-gutter);
}

.access-questions .c-faq__inner {
	max-width: none;
}

.access-questions .c-section-title__intro {
	margin-top: 30px;
}

/* ================================================== «Потрібна допомога?» */

/* «Help Contact Section» 3673:14736 — the dark block, flush under the grey
   FAQ band above it. */
.access-help {
	box-sizing: border-box;
	padding: 56px var(--page-gutter);
	background: var(--color-neutral-800);
}

.access-help__inner {
	display: flex;
	flex-direction: column;
	gap: 40px;
}

/* «Content Block» 3673:14737 itemSpacing — the text → the button. */
.access-help__content {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 40px;
}

/* «Text Container» 3673:14784 itemSpacing; it fills the block, the button
   beside it hugs. */
.access-help__text {
	display: flex;
	flex-direction: column;
	align-self: stretch;
	gap: 18px;
}

/* «Title» 3673:14738 — «H3» in the teal. On this #272B30 ground
   --color-primary-500 (#12AD99) is 5.9:1; the lighter step the high-contrast
   theme needs is set by a11y-themes.css, not here. */
.access-help__title {
	margin: 0;
	padding-bottom: 0.041em;
	color: var(--color-primary-500);
	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;
}

/* «Description» 3673:14739 — «S/S text (regular)» in white. */
.access-help__lead {
	margin: 0;
	color: var(--color-base-white);
	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);
}

/* «Tickets Button» 3673:14781 — the shared button, on a dark ground: the
   label is white here and so are the four lines the component draws on hover
   and on focus. The lines are #272B30 in the set, which is this block's own
   background — they would be invisible, and with them the FOCUS indicator
   (WCAG 2.4.7/1.4.11). Logged in designer-questions.md; R13 allows the
   deviation for a shown failure. */

/* The instance is 243×40 with 36 of side padding («Tickets Button»
   3673:14781): the component's own 128 minimum and 16 gutter are the card
   button's, not this one's. The 14 of vertical padding Figma writes is
   nominal — the frame's box is 40 and the label is centred in it, which is
   what ticket-button.css already records. */
.access-help__button {
	min-width: 0;
	max-width: 100%;
	padding: 0 36px;
	color: var(--color-base-white);

	/* The shared button never wraps, which is right on a card; here the label
	   is the longest string of the block and at 150 % text with the dyslexia
	   font it is wider than a 320 screen, so this one is allowed to break. */
	white-space: normal;
	text-align: center;
}

.access-help__button::before,
.access-help__button::after {
	background-image:
		linear-gradient(var(--color-base-white), var(--color-base-white)),
		linear-gradient(var(--color-base-white), var(--color-base-white));
}

/* «Box Office Info» 3673:14764 — the email, the telephone and the hours. */
.access-help__contact {
	display: flex;
	flex-direction: column;

	/* 3673:14764 itemSpacing. */
	gap: 40px;
}

/* «Contact Details» 3673:14785 — itemSpacing, and the block hugs the longer
   of the two lines (191 of the 330 the hours take under it). */
.access-help__details {
	display: flex;
	flex-direction: column;
	align-self: flex-start;
	align-items: flex-start;
	gap: 24px;
}

/* «Box Office Phone Number» 3673:14765 / 3673:14768 — «M/M text» in white. */
.access-help__email,
.access-help__phone {
	margin: 0;
	color: var(--color-base-white);
	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);
	text-box: trim-both cap alphabetic;
	text-decoration: none;
	overflow-wrap: anywhere;
}

.access-help__email:hover,
.access-help__email:focus-visible,
.access-help__phone:hover,
.access-help__phone:focus-visible {
	text-decoration: underline;
}

/* «Box Office Hours» 3673:14766 — «S/S text (regular)» in #D0D5DC. */
.access-help__hours {
	margin: 0;
	color: var(--color-neutral-300);
	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);
}

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

@media (min-width: 1440px) {

	.access-hero__inner,
	.access-features__inner,
	.access-video__inner,
	.access-topic__inner,
	.access-steps__inner,
	.access-help__inner {
		max-width: 1328px;
	}

	/* The frame's Hero box is 824 tall while its padding and content add up to
	   820 (136 + 624 + 60): the 4 px are the box's own, so the padding carries
	   them and the section below starts where the frame puts it. */
	.access-hero {
		padding-block: 0 64px;
	}

	/* 3977:17453 itemSpacing. */
	.access-hero__inner {
		gap: 60px;
	}

	/* 3977:17452 itemSpacing; the head block is the full column at 1440. */
	.access-hero__head {
		gap: 36px;
		max-width: none;
	}

	/* The banner header's row is the full column («Frame 1437255229» is 1328
	   wide and hugs its two children to the left), not the fit-content box the
	   shared banner variant gives the halls' own header. */
	.access-hero__header {
		width: auto;
	}

	/* 3656:13668 — the paragraph beside the H1 is 279 wide. */
	.access-hero__header .c-section-title__intro {
		width: 279px;
	}

	/* 3977:17450 — four cards of 314 across the 1328 column. */
	.access-hero__cards {
		flex-direction: row;
		align-items: stretch;
	}

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

	.access-card__band {
		--c-poster-band-rise: 35.4%;
	}

	/* «Card Content» 3656:13708 is 188 tall and pushes the link to its bottom
	   edge; 41 of those 188 overlap the photograph, so 147 of them are under
	   it and the card is 281 + 147 = 428. */
	.access-card__content {
		justify-content: space-between;
		gap: 0;
		min-height: 188px;
	}

	.access-features,
	.access-video,
	.access-topic,
	.access-steps,
	.access-questions {
		margin-top: 180px;
	}

	.access-features__inner,
	.access-steps__inner,
	.access-topic__inner {

		/* 3671:14030 — the heading's own box ends 54 above the content. */
		gap: 54px;
	}

	/* 3663:13793 + 3663:13795 — the heading and its paragraph stand in one
	   row, the paragraph in a 283 box, and the row hugs them both. */
	.access-features__header {
		flex-direction: row;
		align-items: flex-end;
		gap: 40px;
	}

	/* 3663:13793 is a FIXED 749 box — that is where the heading breaks into
	   its two lines, and what puts the paragraph at x=845. */
	.access-features__header .c-section-title__heading {
		flex: 0 0 749px;
	}

	.access-features__header .c-section-title__intro {
		flex: 0 0 283px;
		max-width: none;
	}

	/* 3671:14030 — the seven cards on a six-column grid: two photographs take
	   three columns (652 of 1328), one takes two (427). Any order of features
	   still fills whole rows. */
	.access-features__grid,
	.access-steps__list {
		grid-template-columns: repeat(6, 1fr);
	}

	.access-features__grid > * {
		grid-column: span 2;
	}

	.access-features__grid > .access-feature--wide {
		grid-column: span 3;
	}

	.access-feature__photos {
		aspect-ratio: 652 / 300;
	}

	.access-feature--narrow .access-feature__photos {
		aspect-ratio: 427 / 360;
	}

	/* 3668:13931 — on a wide card the heading and the paragraph stand side by
	   side, 298 and the rest of the row; a narrow card keeps the column. The
	   frame writes 24 here on «Безбар'єрний вхід» and 16 on the three other
	   wide cards, which are the same card: 24 is used for all four, and the
	   8 px are a residual (task-9-report.md). */
	.access-feature--wide .access-feature__block {
		flex-direction: row;
		align-items: flex-start;
		gap: 24px;
	}

	.access-feature--wide .access-feature__block .access-feature__title {
		flex: 0 0 298px;
	}

	.access-feature--wide .access-feature__block .access-feature__text {
		flex: 1 1 auto;
		min-width: 0;
	}

	/* 3671:13957 — the paragraph of a narrow card is 349 of its 395. */
	.access-feature--narrow .access-feature__text {
		max-width: 349px;
	}

	.access-video {
		padding-block: 100px;
	}

	/* 4106:11470 — the heading is centred over the player, 539 wide. */
	.access-video__inner {
		gap: 54px;
	}

	.access-video__header {
		align-items: center;
		align-self: center;
		max-width: 539px;
		text-align: center;
	}

	.access-topic--audio-description {
		padding-block: 100px;
	}

	/* 3671:14031 — the photograph column (496) on the left, the accordion
	   (765) flush with the right edge of the 1328 column. */
	.access-topic__body {
		display: grid;
		grid-template-columns: 496px 765px;
		justify-content: space-between;
		gap: 0;
		align-items: start;
	}

	/* Annotation `4550:25445`: «фото залишається зафіксованим під час скролу
	   секції та рухається далі, коли секція закінчується» — which is exactly
	   what a sticky box inside the section's own grid does. The offset clears
	   the sticky header, so a reader tabbing into the block never lands under
	   it (site-header.css sets `--podil-header-h`). */
	.access-topic__aside {
		position: sticky;
		top: calc(var(--podil-header-h, 0px) + 24px);
	}

	/* Inside the section's own two columns the accordion is the right one, so
	   the component's own heading/list grid has nothing left to split. */
	.access-topic__faq .c-faq__inner {
		display: block;
		max-width: none;
	}

	.access-steps__list > * {
		grid-column: span 2;
	}

	/* 3673:14172 — the first two steps take half a row each, the rest a
	   third, which is the frame's own two rows of two and three. */
	.access-steps__list > :nth-child(-n+2) {
		grid-column: span 3;
	}

	/* 3673:14173 / 3673:14319 — the rows are 200 and 232 tall, and the step
	   sits at the bottom of its card with the number at the top. */
	.access-step {
		justify-content: space-between;

		/* 3673:14173 itemSpacing; with the number at the top and the step at
		   the bottom of a fixed box it only shows on a card that outgrows it. */
		gap: 24px;
		min-height: 200px;
	}

	.access-steps__list > :nth-child(n+3) {
		min-height: 232px;
	}

	/* 3673:14176 — the sentence of a step is set in a 372 column. */
	.access-step__text {
		max-width: 372px;
	}

	/* 3673:14440 — the bracket at 1440. */
	.access-step__corner {
		width: 54.58px;
		height: 32.62px;
		background-size: 54.58px 14.5px, 8.516px 32.62px;
	}

	/* 3673:14452 — «Залишилися питання?» stands in a 351 column, wider than
	   the 319 the shared component gives the halls' and the buffet's heading:
	   at 56px caps the word «Залишилися» does not fit 319 and would break. */

	/* 3673:14446 — the frame gives this section the shared 100 of padding
	   again, where 390 has none. */
	.access-questions.c-faq {
		padding-block: 100px;
	}

	.access-questions .c-faq__inner {
		grid-template-columns: 351px 765px;
	}

	/* Annotation `4550:25451` — the heading stays put while its questions
	   scroll past. The shared component already does this for the halls' FAQ;
	   this section's own column is wider, so the rule is repeated with the
	   same offset and nothing else changes. */
	.access-questions .c-faq__header {
		position: sticky;

		/* A grid item stretches to its row; a heading that is as tall as the
		   list beside it has nothing left to travel. */
		align-self: start;
		top: calc(var(--podil-header-h, 0px) + 24px);
	}

	/* 3673:14736 — the text block and the contact stand in one row, bottom
	   aligned, 876 and 330 wide. */
	.access-help__inner {
		flex-direction: row;
		align-items: flex-end;
		gap: 24px;
	}

	.access-help__content {
		flex: 0 1 876px;
	}

	/* 3673:14762 hugs its own widest line and the row is packed to the left,
	   as the frame's own 956 + 330 in a 1328 column is. */
	.access-help__contact {
		flex: 0 0 auto;
	}
}

/* ================================================================== 1920+ */

@media (min-width: 1920px) {

	/* No 1920 frame exists for this page (inventory.md). The two fixed
	   columns of the service sections and of the FAQ grow with the page's own
	   column instead of leaving a hole on the right, in the proportion the
	   1440 frame sets (496 and 765 of 1328).

	   They used to grow only as far as a `max-width: 1696px` on every
	   `__inner`, which was the 1920 column written as a length: at 1920 it is
	   exactly what the page's own gutters leave (1920 − 2 × 112), and above
	   1920 it froze the page there while the header kept going — the defect
	   client fix ПР-20 is about. The cap is gone and the inners take the
	   column they are given; nothing moves at 1440 or at 1920. */
	.access-topic__body {
		grid-template-columns: minmax(0, 37.35%) minmax(0, 57.6%);
	}

	.access-questions .c-faq__inner {
		grid-template-columns: minmax(0, 26.43%) minmax(0, 57.6%);
	}
}

/* The dark band under the high-contrast theme: that theme remaps the accents
   to --color-primary-800 for light grounds, which is 2.61:1 on the near-black
   this band becomes. The same remedy the footer's own dark band already uses
   (a11y-themes.css): inside the band the accents are white. */
html[data-contrast="high"] .access-help {
	--color-primary-500: var(--color-base-white);
	--color-primary-600: var(--color-base-white);
	--color-primary-700: var(--color-base-white);
	--color-primary-800: var(--color-base-white);
}

/* ================================================== менше руху / контраст */

/* Both sticky effects are motion: they hold a layer still while the page
   moves under it. The global rules zero durations, which `position: sticky`
   has none of, so they are turned off by name — the same treatment the
   parallax gets in parallax.css. */
html[data-motion="reduced"] .access-topic__aside,
html[data-motion="reduced"] .access-questions .c-faq__header {
	position: static;
}

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

	.access-topic__aside,
	.access-questions .c-faq__header {
		position: static;
	}
}

/* Forced colours drop every background, and with them the four grounds this
   page uses to separate a card from the page («Feature» #F3F4F6, the step,
   the dark block, the white card over the photograph). The system's own
   canvas and a hairline put the boundaries back, so the page still reads as
   cards and not as one column of text. */
@media (forced-colors: active) {

	.access-card,
	.access-feature,
	.access-step,
	.access-help {
		border: 1px solid CanvasText;
	}

	.access-step__corner {
		background-image:
			linear-gradient(CanvasText, CanvasText),
			linear-gradient(CanvasText, CanvasText);
	}

	.access-topic__contact {
		box-shadow: none;
		border-left: 2px solid CanvasText;
	}

	/* The dark band keeps no colours of its own here: the system's canvas and
	   its text and link colours are the only pair guaranteed to contrast. */
	.access-help {
		background: Canvas;
	}

	.access-help__title,
	.access-help__lead,
	.access-help__hours {
		color: CanvasText;
	}

	.access-help__button,
	.access-help__email,
	.access-help__phone {
		color: LinkText;
	}
}
