/*
  BRIX Native Runtime CSS
  ----------------------------------------------------------------------------
  Purpose:
  - Replace Webflow runtime/component behavior removed during the PHP migration.
  - Keep shared interaction patterns reusable across future migrated pages.
  - Scope page-specific behavior to stable BRIX/Webflow-exported class names
    until those patterns are promoted into partial/component-specific files.

  Sections:
  1. Webflow Static Runtime Shims
  2. Dropdown + Tab State Contracts
  3. Typography + Reveal States
  4. Header Mega Menu Layout Fixes
  5. Button + Link Interaction Contract
  6. Marquee Systems + Project Hover CTA
  7. FAQ Accordion
  8. Footer Expand Interaction
  9. Video Lightbox
  10. Mobile Navigation + Mobile Component Overrides
  11. Performance Hints
*/

/* ==========================================================================
   1. Webflow Static Runtime Shims
   --------------------------------------------------------------------------
   Minimal Webflow utility primitives normally supplied by components.css.
   Keep this small; visual component overrides belong in later sections.
   ========================================================================== */

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

html {
  min-height: 100%;
}

body {
  min-height: 100%;
  margin: 0;
}

img {
  max-width: 100%;
  vertical-align: middle;
  display: inline-block;
}

.w-inline-block {
  max-width: 100%;
  display: inline-block;
}

.w-button {
  border: 0;
  line-height: inherit;
  text-decoration: none;
  cursor: pointer;
}

.w-form {
  margin: 0 0 15px;
}

.w-form-label {
  display: inline-block;
  margin-bottom: 0;
  font-weight: 400;
  cursor: pointer;
}

.w-radio {
  display: block;
  margin-bottom: 5px;
  padding-left: 20px;
}

.w-radio:before,
.w-radio:after {
  content: " ";
  display: table;
  grid-column-start: 1;
  grid-row-start: 1;
  grid-column-end: 2;
  grid-row-end: 2;
}

.w-radio:after {
  clear: both;
}

.w-radio-input {
  float: left;
  margin: 3px 0 0 -20px;
  line-height: normal;
}

.w-container {
  margin-left: auto;
  margin-right: auto;
}

.w-container:before,
.w-container:after,
.w-embed:before,
.w-embed:after,
.w-nav:before,
.w-nav:after,
.w-tabs:before,
.w-tabs:after {
  content: " ";
  display: table;
  grid-column-start: 1;
  grid-row-start: 1;
  grid-column-end: 2;
  grid-row-end: 2;
}

.w-container:after,
.w-embed:after,
.w-nav:after,
.w-tabs:after {
  clear: both;
}

.w-nav {
  z-index: 1000;
  position: relative;
}

.w-nav-brand {
  position: relative;
  text-decoration: none;
}

.w-nav-link {
  position: relative;
  display: inline-block;
  vertical-align: top;
  text-decoration: none;
  text-align: left;
}

.w-nav-menu {
  position: relative;
}

.w-nav-button {
  display: none;
  cursor: pointer;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  user-select: none;
}

/* ==========================================================================
   2. Dropdown + Tab State Contracts
   --------------------------------------------------------------------------
   JS toggles .is-open/.w--open and .w--tab-active. CSS owns animation.
   ========================================================================== */

.w-dropdown {
  position: relative;
  display: inline-block;
  text-align: left;
  z-index: 900;
}

.w-dropdown-toggle {
  position: relative;
  user-select: none;
  cursor: pointer;
}

.w-dropdown-list {
  display: block;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  filter: blur(8px);
  transform: translate3d(0, 10px, 0);
  transform-origin: top center;
  transition: opacity 180ms ease, transform 180ms ease, filter 180ms ease, visibility 180ms ease;
  position: absolute;
  top: 100%;
  min-width: 100%;
  z-index: 901;
}

.w-dropdown.is-open,
.w-dropdown.w--open {
  z-index: 950;
}

.w-dropdown.is-open > .w-dropdown-list,
.w-dropdown.w--open > .w-dropdown-list {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  filter: blur(0);
  transform: translate3d(0, 0, 0);
  display: block;
}

.header .w-dropdown.is-open > .w-dropdown-list,
.header .w-dropdown.w--open > .w-dropdown-list {
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto !important;
  filter: blur(0) !important;
  transform: translate3d(0, 0, 0) !important;
  display: block !important;
}

.header .w-dropdown:not(.is-open):not(.w--open) > .w-dropdown-list,
.header .w-dropdown:not(.is-open):not(.w--open) > .w-dropdown-list * {
  pointer-events: none !important;
}

@media screen and (min-width: 992px) {
  .header .nav-menu {
    display: flex !important;
    width: auto !important;
    height: auto !important;
    overflow: visible !important;
    position: static !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;
    filter: none !important;
    transform: none !important;
  }

  .header .nav-menu-wrapper-v2 {
    flex-direction: row !important;
    align-items: center !important;
    width: auto !important;
    height: auto !important;
    min-height: 0 !important;
  }

  .header .dropdown-link-v2.w-dropdown {
    display: inline-block !important;
    width: auto !important;
    height: auto !important;
    min-height: 0 !important;
    position: relative !important;
  }

  .header .dropdown-link-v2 > .w-dropdown-toggle {
    width: auto !important;
    min-height: 0 !important;
  }

  .header .nav-link-v2 {
    position: relative;
    isolation: isolate;
    background-color: transparent !important;
    border-color: transparent !important;
    transition: color .4s;
  }

  .header .nav-link-v2::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    border: 1px solid #ebeff6;
    border-radius: 8px;
    background-color: #f6f8fc;
    box-shadow: 0 1px 6px #2337800d;
    opacity: 0;
    transform: translate3d(0, 1px, 0);
    transition: opacity .4s, transform .4s;
    pointer-events: none;
  }

  .header .nav-link-v2:hover,
  .header .nav-link-v2:focus-visible,
  .header .w-dropdown.is-open > .nav-link-v2,
  .header .w-dropdown.w--open > .nav-link-v2 {
    color: #19213d;
    background-color: transparent !important;
    border-color: transparent !important;
    box-shadow: none !important;
  }

  .header .nav-link-v2:hover::before,
  .header .nav-link-v2:focus-visible::before,
  .header .w-dropdown.is-open > .nav-link-v2::before,
  .header .w-dropdown.w--open > .nav-link-v2::before {
    opacity: 1;
  }
}

/* ==========================================================================
   3. Typography + Reveal States
   --------------------------------------------------------------------------
   Shared section heading rhythm plus Webflow IX2 reveal replacements.
   ========================================================================== */

.brix-native-runtime .subtitle:has(+ .heading-size-h2),
.brix-native-runtime .subtitle:has(+ .heading-size-h1),
.brix-native-runtime .subtitle:has(+ .display-1),
.brix-native-runtime .subtitle:has(+ .display-2),
.brix-native-runtime .subtitle:has(+ .display-3),
.brix-native-runtime .subtitle:has(+ .display-4),
.brix-native-runtime .subtitle:has(+ h1),
.brix-native-runtime .subtitle:has(+ h2),
.brix-native-runtime .subtitle:has(+ h3) {
  margin-bottom: 10px;
}

.brix-native-runtime .subtitle + .heading-size-h2,
.brix-native-runtime .subtitle + .heading-size-h1,
.brix-native-runtime .subtitle + .display-1,
.brix-native-runtime .subtitle + .display-2,
.brix-native-runtime .subtitle + .display-3,
.brix-native-runtime .subtitle + .display-4,
.brix-native-runtime .subtitle + h1,
.brix-native-runtime .subtitle + h2,
.brix-native-runtime .subtitle + h3 {
  margin-top: 0;
}

/* Testimonial tabs keep Webflow's .w--current/.w--tab-active state contract. */
.w-tabs {
  position: relative;
}

.w-tab-menu {
  position: relative;
}

.w-tab-link {
  position: relative;
  display: inline-block;
  vertical-align: top;
  text-decoration: none;
  text-align: left;
  cursor: pointer;
}

.w-tab-content {
  position: relative;
  display: block;
  overflow: hidden;
}

.w-tab-pane {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  filter: blur(7px);
  transform: translate3d(0, 10px, 0);
  transition: opacity 240ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 240ms cubic-bezier(0.16, 1, 0.3, 1),
    filter 240ms cubic-bezier(0.16, 1, 0.3, 1),
    visibility 240ms ease;
  position: absolute;
  inset: 0;
  display: block;
}

.w-tab-pane.w--tab-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  filter: blur(0);
  transform: translate3d(0, 0, 0);
  position: relative;
  display: block;
}

.w-json {
  display: none !important;
}

.brix-native-runtime.is-loader-running:not(.is-loader-complete) .loader {
  background-color: var(--neutral--100);
  opacity: 1;
  visibility: visible;
  display: flex;
  transform: translate3d(0, 0, 0);
}

.brix-native-runtime.is-loader-complete .loader {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  display: flex;
  transform: translate3d(0, -100%, 0);
}

.brix-native-runtime.is-loader-skipped .loader {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  display: none !important;
}

.brix-native-runtime.is-loader-running:not(.is-loader-complete) .loader-logo-image {
  display: block;
  opacity: 0;
  transform: none;
}

[data-brix-reveal] {
  opacity: 0;
  filter: blur(10px);
  will-change: opacity, transform, filter;
}

.brix-reveal-managed {
  filter: blur(10px);
  will-change: opacity, transform, filter;
}

.hero-video-embed[data-brix-reveal],
.hero-video-embed.brix-reveal-managed {
  filter: none;
}

[data-brix-reveal].brix-reveal-visible,
.brix-reveal-visible {
  opacity: 1;
  filter: blur(0);
}

.section.horizontal-scroll-section.brix-variant-blue,
.brix-variant-blue {
  background-color: var(--secondary--blue-300);
}

.section.horizontal-scroll-section.brix-variant-bright-blue,
.brix-variant-bright-blue {
  background-color: var(--secondary--blue-200);
}

.page-saas-website-design-agency .section.horizontal-scroll-section.brix-variant-blue,
.page-saas-ui-ux-design .section.horizontal-scroll-section.brix-variant-blue {
  background-color: var(--secondary--blue-200);
}

.page-saas-website-design-agency .horizontal-item-image-wrapper.brix-variant-blue,
.page-saas-ui-ux-design .horizontal-item-image-wrapper.brix-variant-blue {
  background-color: #edf3fc;
}

.page-nocode-agency .horizontal-wrapper-content[data-brix-reveal].brix-reveal-managed {
  transition-property: opacity, filter, transform;
}

.page-nocode-agency .horizontal-wrapper-reveal-shell {
  width: 100%;
}

.page-nocode-agency .cta.nocode-cta .container-default {
  max-width: 1240px;
}

.page-nocode-agency .cta.nocode-cta .cta-wrapper.nocode-cta-wrapper {
  max-width: 540px;
}

.page-nocode-agency .cta.nocode-cta .cta-coins-bg-wrapper {
  max-width: 520px;
}

@media screen and (min-width: 992px) {
  .page-nocode-agency .cta.nocode-cta.nocode-cta-compact .container-default {
    max-width: 1088px;
  }

  .page-nocode-agency .cta.nocode-cta.nocode-cta-compact .cta-wrapper.nocode-cta-wrapper {
    max-width: 520px;
  }

  .page-nocode-agency .cta.nocode-cta.nocode-cta-compact .cta-coins-bg-wrapper {
    left: calc(50% + 74px);
    right: auto;
  }

  .page-nocode-agency .cta.nocode-cta.nocode-cta-compact.nocode-cta-compact-reverse .cta-coins-bg-wrapper {
    left: calc(50% - 442px);
    right: auto;
  }
}

.page-nocode-agency .nocode-integrations-wrapper .circular-icons-large-image {
  animation: brix-nocode-integrations-rotate-left 80s linear infinite;
  transform-origin: center center;
  will-change: transform;
}

.page-nocode-agency .nocode-integrations-wrapper .circular-icons-small-image {
  animation: brix-nocode-integrations-rotate-right 80s linear infinite;
  transform-origin: center center;
  will-change: transform;
}

.page-programmatic-seo-agency p {
  margin-top: 0;
}

.page-jetboost-agency p,
.page-memberstack-agency p {
  margin-top: 0;
}

.page-memberstack-agency .cta---radius-grid.memberstack-cta .cta-radius-grid-item.membertsack-item {
  border-color: rgba(255, 255, 255, 0.24);
}

.page-programmatic-seo-agency .programmatic-reveal-block.brix-reveal-managed,
.page-programmatic-seo-agency .programmatic-reveal-image.brix-reveal-managed {
  transition-duration: 900ms !important;
  transition-property: opacity, transform, filter !important;
  transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1) !important;
}

@keyframes brix-nocode-integrations-rotate-left {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(-360deg);
  }
}

@keyframes brix-nocode-integrations-rotate-right {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(360deg);
  }
}

/* City local-service hero image has no exported Webflow IX2 data-w-id, so the
   native runtime owns its entrance reveal by component class. */
.page-city-web-design .landing-image-wrapper.city-page:not(.brix-reveal-visible) {
  opacity: 0;
  filter: blur(10px);
  transform: translate3d(0, 20px, 0);
  will-change: opacity, transform, filter;
}

.page-city-web-design .card.features-card > div:last-child {
  align-self: flex-start;
}

.page-city-web-design .features-card-heading {
  margin-top: 0;
}

.page-city-web-design .features-card-text {
  margin-top: 10px;
}

.page-city-web-design .text-center p,
.page-city-web-design .features-card-text,
.page-city-web-design .faqs-title {
  text-wrap: auto;
}

.card.features-card.brix-feature-horizontal {
  text-align: left;
  flex-flow: row;
  justify-content: flex-start;
  align-items: flex-start;
}

.card.features-card.brix-feature-horizontal .features-card-heading,
.card.features-card.brix-feature-horizontal .features-card-text {
  margin-top: 0;
}

.webflow-migration-features-section .card.features-card {
  gap: 0;
  grid-column-gap: 0;
  grid-row-gap: 0;
  row-gap: 0;
}

.webflow-migration-features-section .features-card-icon-wrapper {
  margin-bottom: 13px;
}

.webflow-migration-features-section .features-card-heading {
  margin-top: 0;
  margin-bottom: 4px;
}

.webflow-migration-features-section .features-card-text {
  margin-top: 0;
}

/* ==========================================================================
   4. Header Mega Menu Layout Fixes
   --------------------------------------------------------------------------
   Desktop dropdown layout parity plus animated Services/Technologies panel
   switching. Mobile-specific dropdown rules are in section 9.
   ========================================================================== */

.megamenu-link-wrapper-v2.w-inline-block,
.megemanu-link-wrapper.w-inline-block,
.product-featured-link-v2.w-inline-block,
.resource-featured-wrapper-v2.w-inline-block,
.footer-link.icon-link.w-inline-block {
  display: flex;
}

.resources-dropdown-list .resource-featured-wrapper-v2 {
  align-items: flex-start;
}

.resources-dropdown-list .resource-featured-wrapper-v2:not(.simple-card) {
  gap: 12px;
  padding: 22px 24px;
}

.resources-dropdown-list .megemanu-link-wrapper.resources-dropdown {
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
}

.resources-dropdown-list .icon-wrapper.resource-icon {
  margin-bottom: 0;
  margin-right: 0;
}

.resources-dropdown-list .resource-featured-title-v2 {
  margin-bottom: 5px;
}

.resources-dropdown-list .resource-featured-paragraph {
  margin-top: 0;
  margin-bottom: 0;
  line-height: 1.45em;
}

.resources-dropdown-list .resource-featured-wrapper-v2.simple-card {
  justify-content: center;
  gap: 20px;
  padding: 24px 20px;
}

.resources-dropdown-list .resource-featured-list-v2 {
  gap: 15px;
  justify-content: center;
}

.resources-dropdown-list .megemanu-link-wrapper.simple-link {
  align-items: center;
}

.resources-dropdown-list .resource-featured-wrapper-v2.simple-card .arrow-link-v2 {
  margin-top: 2px;
}

.services-dropdown-list .megamenu-right-content-v2 {
  position: relative;
  min-height: 342px;
}

