/* ===== Integrations page (integrations-aqua.html) ===== */
/* Shares style-aqua.css's design language — these rules only add the
   page-specific components that don't already exist site-wide. */

/* ----- Hero: network/hub particle video, full 100vh — same recipe as
   #hero-video / .hero-scrim on contact-aqua.html. Falls through to the
   base .hero (height:100vh) and .hero-headline-wrap (justify-content:
   flex-start, near the top) rules in style-aqua.css unmodified, since
   the video is composed with the network shape low in frame and the
   upper area dark/clean — exactly where the nav + headline already sit
   by default. Only the scrim needs a page-specific gradient. ----- */

.int-hero-video .hero-scrim {
  background: none;
}

/* Bottom fade, same technique/target color as the engine pages'
   .sts-hero-bottom-fade / .ttt-hero-bottom-fade -- confirmed this
   page's next section (.statement-mesh-sticky) resolves to the same
   var(--light-bg) / #F5F6FA. Separate element from .hero-scrim above
   (which darkens the whole hero top-to-bottom) -- .hero-scrim's own
   0.35 alpha at 100% stacks with this, which is expected/fine since
   both are just darkening/blending layers converging toward the same
   bottom edge. */
.int-hero-bottom-fade {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 90px;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(
    to bottom,
    transparent 0%,
    rgba(245, 246, 250, 0.18) 35%,
    rgba(245, 246, 250, 0.5) 60%,
    rgba(245, 246, 250, 0.82) 82%,
    #F5F6FA 100%
  );
}

/* ----- Icon marquee, vertical middle of the hero -----
   position:absolute + top:50% resolves against .hero-content (the
   nearest positioned ancestor, position:absolute+inset:0 in the base
   rule -- spans the FULL hero box), which centers this independently
   of .hero-headline-wrap's own flex layout/content height, rather
   than depending on where that content happens to end.
   Standard seamless-loop technique, same one already used for
   .gr-marquee (global-reach-aqua.css): the icon set is duplicated
   once back-to-back in the HTML, and the track animates exactly
   -50% -- since the duplicate is identical, the moment the first copy
   scrolls fully out of view the second copy is sitting exactly where
   the first one started, so the loop has no visible seam or jump. */
.int-hero-marquee {
  position: absolute;
  z-index: 2;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  width: 100%;
  max-width: 100%;
  overflow: hidden;
  pointer-events: none;
  mask-image: linear-gradient(to right, transparent, #000 10%, #000 90%, transparent);
  -webkit-mask-image: linear-gradient(to right, transparent, #000 10%, #000 90%, transparent);
}

.int-hero-marquee-track {
  display: flex;
  align-items: center;
  width: max-content;
  gap: var(--space-6);
  animation: intHeroMarquee 32s linear infinite;
}

/* Big frosted-glass tiles, not small muted icons -- matches the
   reference's bento-square treatment: a real card (translucent white
   fill, blurred backdrop, visible soft border, drop shadow) with a
   clearly visible icon inside, rather than an icon floating directly
   on the hero background at reduced opacity. Same glass recipe used
   elsewhere on the site (.engine-workflow-badge, .auto-flow-node). */
/* Solid white, not translucent glass -- matches the reference exactly,
   and gives the full-color brand logos a clean, consistent backdrop
   to sit on regardless of what's behind the card (several of these
   logos assume a white background themselves). No backdrop-filter
   needed once the fill is opaque. */
.int-hero-marquee-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 64px;
  height: 64px;
  border-radius: 16px;
  background: #ffffff;
  box-shadow: 0 10px 26px rgba(0, 0, 0, 0.25);
  color: var(--dark-bg);
}

.int-hero-marquee-icon svg {
  width: 28px;
  height: 28px;
}

/* Real brand logos (simple-icons) come as <img>, not inline <svg> --
   full color baked into the source file, so no `color`/currentColor
   styling applies (that's only relevant to the two remaining generic
   Lucide icons, which still render as inline <svg>). */
.int-hero-marquee-icon img {
  width: 30px;
  height: 30px;
  object-fit: contain;
}

@keyframes intHeroMarquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
  .int-hero-marquee-track {
    animation: none;
  }
}

.int-hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.08);
  border: 0.5px solid rgba(255, 255, 255, 0.2);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  font-family: 'Inter', sans-serif;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-on-dark);
  margin-bottom: var(--space-3);
  opacity: 0;
  animation: heroTextEntrance 0.6s ease-out forwards;
}

.int-hero-badge-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent-amber);
}

