@charset "UTF-8";
/**
* @author Sarbodaya Kandel
*
* @copyright RDA Research 2024
**/
:root {
  --arrow-90deg-right: "↳" ;
  --dot-in-center-of-zero: "0" ;
  --arrow-thin-straight-right: "⟶" ;
  --error-color-primary: rgb(255, 0, 0) ;
  --highlighter-color-quad: rgb(68, 144, 196) ;
  --highlighter-color-hexa: #2692d4 ;
  --highlighter-color-penta: rgb(192, 0, 0) ;
  --highlighter-color-primary: #6ac3c1 ;
  --highlighter-color-tertiary: #f8f7f5 ;
  --highlighter-color-secondary: #cce7e1 ;
  --checkmark-default: "✓" ;
  --arrow-head-filled-body-dotted-right: "⋯⋯⋯⋯⋯▶⋯" ;
  --arrow-head-filled-body-dotted-right-sm: "⋯⋯⋯▶⋯" ;
}

.inline {
  display: inline;
}

.block {
  display: block;
}

.flex {
  display: flex;
}

.col-width {
  flex-basis: 50%;
}

.text-left {
  text-align: left;
}

.text-right {
  text-align: right;
}

.content-width,
.product-image {
  width: 370px;
}

.content-width-lg,
.product-image-lg {
  max-width: 500px;
}

.content-width-xl {
  max-width: 740px;
}

.product-image-xl {
  max-width: 550px;
}

.fancy-heading {
  color: var(--highlighter-color-quad);
}

.dot-in-center-of-zero::after {
  content: var(--dot-in-center-of-zero);
  font-size: 1.6rem;
  font-stretch: 20%;
}

.d-col {
  flex-flow: column;
}

.d-row {
  flex-flow: row wrap;
}

.d-row-nowrap {
  flex-flow: row nowrap;
}

.j-end {
  justify-content: flex-end;
}

.text-center {
  text-align: center;
}

.j-start,
.a-cross-start {
  justify-content: flex-start;
}

.j-between {
  justify-content: space-between;
}

.j-center {
  justify-content: center;
}

.a-cross-end {
  justify-content: end;
}

.a-main-center {
  align-items: center;
}

.a-main-baseline {
  align-items: baseline;
}

.a-main-end {
  align-items: flex-end;
}

.a-main-start {
  align-items: flex-start;
}

.product-description {
  margin: 0;
  font-size: 2rem;
  line-height: 1.2;
}

.product-feature-list,
ol.product-feature-list,
.product-feature-list-lg,
.product-feature-list-xl,
ol.product-feature-list-md {
  padding: 0;
  list-style-type: none;
}
.product-feature-list li,
ol.product-feature-list li,
.product-feature-list-lg li,
.product-feature-list-xl li,
ol.product-feature-list-md li {
  padding: 0.5rem;
  border-top: 1px solid #000000;
}

.about-page .about_size3 {
  color: var(--highlighter-color-hexa);
  font-size: 1.92rem;
}

.product-feature-list,
ol.product-feature-list {
  width: 275px;
}

ol.product-feature-list-md {
  max-width: 300px;
}

ol.product-feature-list, ol.product-feature-list-md {
  list-style-type: decimal;
  list-style-position: inside;
}
ol.product-feature-list li::marker, ol.product-feature-list-md li::marker {
  color: var(--highlighter-color-penta);
  font-weight: bold;
}

.product-feature-list-lg {
  max-width: 390px;
}

.product-feature-list-xl {
  max-width: 450px;
}

.product-url,
.product-feature-list li:last-child,
.product-feature-list-md li:last-child,
.product-feature-list-lg li:last-child,
.product-feature-list-xl li:last-child {
  border-bottom: 1px solid black;
}

.line-condensed {
  line-height: 0.96;
}

.line-condensed-sm {
  line-height: 1.2;
}

.product-feature-group {
  column-gap: 3rem;
}

.product-url {
  padding-left: 0.5rem;
  text-decoration: none;
}
.product-url::after {
  content: ">";
}

em {
  font-style: normal;
}

.end-note-lg {
  max-width: 450px;
}

#explorerUrl,
#quickAppendUrl,
#livingInsightsUrl {
  margin-bottom: 0.98rem;
}

#livingInsightsUrl {
  right: 0;
  bottom: -0.8rem;
  position: absolute;
}
#livingInsightsUrl::after {
  padding-left: 5.8rem;
}

#explorerUrl::after {
  padding-left: 3.6rem;
}

#quickAppendUrl::after {
  padding-left: 5.8rem;
}

.product-url-color {
  color: rgb(192, 0, 0);
}

.segmentation-url-wrap > .product-url {
  display: inline-block;
}
.segmentation-url-wrap > .product-url:not(:first-child) {
  margin-top: 1rem;
}

#geoSmartUrl::after {
  padding-left: 9rem;
}

#geoTribesUrl::after,
#geoSmartUrl.explorer-page-url::after {
  padding-left: 2rem;
}

#livingInsightsSection {
  position: relative;
}

.chart-wrap,
.profile-finder-wrap {
  border-radius: 1rem;
}

.profile-finder-wrap {
  padding: 1rem;
  background-color: var(--highlighter-color-secondary);
}

.homepage .profile-finder-wrap,
section > .col-width:last-child {
  margin-top: 9rem;
}

section > .col-width.margin-top-sm {
  margin-top: 2rem;
}
section > .col-width.margin-top-md {
  margin-top: 5rem;
}

.iso-selection-row {
  padding: 1rem 0;
}

.iso-wrap,
.chart-wrap,
.input-wrap [type=text] {
  background-color: var(--highlighter-color-tertiary);
}

.iso-wrap {
  padding: 0.5rem;
  font-size: 1rem;
  border-radius: 1rem;
}

.iso {
  opacity: 0.5;
}
.iso:hover, .iso.iso-selected {
  cursor: pointer;
  opacity: 1;
}
.iso.iso-selected {
  background: var(--highlighter-color-secondary);
  font-weight: bold;
}

.national-flag {
  height: auto;
  max-width: 80%;
}

.top-border {
  border-top: 1px solid var(--highlighter-color-primary);
}

.bottom-border {
  border-bottom: 1px solid var(--highlighter-color-primary);
}

.fancy-heading .primary-heading,
.product-container .primary-heading {
  font-size: clamp(30px, 40px + 10 * (100vw - 500px) / 1420, 55px);
}
.fancy-heading .secondary-heading,
.product-container .secondary-heading {
  font-size: clamp(24px, 28px + 4 * (100vw - 500px) / 1420, 35px);
}

figcaption .fancy-heading {
  font-size: 2.5rem;
}

.tooltip {
  font-size: 1.4rem;
  background: #000000;
  border-radius: 6px;
}

.profiler-tooltip {
  width: 1.8rem;
  height: 1.8rem;
  flex-shrink: 0;
}
.profiler-tooltip:hover {
  cursor: pointer;
}

.chart-wrap,
.profile-spinner-wrap,
.profile-error-message {
  height: 200px;
  position: relative;
}

.profile-spinner-wrap > .fa-spinner {
  color: var(--highlighter-color-primary);
  font-size: 5rem;
}

.error-message,
.profile-error-message {
  color: var(--error-color-primary);
  font-style: normal;
}

.profile-error-message {
  padding: 0 2rem;
  font-size: 2rem;
}

.rda_btn {
  width: max-content;
  font-size: 1.36rem;
}

.form-control {
  font-size: 1.6rem;
}

/**
 * blog section
 */
h2.entry-title a {
  font-size: 1.6rem;
}

#rdanews_content {
  min-height: 50px;
}

.hidden {
  display: none;
}

.pipe-next::after {
  color: rgb(0, 0, 0);
  content: "|";
  padding: 0 1rem;
}

/* keep .intelligence-page in sync — paired wrapper class */
.geotribes-page .custom-bullet-wrap li,
.intelligence-page .custom-bullet-wrap li {
  line-height: 1.25;
}

.living-insights-page #topImageHomePageAppendSegments-1 {
  left: 460px;
  position: absolute;
  max-width: 160px;
  margin-top: -45px;
}
.living-insights-page #topImageHomePageAppendSegments-bg {
  max-width: 650px;
  padding-right: 0;
}
.living-insights-page #circle5livingInsightPage,
.living-insights-page #circle4livingInsightPage {
  max-width: 80%;
}
.living-insights-page .privacy {
  padding-left: 3rem;
}
.living-insights-page .privacy p {
  max-width: 900px;
}
.living-insights-page .privacy ol {
  font-size: 1.44rem;
  max-width: 850px;
}
.living-insights-page .ThreeImagesSentencesInsightPage {
  font-size: 1.44rem;
}
.living-insights-page .text-center:not(.nameOfTheCountriesInTheHomePage) {
  min-height: 80px;
}
@media (width <= 991px) {
  .living-insights-page #downImage4livingInsightPage {
    display: none;
  }
}