.services-dropdown-list .megamenu-right-content-item {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  filter: blur(8px);
  transform: translate3d(0, 10px, 0);
  transition: opacity 190ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 190ms cubic-bezier(0.16, 1, 0.3, 1),
    filter 190ms cubic-bezier(0.16, 1, 0.3, 1),
    visibility 190ms ease;
  position: absolute !important;
  inset: 0;
  display: block !important;
}

.services-dropdown-list .megamenu-right-content-item.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  filter: blur(0);
  transform: translate3d(0, 0, 0);
  position: absolute !important;
  display: block !important;
}

.services-dropdown-list .megamenu-sidebar-item {
  opacity: 0.5;
  transition: opacity 220ms ease, transform 220ms ease;
}

.services-dropdown-list .megamenu-sidebar-arrow.services {
  transition: color 220ms ease, transform 220ms ease, border-color 220ms ease, box-shadow 220ms ease;
}

.services-dropdown-list .megamenu-sidebar-item.is-active {
  opacity: 1;
}

.services-dropdown-list .megamenu-sidebar-item.is-active .megamenu-sidebar-arrow.services {
  color: #0a80ff;
  transform: rotate(45deg);
}

@media screen and (min-width: 992px) {
  .dropdown-list-wrapper-v2.services-dropdown-list {
    min-height: 0;
    padding: 12px;
    transition: height 260ms cubic-bezier(0.16, 1, 0.3, 1);
    will-change: height;
  }

  .services-dropdown-list .dropdown-list-content {
    gap: 16px;
    align-items: stretch;
  }

  .services-dropdown-list .megamenu-left-bar-v2 {
    flex: 0 0 290px;
    background-color: transparent;
    border-radius: 0;
    padding: 0;
    display: flex;
    min-width: 290px;
    max-width: 290px;
  }

  .services-dropdown-list .megamenu-right-content-v2 {
    height: var(--brix-services-panel-height, auto);
    min-height: 0;
    padding: 4px 12px 4px 0;
    overflow: hidden;
    transition: height 260ms cubic-bezier(0.16, 1, 0.3, 1);
    will-change: height;
  }

  .services-dropdown-list .megamenu-sidebar-wrapper {
    display: flex;
    flex-direction: column;
    gap: 12px;
    width: 100%;
    height: 100%;
  }

  .services-dropdown-list .megamenu-sidebar-item {
    background-color: #f6f8fc;
    border: 1px solid transparent;
    border-radius: 16px;
    display: flex;
    flex: 1 1 0;
    flex-direction: column;
    justify-content: flex-end;
    min-height: 0;
    padding: 28px 24px 38px;
    position: relative;
    transition: opacity 220ms ease, transform 220ms ease, background-color 220ms ease, border-color 220ms ease, box-shadow 220ms ease;
  }

  .services-dropdown-list .megamenu-sidebar-item-heading-wrapper {
    display: block;
    margin-bottom: 8px;
    padding-right: 42px;
  }

  .services-dropdown-list .megamenu-sidebar-arrow.services {
    position: absolute;
    top: 32px;
    right: 30px;
  }

  .services-dropdown-list .megamenu-sidebar-item:hover,
  .services-dropdown-list .megamenu-sidebar-item.is-active {
    background-color: #f8faff;
    border-color: #ebeff6;
    box-shadow: 0 8px 20px rgba(20, 20, 43, 0.06);
    transform: translate3d(0, -1px, 0);
  }

  .services-dropdown-list .megamenu-sidebar-item:hover .megamenu-sidebar-arrow.services {
    color: #0a80ff;
    transform: rotate(45deg);
  }

  .services-dropdown-list .dropdown-list-grid.v2 {
    grid-column-gap: 16px;
    grid-row-gap: 8px;
    align-content: start;
  }

  .services-dropdown-list .megamenu-right-content-item.integrations .dropdown-list-grid.v2 {
    align-content: start;
    min-height: 0;
  }

  .services-dropdown-list .megamenu-link-wrapper-v2 {
    min-height: 76px;
    padding: 12px 14px;
    transform-origin: center;
  }

  .services-dropdown-list .megamenu-link-wrapper-v2:hover {
    transform: translate3d(0, -1px, 0) scale3d(1.012, 1.012, 1.001);
  }

  .services-dropdown-list .megamenu-right-content-item.features .dropdown-list-grid.v2 {
    grid-row-gap: 8px;
  }

  .services-dropdown-list .service-menu-link-2 {
    align-self: center;
    margin-top: 2px;
  }
}

/* ==========================================================================
   5. Button + Link Interaction Contract
   --------------------------------------------------------------------------
   Native, reusable interaction layer for all BRIX button families.
   ========================================================================== */

