/*
Theme Name: R.R. Builders
Theme URI: https://rrbuilderspatna.com
Author: IITES
Author URI: https://www.iites.in
Description: Custom theme for R.R. Builders & Developers, Patna. Built for Elementor with a hand-coded header and footer.
Version: 1.0.0
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 8.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: rr-builders
Tags: real-estate, elementor, custom-menu, custom-logo, translation-ready
*/

/* ─── TOKENS ─── */
:root {
  --ink:       #1A1612;
  --blue:      #1BA3D8;      /* logo sky blue */
  --blue-dk:   #1486B5;      /* hover dark blue */
  --blue-txt:  #087099;      /* readable blue for text on light bg */
  --red:       #DB2B1C;      /* logo bird red */
  --warm:      #F9C56D;      /* gold – used only on dark/hero sections */
  --warm-lt:   #D6EAF5;      /* light blue tint */
  --cream:     #F0F8FC;      /* slight blue-cream tint */
  --charcoal:  #1C3A4A;      /* deep blue-charcoal from logo */
  --mid:       #4A6070;      /* blue-grey mid tone */
  --white:     #FFFFFF;
  --line:      #E2DAD0;      /* hairline rules */
  --serif:     'Cormorant Garamond', Georgia, serif;
  --sans:      'DM Sans', system-ui, -apple-system, sans-serif;
  --radius:    4px;
  --section-gap: 100px;
  --shell:     1240px;
}

/* ─── RESET ─── */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--cream);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.6;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }

/* Cormorant Garamond runs light and small at a given px size, so display type
   is set a step larger and heavier than the original Georgia-fallback mockup. */
h1, h2, h3, h4, h5, h6 {
  font-family: var(--serif);
  font-weight: 600;
  line-height: 1.15;
  margin: 0;
  color: var(--ink);
}

/* ─── SHARED SHELL + BUTTONS ─── */
.rr-shell { max-width: var(--shell); margin: auto; padding: 0 32px; }
.section { padding: var(--section-gap) 0; }
.section-inner { max-width: var(--shell); margin: auto; padding: 0 32px; }
.section-header { margin-bottom: 56px; }
.section-eyebrow,
.section-eyebrow-dark {
  font-size: 12px; letter-spacing: .2em; text-transform: uppercase;
  margin-bottom: 12px; display: flex; align-items: center; gap: 10px;
}
.section-eyebrow { color: var(--warm); }
.section-eyebrow-dark { color: var(--blue-txt); }
.section-eyebrow::before,
.section-eyebrow-dark::before {
  content: ''; display: inline-block; width: 28px; height: 1px; background: currentColor;
}
.section-title {
  font-family: var(--serif); font-size: clamp(34px, 4.4vw, 56px);
  font-weight: 600; line-height: 1.12; color: var(--ink);
}
.section-sub { color: var(--mid); font-size: 16px; max-width: 560px; margin-top: 14px; line-height: 1.75; }

.btn-primary {
  background: var(--blue); color: var(--white); padding: 14px 32px;
  border: none; border-radius: var(--radius); font-family: var(--sans);
  font-weight: 500; font-size: 15px; letter-spacing: .04em; cursor: pointer;
  transition: background .2s, transform .15s; display: inline-block;
}
.btn-primary:hover { background: var(--blue-dk); transform: translateY(-2px); color: var(--white); }
.btn-outline {
  border: 1px solid rgba(255,255,255,.4); color: var(--white); padding: 14px 32px;
  border-radius: var(--radius); font-weight: 500; font-size: 14px; letter-spacing: .04em;
  transition: border-color .2s, background .2s; display: inline-block;
}
.btn-outline:hover { border-color: var(--warm); background: rgba(249,197,109,.1); }
.btn-white {
  background: var(--white); color: var(--blue-txt); padding: 14px 28px;
  border-radius: var(--radius); font-weight: 500; font-size: 14px;
  transition: background .2s; display: inline-block;
}
.btn-white:hover { background: var(--cream); }
.btn-ghost-white {
  border: 1px solid rgba(255,255,255,.5); color: var(--white); padding: 14px 28px;
  border-radius: var(--radius); font-weight: 500; font-size: 14px;
  transition: border-color .2s; display: inline-block;
}
.btn-ghost-white:hover { border-color: var(--white); }
.pill {
  display: inline-block; padding: 8px 18px; border: 1px solid var(--blue);
  border-radius: 100px; font-size: 13px; letter-spacing: .06em; color: var(--charcoal);
}

/* ─── TOP BAR ─── */
.topbar {
  background: var(--charcoal);
  color: var(--warm-lt);
  font-size: 15px;
  letter-spacing: 0.04em;
  padding: 8px 0;
}
.topbar-inner {
  max-width: var(--shell); margin: auto; padding: 0 32px;
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
}
/* Specificity note: Elementor's kit stylesheet emits `.elementor-kit-N a { color }`
   and loads after this file, so single-class link rules here lose the tie.
   Every link rule below is deliberately two classes deep to win. */
