/* ad-design.css: Asset Direct (#32) Stage 4 desktop layer, loaded after ad-s3.css and before ad-mobile.css.
   Every rule here undoes a Divi default live never had, or dresses a Divi module as live's markup. Measured against live with
   build/design/tools/design_pairs_ad.js + the kit's design_diff.py at 1440 (15 Oct 2026). */

/* 1. Divi sets body font-weight 500; live is 400 (every element inherited 500 on the baseline pairs) */
body.ad-site { font-weight: 400; }

/* 2. The left column is a float that escapes the zero-height Theme Builder header; the page's Divi wrappers (positioned,
      transparent) were painted over it, so its links and the currency widget could not be clicked on non-blog pages.
      Positioning the column puts it above them on every page type; nothing moves. Below 1024 .left is display: contents
      (ad-mobile.css), where position and z-index do not apply. */
body.ad-site #page-container .et-l--header .left { position: relative; z-index: 2; }

/* 3. Live's content images keep their own size (home: a 740px photo in the 690px column overflows by 16px). Divi's
      img { max-width: 100% } squeezed it to 690 x 500. From 1170 up live's look; below 1170 ad-mobile.css caps images. */
@media (min-width: 1170px) {
  body.ad-site #page-container #content img { max-width: none; }
}

/* 4. Contact and unsubscribe forms: the Divi contact module (classes ad-form ad-form-contact / ad-form-unsubscribe) dressed as
      live's table.form from 1024 up (live's layout band): a 637px box with a 1px black border, 170px black label cells
      (14/20 white, 10px 15px, a #282828 rule under each), field cells on the page ground (padding 10 50 10 15, a black rule
      under each, the gold star at 420px 12px on required rows), white 399 x 22 inputs (12px #666, 3px 6px, 1px #adadad,
      radius 3), a 399 x 78 message box, the captcha row 83px tall, the grey gradient Submit (66 x 30) and "Required fields"
      on the right. The p and the bottom containers are display: contents so label, field and button are grid items; their
      ::before pseudo-elements draw the cells. Divi's maths captcha replaces live's picture captcha (recorded difference). */