.button-primary,
.button-secondary,
.button-primary-header,
.button-primary.w-button,
.button-secondary.w-button {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  gap: 8px;
  transition-property: color, background-color, border-color, box-shadow, transform;
  transition-duration: 220ms;
  transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

.button-secondary.video-home > div,
.button-primary .button-text-container {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  gap: 8px;
}

.button-primary .button-icon,
.button-secondary .button-icon,
.button-primary-header .button-icon,
.project-item-btn .button-icon,
.project-item-btn .ba-link__icon {
  margin-left: 0;
  transition: transform 350ms ease;
  will-change: transform;
}

.button-primary:hover .button-icon,
.button-secondary:hover .button-icon,
.button-primary-header:hover .button-icon,
.project-item-btn-wrapper:hover .project-item-btn .button-icon,
.project-item-btn-wrapper:hover .project-item-btn .ba-link__icon {
  transform: translate3d(3px, 0, 0);
}

.testmonials-tabs-right-content {
  cursor: default;
}

.testmonials-tabs-right-content .image-gallery-btn-wrapper {
  display: none;
}

.button-primary.white:hover {
  color: var(--webflow);
  background-color: var(--neutral--100);
  border-color: var(--neutral--100);
  transform: translate3d(0, -4px, 0.001px);
  box-shadow: 0 10px 24px rgba(25, 33, 61, 0.16);
}

.button-primary.white.color-framer:hover {
  color: var(--framer-blue);
}

.button-primary.white.color-wordpress:hover {
  color: var(--wordpress);
}

.button-primary.white.color-bolt:hover {
  color: var(--bolt-dark-blue);
}

.button-primary.white.color-v0:hover {
  color: var(--v0-dark);
}

.button-primary.white.color-lovable:hover {
  color: var(--lovable-dark);
}

/* Glide: white buttons keep their dark text on hover (color-dark-glide and the
   "glide" component variant), instead of falling back to the default blue. */
.button-primary.white.color-dark-glide:hover,
.button-primary.white:where(.w-variant-fcbddcea-6cfe-0f97-0de0-a3eab2e1c40b):hover {
  color: var(--glide-dark-hue--color-1);
}

.button-primary.white:hover .button-icon {
  transform: translate3d(3px, 0, 0) !important;
}

.ba-button {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-width: 154px;
  padding: 18px 32px;
  border-radius: 999px;
  font: 700 16px/1.1 Figtree, sans-serif;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  overflow: hidden;
  transform: translate3d(0, 0, .001px);
}

.ba-button .ti,
.ba-button .button-icon {
  flex: 0 0 18px;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  line-height: 1;
  opacity: .94;
  transform: translate3d(0, 0, .001px);
  transition: transform 240ms cubic-bezier(.2, .8, .2, 1), opacity 240ms cubic-bezier(.2, .8, .2, 1);
}

.ba-button:hover .ti,
.ba-button:focus-visible .ti,
.ba-button:hover .button-icon,
.ba-button:focus-visible .button-icon {
  opacity: 1;
  transform: translate3d(4px, 0, .001px);
}

.ba-button-primary {
  color: var(--neutral--100);
  background: linear-gradient(180deg, #ff3a52 0%, var(--primary--red) 100%);
  border: 1px solid var(--primary--red);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(255, 45, 70, .17);
  transition: transform 240ms cubic-bezier(.2, .8, .2, 1), background-color 240ms cubic-bezier(.2, .8, .2, 1), border-color 240ms cubic-bezier(.2, .8, .2, 1), box-shadow 240ms cubic-bezier(.2, .8, .2, 1);
}

.ba-button-primary:hover,
.ba-button-primary:focus-visible {
  color: var(--neutral--100);
  background: linear-gradient(180deg, #ff354e 0%, #f32740 100%);
  border-color: #f32740;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px rgba(255, 45, 70, .10), 0 10px 22px rgba(255, 45, 70, .18);
  transform: translate3d(0, -2px, .001px);
  outline: 0;
}

.ba-button-primary-white {
  color: var(--webflow);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border: 1px solid var(--neutral--100);
  box-shadow: inset 0 1px 0 #fff, 0 4px 12px rgba(255, 255, 255, .12);
}

.ba-button-primary-white:hover,
.ba-button-primary-white:focus-visible {
  color: var(--webflow);
  background: linear-gradient(180deg, #fff 0%, #f8faff 100%);
  border-color: var(--neutral--100);
  box-shadow: inset 0 1px 0 #fff, 0 0 0 4px rgba(255, 255, 255, .12), 0 10px 24px rgba(25, 33, 61, .16);
}

.ba-button-primary-webflow {
  background: linear-gradient(180deg, #2b90ff 0%, var(--webflow) 100%);
  border-color: var(--webflow);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(28, 127, 241, .17);
}

.ba-button-primary-webflow:hover,
.ba-button-primary-webflow:focus-visible {
  background: linear-gradient(180deg, #268aff 0%, #176fe0 100%);
  border-color: #176fe0;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px rgba(28, 127, 241, .10), 0 10px 22px rgba(28, 127, 241, .18);
}

.ba-button-primary-framer {
  background: linear-gradient(180deg, #1e91ff 0%, var(--framer-blue) 100%);
  border-color: var(--framer-blue);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(8, 131, 255, .17);
}

.ba-button-primary-framer:hover,
.ba-button-primary-framer:focus-visible {
  background: linear-gradient(180deg, #188cff 0%, #0674e5 100%);
  border-color: #0674e5;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px rgba(8, 131, 255, .10), 0 10px 22px rgba(8, 131, 255, .18);
}

.ba-button-primary-wordpress {
  background: linear-gradient(180deg, #4868ff 0%, #3858e9 100%);
  border-color: #3858e9;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(56, 88, 233, .18);
}

.ba-button-primary-wordpress:hover,
.ba-button-primary-wordpress:focus-visible {
  background: linear-gradient(180deg, #405ff4 0%, #314ed2 100%);
  border-color: #314ed2;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px rgba(56, 88, 233, .10), 0 10px 22px rgba(56, 88, 233, .18);
}

.ba-button-primary-glide {
  background: linear-gradient(180deg, #29273a 0%, var(--glide-dark-hue--color-1) 100%);
  border-color: var(--glide-dark-hue--color-1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .16), 0 4px 12px rgba(17, 18, 23, .18);
}

.ba-button-primary-glide:hover,
.ba-button-primary-glide:focus-visible {
  background: linear-gradient(180deg, #1f1f2d 0%, #050609 100%);
  border-color: #050609;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 0 0 4px rgba(17, 18, 23, .10), 0 10px 22px rgba(17, 18, 23, .20);
}

.ba-button-primary-midjourney {
  background: linear-gradient(180deg, #2a2d35 0%, var(--midjourney) 100%);
  border-color: var(--midjourney);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14), 0 4px 12px rgba(28, 30, 36, .18);
}

.ba-button-primary-midjourney:hover,
.ba-button-primary-midjourney:focus-visible {
  background: linear-gradient(180deg, #22242b 0%, #101116 100%);
  border-color: #101116;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .18), 0 0 0 4px rgba(28, 30, 36, .10), 0 10px 22px rgba(28, 30, 36, .20);
}

.ba-button-primary-figma-dark {
  background: linear-gradient(180deg, #353535 0%, var(--figma-dark) 100%);
  border-color: var(--figma-dark);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14), 0 4px 12px rgba(22, 22, 22, .18);
}

.ba-button-primary-figma-dark:hover,
.ba-button-primary-figma-dark:focus-visible {
  background: linear-gradient(180deg, #272727 0%, #0f0f0f 100%);
  border-color: #0f0f0f;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .18), 0 0 0 4px rgba(22, 22, 22, .10), 0 10px 22px rgba(22, 22, 22, .18);
}

.ba-button-primary-bolt {
  background: linear-gradient(180deg, #339eff 0%, var(--bolt-blue) 100%);
  border-color: var(--bolt-blue);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(41, 150, 255, .18);
}

.ba-button-primary-bolt:hover,
.ba-button-primary-bolt:focus-visible {
  background: linear-gradient(180deg, #2996ff 0%, #1e83fc 100%);
  border-color: #1e83fc;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .22), 0 0 0 4px rgba(41, 150, 255, .10), 0 10px 22px rgba(41, 150, 255, .18);
}

.ba-button-primary-v0 {
  background: linear-gradient(180deg, #2c2c2c 0%, var(--v0-dark) 100%);
  border-color: var(--v0-dark);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14), 0 4px 12px rgba(19, 19, 19, .18);
}

.ba-button-primary-v0:hover,
.ba-button-primary-v0:focus-visible {
  background: linear-gradient(180deg, #242424 0%, #0b0b0b 100%);
  border-color: #0b0b0b;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .18), 0 0 0 4px rgba(19, 19, 19, .10), 0 10px 22px rgba(19, 19, 19, .18);
}

.ba-button-primary-lovable {
  background: linear-gradient(180deg, #3b2b48 0%, var(--lovable-dark) 100%);
  border-color: var(--lovable-dark);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14), 0 4px 12px rgba(45, 33, 55, .18);
}

.ba-button-primary-lovable:hover,
.ba-button-primary-lovable:focus-visible {
  background: linear-gradient(180deg, #352640 0%, #21172a 100%);
  border-color: #21172a;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .18), 0 0 0 4px rgba(45, 33, 55, .10), 0 10px 22px rgba(45, 33, 55, .18);
}

.ba-button-primary-blue-300 {
  background: linear-gradient(180deg, #2472e3 0%, var(--secondary--blue-300) 100%);
  border-color: var(--secondary--blue-300);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(35, 107, 210, .18);
}

.ba-button-primary-blue-300:hover,
.ba-button-primary-blue-300:focus-visible {
  background: linear-gradient(180deg, #1f69d3 0%, #1558bc 100%);
  border-color: #1558bc;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .22), 0 0 0 4px rgba(35, 107, 210, .10), 0 10px 22px rgba(35, 107, 210, .18);
}

.ba-button-primary-dark-blue {
  background: linear-gradient(180deg, #2f3853 0%, var(--secondary--dark-blue) 100%);
  border-color: var(--secondary--dark-blue);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .16), 0 4px 12px rgba(35, 42, 63, .18);
}

.ba-button-primary-dark-blue:hover,
.ba-button-primary-dark-blue:focus-visible {
  background: linear-gradient(180deg, #29314a 0%, #1b2134 100%);
  border-color: #1b2134;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 0 0 4px rgba(35, 42, 63, .10), 0 10px 22px rgba(35, 42, 63, .20);
}

.ba-button-primary-jetboost {
  background: linear-gradient(180deg, #7082ee 0%, var(--jetboost-colors--accent) 100%);
  border-color: var(--jetboost-colors--accent);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(94, 114, 228, .18);
}

.ba-button-primary-jetboost:hover,
.ba-button-primary-jetboost:focus-visible {
  background: linear-gradient(180deg, #566be7 0%, var(--jetboost-colors--hover) 100%);
  border-color: var(--jetboost-colors--hover);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px rgba(94, 114, 228, .10), 0 10px 22px rgba(94, 114, 228, .18);
}

.ba-button-primary-memberstack {
  background: linear-gradient(180deg, #5a68ff 0%, var(--memberstack-colors--accent) 100%);
  border-color: var(--memberstack-colors--accent);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px rgba(67, 83, 255, .18);
}

.ba-button-primary-memberstack:hover,
.ba-button-primary-memberstack:focus-visible {
  background: linear-gradient(180deg, #6673ff 0%, var(--memberstack-colors--hover) 100%);
  border-color: var(--memberstack-colors--hover);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px rgba(67, 83, 255, .10), 0 10px 22px rgba(67, 83, 255, .18);
}

.ba-button-primary-white-framer { color: var(--framer-blue); }
.ba-button-primary-white-wordpress { color: var(--wordpress); }
.ba-button-primary-white-glide { color: var(--glide-dark-hue--color-1); }
.ba-button-primary-white-midjourney { color: var(--midjourney); }
.ba-button-primary-white-figma-dark { color: var(--figma-dark); }
.ba-button-primary-white-bolt { color: var(--bolt-dark-blue); }
.ba-button-primary-white-v0 { color: var(--v0-dark); }
.ba-button-primary-white-lovable { color: var(--lovable-dark); }
.ba-button-primary-white-blue-300 { color: var(--secondary--blue-300); }
.ba-button-primary-white-dark-blue { color: var(--secondary--dark-blue); }
.ba-button-primary-white-jetboost { color: var(--jetboost-colors--accent); }
.ba-button-primary-white-memberstack { color: var(--memberstack-colors--accent); }

.ba-button-secondary {
  color: var(--neutral--800);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border: 1px solid #e2e6ef;
  font-weight: 600;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 1px rgba(255, 255, 255, .6), 0 4px 12px rgba(25, 33, 61, .045);
  transition: transform 240ms cubic-bezier(.2, .8, .2, 1), border-color 240ms cubic-bezier(.2, .8, .2, 1), background-color 240ms cubic-bezier(.2, .8, .2, 1), box-shadow 240ms cubic-bezier(.2, .8, .2, 1), color 240ms cubic-bezier(.2, .8, .2, 1);
}

.ba-button-secondary:hover,
.ba-button-secondary:focus-visible {
  color: var(--neutral--800);
  background: linear-gradient(180deg, #fff 0%, #f8faff 100%);
  border-color: #c4ccdb;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 4px rgba(25, 33, 61, .035), 0 10px 22px rgba(25, 33, 61, .08);
  transform: translate3d(0, -3px, .001px);
  outline: 0;
}

.ba-button-large {
  min-width: 178px;
  padding: 24px 46px;
  font-size: 20px;
}

.ba-button-small {
  min-width: 0;
  padding: 16px 18px;
  font-size: 14px;
}

.ba-button-header.header-button {
  display: none;
}

.ba-button-theme-custom.ba-button-primary {
  background: linear-gradient(180deg, color-mix(in srgb, var(--ba-button-bg) 88%, white) 0%, var(--ba-button-bg) 100%);
  border-color: var(--ba-button-border);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .20), 0 4px 12px color-mix(in srgb, var(--ba-button-bg) 18%, transparent);
}

.ba-button-theme-custom.ba-button-primary:hover,
.ba-button-theme-custom.ba-button-primary:focus-visible {
  background: linear-gradient(180deg, color-mix(in srgb, var(--ba-button-hover-bg) 90%, white) 0%, var(--ba-button-hover-bg) 100%);
  border-color: var(--ba-button-hover-border);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .24), 0 0 0 4px color-mix(in srgb, var(--ba-button-bg) 10%, transparent), 0 10px 22px color-mix(in srgb, var(--ba-button-bg) 18%, transparent);
}

.ba-button-theme-custom.ba-button-primary-white {
  color: var(--ba-button-color);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border-color: var(--neutral--100);
  box-shadow: inset 0 1px 0 #fff, 0 4px 12px rgba(255, 255, 255, .12);
}

.ba-button-theme-custom.ba-button-primary-white:hover,
.ba-button-theme-custom.ba-button-primary-white:focus-visible {
  color: var(--ba-button-hover-color);
  background: linear-gradient(180deg, #fff 0%, #f8faff 100%);
  border-color: var(--neutral--100);
  box-shadow: inset 0 1px 0 #fff, 0 0 0 4px rgba(255, 255, 255, .12), 0 10px 24px rgba(25, 33, 61, .16);
}

.ba-button-theme-custom.ba-button-secondary {
  color: var(--ba-button-bg);
  border-color: color-mix(in srgb, var(--ba-button-bg) 28%, #e2e6ef);
}

.ba-button-theme-custom.ba-button-secondary:hover,
.ba-button-theme-custom.ba-button-secondary:focus-visible {
  color: var(--ba-button-hover-bg);
  border-color: color-mix(in srgb, var(--ba-button-bg) 42%, #e2e6ef);
  box-shadow: inset 0 1px 0 #fff, 0 0 0 4px color-mix(in srgb, var(--ba-button-bg) 6%, transparent), 0 10px 22px color-mix(in srgb, var(--ba-button-bg) 10%, transparent);
}

.ba-button-dropdown {
  position: relative;
  width: max-content;
  max-width: 100%;
  perspective: 900px;
}

.ba-button-dropdown::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  height: 12px;
  pointer-events: auto;
}

.ba-button-dropdown__trigger {
  appearance: none;
}

.ba-button-dropdown__menu {
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  right: 0;
  z-index: 20;
  min-width: 260px;
  padding: 10px;
  border: 1px solid #e2e6ef;
  border-radius: 14px;
  background: radial-gradient(circle at 50% 0%, #fff 0%, #fff 48%, #fbfcfe 100%);
  box-shadow: 0 14px 30px rgba(25, 33, 61, .10);
  transform: rotateX(-9deg) translate3d(0, -4px, .001px);
  transform-origin: 50% 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition-property: opacity, transform, visibility, box-shadow;
  transition-duration: 260ms, 260ms, 0s, 260ms;
  transition-timing-function: cubic-bezier(.2, .8, .2, 1);
  transition-delay: 0s, 0s, 260ms, 0s;
}

.ba-button-dropdown[data-open="true"] .ba-button-dropdown__menu,
.ba-button-dropdown:hover .ba-button-dropdown__menu,
.ba-button-dropdown:focus-within .ba-button-dropdown__menu {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: rotateX(0deg) translate3d(0, 0, .001px);
  transition-delay: 0s;
}

.ba-button-dropdown__item {
  min-width: 0;
  padding: 10px;
  border-radius: 10px;
  color: var(--neutral--800);
  text-decoration: none;
  display: flex;
  align-items: center;
  gap: 10px;
  transition: background-color 220ms cubic-bezier(.2, .8, .2, 1), transform 220ms cubic-bezier(.2, .8, .2, 1), box-shadow 220ms cubic-bezier(.2, .8, .2, 1);
}

.ba-button-dropdown__item:hover,
.ba-button-dropdown__item:focus-visible {
  background-color: #f7f9fd;
  box-shadow: inset 0 0 0 1px rgba(226, 230, 239, .72);
  transform: translate3d(0, -1px, .001px);
  outline: 0;
}

.ba-button-dropdown__icon {
  width: 28px;
  height: 28px;
  flex: 0 0 28px;
  border-radius: 6px;
  position: relative;
  display: inline-flex;
  justify-content: center;
  align-items: center;
  overflow: visible;
}

.ba-button-dropdown__icon img {
  width: 28px;
  height: 28px;
  border-radius: 6px;
  display: block;
}

.ba-button-dropdown__icon::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 6px;
  box-shadow: 0 1.2px 3.6px rgba(29, 84, 167, .18), 0 1.2px 3px rgba(32, 76, 251, .24), inset 0 .6px .6px rgba(255, 255, 255, .43), inset 0 -2.4px 5.4px rgba(25, 50, 151, .47), inset 0 -1.2px .6px rgba(18, 67, 140, .40);
  pointer-events: none;
}

.ba-button-dropdown__icon--font {
  background-color: #f7f9fd;
  color: var(--neutral--800);
  font-size: 18px;
}

.ba-button-dropdown__text {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ba-button-dropdown__arrow {
  margin-left: auto;
  color: var(--neutral--600);
  font-size: 16px;
  transform: translate3d(0, 0, .001px);
  transition: color 220ms ease, transform 220ms cubic-bezier(.2, .8, .2, 1);
}

.ba-button-dropdown__item:hover .ba-button-dropdown__arrow,
.ba-button-dropdown__item:focus-visible .ba-button-dropdown__arrow {
  color: var(--neutral--800);
  transform: translate3d(2px, -2px, .001px);
}

/* ==========================================================================
   "Designed by BRIX" badge (website-design showcase pages)
   --------------------------------------------------------------------------
   The exported design CSS in this repo is missing the .brix-badge-wrapper rule
   that the live site uses, so the badge rendered as an unstyled inline block.
   This restores it as the floating pill overlay pinned to the top-right of each
   showcase image (.image-category-wrapper is already position:relative;
   overflow:hidden in brixagencydev.css). Only affects pages with the badge.
   ========================================================================== */
.brix-badge-wrapper {
  display: flex;
  align-items: center;
  position: absolute;
  inset: 16px 16px auto auto;
  padding: 8px 12px;
  border-radius: 100px;
  background-color: var(--neutral--100);
  box-shadow: 0 2px 5px rgba(25, 33, 61, 0.18);
  overflow: hidden;
}

.brix-badge-wrapper .logo-brix {
  margin-right: 6px;
}

/* Webflow form state messages are hidden until a submit handler reveals them.
   The exported design CSS dropped this base rule, so the success/error blocks
   were showing by default on migrated pages with forms. */
.w-form-done,
.w-form-fail {
  display: none;
}

/* Webflow form inputs are full-width block elements by default (components.css
   base, dropped in the migration). Without this, text inputs/selects/textareas
   fall back to the UA default width (~136px) and never fill their field cell.
   Only the layout props are restored — appearance (border, bg, padding) still
   comes from each page's custom input classes (e.g. .input-line, .abolute-input). */
.w-input,
.w-select {
  display: block;
  width: 100%;
  height: 38px;
  vertical-align: middle;
  background-color: #fff;
}

.w-input:focus,
.w-select:focus {
  outline: 0;
}

.w-input[disabled],
.w-select[disabled],
.w-input[readonly],
.w-select[readonly],
fieldset[disabled] .w-input,
fieldset[disabled] .w-select {
  cursor: not-allowed;
}

.w-input[disabled]:not(.w-input-disabled),
.w-select[disabled]:not(.w-input-disabled),
.w-input[readonly],
.w-select[readonly],
fieldset[disabled]:not(.w-input-disabled) .w-input,
fieldset[disabled]:not(.w-input-disabled) .w-select {
  background-color: #eee;
}

textarea.w-input,
textarea.w-select {
  height: auto;
}

.w-select {
  background-color: #f3f3f3;
}

.w-select[multiple] {
  height: auto;
}

/* Approved form success state: white capsule, green Tabler check, black copy.
   Use with data-brix-reveal="fade-up-blur"; brix-form-submit.js triggers the
   reveal when the inline success state is shown after a valid submission. */
.brix-form-success {
  --brix-form-success-icon-size: 48px;
  --brix-form-success-gap: 16px;
  --brix-form-success-pad-y: 16px;
  --brix-form-success-pad-x: 22px;
  display: none;
  align-items: center;
  gap: var(--brix-form-success-gap);
  width: 100%;
  min-height: 80px;
  margin-top: 0;
  padding: var(--brix-form-success-pad-y) var(--brix-form-success-pad-x);
  color: var(--neutral--800);
  background: var(--neutral--100);
  border: 1px solid #e2e6ef;
  border-radius: 999px;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 1px rgba(255, 255, 255, .6), 0 12px 30px rgba(25, 33, 61, .075);
  text-align: left;
}

.brix-form-success[data-brix-reveal="fade-up-blur"] {
  opacity: 0;
  filter: blur(10px);
  transform: translate3d(0, 20px, 0);
  transition: opacity 620ms cubic-bezier(0.16, 1, 0.3, 1), transform 620ms cubic-bezier(0.16, 1, 0.3, 1), filter 620ms cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform, filter;
}

.brix-form-success[data-brix-reveal="fade-up-blur"].brix-reveal-visible {
  opacity: 1;
  filter: blur(0);
  transform: translate3d(0, 0, .001px);
}

.brix-form-success__icon {
  flex: 0 0 var(--brix-form-success-icon-size);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--brix-form-success-icon-size);
  height: var(--brix-form-success-icon-size);
  color: #16b364;
  background: #ecfdf3;
  border: 1px solid rgba(22, 179, 100, .22);
  border-radius: 999px;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .76);
}

.brix-form-success__icon .ti {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  font-size: 24px;
  line-height: 1;
}

.brix-form-success__copy {
  min-width: 0;
}

.brix-form-success__title {
  margin: 0;
  color: var(--neutral--800);
  font-size: 18px;
  line-height: 1.18;
  font-weight: 700;
}

.brix-form-success__text {
  margin: 5px 0 0;
  color: #313952;
  font-size: 14px;
  line-height: 1.45;
  font-weight: 500;
}

@media screen and (max-width: 479px) {
  .brix-form-success {
    --brix-form-success-icon-size: 42px;
    --brix-form-success-gap: 13px;
    --brix-form-success-pad-y: 14px;
    --brix-form-success-pad-x: 16px;
    align-items: flex-start;
    min-height: 0;
    border-radius: 20px;
  }

  .brix-form-success__title {
    font-size: 16px;
  }

  .brix-form-success__text {
    font-size: 13px;
  }
}

/* SaaS showcase interstitial CTA banners: widen the text column so the heading
   wraps to two lines (instead of three) beside the illustration. Scoped to the
   page so the shared .cta-image-right grid is untouched elsewhere. */
.page-saas-web-design .grid-2-columns.cta-image-right {
  grid-template-columns: 1.45fr 1fr;
}

/* ==========================================================================
   Capability Tooltips (Webflow Enterprise Partner)
   --------------------------------------------------------------------------
   Native replacement for the Webflow IX2 "scale" hover interaction that
   revealed each capability description popover. On the live site the IX2 JS
   sets the .tooltip-content to display:block + opacity/scale on hover; here we
   reproduce the same reveal with a pure-CSS scale + fade. The .tooltip-content
   keeps its existing popover styling (border, shadow, 300px min-width, position)
   from the exported design CSS; we only override its visibility on hover.
   These classes only exist on the enterprise capabilities grid.
   ========================================================================== */

.tooltip-content-wrapper .tooltip-content {
  display: block;
  opacity: 0;
  visibility: hidden;
  transform: scale(0.92);
  transform-origin: top left;
  pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s linear 0.2s;
}

.tooltip-content-wrapper:hover .tooltip-content {
  opacity: 1;
  visibility: visible;
  transform: scale(1);
  pointer-events: auto;
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s;
}

/* Each .card sets transform:translate(0), making every card its own stacking
   context. Without this, a popover that overflows the bottom of its card (e.g.
   the last item in a card) is painted BEHIND the next card in the grid. Raising
   the hovered card above its siblings keeps its tooltip on top. */
.card.tooltip-cards {
  position: relative;
}

.card.tooltip-cards:hover {
  z-index: 30;
}

@media (prefers-reduced-motion: reduce) {
  .tooltip-content-wrapper .tooltip-content,
  .tooltip-content-wrapper:hover .tooltip-content {
    transform: none;
    transition: opacity 0.15s ease, visibility 0s;
  }
}

.arrow-link,
.arrow-link-v2 {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  transition: color 220ms ease, transform 220ms ease;
  will-change: transform;
}

.arrow-link .button-icon,
.arrow-link-v2 .button-icon,
.arrow-link .line-rounded-icons,
.arrow-link-v2 .line-rounded-icons {
  display: inline-flex;
  transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

.arrow-link:hover,
.arrow-link-v2:hover {
  transform: translate3d(2px, 0, 0);
}

.arrow-link:hover .button-icon,
.arrow-link-v2:hover .button-icon,
.arrow-link:hover .line-rounded-icons,
.arrow-link-v2:hover .line-rounded-icons {
  transform: translate3d(4px, 0, 0);
}

.ba-link {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  transition: opacity 220ms ease, color 220ms ease;
}

.ba-sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.ba-link:hover,
.ba-link:focus-visible,
.ba-link.arrow-link:hover,
.ba-link.arrow-link:focus-visible,
.ba-link.arrow-link-v2:hover,
.ba-link.arrow-link-v2:focus-visible,
.ba-link.scroll-down:hover,
.ba-link.scroll-down:focus-visible {
  opacity: .7;
  transform: none;
}

.ba-link.ba-link--icon-after:hover .button-icon,
.ba-link.ba-link--icon-after:focus-visible .button-icon,
.ba-link.ba-link--icon-after:hover .line-rounded-icons,
.ba-link.ba-link--icon-after:focus-visible .line-rounded-icons,
.ba-link.ba-link--icon-after:hover .ba-link__icon,
.ba-link.ba-link--icon-after:focus-visible .ba-link__icon {
  transform: translate3d(4px, 0, 0);
}

.ba-link.ba-link--icon-before:hover .button-icon,
.ba-link.ba-link--icon-before:focus-visible .button-icon,
.ba-link.ba-link--icon-before:hover .line-rounded-icons,
.ba-link.ba-link--icon-before:focus-visible .line-rounded-icons,
.ba-link.ba-link--icon-before:hover .ba-link__icon,
.ba-link.ba-link--icon-before:focus-visible .ba-link__icon {
  transform: none;
}

.ba-link__text,
.ba-link__icon,
.ba-link__icon--custom,
.ba-link__icon--lottie {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.ba-link__icon,
.ba-link__icon--custom,
.ba-link__icon--lottie {
  transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

.ba-link--icon-before {
  flex-direction: row;
}

.ba-link--icon-after {
  flex-direction: row;
}

.ba-link__lottie {
  width: 22px;
  height: 22px;
}

.scroll-down-icon-dot {
  animation: ba-scroll-down-dot 1250ms cubic-bezier(.16, 1, .3, 1) infinite;
}

.ba-link.scroll-down:hover .scroll-down-icon-dot,
.ba-link.scroll-down:focus-visible .scroll-down-icon-dot {
  animation-duration: 900ms;
}

@keyframes ba-scroll-down-dot {
  0%, 100% {
    opacity: .42;
    transform: translate3d(0, -8px, 0);
  }

  45% {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .scroll-down-icon-dot {
    animation: none;
    opacity: 1;
    transform: none;
  }
}

.footer .button-primary.w-inline-block {
  display: inline-flex;
}

.footer .button-primary .button-text-container {
  gap: 8px;
}

.footer .button-primary .button-icon {
  margin-left: 4px;
}

/* ==========================================================================
   6. Marquee Systems + Project Hover CTA
   --------------------------------------------------------------------------
   Infinite CSS marquee plus project-card hover buttons. ScrollTrigger-powered
   horizontal Services sections are owned by JS because they depend on runtime
   measurements.
   ========================================================================== */

.project-images-wrapper {
  overflow: hidden;
}

.projects-marquee {
  justify-content: flex-start;
  width: max-content;
}

.projects-marquee .marquee {
  will-change: transform;
}

.project-images.brix-project-marquee-natural .projects-marquee {
  will-change: transform;
}

.project-images.brix-project-marquee-natural .projects-marquee .marquee {
  animation: none !important;
  animation-delay: 0s !important;
}

.projects-marquee.left .marquee {
  animation: brix-marquee-left 54s linear infinite;
  animation-delay: -18s;
}

.projects-marquee.right .marquee {
  animation: brix-marquee-right 54s linear infinite;
  animation-delay: -34s;
}

.project-images:not([data-brix-marquee-hover="continue"]):not(.brix-project-marquee-natural):hover .marquee {
  animation-play-state: paused;
}

.projects-hero-marquee {
  overflow: visible;
  will-change: transform;
}

.projects-hero-marquee .hero-marquee {
  will-change: auto;
}

.projects-hero-marquee.first {
  animation: brix-project-hero-marquee-up 69s linear infinite;
}

.projects-hero-marquee.second {
  animation: brix-project-hero-marquee-down 69s linear infinite;
}

.projects-hero-images[data-brix-marquee-hover="continue"] .projects-hero-marquee {
  animation-play-state: running;
}

.projects-hero-images:not([data-brix-marquee-hover="continue"]):hover .projects-hero-marquee {
  animation-play-state: paused;
}

@media screen and (max-width: 767px) {
  .projects-hero-marquee.first {
    animation-name: brix-project-hero-mobile-left;
  }

  .projects-hero-marquee.second {
    animation-name: brix-project-hero-mobile-right;
  }

  .project-hero-images-wrapper .projects-hero-marquee {
    width: 400%;
  }

  .project-hero-images-wrapper .project-hero-item {
    width: calc((100% - 126px) / 10) !important;
    max-width: none !important;
    flex: 0 0 calc((100% - 126px) / 10) !important;
  }
}

@media screen and (max-width: 479px) {
  .project-hero-images-wrapper .project-hero-item {
    width: calc((100% - 126px) / 10) !important;
    max-width: none !important;
    flex: 0 0 calc((100% - 126px) / 10) !important;
  }
}

.project-item-btn-wrapper {
  z-index: 2;
  justify-content: center;
  align-items: center;
  display: flex;
  opacity: 0;
  transform: translate3d(0, 8px, 0) scale(0.96);
  transition: opacity 360ms cubic-bezier(0.16, 1, 0.3, 1), transform 360ms cubic-bezier(0.16, 1, 0.3, 1);
  pointer-events: none;
}

.project-item:hover .project-item-btn-wrapper,
.project-item:focus-within .project-item-btn-wrapper {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
  pointer-events: auto;
}

.project-item-btn {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  width: auto;
  height: auto;
  min-width: 0;
}

.project-item-btn.ba-button {
  min-width: 154px;
}

.project-item:hover .project-item-btn,
.project-item:focus-within .project-item-btn {
  transform: translate3d(0, 0, 0) scale(1);
}

.project-item:hover .project-item-btn.ba-button-secondary:hover,
.project-item:focus-within .project-item-btn.ba-button-secondary:focus-visible {
  transform: translate3d(0, -3px, 0.001px) scale(1);
}

@keyframes brix-marquee-left {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(calc(-100% - var(--sizes--s6)), 0, 0);
  }
}

@keyframes brix-marquee-right {
  from {
    transform: translate3d(calc(-100% - var(--sizes--s6)), 0, 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes brix-project-hero-marquee-up {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(0, calc(-50% - 12px), 0);
  }
}

@keyframes brix-project-hero-marquee-down {
  from {
    transform: translate3d(0, calc(-50% - 12px), 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes brix-project-hero-mobile-left {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(calc(-50% - 8px), 0, 0);
  }
}

@keyframes brix-project-hero-mobile-right {
  from {
    transform: translate3d(calc(-50% - 8px), 0, 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.logos-infinity-marquee-wrapper {
  overflow: hidden;
}

.logos-marquee-row {
  justify-content: flex-start;
  width: max-content;
  will-change: transform;
  animation: brix-logo-marquee-left 44s linear infinite;
}

.logos-marquee-row.bottom {
  animation-name: brix-logo-marquee-right;
  animation-duration: 52s;
}

.logos-infinity-marquee-wrapper:not(.brix-marquee-no-hover-pause):hover .logos-marquee-row {
  animation-play-state: paused;
}

.brix-marquee-offscreen .marquee,
.brix-marquee-offscreen .projects-hero-marquee,
.brix-marquee-offscreen .logos-marquee-row,
.brix-marquee-offscreen .marquee-row,
.brix-marquee-offscreen.stacking-card-marquee-row {
  animation-play-state: paused !important;
}

/* Services / Technology index pages — the Services↔Technology toggle styled as
   the portfolio "Soft Tray" tab (DOCS/.../ELEMENTS/TAB-DESIGNOPTIONS.html,
   Option 02). This is a two-way page nav (each <a> navigates; the current page
   carries `.w--current` + aria-current), so there is no JS — the active surface
   is fixed per page. Light tray hugging the two tabs; active = white
   button-grade surface (top-light gradient + hairline border + inset highlight
   + soft shadow, matching the secondary button in BUTTONS.html); inactive tab
   scaled down (.94) and faded. Tabler glyph icons (ti-briefcase / ti-cpu)
   replace the exported image icons. `.button-row-small` / `.tab-button` /
   `.tab-button-icon` are exclusive to these two pages. */

/* Tray. */
.brix-native-runtime .button-row-small {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px;
  border: 1px solid #eef1f6;
  border-radius: 999px;
  background: #fafbfd;
  box-shadow: inset 0 1px 0 #fff;
}

/* Tabs — neutral scale-focus base. Overrides the exported bordered pill and its
   blue hover/active color. */
.brix-native-runtime .button-row-small .tab-button {
  display: flex !important;
  min-height: 58px;
  padding: 14px 24px;
  gap: 10px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  box-shadow: none;
  color: var(--neutral--600);
  font-size: 17px;
  font-weight: 700;
  line-height: 1.1;
  opacity: 0.6;
  transform: translate3d(0, 0, 0.001px) scale(0.94);
  transition: color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    background-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    border-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    transform 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    opacity 0.26s cubic-bezier(0.2, 0.8, 0.2, 1);
}

/* Tabler glyph icon: 20px, currentColor. Drops the exported 18px image box,
   grayscale filter and negative margin. Never moves on hover/active. */
.brix-native-runtime .button-row-small .tab-button-icon {
  filter: none;
  margin: 0;
  min-width: 0;
  max-width: none;
  min-height: 0;
  max-height: none;
  width: auto;
  height: auto;
  font-size: 20px;
  line-height: 1;
}

/* Inactive hover: wake up toward active. */
.brix-native-runtime .button-row-small .tab-button:not(.w--current):hover {
  border-color: transparent;
  box-shadow: none;
  color: var(--neutral--800);
  opacity: 0.92;
  transform: translate3d(0, 0, 0.001px) scale(0.97);
}

/* Active (current page): white button-grade surface, neutral color. */
.brix-native-runtime .button-row-small .tab-button.w--current {
  color: var(--neutral--800);
  opacity: 1;
  transform: translate3d(0, 0, 0.001px) scale(1.02);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border-color: #eef1f6;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 1px rgba(255, 255, 255, 0.6),
    0 6px 16px rgba(25, 33, 61, 0.08);
}

/* Mobile: keep both tabs comfortable. */
@media screen and (max-width: 767px) {
  .brix-native-runtime .button-row-small .tab-button {
    min-height: 52px;
    padding: 12px 18px;
    font-size: 16px;
  }
}

.brix-native-runtime .card.industry-card {
  transition: transform 300ms ease, border-color 300ms ease, box-shadow 300ms ease;
}

.brix-native-runtime .card.industry-card .industry-card-arrow {
  transition: transform 300ms ease, color 300ms ease;
}

.brix-native-runtime .card.industry-card:hover {
  transform: translate3d(0, -6px, 0);
  border-color: rgba(45, 126, 255, 0.28);
  box-shadow: 0 18px 44px rgba(25, 33, 61, 0.1);
}

.brix-native-runtime .card.industry-card:hover .industry-card-arrow {
  transform: translate3d(4px, -4px, 0);
}

/* Technology page marquee rows previously depended on exported Webflow IX2. */
.brix-native-runtime .marquee-container .marquee-row {
  justify-content: flex-start;
  width: max-content;
  will-change: transform;
}

.brix-native-runtime .marquee-container .marquee-row:nth-child(odd) {
  animation: brix-technology-marquee-left 42s linear infinite;
}

.brix-native-runtime .marquee-container .marquee-row:nth-child(even) {
  animation: brix-technology-marquee-right 42s linear infinite;
}

.brix-native-runtime .marquee-container:not([data-brix-marquee-hover="continue"]):hover .marquee-row {
  animation-play-state: paused;
}

.brix-native-runtime .marquee-container .agency-card .heading-size-h4 {
  margin-bottom: 1.5px !important;
}

.brix-native-runtime .marquee-container .agency-card p {
  margin-top: 4.8px !important;
}

.brix-native-runtime .marquee-container .marquee-item {
  transform: none !important;
}

.page-midjourney-agency .stacking-card-marquee-row {
  will-change: transform;
}

html.brix-native-runtime:has(body.page-midjourney-agency),
body.page-midjourney-agency {
  overflow-x: clip;
}

.page-midjourney-agency .stacking-card-float-content .heading-size-h4,
.page-midjourney-agency .features-card .features-card-heading {
  margin-top: 0;
}

.page-midjourney-agency .stacking-card-float-content p:not(.heading-size-h4),
.page-midjourney-agency .features-card .features-card-text {
  margin-top: 0;
}

.page-midjourney-agency .stacking-card-marquee-row:nth-child(odd) {
  animation: brix-stacking-card-marquee-up 28s linear infinite;
}

.page-midjourney-agency .stacking-card-marquee-row:nth-child(even) {
  animation: brix-stacking-card-marquee-down 28s linear infinite;
}

@keyframes brix-stacking-card-marquee-up {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(0, -33.333%, 0);
  }
}

@keyframes brix-stacking-card-marquee-down {
  from {
    transform: translate3d(0, -33.333%, 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.brix-native-runtime .brix-grid-technology-codex,
.brix-native-runtime .brix-grid-technology-claude-code,
.brix-native-runtime .brix-grid-technology-hubspot {
  justify-self: stretch;
  align-self: stretch;
}

.brix-native-runtime .technology-card {
  --brix-technology-copy: var(--neutral--700);
  --brix-technology-link: var(--neutral--700);
  --brix-technology-link-border: rgba(137, 147, 185, 0.3);
}

.brix-native-runtime .technology-card.webflow-card {
  --brix-technology-copy: #5d73a6;
  --brix-technology-link: #526fb6;
  --brix-technology-link-border: rgba(82, 111, 182, 0.28);
}

.brix-native-runtime .technology-card.figma-card {
  --brix-technology-copy: #6b6f99;
  --brix-technology-link: #6557b8;
  --brix-technology-link-border: rgba(101, 87, 184, 0.28);
}

.brix-native-runtime .technology-card.openai-card {
  --brix-technology-copy: #657092;
  --brix-technology-link: #596fc3;
  --brix-technology-link-border: rgba(89, 111, 195, 0.28);
}

.brix-native-runtime .technology-card.claude-code-card {
  --brix-technology-copy: #8e6a60;
  --brix-technology-link: #9b5f45;
  --brix-technology-link-border: rgba(155, 95, 69, 0.28);
}

.brix-native-runtime .technology-card.wordpress-card {
  --brix-technology-copy: #6568a5;
  --brix-technology-link: #5654c7;
  --brix-technology-link-border: rgba(86, 84, 199, 0.28);
}

.brix-native-runtime .technology-card.framer-card {
  --brix-technology-copy: #527fae;
  --brix-technology-link: #2f73c8;
  --brix-technology-link-border: rgba(47, 115, 200, 0.28);
}

.brix-native-runtime .technology-card.hubspot-card {
  --brix-technology-copy: #965f55;
  --brix-technology-link: #b3533a;
  --brix-technology-link-border: rgba(179, 83, 58, 0.28);
}

.brix-native-runtime .technology-card p {
  color: var(--brix-technology-copy);
}

.brix-native-runtime .technology-card .underline-text-link {
  color: var(--brix-technology-link);
  border-bottom-color: var(--brix-technology-link-border);
}

.brix-native-runtime .technology-card .underline-text-link:hover {
  color: var(--brix-technology-link);
  border-bottom-color: var(--brix-technology-link);
}

@keyframes brix-technology-marquee-left {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(-33.333%, 0, 0);
  }
}

@keyframes brix-technology-marquee-right {
  from {
    transform: translate3d(-33.333%, 0, 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

@keyframes brix-logo-marquee-left {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(-20%, 0, 0);
  }
}

@keyframes brix-logo-marquee-right {
  from {
    transform: translate3d(-20%, 0, 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

/* ==========================================================================
   7. FAQ Accordion
   --------------------------------------------------------------------------
   Native replacement for Webflow accordion interactions used by long-form
   service pages. JS owns height measurement; CSS owns the transition contract.
   ========================================================================== */

.faqs-card {
  cursor: pointer;
}

.faqs-top-content {
  outline: none;
}

.faqs-bottom-content {
  display: block !important;
  overflow: hidden;
  opacity: 0;
  height: 0;
  transition: height 260ms cubic-bezier(0.16, 1, 0.3, 1),
    opacity 220ms ease;
}

.faqs-card.is-faq-open .faqs-bottom-content {
  opacity: 1;
}

.faqs-arrow .arrow-icon {
  display: inline-block;
  transition: transform 220ms cubic-bezier(0.16, 1, 0.3, 1);
}

.faqs-card.is-faq-open .faqs-arrow .arrow-icon {
  transform: rotate(90deg);
}

/* ==========================================================================
   8. Footer Expand Interaction
   --------------------------------------------------------------------------
   Native replacement for Webflow's footer expand/collapse interaction.
   ========================================================================== */

.footer-expand-content {
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  display: block;
  transition: max-height 420ms cubic-bezier(0.16, 1, 0.3, 1),
    opacity 420ms cubic-bezier(0.16, 1, 0.3, 1);
  will-change: max-height, opacity;
}

.footer.is-footer-expanded .footer-expand-content {
  max-height: var(--brix-footer-expand-height, 1800px);
  opacity: 1;
}

.footer-icon-line.vertical {
  transition: opacity 320ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 320ms cubic-bezier(0.16, 1, 0.3, 1);
}

.footer-expand-icon {
  transition: transform 320ms cubic-bezier(0.16, 1, 0.3, 1);
}

.footer.is-footer-expanded .footer-expand-icon {
  transform: rotate(180deg);
}

.footer-expand-icon:hover {
  transform: scale(1.06);
}

.footer.is-footer-expanded .footer-expand-icon:hover {
  transform: rotate(180deg) scale(1.06);
}

.footer.is-footer-expanded .footer-icon-line.vertical {
  opacity: 0;
  transform: rotate(90deg) scaleY(0);
}

/* ==========================================================================
   9. Home Video Lightbox
   --------------------------------------------------------------------------
   Lightweight replacement for exported Webflow lightbox markup.
   ========================================================================== */

.brix-lightbox-backdrop {
  z-index: 999999;
  background: rgba(13, 18, 37, 0.88);
  backdrop-filter: blur(0);
  -webkit-backdrop-filter: blur(0);
  justify-content: center;
  align-items: center;
  padding: 32px;
  display: flex;
  opacity: 0;
  visibility: hidden;
  transition: opacity 260ms cubic-bezier(0.16, 1, 0.3, 1),
    backdrop-filter 260ms cubic-bezier(0.16, 1, 0.3, 1),
    visibility 260ms ease;
  position: fixed;
  inset: 0;
}

.brix-lightbox-backdrop.is-visible {
  opacity: 1;
  visibility: visible;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  animation: brix-lightbox-backdrop-in 360ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.brix-lightbox-backdrop.is-closing {
  visibility: visible;
  animation: brix-lightbox-backdrop-out 280ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.brix-lightbox-dialog {
  width: min(940px, 100%);
  aspect-ratio: 16 / 9;
  background: #000;
  border-radius: 12px;
  opacity: 0;
  filter: blur(14px);
  transform: translate3d(0, 18px, 0) scale(0.965);
  transition: opacity 320ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 320ms cubic-bezier(0.16, 1, 0.3, 1),
    filter 320ms cubic-bezier(0.16, 1, 0.3, 1);
  position: relative;
  overflow: hidden;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.32);
}

.brix-lightbox-backdrop.is-visible .brix-lightbox-dialog {
  opacity: 1;
  filter: blur(0);
  transform: translate3d(0, 0, 0) scale(1);
  animation: brix-lightbox-dialog-in 420ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.brix-lightbox-backdrop.is-closing .brix-lightbox-dialog {
  opacity: 0;
  filter: blur(10px);
  transform: translate3d(0, 12px, 0) scale(0.975);
  animation: brix-lightbox-dialog-out 280ms cubic-bezier(0.16, 1, 0.3, 1) both;
}

.brix-lightbox-dialog iframe {
  width: 100%;
  height: 100%;
  opacity: 0;
  transform: scale(0.99);
  transition: opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
}

.brix-lightbox-backdrop.is-visible .brix-lightbox-dialog iframe {
  opacity: 1;
  transform: scale(1);
  animation: brix-lightbox-iframe-in 360ms cubic-bezier(0.16, 1, 0.3, 1) 80ms both;
}

.brix-lightbox-close {
  color: #19213d;
  background: #fff;
  border: 0;
  border-radius: 999px;
  width: 40px;
  height: 40px;
  cursor: pointer;
  font-size: 26px;
  line-height: 1;
  position: absolute;
  top: -52px;
  right: 0;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
}

@keyframes brix-lightbox-backdrop-in {
  from {
    opacity: 0;
    backdrop-filter: blur(0);
    -webkit-backdrop-filter: blur(0);
  }

  to {
    opacity: 1;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
  }
}

@keyframes brix-lightbox-backdrop-out {
  from {
    opacity: 1;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
  }

  to {
    opacity: 0;
    backdrop-filter: blur(0);
    -webkit-backdrop-filter: blur(0);
  }
}

@keyframes brix-lightbox-dialog-in {
  from {
    opacity: 0;
    filter: blur(14px);
    transform: translate3d(0, 18px, 0) scale(0.965);
  }

  to {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }
}

@keyframes brix-lightbox-dialog-out {
  from {
    opacity: 1;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
  }

  to {
    opacity: 0;
    filter: blur(10px);
    transform: translate3d(0, 12px, 0) scale(0.975);
  }
}

@keyframes brix-lightbox-iframe-in {
  from {
    opacity: 0;
    transform: scale(0.99);
  }

  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* ==========================================================================
   10. Mobile Navigation + Mobile Component Overrides
   --------------------------------------------------------------------------
   Mobile drawer, mobile dropdown layout, mobile testimonials scroller, and
   breakpoint-specific CTA/project adjustments.
   ========================================================================== */

/* Mobile Navigation Drawer + Mobile Header Dropdowns */
@media screen and (max-width: 991px) {
  .hero-grid-wrapper > .button-row.single-button {
    display: none;
  }

  .header .header-content > .button-primary.small.hide-on-mb {
    display: none !important;
    visibility: hidden;
    pointer-events: none;
  }

  html.is-mobile-menu-open,
  html.is-mobile-menu-open body {
    overflow: hidden;
    overscroll-behavior: none;
  }

  body.is-mobile-menu-open {
    width: 100%;
  }

  .header.is-menu-open {
    z-index: 10000;
  }

  .header .header-wrapper {
    position: relative;
  }

  .header.is-menu-open .header-wrapper,
  .header.is-menu-open .header-logo-wrapper,
  .header.is-menu-open .logo-container.header-logo {
    position: relative;
    z-index: 10003;
  }

  .header.is-menu-open .logo-wrapper {
    position: relative;
    z-index: 10005;
  }

  .header .mobile-menu-button {
    justify-content: center;
    align-items: center;
    min-width: 42px;
    max-width: 42px;
    min-height: 42px;
    max-height: 42px;
    margin-left: auto;
    display: flex;
    position: absolute;
    top: -6px;
    right: 0;
    z-index: 10004;
  }

  .mobile-button-dot-wrapper {
    width: 30px;
    min-width: 30px;
    max-width: 30px;
    height: 30px;
    min-height: 30px;
    max-height: 30px;
    position: relative;
    transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1);
  }

  .hamburger-menu-dot {
    background-color: #19213d;
    border-radius: 50%;
    width: 6px;
    height: 6px;
    display: block;
    position: absolute;
    transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1), opacity 180ms ease;
  }

  .hamburger-menu-dot.top-left {
    top: 3px;
    left: 3px;
  }

  .hamburger-menu-dot.top-right {
    top: 3px;
    right: 3px;
  }

  .hamburger-menu-dot.bottom-right {
    right: 3px;
    bottom: 3px;
  }

  .hamburger-menu-dot.bottom-left {
    bottom: 3px;
    left: 3px;
  }

  .mobile-menu-button.w--open .mobile-button-dot-wrapper {
    transform: rotate(45deg);
  }

  .mobile-menu-button.w--open .hamburger-menu-dot.top-left {
    transform: scale(0.92);
  }

  .mobile-menu-button.w--open .hamburger-menu-dot.top-right {
    transform: scale(0.92);
  }

  .mobile-menu-button.w--open .hamburger-menu-dot.bottom-right {
    transform: scale(0.92);
  }

  .mobile-menu-button.w--open .hamburger-menu-dot.bottom-left {
    transform: scale(0.92);
  }

  .header .nav-menu {
    background-color: var(--neutral--100);
    width: 100vw;
    height: 100vh;
    height: 100dvh;
    margin: 0;
    padding: clamp(92px, 10vh, 110px) 24px 28px;
    display: block;
    overflow-x: hidden;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    position: fixed;
    inset: 0;
    z-index: 10001;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    filter: blur(8px);
    transform: translate3d(0, 16px, 0) scale(0.985);
    transform-origin: top center;
    transition: opacity 260ms cubic-bezier(0.16, 1, 0.3, 1),
      transform 320ms cubic-bezier(0.16, 1, 0.3, 1),
      filter 260ms cubic-bezier(0.16, 1, 0.3, 1),
      visibility 260ms ease;
  }

  .header.is-menu-open .nav-menu {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    filter: blur(0);
    transform: translate3d(0, 0, 0) scale(1);
    animation: brix-mobile-drawer-in 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
  }

  .header.is-menu-open.is-menu-exiting .nav-menu {
    visibility: visible;
    pointer-events: none;
    animation: brix-mobile-drawer-out 520ms cubic-bezier(0.4, 0, 0.2, 1) both;
  }

  @keyframes brix-mobile-drawer-in {
    from {
      opacity: 0;
      filter: blur(8px);
      transform: translate3d(0, 16px, 0) scale(0.985);
    }
    to {
      opacity: 1;
      filter: blur(0);
      transform: translate3d(0, 0, 0) scale(1);
    }
  }

  @keyframes brix-mobile-drawer-out {
    from {
      opacity: 1;
      filter: blur(0);
      transform: translate3d(0, 0, 0) scale(1);
    }
    to {
      opacity: 0;
      filter: blur(8px);
      transform: translate3d(0, 12px, 0) scale(0.985);
    }
  }

  .header.is-menu-open .nav-menu-wrapper-v2 {
    width: 100%;
    max-width: min(100%, 760px);
    min-height: calc(100dvh - clamp(92px, 10vh, 110px) - 28px);
    margin-left: auto;
    margin-right: auto;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: 0;
  }

  .header.is-menu-open .nav-menu-wrapper-v2 > * {
    opacity: 0;
    transform: translate3d(0, 10px, 0);
    animation: brix-mobile-menu-item-in 360ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
  }

  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(1) { animation-delay: 45ms; }
  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(2) { animation-delay: 70ms; }
  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(3) { animation-delay: 95ms; }
  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(4) { animation-delay: 120ms; }
  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(5) { animation-delay: 145ms; }
  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(6) { animation-delay: 170ms; }
  .header.is-menu-open .nav-menu-wrapper-v2 > *:nth-child(7) { animation-delay: 195ms; }

  @keyframes brix-mobile-menu-item-in {
    to {
      opacity: 1;
      transform: translate3d(0, 0, 0);
    }
  }

  .brix-native-runtime .subtitle:has(+ .heading-size-h2),
  .brix-native-runtime .subtitle:has(+ .heading-size-h1),
  .brix-native-runtime .subtitle:has(+ .display-1),
  .brix-native-runtime .subtitle:has(+ .display-2),
  .brix-native-runtime .subtitle:has(+ .display-3),
  .brix-native-runtime .subtitle:has(+ .display-4),
  .brix-native-runtime .subtitle:has(+ h1),
  .brix-native-runtime .subtitle:has(+ h2),
  .brix-native-runtime .subtitle:has(+ h3) {
    margin-bottom: 8px;
  }

  #services .heading-wrapper.horizontal-content-wrapper > div:has(.button-primary.white) {
    display: none;
  }

  .header.is-menu-open .w-dropdown {
    width: 100%;
    display: block;
  }

  .header.is-menu-open .w-dropdown-toggle,
  .header.is-menu-open .w-nav-link {
    width: 100%;
    display: flex;
    min-height: 64px;
    border-bottom: 1px solid #e9edf6;
    border-radius: 0;
    justify-content: space-between;
    align-items: center;
    padding: 18px 0;
    color: var(--neutral--800);
    background-color: transparent;
    box-shadow: none;
    font-size: clamp(24px, 4.8vw, 30px);
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0;
  }

  .header.is-menu-open .w-dropdown-toggle::after {
    content: "\eb0b";
    flex: 0 0 30px;
    width: 30px;
    height: 30px;
    display: inline-flex;
    justify-content: center;
    align-items: center;
    color: var(--neutral--800);
    font-family: "tabler-icons" !important;
    font-size: 26px;
    font-style: normal;
    font-weight: 400;
    font-variant: normal;
    line-height: 1;
    speak: none;
    text-transform: none;
    transform: rotate(0deg);
    transform-origin: center;
    transition: transform 260ms cubic-bezier(0.16, 1, 0.3, 1), color 220ms ease;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }

  .header.is-menu-open .w-dropdown.is-open > .w-dropdown-toggle::after {
    color: var(--secondary--blue-200);
    transform: rotate(45deg);
  }

  .header.is-menu-open .w-dropdown-list {
    position: static;
    min-width: 0;
    width: 100%;
    margin: 0;
    max-height: 0;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    filter: blur(8px);
    transform: translate3d(0, -8px, 0);
    overflow: hidden;
    padding: 0;
    border-bottom: 1px solid #e9edf6;
    transition: max-height 330ms ease, opacity 280ms ease, transform 280ms ease, filter 280ms ease, visibility 280ms ease, padding 280ms ease;
  }

  .header.is-menu-open .w-dropdown.is-open > .w-dropdown-list,
  .header.is-menu-open .w-dropdown.w--open > .w-dropdown-list {
    max-height: var(--brix-mobile-dropdown-height, 1800px);
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    filter: blur(0);
    transform: translate3d(0, 0, 0);
    padding: 14px 0 24px;
  }

  .header.is-menu-open .dropdown-list.services-list,
  .header.is-menu-open .dropdown-list.products-list,
  .header.is-menu-open .dropdown-list.resources-list {
    left: auto;
    right: auto;
  }

  .header.is-menu-open .dropdown-list-wrapper-v2 {
    width: 100%;
    min-width: 0;
    max-width: none;
    border: 0;
    border-radius: 0;
    padding: 0;
    box-shadow: none;
    background-color: transparent;
  }

  .header.is-menu-open .dropdown-list-content,
  .header.is-menu-open .megamenu-left-bar-v2,
  .header.is-menu-open .megamenu-right-content-v2 {
    width: 100%;
  }

  .header.is-menu-open .dropdown-list-content {
    flex-direction: column;
    align-items: stretch;
    gap: 14px;
  }

  .header.is-menu-open .dropdown-list-icon {
    display: none;
  }

  .header.is-menu-open .megamenu-left-bar-v2 {
    display: none;
  }

  .header.is-menu-open .megamenu-right-content-v2 {
    min-height: 0 !important;
    padding: 0;
  }

  .header.is-menu-open .services-dropdown-list .megamenu-right-content-item,
  .header.is-menu-open .services-dropdown-list .megamenu-right-content-item.is-active {
    position: relative !important;
    inset: auto !important;
    display: block !important;
  }

  .header.is-menu-open .services-dropdown-list .megamenu-right-content-item:not(.is-active) {
    display: none !important;
  }

  .header.is-menu-open .dropdown-list-grid,
  .header.is-menu-open .megamnu-right-grid {
    width: 100%;
    grid-template-columns: 1fr;
    gap: 12px;
  }

  .header.is-menu-open .megamenu-link-wrapper-v2,
  .header.is-menu-open .megemanu-link-wrapper.simple-link {
    min-height: 58px;
    align-items: center;
    gap: 12px;
    padding: 0;
  }

  .header.is-menu-open .icon-wrapper.megamenu-link-icon,
  .header.is-menu-open .icon-wrapper.megamenu-icon {
    width: 56px;
    min-width: 56px;
    max-width: 56px;
    height: 56px;
    min-height: 56px;
    max-height: 56px;
  }

  .header.is-menu-open .megamenu-link-text-v2,
  .header.is-menu-open .resource-link-text-2 {
    margin-bottom: 2px;
    font-size: clamp(17px, 3.6vw, 20px);
    line-height: 1.15;
  }

  .header.is-menu-open .megamenu-link-subtitle-v2 {
    font-size: clamp(14px, 3.1vw, 16px);
    line-height: 1.25;
  }

  .header.is-menu-open .service-menu-link-2 {
    margin-top: 6px;
    justify-content: flex-start;
  }

  .header.is-menu-open .services-dropdown-list .megamenu-right-content-item.integrations .service-menu-link-2 {
    display: none;
  }

  .header.is-menu-open .dropdown-list-content.product-list,
  .header.is-menu-open .resources-dropdown-list {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .header.is-menu-open .product-featured-link-v2,
  .header.is-menu-open .resource-featured-wrapper-v2 {
    min-height: 0;
    gap: 12px;
    border-radius: 16px;
    padding: 16px;
  }

  .header.is-menu-open .megemanu-link-wrapper.resources-dropdown {
    align-items: flex-start;
    justify-content: flex-start;
    text-align: left;
    gap: 12px;
  }

  .header.is-menu-open .icon-wrapper.resource-icon,
  .header.is-menu-open .icon-wrapper.product-featured-icon {
    width: 50px;
    min-width: 50px;
    max-width: 50px;
    height: 50px;
    min-height: 50px;
    max-height: 50px;
    margin-left: 0;
    margin-right: 0;
  }

  .header.is-menu-open .resource-featured-title-v2,
  .header.is-menu-open .product-featured-title-v2 {
    margin-bottom: 4px;
    font-size: clamp(19px, 3.9vw, 23px);
    line-height: 1.15;
  }

  .header.is-menu-open .resource-featured-paragraph,
  .header.is-menu-open .paragraph-extra-small-v2 {
    margin-top: 4px;
    margin-bottom: 0;
    font-size: clamp(14px, 3.2vw, 17px);
    line-height: 1.35;
  }

  .header.is-menu-open .arrow-link-v2.extra-small,
  .header.is-menu-open .arrow-link-v2.extra-small.w-button {
    font-size: 12px;
    line-height: 1.2;
  }

  .header.is-menu-open .product-featured-link-v2 .hide-on-mb,
  .header.is-menu-open .resource-featured-wrapper-v2 .hide-on-mb {
    display: none !important;
  }

  .header.is-menu-open .resource-featured-wrapper-v2.simple-card {
    justify-content: flex-start;
  }

  .header.is-menu-open .resource-featured-list-v2 {
    gap: 12px;
  }

  .header.is-menu-open .button-primary-header.header-button,
  .header.is-menu-open .ba-button-header.header-button {
    display: flex;
    width: 100%;
    margin-top: auto;
    justify-content: center;
    align-items: center;
    gap: 12px;
    padding: 18px 24px;
    border-radius: 999px;
    font-size: clamp(20px, 4.5vw, 24px);
    line-height: 1.1;
    text-align: center;
  }

  .header.is-menu-open .button-primary-header.header-button .button-icon,
  .header.is-menu-open .ba-button-header.header-button .button-icon {
    margin-left: 0;
  }
}

/* Shared Awards Cards
   --------------------------------------------------------------------------
   Webflow's exported `.w-inline-block` helper loads after the source stylesheet
   in this PHP runtime, so repeated award/link cards need their flex contract
   restored explicitly here.
   ========================================================================== */

.award-card.w-inline-block {
  align-items: center;
  display: flex;
}

/* Webflow Toolkit: the catalog cards and sidebar category links are
   `.w-inline-block` <a> elements whose flex layout (set on .card / .toolkit-card
   / .link-category-toolkit in the source CSS) is otherwise clobbered by the
   later .w-inline-block { display: inline-block } helper. Restore it. */
.card.toolkit-card.w-inline-block {
  flex-direction: column;
  display: flex;
}

.link-category-toolkit.w-inline-block {
  justify-content: flex-start;
  align-items: center;
  display: flex;
}

.award-card .image-badge-card-wrapper {
  flex: 0 0 auto;
}

.award-card .image-badge-card-wrapper .image {
  display: block;
  height: 100%;
  object-fit: contain;
  width: 100%;
}

/* Figma to Webflow Awards
   --------------------------------------------------------------------------
   Keeps the certification cards in the same left-icon/right-copy structure on
   desktop and mobile. The source export relies on the same visual pattern used
   by the Webflow Agency page, but with shared award images.
   ========================================================================== */

.awards-wrapper.figma-to-webflow .badges-wrapper {
  align-items: center;
}

.awards-wrapper.figma-to-webflow .award-card {
  flex-direction: row;
  gap: 8px;
}

.awards-wrapper.figma-to-webflow .image-badge-card-wrapper {
  margin-right: 0;
}

/* App-to-App Hero
   --------------------------------------------------------------------------
   The center arrow owns a permanent translate transform for positioning. The
   reveal runtime preserves that transform; these scoped rules keep the final
   position deterministic across desktop and mobile.
   ========================================================================== */

.section.app-to-hero .app-to-arrow {
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 4;
}

@media screen and (max-width: 767px) {
  .section.app-to-hero .app-to-arrow {
    width: 25%;
  }

  .awards-wrapper.figma-to-webflow .badges-wrapper {
    flex-wrap: wrap;
    row-gap: var(--sizes--s2);
  }
}

/* Home Section Mobile Overrides */
@media screen and (max-width: 991px) {
  .testimonials-tab-menu {
    justify-content: flex-start;
    align-items: center;
    gap: 10px;
    width: 100%;
    margin-left: 0;
    margin-right: 0;
    padding: 3px 0 12px;
    overflow-x: auto;
    overflow-y: hidden;
    flex-wrap: nowrap;
    scroll-snap-type: x proximity;
    touch-action: pan-x;
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
  }

  .testimonials-tab-menu::-webkit-scrollbar {
    display: none;
  }

  .testimonials-tab-menu-item---paradox,
  .testimonials-tab-menu-item---upside,
  .testimonials-tab-menu-item---certifid,
  .testimonials-tab-menu-item---yesware,
  .testimonials-tab-menu-item---gqueues,
  .testimonials-tab-menu .w-tab-link {
    flex: 0 0 147px;
    width: 147px;
    max-width: 147px;
    scroll-snap-align: start;
  }

  .testimonials-tab-menu .w-tab-link img {
    width: 100%;
    height: auto;
  }

  .button-row.center {
    margin-top: 28px;
  }

  .cta-v1-wrapper-content > div:has(.button-primary.white),
  .cta-v2-wrapper > div:has(.button-primary.white) {
    margin-top: 28px;
  }

  .project-item-btn-overlay {
    z-index: 2;
    pointer-events: none;
  }

  .project-item-btn-wrapper {
    display: flex !important;
  }

  .project-item-btn {
    display: inline-flex !important;
  }
}

/* Small Phone Adjustments */
@media screen and (max-width: 479px) {
  .hide-on-mb {
    display: none !important;
  }

  .w-tab-link {
    display: block;
  }

  .brix-lightbox-backdrop {
    padding: 20px;
  }

  .header .nav-menu {
    padding-left: 22px;
    padding-right: 22px;
  }

  .header.is-menu-open .icon-wrapper.megamenu-link-icon,
  .header.is-menu-open .icon-wrapper.megamenu-icon {
    width: 52px;
    min-width: 52px;
    max-width: 52px;
    height: 52px;
    min-height: 52px;
    max-height: 52px;
  }

  .header.is-menu-open .icon-wrapper.resource-icon,
  .header.is-menu-open .icon-wrapper.product-featured-icon {
    width: 48px;
    min-width: 48px;
    max-width: 48px;
    height: 48px;
    min-height: 48px;
    max-height: 48px;
  }

  .testimonials-tab-menu-item---paradox,
  .testimonials-tab-menu-item---upside,
  .testimonials-tab-menu-item---certifid,
  .testimonials-tab-menu-item---yesware,
  .testimonials-tab-menu-item---gqueues,
  .testimonials-tab-menu .w-tab-link {
    flex-basis: 136px;
    width: 136px;
    max-width: 136px;
  }
}

/* ==========================================================================
   11. Route-Specific Migration Fixes
   --------------------------------------------------------------------------
   Keep these scoped to individual migrated pages when the Webflow export has
   one-off spacing or asset sizing that should not affect the shared system.
   ========================================================================== */

.page-saas-website-design-agency .header,
.page-saas-ui-ux-design .header,
.page-crypto-design-agency .header,
.page-artificial-intelligence-design-agency .header {
  width: 100%;
  position: absolute;
  inset: 0 0 auto;
}

.page-saas-website-design-agency .projects-hero-images,
.page-saas-ui-ux-design .projects-hero-images,
.page-crypto-design-agency .projects-hero-images,
.page-artificial-intelligence-design-agency .projects-hero-images {
  opacity: 0;
}

.page-saas-website-design-agency .projects-hero-images.brix-reveal-visible,
.page-saas-ui-ux-design .projects-hero-images.brix-reveal-visible,
.page-crypto-design-agency .projects-hero-images.brix-reveal-visible,
.page-artificial-intelligence-design-agency .projects-hero-images.brix-reveal-visible {
  opacity: 1;
}

.page-saas-website-design-agency .project-hero-wrapper > .mgb-small,
.page-saas-ui-ux-design .project-hero-wrapper > .mgb-small,
.page-crypto-design-agency .project-hero-wrapper > .mgb-small,
.page-artificial-intelligence-design-agency .project-hero-wrapper > .mgb-small {
  margin-top: 0;
}

.page-saas-website-design-agency .project-hero-item,
.page-saas-ui-ux-design .project-hero-item,
.page-crypto-design-agency .project-hero-item,
.page-artificial-intelligence-design-agency .project-hero-item {
  box-shadow: 0 8px 16px 0 var(--shadow--white-02);
}

@media screen and (min-width: 768px) {
  .page-saas-website-design-agency .section.hero-marquee-section,
  .page-saas-ui-ux-design .section.hero-marquee-section,
  .page-crypto-design-agency .section.hero-marquee-section,
  .page-artificial-intelligence-design-agency .section.hero-marquee-section {
    padding-bottom: 198px;
  }

  .page-saas-website-design-agency .projects-hero-images,
  .page-saas-ui-ux-design .projects-hero-images,
  .page-crypto-design-agency .projects-hero-images,
  .page-artificial-intelligence-design-agency .projects-hero-images {
    transform: skew(-26deg, -1deg);
  }
}

.section.horizontal-scroll-section.brix-variant-dark-blue,
.brix-variant-dark-blue {
  background-color: var(--secondary--dark-blue);
}

.page-saas-ui-ux-design .rich-text .w-richtext-align-fullwidth,
.page-saas-ui-ux-design .rich-text .w-richtext-figure-type-image {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0;
  margin-right: 0;
}

.page-saas-ui-ux-design .rich-text .w-richtext-figure-type-image > div,
.page-saas-ui-ux-design .rich-text .w-richtext-figure-type-image img {
  width: 100%;
}

.page-crypto-design-agency .button-primary.white {
  color: var(--secondary--blue-300);
}

.page-crypto-design-agency .button-primary.white:hover {
  color: var(--secondary--blue-300);
}

.page-crypto-design-agency .cta-coins-bg-wrapper,
.page-nocode-agency .cta-coins-bg-wrapper {
  overflow: hidden;
}

.page-crypto-design-agency .cta-coins-marquee-wrapper,
.page-nocode-agency .cta-coins-marquee-wrapper {
  will-change: transform;
}

.page-crypto-design-agency .cta-coins-bg-images-wrapper .cta-coins-marquee-wrapper:first-child,
.page-nocode-agency .cta-coins-bg-images-wrapper .cta-coins-marquee-wrapper:first-child {
  animation: brix-crypto-coins-up 26s linear infinite;
}

.page-crypto-design-agency .cta-coins-bg-images-wrapper .cta-coins-marquee-wrapper:last-child,
.page-nocode-agency .cta-coins-bg-images-wrapper .cta-coins-marquee-wrapper:last-child {
  animation: brix-crypto-coins-down 26s linear infinite;
}

.page-crypto-design-agency .crypto-rich-text .w-richtext-align-fullwidth,
.page-crypto-design-agency .crypto-rich-text .w-richtext-figure-type-image {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: 0;
  margin-right: 0;
}

.page-crypto-design-agency .crypto-rich-text .w-richtext-figure-type-image > div,
.page-crypto-design-agency .crypto-rich-text .w-richtext-figure-type-image img {
  width: 100%;
}

@keyframes brix-crypto-coins-up {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    transform: translate3d(0, -33.333%, 0);
  }
}

@keyframes brix-crypto-coins-down {
  from {
    transform: translate3d(0, -33.333%, 0);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}


.page-figma-sites-agency .figma-sites-hero-title {
  margin-top: 14px;
}

@media screen and (max-width: 767px) {
  .page-figma-sites-agency .figma-sites-hero-title {
    margin-top: 14px;
  }

  .page-figma-sites-agency .cta-radius-featured-item-logo.figma-sites-featured-logo {
    max-width: 68%;
  }

  .page-figma-sites-agency .cta-radius-item-logo.flat-figma {
    max-width: 44%;
    margin-top: 0;
    margin-left: 0;
  }
}

@media screen and (max-width: 479px) {
  .card.features-card.brix-feature-horizontal {
    text-align: center;
    flex-flow: column;
    justify-content: flex-start;
    align-items: center;
  }

  .page-figma-sites-agency .figma-sites-hero-title {
    margin-top: 12px;
  }

  .page-figma-sites-agency .cta-radius-featured-item-logo.figma-sites-featured-logo {
    max-width: 62%;
  }

  .page-figma-sites-agency .cta-radius-item-logo.flat-figma {
    max-width: 38%;
  }
}

/* ==========================================================================
   12. Performance Hints
   --------------------------------------------------------------------------
   Skip layout/paint work for heavy below-the-fold sections until the browser
   needs them. Pinned/ScrollTrigger sections are intentionally excluded because
   they need stable measurements.
   ========================================================================== */

@supports (content-visibility: auto) {
  .brix-native-runtime #testimonials,
  .brix-native-runtime .marquee-section,
  .brix-native-runtime .cta-v1-section,
  .brix-native-runtime .products-section,
  .brix-native-runtime .cta-v2 {
    content-visibility: auto;
    contain-intrinsic-size: 1px 900px;
  }

  .brix-native-runtime #testimonials {
    contain-intrinsic-size: 1px 980px;
  }

  .brix-native-runtime .marquee-section {
    contain-intrinsic-size: 1px 760px;
  }

  .brix-native-runtime .cta-v1-section,
  .brix-native-runtime .cta-v2 {
    contain-intrinsic-size: 1px 720px;
  }

  .brix-native-runtime .products-section {
    contain-intrinsic-size: 1px 820px;
  }

}

/* ==========================================================================
   Portfolio Gallery Slider
   Replaces the Webflow `w-slider` base layout (lived in components.css, which
   migrated pages drop) for portfolio single pages. Scoped to the portfolio
   gallery so the inert `w-slider*` markers do not affect any other page.
   The design CSS in brixagencydev.css still owns the mask border/shadow and
   the `.arrow-slider-button.portfolio-arrow` circular styling + desktop inset.
   ========================================================================== */

.portfolio-gallery-slider {
  position: relative;
  height: auto;
  background-color: transparent;
}

.portfolio-gallery-slider .w-slider-mask {
  display: flex;
  position: relative;
  width: 100%;
  overflow: hidden;
}

.portfolio-gallery-slider .w-slide {
  position: relative;
  flex: 0 0 100%;
  width: 100%;
  min-width: 100%;
  transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

.portfolio-gallery-slider .w-slide img {
  display: block;
  width: 100%;
  height: auto;
}

/* Arrow controls: center the arrow glyph and keep the design's circular button.
   brixagencydev.css supplies the desktop top-right `inset`, but the
   `position: absolute` that made it work lived in the dropped components.css
   `.w-slider-arrow-*` base, so it is restored here. */
.portfolio-gallery-slider .arrow-slider-button.portfolio-arrow {
  position: absolute;
  cursor: pointer;
  user-select: none;
}

.portfolio-gallery-slider .arrow-slider-button.portfolio-arrow .line-rounded-icons {
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'Line Rounded Icon Font', sans-serif;
  font-size: 16px;
  line-height: 1;
}

.portfolio-gallery-slider .arrow-slider-button.portfolio-arrow:focus-visible {
  outline: 2px solid var(--primary--red);
  outline-offset: 2px;
}

/* Mobile: stack the slider in normal flow and move the arrows below it,
   centered. Mirrors the portfolio single export's mobile slider overrides. */
@media screen and (max-width: 767px) {
  .portfolio-gallery-slider {
    overflow: visible;
    padding-bottom: 78px;
  }

  .portfolio-gallery-slider .w-slider-mask {
    height: auto;
  }

  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.w-slider-arrow-left,
  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.w-slider-arrow-right {
    position: absolute;
    top: auto;
    bottom: 0;
    right: auto;
    inset: auto auto 0 auto;
    margin: 0;
    width: 54px;
    height: 54px;
    min-width: 54px;
    max-width: 54px;
    min-height: 54px;
    max-height: 54px;
    z-index: 10;
  }

  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.left-btn.w-slider-arrow-left {
    left: calc(50% - 66px);
    transform: none;
  }

  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.w-slider-arrow-right {
    left: calc(50% + 12px);
    transform: none;
  }
}

@media screen and (max-width: 479px) {
  .portfolio-gallery-slider {
    padding-bottom: 58px;
  }

  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.w-slider-arrow-left,
  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.w-slider-arrow-right {
    width: 46px;
    height: 46px;
    min-width: 46px;
    max-width: 46px;
    min-height: 46px;
    max-height: 46px;
  }

  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.left-btn.w-slider-arrow-left {
    left: calc(50% - 52px);
  }

  .portfolio-gallery-slider .arrow-slider-button.portfolio-arrow.w-slider-arrow-right {
    left: calc(50% + 6px);
  }
}

/* ==========================================================================
   Portfolio Single: misc fixes
   ========================================================================== */

/* The Webflow `.w-inline-block { display: inline-block }` helper (restored in
   this runtime) loads after brixagencydev.css and, at equal specificity, beats
   the design's `.visit-wbsite-link { display: flex }`. Restore the row layout
   (inline-flex so the link hugs its content) with the icon + label on one line.
   The icon is an inline SVG using `currentColor`, so the link color drives both
   the label and the icon strokes together. */
.visit-wbsite-link.w-inline-block {
  display: inline-flex;
  align-items: center;
  transition: color 0.3s ease, transform 0.3s ease;
}

/* Same `.w-inline-block` conflict for the launch-checklist filter badges: the
   restored helper beats the design's `.badge-checklist { display: flex }` at
   equal specificity, which stacks the icon above the label. Restore the row so
   the category icon and text sit on one line (top filter + sticky bar). */
.badge-checklist.w-inline-block {
  display: flex;
}

/* Nudge the icon 1px down to sit optically centered against the uppercase label. */
.visit-wbsite-link .visit-website-icon {
  position: relative;
  top: 1px;
  width: 21px;
  height: auto;
  flex: 0 0 auto;
}

/* Hover: icon + label both shift to the brand blue at 60% opacity, transitioned.
   Overrides the design's opacity/scale hover so the only change is the color. */
.visit-wbsite-link:hover {
  color: rgba(35, 136, 255, 0.6);
  opacity: 1;
  transform: none;
}

/* Breadcrumb separator glyph matches the breadcrumb link color instead of the
   default link color. */
.portfolio-breadcrumbs .portfolio-breadcrumb-icon {
  color: var(--neutral--600);
}

/* Customer quote avatar fills the 60px circular wrapper regardless of the source
   image aspect ratio (components.css supplied no `img` sizing for this block). */
.portfolio-customer-image-wrapper img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* ==========================================================================
   Portfolio listing ("Our work")
   ========================================================================== */

/* Tab links lay their icon + label out in a row. The runtime
   `.w-inline-block { display: inline-block }` helper loads after brixagencydev
   and, at equal specificity, defeats the design's `display: flex`, which stacks
   the dots icon above the label. Restore the flex row (same class of fix as the
   Visit Website link and award cards). The icon's own margin-right supplies the
   gap. */
.page-tabs-link.w-inline-block,
.purple-tabs-link.w-inline-block {
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Align the tab menu's right edge with the card grid. The design ships the menu
   at max-width 1320 while the card container (`.container-default`) is 1228, so
   the right-aligned tabs jut ~46px past the cards on wide viewports. Matching the
   container width (same 24px padding) keeps the tabs flush with the grid. */
.hero-tabs-menu {
  max-width: 1228px;
}

/* --------------------------------------------------------------------------
   Portfolio hero tabs — "Soft Tray" (DOCS/.../ELEMENTS/TAB-DESIGNOPTIONS.html,
   Option 02). Replaces the two separate bordered/colored pills with a single
   light tray holding two tabs. Active = white button-grade surface (top-light
   gradient + hairline border + inset highlight + soft shadow, matching the
   secondary button in BUTTONS.html). Inactive = scaled down (.94) and faded.
   Neutral active color (no blue/purple). Icons 20px, label 17px. The Webflow
   state contract is unchanged: setupTabs() toggles `.w--current` on the active
   link, which this styles. Scoped to `.portfolio-tabs` so the Products page
   (`.page-tabs-link---gray`) is untouched.
   -------------------------------------------------------------------------- */

/* Positioning row: keep it right-aligned and flush with the 1228 card grid.
   The single `.portfolio-tabs-tray` child is pushed to the right edge. */
.portfolio-tabs .hero-tabs-menu {
  justify-content: flex-end;
  align-items: center;
}

/* The tray hugs its two tabs. */
.portfolio-tabs-tray {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px;
  border: 1px solid #eef1f6;
  border-radius: 999px;
  background: #fafbfd;
  box-shadow: inset 0 1px 0 #fff;
}

/* Tabs — neutral scale-focus base. Overrides the exported 2px-bordered white
   pill and its blue/purple active text. The `.w-inline-block` flex-row rule
   above already lays icon + label in a row; this owns the rest. */
.portfolio-tabs .page-tabs-link,
.portfolio-tabs .purple-tabs-link {
  min-height: 58px;
  padding: 14px 24px;
  gap: 10px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  box-shadow: none;
  color: var(--neutral--600);
  font-size: 17px;
  font-weight: 700;
  line-height: 1.1;
  opacity: 0.6;
  transform: translate3d(0, 0, 0.001px) scale(0.94);
  transition: color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    background-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    border-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    transform 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    opacity 0.26s cubic-bezier(0.2, 0.8, 0.2, 1);
}

/* Icon: 20px (exported size kept); drop the exported negative/right margins so
   the flex gap owns spacing. Inactive logo slightly desaturated; the icon never
   moves on hover/active (per request) — only its color wakes up. */
.portfolio-tabs .icon-wrapper.portfolio-brix-icon {
  margin: 0;
  filter: grayscale(0.5);
  transition: filter 0.26s cubic-bezier(0.2, 0.8, 0.2, 1);
}

/* Inactive hover: wake up toward active, no icon movement. */
.portfolio-tabs .page-tabs-link:hover,
.portfolio-tabs .purple-tabs-link:hover {
  border-color: transparent;
  box-shadow: none;
  color: var(--neutral--800);
  opacity: 0.92;
  transform: translate3d(0, 0, 0.001px) scale(0.97);
}

.portfolio-tabs .page-tabs-link:hover .icon-wrapper.portfolio-brix-icon,
.portfolio-tabs .purple-tabs-link:hover .icon-wrapper.portfolio-brix-icon {
  filter: grayscale(0);
}

/* Active: white button-grade surface, neutral color. */
.portfolio-tabs .page-tabs-link.w--current,
.portfolio-tabs .purple-tabs-link.w--current {
  color: var(--neutral--800);
  opacity: 1;
  transform: translate3d(0, 0, 0.001px) scale(1.02);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border-color: #eef1f6;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 1px rgba(255, 255, 255, 0.7),
    0 4px 12px rgba(25, 33, 61, 0.055);
}

.portfolio-tabs .page-tabs-link.w--current .icon-wrapper.portfolio-brix-icon,
.portfolio-tabs .purple-tabs-link.w--current .icon-wrapper.portfolio-brix-icon {
  filter: none;
}

/* Mobile: the menu centers (brixagencydev) and the tray shrinks to fit; let the
   two tabs share the width so labels never clip on small screens. */
@media screen and (max-width: 767px) {
  .portfolio-tabs .hero-tabs-menu {
    justify-content: center;
  }

  .portfolio-tabs-tray {
    display: flex;
    width: 100%;
    max-width: 420px;
  }

  .portfolio-tabs .page-tabs-link,
  .portfolio-tabs .purple-tabs-link {
    flex: 1 1 0;
    min-height: 54px;
    padding: 12px 16px;
    font-size: 16px;
  }
}

/* Card hover. On the live site this is a Webflow IX2 (JS) interaction, removed
   with the Webflow runtime. Replicated here exactly as measured: the card lifts
   4px and its image scales to 1.02, both eased. The card already clips overflow,
   so the image zoom stays within the rounded card. */
.portfolio-card {
  transition: color 0.3s ease, transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}

.portfolio-card .portfolio-card-image {
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: transform;
}

.portfolio-card:hover {
  transform: translateY(-4px);
}

.portfolio-card:hover .portfolio-card-image {
  transform: scale(1.02);
}

/* "See project" affordance: on card hover the label + arrow fade to 70% opacity
   and the arrow nudges right. Applies to every portfolio card (client + template
   tabs). */
.portfolio-card .arrow-link {
  transition: opacity 0.3s ease, color 0.3s ease, transform 0.3s ease;
}

.portfolio-card .arrow-link .button-icon,
.portfolio-card .arrow-link .ba-link__icon {
  transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.portfolio-card:hover .arrow-link {
  opacity: 0.7;
}

.portfolio-card:hover .arrow-link .button-icon,
.portfolio-card:hover .arrow-link .ba-link__icon {
  transform: translateX(4px);
}

/* ==========================================================================
   Products page ("Products by BRIX Agency")
   ========================================================================== */

/* Card background images. brixagencydev.css points these at `../images/...`
   (Webflow root), which 404s in the migrated tree. Repoint to the migrated
   assets; keep the design's position/size/repeat. */
.product-card-image-wrapper.brix-templates {
  background-image: url('/assets/images/pages/products/brix-templates-webflow-products_1.png');
}

.product-card-image-wrapper.inbound-elements {
  background-image: url('/assets/images/pages/products/inboundelements-hubspot-products.png');
}

.product-card-image-wrapper.figma-freebies {
  background-image: url('/assets/images/pages/products/brix-agency-figma-products.png');
}

/* Public / Private products switcher — centered "Soft Tray" tab (same family as
   the portfolio and Services/Technology tabs; DOCS/.../ELEMENTS/
   TAB-DESIGNOPTIONS.html, Option 02). The cross-fading "Public/Private products"
   heading was removed from the markup, so the tray now stands on its own,
   centered. Active = white button-grade surface (gradient + hairline border +
   inset highlight + soft shadow); inactive scaled down (.94) and faded. Tabler
   glyph icons (ti-world / ti-lock) replace the exported line-rounded glyphs.
   `.page-tabs-menu` is exclusive to this page. Webflow state contract unchanged:
   setupTabs() toggles `.w--current`. */

/* Tray: centered, hugging its two tabs. */
.brix-native-runtime .page-tabs-menu {
  display: flex;
  width: -moz-fit-content;
  width: fit-content;
  margin: 0 auto 28px;
  justify-content: center;
  align-items: center;
  gap: 6px;
  padding: 6px;
  border: 1px solid #eef1f6;
  border-radius: 999px;
  background: #fafbfd;
  box-shadow: inset 0 1px 0 #fff;
}

/* Tabs — neutral scale-focus base. Overrides the exported bordered pill and its
   blue hover/active color. */
.brix-native-runtime .page-tabs-menu .page-tabs-link {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 58px;
  padding: 14px 24px;
  gap: 10px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  box-shadow: none;
  color: var(--neutral--600);
  font-size: 17px;
  font-weight: 700;
  line-height: 1.1;
  opacity: 0.6;
  transform: translate3d(0, 0, 0.001px) scale(0.94);
  transition: color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    background-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    border-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    transform 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    opacity 0.26s cubic-bezier(0.2, 0.8, 0.2, 1);
}

/* Tabler glyph icon: 20px, currentColor. */
.brix-native-runtime .page-tabs-menu .page-tabs-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  line-height: 1;
}

/* Inactive hover: wake up toward active. */
.brix-native-runtime .page-tabs-menu .page-tabs-link:not(.w--current):hover {
  border-color: transparent;
  box-shadow: none;
  color: var(--neutral--800);
  opacity: 0.92;
  transform: translate3d(0, 0, 0.001px) scale(0.97);
}

/* Active: white button-grade surface, neutral color. */
.brix-native-runtime .page-tabs-menu .page-tabs-link.w--current {
  color: var(--neutral--800);
  opacity: 1;
  transform: translate3d(0, 0, 0.001px) scale(1.02);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border-color: #eef1f6;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 1px rgba(255, 255, 255, 0.6),
    0 6px 16px rgba(25, 33, 61, 0.08);
}

/* Mobile: keep both tabs comfortable. */
@media screen and (max-width: 767px) {
  .brix-native-runtime .page-tabs-menu .page-tabs-link {
    min-height: 52px;
    padding: 12px 18px;
    font-size: 16px;
  }
}

/* Tighten the gap between the tabs and the content below. The exported grid
   ships `margin-top: 48px` and the Integrations pane its own `padding-top`,
   which — stacked under the tray's bottom margin — left a large void. The tray
   now owns the spacing (28px); zero out the pane offsets so both tabs sit the
   same distance above their content. */
.brix-native-runtime .page-tabs-grid {
  margin-top: 0;
}

.brix-native-runtime .integrations-section {
  padding-top: 0;
}

/* The large product cards (and Tab 1 single-product cards) are <div>s wrapping
   one inner <a class="arrow-link">; setupCardLinks() makes the whole card
   clickable, so flag the affordance. (A CSS stretched-link is unreliable here
   because the arrow-link's own will-change/transform makes it the containing
   block.) Cards that are themselves <a> already show the pointer. */
.product-card:not(a),
.single-product-card:not(a) {
  cursor: pointer;
}

/* Card hover (same affordance pattern as the portfolio cards). The product
   cards ship no hover on the source; this brings them in line: the card lifts,
   and the "Read more / Learn more / Live preview" arrow fades to 70% and nudges
   right. Applies to every product card variant on both tabs. */
.product-card,
.single-product-card,
.feature-card {
  transition: color 0.3s ease, transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}

.product-card .arrow-link,
.single-product-card .arrow-link,
.feature-card .arrow-link {
  transition: opacity 0.3s ease, color 0.3s ease, transform 0.3s ease;
}

.product-card .arrow-link .button-icon,
.single-product-card .arrow-link .button-icon,
.feature-card .arrow-link .button-icon {
  transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.product-card:hover,
.single-product-card:hover,
.feature-card:hover {
  transform: translateY(-4px);
}

.product-card:hover .arrow-link,
.single-product-card:hover .arrow-link,
.feature-card:hover .arrow-link {
  opacity: 0.7;
}

.product-card:hover .arrow-link .button-icon,
.single-product-card:hover .arrow-link .button-icon,
.feature-card:hover .arrow-link .button-icon {
  transform: translateX(4px);
}

/* ==========================================================================
   Inspiration single — page fixes
   The collapsible TOC and Share post reuse the shared blog single components
   (styled by blog/blog-single.css under a `.blog-single-page` scope, behavior
   from setupArticleCollapsibles()). These rules cover the inspiration-specific
   layout parity items the migrated page needs without components.css loaded.
   ========================================================================== */

/* Tighten the gap between the hero heading and the excerpt to match the
   original (the h1 default bottom margin reads too large here). */
.section.inspiration-hero-section .inner-container.inspiration-hero .inspiration-hero-heading {
  margin-bottom: 0;
}

.section.inspiration-hero-section .inner-container.inspiration-hero > p.mgb-small {
  margin-top: 12px;
}

/* Article images: span the full rich-text column. components.css (not loaded
   here) normally resets the figure margins; without it the figure keeps the
   normalize `margin: 1em 40px` inset, leaving images narrower than the text. */
.inspiration-content-section .blog-rich-text figure.w-richtext-align-fullwidth,
.inspiration-content-section .blog-rich-text figure.w-richtext-figure-type-image {
  width: 100%;
  max-width: 100%;
  margin-left: 0;
  margin-right: 0;
}

.inspiration-content-section .blog-rich-text figure.w-richtext-figure-type-image img {
  width: 100%;
  height: auto;
  display: block;
}

/* Rich-text links: keep their colour and fade to 60% opacity on hover instead
   of switching to red. */
.inspiration-content-section .blog-rich-text a {
  transition: opacity .3s, color .3s;
}

.inspiration-content-section .blog-rich-text a:hover {
  color: var(--secondary--blue-200);
  opacity: 0.6;
}

/* Reduce the gap above the Table of contents card: zero out the rich-text
   wrapper + article-column top margins and tighten the content section's top
   padding so the card sits much closer to the hero. */
.section.inspiration-content-section {
  padding-top: var(--sizes--s8);
}

.inspiration-content-section .blog-rich-text-wrapper {
  margin-top: 0;
}

.inspiration-content-section .blog-single-page .article-column {
  margin-top: 0;
}

/* Share post spacing: less air above (≈1/3) and below (≈1/2). The article body
   contributes its own bottom margin, so trim that too for inspiration. */
.inspiration-content-section .blog-post-content {
  margin-bottom: 16px;
}

.inspiration-content-section .inspiration-share-scope {
  margin-top: 12px;
  margin-bottom: 24px;
  /* The shared `.blog-single-page` scope sets `overflow-x: hidden`, which clips
     the drop shadow of the right-most share icon. Let it paint. */
  overflow: visible;
}

/* Stacked hero (≤991px, where the two columns collapse): the collage image and
   the divider line above it span the full viewport width — no container
   padding. Only this section breaks out. */
@media screen and (max-width: 991px) {
  .section.inspiration-hero-section .inspiration-hero-image-wrapper {
    width: 100vw;
    max-width: 100vw;
    margin-right: calc(50% - 50vw);
    margin-left: calc(50% - 50vw);
    border-top: 1px solid var(--neutral--400);
  }

  .section.inspiration-hero-section .inspiration-hero-image-wrapper img {
    width: 100%;
    display: block;
  }
}

/* ==========================================================================
   "Top website designs" showcase pages (ai-web-design, saas-web-design, …;
   scoped by the shared `.showcase-website-designs` body class) — interactions
   the dropped Webflow runtime used to own: the category-filter dropdown arrow
   flip, in-page scroll offset so category anchors land below the sticky nav,
   and the ambient drift of the hero "bubble" image clusters. Behavior is in
   setupCategoryFilters().
   ========================================================================== */

/* Mobile category filter: the header is the toggle; flip its arrow when open. */
.showcase-website-designs .filters-wraper {
  cursor: pointer;
}

.showcase-website-designs .line-rounded-icons.dropdown-arrow.filters {
  transition: transform 0.3s ease;
}

.showcase-website-designs .card-filter-wrapper.is-filters-open .line-rounded-icons.dropdown-arrow.filters {
  transform: rotate(180deg);
}

/* Category anchors land clear of the fixed navbar when smooth-scrolled. */
.showcase-website-designs .top-websites-block[id] {
  scroll-margin-top: 96px;
}

/* Ambient float of the hero image clusters (replaces the Webflow IX loop). The
   wrappers position with margins/offsets, so animating transform is safe. */
@media (prefers-reduced-motion: no-preference) {
  .showcase-website-designs .bubble-row-wrapper {
    animation: aiwd-bubble-drift 7s ease-in-out infinite alternate;
    will-change: transform;
  }

  .showcase-website-designs .bubble-row-wrapper.left-02,
  .showcase-website-designs .bubble-row-wrapper.right-01 {
    animation-duration: 8.5s;
    animation-delay: -2.2s;
  }

  .showcase-website-designs .bubble-row-wrapper.left-03,
  .showcase-website-designs .bubble-row-wrapper.right-03 {
    animation-duration: 9.5s;
    animation-delay: -4.4s;
  }
}

@keyframes aiwd-bubble-drift {
  from {
    transform: translateY(-10px);
  }
  to {
    transform: translateY(10px);
  }
}

/* --------------------------------------------------------------------------
   Review feedback (filter sidebar + cards).
   -------------------------------------------------------------------------- */

/* (1a) Category items: icon to the LEFT of the label, on one line. This page
   does not load components.css, so Webflow's `.w-inline-block` (display:
   inline-block) is undefined and the link's two child <div>s stack vertically;
   force the intended flex row. */
.showcase-website-designs .link-category-wrapper {
  display: flex !important;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  /* (1b) Align the item's left edge with the "Filter by" header (drop the
     extra left inset the items had over the header). */
  padding-left: 0;
}

.page-ai-web-design.showcase-website-designs .link-category-wrapper,
.page-saas-web-design.showcase-website-designs .link-category-wrapper {
  border-color: transparent;
  transition: opacity .3s ease, border-color .3s ease, color .3s ease;
}

.page-ai-web-design.showcase-website-designs .link-category-wrapper:hover,
.page-saas-web-design.showcase-website-designs .link-category-wrapper:hover {
  border-color: transparent;
  opacity: .7;
}

.showcase-website-designs .link-category-wrapper .category-title-top-saas-website {
  text-align: left;
}

/* (1c) Show the whole category list (only 11 items) and remove the scrollbar. */
.showcase-website-designs .scroll-bar {
  aspect-ratio: auto;
  max-height: none;
  overflow: visible;
  margin-right: 0;
  padding-right: 0;
}

/* (2) The outbound arrow keeps even padding (incl. bottom) on hover. */
.showcase-website-designs .card-top-saas-website .arrow-link-wrapper {
  min-height: 0;
  max-height: none;
  padding-top: 6px;
  padding-bottom: 6px;
}

/* (2) On mobile the card title must read larger than its description. */
@media screen and (max-width: 767px) {
  .showcase-website-designs .card-top-saas-website .list-item-title {
    font-size: 18px;
    line-height: 1.35;
  }
}

/* (3) Trim the empty space above "Filter by" on tablet/mobile. */
@media screen and (max-width: 991px) {
  .showcase-website-designs .section.pd-top-56px-pd-bottom-160px {
    padding-top: 24px;
  }

  .showcase-website-designs .card-filter-wrapper {
    padding-top: 12px;
  }

  .showcase-website-designs .filters-wraper.desktop-show {
    padding-top: 4px;
  }
}

/* ==========================================================================
   Blocks Kit (/blocks-kit) page tweaks
   --------------------------------------------------------------------------
   Page-scoped review fixes that override brixagencydev.css.
   ========================================================================== */

/* (1) "Preview Blocks Kit" dropdown links must place the icon to the LEFT of
   the label, on a single line. brixagencydev.css sets
   `.dropdown-link-blocks-kit { display:flex }`, but the Webflow
   `.w-inline-block { display: inline-block }` shim (defined earlier in this
   file) loads after brixagencydev and shares the same specificity, so it wins —
   the <a> collapses to inline-block and its block child <div> drops below the
   icon. Restore the intended flex row with a higher-specificity selector, and
   keep the label on one line (white-space: nowrap) so the list sizes its width
   to the longest label instead of wrapping each label to two lines. */
.page-blocks-kit .dropdown-link-blocks-kit.w-inline-block,
.page-cms-comparison .dropdown-link-blocks-kit.w-inline-block {
  display: flex;
  flex-direction: row;
  align-items: center;
  white-space: nowrap;
}

/* The links are block-level flex items, so they stretch to the list width
   (= the toggle width via min-width:100%) and the longest no-wrap label
   ("Preview on Webflow") overflows past the card's right padding, touching the
   edge. Size the list to its content so the card hugs the longest label and the
   24px right padding is preserved for every row. */
.page-blocks-kit .dropdown-blocks-kit-wrapper.w-dropdown-list,
.page-cms-comparison .dropdown-blocks-kit-wrapper.w-dropdown-list {
  width: -moz-max-content;
  width: max-content;
}

/* Hover turns the label blue instead of fading it out (keep the subtle slide). */
.page-blocks-kit .dropdown-link-blocks-kit.w-inline-block:hover,
.page-cms-comparison .dropdown-link-blocks-kit.w-inline-block:hover {
  opacity: 1;
  color: var(--secondary--blue-200);
}

/* (2) Every card in the "Preview" section (Take a look a the sections inside
   Blocks Kit) — all 12, whether .hover-blocks-kit, .opacity-features, or plain —
   carries a constant 3px gray border at rest and turns blue on hover. Keeping
   the width fixed at 3px (instead of growing 1px -> 3px) means the hover only
   swaps the color, so there is no jump. box-sizing is border-box globally, so
   the thicker border eats into the card's padding without shifting layout. */
.page-blocks-kit #preview .card.features-grid-card {
  border-width: 3px;
  border-color: var(--neutral--300);
  transition: border-color .3s;
}

.page-blocks-kit #preview .card.features-grid-card:hover {
  border-color: var(--secondary--blue-200);
}

/* (3) The Default / Dark Mode / Minimal switcher — "Compact" text-tab style
   (DOCS/.../ELEMENTS/TAB-TEXT-DESIGNOPTIONS.html, Option 06). Replaces the gray
   container + gray inactive pills with a light tray that hugs its three pills;
   the active pill = white button-grade surface (top-light gradient + hairline
   border + inset highlight + soft shadow, matching the secondary button in
   BUTTONS.html). Inactive pills scale down (.95) and fade. Text-only, 15px
   label, tight padding so the switcher stays subordinate to the hero. The
   higher-specificity `.page-blocks-kit` selector overrides the per-breakpoint
   max-width/padding/color rules in brixagencydev.css. Webflow state contract is
   unchanged: setupTabs() toggles `.w--current` on the active link. */
.page-blocks-kit .tabs-menu-blocks-kit {
  max-width: 100%;
  width: -moz-fit-content;
  width: fit-content;
  gap: 5px;
  padding: 5px;
  margin-left: auto;
  margin-right: auto;
  border: 1px solid #eef1f6;
  border-radius: 999px;
  background-color: #f6f8fb;
  box-shadow: inset 0 1px 0 #fff;
}

/* Keep label centered in each pill (the `.w-inline-block` shim would otherwise
   collapse the <a> to inline-block and drop its label div). */
.page-blocks-kit .tab-link-blocks-kit.w-inline-block {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Tabs: neutral scale-focus base. Overrides the exported gray pill. */
.page-blocks-kit .tab-link-blocks-kit {
  min-height: 46px;
  padding: 11px 16px;
  border: 1px solid transparent;
  border-radius: 999px;
  background-color: transparent;
  box-shadow: none;
  color: var(--neutral--600);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.1;
  opacity: 0.6;
  transform: translate3d(0, 0, 0.001px) scale(0.95);
  transition: color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    background-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    border-color 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    box-shadow 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    transform 0.26s cubic-bezier(0.2, 0.8, 0.2, 1),
    opacity 0.26s cubic-bezier(0.2, 0.8, 0.2, 1);
}

/* Inactive hover: wake up toward active. */
.page-blocks-kit .tab-link-blocks-kit:not(.w--current):hover {
  background-color: transparent;
  color: var(--neutral--800);
  opacity: 0.92;
  transform: translate3d(0, 0, 0.001px) scale(0.98);
}

/* Active: white button-grade surface, neutral color. */
.page-blocks-kit .tab-link-blocks-kit.w--current {
  color: var(--neutral--800);
  opacity: 1;
  transform: translate3d(0, 0, 0.001px) scale(1.01);
  background: linear-gradient(180deg, #fff 0%, #fbfcff 100%);
  border-color: #eef1f6;
  box-shadow: inset 0 1px 0 #fff, 0 0 0 1px rgba(255, 255, 255, 0.6),
    0 6px 16px rgba(25, 33, 61, 0.08);
}

/* ==========================================================================
   CMS comparison (/webflow-vs-framer-vs-wordpress-cms-comparison) page tweaks
   --------------------------------------------------------------------------
   Page-scoped support for the sticky Table-of-contents and anchor scrolling,
   driven together with setupComparisonToc() in brix-native-runtime.js.
   ========================================================================== */

/* Anchor targets sit clear of the top when smooth-scrolled to (and clear of the
   mobile sticky TOC header bar). The 7 comparison sections are direct children
   of the article card. */
.page-cms-comparison .content-table-card > div[id] {
  scroll-margin-top: 100px;
}

/* Table-of-contents links: .content-table-link declares display:flex in
   brixagencydev.css so the icon sits inline with its label, but the global
   `.w-inline-block { display:inline-block }` shim loads AFTER brixagencydev and
   wins at equal specificity — collapsing each link to inline-block, which
   stacked the label BELOW the icon (the broken sidebar). Restore the flex row
   with a higher-specificity selector. Same fix pattern as the dropdown links. */
.page-cms-comparison .content-table-link.w-inline-block {
  display: flex;
  flex-direction: row;
  align-items: center;
}

/* Mobile collapsible TOC: the header arrow flips when the list is open. The
   list height itself is animated inline by setupComparisonToc(). */
@media screen and (max-width: 767px) {
  .page-cms-comparison .content-table-sticky .dropdown-arrow.content-table {
    transition: transform .3s ease;
  }

  .page-cms-comparison .content-table-sticky.is-toc-open .dropdown-arrow.content-table {
    transform: rotate(180deg);
  }
}

/* Article images: span the full rich-text column. components.css (not loaded
   here) normally resets the figure margins; without it the figure keeps the
   normalize `margin: 1em 40px` inset, so every image sat 40px in from the text
   on both sides — the "images don't line up with the text" symptom. Reset the
   inset, let the figure fill the column, and make the image a full-width block
   so it aligns flush with the paragraphs above and below it. */
.page-cms-comparison .content-table-rich-text figure.w-richtext-align-fullwidth,
.page-cms-comparison .content-table-rich-text figure.w-richtext-figure-type-image {
  width: 100%;
  max-width: 100%;
  margin-left: 0;
  margin-right: 0;
}

.page-cms-comparison .content-table-rich-text figure.w-richtext-figure-type-image > div,
.page-cms-comparison .content-table-rich-text figure.w-richtext-figure-type-image img {
  width: 100%;
}

.page-cms-comparison .content-table-rich-text figure.w-richtext-figure-type-image img {
  height: auto;
  display: block;
}

/* Rich-text links keep the brand blue and fade on hover instead of switching to
   the default red, matching the blog/inspiration article treatment. */
.page-cms-comparison .content-table-rich-text a {
  color: var(--secondary--blue-200);
  text-decoration: none;
  transition: opacity .3s, color .3s;
}

.page-cms-comparison .content-table-rich-text a:hover {
  color: var(--secondary--blue-200);
  opacity: 0.6;
}

/* Body copy alignment: `body` sets text-wrap:balance globally, which the other
   article variants reset (.rich-text p, .blog-rich-text p), but
   .content-table-rich-text never did — so every paragraph inherited the
   balanced wrap, giving the ragged, "not aligned" line breaks. Reset the whole
   rich-text block to the normal greedy wrap (text-wrap is inherited, so this
   cascades to its paragraphs, list items and headings). */
.page-cms-comparison .content-table-rich-text {
  text-wrap: auto;
}

/* Sub-section headings (bare <h3>/<h4> inside the rich text) inherit
   margin-top:0 from the base heading rules, so they sat tight against the
   preceding paragraph with no breathing room. Add a clear top gap so each
   sub-section reads as a new block (the <h2> section titles already carry their
   own top padding via .content-table-title). */
.page-cms-comparison .content-table-rich-text h3,
.page-cms-comparison .content-table-rich-text h4 {
  margin-top: var(--sizes--s8);
}

/* "Preview website" toggle: the .dropdown-preview-website modifier forces
   justify-content:space-between + a 40px column gap, which (since the dropdown
   wrapper is shrink-to-fit inline-block) left a large empty band between the
   label and the arrow — reading as far more padding on the right than the left.
   Group the icon, label and arrow tightly and centre them so the 24px side
   padding looks balanced, matching the Blocks Kit toggle. */
.page-cms-comparison .button-secondary.dropdown-preview-website {
  justify-content: center;
  grid-column-gap: 10px;
  column-gap: 10px;
  padding-left: var(--sizes--s6);
  padding-right: var(--sizes--s6);
}