.geotribes-page .fancy-text, .intelligence-page .fancy-text {
  color: var(--highlighter-color-hexa);
  font-size: 2rem;
}
@media (width <= 865px) {
  .geotribes-page .profile-finder-info-wrap, .intelligence-page .profile-finder-info-wrap {
    max-width: 44%;
  }
}
@media (width <= 1240) {
  .geotribes-page .profile-finder-wrap, .intelligence-page .profile-finder-wrap {
    margin-right: 0.5rem;
  }
}
@media (width <= 768px) {
  .geotribes-page .profile-finder-info-wrap, .intelligence-page .profile-finder-info-wrap {
    width: 100%;
    max-width: unset;
  }
  .geotribes-page .profile-finder-wrap, .intelligence-page .profile-finder-wrap {
    margin: 0 auto;
    margin-top: 0.5rem;
  }
}
.geotribes-page h5, .intelligence-page h5 {
  font-size: 1.92rem;
}
.geotribes-page .description, .intelligence-page .description {
  width: 90%;
}
.geotribes-page .summary-box-wrap, .intelligence-page .summary-box-wrap {
  display: flex;
  align-items: center;
}
.geotribes-page .summary-box, .intelligence-page .summary-box {
  filter: drop-shadow(#999999 4px 4px 6px);
  font-size: 1.7rem;
  background: #fcf2f1;
  padding-block: 2rem;
  padding-inline: 5rem 1rem;
}
.geotribes-page .fancy-bullet-wrap, .intelligence-page .fancy-bullet-wrap {
  margin-left: 1rem;
  list-style-position: outside;
}
.geotribes-page .fancy-bullet-wrap li, .intelligence-page .fancy-bullet-wrap li {
  padding-bottom: 0.7rem;
}
.geotribes-page .fancy-bullet-wrap li::marker, .intelligence-page .fancy-bullet-wrap li::marker {
  color: crimson;
}
.geotribes-page .summary-box-lg h2::before,
.geotribes-page .summary-box-sm h2::before, .intelligence-page .summary-box-lg h2::before,
.intelligence-page .summary-box-sm h2::before {
  color: crimson;
  content: var(--arrow-head-filled-body-dotted-right);
  font-size: 1.5rem;
  margin-left: -10rem;
  vertical-align: 0.4rem;
}
.geotribes-page .secondary-heading-sm, .intelligence-page .secondary-heading-sm {
  font-size: clamp(22px, 28px + (100vw - 1920px) / 1920, 28px);
}
.geotribes-page .summary-box-lg, .intelligence-page .summary-box-lg {
  width: 90%;
}
.geotribes-page .custom-bullet-wrap, .intelligence-page .custom-bullet-wrap {
  list-style-type: var(--checkmark-default);
}
.geotribes-page .custom-bullet-wrap li, .intelligence-page .custom-bullet-wrap li {
  font-size: clamp(17px, 20px + (100vw - 1920px) / 1920, 21px);
  padding-left: 1.5rem;
  padding-bottom: 0.7rem;
}
.geotribes-page .custom-bullet-wrap li::marker, .intelligence-page .custom-bullet-wrap li::marker {
  font-size: 3rem;
}
.geotribes-page .custom-bullet-wrap li em, .intelligence-page .custom-bullet-wrap li em {
  color: #c40304;
  font-size: clamp(19px, 23px + (100vw - 1920px) / 1920, 23px);
}
.geotribes-page .summary-box-wrap:has(.summary-box-lg), .intelligence-page .summary-box-wrap:has(.summary-box-lg) {
  align-items: unset;
  justify-content: center;
}
@media (width <= 1200px) {
  .geotribes-page .summary-box-wrap:has(.summary-box-lg), .intelligence-page .summary-box-wrap:has(.summary-box-lg) {
    width: 100%;
    margin-inline: unset;
    padding-inline: unset;
  }
}
@media (width <= 800px) {
  .geotribes-page .summary-box, .intelligence-page .summary-box {
    padding-inline: 4rem 1rem;
  }
}
@media (width <= 767px) {
  .geotribes-page .geotribes-column-wrap, .intelligence-page .geotribes-column-wrap {
    display: flex;
    flex-direction: column-reverse;
  }
  .geotribes-page .description-wrap,
  .geotribes-page .summary-box-wrap:has(.summary-box-sm), .intelligence-page .description-wrap,
  .intelligence-page .summary-box-wrap:has(.summary-box-sm) {
    width: 100%;
  }
  .geotribes-page .summary-box-wrap, .intelligence-page .summary-box-wrap {
    margin-top: 2rem;
    margin-inline: unset;
    padding-inline: 3rem;
  }
  .geotribes-page .description-wrap, .intelligence-page .description-wrap {
    margin-top: 3.2rem;
  }
}
@media (width <= 575px) {
  .geotribes-page .strip-image-container div, .intelligence-page .strip-image-container div {
    display: none;
  }
  .geotribes-page .strip-image-container div.col-xs-12, .intelligence-page .strip-image-container div.col-xs-12 {
    display: block;
  }
}
@media (width <= 525px) {
  .geotribes-page .custom-bullet-wrap li, .intelligence-page .custom-bullet-wrap li {
    font-size: 1.6rem;
  }
  .geotribes-page .custom-bullet-wrap li::marker, .intelligence-page .custom-bullet-wrap li::marker {
    font-size: 2rem;
  }
  .geotribes-page .summary-box-lg h2::before, .intelligence-page .summary-box-lg h2::before {
    content: "";
    margin-left: unset;
  }
  .geotribes-page .custom-bullet-wrap li em, .intelligence-page .custom-bullet-wrap li em {
    font-size: 1.8rem;
  }
  .geotribes-page .summary-box-lg, .intelligence-page .summary-box-lg {
    padding-left: 2rem;
  }
  .geotribes-page .summary-box-lg .secondary-heading-sm, .intelligence-page .summary-box-lg .secondary-heading-sm {
    font-size: 2.2rem;
  }
  .geotribes-page .custom-bullet-wrap li, .intelligence-page .custom-bullet-wrap li {
    padding-left: 1rem;
  }
}

@media (width <= 991px) {
  .geosmart-page .instruction {
    visibility: hidden;
    margin-bottom: 1rem !important;
    padding-bottom: 0 !important;
  }
}

@media (width > 1200px) {
  .intelligence-page .summary-box-wrap:has(.summary-box-lg) {
    padding-inline: 10%;
  }
}
.intelligence-page a[href^="mailto:"],
.intelligence-page a[href^="tel:"] {
  color: inherit;
}
.intelligence-page a[href^="mailto:"]:hover,
.intelligence-page a[href^="tel:"]:hover {
  color: #555;
}

#banner_landing_wrap .primary-heading {
  font-size: clamp(35px, 50px + 40 * (100vw - 500px) / 1420, 90px);
  letter-spacing: -3px;
}
#banner_landing_wrap .primary-heading .banner-description {
  margin-bottom: 0.5rem;
}
#banner_landing_wrap .banner-description {
  font-size: clamp(22px, 30px + 5 * (100vw - 500px) / 1420, 40px);
  padding-top: 1.2rem;
  line-height: 0.96;
  letter-spacing: -1px;
}
#banner_landing_wrap.geotribes-page .banner-description, #banner_landing_wrap.intelligence-page .banner-description {
  font-size: clamp(21px, 21px + 6 * (100vw - 500px) / 1420, 27px);
}
#banner_landing_wrap .banner-url-wrap {
  width: 20rem;
  min-height: fit-content;
}
#banner_landing_wrap.explorer-page .banner-url-wrap {
  width: 24rem;
}
#banner_landing_wrap.consumer-data-page .banner-url-wrap {
  width: 26rem;
}
#banner_landing_wrap.about-page .primary-heading .title {
  flex-basis: max-content;
}
#banner_landing_wrap.about-page .primary-heading .banner-description {
  align-items: flex-end;
}
@media screen and (width <= 760px) {
  #banner_landing_wrap.about-page .primary-heading .banner-description {
    display: block;
    flex-direction: row;
  }
}
#banner_landing_wrap.geosmart-page .banner-url-wrap {
  width: 30rem;
}
#banner_landing_wrap.geosmart-page .primary-heading .title {
  flex-basis: max-content;
}
#banner_landing_wrap.geosmart-page .primary-heading .banner-description {
  align-items: flex-end;
}
@media screen and (width <= 800px) {
  #banner_landing_wrap.geosmart-page .primary-heading .banner-description {
    display: block;
    flex-direction: row;
  }
}
#banner_landing_wrap.geotribes-page .banner-url-wrap, #banner_landing_wrap.intelligence-page .banner-url-wrap {
  width: 34rem;
}
#banner_landing_wrap.geotribes-page .primary-heading .banner-description, #banner_landing_wrap.intelligence-page .primary-heading .banner-description {
  align-items: flex-end;
}
@media screen and (width <= 840px) {
  #banner_landing_wrap.geotribes-page .primary-heading .banner-description, #banner_landing_wrap.intelligence-page .primary-heading .banner-description {
    display: block;
    flex-direction: row;
  }
}
#banner_landing_wrap.living-insights-page .banner-url-wrap {
  width: 30rem;
}
#banner_landing_wrap.living-insights-page .primary-heading .banner-description {
  align-items: flex-end;
}
@media screen and (width <= 720px) {
  #banner_landing_wrap.living-insights-page .primary-heading .banner-description {
    display: block;
    flex-direction: row;
  }
}
#banner_landing_wrap .anchor {
  height: 3rem;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: space-evenly;
  text-decoration: none;
}
#banner_landing_wrap .anchor-label {
  font-size: 1.3rem;
}
#banner_landing_wrap .anchor-button {
  background: #000000;
}
#banner_landing_wrap .anchor-standard span {
  align-self: flex-end;
}
#banner_landing_wrap .anchor-button,
#banner_landing_wrap .anchor-button:hover {
  color: #ffffff;
}
#banner_landing_wrap .anchor-button:hover,
#banner_landing_wrap .anchor-standard:hover {
  cursor: pointer;
  text-decoration: none;
}

.profile-finder-wrap {
  width: 430px;
}
.profile-finder-wrap .primary-heading {
  display: inline-block;
  font-size: clamp(20px, 25px + 3 * (100vw - 500px) / 1420, 30px);
  margin-bottom: 1rem;
}
.profile-finder-wrap .secondary-heading {
  font-size: clamp(14px, 18px + 3 * (100vw - 500px) / 1420, 22px);
}
.profile-finder-wrap .frm-postcode-profile .diy-invitation {
  font-size: 1.6rem;
}
.profile-finder-wrap .frm-postcode-profile .item-group {
  --col-gap: 2% ;
  --col-left-width: 40% ;
  --col-right-width: calc(
  	100% - var(--col-left-width) - var(--col-gap)
  ) ;
  column-gap: var(--col-gap);
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-left {
  width: var(--col-left-width);
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right {
  width: var(--col-right-width);
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap {
  padding: 1rem 0;
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap button,
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap input[type=text] {
  border-radius: 1rem;
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap button:focus,
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap input[type=text]:focus {
  outline: none !important;
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap input[type=text] {
  width: 60%;
  height: 4rem;
  border: 2px solid var(--highlighter-color-penta);
  padding: 0 1rem;
  background: var(--highlighter-color-tertiary);
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap input[type=text]:focus {
  background: #ffffff;
}
.profile-finder-wrap .frm-postcode-profile .item-group .col-right.input-wrap button {
  color: #ffffff;
  width: 30%;
  border: 0;
  padding: 0.3rem 0;
  outline: none;
  font-size: 1.4rem;
  background: var(--highlighter-color-primary);
  border-radius: 0.5rem;
  letter-spacing: 0.2rem;
}

.counter {
  display: inline-block;
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.counter::before {
  content: var(--arrow-90deg-right);
}

.arrow-long-thin-right::after {
  content: var(--arrow-thin-straight-right);
}

.arrow-thin-90deg-right::after {
  content: var(--arrow-90deg-right);
}

.arrow-thin-90deg-right-front::before {
  content: var(--arrow-90deg-right);
}

.segmentation-url-wrap > a {
  max-width: fit-content;
}

#home-banner-main,
#banner_landing_wrap {
  display: flex;
  flex-direction: column;
  margin-block-end: 2rem;
  margin-block-start: 9rem;
}

#home-banner-main {
  margin-block-end: 0;
}

.home-banner-wrap {
  position: relative;
}
.home-banner-wrap .cta-button-wrap {
  display: flex;
  padding-block-end: 2rem;
  justify-content: center;
}
.home-banner-wrap .cta-button-wrap .cta-button {
  color: white;
  border: 1px solid black;
  background: black;
  font-weight: bold;
  font-size: 2rem;
  border-radius: 0.4rem;
  padding-block: 0.8rem;
  padding-inline: 2.2rem;
}
.home-banner-wrap .cta-button-wrap .cta-button:hover {
  color: black;
  transition: background-color 1s ease 0 color 0.2s ease 0;
  background: white;
}

@media screen and (max-width: 768px) {
  #home-banner-overlay-lg {
    display: none;
  }
}
@media screen and (min-width: 769px) {
  #home-banner-overlay-sm {
    display: none;
  }
}
#home-banner-overlay-sm > .overlay-frame,
#home-banner-overlay-lg > .overlay-frame {
  top: 0;
  left: 0;
  width: 100%;
  height: auto;
  position: absolute;
}

.living-insights-page .secondary-heading {
  font-size: clamp(18px, 27px + 5 * (100vw - 500px) / 1420, 27px);
}

@media screen and (width <= 1225px) {
  .product-container {
    padding-left: 1vw;
    padding-right: 1vw;
  }
  #banner_landing_wrap .primary-heading,
  #banner_landing_wrap .banner-description {
    padding-left: 1vw;
    padding-right: 1vw;
  }
  #livingInsightsUrl {
    right: 1vw;
  }
}
@media screen and (width <= 1050px) {
  .explorer-page > .d-row {
    align-items: center;
    flex-direction: column;
  }
  .explorer-page .behavioural-data {
    margin-top: 0 !important;
    padding-top: 0 !important;
  }
  .explorer-page .expert-footstep {
    margin-top: 0 !important;
  }
  .explorer-page .expert-footstep figcaption .fancy-heading {
    align-self: center;
  }
  .explorer-page h1.fancy-heading {
    text-align: center;
  }
  .explorer-page #configListSecondary li:first-child {
    border-top: none;
  }
  .explorer-page #configListPrimary {
    margin-bottom: 0;
  }
  .explorer-page .content-width-xl {
    max-width: 52%;
  }
  .explorer-page .explorer-solution,
  .explorer-page .customer-knowledge {
    max-width: 500px;
  }
  .explorer-page .explorer-solution .fancy-heading,
  .explorer-page .customer-knowledge .fancy-heading {
    align-self: flex-start;
  }
  .explorer-page .content-width-lg {
    width: 500px;
  }
  .explorer-page .product-feature-list-xl {
    max-width: 500px;
  }
  .explorer-page .explorer-user-fig,
  .explorer-page .custom-audience-fig {
    padding-top: 3rem;
  }
}
@media screen and (width <= 991px) {
  #banner_landing_wrap {
    margin-top: 9rem;
  }
}
@media screen and (width <= 840px) {
  .product-container .col-width:last-child {
    margin-top: 3rem;
  }
  #explorerSolution .margin-top-md {
    margin-top: 0;
  }
  .product-container:not(#segmentationSection) {
    flex-wrap: wrap;
  }
  .product-container:not(#segmentationSection) .col-width {
    flex-basis: 100%;
  }
  .product-container:not(#segmentationSection) .content-width {
    width: 100%;
  }
  .product-container:not(#segmentationSection) .content-width .product-url {
    max-width: 65%;
    flex-wrap: wrap;
  }
  #segmentationSection .col-width .content-width {
    width: 95%;
  }
  .quotation-wrap {
    justify-content: center;
  }
  .expert-footstep > img {
    padding-top: 0 !important;
  }
  .explorer-page.custom-audience .col-width {
    margin-top: 0;
  }
  .explorer-page .col-width.custom-solution,
  .explorer-page .col-width.geotribes-explorer {
    margin-top: 0;
  }
}
@media screen and (width <= 768px) {
  #livingInsightsUrl {
    order: 4;
    bottom: 0;
  }
  #livingInsightsSection .feature-list {
    order: 3;
  }
  #livingInsightsSection .quotation-wrap {
    order: 2;
    margin-bottom: 3rem;
  }
  #segmentationSection {
    flex-wrap: wrap;
  }
  .profile-finder-wrap {
    margin-top: 5rem;
  }
  #segmentationSection .segmentation-url-wrap {
    margin-top: 1rem !important;
  }
  #segmentationSection .col-width {
    flex-basis: 100%;
  }
  .segmentation-url-wrap {
    display: flex;
    flex-direction: column;
  }
  .quotation-wrap {
    padding-top: 0 !important;
  }
}
@media screen and (width <= 740px) {
  #banner_landing_wrap.consumer-data-page .primary-heading {
    align-items: flex-start;
    flex-direction: column;
  }
  #banner_landing_wrap.consumer-data-page .primary-heading .banner-description {
    width: 100%;
    padding-left: 0;
  }
}
@media screen and (width <= 500px) {
  .explorer-page .product-image-lg,
  .explorer-page .product-image-xl,
  .explorer-page .explorer-solution,
  .explorer-page .product-feature-list-xl {
    max-width: 100%;
  }
  .explorer-page .product-feature-list-md {
    max-width: 70%;
  }
  .explorer-page .product-feature-list-lg {
    max-width: 80%;
  }
  .explorer-page .explorer-solution .fancy-heading {
    align-self: flex-start;
  }
  .explorer-page .custom-solution h2 span,
  .explorer-page .custom-solution h2 span.fancy-heading {
    text-align: left;
  }
  .explorer-page .content-width-lg {
    width: unset;
    max-width: 100%;
  }
  .geotribes-page .custom-bullet-wrap, .intelligence-page .custom-bullet-wrap {
    list-style-type: disc;
  }
  .geotribes-page .custom-bullet-wrap li::marker, .intelligence-page .custom-bullet-wrap li::marker {
    color: #000000;
    content: unset;
    list-style-position: outside;
  }
}
/* ---------- geoTribes Segments — page-scoped hero ----------
   Mirrors the .intelligence-page / .living-insights-page hero rules; resizes the
   KEPT-LIVE hero to the segments mockup ramp (px = mockup_rem × 16). Scoped to
   .geotribes-page (used by segments.php only) so no other page is touched. This
   replaces two dead duplicate banner-description{line-height:1.15} blocks that the
   shared #banner_landing_wrap.qa-restyle rule (1.18) already overrode.
   See [[project_intelligence_fontscale]] — by formula, NOT fontscale.py. */