.topbar .topbar-contact a,
.topbar .topbar-social a { color: var(--white); opacity: .85; transition: opacity .2s; }
.topbar .topbar-contact a:hover,
.topbar .topbar-social a:hover { color: var(--white); opacity: 1; }
.topbar-contact { display: flex; gap: 24px; align-items: center; }
.topbar-contact a { display: inline-flex; align-items: center; gap: 6px; }
.topbar-social { display: flex; gap: 14px; align-items: center; }
.topbar-social a { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; }
.topbar-social svg { width: 18px; height: 18px; }

/* ─── NAV ─── */
.site-header {
  background: var(--white);
  border-bottom: 1px solid var(--line);
  position: sticky; top: 0; z-index: 100;
  box-shadow: 0 2px 20px rgba(26,22,18,.06);
}
.nav-inner {
  max-width: var(--shell); margin: auto; padding: 0 32px;
  display: flex; align-items: center; justify-content: space-between;
  height: 80px; gap: 16px;
}
.logo { display: flex; flex-direction: row; align-items: center; gap: 12px; }
/* .logo-img is the <img> itself — header.php renders it directly so the logo
   link is not nested inside the_custom_logo()'s own anchor. */
.logo-img { height: 76px; width: auto; max-width: none; object-fit: contain; flex-shrink: 0; }
.logo-text { display: flex; flex-direction: column; }
.logo-name {
  font-family: var(--serif); font-size: 26px; font-weight: 700; color: var(--charcoal);
  letter-spacing: .02em; line-height: 1.15; text-transform: uppercase;
}
.logo-tagline {
  font-size: 11px; letter-spacing: .15em; color: var(--red);
  text-transform: uppercase; margin-top: 2px; font-weight: 600;
}