body.ad-site #page-container .ad-form .et-pb-contact-message:empty { display: none; }
body.ad-site #page-container .ad-form .et_pb_contact_field .input::placeholder { color: transparent; }
@media (min-width: 1024px) {
  body.ad-site #page-container .ad-form { margin: 15px 0; padding: 0; background: none; }
  body.ad-site #page-container .ad-form .et_pb_contact { padding: 0; }
  body.ad-site #page-container .ad-form form.et_pb_contact_form { display: grid; grid-template-columns: 170px 465px; width: 637px; box-sizing: border-box; margin: 0; padding: 0; border: 1px solid #000000; border-bottom: 0; }
  /* (3.18 B-1: no bottom border on the box. Live's table collapses its border into the last row's cell borders, one 1px line:
     #282828 under the label cell, black under the field cell. The last row's two cells below draw exactly that.) */
  body.ad-site #page-container .ad-form p.et_pb_contact_field, body.ad-site #page-container .ad-form .et_contact_bottom_container,
  body.ad-site #page-container .ad-form .et_pb_contact_right { display: contents; }
  body.ad-site #page-container .ad-form .et_pb_contact_form_label { display: block; grid-column: 1; margin: 0; padding: 10px 15px; background: #000000; border-bottom: 1px solid #282828;
    font: 14px/20px 'HelveticaNeue', Arial, Helvetica, sans-serif; color: #ffffff; text-align: left; }
  body.ad-site #page-container .ad-form p.et_pb_contact_field::before { content: ""; display: block; grid-column: 2; border-bottom: 1px solid #000000; }
  body.ad-site #page-container .ad-form p.et_pb_contact_field:has(> [data-required_mark="required"])::before { background: url(/wp-content/uploads/ilaunch/skin/images/icon-required.png) no-repeat 420px 12px; }
  body.ad-site #page-container .ad-form .et_pb_contact_field .input {
    grid-column: 2; align-self: start; justify-self: start; position: relative; z-index: 1; box-sizing: border-box; width: 399px; height: 22px; margin: 10px 50px 11px 15px; padding: 3px 6px;
    border: 1px solid #adadad; border-radius: 3px; background: #ffffff; box-shadow: none; font: 12px/14px 'HelveticaNeue', Arial, Helvetica, sans-serif; color: #666666; }
  body.ad-site #page-container .ad-form .et_pb_contact_field textarea.input { height: 78px; min-height: 0; resize: both; }
  body.ad-site #page-container .ad-form .et_pb_contact_field_0 > * { grid-row: 1; }
  body.ad-site #page-container .ad-form .et_pb_contact_field_0::before { grid-row: 1; }
  body.ad-site #page-container .ad-form .et_pb_contact_field_1 > *, body.ad-site #page-container .ad-form .et_pb_contact_field_1::before { grid-row: 2; }
  body.ad-site #page-container .ad-form .et_pb_contact_field_2 > *, body.ad-site #page-container .ad-form .et_pb_contact_field_2::before { grid-row: 3; }
  body.ad-site #page-container .ad-form .et_pb_contact_field_3 > *, body.ad-site #page-container .ad-form .et_pb_contact_field_3::before { grid-row: 4; }
  /* captcha row (contact only): a black label cell and the field cell */
  body.ad-site #page-container .ad-form .et_pb_contact_right::before { content: ""; display: block; grid-column: 1; grid-row: 5; background: #000000; border-bottom: 1px solid #282828; }
  body.ad-site #page-container .ad-form .et_pb_contact_right p.clearfix { grid-column: 2; grid-row: 5; box-sizing: border-box; min-height: 83px; margin: 0; padding: 10px 50px 10px 15px; border-bottom: 1px solid #000000;
    float: none; text-align: left; font: 14px/26px 'HelveticaNeue', Arial, Helvetica, sans-serif; color: #979797; }
  body.ad-site #page-container .ad-form .et_pb_contact_right p.clearfix::after { display: none; }
  body.ad-site #page-container .ad-form .et_pb_contact_captcha_question { font: inherit; color: inherit; }
  body.ad-site #page-container .ad-form input.et_pb_contact_captcha { box-sizing: border-box; display: inline-block; width: 84px; max-width: none; height: 22px; margin: 0 0 0 10px; padding: 3px 6px; vertical-align: middle;
    border: 1px solid #adadad; border-radius: 3px; background: #ffffff; font: 12px/14px 'HelveticaNeue', Arial, Helvetica, sans-serif; color: #666666; }
  /* submit row: the black label cell, the field cell (star on contact), the button and "Required fields" */
  body.ad-site #page-container .ad-form .et_contact_bottom_container::before { content: ""; display: block; grid-column: 1; grid-row: 6; background: #000000; border-bottom: 1px solid #282828; }
  body.ad-site #page-container .ad-form .et_contact_bottom_container::after { content: ""; display: block; grid-column: 2; grid-row: 6; border-bottom: 1px solid #000000;
    background: url(/wp-content/uploads/ilaunch/skin/images/icon-required.png) no-repeat 420px 12px; visibility: visible; height: auto; }
  body.ad-site #page-container .ad-form form.et_pb_contact_form .et_pb_contact_submit.et_pb_button {
    grid-column: 2; grid-row: 6; align-self: start; justify-self: start; position: relative; z-index: 1; box-sizing: border-box; display: inline-block; width: auto; height: 30px;
    margin: 10px 0 11px 15px !important; padding: 8px 12px !important; border: 1px solid #adadad !important; border-radius: 3px !important;
    background: #f9f9f9 linear-gradient(to bottom, #f9f9f9 0%, #e9e9e9 100%) !important; box-shadow: inset 0 1px #ffffff;
    font: 12px/12px 'HelveticaNeue-Bold', Arial, Helvetica, sans-serif !important; color: #717171 !important; text-shadow: 0 1px #ffffff; letter-spacing: 0 !important; text-transform: none; cursor: pointer; transition: none; }
  body.ad-site #page-container .ad-form form.et_pb_contact_form .et_pb_contact_submit.et_pb_button:hover { background: #adadad !important; color: #000000 !important; text-shadow: none; padding: 8px 12px !important; border: 1px solid #adadad !important; }
  body.ad-site #page-container .ad-form form.et_pb_contact_form .et_pb_contact_submit.et_pb_button::after, body.ad-site #page-container .ad-form form.et_pb_contact_form .et_pb_contact_submit.et_pb_button::before { display: none !important; }
  body.ad-site #page-container .ad-form-contact form.et_pb_contact_form::after { content: "Required fields"; display: block; visibility: visible; height: auto; clear: none; grid-column: 2; grid-row: 6; justify-self: end; align-self: start;
    position: relative; z-index: 1; margin: 10px 50px 0 0; font: 11px/22px 'HelveticaNeue', Arial, Helvetica, sans-serif; color: #979797; }
  /* unsubscribe: one field, then the submit row (row 2), no captcha, no star on the submit row, no note */
  body.ad-site #page-container .ad-form-unsubscribe .et_contact_bottom_container::before, body.ad-site #page-container .ad-form-unsubscribe .et_contact_bottom_container::after,
  body.ad-site #page-container .ad-form-unsubscribe form.et_pb_contact_form .et_pb_contact_submit.et_pb_button { grid-row: 2; }
  body.ad-site #page-container .ad-form-unsubscribe .et_contact_bottom_container::after { background-image: none; }
  body.ad-site #page-container .ad-form-unsubscribe form.et_pb_contact_form::after { display: none; }
}