/* hero heading — mockup .site-hero h1 = clamp(2.1rem,5.6vw,3.9rem) @16px */
#banner_landing_wrap.geotribes-page .primary-heading {
  font-size: clamp(33.6px, 5.6vw, 62.4px);
  letter-spacing: -0.015em;
  font-weight: 300;
  line-height: 1;
}

/* hero eyebrow ("1/") — mockup .eyebrow = .95rem @16px */
#banner_landing_wrap.geotribes-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px;
  font-weight: 400;
  letter-spacing: 0.04em;
}
#banner_landing_wrap.geotribes-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.geotribes-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* hero sub ("Personas that work everywhere.") — mockup .sub = clamp(1.05rem,2.4vw,1.7rem)
   @16px. The geotribes hero carries .banner-description ONLY on this h1 sub (the
   standalone tagline <p> uses .hero-tag), so no .primary-heading scoping needed. */
#banner_landing_wrap.geotribes-page .banner-description {
  color: var(--ink);
  font-size: clamp(16.8px, 2.4vw, 27.2px);
  font-weight: 300;
  line-height: 1.18;
  letter-spacing: normal;
  text-align: right;
  padding-bottom: 0.08em;
}

/* hero "available for" flag row — mockup .avail / .lab / .flag (px = rem×16).
   The row is inlined into segments.php (was the shared part/flags.php) so the bare
   <img> carries NO .flags/.flagOpacity class and escapes their global dimming
   (width:35px / opacity:.5!important) for free; the only collision is the reused
   .flag SPAN class (global border:1px white + padding), reset below. Scoped to the
   hero so explorer's copy of the partial is untouched. */
#banner_landing_wrap.geotribes-page .avail {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin: 20px 0 0;
}

#banner_landing_wrap.geotribes-page .avail .lab {
  font-size: 12.48px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
}

#banner_landing_wrap.geotribes-page .avail .flag {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 13.76px;
  color: var(--ink);
  border: 0;
  padding: 0;
}

#banner_landing_wrap.geotribes-page .avail .flag img {
  height: 15px;
  width: auto;
  border: 1px solid var(--line);
}

/* hero "available for" flag row — Explorer (clone of the geotribes/segments .avail;
   inlined into explorer.php, bare <img> escapes the global .flags/.flagOpacity dimming;
   the reused .flag SPAN class's global border/padding is reset). px = mockup_rem×16. */
#banner_landing_wrap.explorer-page .avail {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin: 20px 0 0;
}

#banner_landing_wrap.explorer-page .avail .lab {
  font-size: 12.48px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
}

#banner_landing_wrap.explorer-page .avail .flag {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 13.76px;
  color: var(--ink);
  border: 0;
  padding: 0;
}

#banner_landing_wrap.explorer-page .avail .flag img {
  height: 15px;
  width: auto;
  border: 1px solid var(--line);
}

/* ---------- geoSmart Segments — page-scoped hero ----------
   Mirrors the .geotribes-page / .intelligence-page / .living-insights-page hero
   rules; resizes the KEPT-LIVE geoSmart hero to its mockup ramp (px = mockup_rem × 16),
   replacing the old big shared #banner_landing_wrap type (h1 clamp 35–90px / -3px,
   .banner-description 22–40px / line-height .96) that geoSmart still fell back on.
   No .avail row (the geoSmart hero carries no flags). Scoped to .geosmart-page so no
   other page is touched. See [[project_intelligence_fontscale]] — by formula. */
/* hero heading — mockup .site-hero h1 = clamp(2.3rem,6.2vw,4.3rem) @16px */
#banner_landing_wrap.geosmart-page .primary-heading {
  font-size: clamp(36.8px, 6.2vw, 68.8px);
  letter-spacing: -0.015em;
  font-weight: 300;
  line-height: 1;
}

/* hero eyebrow ("1/") — mockup .eyebrow = .95rem @16px */
#banner_landing_wrap.geosmart-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px;
  font-weight: 400;
  letter-spacing: 0.04em;
}
#banner_landing_wrap.geosmart-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.geosmart-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* hero sub ("Proven & powerful geodemographics.") — mockup .sub =
   clamp(1.05rem,2.4vw,1.7rem) @16px. Carried by the h1 sub spans only. */
#banner_landing_wrap.geosmart-page .banner-description {
  color: var(--ink);
  font-size: clamp(16.8px, 2.4vw, 27.2px);
  font-weight: 300;
  line-height: 1.18;
  letter-spacing: normal;
  text-align: right;
  padding-bottom: 0.08em;
}

/* ---------- Explorer (explorer.php) — page-scoped hero ----------
   Clone of the geoSmart hero ramp (the live Explorer hero is the same DOM:
   .primary-heading + .counter eyebrow + right-aligned .banner-description sub).
   px = mockup_rem × 16. See [[project_intelligence_fontscale]]. */
#banner_landing_wrap.explorer-page .primary-heading {
  font-size: clamp(36.8px, 6.2vw, 68.8px);
  letter-spacing: -0.015em;
  font-weight: 300;
  line-height: 1;
}

#banner_landing_wrap.explorer-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px;
  font-weight: 400;
  letter-spacing: 0.04em;
}
#banner_landing_wrap.explorer-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.explorer-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* hero sub ("Plan like an expert.") — right-aligned tagline carried by the h1 sub span */
#banner_landing_wrap.explorer-page .banner-description {
  color: var(--ink);
  font-size: clamp(16.8px, 2.4vw, 27.2px);
  font-weight: 300;
  line-height: 1.18;
  letter-spacing: normal;
  text-align: right;
  padding-bottom: 0.08em;
}

/* page-wide line-height baseline — the mockup sets line-height:1.6 on <body>
   (cascades to the whole page). Two things fight that live: (1) the base is
   Bootstrap's body 1.5, and (2) a global p{line-height:1.3} (_global.scss) sets
   1.3 DIRECTLY on every paragraph — and a direct value beats an inherited one,
   so body copy (blue .section-lead, .section-note, .dcard/.panel p) was stuck at
   1.3 even though the section/wrapper say 1.6. So mirror the mockup's 1.6 on the
   intelligence wrappers (covers the hero eyebrow + any non-paragraph text) AND
   re-assert it directly on paragraphs to beat the global p rule. Every explicit
   override still wins — hero h1=1, sub=1.18, h2/.dcard h3=1.25, .checks li=1.5,
   .steps li=1.55. Scoped to .intelligence-page (NOT shared .qa-restyle) so
   segments / living insights stay untouched by this task. */
.intelligence-page.qa-restyle,
.intelligence-page.qa-restyle p {
  line-height: 1.6;
}

/* inline body hyperlinks — mockup styles the generic body <a> red
   (a{color:var(--brand-dark)}); the two on this page are "Quick Append"
   (.dcard p) and "privacy policy" (form .micro). Live they render $blue via
   the global a{color:$blue} (_global.scss) — a DIRECT rule that beats the
   inherited .dcard p / .micro muted colour, same trap as the line-height.
   Re-assert the mockup red, scoped to intelligence. The more-specific mockup
   exceptions already survive: .dcard h3 a (inherit) and .call-big a (ink,
   carries the tel link) are 0,2,2 > this 0,2,1; .rda_btn keeps #fff via
   !important. Underline is the Bootstrap-5 default (mockup keeps it too). */
.intelligence-page.qa-restyle a {
  color: var(--brand-dark);
}

/* hero heading — match the mockup (.site-hero h1 = clamp(1.995rem, 5.32vw, 3.705rem))
   at the mockup-raw ramp (F = 1.0, px = mockup_rem × 16): caps at 59.28px. Overrides the
   shared #banner_landing_wrap .primary-heading clamp (35–90px → ~70px @1200px), which
   is far larger than the mockup. The heading text (.title) inherits this; the tagline
   (.banner-description) keeps its own size. See [[project_intelligence_fontscale]] —
   computed by formula, NOT fontscale.py. */
#banner_landing_wrap.intelligence-page .primary-heading {
  font-size: clamp(31.92px, 5.32vw, 59.28px);
  letter-spacing: -0.015em; /* mockup .site-hero h1 = -.015em (was -3px) */
  font-weight: 300; /* mockup .site-hero h1 = 300 (Light); now the real 'Sofia Pro' 300 cut = SofiaProLightAz (Light) */
  line-height: 1; /* mockup .site-hero h1 = line-height:1 (tight); base sets none → inherits Bootstrap ~1.2 */
}

/* hero eyebrow (the "2/" counter) — inherit the mockup .eyebrow look & feel:
   small, lightly tracked ink text sitting on its own line with a 16px gap to
   the heading (replacing the shared counter's 1rem padding). The signature
   dot-in-center-of-zero "0" is sized down to sit inline with the rest (was the
   standalone 1.6rem glyph). See [[project_intelligence_fontscale]]. */
#banner_landing_wrap.intelligence-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 14.43px; /* mockup .eyebrow = .902rem @16px */
  font-weight: 400; /* mockup .eyebrow = 400 (real Regular now wired; was 700 to fake emphasis the mockup lacks) */
  letter-spacing: 0.04em;
  /* whole eyebrow is Regular 400 now — mockup .eyebrow is not bold; the ↳ arrow matches */
}
#banner_landing_wrap.intelligence-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.intelligence-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* hero sub-heading (the "Simulate buyer decisions…" tagline) — inherit the
   mockup .hero-head .sub: light, ink, right-aligned, line-height 1.18, at the
   mockup-raw ramp (F = 1.0). Intelligence-only override of the shared banner-description
   font-size (kept for geotribes) and the base -1px letter-spacing. The two
   .content lines inherit it. See [[project_intelligence_fontscale]]. */
#banner_landing_wrap.intelligence-page .banner-description {
  color: var(--ink);
  font-size: clamp(15.95px, 2.28vw, 25.84px); /* mockup .sub = clamp(.997rem,2.28vw,1.615rem) @16px */
  font-weight: 300; /* mockup .sub is light */
  line-height: 1.18;
  letter-spacing: normal; /* base rule sets -1px; mockup .sub has none */
  text-align: right;
  padding-bottom: 0.08em;
}

/* ---------- Living Insights — page-scoped hero + body-link overrides ----------
   The hero is KEPT LIVE (copy unchanged); these only resize it to the LI mockup
   ramp (px = mockup_rem × 16) and recolour body links red. Mirrors the
   .intelligence-page hero rules above; scoped to .living-insights-page so the
   six other rolled-out pages keep their own hero sizes / blue links. */
