/* gc-design.css - GCPN Stage 4 DESKTOP parity layer (15 Oct 2026, Bryan's side, dev site).
   Loads after lane A's gc-bundle.css, gc-live.css and gc-stage3.css (enqueued by mu-plugin gcpn-design.php) and before gc-mobile.css.
   Every rule undoes something Divi adds that live iLaunch never had, or tunes the TeX Gyre Adventor stand-in for live's unlicensed
   ITC Avant Garde, so that 1250px and up is a copy of live. Adapted from the kit's ilaunch-divi-parity.template.css (copy in
   build/design/) for this older layout: fixed left #sidebar, no #header, no booking bar. Live is content-box (no border-box rule
   in its general.css); lane A's gc-stage3.css already restores content-box inside #sidebar, #container and the footer wrap. */

/* 0. Palette (the AA values are used below 1250 only, by gc-mobile.css). Live: blue #26388e, green #75ad26, menu rule #46569f. */
body.gc-site { --gc-blue: #26388e; --gc-green: #75ad26; --gc-green-dark: #435a24; --gc-rule: #46569f;
  --gc-green-aa: #4a7417;      /* green as text on white 5.5:1, on #f5f5f5 5.1:1 (live #75ad26 is 2.7:1) */
  --gc-green-bg: #3f6513;      /* green behind white text 6.8:1 (menu active, buttons; live 2.7:1) */
  --gc-green-bg-hover: #2c470d;/* the hover, focus and pressed state of that green, white text 10.4:1 */
  --gc-phone-aa: #c9cee6;      /* sidebar phone number on the blue 6.6:1 (live #939cc7 is 3.8:1) */
  --gc-footer-link: #b8b8b8;   /* footer menu links on #222 8.0:1 (live #777 is 3.6:1) */
  --gc-muted-aa: #666666;      /* small grey text on white 5.7:1 (live #888 3.5:1, #999 2.8:1) */
  --gc-on-grey-aa: #595959; }  /* grey text on #f5f5f5 6.4:1, on #eaeaea 5.8:1 */

/* 1. Divi's body weight (500) and greyscale smoothing; live is 400 with the browser's own smoothing. */
body.gc-site { font-weight: 400; -webkit-font-smoothing: auto; -moz-osx-font-smoothing: auto; }

/* 2. Browser-default spacing live relies on, which Divi's reset removes (p padding-bottom 1em; lists 23px bottom padding and a
      26px line height). :where() keeps these below every live rule that sets its own value. */
body.gc-site #page-container :where(p) { padding-bottom: 0; }
body.gc-site :where(.et-l, #main-content) :where(ul, ol) { padding: 0 0 0 40px; margin: 1em 0; line-height: inherit; }
body.gc-site :where(.et-l, #main-content) :is(ul, ol) :is(ul, ol) { margin-top: 0; margin-bottom: 0; }
body.gc-site :where(.et-l, #main-content) ul ul { list-style-type: circle; }
body.gc-site :where(.et-l, #main-content) ul ul ul { list-style-type: square; }
body.gc-site #page-container :where(#sidebar, #gc-footer-wrap) :where(ul, ol) { line-height: inherit; }
body.gc-site :where(.et-l, #main-content) blockquote { border-left: 0; }

/* 3. Divi's .container (80% wide, max 1080px, centred) is not live's: live's .container has no rule, so the footer row spans the
      column (footer links at x 285, not 365). */
body.gc-site #page-container .container { width: auto; max-width: none; margin: 0; position: static; }
html body.gc-site #main-content .container { padding-top: 0; }
body.gc-site #main-content .container::before { display: none; }

/* 4. Divi styles #sidebar as its blog widget column on posts (padding-left 30px, padding-bottom 28px), which moved live's menu
      column 30px right on every news post. */
body.gc-site #page-container #sidebar { padding: 0; border: 0; }

/* 5. Keyboard focus ring: Divi's reset removes it; live shows the browser's own ring. Restore it everywhere (same look as live). */
/*    Live's links carry "transition: all 1s", which also faded the ring's width in from 0 over a second (a keyboard user saw no ring at first):
      the width is set at rest too (no ring shows while the style is none), so only the style changes on focus and the ring appears at once. */
body.gc-site :is(a, button, input, select, textarea, [tabindex]) { outline-width: 1px; }
body.gc-site :is(a, button, input, select, textarea, [tabindex]):focus-visible { outline: -webkit-focus-ring-color auto 1px; outline: auto 1px; }

/* 6. Phone menu button (added to the sidebar by gcpn-design.php for the phone design): never shown at desktop widths. */
body.gc-site #page-container .ils-menu-toggle { display: none; }

/* 7. The menu's drop-down (Properties for Sale) also opens on keyboard focus (:focus-within) and on a tap (class ils-sub-open, gcpn-design.php).
      A tap is a hover on a touch screen, so it copies live's li:hover colours; keyboard focus only opens the list and keeps live's rest colours
      (white on the blue, 10.3:1) with the focus ring, because live's own focus state is its rest look (link_contrast.js compares the two). */
body.gc-site #page-container #menu li:focus-within ul, body.gc-site #page-container #menu li.ils-sub-open ul { display: block; }
body.gc-site #page-container #menu li.ils-sub-open a:link, body.gc-site #page-container #menu li.ils-sub-open a:active, body.gc-site #page-container #menu li.ils-sub-open a:visited { background: #75ad26; border-color: #435a24; }
body.gc-site #page-container #menu li.ils-sub-open a.parent:link, body.gc-site #page-container #menu li.ils-sub-open a.parent:active, body.gc-site #page-container #menu li.ils-sub-open a.parent:visited { background: #75ad26 219px center no-repeat url(/wp-content/uploads/ilaunch/skin/icon-arrow-right.png); }
body.gc-site #page-container #menu li.ils-sub-open ul a:link, body.gc-site #page-container #menu li.ils-sub-open ul a:active, body.gc-site #page-container #menu li.ils-sub-open ul a:visited { background: none; }

/* 8. Phone numbers are explicit tel: links (lane A chrome and pages): the colour of the surrounding text, no underline, in every
      state and at every width (live shows plain text). */
body.gc-site #page-container a.tel-link, body.gc-site #page-container a.tel-link:link, body.gc-site #page-container a.tel-link:visited,
body.gc-site #page-container a.tel-link:hover, body.gc-site #page-container a.tel-link:active, body.gc-site #page-container a.tel-link:focus,
body.gc-site a[x-apple-data-detectors] { color: inherit !important; text-decoration: none !important; font: inherit; transition: none; }

/* 9. Fonts. TeX Gyre Adventor stands in for live's unlicensed ITC Avant Garde (Bryan's rule, 12 Oct 2026; faces in lane A's gc-bundle.css).
      Measured on live's own text (build/design/tools/fontmeasure*_gc.js, canvas widths against live's font files):
      * Book was 0.8% narrower than live on the 34 /news strings (3,179 characters), so one news paragraph lost a line: size-adjust 100.4% -> 101.2%.
      * live's two CONDENSED faces have no free equivalent. Lane A drew them at 83.6% and 86% so the widths fit, which made the menu, the
        lists and the buttons visibly smaller than live (cap height 10px against live's 12px at 15px). Here they are drawn at 92% (cap 11px)
        and tightened with letter-spacing so the summed widths equal live's again: DemiCondensed -0.030em, MediumCondensed -0.038em (-0.046em on the canvas sample, -0.038em on the property lists, the longest condensed text).
      The line-metric overrides are rescaled by the same factor so every line box keeps lane A's height. Later @font-face rules with the same
      descriptors replace the earlier ones. What is left (glyph shapes, a 1px shorter cap height) is DELIBERATE: build/design-diff.md. */
@font-face { font-family: 'AdventorBook'; src: url('/wp-content/uploads/ilaunch/theme/texgyreadventor-regular.woff2') format('woff2'); font-weight: normal; font-style: normal; size-adjust: 101.2%; ascent-override: 73.1197%; descent-override: 25.6917%; line-gap-override: 19.7628%; }
@font-face { font-family: 'AdventorBook'; src: url('/wp-content/uploads/ilaunch/theme/texgyreadventor-italic.woff2') format('woff2'); font-weight: normal; font-style: italic; size-adjust: 101.2%; ascent-override: 73.1197%; descent-override: 25.6917%; line-gap-override: 19.7628%; }
@font-face { font-family: 'AdventorMediumCondensed'; src: url('/wp-content/uploads/ilaunch/theme/texgyreadventor-regular.woff2') format('woff2'); font-weight: normal; font-style: normal; size-adjust: 92%; ascent-override: 106.8393%; descent-override: 31.2602%; line-gap-override: 0%; }
@font-face { font-family: 'AdventorMediumCondensed'; src: url('/wp-content/uploads/ilaunch/theme/texgyreadventor-italic.woff2') format('woff2'); font-weight: normal; font-style: italic; size-adjust: 92%; ascent-override: 106.8393%; descent-override: 31.2602%; line-gap-override: 0%; }
@font-face { font-family: 'AdventorDemiCondensed'; src: url('/wp-content/uploads/ilaunch/theme/texgyreadventor-bold.woff2') format('woff2'); font-weight: normal; font-style: normal; size-adjust: 92%; ascent-override: 108.4812%; descent-override: 31.1545%; line-gap-override: 0%; }
@font-face { font-family: 'AdventorDemiCondensed'; src: url('/wp-content/uploads/ilaunch/theme/texgyreadventor-bolditalic.woff2') format('woff2'); font-weight: normal; font-style: italic; size-adjust: 92%; ascent-override: 108.4812%; descent-override: 31.1545%; line-gap-override: 0%; }
/* the same selectors live gives the condensed families (gc-live.css), with the tracking that restores live's widths */
body.gc-site #page-container input.button, body.gc-site #page-container a.button, body.gc-site #page-container a.icon-button,
body.gc-site #page-container #menu, body.gc-site #page-container div.top { letter-spacing: -0.03em; }
body.gc-site #page-container .phone, body.gc-site #page-container .innercontent ul, body.gc-site #page-container .innersplitcontent ul,
body.gc-site #page-container .menu-tools li, body.gc-site #page-container .menu-tabs li { letter-spacing: -0.038em; }
/* descendants that live sets back to a non-condensed face keep normal tracking */
body.gc-site #page-container .innersplitcontent .property-features li, body.gc-site #page-container .innersplitcontent .menu-tools li:first-child,
body.gc-site #page-container .menu-tabs li.heading, body.gc-site #page-container :is(.innercontent, .innersplitcontent) ul [style*="font-family"] { letter-spacing: normal; }

/* 10. Forms: the Divi contact form (contact page; the enquiry form on every property page, class gc-property-form) dressed as live's
       table.form, measured by rect dump on live (build/design/tools/rects_gc.js): each field a 42px box with a 1px #c2c2c2 border, the
       label in a 161px cell (10px padding, green star at 13px, 14px #888 on a 40px line), the white field filling the rest (40px tall,
       15px #666, no side padding), rows 10px apart, the message box 112px (contact) or 130px (property), a "Captcha" cell holding Divi's
       maths question where live shows its image code (DELIBERATE, Stage 3), "Required fields" beside a 116 x 46 green SUBMIT. Live's table
       is 680px wide on the contact page and the full 657px column on a property page. 1250px and up; gc-mobile.css takes over below. */
/* lane A's content-box rule for live's markup (#container *) out-ranks its own border-box rule for the Divi form; the form is border-box */
body.gc-site #page-container #container .et_pb_contact_form_container, body.gc-site #page-container #container .et_pb_contact_form_container *,
body.gc-site #page-container #container .et_pb_contact_form_container *::before, body.gc-site #page-container #container .et_pb_contact_form_container *::after { box-sizing: border-box; }
body.gc-site #page-container .gc-contact-form { margin: 20px 0; padding: 0; background: none; max-width: none; width: auto; }
body.gc-site #page-container .gc-contact-form .et_pb_contact { padding: 0; margin: 0; }
body.gc-site #page-container .gc-contact-form form.et_pb_contact_form { display: block; margin: 0; padding: 10px 0 0; background: none; }
body.gc-site #page-container .gc-contact-form p.et_pb_contact_field,
body.gc-site #page-container .gc-contact-form .et_pb_contact_right p.clearfix {
  display: flex; align-items: flex-start; float: none; clear: none; width: 680px; max-width: 100%; margin: 0 0 10px; padding: 0;
  border: 1px solid #c2c2c2; background: none; box-sizing: border-box; }
body.gc-site #page-container .gc-property-form p.et_pb_contact_field,
body.gc-site #page-container .gc-property-form .et_pb_contact_right p.clearfix { width: auto; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_form_label,
body.gc-site #page-container .gc-contact-form .et_pb_contact_right p.clearfix::before {
  display: block; flex: 0 0 140px; width: 140px; margin: 0 10px; padding: 0 0 0 12px; box-sizing: border-box;
  font: 14px/40px 'AdventorBook', Arial, Helvetica, sans-serif; color: #888888; text-align: left;
  background: transparent url(/wp-content/uploads/ilaunch/skin/icon-required.png) no-repeat left 13px; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_field input.input,
body.gc-site #page-container .gc-contact-form .et_pb_contact_field textarea.input {
  flex: 1 1 auto; min-width: 0; width: auto; height: 40px; margin: 0; padding: 11px 0; border: 0; border-radius: 0; background: #ffffff;
  font: 15px/normal 'AdventorBook', Arial, Helvetica, sans-serif; color: #666666; box-shadow: none; letter-spacing: normal; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_field textarea.input { display: block; height: 112px; min-height: 0; }
body.gc-site #page-container .gc-property-form .et_pb_contact_field textarea.input { height: 130px; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_field .input::placeholder { color: transparent; opacity: 0; }
/* captcha row: the cell label, then Divi's question where live has its image, then the answer box (live's 62 x 26 captcha box) */
body.gc-site #page-container .gc-contact-form .et_contact_bottom_container { display: block; float: none; position: relative; margin: 0; padding: 0 0 10px; text-align: left; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_right { display: block; float: none; width: auto; margin: 0; padding: 0; text-align: left; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_right p.clearfix { min-height: 62px; font: 15px/36px 'AdventorBook', Arial, Helvetica, sans-serif; color: #666666; }
body.gc-site #page-container .gc-property-form .et_pb_contact_right p.clearfix { min-height: 76px; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_right p.clearfix::before { content: "Captcha"; visibility: visible; position: static; height: auto; }
body.gc-site #page-container .gc-contact-form:not(.gc-property-form) .et_pb_contact_right p.clearfix::before { background-image: none; padding-left: 0; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_right p.clearfix::after { display: none; }
body.gc-site #page-container .gc-contact-form .et_pb_contact_captcha_question { margin: 0 6px 0 0; font: 15px/36px 'AdventorBook', Arial, Helvetica, sans-serif; color: #666666; }
body.gc-site #page-container .gc-contact-form input.et_pb_contact_captcha {
  flex: 0 0 auto; width: 62px; max-width: none; min-width: 62px; height: 26px; margin: 5px 0 5px 10px; padding: 3px 10px; border: 1px solid #c2c2c2; border-radius: 0; background: #ffffff;
  font: 15px/normal 'AdventorBook', Arial, Helvetica, sans-serif; color: #666666; box-sizing: border-box; }
/* "Required fields" (live's em.required in the left cell) beside the SUBMIT button (live's input.button in the right cell) */
body.gc-site #page-container .gc-contact-form .et_contact_bottom_container::before {
  content: "Required fields"; position: absolute; left: 10px; top: 72px; width: 141px; padding-left: 12px; box-sizing: border-box;
  font: 11px/40px 'AdventorBook', Arial, Helvetica, sans-serif; color: #888888; background: url(/wp-content/uploads/ilaunch/skin/icon-required.png) no-repeat left 13px; }
body.gc-site #page-container .gc-property-form .et_contact_bottom_container::before { top: 86px; }
body #page-container .et_pb_section .gc-contact-form.et_pb_contact_form_container.et_pb_module .et_pb_button.et_pb_contact_submit {
  display: block; float: none; width: 116px; height: 46px; margin: 0 0 0 161px; padding: 11px 25px !important; border: 2px solid #75ad26 !important; border-radius: 0 !important;
  background: #75ad26 !important; color: #ffffff !important; font: 20px/20px 'AdventorDemiCondensed', Arial, Helvetica, sans-serif !important; letter-spacing: -0.03em !important;
  text-transform: uppercase; text-align: center; box-sizing: border-box; cursor: pointer; transition: all 1s; }
body #page-container .et_pb_section .gc-contact-form.et_pb_contact_form_container.et_pb_module .et_pb_button.et_pb_contact_submit:hover { background: #ffffff !important; color: #75ad26 !important; padding: 11px 25px !important; }
body #page-container .et_pb_section .gc-contact-form.et_pb_contact_form_container.et_pb_module .et_pb_button.et_pb_contact_submit::after { display: none !important; }
/* Divi's reply line after a send or a refused send, dressed as live's .notification and .error boxes */
body.gc-site #page-container .gc-contact-form .et-pb-contact-message:not(:empty) { margin: 10px 0; padding: 5px 20px 5px 30px; border: 1px solid #6dc361; color: #6b6b6b;
  background: #f4f4f4 7px 7px no-repeat url(/wp-content/uploads/ilaunch/skin/icon-notification.png); font: 14px/24px 'AdventorBook', Arial, Helvetica, sans-serif; }
/* 3.18 B-1: a refused send (Divi's browser check lists the missing fields in a <ul>; its server check answers p.et_pb_contact_error_text) takes
   live's red .error look. ":has(ul)" alone only adds an element's weight (0,0,1) and lost to ":not(:empty)" (0,1,0), so the error rule
   repeats ":not(:empty)" and adds a class-weight :is(). The missing-field list inside the box drops the content list bullets and indent. */
body.gc-site #page-container .gc-contact-form .et-pb-contact-message:not(:empty):is(:has(ul), :has(.et_pb_contact_error_text)) { border-color: #ea6b58; background-image: url(/wp-content/uploads/ilaunch/skin/icon-error.png); }
body.gc-site #page-container .gc-contact-form .et-pb-contact-message p, body.gc-site #page-container .gc-contact-form .et-pb-contact-message ul { margin: 0; padding: 0; list-style: none; font: inherit; color: inherit; letter-spacing: normal; }
body.gc-site #page-container .gc-contact-form .et-pb-contact-message li { margin: 0; padding: 0; background: none; font: inherit; line-height: inherit; letter-spacing: normal; }

/* 11. Small Divi leftovers found by the 1440 pairs: Divi's .et_pb_column { min-height: 1px } made the Theme Builder header (which only
       holds the fixed #sidebar) 1px tall, so every page sat 1px low; Divi's h5/h6 (16px on a 1em line) shrank live's empty <h5>&nbsp;</h5>
       spacer on /about-us (live: browser default 0.83em on the inherited 24px line); the listings' tools bar line box came out 2px
       taller with the stand-in font's metrics (live 51px). */
body.gc-site .et-l--header .et_pb_column { min-height: 0; }
body.gc-site #page-container :where(h5) { font-size: 0.83em; line-height: inherit; color: inherit; padding-bottom: 0; }
body.gc-site #page-container :where(h6) { font-size: 0.67em; line-height: inherit; color: inherit; padding-bottom: 0; }
@media (min-width: 1250px) { body.gc-site #page-container #content > .menu-tools { height: 51px; } }

/* 12. Live's search page prints its #footer INSIDE #content (an unclosed div in the iLaunch template), so #content's 420px minimum height
       holds the footer too and the footer sits straight under the search box (y 308 at 1440). Lane A's markup closes #content properly, so
       the same minimum would push the footer 112px lower; it is released on this page only (the other pages are taller than 420px). */
body.gc-site.page-id-2409 #page-container #content { min-height: 0; }

/* 13. The photo pop-up (fancybox) is appended to <body>, outside #page-container, so the port's "#page-container .fancy-bg" rule never matched
       its eight shadow pieces: they stacked as full-width static blocks and drew grey stripes over the frame edge and the page below.
       Live's rule, scoped to the body (rect dump: pieces now equal live's at 1440, 768 and 390). */
body.gc-site .fancy-bg { position: absolute; padding: 0; margin: 0; border: 0; width: 20px; height: 20px; z-index: 1001; }

/* 14. The property map's Get Directions box is lane B's addition (live hides it: its map is blank), so it has no live colour to match and must be
       AA at every width: live's link green (2.7:1 on white) becomes the AA green. */
body.gc-site #page-container .map-wrapper .map-info a:link, body.gc-site #page-container .map-wrapper .map-info a:visited,
body.gc-site #page-container .map-wrapper .map-info a:hover, body.gc-site #page-container .map-wrapper .map-info a:active { color: var(--gc-green-aa); }

/* 15. 3.18 B-2: lane A's table reset (gc-stage3.css, :where(td, th) { padding: 0 }) also took away the browser's default 1px cell padding,
       which live keeps on a table with no cellpadding attribute (post 408's table: rows 26px on live, 24px without it). Put the default back
       on those tables only; a table with cellpadding="0" (contact) stays 0, and live's own .form cell rules still win (more specific). */
body.gc-site #page-container :where(table:not([cellpadding])) :where(td, th) { padding: 1px; }

/* 16. 3.18 B-3: on a property page lane B prints the bed, bath and garage items as "</li><li>" with no white space between them (58 of 59
       pages; the 59th has no such row), while live and the listing pages keep a space, which live draws 4px wide between the inline-block
       items. The space is put back as 4px more right margin on every item but the last (bath 66px and garage 132px right of bed, as live). */
body.gc-site #page-container .innersplitcontent .property-details li:not(:last-child) { margin-right: 24px !important; }

/* 17. 3.18 B-5: wraps the stand-in font caused at 1250 and up, measured against live on the same Chrome (build/fix318-look/census/).
       * Listing tabs: "COMMERCIAL PROPERTIES" dropped under the heading at 1250 to 1252 (+43px); the three tabs ran 13.1px wider than live's.
         -0.05em brings each tab within 2.5px of live's text width (summed 395.9 live, 399.6 dev) and the tab stays on the row.
       * Content bullet lists (.innercontent ul, live's condensed face): 3.2% wider than live; -0.05em brings 19 lists to 99.97% of live's
         width and the /network-assistance "For Non-Residents" item back to live's 3 lines. Not the right-hand panels (.innersplitcontent): their
         Book text inherits the tracking and the news panel then lost lines.
       * Two Book paragraphs that ran 0.7 and 0.9% wider than live and wrapped to one extra line (/network-assistance "The rate of stamp duty",
         /foreign-investors "Under the Freehold Title"): -0.008em, found by the anchor of the heading above them.
       What remains (glyph shapes, single wraps at other widths) is the font DELIBERATE in build/design-diff.md. Below 1250 is unchanged. */
@media (min-width: 1250px) {
  body.gc-site #page-container .menu-tabs li { letter-spacing: -0.05em; }
  body.gc-site #page-container .menu-tabs li.heading { letter-spacing: normal; }
  body.gc-site #page-container .innercontent ul { letter-spacing: -0.05em; }
  /* not the listings' bed, bath and garage rows: the space between those items is drawn in the list's tracking, so it would shrink and move
     the bath and garage icons up to 2px left of live (design_diff, 37 items) */
  body.gc-site #page-container .innercontent ul.property-details { letter-spacing: -0.038em; }
  body.gc-site #page-container .innercontent h2:has(> a[name="stampduty"]) + p + p,
  body.gc-site #page-container .innercontent h2:has(> a[name="freeholdtitle"]) + p { letter-spacing: -0.008em; }
}