/* ----- Section 2: pinned category tour — architecture identical to
   index.html's Use Cases section and whitelabel-aqua.html's
   Configurable section (reuses the literal .usecases-* classes from
   style-aqua.css: sticky inner, 8% white->black crossfade, segmented
   progress bar), just sized for 5 items x 80vh = 400vh instead of the
   shared default 450vh — overridden via the two-class selector below so
   it wins on specificity regardless of stylesheet load order. Driven by
   js/integrations-scroll.js (the same trimmed progress/crossfade math
   already used for wl-configurable-scroll.js / wl-infra-scroll.js).
   Right-column mockup panels are page-specific (.int-mock-*); the
   crossfade container itself is the shared .usecases-transcript-stack /
   .usecases-transcript, so no structural CSS is duplicated for that
   part. ----- */

.usecases-scroll-wrapper.int-scroll-wrapper {
  height: 400vh;
}

.int-mock-window {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 0.5px solid var(--border);
  border-radius: var(--radius-ui);
  overflow: hidden;
  background: #ffffff;
}

.int-mock-chrome {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 6px;
  height: 34px;
  padding: 0 12px;
  background: var(--surface-alt);
  border-bottom: 0.5px solid var(--border);
}

.int-mock-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.15);
}

.int-mock-tab {
  margin-left: 10px;
  font-family: 'Inter', sans-serif;
  font-size: 11px;
  font-weight: 600;
  color: var(--text-secondary);
}

.int-mock-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
  padding: var(--space-3);
}

.int-mock-body-center {
  align-items: center;
  text-align: center;
}

.int-mock-caption {
  font-family: 'Inter', sans-serif;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--text-secondary);
  margin-top: 4px;
}

.int-mock-contact-card {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  padding: var(--space-2);
  border: 0.5px solid var(--border);
  border-radius: var(--radius-ui);
  text-align: left;
}

.int-mock-avatar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--cream-lightest);
  color: #ffffff;
  font-family: 'Inter', sans-serif;
  font-weight: 700;
  font-size: 13px;
}

.int-mock-contact-lines {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.int-mock-contact-name {
  font-family: 'Inter', sans-serif;
  font-weight: 700;
  font-size: 14px;
  color: var(--text-primary);
}

.int-mock-contact-sub {
  font-family: 'Inter', sans-serif;
  font-size: 12px;
  color: var(--text-secondary);
}

.int-mock-synced-badge {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 8px;
  border-radius: var(--radius-pill);
  background: rgba(170, 208, 226, 0.35);
  color: var(--dark-bg);
  font-family: 'Inter', sans-serif;
  font-size: 11px;
  font-weight: 600;
}

.int-mock-calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 6px;
  width: 100%;
  max-width: 220px;
}

.int-mock-calendar-grid span {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 24px;
  border-radius: 6px;
  background: var(--surface-alt);
  font-family: 'Inter', sans-serif;
  font-size: 10px;
  color: var(--text-muted);
}

.int-mock-calendar-active {
  background: var(--accent-amber) !important;
  color: var(--text-primary) !important;
  font-weight: 700;
}

.int-mock-chat-thread {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
  justify-content: center;
}

.int-mock-chat-thread .chat-bubble {
  opacity: 1;
  transform: none;
}

.int-mock-ticket-row {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--text-muted);
}

.int-mock-ticket-status {
  padding: 5px 12px;
  border-radius: var(--radius-pill);
  font-family: 'Inter', sans-serif;
  font-size: 12px;
  font-weight: 600;
}

.int-mock-ticket-status-open {
  background: var(--surface-alt);
  color: var(--text-secondary);
}

.int-mock-ticket-status-progress {
  background: var(--accent-amber);
  color: var(--text-primary);
}

.int-mock-order-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 0;
  border-bottom: 0.5px solid var(--border);
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  color: var(--text-secondary);
}

.int-mock-order-row:last-child {
  border-bottom: none;
}

.int-mock-order-value {
  font-weight: 700;
  color: var(--text-primary);
}

/* ----- Shared section scaffolding (Sections 3-4) ----- */

.int-section {
  background: var(--light-bg);
}

.int-grid-section {
  background: var(--light-bg);
}

.int-how-section {
  background: var(--light-bg);
}

.int-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: var(--space-7) var(--space-3) var(--space-6);
}

.int-section-top {
  max-width: 640px;
  margin: 0 auto var(--space-5);
  text-align: center;
}

.int-section-label {
  display: block;
  font-family: 'Inter', sans-serif;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-secondary);
  margin-bottom: var(--space-2);
}

.int-section-heading {
  font-size: clamp(30px, 4vw, 42px);
  line-height: 1.15;
  letter-spacing: -0.02em;
  color: var(--text-primary);
}