/* inline body hyperlinks — mockup body <a> is red (twin of @1346). Page-scoped:
   the other rolled-out pages must stay blue. .dcard h3 a / .call-big a stay
   more-specific (0,2,2 > 0,2,1) so segment links + the tel link survive. */
.living-insights-page.qa-restyle a {
  color: var(--brand-dark);
}

/* inline body hyperlinks — segments mockup body <a> is red (twin of the LI rule
   above). Page-scoped so the other rolled-out pages keep blue links; the shared
   .dcard h3 a (inherit) and .call-big a (ink) stay more-specific and survive. */
.geotribes-page.qa-restyle a {
  color: var(--brand-dark);
}

/* inline body hyperlinks — About mockup body <a> is red (twin of the LI/segments
   rules above). Page-scoped so the other rolled-out pages keep blue links; the
   shared .dcard h3 a (inherit) and .call-big a (ink) stay more-specific (0,2,2 /
   0,2,1 > 0,2,0) so the service-card links and tel link survive. */
.about-page.qa-restyle a {
  color: var(--brand-dark);
}

/* About has FOUR service cards (Intelligence, Quick Append, Living Insights,
   Explorer) where the shared .card-grid is 3-col (@2173). Scoped 4-col override
   (0,3,0) out-specifies the shared rule AND the shared @980 1fr collapse, so the
   responsive steps must be re-declared here: 4 → 2 → 1. */
.about-page.qa-restyle .card-grid {
  grid-template-columns: repeat(4, 1fr);
}
@media (width <= 980px) {
  .about-page.qa-restyle .card-grid {
    grid-template-columns: 1fr 1fr;
  }
}
@media (width <= 620px) {
  .about-page.qa-restyle .card-grid {
    grid-template-columns: 1fr;
  }
}

/* use Sofia Pro's real weight cuts only — never let the browser synthesise (faux)
   bold. All five cuts (300–700) are wired in _header, so every weight on the page
   maps to a real face; this guarantees the font-specific bold is used even if a
   weight is requested that the browser would otherwise fake. Set on
   the root (html) so it applies to every page. Globalised as font-synthesis-WEIGHT
   only: the site wires no italic @font-face, so <em>/<i> text on other pages relies
   on faux-italic — disabling weight synthesis alone kills faux-bold everywhere while
   leaving that faux-italic intact. */
html {
  font-synthesis-weight: none;
  /* grayscale antialiasing — render text the way the design mockups do; removes the
     subpixel colour-fringing that makes edges read "much sharper" than the mockup.
     Inherited from the root → every page. -webkit-/-moz-osx- are Mac/WebKit-only
     (Windows/Firefox-on-Windows ignore them and keep their native rendering). */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* the ✓ tick (U+2713) is not in Sofia Pro, so it renders from a fallback font with
   no bold cut; the global font-synthesis-weight:none above left it thin. Re-allow
   weight synthesis on the tick pseudo-elements only so they faux-bold as in the
   mockup — real text still uses real cuts. */
.qa-restyle .flist li::before,
.qa-restyle .checks li::before {
  font-synthesis-weight: auto;
}

/* secondary / outline CTAs (mockup .btn.btn-outline) — page-scoped & self-contained:
   the shared .qa-restyle layer ships only the solid .rda_btn, and a bare .btn-outline
   does not collide with Bootstrap's .btn-outline-* variants. Compound
   .living-insights-page.qa-restyle prefix (0,3,0) out-specifies the red body-link rule
   above (0,2,1) so the label stays ink, not brand-dark. Regular size by default
   (hero + Talk-to-us "Download Factsheet"); .btn-outline--sm is the small variant
   (mockup .btn-sm) for the privacy CTAs above Talk to us. */
.living-insights-page.qa-restyle .btn-outline,
.geotribes-page.qa-restyle .btn-outline,
.about-page.qa-restyle .btn-outline,
.consumer-data-page.qa-restyle .btn-outline,
.geosmart-page.qa-restyle .btn-outline,
.explorer-page.qa-restyle .btn-outline {
  display: inline-block;
  padding: 12px 24px;
  border: 1.5px solid var(--line);
  border-radius: 4px;
  background: #fff;
  color: var(--ink);
  font-size: 15.52px; /* mockup .btn = .97rem @16px */
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
}
.living-insights-page.qa-restyle .btn-outline:hover,
.geotribes-page.qa-restyle .btn-outline:hover,
.about-page.qa-restyle .btn-outline:hover,
.consumer-data-page.qa-restyle .btn-outline:hover,
.geosmart-page.qa-restyle .btn-outline:hover,
.explorer-page.qa-restyle .btn-outline:hover {
  border-color: var(--ink);
  color: var(--ink);
}

.living-insights-page.qa-restyle .btn-outline--sm,
.geotribes-page.qa-restyle .btn-outline--sm,
.about-page.qa-restyle .btn-outline--sm,
.consumer-data-page.qa-restyle .btn-outline--sm,
.geosmart-page.qa-restyle .btn-outline--sm,
.explorer-page.qa-restyle .btn-outline--sm {
  padding: 8px 16px;
  font-size: 14.4px; /* mockup .btn-sm = .9rem @16px */
}

/* hero heading — LI mockup .site-hero h1 = clamp(2.3rem,6.2vw,4.3rem) @16px */
#banner_landing_wrap.living-insights-page .primary-heading {
  font-size: clamp(36.8px, 6.2vw, 68.8px);
  letter-spacing: -0.015em;
  font-weight: 300;
  line-height: 1;
}

/* hero eyebrow ("4/") — LI mockup .eyebrow = .95rem @16px */
#banner_landing_wrap.living-insights-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px;
  font-weight: 400;
  letter-spacing: 0.04em;
}
#banner_landing_wrap.living-insights-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.living-insights-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* hero sub ("Humanise corporate data.") — LI mockup .sub = clamp(1.05rem,2.4vw,1.7rem)
   @16px. Scoped to .primary-heading so it hits ONLY the h1 sub: the live LI hero
   reuses .banner-description on a second, standalone tagline <p> below the image,
   which must keep its live size/left-align (the hero is kept-as-live). */
#banner_landing_wrap.living-insights-page .primary-heading .banner-description {
  color: var(--ink);
  font-size: clamp(16.8px, 2.4vw, 27.2px);
  font-weight: 300;
  line-height: 1.18;
  letter-spacing: normal;
  text-align: right;
  padding-bottom: 0.08em;
}

/* About hero ramp — clone of the LI hero above (the about mockup hero shares the
   same scale: .site-hero h1 = clamp(2.3rem,6.2vw,4.3rem), weight 300). Without
   this, About's h1 fell through to the legacy #banner_landing_wrap .primary-heading
   (clamp 35→90px, -3px tracking, default weight) — visibly bigger and heavier than
   the mockup and the sibling restyled heroes. The hero carries only the "About Us"
   title (the right-aligned .banner-description tagline was removed to match the
   mockup) plus the .hero-tag positioning line below the banner image. */
#banner_landing_wrap.about-page .primary-heading {
  font-size: clamp(36.8px, 6.2vw, 68.8px);
  letter-spacing: -0.015em;
  font-weight: 300;
  line-height: 1;
}

#banner_landing_wrap.about-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px;
  font-weight: 400;
  letter-spacing: 0.04em;
}
#banner_landing_wrap.about-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.about-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* Human Insights Data hero ramp — clone of the About / LI hero blocks (the
   human-insights-data mockup hero shares the same scale: .site-hero h1 =
   clamp(2.3rem,6.2vw,4.3rem), weight 300; .eyebrow = .95rem, weight 400).
   Without this, consumer-data's h1 + counter fell through to the legacy
   #banner_landing_wrap .primary-heading (clamp 35→90px, -3px tracking, default
   weight) — visibly bigger/heavier than the mockup and the sibling restyled
   heroes. The hero is kept-as-live (the standalone .banner-description tagline
   below the image isn't in the mockup, left untouched). */
#banner_landing_wrap.consumer-data-page .primary-heading {
  font-size: clamp(36.8px, 6.2vw, 68.8px);
  letter-spacing: -0.015em;
  font-weight: 300;
  line-height: 1;
}

/* centre the hero→first-section divider: the body section gives 56px above the
   heading (padding-top), so match the hero's bottom gap to 56px (base #banner
   is 20px) — divider sits vertically midway. ID+class (1,1,0) beats base ID. */
#banner_landing_wrap.consumer-data-page {
  margin-bottom: 56px;
}

#banner_landing_wrap.consumer-data-page .counter {
  display: block;
  padding: 0;
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px;
  font-weight: 400;
  letter-spacing: 0.04em;
}
#banner_landing_wrap.consumer-data-page .counter::before {
  font-weight: 400;
}
#banner_landing_wrap.consumer-data-page .counter .dot-in-center-of-zero::after {
  font-size: inherit;
}

/* Living Insights mockup type ramp — the shared .qa-restyle sizes derive from the
   Intelligence mockup and run ~5% smaller than the LI mockup for the inherited
   components; re-assert the LI-mockup px (rem×16, body literal 16.5px) page-scoped
   so LI honours its own mockup precisely. The LI-specific components (.chan-*,
   .flist, .subhead, .micro, hero, .btn-outline) already carry LI-mockup px → reused. */
.living-insights-page.qa-restyle { /* mockup body = 16.5px */
  /* mockup h2 = 1.85rem */
  /* mockup .lead = 1.03rem */
  /* mockup .what-list li = .96rem */
  /* mockup .dcard h3 = 1.05rem */
  /* mockup .dcard p = .92rem (also drives .chan-sub/.chan-lab, exactly as the mockup cascade does) */
  /* mockup .chan-head h3 = 1.18rem — listed after .dcard h3 so channel titles win source-order */
  /* mockup .checks li = .93rem */
  /* mockup .call-big = 1.5rem */
  /* mockup .btn = .97rem (Book a demo, Message us) */
}
.living-insights-page.qa-restyle section {
  font-size: 16.5px;
}
.living-insights-page.qa-restyle .secondary-heading {
  font-size: 29.6px;
}
.living-insights-page.qa-restyle .section-lead {
  font-size: 16.48px;
}
.living-insights-page.qa-restyle .what-list li {
  font-size: 15.36px;
}
.living-insights-page.qa-restyle .dcard h3 {
  font-size: 16.8px;
}
.living-insights-page.qa-restyle .dcard p {
  font-size: 14.72px;
}
.living-insights-page.qa-restyle .chan-head h3 {
  font-size: 18.88px;
}
.living-insights-page.qa-restyle .checks li {
  font-size: 14.88px;
}
.living-insights-page.qa-restyle .call-big {
  font-size: 24px;
}
.living-insights-page.qa-restyle .rda_btn {
  font-size: 15.52px;
}
.living-insights-page.qa-restyle .form { /* mockup .form label = .85rem */
  /* mockup .form input = .95rem */
  /* mockup .micro = .83rem */
}
.living-insights-page.qa-restyle .form .field-label label:not(.error) {
  font-size: 13.6px;
}
.living-insights-page.qa-restyle .form input, .living-insights-page.qa-restyle .form textarea {
  font-size: 15.2px;
}
.living-insights-page.qa-restyle .form .micro {
  font-size: 13.28px;
}

/* geoTribes Segments mockup type ramp — clone of the Living Insights ramp above
   (both mockups share one px scale; px = mockup_rem × 16, body 16.5px). Page-scoped
   to .geotribes-page (used by segments.php only) so segments honours its mockup
   precisely without touching the shared layer or the other rolled-out pages.
   See [[project_intelligence_fontscale]] — by formula, NOT fontscale.py. */
