/* Last-resort CSS only. Each rule names the control searched for and the empty controls.py query. */

/* LAST RESORT ONLY. aspect-ratio has no Elementor control
   (`python controls.py container aspect` and `controls.py image aspect`
   both return no match). Static: .block--aspect-tall card = 3/5,
   .block--ratio-portrait image = 4/5. */
.rx-doorway-card { aspect-ratio: 3 / 5; }
.rx-ratio-45 img { aspect-ratio: 4 / 5; object-fit: cover; }

/* LAST RESORT ONLY. Three-stop linear-gradient overlay; Elementor's
   background_overlay gradient control exposes only two colour stops
   (`python controls.py container background_overlay` -> colour/colour_b/
   angle only). Static .block--doorway-cards .block__card::before. */
.rx-doorway-card::before {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(180deg, rgba(60,40,40,0.18) 0%,
                              rgba(74,52,48,0.55) 55%, rgba(40,26,26,0.82) 100%);
}

/* The static's <=560px `aspect-ratio: 3/4` rule is DEAD: it is
   `.block--doorway-cards .block__card` (0,2,0) and loses to
   `.block--doorway-cards.block--aspect-tall .block__card` (0,3,0).
   Measured static card at 375px: 293x488 = 3/5. No mobile override. */

/* LAST RESORT. aspect-ratio has no Elementor control (`python controls.py image aspect` -> no match).
   Static: .block--service-cards.block--aspect-landscape .block__card-media { aspect-ratio: 3/2 } */
.rx-ratio-32 img { aspect-ratio: 3 / 2; object-fit: cover; }

/* LAST RESORT. aspect-ratio has no Elementor control (`python controls.py image aspect` -> no match).
   Static: .block--blog-list.block--image-aspect-landscape .block__post-image { aspect-ratio: 4/3 } */
.rx-ratio-43 img { aspect-ratio: 4 / 3; object-fit: cover; }

/* Pro Form has no field-padding and no field-height control:
   `python controls.py form padding` -> only _padding / button_text_padding;
   `python controls.py form height` -> only typography line-heights. */
.rx-form-underlined .elementor-field-group .elementor-field{padding:.75rem 0}
.rx-form-underlined .elementor-field-group .elementor-field-type-text .elementor-field,
.rx-form-underlined .elementor-field-group .elementor-field-type-email .elementor-field{min-height:44px}
.rx-form-underlined .elementor-field-group textarea.elementor-field{min-height:130px}

/* LAST RESORT. Mirrors the static's global strong { font-weight: 600 } (computed 600 on
   every measured <strong>; scoped to prose widgets exactly like the static's selector; the widget weight cascades 300 and
   the UA 'bolder' from 300 only reaches 400 - no control exposes strong weight). */
.rx-prose strong, .rx-prose b { font-weight: 600; }

/* LAST RESORT. The toggle widget exposes only an item SEPARATOR border
   (`python controls.py toggle border` -> border_width/border_color separators;
   `controls.py toggle space` -> no item gap). Static .block--faq-accordion
   .block__item: 1px 18%-ink box, radius 8, 0.75rem gaps. */
.rx-faq .elementor-toggle-item { border: 1px solid rgba(58,47,51,0.18); border-radius: 8px; margin-bottom: 0.75rem; overflow: hidden; }
.rx-faq .elementor-toggle-item:last-child { margin-bottom: 0; }
.rx-faq .elementor-tab-title, .rx-faq .elementor-tab-content { border-bottom: 0 !important; border-top: 0 !important; }

/* LAST RESORT - parent-hover interactions. Elementor's hover controls act on the
   hovered element itself; the static triggers these from the CARD/link ancestor
   (no container control reaches a child on hover). Values verbatim from style.css. */
.rx-doorway-card { position: relative; }
.rx-doorway-card .elementor-widget-image { position: absolute; inset: 0; z-index: 0; }
.rx-doorway-card .elementor-widget-image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; }
.rx-doorway-card:hover .elementor-widget-image img { transform: scale(1.04); }
.e-con.rx-doorway-card:hover .elementor-widget-button .elementor-button { background-color: #f6efe6; color: #3c2828; }
.rx-blog-card img { transition: transform 0.4s ease; }
.rx-blog-card:hover img { transform: scale(1.03); }
.rx-blog-card h3 { transition: opacity 0.2s ease; }
.rx-blog-card:hover h3 { opacity: 0.72; }

/* LAST RESORT - the heading widget exposes no link-hover colour; static
   .site-footer a:hover = accent + opacity 1 (base opacity .85). */
.rx-foot-link a { opacity: 0.85; transition: opacity 0.2s ease, color 0.2s ease; }
.elementor-widget-heading.rx-foot-link .elementor-heading-title a:hover { opacity: 1; color: #916435; }

/* LAST RESORT - static .block--prose .block__body a: accent, 40%-accent underline,
   hover full accent; the text-editor widget has no link colour/underline controls. */
.elementor-widget-text-editor.rx-prose a { color: #916435; text-decoration: none; border-bottom: 1px solid rgba(145,100,53,0.4); transition: border-color 0.15s; }
.elementor-widget-text-editor.rx-prose a:hover { border-bottom-color: #916435; }

/* LAST RESORT - static .block__card-link:hover { text-decoration: underline }
   inside the LEARN MORE reveal; toggle content links have no hover control. */
/* !important: the reveal links carry inline text-decoration:none */
.rx-cardlink .elementor-tab-content a:hover { text-decoration: underline !important; }


/* LAST RESORT - static .mobile-menu-toggle is a 44x44 white pill with a
   rgba(85,63,73,.14) hairline and black 22x2 bars. Elementor exposes the
   toggle's size, radius, background and icon colour, but its padding is a
   fixed 0.25em (box = 35px, not 44) and its border takes currentColor, so a
   hairline border with black bars is not expressible through the controls. */
.elementor-widget-nav-menu .elementor-menu-toggle {
  padding: 10px;
  border-color: rgba(85, 63, 73, 0.14);
}

/* LAST RESORT - static .site-nav__caret is 8.736px with a 2.18px gap, total
   10.98px after the label. Elementor's sub-arrow is a 12.48px icon in a
   10px-padded flex box (19.3px), which pushed every earlier nav item 8.3px
   left. Elementor exposes no size or spacing control for the submenu icon. */
.elementor-nav-menu .sub-arrow {
  font-size: 8.736px;
  padding-left: 4px;
}

/* LAST RESORT - static .site-header__inner is align-items:center inside a 78px
   bar, so the logo, wordmark and menu sit on the bar's centre line. Elementor
   renders the boxed container's .e-con-inner at align-items:stretch and the
   container's own align control lands on a nested wrapper, not this row, so
   the whole header content was sitting 15px high. */
/* !important: Elementor writes align-items on .elementor-<id> > .e-con-inner */
/* the boxed container is a COLUMN, so the vertical axis is justify-content */
header .e-con > .e-con-inner { justify-content: center !important; }