/* 5. Keyboard focus from 1250 up: live shows the browser's own ring; Divi's reset removed it */
@media (min-width: 1250px) {
  body.ad-site #page-container :is(a, button, input, select, textarea, [tabindex]):focus-visible { outline: auto 1px; outline-offset: 0; }
  /* 3.18 B-2: the /search button is baseline-aligned in its cell, and the stand-in face's metrics put that baseline 2px lower than
     live's (top 172 against 170). Top-aligned it lands on live's 170 (the cell's top). Below 1250 the 28px button fills its cell. */
  body.ad-site #page-container #content .search .form input.button { vertical-align: top; }
}

/* 6. Bold stand-in width. TeX Gyre Heros Bold at the swap's size-adjust 95.5% ran 4.5% narrower than live's Helvetica Neue Bold
      on this site (h1, panel headings, footer "Blog": width ratios 0.940 to 0.972, build/design/tools/textwidth_ad.js), so long
      post titles wrapped one line shorter (blog list -64px, page 2 -128px). Same face, same metric overrides, size-adjust 100%;
      the regular face already matches (0.990 to 1.006). Declared after ad-bundle.css, so this definition wins. */
@font-face { font-family: 'HelveticaNeue-Bold'; src: url('/wp-content/uploads/ilaunch/theme/texgyreheros-bold.woff2') format('woff2'); font-weight: normal; font-style: normal; size-adjust: 100%; ascent-override: 99.68586%; descent-override: 22.30366%; line-gap-override: 2.93194%; }
/* 6b. 3.18 B-3: no synthetic bold or italic. Live declares one normal face per family, so browsers fake the bold (footer blog title, dates,
       panel titles, strong text) and the italic ("Live" in the exchange-rate card, a home em); faked bold of the stand-in face merged the dot
       of "i" into its stem at 14 to 16px. Real TeX Gyre Heros faces now sit beside each family (GUST licence, CTAN 2.501, sha256 in
       build/318/fix1/fonts/SOURCE.txt). Each new face keeps its family's vertical metrics exactly (Chrome applies size-adjust to the
       overrides, so each override is the family's effective value / size-adjust): line boxes and page heights do not move. The bold faces
       in HelveticaNeue take size-adjust 95.5%: Chrome's faked bold keeps the regular advance widths, so this is the size at which real
       bold runs match live's widths (49 runs on 5 pages: dev/live 0.955 to 1.041, median 1.009, 0 wrap changes; 101.35% wrapped a Latest
       Blogs title to 3 lines). Italic keeps the regular's 101.35% (same advances as the upright). */