.geotribes-page.qa-restyle { /* mockup body = 16.5px */
  /* mockup h2 = 1.85rem */
  /* Postcode Profiler form's "Top geoTribes Segments" heading (matches homepage) */
  /* mockup .lead = 1.03rem */
  /* mockup .what-list li = .96rem */
  /* mockup .dcard h3 = 1.05rem */
  /* mockup .dcard p = .92rem */
  /* mockup .checks li = .93rem */
  /* mockup .subhead = 1.04rem */
  /* mockup .call-big = 1.5rem */
  /* mockup .btn = .97rem */
  /* mockup .micro = .83rem */
}
.geotribes-page.qa-restyle section {
  font-size: 16.5px;
}
.geotribes-page.qa-restyle .secondary-heading {
  font-size: 29.6px;
}
.geotribes-page.qa-restyle .profile-finder-wrap .secondary-heading {
  font-size: 16px;
  white-space: nowrap;
}
.geotribes-page.qa-restyle .section-lead {
  font-size: 16.48px;
}
.geotribes-page.qa-restyle .what-list li {
  font-size: 15.36px;
}
.geotribes-page.qa-restyle .dcard h3 {
  font-size: 16.8px;
}
.geotribes-page.qa-restyle .dcard p {
  font-size: 14.72px;
}
.geotribes-page.qa-restyle .checks li {
  font-size: 14.88px;
}
.geotribes-page.qa-restyle .subhead {
  font-size: 16.64px;
}
.geotribes-page.qa-restyle .call-big {
  font-size: 24px;
}
.geotribes-page.qa-restyle .rda_btn {
  font-size: 15.52px;
}
.geotribes-page.qa-restyle .micro {
  font-size: 13.28px;
}
.geotribes-page.qa-restyle .form { /* mockup .form label = .85rem */
  /* mockup .form input = .95rem */
  /* mockup .micro = .83rem */
}
.geotribes-page.qa-restyle .form .field-label label:not(.error) {
  font-size: 13.6px;
}
.geotribes-page.qa-restyle .form input, .geotribes-page.qa-restyle .form textarea {
  font-size: 15.2px;
}
.geotribes-page.qa-restyle .form .micro {
  font-size: 13.28px;
}

/* About mockup type ramp — clone of the Living Insights / segments ramps above
   (the about-restyled1200 mockup shares the same 16.5px-body scale; px = mockup_rem
   × 16). Page-scoped to .about-page so About honours its mockup precisely. WITHOUT
   this block About inherited the shared .qa-restyle base, which is Intelligence-
   derived and runs ~5% small (section 15.675px, h2 28.13px) — leaving About visibly
   smaller than its mockup and than the sibling restyled pages beside it. The .form
   sub-block must be re-asserted too: the shared form block (the .intelligence-page,
   .living-insights-page, .geotribes-page, .about-page group) defaults to the smaller
   Intelligence sizes, so without this the form stayed small while the body jumped.
   See [[project_intelligence_fontscale]] — by formula, NOT fontscale.py. */
.about-page.qa-restyle { /* mockup body = 16.5px */
  /* mockup h2 = 1.85rem */
  /* mockup .lead = 1.03rem */
  /* mockup .dcard h3 = 1.05rem */
  /* mockup .dcard p = .9rem */
  /* mockup .checks li = .93rem */
  /* mockup .call-big = 1.5rem */
  /* mockup .btn = .97rem (Message us) */
  /* mockup .micro = .83rem */
  /* SOC 2 certificate image — mockup caps it at max-width:230px (shared .fig img is
     max-width:100%, which would fill the .split column). Scoped to .fig.soc2 so the
     mass-of-people .fig.full banner keeps its full width. */
  /* mass-of-people banner — mockup crops it to a fixed band (height clamp + cover),
     not the shared .fig img height:auto (which renders the photo at full natural
     height). width:100% is inherited from the shared .fig.full img rule. */
}
.about-page.qa-restyle section {
  font-size: 16.5px;
}
.about-page.qa-restyle .secondary-heading {
  font-size: 29.6px;
}
.about-page.qa-restyle .section-lead {
  font-size: 16.48px;
}
.about-page.qa-restyle .dcard h3 {
  font-size: 16.8px;
}
.about-page.qa-restyle .dcard p {
  font-size: 14.4px;
}
.about-page.qa-restyle .checks li {
  font-size: 14.88px;
}
.about-page.qa-restyle .call-big {
  font-size: 24px;
}
.about-page.qa-restyle .rda_btn {
  font-size: 15.52px;
}
.about-page.qa-restyle .micro {
  font-size: 13.28px;
}
.about-page.qa-restyle .fig.soc2 img {
  max-width: 230px;
}
.about-page.qa-restyle .fig.full img {
  height: clamp(200px, 26vw, 330px);
  object-fit: cover;
}
.about-page.qa-restyle .form { /* mockup .form label = .85rem */
  /* mockup .form input = .95rem */
  /* mockup .micro = .83rem */
}
.about-page.qa-restyle .form .field-label label:not(.error) {
  font-size: 13.6px;
}
.about-page.qa-restyle .form input, .about-page.qa-restyle .form textarea {
  font-size: 15.2px;
}
.about-page.qa-restyle .form .micro {
  font-size: 13.28px;
}

/* Human Insights Data (consumer-data.php) — page-scoped restyle.
   Type ramp = clone of the LI / segments / about ramps (px = mockup_rem × 16, body
   16.5px), trimmed to the selectors that exist in THIS DOM (intro h2 + lead + p, plus
   the three .dbox sections — no .subhead / .eyebrow; the hero uses .counter).
   The .dbox / .dbox.rev / .dbox-media / .dbox-links components are NEW (not in the
   shared .qa-restyle layer), ported verbatim from the human-insights-data mockup and
   nested page-scoped so they can't leak and so .dbox-links a (0,3,1) out-specifies the
   body-link recolour (0,2,1) below, keeping the data-set links brand-red per mockup.
   See [[project_intelligence_fontscale]] — by formula, NOT fontscale.py. */
.consumer-data-page.qa-restyle { /* mockup body = 16.5px */
  /* mockup h2 = 1.85rem */
  /* "Data Sets" intro title at 1.5× the page h2 (29.6px × 1.5) */
  /* mockup .lead = 1.03rem */
  /* re-assert the global cascade (_global.scss p{1.3} / a{color:$blue}) per
     [[project_restyle_lineheight_cascade]] — restyled body copy is 1.6, links brand-red */
  /* alternating media/text rows — mockup .dbox (separated by margin, not <hr>) */
  /* data-set CTAs use .cta-row + .btn-outline.btn-outline--sm (Living Insights
     pattern); .btn-outline is page-scoped above, .cta-row is shared. */
  /* mockup stacks the rows at 820px (≠ the 740px banner rule @ index.scss:1250) */
}
.consumer-data-page.qa-restyle section {
  font-size: 16.5px;
}
.consumer-data-page.qa-restyle .secondary-heading {
  font-size: 29.6px;
}
.consumer-data-page.qa-restyle .secondary-heading.data-sets-heading {
  font-size: 44.4px;
}
.consumer-data-page.qa-restyle .section-lead {
  font-size: 16.48px;
}
.consumer-data-page.qa-restyle p {
  line-height: 1.6;
}
.consumer-data-page.qa-restyle a {
  color: var(--brand-dark);
}
.consumer-data-page.qa-restyle .dbox {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 46px;
  align-items: center;
  margin-top: 46px;
  /* flip media to the right on alternating rows */
  /* dimension titles carry .mb-3.secondary-heading — styled by the shared
     .secondary-heading (dark, weight 500) + the page ramp (29.6px), matching
     the intro section heading. No bespoke .dbox h2 rule (intentionally dark,
     not the mockup's red — per design decision). */
}
.consumer-data-page.qa-restyle .dbox.rev .dbox-media {
  order: 2;
}
.consumer-data-page.qa-restyle .dbox p {
  /* mockup .dbox p sets no font-size — inherits body 16.5px (NOT .92rem) */
  margin-bottom: 12px;
}
.consumer-data-page.qa-restyle .dbox p:last-of-type {
  margin-bottom: 0;
}
.consumer-data-page.qa-restyle .dbox p b {
  color: var(--ink);
}
.consumer-data-page.qa-restyle .dbox-media img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 6px; /* mockup var(--radius) */
  box-shadow: 2px 3px 12px rgba(0, 0, 0, 0.08);
}
@media (max-width: 820px) {
  .consumer-data-page.qa-restyle .dbox {
    grid-template-columns: 1fr;
    gap: 22px;
    /* rev rows also stack media-above-text */
  }
  .consumer-data-page.qa-restyle .dbox.rev .dbox-media {
    order: 0;
  }
}

/* geoSmart Segments (geosmart.php) — page-scoped restyle.
   Reuses the shared .qa-restyle vocabulary entirely (.split / .fig / .checks /
   .flist / .demo-grid / .cta-row) — no new components, unlike consumer-data's
   bespoke .dbox. Type ramp = clone of the LI / segments / about ramps
   (px = mockup_rem × 16, body 16.5px), trimmed to the selectors present in THIS
   DOM. By formula, NOT fontscale.py (baseline stale). See
   [[project_intelligence_fontscale]]. */
.geosmart-page.qa-restyle { /* mockup body = 16.5px */
  /* mockup h2 = 1.85rem */
  /* mockup .lead = 1.03rem */
  /* mockup .checks li = .93rem */
  /* mockup .flist li = .92rem */
  /* mockup .call-big = 1.5rem */
  /* mockup .btn = .97rem (Message us) */
  /* mockup .micro = .83rem */
  /* re-assert the global cascade (_global.scss p{1.3} / a{color:$blue}) per
     [[project_restyle_lineheight_cascade]] — restyled body copy is 1.6, links brand-red */
  /* interactive 56-segment map wrapper — the live gallery replaces the mockup's
     static chart figure (which carries margin-top:26px). The gallery's .graph_geosmart
     ships no top margin, so it butted up against the "Click on each…" hint; re-assert
     the mockup's 26px text→figure gap here. */
  /* intro line above the .flist ("…find your best target segments by:") — not in
     the shared layer, so define it here (geoSmart-only). mockup .list-intro */
  /* shared .fig ships no figcaption styling — the geoSmart map figure carries one */
  /* downloads — centred bold label + centred button row (mockup) */
  /* alternating split: image (narrow) on the LEFT, body copy (wide) on the RIGHT —
     Cultural Diversity row. Source order is figure-then-text, so flip the column
     weights (shared .split is 1.25fr .75fr, text-left). This selector (0,3,0)
     out-specifies the shared @980 `.split{1fr}` collapse (0,1,0), so re-declare the
     collapse here or it would stay 2-col on mobile. */
}
.geosmart-page.qa-restyle section {
  font-size: 16.5px;
}
.geosmart-page.qa-restyle .secondary-heading {
  font-size: 29.6px;
}
.geosmart-page.qa-restyle .section-lead {
  font-size: 16.48px;
}
.geosmart-page.qa-restyle .checks li {
  font-size: 14.88px;
}
.geosmart-page.qa-restyle .flist li {
  font-size: 14.72px;
}
.geosmart-page.qa-restyle .call-big {
  font-size: 24px;
}
.geosmart-page.qa-restyle .rda_btn {
  font-size: 15.52px;
}
.geosmart-page.qa-restyle .micro {
  font-size: 13.28px;
}
.geosmart-page.qa-restyle p {
  line-height: 1.6;
}
.geosmart-page.qa-restyle a {
  color: var(--brand-dark);
}
.geosmart-page.qa-restyle .geotribes_segment_item {
  margin-top: 26px;
}
.geosmart-page.qa-restyle .list-intro {
  margin-top: 16px;
  margin-bottom: 2px;
  color: var(--muted);
  font-size: 15.2px; /* mockup .list-intro = .95rem */
}
.geosmart-page.qa-restyle .fig figcaption {
  font-style: italic;
  color: var(--muted);
  font-size: 13.76px; /* mockup figcaption = .86rem */
  line-height: 1.5;
  margin-top: 10px;
}
.geosmart-page.qa-restyle .form { /* mockup .form label = .85rem */
  /* mockup .form input = .95rem */
  /* mockup .micro = .83rem */
}
.geosmart-page.qa-restyle .form .field-label label:not(.error) {
  font-size: 13.6px;
}
.geosmart-page.qa-restyle .form input, .geosmart-page.qa-restyle .form textarea {
  font-size: 15.2px;
}
.geosmart-page.qa-restyle .form .micro {
  font-size: 13.28px;
}
.geosmart-page.qa-restyle .downloads {
  text-align: center;
}
.geosmart-page.qa-restyle .downloads .cta-row {
  justify-content: center;
}
.geosmart-page.qa-restyle .split.rev {
  grid-template-columns: 0.75fr 1.25fr;
}
@media (max-width: 980px) {
  .geosmart-page.qa-restyle .split.rev {
    grid-template-columns: 1fr;
  }
}

/* Explorer (explorer.php) — page-scoped restyle.
   Reuses the shared .qa-restyle vocabulary (.split / .fig / .checks / .flist /
   .demo-grid / .cta-row), plus a net-new .numlist for the Audience-Finder steps.
   Type ramp = clone of the geoSmart ramp (px = mockup_rem × 16, body 16.5px),
   trimmed to the selectors present in THIS DOM. By formula, NOT fontscale.py.
   See [[project_intelligence_fontscale]]. */