.int-heading-sans {
  font-family: 'Inter', sans-serif;
  font-weight: 700;
}

.int-heading-serif {
  font-family: 'Instrument Serif', serif;
  font-style: italic;
  font-weight: 400;
  font-size: 1.08em;
}

/* ----- Section 3: All Integrations — filter pills + tool card grid.
   Filter pills clone .cs-filter-pill (case-studies-aqua.css) with this
   page's own accent-steel hover instead of that page's scoped
   --warm-sand override (which doesn't exist on this page's tokens).
   Tool cards clone .where-used-card (engines-page-aqua.css) exactly —
   same plain white card / squircle icon recipe already established and
   screenshot-confirmed on the engine pages. Both duplicated here rather
   than cross-loading either page's stylesheet, per this codebase's
   convention. ----- */

.int-filter-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin-top: var(--space-3);
}

.int-filter-pill {
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  font-weight: 500;
  color: var(--text-secondary);
  background: #ffffff;
  border: 0.5px solid var(--border);
  border-radius: var(--radius-pill);
  padding: 9px 18px;
  cursor: pointer;
  transition: background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease);
}

.int-filter-pill:hover {
  background: var(--accent-steel);
  border-color: var(--accent-steel);
  color: #ffffff;
}

.int-filter-pill.active {
  background: var(--accent-amber);
  border-color: var(--accent-amber);
  color: var(--text-primary);
}

.int-tool-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-3);
}

.int-tool-card {
  background: #ffffff;
  border: 0.5px solid var(--border);
  border-radius: var(--radius-card);
  padding: var(--space-4);
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease), opacity 0.7s ease-out, transform 0.7s ease-out;
  opacity: 0;
  transform: translateY(16px);
}

.int-tool-card.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.int-tool-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 20px 40px rgba(17, 17, 17, 0.08);
}

.int-tool-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--cream-lightest);
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: var(--space-3);
}

.int-tool-icon svg,
.int-tool-icon i {
  width: 20px;
  height: 20px;
}

.int-tool-name {
  font-family: 'Inter', sans-serif;
  font-weight: 700;
  font-size: 17px;
  color: var(--text-primary);
  margin-bottom: 6px;
}

.int-tool-desc {
  font-family: 'Inter', sans-serif;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--text-secondary);
  margin-bottom: var(--space-3);
}

.int-tool-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  font-weight: 600;
  color: var(--text-primary);
  text-decoration: none;
  transition: gap 0.3s var(--ease), color 0.3s var(--ease);
}

.int-tool-link:hover {
  gap: 10px;
  color: var(--accent-steel);
}

/* ----- Section 4: How It Works — pastel-mesh cards, same 3-radial-
   gradient-blob technique as index.html's .feature-card-mesh-* with new
   aqua-family tint pairings (not that section's own documented one-time-
   exception hues — see NOTES.md "Pastel mesh gradient exception"), same
   recipe already built for whitelabel-aqua.html's Who It's For cards
   before that section was corrected back to the plain .where-used-card
   style per screenshot reference. Reused here since THIS section's brief
   explicitly asked for the gradient + floating-icon-snippet look. ----- */

.int-mesh-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-3);
}

.int-mesh-card {
  position: relative;
  overflow: hidden;
  background: #ffffff;
  border: 0.5px solid var(--border);
  border-radius: 24px;
  padding: var(--space-4);
  text-align: center;
}

.int-mesh-icon-snippet {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 64px;
  height: 64px;
  margin: 0 auto var(--space-3);
  background: #ffffff;
  border-radius: var(--radius-ui);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1);
  color: var(--dark-bg);
}

.int-mesh-title {
  font-family: 'Inter', sans-serif;
  font-weight: 700;
  font-size: 19px;
  color: var(--text-primary);
  margin-bottom: 8px;
}

.int-mesh-desc {
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: var(--text-secondary);
}

/* ----- Mobile (written alongside desktop, not after) ----- */

@media (max-width: 900px) {
  .int-columns {
    flex-direction: column;
    height: auto;
    padding: var(--space-3);
  }

  .int-tool-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .int-mesh-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 640px) {
  .int-container {
    padding: var(--space-6) var(--space-2) var(--space-5);
  }

  .int-tool-grid {
    grid-template-columns: 1fr;
  }
}

/* Brand marks in the hero marquee. Simple Icons ship as single-colour paths with
   no fill attribute, so they render black on the tile's white ground; the slight
   opacity keeps them from out-shouting the two Lucide generics beside them. */
.int-brand-logo {
  width: 28px;
  height: 28px;
  object-fit: contain;
  opacity: 0.82;
}