@font-face { font-family: 'HelveticaNeue'; src: url('/wp-content/uploads/ilaunch/theme/texgyreheros-bold.woff2') format('woff2'); font-weight: bold; font-style: normal; size-adjust: 95.5%; ascent-override: 99.68586%; descent-override: 22.30366%; line-gap-override: 2.93193%; }
@font-face { font-family: 'HelveticaNeue'; src: url('/wp-content/uploads/ilaunch/theme/texgyreheros-italic.woff2') format('woff2'); font-weight: normal; font-style: italic; size-adjust: 101.35%; ascent-override: 93.93192%; descent-override: 21.01628%; line-gap-override: 2.76270%; }
@font-face { font-family: 'HelveticaNeue'; src: url('/wp-content/uploads/ilaunch/theme/texgyreheros-bolditalic.woff2') format('woff2'); font-weight: bold; font-style: italic; size-adjust: 95.5%; ascent-override: 99.68586%; descent-override: 22.30366%; line-gap-override: 2.93193%; }
@font-face { font-family: 'HelveticaNeue-Bold'; src: url('/wp-content/uploads/ilaunch/theme/texgyreheros-bolditalic.woff2') format('woff2'); font-weight: normal; font-style: italic; size-adjust: 100%; ascent-override: 99.68586%; descent-override: 22.30366%; line-gap-override: 2.93194%; }
/* 6c. The real Bold's "i" dot sits 0.065em above its stem (under 1px at 14 to 16px), and on a standard-density screen font hinting snapped
       dot and stem into touching pixel rows, so "obvious" still read "obvlous". Hinting off keeps the gap with the same advance widths, but
       it also unrounds line metrics, which moved page heights by 1 to 13px where bold sits inline in a regular line (dates, the about-us
       intro, vcard). So it is set only where heights stay put: the post titles (footer Blog panel on every page, Latest Blogs on blog
       views), the exchange-rate card's title, the bold span of the about-us intro and (3.18 round 2, B-3a) the bold home tagline. Heights equal the pre-change ones on all 25 page types
       (build/318/fix1/logs/b3-heights.log); the inline bold runs keep the standard-density merge (a typeface trait, gone at DPR 2). */
body.ad-site :is(.title, .banner div[style*="bold"], #content h5 > span, #content h5 > strong) { text-rendering: geometricPrecision; }

/* 7. Divi pads a single post's <article> 25px at the bottom; live has nothing there (posts whose left column is longer than the
      text ended 25px lower: posts 102, 300, 317) */
body.ad-site #main-content article { padding-bottom: 0; margin-bottom: 0; }

/* 8. The 404 page (the content build's branded page; live serves iLaunch's bare white "Not Found" page, so there is no live twin
      to copy). Its #content sits straight in #main-content with no .right column, so it filled the space behind the floated
      left column and wrapped narrow. Give it the right column's place from 1024 up, and (no twin, so AA at every width) only the
      bottom 50px of the orange band behind its heading, like the other pages without a photo below 1250. */
@media (min-width: 1024px) {
  body.ad-site.error404 #page-container #main-content > #content { float: left; width: 690px; padding: 20px 0 50px 50px; }
  /* contain that float: without it #main-content is 0px tall and the footer's (transparent, positioned) wrappers start at the top
     of the page and sit over the 404 text and its link (overlap_check COVERED at 1024 to 1250) */
  body.ad-site.error404 #page-container #main-content { display: flow-root; }
}
body.ad-site.error404 { background-position: center -230px; }

/* 9. Live's Tag Cloud panel holds one EMPTY link (zero size, nothing to see or read): a keyboard stop with no ring and no name.
      Hidden at every width; nothing visible changes. */
body.ad-site #page-container .panel li > a:empty { display: none; }

/* 10. The exchange-rate card's frame is a keyboard stop the page cannot see focus in (cross-origin); ad-live.js marks it while it
       holds focus, and it gets the same ring as every other stop (browser default from 1250 up; ad-mobile.css below 1250) */
body.ad-site #page-container iframe.ad-has-focus { outline: auto 1px; }