.explorer-page.qa-restyle { /* mockup body = 16.5px */
  /* mockup h2 = 1.85rem */
  /* divider heading ("Why Smart Planners…") — 20% smaller than the hero h1
     (#banner_landing_wrap.explorer-page .primary-heading clamp(36.8,6.2vw,68.8) × 0.8),
     fluid so it holds the proportion at every screen size. (0,4,0) beats the .secondary-heading ramp. */
  /* mockup .lead = 1.03rem, Regular (site body defaults to Light 300) */
  /* explorer mockup: hero-tag margin 20px 0 0 (size/weight from shared .qa-restyle .hero-tag) */
  /* mockup .checks li = .93rem */
  /* mockup .flist li = .92rem */
  /* mockup .call-big = 1.5rem */
  /* mockup .btn = .97rem (Message us) */
  /* mockup .micro = .83rem */
  /* re-assert the global cascade (_global.scss p{1.3} / a{color:$blue}) per
     [[project_restyle_lineheight_cascade]] — restyled body copy is 1.6, links brand-red */
  /* the Explorer mockup uses EQUAL, top-aligned split columns (1fr 1fr) for every
     two-up row — UNLIKE the shared .split (1.25fr .75fr, centered) and the geoSmart
     .split.rev (.75fr 1.25fr). Override both here. This selector (0,3,0) out-specifies
     the shared @980 `.split{1fr}` collapse (0,2,0), so re-declare the collapse, and
     drop the figure below the text on rev rows (mockup .split.rev figure{order:2}). */
  /* intro line above a .flist / .numlist (mockup .list-intro) — not in the shared layer */
  /* downloads — centred bold label + centred button row (mockup) */
  /* shared .fig ships no figcaption styling — Explorer content figures carry captions */
  /* net-new, page-scoped: red-numbered ordered list (mockup .numlist) for the
     Audience-Finder workflow steps — the shared layer ships only .flist / .checks */
}
.explorer-page.qa-restyle section {
  font-size: 16.5px;
}
.explorer-page.qa-restyle .secondary-heading {
  font-size: 29.6px;
}
.explorer-page.qa-restyle .secondary-heading.divider-heading {
  font-size: clamp(29.44px, 4.96vw, 55.04px);
  font-weight: 300;
}
.explorer-page.qa-restyle .section-lead {
  font-size: 16.48px;
  font-weight: 400;
}
.explorer-page.qa-restyle .hero-tag {
  margin-top: 20px;
}
.explorer-page.qa-restyle .checks li {
  font-size: 14.88px;
}
.explorer-page.qa-restyle .flist li {
  font-size: 14.72px;
}
.explorer-page.qa-restyle .call-big {
  font-size: 24px;
}
.explorer-page.qa-restyle .rda_btn {
  font-size: 15.52px;
}
.explorer-page.qa-restyle .micro {
  font-size: 13.28px;
}
.explorer-page.qa-restyle p {
  line-height: 1.6;
}
.explorer-page.qa-restyle a {
  color: var(--brand-dark);
}
.explorer-page.qa-restyle .split,
.explorer-page.qa-restyle .split.rev {
  align-items: start;
  grid-template-columns: 1fr 1fr;
}
@media (max-width: 980px) {
  .explorer-page.qa-restyle .split,
  .explorer-page.qa-restyle .split.rev {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 980px) {
  .explorer-page.qa-restyle .split.rev figure {
    order: 2;
  }
}
.explorer-page.qa-restyle .list-intro {
  margin-top: 16px;
  margin-bottom: 2px;
  color: var(--muted);
  font-size: 15.2px; /* mockup .list-intro = .95rem */
}
.explorer-page.qa-restyle .downloads {
  text-align: center;
}
.explorer-page.qa-restyle .downloads .cta-row {
  justify-content: center;
}
.explorer-page.qa-restyle .fig figcaption {
  font-style: italic;
  color: var(--muted);
  font-size: 13.76px; /* mockup figcaption = .86rem */
  line-height: 1.5;
  margin-top: 10px;
}
.explorer-page.qa-restyle .form { /* mockup .form label = .85rem */
  /* mockup .form input = .95rem */
  /* mockup .micro = .83rem */
}
.explorer-page.qa-restyle .form .field-label label:not(.error) {
  font-size: 13.6px;
}
.explorer-page.qa-restyle .form input, .explorer-page.qa-restyle .form textarea {
  font-size: 15.2px;
}
.explorer-page.qa-restyle .form .micro {
  font-size: 13.28px;
}
.explorer-page.qa-restyle .numlist {
  list-style: decimal;
  margin: 12px 0 0 1.4em;
}
.explorer-page.qa-restyle .numlist li {
  padding: 0 0 11px 0.3em;
  font-size: 14.72px; /* mockup .numlist li = .92rem */
  line-height: 1.5;
}
.explorer-page.qa-restyle .numlist li::marker {
  color: var(--brand);
  font-weight: 700;
}

/* Content gutter for every worked (.qa-restyle) page at/below 1200px. The .container
   on these pages is max-width:1200 and goes full-width (100vw) at ≤1200px, so hero
   taglines, headings and body copy ran flush to the screen edges. Re-assert a 24px
   gutter on the four product-page heroes (#banner_landing_wrap.qa-restyle is itself
   the .container) and every restyled body .container (Intelligence / Living Insights /
   Segments / About / Home; the Home hero .home-banner-wrap is OUTSIDE the wrapper so
   it is untouched).

   Per design: at ≤1200px ONLY the banner image and the section dividers may touch the
   walls — everything else (incl. .fig.full content figures) keeps the gutter.
     • Section dividers are the section's border-top, painted on the full-width
       border-box, so padding leaves them full-bleed automatically — no rule needed.
     • The hero banner image is a direct child of the padded hero container, so it
       would otherwise inset with the text; pull it back out to full-bleed with a
       negative inline margin.
   Above 1200px the container centres in its 1200 box and supplies its own gutter. */
@media (max-width: 1200px) {
  #banner_landing_wrap.qa-restyle,
  .qa-restyle .container {
    padding-inline: 24px;
  }
  /* hero banner image stays edge-to-edge (the one element, with the dividers,
     allowed to hit the walls) */
  #banner_landing_wrap.qa-restyle > img {
    width: calc(100% + 48px);
    max-width: none;
    margin-inline: -24px;
  }
}
/* geoTribes home-page product-vignettes mockup ramp + components — page-scoped to
   .home-page (the five product vignettes on index.php only) so it honours the
   home-vignettes mockup precisely without touching the shared layer or the other
   rolled-out pages. px = mockup_rem × 16 (F = 1.0); body 16.5px like the LI/segments
   ramps. Reuses the shared .qa-restyle section divider, .split grid, .section-lead /
   .flist bases; defines the components the shared layer lacks (.eyebrow, .figure,
   .hlinks and the Quick Append .qa-image creative). The compound
   .home-page.qa-restyle (0,2,0) out-specifies the shared .qa-restyle (0,1,0) regardless
   of source order. See [[project_intelligence_fontscale]] — by formula, NOT fontscale.py. */
.home-page.qa-restyle {
  /* ---- type ramp (px = mockup_rem × 16) ---- */
  /* mockup body = 16.5px (matches the LI/segments ramps) */
  /* Postcode Profiler form's "Top geoTribes Segments" heading — keep on one line
     (it sits in a narrow .col-right and otherwise wraps to two); sized down so the
     nowrap line fits the column without overflowing the panel. */
  /* eyebrow / catalogue index ("↳ 0N/") — small, lightly tracked ink (mockup .eyebrow) */
  /* blue lead — override the shared .section-lead size to the home mockup (.lead = 1.12rem);
     colour/blue inherited from the shared .section-lead base. */
  /* body-copy paragraph — inherits the section 16.5px (mockup body) */
  /* red-check capability list — override the shared 1-col .flist to the mockup's
     2-col grid; the ✓ ::before (content + colour + the font-synthesis-weight:auto
     exception @ ".qa-restyle .flist li::before") is inherited from the shared .flist. */
  /* home-page text links — red, right chevron, hairline rule (mockup .hlinks / .hlink) */
  /* figure cell (Intelligence, Living Insights, Explorer) */
  /* Quick Append creative — static cube image backdrop + How-it-works overlay */
  /* inline body links red (mockup a{color:var(--brand-dark)}); the global a{color:$blue}
     (_global.scss) would otherwise win. .hlink (0,3,0) stays brand-red over this (0,2,1). */
  /* single-column flatten — mirror the shared 980px breakpoint for the home-only grids
     (.split already collapses via the shared .qa-restyle @media). */
}
.home-page.qa-restyle section {
  font-size: 16.5px;
}
.home-page.qa-restyle h2,
.home-page.qa-restyle .secondary-heading {
  font-size: 42px; /* section heading (35px × 1.2) */
  font-weight: 500;
  line-height: 1.25;
  margin-bottom: 10px; /* mockup h2 */
}
.home-page.qa-restyle .profile-finder-wrap .secondary-heading {
  font-size: 16px;
  white-space: nowrap;
}
.home-page.qa-restyle .eyebrow {
  margin-bottom: 16px;
  color: var(--ink);
  font-size: 15.2px; /* mockup .eyebrow = .95rem */
  font-weight: 400;
  letter-spacing: 0.04em;
}
.home-page.qa-restyle .section-lead {
  max-width: 46em;
  margin-bottom: 12px;
  font-size: 22px;
}
.home-page.qa-restyle .body-copy {
  max-width: 42em;
  color: var(--muted);
}
.home-page.qa-restyle .flist {
  margin: 18px 0 22px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px 28px;
}
.home-page.qa-restyle .flist li {
  padding: 0 0 0 26px;
  font-size: 15.04px; /* mockup .flist li = .94rem */
  line-height: 1.45;
}
.home-page.qa-restyle .hlinks {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 14px;
  margin-top: 10px;
  /* single links (non-Segments vignettes) sit to the right */
}
.home-page.qa-restyle .hlinks.right {
  align-items: flex-end;
}
.home-page.qa-restyle .hlink {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 10px 0;
  border-bottom: 1px solid var(--line); /* quickappend row separator */
  color: var(--brand);
  font-size: 16px; /* mockup .hlink = 1rem */
  font-weight: 600;
  line-height: 1.3;
  text-decoration: none;
}
.home-page.qa-restyle .hlink:hover {
  color: var(--brand-dark);
}
.home-page.qa-restyle .hlink .chev {
  flex: none;
  font-weight: 700;
}
.home-page.qa-restyle .figure {
  margin: 0;
  /* standardised 371/201 product images (Intelligence, Explorer) */
  /* Living Insights photo sits borderless */
}
.home-page.qa-restyle .figure a {
  display: block;
}
.home-page.qa-restyle .figure img {
  width: 100%;
  height: auto;
  display: block;
  border: 1px solid var(--line);
  border-radius: 4px;
}
.home-page.qa-restyle .figure.std img {
  aspect-ratio: 371/201;
  object-fit: cover;
  height: auto;
}
.home-page.qa-restyle .figure.no-border img {
  border: none;
}
.home-page.qa-restyle .qa-image {
  position: relative;
  width: 100%;
  aspect-ratio: 371/201;
  overflow: hidden;
  background: linear-gradient(135deg, #34485d 0%, #46627d 100%);
  border: 1px solid var(--line);
  border-radius: 4px;
}
.home-page.qa-restyle .qa-image img {
  position: absolute;
  inset: 0;
  z-index: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.home-page.qa-restyle .qa-image .scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(90deg, rgba(18, 26, 36, 0.5) 0%, rgba(18, 26, 36, 0.3) 50%, rgba(18, 26, 36, 0.12) 100%);
}
.home-page.qa-restyle .qa-flow {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  flex-direction: column;
  gap: clamp(8px, 1.4vw, 12px);
  padding: clamp(13px, 2.2vw, 18px);
}
.home-page.qa-restyle .qa-flow .cap {
  color: #fff;
  font-size: 12.16px; /* mockup .qa-flow .cap = .76rem */
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  opacity: 0.92;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.85);
}
.home-page.qa-restyle .qa-steps {
  position: relative;
  flex: 1;
  list-style: none;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.home-page.qa-restyle .qa-steps::before {
  content: "";
  position: absolute;
  left: 12px;
  top: 13px;
  bottom: 13px;
  width: 2px;
  background: rgba(255, 255, 255, 0.6);
}
.home-page.qa-restyle .qa-steps li {
  position: relative;
  display: flex;
  align-items: center;
  gap: 13px;
}
.home-page.qa-restyle .qa-steps li.key .n {
  background: var(--brand);
  color: #fff;
}
.home-page.qa-restyle .qa-steps li.key .t {
  font-weight: 600;
}
.home-page.qa-restyle .qa-steps .n {
  flex: none;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: #fff;
  color: #1f1f1f;
  font-size: 13.6px; /* mockup .qa-steps .n = .85rem */
  font-weight: 600;
  box-shadow: 0 1px 6px rgba(0, 0, 0, 0.35);
}
.home-page.qa-restyle .qa-steps .t {
  color: #fff;
  font-size: clamp(14.4px, 1.05vw, 16.96px); /* mockup .qa-steps .t = clamp(.9rem,1.05vw,1.06rem) */
  font-weight: 500;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.85);
}
.home-page.qa-restyle a {
  color: var(--brand-dark);
}
@media (width <= 980px) {
  .home-page.qa-restyle .flist {
    grid-template-columns: 1fr;
  }
}

