/* ============================================================
   components/rail.css
   The banner column: one page object, filled top to bottom, not a
   per-block sidebar. Not sticky (the price ladder assumes visibility
   falls with position). Unsold slot renders nothing. The house block
   is allowed only in the rail tail. No outer margin on the root.
   ============================================================ */
.rfi-rail { display: flex; flex-direction: column; gap: var(--rfi-gap); min-width: 0; }
/* The slot has NO fixed height and NO min-height and NO plate: its height is exactly the
   creative's height, so a shorter-than-standard creative leaves no empty band above or below.
   width 100% + height auto keeps the creative's own proportion (a 420x350 renders 300x250, an
   old 420x270 renders 300x193); never object-fit, so a paid banner is never cropped. */
.rfi-rail__slot { width: 100%; border-radius: var(--rfi-radius); overflow: hidden; }
.rfi-rail__slot .rfi-banner { display: block; width: 100%; }
.rfi-rail__slot img { display: block; width: 100%; height: auto; }

/* Below 1100px the page grid collapses (base.css) and the rail becomes the row UNDER the main
   column rather than the column beside it. It is never hidden: the placements are sold, and a
   breakpoint that quietly stops delivering an impression is a commercial failure that looks
   like a layout choice.

   The slot is capped at 286px, which is the module width the same creative gets on the desktop
   grid, and the row centres and wraps. Without the cap a full-width rail would stretch a
   420x420 creative across the whole column and UPSCALE it, which is worse than the desktop
   rendering rather than merely different: this file's own rule is that a paid banner keeps its
   proportion and is never cropped, and blowing it up past its pixel size breaks the same
   promise from the other direction. */
@media (max-width: 1100px) {
  .rfi-rail { flex-direction: row; flex-wrap: wrap; justify-content: center; }
  .rfi-rail__slot { width: auto; flex: 0 1 286px; max-width: 286px; }
}

/* The house block: the only thing allowed in the rail tail, nowhere else. */
.rfi-house { background: var(--rfi-footer); color: var(--rfi-inverse); border-radius: var(--rfi-radius); padding: 20px 18px; box-shadow: var(--rfi-shadow); }
.rfi-house__k { font-family: var(--rfi-font-ui); font-size: 10.5px; font-weight: 600; letter-spacing: .8px; text-transform: uppercase; color: var(--rfi-inverse-mute); }
.rfi-house__t { font-family: var(--rfi-font-ui); font-size: 18px; font-weight: 500; margin-top: 8px; line-height: 1.3; }
.rfi-house__s { font-size: 13px; line-height: 1.55; color: var(--rfi-inverse-soft); margin-top: 8px; }
.rfi-house a { display: inline-block; margin-top: 14px; font-family: var(--rfi-font-ui); font-size: 13.5px; font-weight: 500; color: var(--rfi-inverse); border-bottom: 1px solid var(--rfi-inverse-faint); padding-bottom: 2px; }
.rfi-house a:hover { color: var(--rfi-teal); border-color: var(--rfi-teal); }

/* TOP slot: full-width strip UNDER the header (the brand is seen first; the slot is above the
   fold either way). Same rule as the rail: NO fixed height, NO plate, so the strip is exactly as
   tall as the creative and never letterboxes it. Empty when unsold: the shell is not rendered. */
.rfi-topslot { border-radius: var(--rfi-radius); overflow: hidden; }
.rfi-topslot .rfi-banner { display: block; width: 100%; }
.rfi-topslot img { display: block; width: 100%; height: auto; }

/* ---- the marking, spec 9.3: THERE IS NO RULE HERE, AND THAT IS THE POINT ----
   A `.rfi-banner__marking` rule stood here until 2026-08-20, styling a visible disclosure
   line under the creative. The marking now rides in the `title` and `alt` attributes of
   the banner image and has no element and no styling at all. That is the owner's decision,
   reproducing the live Bitrix site, recorded in docs/DECISIONS.md 2026-08-20 with the cost
   measured: an attribute reaches no crawler and no touch device.

   This paragraph exists so the absence is legible. Do not restyle it back into view from
   here: bringing the disclosure back is a change to a legal assertion about a paid
   placement, it happens in template-parts/components/rail.php, and it needs a decision. */

/* A "see all" arrow whose destination does not exist yet. Same treatment as the header's
   unresolved service links, on purpose: one marking for one meaning across the site. */
.rfi-section-head__arrow.is-unresolved {
  color: var(--rfi-text-3); text-decoration: underline dotted; text-underline-offset: 3px;
}