.nav-links { display: flex; gap: 4px; list-style: none; margin: 0; padding: 0; }
.nav-links > li { position: relative; }
.nav-links > li > a {
  display: block; padding: 10px 16px;
  font-size: 15px; font-weight: 500; letter-spacing: .03em;
  color: var(--charcoal); border-radius: var(--radius);
  transition: color .2s, background .2s;
}
.nav-links > li > a:hover { color: var(--blue-txt); background: #EAF6FC; }
.nav-links > li.current-menu-item > a,
.nav-links > li.current-menu-ancestor > a,
.nav-links > li.current_page_item > a,
.nav-links > li > a.active { color: var(--blue-txt); }
/* caret on parents */
.nav-links > li.menu-item-has-children > a::after { content: ' \25BE'; font-size: .85em; }

/* dropdown — matches both the fallback markup and wp_nav_menu output */
.nav-links .dropdown,
.nav-links .sub-menu {
  display: none; position: absolute; top: 100%; left: 0; min-width: 210px;
  list-style: none; margin: 0; padding: 0;
  background: var(--white); border: 1px solid var(--line); border-radius: var(--radius);
  box-shadow: 0 8px 30px rgba(26,22,18,.12); z-index: 200; overflow: hidden;
}
.nav-links > li:hover > .dropdown,
.nav-links > li:hover > .sub-menu,
.nav-links > li:focus-within > .sub-menu { display: block; }
.nav-links .dropdown a,
.nav-links .sub-menu a {
  display: block; padding: 10px 18px; font-size: 14px; color: var(--charcoal);
  transition: background .15s, color .15s;
}
.nav-links .dropdown a:hover,
.nav-links .sub-menu a:hover { background: #EAF6FC; color: var(--blue-txt); }

.nav-inner .nav-cta {
  background: var(--blue); color: var(--white); border: none;
  padding: 10px 22px; border-radius: var(--radius);
  font-family: var(--sans); font-size: 14px; font-weight: 500; cursor: pointer;
  transition: background .2s, transform .15s; white-space: nowrap;
}
.nav-inner .nav-cta:hover { background: var(--blue-dk); transform: translateY(-1px); color: var(--white); }

/* ─── MOBILE MENU ─── */
.mobile-toggle {
  display: none; background: none; border: none; cursor: pointer;
  width: 44px; height: 44px; align-items: center; justify-content: center; flex-shrink: 0;
}
.mobile-toggle span { display: block; width: 24px; height: 2px; background: var(--charcoal); position: relative; transition: background .3s; }
.mobile-toggle span::before, .mobile-toggle span::after {
  content: ""; position: absolute; left: 0; width: 24px; height: 2px;
  background: var(--charcoal); transition: transform .3s, top .3s;
}
.mobile-toggle span::before { top: -7px; }
.mobile-toggle span::after { top: 7px; }
.mobile-toggle.open span { background: transparent; }
.mobile-toggle.open span::before { top: 0; transform: rotate(45deg); }
.mobile-toggle.open span::after { top: 0; transform: rotate(-45deg); }

.mobile-menu { display: none; background: #fff; border-top: 1px solid #e8e8e8; box-shadow: 0 8px 24px rgba(0,0,0,.08); }
.mobile-menu.active { display: block; }
.mobile-menu ul { list-style: none; margin: 0; padding: 0; }
.site-header .mobile-menu a {
  display: block; padding: 15px 24px; border-bottom: 1px solid #f2f2f2;
  font-size: 15px; font-weight: 500; color: var(--charcoal);
  transition: background .15s, color .15s;
}
.site-header .mobile-menu a:hover { background: #EAF6FC; color: var(--blue-txt); }
.mobile-menu .sub-menu a { padding-left: 40px; font-weight: 400; font-size: 14px; color: var(--mid); }
.mobile-menu .mobile-btn {
  margin: 16px 20px 20px; display: block; text-align: center;
  background: var(--blue); color: #fff; padding: 14px; border-radius: 4px;
  font-weight: 500; border-bottom: none;
}
.mobile-menu .mobile-btn:hover { background: var(--blue-dk); color: #fff; }

/* ─── FOOTER ─── */
.site-footer { background: var(--ink); color: rgba(255,255,255,.65); }
.footer-main { max-width: var(--shell); margin: auto; padding: 72px 32px 48px; }
.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 56px; }
.footer-logo-name { font-family: var(--serif); font-size: 24px; color: var(--white); margin-bottom: 4px; font-weight: 700; }
.footer-logo-tag { font-size: 11px; letter-spacing: 2.7px; color: var(--warm); text-transform: uppercase; }
.footer-about { font-size: 15px; line-height: 1.8; margin-top: 16px; color: rgba(255,255,255,.85); }
.footer-social { display: flex; gap: 12px; margin-top: 20px; }
.site-footer .footer-social a {
  width: 36px; height: 36px; background: rgba(255,255,255,.06); border-radius: 50%;
  display: flex; align-items: center; justify-content: center; font-size: 14px;
  color: rgba(255,255,255,.6); transition: background .2s, color .2s;
}
.site-footer .footer-social a:hover { background: var(--warm); color: var(--ink); }
.footer-social svg { width: 16px; height: 16px; fill: currentColor; }
.site-footer h4 { font-family: var(--serif); font-size: 19px; font-weight: 600; color: var(--white); margin: 0 0 20px; }
.footer-links { list-style: none; display: flex; flex-direction: column; gap: 10px; margin: 0; padding: 0; }
.site-footer .footer-links a { font-size: 15px; color: rgba(255,255,255,.85); transition: color .2s; }
.site-footer .footer-links a:hover { color: var(--warm); }
.site-footer .footer-contact-item a { color: rgba(255,255,255,.85); transition: color .2s; }
.site-footer .footer-contact-item a:hover { color: var(--warm); }
.footer-contact-item {
  font-size: 15px; color: rgba(255,255,255,.85);
  display: flex; gap: 8px; align-items: center; margin-bottom: 15px; line-height: 1.3;
}
.footer-contact-item svg { flex-shrink: 0; fill: rgba(255,255,255,.9); }
.footer-bottom {
  max-width: var(--shell); margin: auto; padding: 20px 32px;
  border-top: 1px solid rgba(255,255,255,.08);
  display: flex; justify-content: space-between; align-items: center; gap: 16px;
  font-size: 13px; color: rgba(255,255,255,.65); flex-wrap: wrap;
}
.footer-bottom a { color: var(--warm); font-family: var(--serif); font-size: 16px; font-weight: 700; }

/* ─── WHATSAPP FAB ─── */
.wa-fab {
  position: fixed; bottom: 28px; right: 28px; z-index: 999;
  width: 56px; height: 56px; background: #25D366; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 20px rgba(37,211,102,.4);
  transition: transform .2s, box-shadow .2s;
}
.wa-fab:hover { transform: scale(1.1); box-shadow: 0 6px 28px rgba(37,211,102,.5); }
.wa-fab svg { width: 28px; height: 28px; fill: white; }

/* ─── SHARED ELEMENTOR COMPONENTS ─────────────────────────────────────────
   Page-level custom_css is per-page, so anything used on more than one
   Elementor page lives here instead of being duplicated per page.
   Selectors are two classes deep where they set a colour a widget control or
   the kit also sets — Elementor's CSS loads last and wins equal specificity. */

/* eyebrow: small caps label with a leading rule */
.rr-eyebrow .elementor-heading-title,
.rr-eyebrow-dark .elementor-heading-title {
  display: flex; align-items: center; gap: 10px;
  font-size: 12px; letter-spacing: .2em; text-transform: uppercase; margin: 0;
}
.rr-eyebrow .elementor-heading-title::before,
.rr-eyebrow-dark .elementor-heading-title::before {
  content: ''; display: inline-block; width: 28px; height: 1px;
  background: currentColor; flex-shrink: 0;
}
.rr-eyebrow-center .elementor-heading-title { justify-content: center; }

/* pills */
.rr-pill-row { display: flex; flex-wrap: wrap; gap: 10px; margin: 0; }
.rr-pill {
  display: inline-block; padding: 8px 18px; border: 1px solid var(--blue);
  border-radius: 100px; font-size: 13px; letter-spacing: .06em; color: var(--charcoal);
}
.rr-pill-light { border-color: rgba(255,255,255,.35); color: rgba(255,255,255,.9); }

/* arrow link */
.rr-view-link {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 14px; font-weight: 500; color: var(--blue-txt);
  letter-spacing: .04em; text-decoration: none; transition: gap .2s;
}
.rr-view-link:hover { gap: 10px; color: var(--blue-dk); }

/* project card — used by the home portfolio tabs and all three listing pages.
   `.elementor-element` prefix on the image rule is load-bearing (see the crop
   helper note below): Elementor's `img { height: auto }` loads after this file. */
.elementor-element.rr-project-card { border-radius: 2px; overflow: hidden; transition: transform .25s, box-shadow .25s; }
.elementor-element.rr-project-card:hover { transform: translateY(-6px); box-shadow: 0 20px 60px rgba(26,22,18,.12); }
/* object-position is top, not center: several of the legacy project photos have a
   white caption band ("BEUR MANSION @Beur") baked into the bottom of the JPEG.
   Anchoring the cover crop to the top throws that band away instead of the sky.
   The mobile height is shorter than desktop for the same reason — at 240px the
   card is nearly the source aspect, so almost nothing gets cropped. */
/* every card image links to its project, and Elementor renders that <a> as
   inline-block — a shrink-to-fit box. The img's `width:100%` then resolves
   against the anchor, which sizes itself from the image's own aspect at 240px
   tall, so anything narrower than the card (Meadow 1024x766, Sanchar Nagar
   1024x686) stops short and centres instead of cropping. Blocking the anchor
   gives the percentage the card width to resolve against. */
.elementor-element.rr-project-img > a { display: block; width: 100%; }
.elementor-element.rr-project-img img {
  width: 100%; height: 240px; object-fit: cover; object-position: center top; display: block;
}
@media (max-width: 767px) {
  .elementor-element.rr-project-img img { height: 200px; }
}
.rr-project-type .elementor-heading-title {
  font-size: 11px; letter-spacing: .18em; text-transform: uppercase; margin: 0;
}
.rr-project-address p {
  display: flex; align-items: flex-start; gap: 6px; margin: 0;
  font-size: 14px; line-height: 1.5;
}
.rr-project-address p::before {
  content: ''; flex-shrink: 0; width: 13px; height: 13px; margin-top: 4px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234A6070' stroke-width='2'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: center; background-size: contain;
}
/* the pill sets its own line-height: without it the chip inherits body copy's
   1.6 (25.6px on a 13px face) and stands 36px tall for one short line, which
   reads as too much padding above and below the text. 1.4 + the 5px padding
   puts it at ~28px. */
.rr-bhk {
  display: inline-block; padding: 5px 14px; background: var(--cream);
  border-radius: 100px; font-size: 13px; line-height: 1.4;
  color: var(--charcoal); font-weight: 500;
}
/* the pill arrives from a text-editor widget, so it is wrapped in a <p> carrying
   the theme's 16px block margins — 16 + 36 + 16 = 68px of card height for one
   chip. Card children are spaced by the container's flex gap; let it do the job.
   `.rr-project-address p` already zeroes its own margin the same way. */
.rr-project-card .elementor-widget-text-editor p { margin: 0; }

/* ─── DARK BAND MODIFIER ──────────────────────────────────────────────────
   `rr-band-dark` flips a full-width band onto the charcoal ground. The
   background itself is an Elementor setting (the `secondary` global), so this
   block only re-points the text and rules that were written for cream.

   The specificity here is deliberate, not defensive padding. Elementor emits
   per-element colour as
   `.elementor-209 .elementor-element.elementor-element-9a000003 .elementor-heading-title`
   — (0,4,0) — and its stylesheet loads after this file, so a four-class rule
   ties and loses, and the stat numbers stay blue on charcoal. */
.rr-band-dark .rr-pullquote { color: rgba(255,255,255,.9); }
/* three classes: the page's own `.rr-statband .rr-stat` border rule is (0,2,0)
   and loads later, so a two-class rule here would not win either */
.rr-band-dark.rr-statband .rr-stat { border-left-color: rgba(255,255,255,.15); }
/* the stat value goes gold, matching every other dark band on the site */
.rr-band-dark .rr-stat > .elementor-element:first-child.elementor-element .elementor-heading-title {
  color: var(--warm);
}
/* and its label to a light tint of the brand blue, not plain grey */
.rr-band-dark .rr-stat > .elementor-element:last-child.elementor-element .elementor-heading-title {
  color: rgba(214,234,245,.72);
}

/* numbered list used by "why choose us" */
.rr-why-list .rr-why-item {
  display: flex; gap: 20px; padding: 24px 0;
  border-bottom: 1px solid rgba(26,22,18,.12);
}
.rr-why-list .rr-why-item:first-child { padding-top: 0; }
.rr-why-num {
  font-family: var(--serif); font-size: 38px; font-weight: 600;
  color: var(--blue); line-height: 1; flex-shrink: 0; width: 44px;
}
.rr-why-text h4 {
  font-family: var(--serif); font-size: 23px; font-weight: 600;
  color: var(--ink); margin: 0 0 6px;
}
.rr-why-text p { font-size: 15px; color: var(--mid); line-height: 1.7; margin: 0; }

@media (max-width: 767px) {
  .rr-why-num { font-size: 30px; width: 36px; }
}

/* large display tagline / pull quote on a band */
.rr-tagline {
  font-family: var(--serif); font-size: 36px; font-weight: 500; font-style: italic;
  line-height: 1.4; color: var(--white); margin: 0; text-align: center;
}
.rr-tagline-dark { color: var(--ink); }

/* Image crop helper — Elementor's image widget has no crop control.
   Put .rr-img-cover on the widget and set the height with a size modifier.

   The `.elementor-element` prefix is load-bearing: this file is enqueued BEFORE
   Elementor's frontend CSS, so a one-class rule here ties with Elementor's own
   `img { height: auto }` and loses. Two classes deep wins. Page-level custom_css
   does not need this — it loads after Elementor. */
.elementor-element.rr-img-cover img { width: 100%; object-fit: cover; display: block; border-radius: 2px; }
.elementor-element.rr-img-h340 img { height: 340px; }
.elementor-element.rr-img-h420 img { height: 420px; }
.elementor-element.rr-img-h480 img { height: 480px; }

@media (max-width: 1024px) {
  .rr-tagline { font-size: 29px; }
  .elementor-element.rr-img-h420 img,
  .elementor-element.rr-img-h480 img { height: 380px; }
}
@media (max-width: 767px) {
  .rr-tagline { font-size: 23px; }
  .elementor-element.rr-img-h340 img,
  .elementor-element.rr-img-h420 img,
  .elementor-element.rr-img-h480 img { height: 280px; }
}

/* ─── DEFAULT CONTENT (non-Elementor pages) ─── */
.rr-content { padding: 72px 0 96px; }
.rr-content .section-inner { max-width: 820px; }
.entry-title { font-size: clamp(34px, 4.4vw, 52px); margin-bottom: 24px; }
.entry-content { color: var(--mid); font-size: 17px; line-height: 1.8; }
.entry-content > * + * { margin-top: 20px; }
.entry-content h2, .entry-content h3, .entry-content h4 { color: var(--ink); margin-top: 40px; }
.entry-content h2 { font-size: 34px; }
.entry-content h3 { font-size: 27px; }
.entry-content a { color: var(--blue-txt); text-decoration: underline; }
.entry-content ul, .entry-content ol { padding-left: 22px; }
.entry-content li + li { margin-top: 8px; }
.entry-content blockquote {
  border-left: 3px solid var(--blue); padding-left: 20px;
  font-family: var(--serif); font-size: 22px; color: var(--ink);
}
.entry-meta { font-size: 13px; letter-spacing: .1em; text-transform: uppercase; color: var(--blue-txt); margin-bottom: 12px; }
.rr-archive-list { display: grid; gap: 40px; }
.rr-pagination { margin-top: 56px; display: flex; gap: 8px; flex-wrap: wrap; }
.rr-pagination .page-numbers {
  padding: 8px 14px; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--white); color: var(--charcoal); font-size: 14px;
}
.rr-pagination .page-numbers.current { background: var(--blue); border-color: var(--blue); color: var(--white); }

/* screen-reader text */
.screen-reader-text {
  border: 0; clip: rect(1px,1px,1px,1px); clip-path: inset(50%);
  height: 1px; width: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute;
}
.skip-link:focus {
  clip: auto; clip-path: none; height: auto; width: auto; margin: 0;
  padding: 12px 20px; position: fixed; top: 8px; left: 8px; z-index: 1000;
  background: var(--white); color: var(--charcoal); border-radius: var(--radius);
}

/* ─── RESPONSIVE ─── */
@media (max-width: 1024px) {
  .footer-grid { grid-template-columns: 1fr 1fr; gap: 40px; }
}
@media (max-width: 768px) {
  :root { --section-gap: 64px; }
  .nav-links, .nav-cta { display: none; }
  .mobile-toggle { display: flex; }

  .topbar { font-size: 13px; padding: 7px 0; position: fixed; top: 0; left: 0; right: 0; z-index: 200; }
  .topbar-inner { flex-direction: row; justify-content: center; gap: 16px; padding: 0 16px; }
  .topbar-contact a:nth-child(3) { display: none; }  /* hide email */
  .topbar-social { display: none; }

  .site-header { position: fixed; top: 35px; left: 0; right: 0; z-index: 199; }
  body { padding-top: calc(35px + 64px); }
  .nav-inner { padding: 0 16px; height: 64px; }
  .logo-img { height: 44px; }
  .logo-name { font-size: 20px; letter-spacing: .04em; }
  .logo-tagline { font-size: 9px; letter-spacing: .12em; }

  .footer-grid { grid-template-columns: 1fr; }
  .section-inner, .rr-shell { padding: 0 20px; }
}

/* Admin bar offset for the fixed mobile header */
@media (max-width: 768px) {
  body.admin-bar .topbar { top: 46px; }
  body.admin-bar .site-header { top: 81px; }
  body.admin-bar { padding-top: calc(35px + 64px); }
}

/* ─── ENQUIRY FAB ─────────────────────────────────────────────────────────
   Sits directly above .wa-fab (bottom 28 + 56 tall + 12 gap = 96). */
.rr-eq-fab {
  position: fixed; bottom: 96px; right: 28px; z-index: 999;
  width: 56px; height: 56px; padding: 0; border: none; cursor: pointer;
  background: var(--blue); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 20px rgba(27,163,216,.4);
  transition: transform .2s, box-shadow .2s, background .2s;
}
.rr-eq-fab:hover { transform: scale(1.1); background: var(--blue-dk); box-shadow: 0 6px 28px rgba(27,163,216,.5); }
.rr-eq-fab:focus-visible { outline: 3px solid var(--warm); outline-offset: 3px; }
.rr-eq-fab-icon { display: flex; }
.rr-eq-fab svg { width: 26px; height: 26px; fill: var(--white); }
.rr-eq-fab-label {
  position: absolute; right: calc(100% + 12px); top: 50%; transform: translateY(-50%);
  white-space: nowrap; background: var(--charcoal); color: var(--white);
  font-family: var(--sans); font-size: 13px; letter-spacing: .04em;
  padding: 7px 12px; border-radius: var(--radius);
  opacity: 0; visibility: hidden; transition: opacity .2s;
  pointer-events: none;
}
.rr-eq-fab:hover .rr-eq-fab-label,
.rr-eq-fab:focus-visible .rr-eq-fab-label { opacity: 1; visibility: visible; }

/* ─── ENQUIRY POPUP ─── */
.rr-eq-overlay {
  position: fixed; inset: 0; z-index: 10000;
  display: flex; align-items: center; justify-content: center;
  padding: 24px 16px; overflow-y: auto;
}
.rr-eq-overlay[hidden] { display: none; }
.rr-eq-backdrop {
  position: fixed; inset: 0; background: rgba(16,30,38,.78);
  opacity: 0; transition: opacity .25s;
}
.rr-eq-overlay.is-open .rr-eq-backdrop { opacity: 1; }
body.rr-eq-open { overflow: hidden; }

/* Two panels side by side: an editorial aside carrying the brand over a photo,
   and the form. `min-width: 0` on the panel is load-bearing — without it the
   flex item refuses to shrink below its content and the form column pushes the
   modal past its max-width instead of scrolling. */
.rr-eq-modal {
  position: relative; width: 100%; max-width: 940px; margin: auto;
  display: flex; align-items: stretch; max-height: calc(100vh - 48px);
  background: var(--white); border-radius: 10px; overflow: hidden;
  box-shadow: 0 30px 90px rgba(16,30,38,.5);
  opacity: 0; transform: translateY(16px) scale(.985);
  transition: opacity .3s, transform .3s;
}

.rr-eq-aside {
  flex: 0 0 40%; position: relative; display: flex; align-items: flex-end;
  background-image: url('assets/img/enquiry-tower.jpg');
  background-size: cover; background-position: center;
}
.rr-eq-aside-inner { width: 100%; padding: 34px 32px 32px; background: linear-gradient(180deg, rgba(17, 30, 37, 0.57) 0%, rgba(28,58,74,.86) 58%, rgba(28,58,74,.97) 100%);}
/* mirrors .section-eyebrow — gold is the theme's accent on dark grounds only */
.rr-eq-eyebrow {
  display: flex; align-items: center; gap: 10px; margin: 0 0 16px;
  font-family: var(--sans); font-size: 11px; font-weight: 600;
  letter-spacing: .2em; text-transform: uppercase; color: var(--warm);
}
.rr-eq-eyebrow::before {
  content: ''; flex-shrink: 0; width: 26px; height: 1px; background: currentColor;
}
.rr-eq-welcome {
  font-family: var(--serif); font-size: 32px; font-weight: 600; line-height: 1.14;
  color: var(--white); margin: 0;
}
.rr-eq-callus {
  display: flex; flex-direction: column; gap: 2px;
  margin: 24px 0 0; padding-top: 18px; border-top: 1px solid rgba(255,255,255,.18);
  font-family: var(--sans); font-size: 13px; line-height: 1.5; color: rgba(255,255,255,.7);
}
/* two classes deep for the same reason every other link rule in this file is —
   the kit ships `.elementor-kit-9 a { color }` (0,1,1) and loads after us, so a
   bare `.rr-eq-callus a` loses the tie and the number comes out kit-blue */
.rr-eq-aside .rr-eq-callus a {
  color: var(--white); font-size: 16px; font-weight: 600; letter-spacing: .02em;
  transition: color .2s;
}
.rr-eq-aside .rr-eq-callus a:hover { color: var(--warm); }

/* The panel is the scroller, not .rr-eq-body — that keeps the heading in the
   flow so it scrolls away with the form instead of staying pinned above it.
   Only the close button stays fixed, and it is absolute to the modal. */
.rr-eq-panel {
  flex: 1 1 auto; min-width: 0; min-height: 0;
  display: flex; flex-direction: column; background: var(--white);
  overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--line) transparent;
}
.rr-eq-panel::-webkit-scrollbar { width: 7px; }
.rr-eq-panel::-webkit-scrollbar-thumb { background: var(--line); border-radius: 4px; }
@supports (height: 100dvh) { .rr-eq-modal { max-height: calc(100dvh - 48px); } }
.rr-eq-overlay.is-open .rr-eq-modal { opacity: 1; transform: none; }

/* the close button now sits over the white form panel, not a dark header */
.rr-eq-close {
  position: absolute; top: 16px; right: 16px; z-index: 3;
  width: 34px; height: 34px; padding: 0; cursor: pointer;
  background: var(--white); border: 1px solid var(--line); border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  transition: background .2s, border-color .2s, transform .25s;
}
.rr-eq-close:hover { background: var(--cream); border-color: var(--blue); transform: rotate(90deg); }
.rr-eq-close:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.rr-eq-close svg { width: 15px; height: 15px; fill: var(--mid); }

.rr-eq-head { flex-shrink: 0; padding: 38px 40px 22px; }
/* Two classes deep on purpose: the Elementor kit ships `.elementor-kit-9 h2`
   at 50px (0,1,1), which outranks a bare one-class rule and silently sized this
   heading at 50px regardless of what was set here. */
.rr-eq-head .rr-eq-heading {
  font-family: var(--serif); font-size: 30px; font-weight: 600; line-height: 1.16;
  color: var(--ink); margin: 0; padding-right: 44px;  /* clear of the close button */
}
.rr-eq-head .rr-eq-sub {
  font-family: var(--sans); font-size: 14px; line-height: 1.55;
  color: var(--mid); margin: 10px 0 0;
}

.rr-eq-body { flex: 0 0 auto; padding: 0 40px 34px; }
.rr-eq-body .wpcf7 { margin: 0; }
.rr-eq-body .wpcf7-form p { margin: 0; }
.rr-eq-body .rr-eq-field { margin: 0 0 20px; }
.rr-eq-body .rr-eq-field br { display: none; }
/* Three classes deep, and the third one is load-bearing: the radio questions are
   `<p class="rr-eq-q">` and `.rr-eq-body .wpcf7-form p { margin: 0 }` above is
   (0,2,1), so a two-class rule here loses the tie and the margin silently does
   nothing — only on the radio questions, since the text-field ones are <label>.
   That is why the options sat flush against their question. */
.rr-eq-body .wpcf7-form .rr-eq-q {
  display: block; font-family: var(--sans); font-size: 14px; font-weight: 600;
  line-height: 1.4; color: var(--ink); margin: 0 0 14px;
}

/* radio groups render as option cards */
.rr-eq-body .wpcf7-radio { display: flex; flex-wrap: wrap; gap: 10px; }
.rr-eq-body .wpcf7-list-item { display: block; margin: 0; }
.rr-eq-body .wpcf7-list-item label {
  display: flex; align-items: center; gap: 14px; cursor: pointer;
  padding: 10px 16px; border: 1px solid var(--line); border-radius: 6px;
  background: var(--white); transition: border-color .2s, background .2s, box-shadow .2s;
}
.rr-eq-body .wpcf7-list-item label:hover { border-color: var(--blue); }
.rr-eq-body .wpcf7-list-item label:has(input:focus-visible) {
  outline: 2px solid var(--blue); outline-offset: 2px;
}
.rr-eq-body .wpcf7-list-item label:has(input:checked) {
  border-color: var(--blue); background: var(--cream);
  box-shadow: inset 0 0 0 1px var(--blue);
}

/* Budget is the one place this form is allowed a flourish. The three brackets
   stack instead of sitting in a row, and each carries a riser that steps up
   with the money — the ordering already means something, so the control shows
   it. CF7 wraps each group in [data-name], which is the only stable hook for
   styling one radio group and not the other. */
.rr-eq-body [data-name="budget"] .wpcf7-radio { flex-direction: column; gap: 8px; }
/* the budget rows keep their taller padding — the riser needs the room the
   Yes/No cards no longer have */
.rr-eq-body [data-name="budget"] .wpcf7-list-item label { position: relative; padding: 12px 16px 12px 48px; }
.rr-eq-body [data-name="budget"] .wpcf7-list-item label::before {
  content: ''; position: absolute; left: 19px; bottom: 13px; width: 11px;
  background: rgba(74,96,112,.35); border-radius: 2px;
  transition: height .25s, background .2s;
}
.rr-eq-body [data-name="budget"] .wpcf7-list-item:nth-child(1) label::before { height: 7px; }
.rr-eq-body [data-name="budget"] .wpcf7-list-item:nth-child(2) label::before { height: 14px; }
.rr-eq-body [data-name="budget"] .wpcf7-list-item:nth-child(3) label::before { height: 21px; }
.rr-eq-body [data-name="budget"] .wpcf7-list-item label:hover::before { background: var(--mid); }
.rr-eq-body [data-name="budget"] .wpcf7-list-item label:has(input:checked)::before { background: var(--blue); }
/* the riser is the checked state here, so the native dot goes — kept in flow
   for the keyboard and screen readers, just not painted */
.rr-eq-body [data-name="budget"] input[type="radio"] {
  position: absolute; left: 16px; opacity: 0; width: 18px; height: 18px;
}
.rr-eq-body .wpcf7-list-item input[type="radio"] {
  width: 18px; height: 18px; margin: 0; flex-shrink: 0;
  accent-color: var(--blue); cursor: pointer;
}
/* 1.4 rather than the body's 1.6: at 1.6 the option cards stood 48px tall
   against 42px inputs, and the row read as two different control sizes */
.rr-eq-body .wpcf7-list-item-label {
  font-family: var(--sans); font-size: 14px; font-weight: 500; line-height: 1.4;
  color: var(--mid);
}
.rr-eq-body .wpcf7-list-item label:has(input:checked) .wpcf7-list-item-label { color: var(--ink); }

/* text inputs */
.rr-eq-body input.wpcf7-text,
.rr-eq-body input.wpcf7-tel {
  width: 100%; padding: 9px 15px; line-height: 1.5;
  border: 1px solid var(--line); border-radius: 6px; background: var(--cream);
  font-family: var(--sans); font-size: 14.5px; color: var(--ink);
  transition: border-color .2s, background .2s, box-shadow .2s;
}
.rr-eq-body input.wpcf7-text:focus,
.rr-eq-body input.wpcf7-tel:focus {
  outline: none; border-color: var(--blue); background: var(--white);
  box-shadow: 0 0 0 3px rgba(27,163,216,.15);
}

/* submit */
.rr-eq-body .rr-eq-actions { margin: 26px 0 0; }
.rr-eq-body input.wpcf7-submit {
  width: 100%; border: none; cursor: pointer;
  background: var(--blue); color: var(--white);
  font-family: var(--sans); font-size: 14px; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase;
  padding: 16px 24px; border-radius: 6px;
  transition: background .2s, transform .15s, box-shadow .2s;
}
.rr-eq-body input.wpcf7-submit:hover {
  background: var(--blue-dk); transform: translateY(-1px);
  box-shadow: 0 8px 22px rgba(27,163,216,.32);
}
.rr-eq-body .wpcf7-spinner { margin: 0 auto; display: block; }

/* CF7 validation output */
.rr-eq-body .wpcf7-not-valid-tip {
  font-family: var(--sans); font-size: 12.5px; color: var(--red); margin-top: 6px;
}
.rr-eq-body .wpcf7-response-output {
  font-family: var(--sans); font-size: 14px; line-height: 1.5;
  margin: 20px 0 0; padding: 12px 14px; border-radius: var(--radius);
  border: 1px solid var(--line); color: var(--ink);
}
.rr-eq-body .wpcf7 form.sent .wpcf7-response-output { border-color: #2E9E5B; color: #1E6B3D; }
.rr-eq-body .wpcf7 form.invalid .wpcf7-response-output,
.rr-eq-body .wpcf7 form.failed .wpcf7-response-output { border-color: var(--red); color: var(--red); }

/* below the split's comfortable width the aside becomes a banner: the photo and
   the brand line survive, the phone number moves out of the way */
@media (max-width: 860px) {
  .rr-eq-modal { flex-direction: column; max-width: 540px; }
  .rr-eq-aside {
    flex: 0 0 auto; min-height: 168px;
    background-image:
      linear-gradient(180deg, rgba(28,58,74,.3) 0%, rgba(28,58,74,.92) 100%),
      url('assets/img/enquiry-tower.jpg');
    background-position: center 35%;
  }
  .rr-eq-aside-inner { padding: 22px 26px 20px; }
  .rr-eq-welcome { font-size: 25px; }
  .rr-eq-callus { display: none; }
  .rr-eq-head { padding: 26px 26px 14px; }
  .rr-eq-head .rr-eq-heading { font-size: 24px; }
  .rr-eq-body { padding: 6px 26px 28px; }
}

@media (max-width: 600px) {
  .rr-eq-fab { width: 50px; height: 50px; right: 18px; bottom: 82px; }
  .rr-eq-fab svg { width: 23px; height: 23px; }
  .rr-eq-fab-label { display: none; }
  .wa-fab { right: 18px; bottom: 22px; }

  .rr-eq-overlay { padding: 0; align-items: flex-start; }
  .rr-eq-modal { border-radius: 0; min-height: 100%; max-height: none; }
  .rr-eq-aside { min-height: 340px; }
  .rr-eq-aside-inner { padding: 18px 20px 18px; }
  .rr-eq-welcome { font-size: 22px; }
  .rr-eq-head { padding: 22px 20px 14px; }
  .rr-eq-head .rr-eq-heading { font-size: 22px; }
  .rr-eq-body { padding: 6px 20px 28px; }
  .rr-eq-body .wpcf7-radio { flex-direction: column; }
  .rr-eq-body .wpcf7-list-item label { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .rr-eq-backdrop, .rr-eq-modal, .rr-eq-fab, .rr-eq-close,
  .rr-eq-body input.wpcf7-submit,
  .rr-eq-body [data-name="budget"] .wpcf7-list-item label::before { transition: none; }
  .rr-eq-close:hover { transform: none; }
  .rr-eq-body input.wpcf7-submit:hover { transform: none; }
}

/* ── Project card ribbon ("Few Units Left") ─────────────── */
.e-con.rr-project-card { position: relative; }
.e-con.rr-project-card > .elementor-widget.rr-ribbon {
  position: absolute; top: 26px; right: -52px; width: 210px; margin: 0;
  transform: rotate(45deg); z-index: 3; pointer-events: none;
}
.rr-ribbon .elementor-heading-title {
  display: block; padding: 7px 0; background: var(--red); color: var(--white);
  font-family: var(--sans); font-size: 11px; font-weight: 700; line-height: 1.2;
  letter-spacing: .14em; text-transform: uppercase; text-align: center;
  box-shadow: 0 3px 10px rgba(26,22,18,.3);
}

/* Enquiry popup — consent line above the submit button */
.rr-eq-disclaimer {
	margin: 4px 0 14px;
	font-size: 12px;
	line-height: 1.5;
	color: var(--mid, #4A6070);
}