/* ============================================================
   Ported to the SHARED .qa-restyle layer — additive; the
   .intelligence-page rules above are left intact (intelligence is the
   one approved page, kept untouched). Only line-height + letter-spacing
   are shared; font-SIZE is deliberately NOT ported, so each rolled-out
   page keeps its own hero size. All values are scale-relative
   (em / unitless), so they stay coherent at any size.
   ============================================================ */
.qa-restyle,
.qa-restyle p {
  line-height: 1.6; /* body copy — beats the global p{1.3} on every restyled page */
}

.qa-restyle p {
  font-weight: 300; /* Light body copy — Issue #10; beats global p + inherited */
}

#banner_landing_wrap.qa-restyle .primary-heading {
  letter-spacing: -0.015em;
  line-height: 1;
}

#banner_landing_wrap.qa-restyle .counter {
  letter-spacing: 0.04em;
}

#banner_landing_wrap.qa-restyle .banner-description {
  line-height: 1.18;
  letter-spacing: normal; /* removes the base -1px tracking on the other heroes' subs (mockup) */
}

@media screen and (width <= 464px) {
  #barChartSvg,
  .profile-finder-wrap {
    width: unset;
    max-width: 100%;
  }
  .geotribes-page .profiler-finder-wrap,
  .intelligence-page .profiler-finder-wrap {
    max-width: 94%;
    --bs-gutter-x: unset ;
  }
  #livingInsightsUrl {
    left: 0.2vw;
    position: relative;
  }
  /**
   * hides certain login urls from footer and navbar login section as the login 
   * page for these are not optimised for small screen devices
   */
  #loginGroup .li-login-url,
  #loginGroup .sp-login-url,
  #loginGroup .explorer-login-url,
  #navbarLoginGroup .li-login-url,
  #navbarLoginGroup .sp-login-url,
  #navbarLoginGroup .explorer-login-url {
    display: none;
  }
}
@media screen and (width <= 400px) {
  .product-image {
    width: 100%;
  }
}
@media screen and (width <= 340px) {
  #geoSmartUrl::after {
    padding-left: 7rem;
  }
  #geoTribesUrl::after {
    padding-left: 2px;
  }
}
@media screen and (width <= 320px) {
  #geoSmartUrl::after,
  #geoTribesUrl::after {
    content: "";
    padding-left: 0;
  }
}
#profileChartWrap a.chart-img-url {
  /**
   * svg specific styling 
   */
}
#profileChartWrap a.chart-img-url text {
  fill: var(--highlighter-color-hexa);
  cursor: pointer;
  font-size: 1.5rem;
  font-family: "Sofia Pro", sans-serif;
  text-decoration: underline;
}
#profileChartWrap a.chart-img-url text:hover {
  font-size: 1.48rem;
  font-weight: bold;
  text-decoration: none;
}

/* ============================================================
   Quick Append / Living Insights restyle — SHARED component layer (Issue #10)
   Keyed on .qa-restyle, which every restyled product page carries
   alongside its own thin .<page>-page class. The tokens and component
   vocabulary are byte-identical across the Intelligence, Living Insights
   and Segments mockups, so they live here once rather than per page.
   Values lifted from the approved mockups
   (work-item/10/resources/html/*-restyled1200*.html).
   Additive — does NOT touch the old .geotribes-page,.intelligence-page
   block above, which segments.php still depends on.
   ============================================================ */
.qa-restyle {
  /* mockup tokens, shared by every page wearing .qa-restyle */
  --brand: #C4242B ;
  --brand-dark: #A31D24 ;
  --brand-tint: #F9EEEC ;
  --blue: #4A90C2 ;
  --ink: #222222 ;
  --muted: #4A5258 ;
  --line: #DDDDD8 ;
  /* section dividers replace the old <hr class="container">; the
     border tracks the .container width so it aligns with the hero.
     Only matches body <section>s nested under the wrapper div — the
     hero itself carries .qa-restyle (not a descendant) so it is
     left untouched. */
  /* CTA — reuse the site .rda_btn, recoloured to the mockup red.
     !important on color is required to beat the base rules
     .rda_btn{color:#fff!important} and .rda_btn:hover{color:#000!important}. */
  /* hero tagline row (mockup .hero-tag-row): the banner tagline and the
     "Book a demo" CTA share one line, button pushed to the right; the
     tagline drops the big .banner-description clamp for the mockup's
     1.06rem. Resolves under the hero, which carries .qa-restyle. */
  /* p.hero-tag (0,2,1) so line-height beats the per-page `p{line-height:1.6}`
     re-assertions (.<page>.qa-restyle p, also (0,2,1)) on source order. */
  /* blue lead paragraph (mockup .lead, renamed to avoid the
     Bootstrap .lead collision) */
  /* trailing explanatory paragraph under a list/grid */
  /* fine-print footnote (mockup .micro). The form-scoped .micro below is more
     specific (.living-insights-page .form .micro) so it still wins in the form. */
  /* divider list with run-in leads */
  /* feature / simulation card grids */
  /* enrichment-channel card header — icon row + title. Placed AFTER .dcard so
     .chan-head h3 (equal 0,2,1 specificity) wins on source order over .dcard h3. */
  /* checkmark list inside the channel cards (model: .checks). Run-in <b> leads
     stay inline — no display:block, unlike .checks b. */
  /* blush callout panel */
  /* red-check list (2-col grid) */
  /* sub-section heading above a checks / card grid (mockup .subhead) */
  /* numbered step list (run-in) */
  /* two-up text + figure */
  /* right-align the fixed-width Postcode Profiler form within its grid cell */
  /* equal-height columns in the profiler section: bring the left content up to the
     height of the Postcode Profiler form (overrides the shared .split align-items:center) */
  /* profiler cross-sell CTA (mockup .pp-cta) — sits under the .section-lead in the
     left text column, divided off by a hairline rule */
  /* contact — Talk to us */
  /* button row (mockup .cta-row) — needs no breakpoint of its own (flex-wrap) */
}
.qa-restyle section {
  border-top: 1px solid #BBBBB4; /* quickappend section divider */
  padding-block: 56px;
  font-size: 15.675px; /* mockup body; site root is 62.5% (1rem=10px) so px is used to hit the mockup's pixels */
  line-height: 1.6;
}
.qa-restyle section p {
  color: var(--muted);
}
.qa-restyle section h2,
.qa-restyle section .secondary-heading {
  font-size: 29.6px; /* section heading standardised to 29.6px across all pages (homepage .home-page h2 overrides to 42px) */
  font-weight: 500;
  line-height: 1.25;
}
.qa-restyle .rda_btn {
  padding: 12px 26px;
  font-size: 14.74px; /* mockup .btn = .921rem @16px */
  font-weight: 600; /* mockup .btn — boldface CTA */
  color: #fff !important;
  background: var(--brand);
  border-color: var(--brand);
  border-radius: 4px;
}
.qa-restyle .rda_btn:hover {
  color: #fff !important;
  background: var(--brand-dark);
  border-color: var(--brand-dark);
}
.qa-restyle .hero-tag-row {
  display: flex;
  gap: 24px;
  margin-top: 20px;
  align-items: center;
}
.qa-restyle p.hero-tag {
  margin: 0;
  max-width: 52em;
  color: var(--ink);
  font-size: 25.16px; /* bottom tagline: 85% of section title (29.6px × 0.85) */
  line-height: 3.5rem; /* bottom tagline line-height */
  font-weight: 300; /* mockup postface = Regular; real 'Sofia Pro' wired in _header @font-face */
}
.qa-restyle .hero-tag-row .rda_btn {
  flex: none;
  margin-left: auto;
  white-space: nowrap;
}
.qa-restyle .section-lead {
  max-width: 54em;
  color: var(--blue);
  font-size: 15.65px; /* mockup .lead = 0.978rem @16px */
}
.qa-restyle .section-note {
  max-width: 54em;
  margin-top: 20px;
}
.qa-restyle .micro {
  color: var(--muted);
  font-size: 13.28px; /* mockup .micro = .83rem @16px */
}
.qa-restyle .what-list {
  max-width: 58em;
  list-style: none;
  padding-left: 0;
}
.qa-restyle .what-list li {
  padding: 0 0 12px;
  color: var(--muted);
  font-size: 14.59px; /* mockup .what-list li = .912rem @16px */
}
.qa-restyle .what-list b {
  color: var(--ink);
}
.qa-restyle .card-grid {
  gap: 18px;
  margin-top: 26px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}
.qa-restyle .chan-grid {
  gap: 18px;
  margin-top: 26px;
  display: grid;
  grid-template-columns: 1fr 1fr;
}
.qa-restyle .dcard {
  padding: 22px;
  background: #fff;
  border: 1px solid var(--line);
  border-top: 3px solid var(--brand);
  border-top-left-radius: 4px;
  border-top-right-radius: 4px;
  box-shadow: 2px 3px 10px rgba(0, 0, 0, 0.06);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.qa-restyle .dcard h3 {
  margin-bottom: 6px;
  color: var(--brand);
  font-size: 15.95px; /* mockup .dcard h3 = .997rem @16px */
  font-weight: 500; /* mockup h1,h2,h3 */
  line-height: 1.25;
}
.qa-restyle .dcard h3 a {
  color: inherit;
  text-decoration: none;
}
.qa-restyle .dcard h3 a:hover {
  text-decoration: underline;
}
.qa-restyle .dcard p {
  color: var(--muted);
  font-size: 13.98px; /* mockup .dcard p = .874rem @16px */
}
.qa-restyle .dcard:hover {
  transform: translateY(-2px);
  box-shadow: 3px 6px 16px rgba(0, 0, 0, 0.1);
}
.qa-restyle .chan-head {
  display: flex;
  gap: 12px;
  margin-bottom: 4px;
  align-items: center;
}
.qa-restyle .chan-head .icos {
  display: flex;
  gap: 8px;
}
.qa-restyle .chan-head img {
  height: 30px;
  width: auto;
}
.qa-restyle .chan-head h3 {
  margin: 0;
  color: var(--brand);
  font-size: 18.88px; /* mockup .chan-head h3 = 1.18rem @16px */
}
.qa-restyle .chan-sub {
  margin: 0 0 6px;
  color: var(--muted);
  font-size: 15.2px; /* mockup .chan-sub = .95rem @16px */
}
.qa-restyle .chan-lab {
  margin-top: 16px;
  color: var(--muted);
  font-size: 12.16px; /* mockup .chan-lab = .76rem @16px */
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}
.qa-restyle .flist {
  margin: 8px 0 0;
  list-style: none;
  padding-left: 0; /* site has no *{padding:0} reset; kill the default ul indent (mockup is flush) */
}
.qa-restyle .flist li {
  position: relative;
  padding: 0 0 10px 24px;
  color: var(--ink);
  font-size: 14.4px; /* mockup .flist li = .9rem @16px */
  line-height: 1.5;
}
.qa-restyle .flist li::before {
  content: "✓";
  position: absolute;
  top: 0;
  left: 0;
  color: var(--brand);
  font-weight: 700;
}
.qa-restyle .flist li:last-child {
  padding-bottom: 0;
}
.qa-restyle .flist li b {
  color: var(--brand);
  font-weight: 600;
}
.qa-restyle .panel {
  padding: 24px 26px;
  margin-top: 24px;
  background: var(--brand-tint);
  border: 1px solid #E9D6D3;
  border-radius: 4px;
  box-shadow: 2px 3px 10px rgba(0, 0, 0, 0.07);
}
.qa-restyle .panel p {
  color: var(--ink);
}
.qa-restyle .panel p b {
  color: var(--brand);
  font-weight: 600;
}
.qa-restyle .checks {
  gap: 16px 30px;
  margin-top: 22px;
  list-style: none;
  padding-left: 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
}
.qa-restyle .checks li {
  position: relative;
  padding-left: 28px;
  color: var(--ink);
  font-size: 14.13px; /* mockup .checks li = .883rem @16px */
  line-height: 1.5;
}
.qa-restyle .checks li::before {
  content: "✓";
  position: absolute;
  top: 0;
  left: 0;
  color: var(--brand);
  font-weight: 700;
}
.qa-restyle .checks b {
  display: block;
  margin-bottom: 2px;
  color: var(--brand);
  font-weight: 600;
}
.qa-restyle .subhead {
  margin: 26px 0 2px;
  color: var(--ink);
  font-size: 16.64px; /* mockup .subhead = 1.04rem @16px */
  font-weight: 600;
}
.qa-restyle .subhead + .checks {
  margin-top: 14px;
}
.qa-restyle .steps {
  list-style: none;
  counter-reset: step;
  padding-left: 0;
}
.qa-restyle .steps li {
  position: relative;
  padding: 0 0 16px 40px;
  color: var(--muted);
  font-size: 14.43px; /* mockup .steps li = .902rem @16px */
  line-height: 1.55;
}
.qa-restyle .steps li::before {
  counter-increment: step;
  content: counter(step);
  position: absolute;
  top: 1px;
  left: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--brand);
  color: #fff;
  font-size: 12.91px; /* mockup .steps li::before = .807rem @16px */
  font-weight: 600;
}
.qa-restyle .steps li:last-child {
  padding-bottom: 0;
}
.qa-restyle .steps b {
  color: var(--ink);
}
.qa-restyle .split {
  gap: 40px;
  margin-top: 8px;
  display: grid;
  align-items: center;
  grid-template-columns: 1.25fr 0.75fr;
}
.qa-restyle .split.img-lg {
  grid-template-columns: 1.05fr 0.95fr;
}
.qa-restyle .split .profile-finder-wrap {
  justify-self: end;
}
.qa-restyle #segmentationSection .split {
  align-items: stretch;
}
.qa-restyle .pp-cta {
  max-width: 30em;
  color: var(--muted);
  font-size: 15.36px; /* mockup .pp-cta = .96rem @16px */
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid var(--line);
}
.qa-restyle .pp-cta b {
  color: var(--ink);
}
.qa-restyle .pp-cta a {
  color: var(--brand-dark);
  font-weight: 600;
  text-decoration: none;
}
.qa-restyle .pp-cta a:hover {
  text-decoration: underline;
}
.qa-restyle .fig {
  margin: 0;
  text-align: center;
  /* crop the washed-out left of the photo and let the subject
     on the right fill (and enlarge to) the column */
}
.qa-restyle .fig img {
  height: auto;
  max-width: 100%;
  border-radius: 4px;
}
.qa-restyle .fig.full img {
  width: 100%;
}
.qa-restyle .fig.crop-right {
  overflow: hidden;
  border-radius: 4px;
}
.qa-restyle .fig.crop-right img {
  display: block;
  width: 222.22%;
  max-width: none;
  margin-left: -122.22%;
}
.qa-restyle .demo-grid {
  gap: 48px;
  margin-top: 8px;
  display: grid;
  align-items: start;
  grid-template-columns: 1.15fr 0.85fr;
}
.qa-restyle .call-big {
  color: var(--ink);
  font-size: 22.8px; /* mockup .call-big = 1.425rem @16px */
  font-weight: 700;
}
.qa-restyle .call-big a {
  color: var(--ink);
  text-decoration: none;
}
.qa-restyle .cta-row {
  display: flex;
  gap: 14px;
  align-items: center;
  flex-wrap: wrap;
}
@media (width <= 980px) {
  .qa-restyle {
    /* .split.img-lg (0,3,0) out-specifies the plain .split collapse above, so it
       is listed explicitly — without it the Postcode Profiler split (home +
       segments, both .split.img-lg) and the Intelligence steps+image split stayed
       2-column and shrank instead of stacking. Once stacked, drop the form's
       justify-self:end so it sits at the left edge below the text, not floating
       right. */
    /* once stacked, the .split 40px column gap would become a tall vertical gap;
       20px read too tight at 769–980, so settle on a consistent 40px across the
       whole stacked range (paired with the margin-top:0 reset above). */
  }
  .qa-restyle section {
    padding-block: 40px;
  }
  .qa-restyle .card-grid,
  .qa-restyle .chan-grid,
  .qa-restyle .checks,
  .qa-restyle .split,
  .qa-restyle .split.img-lg,
  .qa-restyle .demo-grid {
    grid-template-columns: 1fr;
  }
  .qa-restyle .split .profile-finder-wrap {
    justify-self: start;
    /* a legacy global rule adds margin-top:5rem to .profile-finder-wrap at
       <=768px (scss ~1228), so the stacked gap jumped from 20px (769–980) to
       70px (<=768). Neutralise it so row-gap alone controls the gap at every
       stacked width. */
    margin-top: 0;
  }
  .qa-restyle .split.img-lg {
    row-gap: 40px;
  }
  .qa-restyle .hero-tag-row {
    gap: 14px;
    flex-direction: column;
    align-items: flex-start;
  }
  .qa-restyle .hero-tag-row .rda_btn {
    margin-left: 0;
  }
}

/* ============================================================
   Intelligence — inline "Talk to us" form
   Page-specific layer (NOT shared .qa-restyle yet: Intelligence is the
   only Stage-1 page carrying the inline form). Font sizes are explicit px
   at the mockup-raw ramp (px = mockup_rem × 16, i.e. F = 1.0),
   computed by formula — NOT via fontscale.py, which is non-idempotent.
   See [[project_intelligence_fontscale]].
   .error/.success/.global-message/.spinner are lifted here because
   contact.scss scopes them under #myContactModal, which is absent on this
   page (contact module dropped in _footer.php).
   ============================================================ */
.intelligence-page .form,
.living-insights-page .form,
.geotribes-page .form,
.about-page .form,
.geosmart-page .form,
.explorer-page .form {
  /* label + its validation message share one line above the field; the
     message (jQuery-validate) is the conditional "required" signal and
     only takes space once populated */
  /* right padding mirrors the button's left padding so the label centres;
     the left padding doubles as the spinner's lane (see .spinner below) */
  /* The spinner is pulled OUT of flow so it can't shove the label off
     centre and can't shift it when it toggles on at submit time (an
     in-flow spinner did both). It floats in the button's left padding,
     clear of the centred label. fa-spinner is circular, so fa-spin's
     rotation doesn't grow its box into the label. Vertical centring uses
     top + margin (NOT transform — fa-spin owns transform). Initially
     hidden: no modal-open event here to pre-hide it, and the shared
     submit handler reveals it via showUncollapsed(). */
}
.intelligence-page .form .field-label,
.living-insights-page .form .field-label,
.geotribes-page .form .field-label,
.about-page .form .field-label,
.geosmart-page .form .field-label,
.explorer-page .form .field-label {
  margin: 14px 0 4px;
  /* the field's own label only — NOT the injected <label class="error">
     validation message, which must keep its red .error colour */
}
.intelligence-page .form .field-label label:not(.error),
.living-insights-page .form .field-label label:not(.error),
.geotribes-page .form .field-label label:not(.error),
.about-page .form .field-label label:not(.error),
.geosmart-page .form .field-label label:not(.error),
.explorer-page .form .field-label label:not(.error) {
  color: var(--ink);
  font-weight: 600;
  font-size: 12.91px; /* mockup .form label = .807rem @16px */
}
.intelligence-page .form .field-label .error:not(:empty),
.living-insights-page .form .field-label .error:not(:empty),
.geotribes-page .form .field-label .error:not(:empty),
.about-page .form .field-label .error:not(:empty),
.geosmart-page .form .field-label .error:not(:empty),
.explorer-page .form .field-label .error:not(:empty) {
  margin-left: 8px;
}
.intelligence-page .form input,
.intelligence-page .form textarea,
.living-insights-page .form input,
.living-insights-page .form textarea,
.geotribes-page .form input,
.geotribes-page .form textarea,
.about-page .form input,
.about-page .form textarea,
.geosmart-page .form input,
.geosmart-page .form textarea,
.explorer-page .form input,
.explorer-page .form textarea {
  width: 100%;
  padding: 11px 12px;
  border: 1px solid var(--line);
  border-radius: 0; /* square per restyle (mockup used var(--radius)) */
  background: #ffffff;
  color: var(--ink);
  font-family: inherit;
  font-size: 14.43px; /* mockup .form input = .902rem @16px */
  box-sizing: border-box; /* no global border-box reset on this site */
}
.intelligence-page .form textarea,
.living-insights-page .form textarea,
.geotribes-page .form textarea,
.about-page .form textarea,
.geosmart-page .form textarea,
.explorer-page .form textarea {
  min-height: 104px;
  resize: vertical;
}
.intelligence-page .form .g-recaptcha,
.living-insights-page .form .g-recaptcha,
.geotribes-page .form .g-recaptcha,
.about-page .form .g-recaptcha,
.geosmart-page .form .g-recaptcha,
.explorer-page .form .g-recaptcha {
  margin-top: 14px;
}
.intelligence-page .form .micro,
.living-insights-page .form .micro,
.geotribes-page .form .micro,
.about-page .form .micro,
.geosmart-page .form .micro,
.explorer-page .form .micro {
  margin-top: 10px;
  color: var(--muted);
  font-size: 12.61px; /* mockup .micro = .788rem @16px */
}
.intelligence-page .form .rda_btn,
.living-insights-page .form .rda_btn,
.geotribes-page .form .rda_btn,
.about-page .form .rda_btn,
.geosmart-page .form .rda_btn,
.explorer-page .form .rda_btn {
  margin-top: 14px;
  position: relative; /* anchor the absolutely-placed .spinner */
}
.intelligence-page .form .spinner-on-left,
.living-insights-page .form .spinner-on-left,
.geotribes-page .form .spinner-on-left,
.about-page .form .spinner-on-left,
.geosmart-page .form .spinner-on-left,
.explorer-page .form .spinner-on-left {
  padding-inline-end: 2.7rem;
}
.intelligence-page .form .spinner,
.living-insights-page .form .spinner,
.geotribes-page .form .spinner,
.about-page .form .spinner,
.geosmart-page .form .spinner,
.explorer-page .form .spinner {
  position: absolute;
  left: 0.3em;
  top: 50%;
  margin-top: -0.5em;
  visibility: hidden;
}
.intelligence-page .form .error,
.intelligence-page .form .success,
.living-insights-page .form .error,
.living-insights-page .form .success,
.geotribes-page .form .error,
.geotribes-page .form .success,
.about-page .form .error,
.about-page .form .success,
.geosmart-page .form .error,
.geosmart-page .form .success,
.explorer-page .form .error,
.explorer-page .form .success {
  font-size: 12.61px;
}
.intelligence-page .form .error,
.living-insights-page .form .error,
.geotribes-page .form .error,
.about-page .form .error,
.geosmart-page .form .error,
.explorer-page .form .error {
  color: red;
  text-transform: lowercase;
}
.intelligence-page .form .success,
.living-insights-page .form .success,
.geotribes-page .form .success,
.about-page .form .success,
.geosmart-page .form .success,
.explorer-page .form .success {
  color: green;
}
.intelligence-page .form .global-message,
.living-insights-page .form .global-message,
.geotribes-page .form .global-message,
.about-page .form .global-message,
.geosmart-page .form .global-message,
.explorer-page .form .global-message {
  margin-top: 10px;
  min-height: 1.2em;
  visibility: hidden;
}

/* The floating "Talk to us" slidebox button is removed on Intelligence — the
   inline form is the sole contact path. #slidebox lives in the footer (outside
   .intelligence-page), so this is body-scoped. The slidebox module stays loaded
   (_footer.php) so its scroll-to-top positioning script survives. */
body.intelligence #slidebox {
  display: none;
}

/* same for Living Insights — the inline form is the sole contact path.
   NB: get_body_class() (config.php) maps CURRENT_PAGE hyphens to underscores,
   so the body class is 'living_insights', not 'living-insights'. */
body.living_insights #slidebox {
  display: none;
}

/* same for Segments — the inline form is the sole contact path. CURRENT_PAGE
   'segments' has no hyphen, so get_body_class() leaves the body class as
   'segments' (no underscore mapping). */
body.segments #slidebox {
  display: none;
}

/* same for About — the inline "Talk to us" form is the contact path; the floating
   slidebox button is hidden. CURRENT_PAGE 'about' has no hyphen, so the body class
   stays 'about'. Modal + slidebox module stay loaded (_footer.php). */
body.about #slidebox {
  display: none;
}

/* same for geoSmart — the inline "Talk to us" form is the contact path; the floating
   slidebox button is hidden. CURRENT_PAGE 'geosmart' has no hyphen, so the body class
   stays 'geosmart'. Modal + slidebox module stay loaded (_footer.php). */
body.geosmart #slidebox {
  display: none;
}

/* same for Explorer — the inline "Talk to us" form is the sole contact path; the
   floating slidebox button is hidden at all screen sizes. CURRENT_PAGE 'explorer' has
   no hyphen, so the body class stays 'explorer'. Modal + slidebox module stay loaded. */
body.explorer #slidebox {
  display: none;
}