/* ============================================================================
   D3 Aurora Restrained — design tokens + Tabler/Bootstrap override bridge.
   Loaded after tabler.min.css in _Layout — these :root declarations win cascade.
   Reference: doc/Test/design/direction-3.html
   ============================================================================ */

/* Google Fonts — Inter.
   NOTE: @import removed for CWV. Font is loaded via <link> in the layout <head>
   with rel="preconnect" so it no longer blocks CSS parsing.
   Fallback stack below ensures text renders before the font loads. */

/* Dark default tokens */
:root,
[data-bs-theme="dark"],
[data-theme="dark"] {
  /* Base / surfaces — deep navy per DataForSEO-inspired redesign */
  --c-bg:            #0B1221;
  --c-surface-0:     #0F1A2E;
  --c-surface-1:     #162035;
  --c-surface-2:     #1E2D46;
  --c-border:        #1E2D46;
  --c-border-dim:    #162035;
  /* Text */
  --c-text-primary:  #FFFFFF;
  --c-text-secondary:#A0AEBE;
  --c-text-tertiary: #8B9DB8;  /* WCAG AA: ≥4.5:1 on all dark surfaces incl #162035 (#8B9DB8 ≈5.2:1) */
  /* Accent — lime green (DataForSEO-inspired) */
  --c-accent:        #7DC800;
  --c-accent-dim:    rgba(125,200,0,.12);
  --c-accent-hover:  #8FD900;
  --c-accent-glow:   rgba(125,200,0,.18);
  /* Aurora — hero ONLY — navy tones replace purple-blue */
  --aurora-1: rgba(13,26,61,.35);
  --aurora-2: rgba(18,52,90,.25);
  --aurora-3: rgba(10,35,70,.20);
  /* Semantics */
  --c-success: #34D399;
  --c-warn:    #FBBF24;
  --c-danger:  #F87171;
  /* Structure */
  --radius-sm:  4px;  --radius-md:  8px;  --radius-lg: 12px;
  --radius-xl: 16px;  --radius-2xl:24px;  --radius-pill:999px;
  --shadow-sm: 0 1px 2px rgba(0,0,0,.4);
  --shadow-md: 0 4px 20px rgba(0,0,0,.5);
  --shadow-lg: 0 12px 48px rgba(0,0,0,.6);
  --glow-accent: 0 0 32px rgba(125,200,0,.18);
  --nav-h: 62px;
  --container: 1240px;
  --gutter: clamp(20px, 4vw, 48px);
  --c-accent-grad: linear-gradient(135deg, #7DC800 0%, #A3E000 100%);
  --c-text-grad:   linear-gradient(135deg, #7DC800 0%, #A3E000 100%);
  --font: 'Inter', system-ui, sans-serif;
  /* Tabler/Bootstrap bridge */
  --tblr-body-bg:        var(--c-bg);
  --tblr-body-color:     var(--c-text-primary);
  --tblr-card-bg:        var(--c-surface-1);
  --tblr-border-color:   var(--c-border);
  --tblr-primary:        #7DC800;
  --tblr-primary-rgb:    125, 200, 0;
  --tblr-success:        #34D399;
  --tblr-success-rgb:    52, 211, 153;
  --tblr-warning:        #FBBF24;
  --tblr-warning-rgb:    251, 191, 36;
  --tblr-danger:         #F87171;
  --tblr-danger-rgb:     248, 113, 113;
  --tblr-link-color:     var(--c-accent);
  --tblr-link-color-rgb: 125, 200, 0;
  --tblr-border-radius:  8px;
  --tblr-font-family-sans-serif: 'Inter', system-ui, sans-serif;
}

/* Light mode overrides */
[data-bs-theme="light"],
[data-theme="light"] {
  --c-bg:            #F4F7FB;
  --c-surface-0:     #FFFFFF;
  --c-surface-1:     #EEF2FA;
  --c-surface-2:     #DDE3F2;
  --c-border:        #DDE3F2;
  --c-border-dim:    #EEF2FA;
  --c-text-primary:  #0B1221;
  --c-text-secondary:#4A5872;
  --c-text-tertiary: #5A6B84;  /* WCAG AA: ~5.8:1 on #F4F7FB light bg */
  /* WCAG AA: #4A7F00 on #FFFFFF = ~4.7:1 PASS; on #F4F7FB ~5.0:1 PASS */
  --c-accent:        #4A7F00;
  --c-accent-dim:    rgba(74,127,0,.1);
  --c-accent-hover:  #3E6C00;
  --c-accent-glow:   rgba(74,127,0,.12);
  --aurora-1: rgba(74,127,0,.08);
  --aurora-2: rgba(74,127,0,.05);
  --aurora-3: rgba(11,18,33,.04);
  --shadow-sm: 0 1px 2px rgba(11,18,33,.06);
  --shadow-md: 0 4px 20px rgba(11,18,33,.10);
  --shadow-lg: 0 12px 48px rgba(11,18,33,.14);
  --glow-accent: 0 0 32px rgba(74,127,0,.08);
  --c-accent-grad: linear-gradient(135deg, #4A7F00 0%, #66A800 100%);
  --c-text-grad:   linear-gradient(135deg, #4A7F00 0%, #66A800 100%);
  /* WCAG AA: dark-mode --c-success #34D399 fails on light surfaces (1.9:1).
     Override to a dark accessible green for text/badge use in light theme.
     #1A6B40 on #EEF2FA ≈ 5.3:1 PASS; on #FFFFFF ≈ 5.9:1 PASS. */
  --c-success: #1A6B40;
  /* WCAG AA: dark-mode --c-warn #FBBF24 fails on light surfaces (1.4:1).
     Override to dark amber. #7A5500 on #EEF2FA ≈ 5.6:1 PASS; on #FFFFFF ≈ 6.3:1 PASS. */
  --c-warn: #7A5500;
  /* WCAG AA: dark-mode --c-danger #F87171 fails on light surfaces (2.46:1 vs large text, 1.96:1 vs normal).
     Override to dark accessible red. #B91C1C on #EEF2FA ≈ 5.1:1 PASS; on #FFFFFF ≈ 5.6:1 PASS. */
  --c-danger: #B91C1C;
  --tblr-body-bg:      var(--c-bg);
  --tblr-body-color:   var(--c-text-primary);
  --tblr-card-bg:      var(--c-surface-0);
  --tblr-border-color: var(--c-border);
  --tblr-primary:      #4A7F00;
  --tblr-primary-rgb:  74, 127, 0;
  --tblr-link-color:   var(--c-accent);
}

/* ── Global reset + typography ── */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; font-size: 16px; overflow-x: hidden; }
body {
  font-family: var(--font);
  background: var(--c-bg);
  color: var(--c-text-primary);
  font-size: clamp(16px, 1.06vw, 17px);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  transition: background .25s, color .25s;
  /* overflow-x moved to html — body overflow-x:hidden on iOS/Safari blocks child
     scroll containers (WebKit bug). html-level clip prevents page-level bleed
     while leaving descendant overflow-x:auto containers free to scroll. */
}

/* ── Typography tokens — report & content blocks ── */
:root {
  --report-font-size: 17px;
  --report-line-height: 1.7;
  --text-measure: 70ch;   /* comfortable reading line-length */
}

/* Report body paragraphs / issue descriptions constrained to readable measure */
.orbi-r-impact, .orbi-r-fix, .orbi-r-desc,
.orbi-insights-focus, .orbi-insights-recs li,
.orbi-offpage-cta-text, .orbi-da-note, .orbi-da-proxy-note {
  max-width: var(--text-measure);
}
.orbi-r-desc { font-size: 14.5px; font-weight: 600; }
.orbi-r-impact { font-size: 13px; line-height: 1.65; }
.orbi-r-fix    { font-size: 13px; line-height: 1.65; }

/* Verdict block — slightly bigger, comfortable measure */
.orbi-verdict { font-size: 15px; line-height: 1.7; max-width: var(--text-measure); }

/* Plan items — readable */
.orbi-plan-items { font-size: 13.5px; line-height: 1.75; max-width: var(--text-measure); }

/* CTA sub — max measure */
.cta-sub { max-width: 560px; }

/* Report h1 — tighter only on report page (override applied inline via .orbi-report-h1) */

/* ── NAVBAR ── */

/* Sticky nav base — transparent; .nav-scrolled added by JS on scroll > 20px */
.orbi-nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
  height: var(--nav-h);
  display: flex; align-items: center;
  padding: 0 36px;
  background: transparent;
  /* overflow:hidden clips the nav to exactly var(--nav-h) — prevents the
     inner container from creating a transparent hit-area below the bar
     that would intercept clicks on the hero CTA and page content. */
  overflow: hidden;
  transition: background .25s, border-color .25s, backdrop-filter .25s;
}
.orbi-nav.nav-scrolled {
  background: rgba(12,14,20,.78);
  backdrop-filter: blur(20px) saturate(160%);
  -webkit-backdrop-filter: blur(20px) saturate(160%);
  border-bottom: 1px solid var(--c-border);
}
[data-theme="light"] .orbi-nav.nav-scrolled {
  background: rgba(248,250,255,.85);
}
.orbi-nav-inner {
  width: 100%; max-width: 1160px; margin: 0 auto;
  display: flex; align-items: center;
  /* The inner wrapper must not be a pointer-event sink on its non-interactive
     transparent background area. Interactive children restore pointer-events. */
  pointer-events: none;
}
/* Restore pointer-events on every interactive child of orbi-nav-inner */
.orbi-nav-inner > *,
.orbi-nav-collapse > *,
.orbi-nav-links a,
.orbi-nav-right > *,
.orbi-nav-url,
.orbi-brand,
.orbi-nav-burger {
  pointer-events: auto;
}
/* Brand */
.orbi-brand {
  display: flex; align-items: center; gap: 10px;
  text-decoration: none; color: var(--c-text-primary);
  font-weight: 700; font-size: 15px; letter-spacing: -.4px;
  flex-shrink: 0;
}
.orbi-brand:hover { color: var(--c-text-primary); text-decoration: none; }
.orbi-logo-mark {
  width: 30px; height: 30px;
  background: linear-gradient(135deg, var(--c-accent) 0%, #7B68EE 100%);
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 2px 8px rgba(91,175,214,.3);
  flex-shrink: 0;
}
/* Centre links */
.orbi-nav-links {
  display: flex; align-items: center;
  margin: 0 auto; list-style: none; padding: 0;
}
.orbi-nav-links a {
  font-size: 13.5px; font-weight: 500;
  color: var(--c-text-secondary); text-decoration: none;
  padding: 6px 14px; border-radius: var(--radius-md);
  letter-spacing: -.1px;
  transition: color .15s, background .15s;
}
.orbi-nav-links a:hover { color: var(--c-text-primary); background: var(--c-surface-2); }
/* Right cluster */
.orbi-nav-right { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
/* Inline theme toggle — lives inside navbar right cluster on marketing pages */
.orbi-theme-toggle {
  width: 35px; height: 35px;
  border-radius: var(--radius-md);
  border: 1px solid var(--c-border);
  background: rgba(255,255,255,.04);
  color: var(--c-text-secondary);
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s;
}
.orbi-theme-toggle:hover { background: var(--c-surface-2); color: var(--c-text-primary); }
.orbi-theme-toggle svg { width: 15px; height: 15px; }
/* Sun shown in dark mode (click to go light); moon shown in light mode (click to go dark) */
.orbi-icon-sun  { display: block; }
.orbi-icon-moon { display: none; }
[data-theme="light"] .orbi-icon-sun  { display: none; }
[data-theme="light"] .orbi-icon-moon { display: block; }
/* Ghost "Sign in" */
.orbi-btn-ghost {
  font-size: 13.5px; font-weight: 500;
  color: var(--c-text-secondary); text-decoration: none;
  padding: 7px 14px; border-radius: var(--radius-md);
  transition: color .15s, background .15s;
}
.orbi-btn-ghost:hover { color: var(--c-text-primary); background: var(--c-surface-2); text-decoration: none; }
/* Primary CTA in navbar */
.orbi-btn-primary-nav {
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--c-accent); color: #fff;
  font-size: 13.5px; font-weight: 600;
  padding: 8px 18px; border-radius: var(--radius-md);
  text-decoration: none; border: none; cursor: pointer;
  transition: background .15s, box-shadow .15s, transform .1s;
  letter-spacing: -.1px;
  box-shadow: 0 1px 3px rgba(91,175,214,.25);
  /* TAP-2 WCAG 2.5.5 — minimum 44px tap target */
  min-height: 44px;
}
.orbi-btn-primary-nav:hover {
  background: var(--c-accent-hover); color: #fff; text-decoration: none;
  transform: translateY(-1px);
  box-shadow: 0 3px 10px rgba(91,175,214,.3);
}

/* Compact URL field that slides into the header on scroll (.nav-scrolled).
   Collapsed (width 0 / invisible) at top; expands when the centre links fade. */
.orbi-nav-url {
  display: flex; align-items: center; gap: 6px; margin-left: auto;
  background: var(--c-surface-1); border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  padding: 4px 4px 4px 10px; width: 0; opacity: 0; overflow: hidden;
  transform: translateY(-4px); pointer-events: none;
  transition: width .3s ease, opacity .25s ease, transform .25s ease;
}
.orbi-nav.nav-scrolled .orbi-nav-url {
  width: 320px; opacity: 1; transform: none; pointer-events: auto;
}
.orbi-nav.nav-scrolled .orbi-nav-links { opacity: 0; pointer-events: none; transition: opacity .2s; }
.orbi-nav-url svg { width: 14px; height: 14px; color: var(--c-text-tertiary); flex: none; }
.orbi-nav-url input {
  flex: 1; min-width: 0; border: none; background: transparent; outline: none;
  font-family: var(--font); font-size: 12.5px; color: var(--c-text-primary);
}
.orbi-nav-url input::placeholder { color: var(--c-text-tertiary); }
.orbi-nav-url-btn { padding: 6px 14px; font-size: 12.5px; box-shadow: none; flex: none; }
@media (max-width: 720px) {
  /* On small screens the centre links already wrap/hide; keep the compact field hidden */
  .orbi-nav.nav-scrolled .orbi-nav-url { width: 0; opacity: 0; pointer-events: none; }
}

/* Body offset for fixed nav */
.orbi-page { padding-top: var(--nav-h); }

/* ── Audit button loading spinner ────────────────────────────────────────
   CSP-safe: defined in this stylesheet, not inline style.
   .orbi-btn-loading adds a spin animation inside the button's ::after pseudo,
   keeping the DOM change minimal (one class toggle from JS).
   Works on both .orbi-btn-primary-lg (hero / free-audit-band) and
   .orbi-btn-primary-nav (compact nav URL form). */
@keyframes orbi-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}
.orbi-btn-loading {
  pointer-events: none;         /* prevent double-submit */
}
.orbi-btn-loading::after {
  content: '';
  display: inline-block;
  width: 14px; height: 14px;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  animation: orbi-spin .7s linear infinite;
  margin-left: 8px;
  vertical-align: middle;
  flex-shrink: 0;
}
/* Nav compact button: slightly smaller spinner */
.orbi-nav-url-btn.orbi-btn-loading::after {
  width: 11px; height: 11px;
}

/* ── CENTERED PAGE CONTAINER ─────────────────────────────────────────
   User refinement #1: content lives in a centered max-width container
   (~1200–1280px) with comfortable gutters on BOTH sides. Background
   aurora/dot-grid may still bleed full-width, but content is centered. */
.orbi-container {
  width: 100%;
  max-width: 1240px;
  margin: 0 auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
}
/* Align the nav inner to the same content rhythm */
.orbi-nav-inner { max-width: 1240px; padding: 0 clamp(20px, 4vw, 48px); }

/* ── HERO (split: left rotating carousel + right 3D live dashboard) ── */
.orbi-hero {
  position: relative;
  min-height: calc(100vh - var(--nav-h));
  display: flex; align-items: center;
  padding: clamp(48px, 7vh, 96px) 0;
  overflow: hidden;
  isolation: isolate;
}
/* Centered content grid inside the bleeding background */
.orbi-hero-grid {
  position: relative; z-index: 1;
  width: 100%; max-width: 1240px;
  margin: 0 auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
  display: grid;
  grid-template-columns: minmax(340px, 0.95fr) 1.25fr;
  gap: clamp(28px, 4vw, 64px);
  align-items: center;
}
@media (max-width: 980px) {
  .orbi-hero-grid { grid-template-columns: 1fr; gap: 40px; }
}
/* On mobile hide the dashboard mockup so there is no blank dead-zone below the copy */
@media (max-width: 760px) {
  .orbi-hero { min-height: auto; padding: clamp(36px, 8vh, 72px) 0; }
  .orbi-hero-right { display: none; }
  .orbi-hero-grid { gap: 0; }
}

/* ── HERO LEFT: rotating message carousel (STABILIZED) ──
   Slides are ALWAYS absolutely positioned and cross-fade in place inside a
   CONSTANT-height wrapper. The wrapper is sized to the TALLEST message at each
   breakpoint so the URL audit box + everything below NEVER moves on slide change.

   OVERLAP FIX: Slide 1's h1 is long (~18 words at max-width:14ch). At desktop
   font sizes (up to 58px × 1.05 lh) it wraps to 5–6 lines + a paragraph below,
   requiring ~420px of vertical space. Previous 290px was too short, causing the
   absolutely-positioned slide to overflow into the content below (URL form, dots,
   use-case badges). Heights below are sized to the tallest slide at each breakpoint
   with an 8px safety buffer. */
.orbi-hero-left { position: relative; z-index: 2; }
.orbi-slides { position: relative; min-height: 430px; margin-bottom: 8px; }
@media (max-width: 1280px) { .orbi-slides { min-height: 420px; } }
@media (max-width: 980px)  { .orbi-slides { min-height: 360px; } }
@media (max-width: 760px)  { .orbi-slides { min-height: 340px; } }
@media (max-width: 600px)  { .orbi-slides { min-height: 310px; } }
@media (max-width: 440px)  { .orbi-slides { min-height: 350px; } }
.orbi-slide {
  position: absolute; inset: 0;
  opacity: 0; visibility: hidden; transform: translateY(10px);
  transition: opacity .5s ease, transform .5s ease;
  pointer-events: none;
}
.orbi-slide.active {
  opacity: 1; visibility: visible; transform: translateY(0);
  pointer-events: auto;            /* stays position:absolute — wrapper height is fixed */
}
/* A11Y: Slide 1 uses <h1 class="orbi-slide-heading"> — exactly one H1 per page.
   Remaining slides use <p class="orbi-slide-heading"> for identical visual styling
   without creating extra H1 violations. Both selectors share this rule. */
.orbi-slide h1,
.orbi-slide-heading {
  font-size: clamp(34px, 4.6vw, 58px);
  line-height: 1.05; letter-spacing: -1.2px; font-weight: 700;
  color: var(--c-text-primary);
  margin: 0 0 18px; max-width: 14ch;
}
.orbi-slide p {
  font-size: clamp(15px, 1.4vw, 17px); color: var(--c-text-secondary);
  max-width: 44ch; margin: 0; line-height: 1.65;
}

/* Big URL-audit field — the primary hero action (matches design-system .ds-url-field) */
.orbi-url-field {
  display: flex; align-items: center; gap: 8px; max-width: 520px;
  background: var(--c-surface-0); border: 1px solid var(--c-border);
  border-radius: var(--radius-lg); padding: 7px 7px 7px 16px;
  box-shadow: var(--shadow-md); transition: border-color .15s, box-shadow .15s;
}
.orbi-url-field:focus-within { border-color: var(--c-accent); box-shadow: var(--shadow-md), 0 0 0 3px var(--c-accent-dim); }
.orbi-url-field .orbi-url-globe { width: 18px; height: 18px; color: var(--c-text-tertiary); flex: none; }
.orbi-url-field input {
  flex: 1; min-width: 0; border: none; background: transparent; outline: none;
  font-family: var(--font); font-size: 15px; color: var(--c-text-primary);
}
.orbi-url-field input::placeholder { color: var(--c-text-tertiary); }
.orbi-url-field .orbi-btn-primary-lg { flex: none; }
.orbi-url-micro { font-size: 13px; color: var(--c-text-tertiary); margin-top: 12px; }

/* progress dots */
.orbi-dots { display: flex; gap: 10px; margin-top: 22px; align-items: center; }
.orbi-dots button {
  width: 30px; height: 4px; border-radius: 100px; border: none;
  background: var(--c-border); cursor: pointer; padding: 0;
  transition: background .3s, width .3s; position: relative; overflow: hidden;
}
.orbi-dots button.active { width: 46px; background: rgba(125,200,0,.3); }
.orbi-dots button.active::after {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 100%;
  background: var(--c-accent); transform-origin: left;
  animation: orbi-fill var(--orbi-dur, 6s) linear forwards;
}
@keyframes orbi-fill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.orbi-hero.paused .orbi-dots button.active::after { animation-play-state: paused; }

.orbi-hero-trust {
  margin-top: 28px; display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  color: var(--c-text-tertiary); font-size: 12.5px;
}
.orbi-hero-trust .orbi-sep { width: 1px; height: 14px; background: var(--c-border); }

/* Use-case signal pills — hero section.
   Restyled: borderless inline labels separated by a mid-dot.
   No box, no chip — reads as a plain inline qualifier row. */
.orbi-usecase-badge {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0;
  margin-top: 18px;
}
.orbi-usecase-pill {
  display: inline-block;
  font-size: 11.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  color: var(--c-accent);
  background: none;
  border: none;
  border-radius: 0;
  padding: 0;
}
/* Separate pills with a muted mid-dot spacer */
.orbi-usecase-pill + .orbi-usecase-pill::before {
  content: "·";
  color: var(--c-text-tertiary);
  font-weight: 400;
  letter-spacing: 0;
  padding: 0 8px;
  font-size: 13px;
  line-height: 1;
}
[data-theme="light"] .orbi-usecase-pill {
  color: #3D6A00; /* #3D6A00 on #F4F7FB ~5.9:1 WCAG AA */
  background: none;
  border: none;
}

/* Upgrade-note tier label — WCAG AA light-mode override */
.orbi-upgrade-tier-label {
  font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase;
  color: var(--c-accent);
  margin-bottom: 6px;
}
[data-theme="light"] .orbi-upgrade-tier-label {
  color: #3A6800; /* 5.1:1 on #eef2fa — WCAG AA */
}

/* ── HERO RIGHT: 3D-tilted live dashboard composition ── */
/* R7 fix: pad-bottom accommodates the absolutely-positioned orbi-agentlog panel
   (bottom: -26px) so it never escapes the hero section and paints over orbi-desc
   or activity-feed text below. orbi-hero-right is a block-flow ancestor so extra
   padding here grows the section height rather than clipping the overflowing panel. */
.orbi-hero-right { position: relative; z-index: 1; min-height: 480px; padding-bottom: 60px; }
.orbi-stage {
  position: relative;
  perspective: 1800px;
  display: flex; align-items: center; justify-content: center;
}
.orbi-stage::before {
  content: ""; position: absolute; width: 78%; height: 78%; top: 8%; right: 0;
  background: radial-gradient(circle, var(--c-accent-glow), transparent 65%);
  filter: blur(50px); z-index: 0;
}
.orbi-deck {
  position: relative; width: min(700px, 100%);
  transform: rotateY(-9deg) rotateX(3deg);
  transform-style: preserve-3d;
}
@media (max-width: 980px) { .orbi-deck { transform: none; } }

.orbi-panel {
  background: var(--c-surface-0);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-lg);
}

/* browser-chrome dashboard */
.orbi-browser { overflow: hidden; }
.orbi-browser-bar {
  display: flex; align-items: center; gap: 8px; padding: 11px 14px;
  border-bottom: 1px solid var(--c-border); background: var(--c-surface-1);
}
.orbi-browser-bar .orbi-dotrow { display: flex; gap: 6px; }
.orbi-browser-bar .orbi-dotrow i { width: 10px; height: 10px; border-radius: 50%; display: block; }
.orbi-browser-bar .orbi-url {
  margin-left: 10px; flex: 1; background: var(--c-surface-2);
  border: 1px solid var(--c-border); border-radius: 7px;
  padding: 5px 12px; font-size: 11.5px; color: var(--c-text-tertiary);
  display: flex; align-items: center; gap: 7px; overflow: hidden; white-space: nowrap;
}
.orbi-browser-bar .orbi-url svg { width: 11px; height: 11px; color: var(--c-success); flex: none; }
.orbi-dash-body { padding: 16px; display: grid; grid-template-columns: 1.1fr 1fr; gap: 13px; }

.orbi-mini-card { background: var(--c-surface-1); border: 1px solid var(--c-border); border-radius: var(--radius-lg); padding: 15px; }
.orbi-mini-h { display: flex; align-items: center; justify-content: space-between; margin-bottom: 13px; }
.orbi-mini-h .orbi-t { font-size: 12px; font-weight: 600; color: var(--c-text-secondary); }
.orbi-badge { font-size: 10.5px; font-weight: 700; padding: 3px 8px; border-radius: 6px; }
.orbi-badge.up { color: var(--c-success); background: rgba(52,211,153,.13); }

/* health gauge */
.orbi-gauge-wrap { display: flex; align-items: center; gap: 14px; }
.orbi-gauge { position: relative; width: 96px; height: 96px; flex: none; }
.orbi-gauge svg { transform: rotate(-90deg); }
.orbi-gauge .orbi-num { position: absolute; inset: 0; display: grid; place-items: center; }
.orbi-gauge .orbi-num b { font-size: 28px; font-weight: 700; letter-spacing: -1px; color: var(--c-text-primary); }
.orbi-gauge .orbi-num small { display: block; text-align: center; font-size: 9px; color: var(--c-text-tertiary); letter-spacing: .08em; text-transform: uppercase; margin-top: -2px; }
.orbi-gauge-legend { font-size: 11px; color: var(--c-text-secondary); display: grid; gap: 7px; }
.orbi-gauge-legend .orbi-row { display: flex; align-items: center; gap: 8px; }
.orbi-gauge-legend .orbi-pip { width: 8px; height: 8px; border-radius: 3px; flex: none; }

/* core web vitals */
.orbi-cwv { display: grid; gap: 12px; }
.orbi-cwv .orbi-metric .orbi-lbl { display: flex; justify-content: space-between; font-size: 11.5px; margin-bottom: 6px; }
.orbi-cwv .orbi-metric .orbi-lbl span:first-child { color: var(--c-text-secondary); }
.orbi-cwv .orbi-metric .orbi-lbl b { font-weight: 700; }
.orbi-mini-bar { height: 6px; border-radius: 100px; background: var(--c-surface-2); overflow: hidden; }
.orbi-mini-bar i { display: block; height: 100%; border-radius: 100px; }

/* issue list */
.orbi-issues { grid-column: 1 / -1; }
.orbi-issue { display: flex; align-items: center; gap: 12px; padding: 9px 0; border-bottom: 1px solid var(--c-border-dim); font-size: 12.5px; }
.orbi-issue:last-child { border-bottom: none; }
.orbi-issue .orbi-ico { width: 26px; height: 26px; border-radius: 8px; display: grid; place-items: center; flex: none; }
.orbi-issue .orbi-ico svg { width: 13px; height: 13px; }
.orbi-issue .orbi-desc { flex: 1; color: var(--c-text-primary); }
.orbi-issue .orbi-desc small { display: block; color: var(--c-text-tertiary); font-size: 11px; }
.orbi-pri { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 5px; flex: none; }
.orbi-pri.high { color: var(--c-danger); background: rgba(248,113,113,.13); }
.orbi-pri.med { color: var(--c-warn); background: rgba(251,191,36,.13); }
.orbi-pri.low { color: var(--c-accent); background: var(--c-accent-dim); }

/* floating rank chip (top-right of deck) */
.orbi-rankchip {
  position: absolute; top: -22px; right: -24px; z-index: 7;
  padding: 12px 15px; transform: translateZ(40px);
  display: flex; align-items: center; gap: 12px;
}
.orbi-rankchip .orbi-spark { display: flex; align-items: flex-end; gap: 3px; height: 30px; }
.orbi-rankchip .orbi-spark i { width: 4px; border-radius: 2px; background: var(--c-accent); opacity: .55; }
.orbi-rankchip .orbi-chip-lbl small { display: block; font-size: 9.5px; color: var(--c-text-tertiary); text-transform: uppercase; letter-spacing: .07em; }
.orbi-rankchip .orbi-chip-lbl b { font-size: 16px; font-weight: 700; color: var(--c-text-primary); }
.orbi-rankchip .orbi-chip-lbl b em { font-style: normal; font-size: 12px; color: var(--c-success); margin-left: 4px; }

/* floating agent-activity ticker (bottom-left of deck) */
.orbi-agentlog {
  position: absolute; bottom: -26px; left: -32px; width: 290px; z-index: 7;
  padding: 14px 16px; transform: translateZ(60px);
}
.orbi-agentlog .orbi-alh { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; }
.orbi-agentlog .orbi-pulse { width: 8px; height: 8px; border-radius: 50%; background: var(--c-success); position: relative; flex: none; }
.orbi-agentlog .orbi-pulse::after { content: ""; position: absolute; inset: -5px; border-radius: 50%; border: 1px solid var(--c-success); opacity: .5; animation: orbi-ring 2s ease-out infinite; }
@keyframes orbi-ring { 0% { transform: scale(.6); opacity: .6; } 100% { transform: scale(1.6); opacity: 0; } }
.orbi-agentlog .orbi-alh .orbi-t { font-size: 12px; font-weight: 600; color: var(--c-text-primary); }
.orbi-agentlog .orbi-alh .orbi-t span { color: var(--c-text-tertiary); font-weight: 500; }
.orbi-ticker { height: 70px; overflow: hidden; position: relative; mask-image: linear-gradient(#000 70%, transparent); -webkit-mask-image: linear-gradient(#000 70%, transparent); }
.orbi-ticker ul { list-style: none; padding: 0; margin: 0; animation: orbi-scroll 14s linear infinite; }
.orbi-hero.paused .orbi-ticker ul { animation-play-state: paused; }
.orbi-ticker li { display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: var(--c-text-secondary); padding: 5px 0; }
.orbi-ticker li b { color: var(--c-text-primary); font-weight: 600; }
.orbi-ticker li .orbi-ts { color: var(--c-text-tertiary); font-size: 10px; margin-left: auto; flex: none; }
.orbi-ticker li .orbi-tick { width: 6px; height: 6px; border-radius: 50%; background: var(--c-accent); flex: none; }
@keyframes orbi-scroll { 0% { transform: translateY(0); } 100% { transform: translateY(-50%); } }

@media (max-width: 600px) {
  .orbi-rankchip, .orbi-agentlog { display: none; }
  .orbi-dash-body { grid-template-columns: 1fr; }
}

/* legacy single-column hero content block (kept for fallback, now unused) */
.orbi-hero-content-legacy {
  position: relative; z-index: 1; max-width: 760px; margin: 0 auto; text-align: center;
}
/* Aurora bg — hero ONLY — replaced blobs with single radial bloom; canvas does the particle work */
.orbi-aurora-bg {
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: radial-gradient(ellipse 70% 60% at 40% 50%, rgba(18,52,90,.4) 0%, transparent 70%);
}
/* Old blob classes kept as no-ops so Razor markup doesn't break */
.orbi-aurora-blob, .orbi-aurora-blob-1, .orbi-aurora-blob-2, .orbi-aurora-blob-3 { display: none; }
/* Dot grid removed — canvas constellation replaces it */
.orbi-hero::before { content: none; }

/* Constellation canvas */
#orbiConstellation {
  position: absolute; inset: 0; width: 100%; height: 100%;
  z-index: 0; pointer-events: none; opacity: 1;
}
[data-theme="light"] #orbiConstellation { opacity: 0.55; }
/* Hero eyebrow — borderless prominent section-header style.
   No box, no pill, no background — reads as a bold location header.
   Largest/most prominent eyebrow on the page (bigger than .orbi-section-tag). */
.orbi-hero-badge {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 12px; font-weight: 700; letter-spacing: .12em;
  text-transform: uppercase; color: var(--c-accent);
  background: none;
  border: none;
  padding: 0;
  margin-bottom: 24px;
  word-break: keep-all;
  overflow-wrap: normal;
  max-width: 100%;
  white-space: normal;
}
/* Leading accent line — same rhythm as .orbi-section-tag */
.orbi-hero-badge::before {
  content: '';
  display: inline-block;
  width: 24px; height: 2px;
  background: var(--c-accent);
  flex-shrink: 0;
}
@media (max-width: 480px) {
  .orbi-hero-badge {
    font-size: 10.5px;
    letter-spacing: .09em;
  }
  /* Hide the long badge text on the smallest screens, show a shorter label */
  .orbi-hero-badge .orbi-badge-full { display: none; }
  .orbi-hero-badge .orbi-badge-short { display: inline; }
}
@media (min-width: 481px) {
  .orbi-hero-badge .orbi-badge-short { display: none; }
  .orbi-hero-badge .orbi-badge-full { display: inline; }
}
/* Pulse dot hidden — hero badge now uses a ::before accent line instead */
.orbi-hero-badge-dot {
  display: none;
}
@keyframes orbi-pulse {
  0%, 100% { opacity: 1; }
  50%       { opacity: .4; }
}
/* H1 — legacy single-column hero only (split hero uses .orbi-slide h1) */
.orbi-hero-content-legacy h1 {
  font-size: clamp(40px, 7vw, 72px);
  font-weight: 700; line-height: 1.04; letter-spacing: -3px;
  color: var(--c-text-primary); margin-bottom: 24px;
}
/* Gradient text — used sparingly on a single keyword per heading */
.orbi-gradient-text {
  background: linear-gradient(135deg, #7DC800 0%, #A3E000 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent;
  background-clip: text;
  word-spacing: 0.22em; /* restore word gap lost to negative letter-spacing inheritance */
}
/* Subhead — legacy single-column hero only */
.orbi-hero-content-legacy p.orbi-lead {
  font-size: 17px; font-weight: 400; line-height: 1.7;
  color: var(--c-text-secondary); max-width: 520px;
  margin: 0 auto 40px;
}
/* CTA row */
.orbi-hero-cta { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
.orbi-btn-primary-lg {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--c-accent); color: #fff;
  font-size: 14.5px; font-weight: 600;
  padding: 12px 26px; border-radius: var(--radius-md);
  text-decoration: none; border: none; cursor: pointer;
  box-shadow: 0 2px 8px rgba(91,175,214,.3), var(--glow-accent);
  transition: background .15s, box-shadow .15s, transform .1s;
  letter-spacing: -.2px;
}
.orbi-btn-primary-lg:hover {
  background: var(--c-accent-hover); color: #fff; text-decoration: none;
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(91,175,214,.35), var(--glow-accent);
}
.orbi-btn-secondary-lg {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--c-surface-1); color: var(--c-text-primary);
  border: 1px solid var(--c-border);
  font-size: 14.5px; font-weight: 500;
  padding: 12px 24px; border-radius: var(--radius-md);
  text-decoration: none;
  transition: background .15s, border-color .15s;
  letter-spacing: -.2px;
}
.orbi-btn-secondary-lg:hover {
  background: var(--c-surface-2); border-color: var(--c-accent);
  color: var(--c-text-primary); text-decoration: none;
}

/* ── SECTIONS ── */
.orbi-section {
  padding: 96px 0; max-width: 1240px; margin: 0 auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
}
/* Section eyebrow — borderless bold heading-level label.
   Slightly smaller than the hero eyebrow but same borderless treatment.
   No box, no pill — reads as a prominent section header. */
.orbi-section-tag {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 12px; font-weight: 700; letter-spacing: .12em;
  text-transform: uppercase; color: var(--c-accent);
  margin-bottom: 16px;
}
.orbi-section-tag::before { content:''; width:22px; height:2px; background: var(--c-accent); flex-shrink:0; }
.orbi-section-title {
  font-size: clamp(26px, 4vw, 46px);
  font-weight: 700; letter-spacing: -1.8px; line-height: 1.08;
  color: var(--c-text-primary); max-width: 560px; margin-bottom: 20px;
}
.orbi-section-sub {
  font-size: 15.5px; color: var(--c-text-secondary);
  max-width: 480px; line-height: 1.7; margin-bottom: 56px;
}

/* ── FEATURE CARDS ── */
.orbi-features-grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
}
@media (max-width: 900px) { .orbi-features-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .orbi-features-grid { grid-template-columns: 1fr; } }
.orbi-feat-card {
  background: var(--c-surface-0);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-2xl);
  padding: 32px; position: relative; overflow: hidden;
  transition: border-color .2s, box-shadow .2s, transform .15s;
}
.orbi-feat-card::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--c-accent-dim), transparent);
  opacity: 0; transition: opacity .3s;
}
.orbi-feat-card:hover {
  border-color: rgba(125,200,0,.3);
  box-shadow: var(--shadow-md), 0 0 24px rgba(125,200,0,.06);
  transform: translateY(-2px);
}
.orbi-feat-card:hover::before { opacity: 1; }
.orbi-feat-icon {
  width: 44px; height: 44px;
  background: var(--c-accent-dim);
  border: 1px solid rgba(125,200,0,.2);
  border-radius: var(--radius-lg);
  display: flex; align-items: center; justify-content: center;
  color: var(--c-accent); margin-bottom: 22px;
}
.orbi-feat-icon svg { width: 20px; height: 20px; }
.orbi-feat-title {
  font-size: 15px; font-weight: 650; letter-spacing: -.3px;
  color: var(--c-text-primary); margin-bottom: 10px;
}
.orbi-feat-body { font-size: 13.5px; color: var(--c-text-secondary); line-height: 1.65; }
/* Live badge on the instant-audit card */
.orbi-live-badge {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 10px; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--c-success);
  margin-top: 14px;
}
.orbi-live-badge::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: var(--c-success);
  animation: orbi-pulse 2s infinite;
}

/* ── AGENT ACTIVITY LOG (How it works section) ── */
.orbi-how-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: start;
}
@media (max-width: 900px) { .orbi-how-grid { grid-template-columns: 1fr; gap: 48px; } }
.orbi-timeline { display: flex; flex-direction: column; position: relative; }
.orbi-timeline::before {
  content: ''; position: absolute; left: 20px; top: 24px; bottom: 24px; width: 1px;
  background: var(--c-border);
}
.orbi-timeline-item { display: flex; gap: 20px; padding: 0 0 36px; position: relative; }
.orbi-timeline-item:last-child { padding-bottom: 0; }
.orbi-timeline-circle {
  width: 42px; height: 42px; flex-shrink: 0;
  border: 1px solid var(--c-border); border-radius: 50%;
  background: var(--c-surface-1);
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700; color: var(--c-text-tertiary);
  position: relative; z-index: 1;
  transition: border-color .2s, background .2s, color .2s;
}
.orbi-timeline-item:hover .orbi-timeline-circle {
  border-color: var(--c-accent); color: var(--c-accent);
  background: var(--c-accent-dim);
}
.orbi-timeline-body { padding-top: 10px; }
.orbi-timeline-body h3 {
  font-size: 15px; font-weight: 650; letter-spacing: -.3px;
  color: var(--c-text-primary); margin-bottom: 8px;
}
.orbi-timeline-body p { font-size: 13.5px; color: var(--c-text-secondary); line-height: 1.65; }
/* Log panel */
.orbi-log-panel {
  border: 1px solid var(--c-border); border-radius: var(--radius-2xl);
  background: var(--c-surface-0); overflow: hidden;
  box-shadow: var(--shadow-lg);
}
.orbi-log-header {
  padding: 14px 18px; border-bottom: 1px solid var(--c-border);
  display: flex; align-items: center; gap: 10px;
  background: var(--c-surface-1);
}
.orbi-log-dot { width: 10px; height: 10px; border-radius: 50%; }
.orbi-log-label { font-size: 12px; font-weight: 600; color: var(--c-text-secondary); margin-left: 4px; }
.orbi-log-body { padding: 18px 20px; display: flex; flex-direction: column; gap: 11px; }
.orbi-log-line { display: flex; align-items: flex-start; gap: 10px; font-size: 12px; font-family: 'SF Mono','Fira Code',monospace; }
.orbi-log-ts  { color: var(--c-text-tertiary); flex-shrink: 0; }
.orbi-log-msg { color: var(--c-text-secondary); line-height: 1.5; }
.orbi-log-msg.accent  { color: var(--c-accent); }
.orbi-log-msg.success { color: var(--c-success); }
.orbi-log-msg.dim     { color: var(--c-text-tertiary); }
.orbi-log-tag {
  display: inline-block; font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 3px; margin-left: 6px;
  background: var(--c-accent-dim); color: var(--c-accent);
  font-family: var(--font);
}
.orbi-log-tag.warn {
  background: rgba(251,191,36,.12); color: var(--c-warn);
}
.orbi-log-tag.success {
  background: rgba(52,211,153,.12); color: var(--c-success);
}

/* ── CTA BAND ── */
.orbi-cta-band {
  position: relative; overflow: hidden;
  padding: 96px 40px; text-align: center;
  border-top: 1px solid var(--c-border);
  border-bottom: 1px solid var(--c-border);
}
/* Single low-opacity radial — only one aurora-style element allowed in CTA band */
.orbi-cta-aurora {
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: radial-gradient(ellipse 60% 80% at 50% 50%, rgba(125,200,0,.06) 0%, transparent 70%);
}
.orbi-cta-inner { position: relative; z-index: 1; max-width: 560px; margin: 0 auto; }
.orbi-cta-band h2 {
  font-size: clamp(26px, 4vw, 44px); font-weight: 700;
  letter-spacing: -1.8px; color: var(--c-text-primary); margin-bottom: 18px;
  /* Comfortable line-height so the accent underline drawn under a wrapped word
     never collides with the line below it (see .orbi-underline-accent). */
  line-height: 1.28;
}
.orbi-cta-band p { font-size: 16px; color: var(--c-text-secondary); margin-bottom: 36px; line-height: 1.65; }
.orbi-cta-row { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
/* Accent gradient underline drawn UNDER a single keyword in a heading.
   Uses an inline background-image confined to the text box (background-position
   bottom + box-decoration-break: clone) so when the heading wraps, the underline
   stays under the word's own line — it never overlaps the wrapped line above.
   The underline is parked just ABOVE the box bottom (background-position 0 calc(100% - .06em))
   with matching padding-bottom, so the gradient band sits in the line's leading gap and
   never overlaps the glyphs of the word OR the wrapped line beneath it. box-decoration-break:
   clone makes each wrapped fragment carry its own underline. Works in both themes (keys off --c-accent). */
.orbi-underline-accent {
  position: relative;
  background-image: linear-gradient(90deg, var(--c-accent), var(--c-accent-hover));
  background-repeat: no-repeat;
  background-position: 0 calc(100% - .06em);
  background-size: 100% .12em;
  padding-bottom: .18em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}
[data-theme="light"] .orbi-underline-accent {
  /* Slightly stronger band in light mode so it reads against the bright surface,
     but kept as a thin underline (not a full highlight) to avoid washing the text. */
  background-size: 100% .14em;
  opacity: .85;
}

/* ── FOOTER ── */
.orbi-footer { padding: 56px 0 64px; }
.orbi-footer-inner {
  max-width: 1240px; margin: 0 auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
}
.orbi-footer-top {
  display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 48px;
  padding-bottom: 48px; border-bottom: 1px solid var(--c-border-dim);
}
@media (max-width: 800px) { .orbi-footer-top { grid-template-columns: 1fr 1fr; } }
.orbi-footer-brand-desc { font-size: 13px; color: var(--c-text-tertiary); line-height: 1.7; max-width: 240px; margin-top: 12px; }
.orbi-footer-col h5,
.orbi-footer-col h3 { font-size: 11px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--c-text-tertiary); margin-bottom: 16px; }
.orbi-footer-col ul { list-style: none; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.orbi-footer-col a { font-size: 13.5px; color: var(--c-text-secondary); text-decoration: none; transition: color .15s; }
.orbi-footer-col a:hover { color: var(--c-text-primary); }
.orbi-footer-bottom { display: flex; justify-content: space-between; align-items: center; padding-top: 24px; flex-wrap: wrap; gap: 12px; }
.orbi-footer-bottom p { font-size: 12px; color: var(--c-text-tertiary); margin: 0; }
.orbi-footer-bottom a { color: var(--c-text-tertiary); text-decoration: none; transition: color .15s; }
.orbi-footer-bottom a:hover { color: var(--c-text-secondary); }
.orbi-footer-mor { font-size: 11.5px; color: var(--c-text-tertiary); margin: 12px 0 0; text-align: center; }
.orbi-footer-mor a { color: var(--c-text-tertiary); text-decoration: underline; text-underline-offset: 2px; transition: color .15s; }
.orbi-footer-mor a:hover { color: var(--c-text-secondary); }

/* ── Legal mini-footer (_LegalFooter.cshtml) — marketing pages without a full footer ── */
.orbi-legal-mini-footer {
  border-top: 1px solid var(--c-border-dim);
  background: var(--c-surface-0, var(--c-bg));
  padding: 16px clamp(20px, 4vw, 48px);
}
.orbi-legal-mini-inner {
  max-width: 1240px; margin: 0 auto;
  display: flex; justify-content: space-between; align-items: center;
  flex-wrap: wrap; gap: 12px;
  font-size: 12px; color: var(--c-text-tertiary);
}
.orbi-legal-mini-inner nav { display: flex; gap: 16px; flex-wrap: wrap; }
.orbi-legal-mini-inner a {
  color: var(--c-text-tertiary); text-decoration: underline;
  text-underline-offset: 2px; text-decoration-color: var(--c-border);
  transition: color .15s;
}
.orbi-legal-mini-inner a:hover { color: var(--c-text-secondary); }

/* ===== Lane D — Onboarding (additive; aliases legacy step/tab classes to Tabler look) ===== */

/* Verify JS still toggles .tab-active on the .nav-link tabs — make the active
   highlight track .tab-active (the JS-driven class), not Bootstrap's .active plugin. */
.onboarding-verify .nav-tabs .nav-link.tab-active {
    color: var(--tblr-primary);
    border-bottom-color: var(--tblr-primary);
    background: transparent;
}

/* Verify JS adds .step-done / .step-active on success — alias to Tabler's
   completed/active step look so the inline verify JS stays byte-identical
   (markup/CSS-only, no logic change). */
.steps .step-item.step-active::before {
    background-color: var(--tblr-primary);
    border-color: var(--tblr-primary);
    color: #fff;
}
.steps .step-item.step-done {
    color: var(--tblr-success);
}
.steps .step-item.step-done::before {
    background-color: var(--tblr-success);
    border-color: var(--tblr-success);
    color: #fff;
}

/* ============================================================================
   === Lane E: Dashboard ===
   Minimal rules for things Tabler classes can't express. SignalR toggles the
   .ladder-step state classes (done/current/todo) live, so the marker colors key
   off those classes (not Tabler's internal .steps classes). Keyed off brand vars.
   ========================================================================== */
.dash-gauge { min-height: 200px; }

/* Ladder step markers reflect SignalR-toggled state classes. */
.ladder-steps .ladder-step-marker { font-weight: 600; margin-right: .5rem; }
.ladder-steps .ladder-step.done .ladder-step-marker { color: var(--tblr-success); }
.ladder-steps .ladder-step.current .ladder-step-marker { color: var(--tblr-primary); }
.ladder-steps .ladder-step.current .ladder-step-label { font-weight: 600; }
.ladder-steps .ladder-step.todo .ladder-step-label { opacity: .6; }

/* ============================================================================
   === Homepage additions: "see the work" + trust strip ===
   Centered-container sections; D3 token-driven; both themes via --c-* vars.
   ========================================================================== */

/* ── "SEE THE WORK" agent-activity section ── */
.orbi-work { position: relative; }
.orbi-work-grid {
  display: grid; grid-template-columns: 0.85fr 1.15fr; gap: 64px; align-items: center;
}
@media (max-width: 900px) { .orbi-work-grid { grid-template-columns: 1fr; gap: 40px; } }
.orbi-work-points { list-style: none; padding: 0; margin: 24px 0 0; display: flex; flex-direction: column; gap: 16px; }
.orbi-work-points li { display: flex; gap: 12px; font-size: 13.5px; color: var(--c-text-secondary); line-height: 1.6; }
.orbi-work-points li svg { width: 18px; height: 18px; color: var(--c-accent); flex: none; margin-top: 2px; }
.orbi-work-points li b { color: var(--c-text-primary); font-weight: 600; }

/* ── HONEST TRUST / SOCIAL-PROOF STRIP ── */
.orbi-trust-strip {
  border-top: 1px solid var(--c-border); border-bottom: 1px solid var(--c-border);
  background: var(--c-surface-0);
}
.orbi-trust-inner {
  max-width: 1240px; margin: 0 auto;
  padding: 56px clamp(20px, 4vw, 48px);
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px;
  text-align: center;
}
@media (max-width: 760px) { .orbi-trust-inner { grid-template-columns: 1fr 1fr; gap: 36px 24px; } }
.orbi-trust-stat .orbi-stat-num {
  font-size: clamp(26px, 3vw, 36px); font-weight: 700; letter-spacing: -1.4px;
  color: var(--c-text-primary); line-height: 1.1;
}
.orbi-trust-stat .orbi-stat-num .orbi-gradient-text { font-weight: 700; }
/* Small trailing unit/qualifier on a stat number (e.g. "30s", "0 guarantees").
   Sits on the baseline beside the big number; muted + smaller so the figure leads. */
.orbi-trust-stat .orbi-stat-num .orbi-stat-unit {
  font-size: .42em; font-weight: 600; letter-spacing: -.2px;
  color: var(--c-text-secondary); margin-left: 3px;
}
.orbi-trust-stat .orbi-stat-lbl {
  font-size: 12.5px; color: var(--c-text-secondary); margin-top: 8px; line-height: 1.5;
}
.orbi-trust-note {
  max-width: 1240px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 48px) 56px;
  text-align: center; font-size: 13px; color: var(--c-text-tertiary);
}

/* ============================================================================
   === D3 APP SHELL — authenticated pages (_AppLayout) ===
   Sticky LEFT sidebar + TOP bar. Dark default; both themes via --c-* tokens.
   Wide screens: sidebar is a fixed 248px rail, collapsible to a 70px icon rail.
   Narrow (<=920px): sidebar slides in off-canvas over a scrim.
   Vocabulary the page lanes consume: .orbi-app-container wraps page content;
   set ViewData["PageTitle"] for the top-bar H1. Use Tabler card/table/badge
   classes inside — Tabler tokens are bridged to --c-* in :root above.
   ========================================================================== */
:root { --orbi-side-w: 248px; --orbi-side-w-collapsed: 70px; --orbi-topbar-h: 60px; }

.orbi-app {
  --side: var(--orbi-side-w);
  min-height: 100vh;
  background: var(--c-bg);
  color: var(--c-text-primary);
}
.orbi-app.orbi-app--collapsed { --side: var(--orbi-side-w-collapsed); }

/* ── Sidebar ── */
.orbi-side {
  position: fixed; top: 0; left: 0; bottom: 0; z-index: 1040;
  width: var(--side);
  display: flex; flex-direction: column;
  background: var(--c-surface-0);
  border-right: 1px solid var(--c-border);
  transition: width .2s ease, transform .25s ease;
  overflow: hidden;
}
.orbi-side-head {
  height: var(--orbi-topbar-h); flex: none;
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 14px 0 18px;
  border-bottom: 1px solid var(--c-border);
}
.orbi-side-brand { gap: 10px; min-width: 0; }
.orbi-side-brand-text { white-space: nowrap; overflow: hidden; }
.orbi-side-collapse {
  width: 28px; height: 28px; flex: none;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--c-border); border-radius: var(--radius-md);
  background: transparent; color: var(--c-text-secondary); cursor: pointer;
  transition: color .15s, background .15s, transform .2s;
}
.orbi-side-collapse:hover { color: var(--c-text-primary); background: var(--c-surface-2); }
.orbi-side-collapse svg { width: 15px; height: 15px; }
.orbi-app--collapsed .orbi-side-collapse svg { transform: rotate(180deg); }

.orbi-side-nav {
  flex: 1; min-height: 0; overflow-y: auto;
  display: flex; flex-direction: column; gap: 3px;
  padding: 14px 12px;
}
.orbi-side-link {
  display: flex; align-items: center; gap: 12px;
  padding: 9px 12px; border-radius: var(--radius-md);
  color: var(--c-text-secondary); text-decoration: none;
  font-size: 13.5px; font-weight: 500; letter-spacing: -.1px;
  white-space: nowrap;
  transition: color .15s, background .15s;
}
.orbi-side-link:hover { color: var(--c-text-primary); background: var(--c-surface-2); text-decoration: none; }
.orbi-side-link.active { color: var(--c-accent); background: var(--c-accent-dim); }
.orbi-side-link.active .orbi-side-ico { color: var(--c-accent); }
.orbi-side-ico { width: 20px; height: 20px; flex: none; display: flex; align-items: center; justify-content: center; color: var(--c-text-tertiary); }
.orbi-side-ico svg { width: 18px; height: 18px; }
.orbi-side-link:hover .orbi-side-ico { color: var(--c-text-primary); }

.orbi-side-foot { flex: none; padding: 14px 12px; border-top: 1px solid var(--c-border); }
.orbi-side-cta {
  width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px;
  padding: 9px 12px; border-radius: var(--radius-md);
  border: none; cursor: pointer;
  background: var(--c-accent-grad);
  color: #0B1221; font-size: 13px; font-weight: 600; letter-spacing: -.1px;
  box-shadow: 0 2px 8px rgba(125,200,0,.25);
  transition: transform .1s, box-shadow .15s;
}
.orbi-side-cta:hover { transform: translateY(-1px); box-shadow: 0 4px 14px rgba(125,200,0,.3); }
.orbi-side-cta svg { width: 18px; height: 18px; flex: none; }

/* Collapsed (icon-only) rail — hide text labels, center the icons */
.orbi-app--collapsed .orbi-side-brand-text,
.orbi-app--collapsed .orbi-side-label { display: none; }
.orbi-app--collapsed .orbi-side-link,
.orbi-app--collapsed .orbi-side-cta { justify-content: center; gap: 0; padding-left: 0; padding-right: 0; }
.orbi-app--collapsed .orbi-side-head { padding: 0; justify-content: center; }
.orbi-app--collapsed .orbi-side-brand { justify-content: center; }
.orbi-app--collapsed .orbi-side-collapse { position: absolute; top: 16px; right: 10px; }

/* Scrim — only visible when the off-canvas nav is open on narrow screens */
.orbi-side-scrim {
  position: fixed; inset: 0; z-index: 1039;
  background: rgba(0,0,0,.5);
  opacity: 0; visibility: hidden; transition: opacity .25s, visibility .25s;
}

/* ── Main column ── */
.orbi-main {
  margin-left: var(--side);
  min-height: 100vh;
  display: flex; flex-direction: column;
  transition: margin-left .2s ease;
}
.orbi-topbar {
  position: sticky; top: 0; z-index: 1030;
  height: var(--orbi-topbar-h); flex: none;
  display: flex; align-items: center; gap: 14px;
  padding: 0 clamp(16px, 3vw, 32px);
  background: rgba(17,20,32,.82);
  backdrop-filter: blur(20px) saturate(160%);
  -webkit-backdrop-filter: blur(20px) saturate(160%);
  border-bottom: 1px solid var(--c-border);
}
[data-theme="light"] .orbi-topbar { background: rgba(255,255,255,.85); }
.orbi-topbar-burger {
  display: none;
  width: 36px; height: 36px; flex: none;
  align-items: center; justify-content: center;
  border: 1px solid var(--c-border); border-radius: var(--radius-md);
  background: transparent; color: var(--c-text-secondary); cursor: pointer;
}
.orbi-topbar-burger:hover { color: var(--c-text-primary); background: var(--c-surface-2); }
.orbi-topbar-burger svg { width: 18px; height: 18px; }
.orbi-topbar-title {
  font-size: 16px; font-weight: 650; letter-spacing: -.4px;
  color: var(--c-text-primary); margin: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.orbi-topbar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; }

/* Account menu (reuses .orbi-theme-toggle from the navbar block above) */
.orbi-account-btn {
  display: flex; align-items: center; gap: 8px;
  padding: 4px 8px 4px 4px; border-radius: var(--radius-md);
  border: 1px solid var(--c-border); background: rgba(255,255,255,.04);
  color: var(--c-text-secondary); cursor: pointer;
  font-size: 13px; font-weight: 500;
  transition: color .15s, background .15s;
}
.orbi-account-btn:hover { color: var(--c-text-primary); background: var(--c-surface-2); }
.orbi-account-avatar {
  width: 28px; height: 28px; flex: none; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--c-accent-grad); color: #0B1221;
}
.orbi-account-avatar svg { width: 16px; height: 16px; }

/* ── Body container ── */
.orbi-app-body { flex: 1; padding: clamp(20px, 3vw, 36px) clamp(16px, 3vw, 32px); }
.orbi-app-container { width: 100%; max-width: 1240px; margin: 0 auto; }

/* ── Responsive: off-canvas sidebar on narrow screens ── */
@media (max-width: 920px) {
  .orbi-side { transform: translateX(-100%); width: var(--orbi-side-w); }
  .orbi-app--navopen .orbi-side { transform: translateX(0); box-shadow: var(--shadow-lg); }
  .orbi-app--navopen .orbi-side-scrim { opacity: 1; visibility: visible; }
  .orbi-main { margin-left: 0; }
  .orbi-topbar-burger { display: flex; }
  /* The wide-screen collapse control is meaningless off-canvas — hide it */
  .orbi-side-collapse { display: none; }
  /* Ignore any persisted collapsed state on narrow screens */
  .orbi-app.orbi-app--collapsed { --side: var(--orbi-side-w); }
  .orbi-app.orbi-app--collapsed .orbi-side-brand-text,
  .orbi-app.orbi-app--collapsed .orbi-side-label { display: inline; }
  .orbi-app.orbi-app--collapsed .orbi-side-link,
  .orbi-app.orbi-app--collapsed .orbi-side-cta { justify-content: flex-start; gap: 12px; padding-left: 12px; padding-right: 12px; }
}

/* ============================================================================
   WCAG / ACCESSIBILITY FIXES — Lane B (2026-07-02)
   ============================================================================ */

/* ── Skip navigation link (markup added by Lane A in _Layout.cshtml) ── */
.orbi-skip-nav {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
  z-index: 9999;
  text-decoration: none;
}
.orbi-skip-nav:focus {
  position: fixed;
  left: 16px;
  top: 16px;
  width: auto;
  height: auto;
  overflow: visible;
  background: var(--c-accent);
  color: #fff;
  padding: 8px 16px;
  border-radius: var(--radius-md);
  font-weight: 600;
  text-decoration: none;
  box-shadow: var(--shadow-md);
}

/* ── Global :focus-visible ring — WCAG SC 2.4.7 (systemic fix, all interactive elements) ──
   Adds a 2px solid accent outline with offset to EVERY button, link, and input that
   receives keyboard focus. Applies only to :focus-visible (keyboard navigation), not
   mouse clicks, so it doesn't affect mouse-driven hover states. This single declaration
   fixes WCAG 2.4.7 across the entire site for: .orbi-btn-ghost, .orbi-btn-primary-nav,
   .orbi-btn-primary-lg, .orbi-theme-toggle, .orbi-nav-burger, .orbi-side-collapse,
   .orbi-topbar-burger, .orbi-account-btn, .orbi-tier-cta, .legal-form-submit,
   .orbi-btn-google, .orbi-auth-link, footer links, sidebar links, and all others. */
*:focus-visible {
  outline: 2px solid var(--c-accent);
  outline-offset: 3px;
}
/* Elements that already implement compound :focus-within rings on the wrapper
   (the inner <input> has outline:none intentionally — the parent row shows the ring).
   Suppress the redundant ring on the input itself so there's no double outline. */
.orbi-audit-input:focus-visible,
.orbi-audit-input-row input:focus-visible,
.orbi-nav-url input:focus-visible,
.orbi-url-field input:focus-visible,
.orbi-freeaudit-form input:focus-visible {
  outline: none;
}
/* Auth inputs use their own custom :focus border+shadow — don't add a second outline */
.orbi-auth-card .orbi-input:focus-visible {
  outline: none;
}
/* Legal form inputs use :focus border+shadow — suppress double outline */
.legal-form-row input:focus-visible,
.legal-form-row select:focus-visible,
.legal-form-row textarea:focus-visible {
  outline: none;
}

/* ── In-text link underline (WCAG SC 1.4.1 — distinguishable without colour) ── */
/* Covers: pricing footer, legal footer MoR note, legal content body, tier MoR note,
   contact page footer/card, and any legal-badge area links. */
.orbi-pricing-footer a,
.orbi-pricing-footer .orbi-mor-note a,
.orbi-tier-mor a,
.orbi-footer-mor a,
a.legal-email-link,
.legal-content a,
.legal-footer a,
.legal-contact-form a,
.legal-contact-section p a,
.legal-contact-card a:not(.legal-email-link),
/* SC 1.4.1 fix: inline links in /legal/refund and /legal/ai-systems prose paragraphs
   must be distinguishable by more than colour alone. Axe: link-in-text-block (6 nodes).
   .legal-card-body covers /legal/ai-systems cards (contact, note, risk, data sections).
   .legal-body-content kept for backward compat with any earlier templates. */
.legal-card-body a,
.legal-body-content p a,
.legal-body-content li a {
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* ── Gradient text light-mode override ── */
[data-theme="light"] .orbi-gradient-text {
  background: linear-gradient(135deg, #4A7F00 0%, #6BAD00 100%);
  -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
}

/* ── Aurora bg light-mode override ── */
[data-theme="light"] .orbi-aurora-bg {
  background: radial-gradient(ellipse 70% 60% at 40% 50%, rgba(74,127,0,.06) 0%, transparent 70%);
}

/* ── log-msg accent/success in light mode: var(--c-accent) now #4A7F00 PASS ── */
/* success: #34D399 on white fails (3.6:1) → darken for light mode */
[data-theme="light"] .orbi-log-msg.success { color: #065F46; }
.orbi-pricing-footer a:hover,
.orbi-tier-mor a:hover,
.orbi-footer-mor a:hover,
.legal-content a:hover,
.legal-footer a:hover {
  opacity: .8;
}

/* ── Section-tag (Capabilities / Process) accent color in light mode contrast fix ──
   Dark mode: --c-accent #7DC800 on page bg #0B1221 = ~9.8:1 PASS
   Light mode: --c-accent #4A7F00 on page bg #F4F7FB = ~5.9:1 PASS */
[data-theme="light"] .orbi-section-tag {
  color: #4A7F00;
}
/* Annual-badge chip: lime in light mode — darken text for WCAG AA on tinted bg #e3ebe2 */
[data-theme="light"] .orbi-annual-badge {
  color: #3D6A00; /* #3D6A00 on #e3ebe2 ~5.4:1 PASS */
}
/* Hero badge eyebrow text in light mode — border/bg already none; just ensure contrast */
[data-theme="light"] .orbi-hero-badge {
  color: #3D6A00; /* #3D6A00 on #F4F7FB ~5.9:1 WCAG AA */
}
/* Feature card icon color in light mode */
[data-theme="light"] .orbi-feat-icon {
  color: #3D6A00;
}
/* Pricing ghost CTA button in light mode — darken text for #EEF2FA surface */
[data-theme="light"] .orbi-tier-cta.ghost {
  color: #3D6A00; /* #3D6A00 on #EEF2FA ~5.3:1 PASS */
  border-color: #3D6A00;
}
/* Legal badge (legal pages) in light mode */
[data-theme="light"] .legal-badge {
  color: #3D6A00;
}
/* Inline accent links on light surfaces (legal pages use style="color:var(--c-accent)") */
[data-theme="light"] .legal-content a[style*="color"],
[data-theme="light"] a[style*="color:var(--c-accent)"],
[data-theme="light"] .orbi-pricing-footer a,
[data-theme="light"] .orbi-mcp-how-num {
  color: #3D6A00 !important;
}
/* Paddle footer links in pricing */
[data-theme="light"] .orbi-pricing-paddle-note a { color: #3D6A00; }
[data-theme="light"] .orbi-tier-footer a { color: #3D6A00; }
[data-theme="light"] .orbi-tier-mor a { color: #3D6A00; } /* Paddle link on #EEF2FA card bg: #3D6A00 ~5.3:1 PASS */
[data-theme="light"] .orbi-pricing-footer .orbi-mor-note a { color: #3D6A00; }
[data-theme="light"] .orbi-tier-cta.ghost:hover {
  background: rgba(74,127,0,.1);
}

/* ── Primary CTA button — lime solid, dark text for WCAG AA 8.4:1 ── */
/* Dark mode: #7DC800 bg, #0B1221 text = ~8.4:1 PASS */
.orbi-btn-primary-nav,
.orbi-btn-primary-lg {
  background: #7DC800;
  color: #0B1221 !important;
}
.orbi-btn-primary-nav:hover,
.orbi-btn-primary-lg:hover {
  background: #8FD900;
  color: #0B1221 !important;
  box-shadow: 0 6px 24px rgba(125,200,0,.45);
}
/* Light mode: darker lime, white text = 5.9:1 PASS */
[data-theme="light"] .orbi-btn-primary-nav,
[data-theme="light"] .orbi-btn-primary-lg {
  background: #4A7F00;
  color: #FFFFFF !important;
}
[data-theme="light"] .orbi-btn-primary-nav:hover,
[data-theme="light"] .orbi-btn-primary-lg:hover {
  background: #437500;
  color: #FFFFFF !important;
}

/* Pricing tier CTA primary button — lime solid */
.orbi-tier-cta.primary {
  background: #7DC800;
  color: #0B1221 !important;
}
[data-theme="light"] .orbi-tier-cta.primary {
  background: #4A7F00;
  color: #FFFFFF !important;
}

/* ── Priority / log tag contrast — WCAG AA 4.5:1 ── */
/* Priority badges in the hero dashboard preview and report page */
.orbi-pri.high { color: #D94040; }   /* darker red: ~5.2:1 on dark surface */
.orbi-pri.med  { color: #C48A00; }   /* darker amber: ~4.7:1 on dark surface */
.orbi-pri.low  { color: #1A9060; }   /* darker green: ~4.9:1 on dark surface */
[data-theme="light"] .orbi-pri.high { color: #B91C1C; }  /* red-700: ~6.5:1 on #F8FAFF */
[data-theme="light"] .orbi-pri.med  { color: #92400E; }  /* amber-800: ~5.8:1 on #F8FAFF */
[data-theme="light"] .orbi-pri.low  { color: #065F46; }  /* green-800: ~7.1:1 on #F8FAFF */

/* Log panel tag badges: .orbi-log-tag.warn / .orbi-log-tag.success
   Dark mode uses CSS tokens (FBBF24 amber / 34D399 green) which pass on dark surfaces.
   Light mode: darken for contrast on near-white backgrounds. */
[data-theme="light"] .orbi-log-tag.warn    { color: #7C3A00; background: rgba(124,58,0,.1); }
[data-theme="light"] .orbi-log-tag.success { color: #065F46; background: rgba(6,95,70,.1); }

/* ── Report page: ensure theme toggle floats above all content ── */
/* PublicAudit/Report.cshtml uses Layout=null with _ThemeToggle partial.
   The .fa-theme-toggle already has z-index:9999 in the partial — this
   belt-and-suspenders rule ensures pointer-events are never blocked. */
.fa-theme-toggle {
  pointer-events: auto !important;
  z-index: 9999 !important;
}

/* ── Nav collapse pointer-event guard (BLOCKER-4 fix) ─────────────────────────
   The #orbiNavCollapse is position:absolute at ≤720px with z-index:999.
   When closed it already has visibility:hidden + pointer-events:none (set in
   the ≤720px media block below) — this belt-and-suspenders block ensures the
   collapse layer NEVER intercepts clicks over the hero CTA or auth submit at
   any viewport width or transition frame.

   Collapse wrapper: pointer-events:none when NOT .is-open (global rule,
   applies at all breakpoints — eliminates interception at the 720px boundary
   and during CSS transition frames).
   Hero CTA + auth submit: elevate their stacking context above the nav so
   even a half-open transition frame cannot block them. z-index:1000 = 1 > 999. */
.orbi-nav-collapse:not(.is-open) {
  pointer-events: none !important;
}

/* ── Nav URL audit form — pointer-event override ──────────────────────────
   .orbi-nav-collapse:not(.is-open) sets pointer-events:none !important on the
   wrapper at all breakpoints (desktop + mobile).  On desktop (≥721px) the
   collapse is never .is-open, so the !important rule would kill clicks on the
   compact URL form that lives inside it. Override it back to auto here.
   The form is only visible + hittable when .nav-scrolled makes its width > 0;
   browsers will not fire pointer events on zero-width/opacity:0 elements, so
   this override is harmless when the form is actually hidden.
   The inner <input> and <button> must also be explicitly auto so nothing in the
   inheritance chain can suppress them. */
.orbi-nav.nav-scrolled #orbiNavUrlForm,
.orbi-nav.nav-scrolled #orbiNavUrlForm input,
.orbi-nav.nav-scrolled #orbiNavUrlForm .orbi-nav-url-btn {
  pointer-events: auto !important;
}

.orbi-btn-primary-lg,        /* hero "Run my free audit" CTA */
.orbi-submit                  /* /Auth/Login "Send code" button */
{
  position: relative;
  z-index: 1001;               /* > .orbi-nav z-index:1000 */
}

/* NB-4 FIX — sticky-nav overlap: ensure the free-audit form card and its submit
   button scroll into view with enough clearance so the sticky navbar (--nav-h 62px)
   never obscures them. scroll-margin-top is the modern CSS property for this:
   when the browser scrolls an element into view (anchor, focus, submit error),
   it respects this margin relative to the top of the viewport.
   Also give the form card a small bottom padding so the button near the bottom
   of the card is always reachable without the sticky bar covering it.
   Verified viewport ranges: 1280×900 desktop and 375×667 mobile (NB-4). */
.orbi-audit-card {
  scroll-margin-top: calc(var(--nav-h) + 16px);  /* nav height + 16px breathing room */
}

#faSubmit,
.orbi-audit-submit {
  scroll-margin-top: calc(var(--nav-h) + 16px);
}

/* On small viewports the form section itself needs the offset so tapping
   "submit" does not hide the button behind the nav.  The padding-bottom on
   .orbi-section accounts for the elastic over-scroll gap at the page bottom. */
@media (max-width: 768px) {
  .orbi-audit-card {
    scroll-margin-top: calc(var(--nav-h) + 24px);
  }
  #faSubmit,
  .orbi-audit-submit {
    scroll-margin-top: calc(var(--nav-h) + 24px);
  }
  /* Prevent the submit button from sitting in the last few px at the bottom
     of the viewport where a sticky bar would cover it. */
  .orbi-audit-card {
    padding-bottom: 16px;
  }
}

.orbi-auth-wrap               /* entire auth card stacking context — must be ABOVE the fixed nav */
{
  position: relative;
  z-index: 1100;               /* .orbi-nav is z-index:1000 — auth form must win */
}

/* ============================================================================
   === MARKETING NAV — MOBILE HAMBURGER (Public-pass addition) ===
   At ≤720px: hide .orbi-nav-links + .orbi-nav-right by default inside
   .orbi-nav-collapse. Toggled open/closed by .orbi-nav-burger JS click.
   ========================================================================== */

/* Hamburger button — hidden on desktop */
.orbi-nav-burger {
  display: none;
  flex-direction: column; justify-content: center; align-items: center; gap: 5px;
  width: 38px; height: 38px;
  background: none; border: 1px solid var(--c-border); border-radius: var(--radius-md);
  cursor: pointer; padding: 0; margin-left: auto; flex-shrink: 0;
  color: var(--c-text-secondary);
  transition: background .15s, border-color .15s;
}
.orbi-nav-burger:hover { background: var(--c-surface-2); border-color: var(--c-accent); }
.orbi-nav-burger span {
  display: block; width: 16px; height: 1.5px;
  background: currentColor; border-radius: 2px;
  transition: transform .2s, opacity .2s;
}

/* Desktop: collapse wrapper is a flex row (normal layout) */
.orbi-nav-collapse {
  display: flex; align-items: center; flex: 1; min-width: 0;
}

/* ── Desktop hard-reset — nav collapse MUST NOT overlay page body at ≥721px ──
   At desktop widths the .orbi-nav-collapse lives inside the fixed <nav> bar and
   must never extend below it.  Explicitly reset every property that the ≤720px
   media block makes absolute/hidden/overlapping so that even if the .is-open JS
   class is present (e.g. user toggled on mobile then resized) it has no effect
   on desktop layout or hit-testing. This is belt-and-suspenders on top of the
   pointer-events:none rule and the ≤720px media block. */
@media (min-width: 721px) {
  .orbi-nav-collapse,
  .orbi-nav-collapse.is-open {
    position: static !important;
    top: auto !important; left: auto !important; right: auto !important;
    max-height: none !important;
    overflow: visible !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    z-index: auto !important;
    flex-direction: row !important;
    align-items: center !important;
    gap: revert !important;
  }
}

@media (max-width: 720px) {
  /* Mobile dropdown panel is position:absolute below the nav bar — the
     parent <nav> must allow overflow so it renders outside the 62px bar.
     Click interception is still prevented by the collapse's own
     pointer-events:none / visibility:hidden when closed. */
  .orbi-nav { overflow: visible; }

  /* Show hamburger, hide URL field in scrolled state */
  .orbi-nav-burger { display: flex; }
  .orbi-nav.nav-scrolled .orbi-nav-url { width: 0; opacity: 0; pointer-events: none; }

  /* Collapse wrapper becomes a full-width dropdown panel */
  .orbi-nav-collapse {
    position: absolute; top: var(--nav-h); left: 0; right: 0;
    flex-direction: column; align-items: stretch;
    background: var(--c-surface-1);
    border-top: 1px solid var(--c-border);
    border-bottom: 1px solid var(--c-border);
    box-shadow: var(--shadow-lg);
    padding: 16px 24px 20px;
    gap: 0;
    /* Hidden by default — visibility:hidden ensures no pointer-event interception
       when the panel is closed, even if overflow:hidden or opacity:0 alone is not
       enough at intermediate transition frames (GA conversion blocker fix). */
    max-height: 0; overflow: hidden; opacity: 0; pointer-events: none;
    visibility: hidden;
    transition: max-height .28s ease, opacity .2s ease, visibility 0s linear .28s;
    z-index: 999;
  }
  .orbi-nav-collapse.is-open {
    max-height: 420px; opacity: 1; pointer-events: auto;
    visibility: visible;
    transition: max-height .28s ease, opacity .2s ease, visibility 0s linear 0s;
  }

  /* Centre links: stack vertically */
  .orbi-nav-links {
    flex-direction: column; align-items: flex-start; gap: 2px; margin: 0 0 12px;
  }
  .orbi-nav-links a {
    display: block; width: 100%; padding: 10px 6px; font-size: 14px;
    border-radius: var(--radius-md);
  }

  /* Right cluster: stack vertically */
  .orbi-nav-right {
    flex-direction: column; align-items: stretch; gap: 8px; width: 100%;
  }
  .orbi-nav-right .orbi-btn-ghost,
  .orbi-nav-right .orbi-btn-primary-nav { text-align: center; width: 100%; padding: 10px 16px; }
  /* Mobile: show theme toggle inside the hamburger panel, full-width row */
  .orbi-nav-right .orbi-theme-toggle {
    display: flex; width: 100%; justify-content: center;
    border-radius: var(--radius-md); height: 44px;
    border: 1px solid var(--c-border); background: var(--c-surface-2);
  }

  /* URL form: hidden inside mobile collapse menu */
  .orbi-nav-url { display: none; }
}

/* ============================================================================
   === LIGHT-THEME FEATURE-CARD BORDER (Public-pass — MINOR-1) ===
   On the white/near-white light-mode surface cards need a visible border so
   they distinguish themselves from the page background. Dark mode already
   has surface contrast; light mode needs the explicit border.
   ========================================================================== */
[data-theme="light"] .orbi-feat-card {
  border-color: var(--c-border);
  box-shadow: 0 2px 8px rgba(12,14,20,.06);
}

/* ============================================================================
   === "SEE PRICING" SECONDARY CTA TAP TARGET (Public-pass — MINOR-2) ===
   The .orbi-btn-ghost used as "See pricing" in the CTA band and About page
   already has a border-radius/padding but no min-height.  Ensure 44px minimum
   tap target on mobile (WCAG 2.5.5 AAA / Apple HIG / Google Material guidance).
   ========================================================================== */
/* CTA band "See pricing" + About page CTA ghost buttons — 44px min tap target */
.orbi-cta-row .orbi-btn-ghost,
.orbi-about-cta-row .orbi-btn-ghost {
  min-height: 44px; padding: 10px 16px;
  display: inline-flex; align-items: center;
}
/* WCAG M10: "Sign in" navbar ghost button — raise to 44px advisory target */
.orbi-nav-right .orbi-btn-ghost {
  min-height: 44px;
  display: inline-flex; align-items: center;
}

/* ============================================================================
   === PLACEHOLDER CONTRAST — DARK THEME (Public-pass — MINOR-5) ===
   Raise --c-text-tertiary-placeholder from ~#4b5563 range to #6b7280 so
   placeholder text is readable in dark-mode inputs.
   We do this via a direct input::placeholder override (can't change the token
   without affecting other usages; this is narrower).
   ========================================================================== */
[data-theme="dark"] input::placeholder,
[data-bs-theme="dark"] input::placeholder {
  color: #6B7280;
  opacity: 1;
}

/* ============================================================================
   === BILLING TOGGLE NARROW SCREEN (Public-pass — MINOR-7) ===
   At 390px the three-option billing toggle label text gets cramped. Allow
   the toggle row to wrap so options stack on two lines gracefully.
   ========================================================================== */
@media (max-width: 440px) {
  .orbi-billing-toggle { flex-wrap: wrap; gap: 8px 6px; }
}

/* ============================================================================
   === FOOTER LINK TAP TARGETS (Public-pass — MINOR-16) ===
   Legal page footer <a> elements need a comfortable 44px tap target on mobile.
   ========================================================================== */
.legal-footer a,
.orbi-footer-col a {
  padding: 6px 0;
  display: inline-block;
}

/* ============================================================================
   === HOMEPAGE GALLERY (Public-pass — gallery rebuild) ===
   Multi-row grid of lesser-known progressing sites. Hover/tap reveals a
   progress-report flip card. Vibrant accent tiles, responsive layout.
   ========================================================================== */
.orbi-gallery-section {
  padding: 80px 0 96px;
  border-top: 1px solid var(--c-border);
}
.orbi-gallery-inner {
  max-width: 1240px; margin: 0 auto;
  padding-left: clamp(20px, 4vw, 48px);
  padding-right: clamp(20px, 4vw, 48px);
}
.orbi-gallery-header { text-align: center; margin-bottom: 52px; }
.orbi-gallery-header .orbi-section-tag { justify-content: center; }
.orbi-gallery-cta-copy {
  font-size: clamp(14px, 1.8vw, 16px);
  color: var(--c-text-secondary);
  margin-top: 10px; line-height: 1.6;
}

/* Grid */
.orbi-gallery-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
@media (max-width: 1024px) { .orbi-gallery-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 700px)  { .orbi-gallery-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; } }
@media (max-width: 420px)  { .orbi-gallery-grid { grid-template-columns: 1fr 1fr; gap: 10px; } }

/* Tile — flip card container */
.orbi-gallery-tile {
  position: relative;
  aspect-ratio: 4 / 3;
  border-radius: var(--radius-xl);
  overflow: hidden;
  cursor: pointer;
  outline: none;
}
.orbi-gallery-tile:focus-visible { box-shadow: 0 0 0 3px var(--c-accent); }

/* Front face */
.orbi-tile-front {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  align-items: flex-start; justify-content: flex-end;
  padding: 16px;
  transition: opacity .3s ease, transform .3s ease;
}
.orbi-gallery-tile:hover .orbi-tile-front,
.orbi-gallery-tile.flipped .orbi-tile-front {
  opacity: 0; transform: scale(1.04); pointer-events: none;
}

/* Tile coloured background */
.orbi-tile-bg {
  position: absolute; inset: 0;
  background: var(--tile-color, var(--c-surface-2));
}
/* Domain initial large letter */
.orbi-tile-initial {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -60%);
  font-size: clamp(40px, 6vw, 60px); font-weight: 800; letter-spacing: -2px;
  color: rgba(255,255,255,.18); line-height: 1; pointer-events: none;
  user-select: none;
}
/* Front label area */
.orbi-tile-label {
  position: relative; z-index: 1;
  background: rgba(0,0,0,.35);
  backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  border-radius: var(--radius-md);
  padding: 6px 10px;
}
.orbi-tile-domain {
  font-size: 13px; font-weight: 700; color: #fff; letter-spacing: -.2px; line-height: 1.2;
}
.orbi-tile-niche {
  font-size: 10.5px; color: rgba(255,255,255,.75); margin-top: 2px; text-transform: capitalize;
}

/* Back face — progress report card */
.orbi-tile-back {
  position: absolute; inset: 0;
  background: var(--c-surface-1); border: 1px solid var(--c-border);
  display: flex; flex-direction: column; padding: 14px 14px 12px;
  opacity: 0; transform: scale(.96);
  transition: opacity .3s ease, transform .3s ease;
  pointer-events: none; border-radius: var(--radius-xl);
}
.orbi-gallery-tile:hover .orbi-tile-back,
.orbi-gallery-tile.flipped .orbi-tile-back {
  opacity: 1; transform: scale(1); pointer-events: auto;
}
.orbi-tile-back-domain {
  font-size: 12px; font-weight: 700; color: var(--c-text-primary);
  letter-spacing: -.1px; margin-bottom: 2px;
}
.orbi-tile-back-niche {
  font-size: 10px; color: var(--c-text-tertiary); text-transform: capitalize; margin-bottom: 10px;
}
.orbi-tile-progress {
  flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 6px;
}
.orbi-tile-snap {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 6px; font-size: 11px;
}
.orbi-tile-snap .orbi-ts-label { color: var(--c-text-tertiary); flex-shrink: 0; }
.orbi-tile-snap .orbi-ts-value {
  font-weight: 700; color: var(--c-text-primary); font-size: 12px; text-align: right;
}
.orbi-tile-snap .orbi-ts-value.is-current { color: var(--c-success); }
.orbi-tile-growth {
  margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--c-border);
  font-size: 10.5px; line-height: 1.5; color: var(--c-text-secondary);
}
.orbi-tile-growth strong { color: var(--c-success); }

/* Illustrative label badge (shown when real data is not yet available) */
.orbi-tile-illustrative {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--c-warn); background: rgba(251,191,36,.12);
  border: 1px solid rgba(251,191,36,.25);
  border-radius: var(--radius-sm); padding: 2px 6px;
  margin-top: 6px; align-self: flex-start;
}

/* Gallery footer CTA */
.orbi-gallery-footer {
  text-align: center; margin-top: 44px;
}

/* ============================================================================
   === GALLERY IMAGE MATRIX (redesign E — real thumbnails from manifest) ===
   Multi-row CSS grid of website screenshot thumbnails.
   Replaces letter-tile tiles for the 12 manifest sites.
   ========================================================================== */
.orbi-img-matrix {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
@media (max-width: 900px) { .orbi-img-matrix { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 600px) { .orbi-img-matrix { grid-template-columns: repeat(2, 1fr); gap: 10px; } }

.orbi-img-tile {
  position: relative;
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--c-border);
  background: var(--c-surface-1);
  aspect-ratio: 4/3;
  cursor: default;
}
.orbi-img-tile img {
  width: 100%; height: 100%;
  object-fit: cover; object-position: top;
  display: block;
  transition: transform .35s ease;
}
.orbi-img-tile:hover img { transform: scale(1.03); }

/* Industry label bar at bottom */
.orbi-img-tile-label {
  position: absolute; bottom: 0; left: 0; right: 0;
  padding: 8px 10px 9px;
  background: linear-gradient(to top, rgba(0,0,0,.72) 0%, transparent 100%);
  font-size: 11px; font-weight: 600; color: #fff;
  pointer-events: none;
}

/* Hover progress card overlay */
.orbi-img-tile-hover {
  position: absolute; inset: 0;
  background: var(--c-surface-0);
  border: 1px solid var(--c-border);
  padding: 14px;
  display: flex; flex-direction: column; justify-content: center; gap: 6px;
  opacity: 0; transform: scale(.97);
  transition: opacity .25s ease, transform .25s ease;
  pointer-events: none;
  border-radius: var(--radius-lg);
}
.orbi-img-tile:hover .orbi-img-tile-hover,
.orbi-img-tile:focus-within .orbi-img-tile-hover {
  opacity: 1; transform: scale(1); pointer-events: auto;
}
.orbi-img-tile-domain {
  font-size: 11.5px; font-weight: 700; color: var(--c-text-primary); margin-bottom: 2px;
}
.orbi-img-tile-industry {
  font-size: 10px; color: var(--c-text-tertiary); margin-bottom: 8px;
}
.orbi-img-tile-growth-text {
  font-size: 10.5px; color: var(--c-text-secondary); line-height: 1.5;
  padding-top: 6px; border-top: 1px solid var(--c-border);
}
.orbi-img-tile-growth-text strong { color: var(--c-success); }
.orbi-img-tile-illustrative-badge {
  display: inline-flex; align-items: center;
  font-size: 8.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--c-warn); background: rgba(251,191,36,.12);
  border: 1px solid rgba(251,191,36,.25);
  border-radius: var(--radius-sm); padding: 2px 6px;
  margin-top: 6px; align-self: flex-start;
}

/* ============================================================================
   === CLOSED-BETA STATUS BADGE (Public-pass — MAJOR-10) ===
   Elevated disclosure badge near the features section subtitle.
   ========================================================================== */
.orbi-beta-status-badge {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(251,191,36,.1);
  border: 1px solid rgba(251,191,36,.28);
  border-radius: var(--radius-pill);
  padding: 6px 16px; font-size: 12px; font-weight: 600;
  color: var(--c-warn); margin-bottom: 12px;
}
[data-theme="light"] .orbi-beta-status-badge {
  color: #92400E;
  background: rgba(251,191,36,.12);
  border-color: rgba(146,64,14,.25);
}
.orbi-beta-status-badge::before {
  content: '';
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--c-warn); flex-shrink: 0;
  animation: orbi-pulse 2.5s infinite;
}
[data-theme="light"] .orbi-beta-status-badge::before { background: #92400E; }

/* ============================================================================
   === AUTHED-PASS TOKEN + CLASS ADDITIONS (pass 2, 2026-07-02)
   ============================================================================ */

/* ── Backward-compatible token aliases (CRITICAL C1/C2 safety net) ──────────
   Views that reference var(--c-surface) or var(--c-text) will now resolve
   to the correct existing tokens rather than triggering hardcoded fallbacks.  */
:root,
[data-bs-theme="dark"],
[data-theme="dark"] {
  --c-surface: var(--c-surface-1);
  --c-text: var(--c-text-primary);
  /* Alias for backward-compat border radius shorthand */
  --radius: var(--radius-md);
  /* Accent RGB decomposition for rgba() usage */
  --c-accent-rgb: 125, 200, 0;
  /* Warning RGB alias pointing at tblr token value */
  --c-warning-rgb: var(--tblr-warning-rgb);
  /* Topbar bg token */
  --c-topbar-bg: rgba(17, 20, 32, 0.82);
}
[data-bs-theme="light"],
[data-theme="light"] {
  --c-surface: var(--c-surface-1);
  --c-text: var(--c-text-primary);
  --radius: var(--radius-md);
  --c-accent-rgb: 79, 136, 0;
  --c-warning-rgb: var(--tblr-warning-rgb);
  --c-topbar-bg: rgba(255, 255, 255, 0.85);
}

/* ── .orbi-btn-primary / .orbi-btn-secondary (undefined — MAJOR M1) ─────────
   Base-sized equivalents of the existing -lg / -nav variants.               */
.orbi-btn-primary {
  display: inline-flex; align-items: center; gap: 6px;
  background: #7DC800;
  color: #0B1221; font-size: 14px; font-weight: 600;
  padding: 9px 20px; border-radius: var(--radius-md);
  text-decoration: none; border: none; cursor: pointer;
  transition: background .15s, transform .1s;
  letter-spacing: -.1px;
}
.orbi-btn-primary:hover { background: #8FD900; color: #0B1221; text-decoration: none; transform: translateY(-1px); }
[data-theme="light"] .orbi-btn-primary {
  background: #4A7F00; color: #FFFFFF;
}
[data-theme="light"] .orbi-btn-primary:hover { background: #437500; color: #FFFFFF; }

.orbi-btn-secondary {
  display: inline-flex; align-items: center; gap: 6px;
  background: transparent; color: var(--c-text-secondary);
  font-size: 14px; font-weight: 600;
  padding: 9px 20px; border-radius: var(--radius-md);
  border: 1px solid var(--c-border); text-decoration: none; cursor: pointer;
  transition: background .15s, border-color .15s, color .15s;
}
.orbi-btn-secondary:hover {
  background: var(--c-surface-2); border-color: var(--c-accent); color: var(--c-accent);
  text-decoration: none;
}

/* ── Topbar background token reference ──────────────────────────────────────
   (MINOR m2) — .orbi-topbar already defined earlier; add token-based override */
.orbi-topbar { background: var(--c-topbar-bg); }

/* ── Sidebar sub-nav links (MINOR m3) ── */
.orbi-side-subnav-link { padding-left: 2.5rem; font-size: 13px; }

/* ── Operator section label (MINOR m5) ── */
.orbi-side-operator-label {
  margin-top: 1.5rem; padding: 0 0.75rem;
  font-size: 0.65rem; font-weight: 600; letter-spacing: .08em;
  text-transform: uppercase; color: var(--c-text-tertiary);
  margin-bottom: 0.5rem; padding-left: 1rem;
}

/* ============================================================================
   === FREE AUDIT LEAD-MAGNET BAND ===
   Prominent CTA band that floats above the MCP section.
   ========================================================================== */
.orbi-freeaudit-band {
  background: linear-gradient(135deg, var(--c-surface-1) 0%, var(--c-surface-0) 100%);
  border-top: 1px solid var(--c-border);
  border-bottom: 1px solid var(--c-border);
  padding: clamp(40px,6vh,72px) 0;
}
[data-theme="light"] .orbi-freeaudit-band {
  background: linear-gradient(135deg, #EEF2FA 0%, #F4F7FB 100%);
}
.orbi-freeaudit-inner {
  max-width: 640px; margin: 0 auto;
  padding-left: clamp(20px,4vw,48px);
  padding-right: clamp(20px,4vw,48px);
  text-align: center;
  display: flex; flex-direction: column; align-items: center; gap: 16px;
}
.orbi-freeaudit-copy h2 {
  font-size: clamp(22px,3vw,32px); font-weight: 700;
  letter-spacing: -1px; color: var(--c-text-primary);
  margin: 0 0 10px;
}
.orbi-freeaudit-copy p {
  font-size: 15px; color: var(--c-text-secondary); margin: 0; line-height: 1.6;
}
.orbi-freeaudit-form {
  width: 100%; max-width: 520px;
  display: flex; align-items: center; gap: 8px;
  background: var(--c-surface-2);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-xl);
  padding: 6px 6px 6px 14px;
  box-shadow: var(--shadow-md);
  transition: border-color .2s, box-shadow .2s;
}
.orbi-freeaudit-form:focus-within {
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px var(--c-accent-glow), var(--shadow-md);
}
.orbi-freeaudit-form input {
  flex: 1; min-width: 0; border: none; background: transparent; outline: none;
  font-family: var(--font); font-size: 14px; color: var(--c-text-primary);
}
.orbi-freeaudit-form input::placeholder { color: var(--c-text-tertiary); }
.orbi-freeaudit-form .orbi-url-globe {
  width: 16px; height: 16px; color: var(--c-text-tertiary); flex: none;
}
@media (max-width: 500px) {
  .orbi-freeaudit-form { flex-direction: column; border-radius: var(--radius-lg); padding: 10px; }
  .orbi-freeaudit-form input { width: 100%; padding: 4px 0; }
  .orbi-freeaudit-form .orbi-btn-primary-lg { width: 100%; justify-content: center; }
  .orbi-freeaudit-form .orbi-url-globe { display: none; }
}

/* ============================================================================
   === MCP / AI-ASSISTANT SECTION ===
   "Run Orbirank from your AI assistant"
   ========================================================================== */
.orbi-mcp-section {
  background: var(--c-bg);
  border-bottom: 1px solid var(--c-border);
  padding: clamp(56px,8vh,96px) 0;
}
[data-theme="light"] .orbi-mcp-section { background: #F4F7FB; }

/* How-it-works 3-step strip */
.orbi-mcp-how {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  margin: 40px 0 48px;
}
@media (max-width: 720px) {
  .orbi-mcp-how { grid-template-columns: 1fr; }
}
.orbi-mcp-how-step {
  display: flex; align-items: flex-start; gap: 14px;
  background: var(--c-surface-1);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: 20px;
}
[data-theme="light"] .orbi-mcp-how-step { background: #FFFFFF; }
.orbi-mcp-how-num {
  width: 32px; height: 32px; flex-shrink: 0;
  border-radius: 50%;
  background: var(--c-accent-dim);
  color: var(--c-accent);
  font-size: 13px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid rgba(125,200,0,.25);
}
[data-theme="light"] .orbi-mcp-how-num {
  background: rgba(74,127,0,.1);
  border-color: rgba(74,127,0,.2);
}
.orbi-mcp-how-step b { font-size: 14px; font-weight: 600; color: var(--c-text-primary); display: block; margin-bottom: 6px; }
.orbi-mcp-how-step p { font-size: 13.5px; color: var(--c-text-secondary); margin: 0; line-height: 1.55; }
.orbi-mcp-how-step code {
  font-size: 12px; font-family: 'Courier New', monospace;
  color: var(--c-accent); background: var(--c-accent-dim);
  padding: 1px 5px; border-radius: 4px;
}
/* WCAG AA: #4A7F00 on tinted-green bg fails (~4.3:1) — darken to #3D6A00 (~5.4:1) */
[data-theme="light"] .orbi-mcp-how-step code { color: #3D6A00; }

/* Tool cards grid — 2-col on wide, 1-col on narrow */
.orbi-mcp-tools {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px;
  margin-bottom: 40px;
}
@media (max-width: 640px) {
  .orbi-mcp-tools { grid-template-columns: 1fr; }
}
.orbi-mcp-tool-card {
  display: grid;
  grid-template-rows: auto auto 1fr;
  gap: 8px;
  background: var(--c-surface-1);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: 18px 20px;
  transition: border-color .18s, box-shadow .18s;
}
.orbi-mcp-tool-card:hover {
  border-color: var(--c-accent);
  box-shadow: 0 0 0 1px var(--c-accent-dim), var(--shadow-sm);
}
[data-theme="light"] .orbi-mcp-tool-card { background: #FFFFFF; }
[data-theme="light"] .orbi-mcp-tool-card:hover { box-shadow: 0 0 0 1px rgba(74,127,0,.15), var(--shadow-sm); }

.orbi-mcp-tool-icon {
  width: 34px; height: 34px;
  background: var(--c-accent-dim);
  border-radius: var(--radius-md);
  display: flex; align-items: center; justify-content: center;
  color: var(--c-accent);
  flex-shrink: 0;
}
[data-theme="light"] .orbi-mcp-tool-icon { background: rgba(74,127,0,.1); }
.orbi-mcp-tool-icon svg { width: 16px; height: 16px; }

.orbi-mcp-tool-name {
  font-size: 13px; font-weight: 600;
  font-family: 'Courier New', monospace;
  color: var(--c-accent);
  background: var(--c-accent-dim);
  border-radius: var(--radius-sm);
  padding: 3px 8px;
  display: inline-block;
  width: fit-content;
}
[data-theme="light"] .orbi-mcp-tool-name { background: rgba(7,104,160,.1); color: #1a5e9a; } /* WCAG AA: #1a5e9a on #e6f0f6 ~5.2:1 */

.orbi-mcp-tool-desc {
  font-size: 13.5px; color: var(--c-text-secondary);
  line-height: 1.55; margin: 0;
}

/* Footer note + CTA row */
.orbi-mcp-footer {
  border-top: 1px solid var(--c-border);
  padding-top: 28px;
  display: flex; flex-direction: column; align-items: center; gap: 20px;
  text-align: center;
}
.orbi-mcp-discovery-note {
  font-size: 13.5px; color: var(--c-text-secondary);
  max-width: 60ch; margin: 0; line-height: 1.6;
}

/* =============================================================================
   Progressive report section loaders — report-loader.js
   ============================================================================= */

/* Shell container that holds the loader overlay or the real partial */
.orbi-section-shell {
    position: relative;
    min-height: 100px;
    margin-bottom: 24px;
}

/* Loading overlay */
.orbi-section-loader {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100px;
    background: var(--c-surface-1);
    border: 1px solid var(--c-border-dim);
    border-radius: var(--radius-xl);
    padding: 28px 24px;
    box-shadow: var(--shadow-sm);
}

.orbi-section-loader-inner {
    text-align: center;
    max-width: 320px;
}

/* Domain name in accent color — anchors the loader to the user's query */
.orbi-section-loader-domain {
    font-size: 13px;
    font-weight: 700;
    color: var(--c-accent);
    letter-spacing: .01em;
    margin-bottom: 6px;
    word-break: break-all;
}

/* Section label */
.orbi-section-loader-label {
    font-size: 13px;
    color: var(--c-text-tertiary);
    letter-spacing: .04em;
    text-transform: uppercase;
    font-weight: 600;
    margin-bottom: 14px;
}

/* Animated progress bar */
.orbi-section-loader-bar {
    height: 3px;
    background: var(--c-border-dim);
    border-radius: 99px;
    overflow: hidden;
    width: 180px;
    margin: 0 auto;
}
.orbi-section-loader-bar-fill {
    height: 100%;
    width: 40%;
    background: var(--c-accent);
    border-radius: 99px;
    animation: orbi-section-progress 1.4s ease-in-out infinite;
}
@keyframes orbi-section-progress {
    0%   { transform: translateX(-100%); }
    60%  { transform: translateX(320%); }
    100% { transform: translateX(320%); }
}

/* Per-section error card */
.orbi-section-error {
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--c-surface-1);
    border: 1px solid var(--c-border-dim);
    border-radius: var(--radius-lg);
    padding: 16px 20px;
    font-size: 13px;
    color: var(--c-text-secondary);
    min-height: 56px;
}

/* Report CSS carried over from the old monolithic Report.cshtml inline block.
   These are used by section partial views and must live in site.css so they
   apply to partial HTML fragments injected by report-loader.js. */

.orbi-report-summary {
    display: grid; grid-template-columns: auto 1fr; gap: 28px; align-items: center;
    background: var(--c-surface-1); border: 1px solid var(--c-border);
    border-radius: var(--radius-xl); box-shadow: var(--shadow-md);
    padding: 26px; margin-bottom: 16px;
}
@media (max-width: 640px) { .orbi-report-summary { grid-template-columns: 1fr; justify-items: center; text-align: center; } }

.orbi-score-gauge { position: relative; width: 132px; height: 132px; flex: none; }
.orbi-score-gauge svg { transform: rotate(-90deg); }
.orbi-score-gauge .orbi-score-num { position: absolute; inset: 0; display: grid; place-items: center; }
.orbi-score-gauge .orbi-score-num b { font-size: 38px; font-weight: 700; letter-spacing: -1.5px; color: var(--c-text-primary); line-height: 1; }
.orbi-score-gauge .orbi-score-num small { display: block; text-align: center; font-size: 11px; color: var(--c-text-tertiary); letter-spacing: .12em; text-transform: uppercase; margin-top: 3px; }

.orbi-cwv-wrap {
    background: var(--c-surface-1); border: 1px solid var(--c-border);
    border-radius: var(--radius-xl); padding: 22px 24px;
    box-shadow: var(--shadow-sm);
}
.orbi-cwv-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; width: 100%; margin-top: 12px; }
@media (max-width: 700px) { .orbi-cwv-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 480px) { .orbi-cwv-grid { grid-template-columns: 1fr 1fr; } }
.orbi-crux-badge {
    display: inline-flex; align-items: center; gap: 4px;
    font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
    padding: 2px 7px; border-radius: 99px;
    background: rgba(52,211,153,.12); color: #34d399; margin-top: 8px;
}
[data-theme="light"] .orbi-crux-badge { background: rgba(5,150,105,.1); color: #065f46; }
.orbi-cwv-data-note { font-size: 10px; color: var(--c-text-tertiary); margin-top: 6px; line-height: 1.4; }
.orbi-cwv-tile {
    background: var(--c-surface-0); border: 1px solid var(--c-border-dim);
    border-radius: var(--radius-lg); padding: 14px 12px; text-align: center;
}
.orbi-cwv-tile .orbi-cwv-k { font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--c-text-tertiary); }
.orbi-cwv-tile .orbi-cwv-v { font-size: 22px; font-weight: 700; letter-spacing: -.5px; margin-top: 6px; color: var(--c-text-primary); }
.orbi-cwv-tile .orbi-cwv-v.muted { color: var(--c-text-tertiary); }
.orbi-cwv-tile.grade .orbi-cwv-v { font-size: 16px; }

.orbi-verdict {
    font-size: 14px; line-height: 1.6; color: var(--c-text-secondary);
    background: var(--c-surface-1); border: 1px solid var(--c-border-dim);
    border-radius: var(--radius-lg); padding: 14px 18px; margin-bottom: 28px;
}
.orbi-verdict strong { color: var(--c-text-primary); }

.orbi-report-note {
    font-size: 13.5px; line-height: 1.6; color: var(--c-warn);
    background: rgba(251,191,36,.1); border: 1px solid rgba(251,191,36,.32);
    border-radius: var(--radius-md); padding: 12px 16px; margin-bottom: 24px;
}

.orbi-group-header { display: flex; align-items: center; gap: 10px; margin: 32px 0 14px; }
.orbi-group-header h2 { font-size: 17px; font-weight: 700; letter-spacing: -.4px; color: var(--c-text-primary); margin: 0; }
.orbi-group-badge { font-size: 11px; font-weight: 600; letter-spacing: .06em; padding: 3px 10px; border-radius: 99px; }
.orbi-group-badge.quick  { background: rgba(52,211,153,.15); color: #34d399; }
.orbi-group-badge.bigger { background: rgba(251,191,36,.15); color: var(--c-warn); }
.orbi-group-desc { font-size: 12.5px; color: var(--c-text-tertiary); margin: -8px 0 14px; }
[data-theme="light"] .orbi-group-badge.quick  { color: #1A6B40; }
[data-theme="light"] .orbi-group-badge.bigger { color: #7A5500; }

.orbi-report-issues {
    background: var(--c-surface-1); border: 1px solid var(--c-border);
    border-radius: var(--radius-xl); padding: 6px 20px; box-shadow: var(--shadow-sm);
}
.orbi-report-issue { display: flex; align-items: flex-start; gap: 14px; padding: 16px 0; border-bottom: 1px solid var(--c-border-dim); }
.orbi-report-issue:last-child { border-bottom: none; }
.orbi-report-issue .orbi-r-ico { width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; flex: none; margin-top: 1px; }
.orbi-report-issue .orbi-r-ico svg { width: 15px; height: 15px; }
.orbi-r-body { flex: 1; min-width: 0; }
.orbi-r-desc   { color: var(--c-text-primary); font-size: 14px; font-weight: 600; }
.orbi-r-impact { font-size: 12px; color: var(--c-text-secondary); margin: 4px 0 3px; line-height: 1.5; }
.orbi-r-fix    { font-size: 12.5px; color: var(--c-text-secondary); margin-top: 3px; line-height: 1.5; }
.orbi-r-fix::before { content: "Fix: "; font-weight: 600; color: var(--c-text-tertiary); }
.orbi-r-meta   { display: flex; align-items: center; gap: 8px; margin-top: 8px; flex-wrap: wrap; }

.effort-low  { font-size: 10.5px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: rgba(52,211,153,.13); color: #34d399; }
.effort-med  { font-size: 10.5px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: rgba(251,191,36,.13); color: var(--c-warn); }
.effort-high { font-size: 10.5px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: rgba(248,113,113,.13); color: var(--c-danger); }
[data-theme="light"] .effort-low { color: #1A6B40; }
[data-theme="light"] .effort-med { color: #7A5500; }

.orbi-report-clean {
    background: var(--c-surface-1); border: 1px solid var(--c-border);
    border-radius: var(--radius-xl); padding: 28px; text-align: center;
    color: var(--c-success); font-weight: 600;
}

.orbi-insights {
    background: var(--c-surface-1); border: 1px solid var(--c-border);
    border-radius: var(--radius-xl); padding: 22px 24px; margin-top: 0;
    box-shadow: var(--shadow-sm);
}
.orbi-insights-hdr { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.orbi-insights-hdr h2 { font-size: 17px; font-weight: 700; letter-spacing: -.4px; color: var(--c-text-primary); margin: 0; }
.orbi-insights-tag { font-size: 10px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; padding: 2px 8px; border-radius: 99px; background: rgba(99,102,241,.15); color: #818cf8; }
[data-theme="light"] .orbi-insights-tag { color: #4338ca; }
.orbi-insights-focus { font-size: 14px; color: var(--c-text-secondary); margin: 0 0 10px; }
.orbi-insights-focus strong { color: var(--c-text-primary); }
.orbi-insights-warn { font-size: 13px; color: var(--c-warn); margin-bottom: 10px; padding: 8px 12px; background: rgba(251,191,36,.08); border-radius: var(--radius-md); }
[data-theme="light"] .orbi-insights-warn { color: #7A5500; }
.orbi-insights-recs { list-style: none; padding: 0; margin: 0; }
.orbi-insights-recs li { font-size: 13.5px; color: var(--c-text-secondary); line-height: 1.6; padding: 8px 0; border-bottom: 1px solid var(--c-border-dim); display: flex; gap: 10px; align-items: flex-start; }
.orbi-insights-recs li:last-child { border-bottom: none; }
.orbi-insights-recs li::before { content: "→"; color: var(--c-accent); font-weight: 700; flex-shrink: 0; margin-top: 1px; }
.orbi-insights-src { font-size: 11px; color: var(--c-text-tertiary); margin-top: 14px; }
.orbi-insights-degraded { font-size: 13px; color: var(--c-text-secondary); padding: 12px 16px; background: var(--c-surface-0); border-radius: var(--radius-md); margin-top: 8px; }

/* p2 data panels */
.orbi-p2-panels { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 12px; margin-bottom: 16px; }
.orbi-p2-panel { background: var(--c-surface-1); border: 1px solid var(--c-border-dim); border-radius: var(--radius-lg); padding: 13px 14px; min-height: 76px; }
.orbi-p2-panel-title { display: flex; align-items: center; gap: 5px; font-size: 10.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-tertiary); margin-bottom: 2px; }
.orbi-p2-tag-grid { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.orbi-p2-tag { display: inline-flex; align-items: center; gap: 4px; font-size: 10.5px; font-weight: 600; padding: 2px 7px; border-radius: 99px; }
.orbi-p2-tag.present { background: rgba(52,211,153,.13); color: #34d399; }
.orbi-p2-tag.absent  { background: rgba(248,113,113,.13); color: var(--c-danger); }
[data-theme="light"] .orbi-p2-tag.present { color: #1A6B40; }
[data-theme="light"] .orbi-p2-tag.absent  { color: #b91c1c; }
.orbi-p2-schema-chip { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: rgba(99,102,241,.13); color: #818cf8; }
[data-theme="light"] .orbi-p2-schema-chip { color: #4338ca; }

/* Keyword Intel */
.orbi-kwintel { background: var(--c-surface-1); border: 1px solid var(--c-border); border-radius: var(--radius-xl); padding: 22px 24px; box-shadow: var(--shadow-sm); }
.orbi-kwintel-hdr { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.orbi-kwintel-hdr h2 { font-size: 17px; font-weight: 700; letter-spacing: -.4px; color: var(--c-text-primary); margin: 0; }
.orbi-kwintel-badge { font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: 2px 8px; border-radius: 99px; background: rgba(99,102,241,.15); color: #818cf8; }
[data-theme="light"] .orbi-kwintel-badge { color: #4338ca; }
.orbi-kwintel-disclaimer { font-size: 12.5px; color: var(--c-text-secondary); line-height: 1.6; background: var(--c-surface-0); border: 1px solid var(--c-border-dim); border-radius: var(--radius-md); padding: 10px 14px; margin-bottom: 16px; }
.orbi-kwintel-table-scroll-outer { position: relative; margin-bottom: 6px; }
.orbi-kwintel-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; scrollbar-color: var(--c-border) transparent; }
.orbi-kwintel-table-wrap::-webkit-scrollbar { height: 4px; }
.orbi-kwintel-table-wrap::-webkit-scrollbar-track { background: var(--c-surface-0); border-radius: 2px; }
.orbi-kwintel-table-wrap::-webkit-scrollbar-thumb { background: var(--c-border); border-radius: 2px; }
.orbi-kwintel-swipe-hint { display: none; align-items: center; gap: 5px; font-size: 11px; color: var(--c-text-tertiary); margin-bottom: 14px; }
.orbi-kwintel-table { width: 100%; border-collapse: collapse; font-size: 13px; color: var(--c-text-secondary); }
.orbi-kwintel-table th { text-align: left; font-size: 10.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--c-text-tertiary); padding: 8px 10px; border-bottom: 1px solid var(--c-border); white-space: nowrap; }
.orbi-kwintel-table td { padding: 10px; border-bottom: 1px solid var(--c-border-dim); vertical-align: top; }
.orbi-kwintel-table tbody tr:last-child td { border-bottom: none; }
.kw-term { min-width: 140px; }
.kw-term-text { font-weight: 600; color: var(--c-text-primary); font-size: 13px; }
.kw-vol { white-space: nowrap; }
.kw-vol-val { font-weight: 600; color: var(--c-text-primary); }
.kw-vol-src { display: block; font-size: 9.5px; color: var(--c-text-tertiary); letter-spacing: .04em; margin-top: 2px; }
.kw-vol-na { color: var(--c-text-tertiary); }
.kw-comp { font-size: 11px; font-weight: 600; padding: 2px 7px; border-radius: 99px; }
.comp-low  { background: rgba(52,211,153,.12); color: #34d399; }
.comp-med  { background: rgba(251,191,36,.12); color: var(--c-warn); }
.comp-high { background: rgba(248,113,113,.12); color: var(--c-danger); }
[data-theme="light"] .comp-low { color: #1A6B40; }
[data-theme="light"] .comp-med { color: #7A5500; }
.kw-serp { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 99px; display: inline-flex; align-items: center; gap: 4px; }
.kw-leverage    { background: rgba(52,211,153,.13); color: #34d399; }
.kw-opportunity { background: rgba(99,102,241,.12); color: #818cf8; }
.kw-unknown     { background: var(--c-surface-2); color: var(--c-text-tertiary); }
[data-theme="light"] .kw-leverage    { color: #1A6B40; }
[data-theme="light"] .kw-opportunity { color: #4338ca; }
.kw-rank-pos    { font-size: 10px; font-weight: 500; opacity: .8; }
.kw-action-hint { font-size: 11px; color: var(--c-text-tertiary); margin-top: 3px; line-height: 1.4; }
.orbi-kwintel-gsc-cta { display: flex; gap: 12px; align-items: flex-start; background: var(--c-surface-0); border: 1px solid var(--c-border-dim); border-radius: var(--radius-lg); padding: 14px 16px; }
.orbi-kwintel-gsc-icon { width: 32px; height: 32px; border-radius: 8px; flex: none; background: var(--c-accent-dim); color: var(--c-accent); display: flex; align-items: center; justify-content: center; margin-top: 2px; }
.orbi-kwintel-gsc-body { flex: 1; min-width: 0; }
.orbi-kwintel-gsc-text { font-size: 12.5px; color: var(--c-text-secondary); margin: 0 0 10px; line-height: 1.55; }
.orbi-kwintel-gsc-text strong { color: var(--c-text-primary); }
@media (max-width: 430px) {
    .orbi-kwintel-table-scroll-outer::after { display: block; }
    .orbi-kwintel-swipe-hint { display: flex; }
    .orbi-kwintel-table th { padding: 6px; font-size: 9px; }
    .orbi-kwintel-table td { padding: 7px 6px; }
    .kw-term { min-width: 80px; max-width: 105px; }
    .kw-term-text { word-break: break-word; white-space: normal; font-size: 11.5px; }
    .kw-vol { white-space: normal; min-width: 60px; }
    .kw-comp { font-size: 9.5px; padding: 1px 5px; }
    .kw-serp { font-size: 9.5px; padding: 1px 5px; gap: 2px; }
    .kw-action-hint { font-size: 9.5px; }
    .orbi-kwintel { padding: 16px 12px; }
}
.orbi-btn-primary-sm { display: inline-flex; align-items: center; gap: 6px; background: var(--c-accent); color: #fff; font-size: 12px; font-weight: 700; padding: 7px 14px; border-radius: var(--radius-md); text-decoration: none; transition: opacity .15s; letter-spacing: .01em; }
.orbi-btn-primary-sm:hover { opacity: .88; text-decoration: none; color: #fff; }

/* Prioritized Action Plan */
.orbi-plan { background: var(--c-surface-1); border: 1px solid var(--c-border); border-radius: var(--radius-xl); padding: 22px 24px; box-shadow: var(--shadow-sm); }
.orbi-plan h2 { font-size: 17px; font-weight: 700; letter-spacing: -.4px; color: var(--c-text-primary); margin: 0 0 16px; }
.orbi-plan-body { position: relative; border-left: 2px solid var(--c-border); padding-left: 22px; margin-left: 6px; }
.orbi-plan-body .orbi-plan-row { position: relative; margin-bottom: 16px; }
.orbi-plan-body .orbi-plan-row:last-child { margin-bottom: 0; }
.orbi-plan-body .orbi-plan-row::before { content: ''; position: absolute; left: -30px; top: 4px; width: 10px; height: 10px; border-radius: 50%; background: var(--c-accent); border: 2px solid var(--c-surface-1); }
.orbi-plan-row { display: flex; gap: 14px; margin-bottom: 14px; align-items: flex-start; }
.orbi-plan-when { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--c-text-tertiary); white-space: nowrap; padding-top: 2px; min-width: 88px; }
.orbi-plan-items { font-size: 13px; color: var(--c-text-secondary); line-height: 1.7; }
.orbi-plan-items .chip { display: inline-flex; align-items: center; gap: 4px; font-size: 11.5px; padding: 2px 8px; border-radius: 99px; background: var(--c-surface-0); border: 1px solid var(--c-border-dim); color: var(--c-text-secondary); margin: 2px 2px 2px 0; }

/* Off-page section */
.orbi-offpage-section { background: var(--c-surface-1); border: 1px solid var(--c-border); border-radius: var(--radius-xl); padding: 24px; box-shadow: var(--shadow-sm); }
.orbi-offpage-hdr { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; }
.orbi-offpage-hdr h2 { font-size: 17px; font-weight: 700; letter-spacing: -.4px; color: var(--c-text-primary); margin: 0; }
.orbi-offpage-badge { font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: 2px 8px; border-radius: 99px; background: var(--c-accent-dim); color: var(--c-accent); }
.orbi-da-card { display: flex; align-items: flex-start; gap: 18px; background: var(--c-surface-0); border: 1px solid var(--c-border-dim); border-radius: var(--radius-lg); padding: 16px 20px; margin-bottom: 18px; }
.orbi-da-score-wrap { display: flex; align-items: baseline; gap: 3px; flex-shrink: 0; }
.orbi-da-score { font-size: 42px; font-weight: 700; letter-spacing: -2px; color: var(--c-accent); line-height: 1; }
.orbi-da-score-label { font-size: 14px; color: var(--c-text-tertiary); font-weight: 500; }
.orbi-da-meta { flex: 1; min-width: 0; }
.orbi-da-title { font-size: 13.5px; font-weight: 700; color: var(--c-text-primary); margin-bottom: 4px; }
.orbi-da-source { font-size: 10.5px; font-weight: 500; color: var(--c-text-tertiary); margin-left: 6px; }
.orbi-da-proxy-note, .orbi-da-note { font-size: 12px; color: var(--c-text-secondary); margin: 0; line-height: 1.55; }
.orbi-da-unavailable { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--c-text-secondary); }
.orbi-offpage-sample { border: 1px solid var(--c-border-dim); border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 18px; }
.orbi-offpage-sample-hdr { background: var(--c-surface-2); padding: 7px 14px; border-bottom: 1px solid var(--c-border-dim); }
.orbi-offpage-sample-tag { font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--c-warn); }
[data-theme="light"] .orbi-offpage-sample-tag { color: #7A5500; }
.orbi-offpage-sample-grid { display: grid; grid-template-columns: repeat(3, 1fr); border-bottom: 1px solid var(--c-border-dim); }
@media (max-width: 560px) { .orbi-offpage-sample-grid { grid-template-columns: 1fr 1fr; } }
.orbi-offpage-stat { padding: 14px 16px; border-right: 1px solid var(--c-border-dim); }
.orbi-offpage-stat:last-child { border-right: none; }
.orbi-offpage-stat-val { font-size: 24px; font-weight: 700; color: var(--c-text-tertiary); letter-spacing: -1px; line-height: 1; }
.orbi-offpage-stat-lbl { font-size: 11px; font-weight: 600; color: var(--c-text-secondary); margin-top: 5px; }
.orbi-offpage-stat-note { font-size: 10px; color: var(--c-text-tertiary); margin-top: 3px; }
.orbi-offpage-sample-items { padding: 12px 16px; display: flex; flex-direction: column; gap: 10px; }
.orbi-offpage-sample-item { display: flex; align-items: flex-start; gap: 8px; font-size: 12px; color: var(--c-text-secondary); line-height: 1.55; }
.orbi-offpage-sample-item strong { color: var(--c-text-primary); }
.orbi-offpage-sample-ico { width: 22px; height: 22px; border-radius: 6px; background: var(--c-accent-dim); color: var(--c-accent); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.orbi-offpage-cta { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; background: var(--c-surface-0); border: 1px solid var(--c-border-dim); border-radius: var(--radius-lg); padding: 16px 20px; }
.orbi-offpage-cta-text { flex: 1; font-size: 13.5px; color: var(--c-text-secondary); margin: 0; line-height: 1.6; min-width: 200px; }
.orbi-offpage-cta-text strong { color: var(--c-text-primary); }

/* CTA block */
.orbi-report-cta { position: relative; overflow: hidden; text-align: center; background: var(--c-surface-0); border: 1px solid var(--c-border); border-radius: var(--radius-2xl); box-shadow: var(--shadow-lg); padding: 44px 32px; }
.orbi-report-cta::before { content: ''; position: absolute; inset: 0; z-index: 0; background: radial-gradient(420px 200px at 30% 0%, var(--aurora-1), transparent 70%), radial-gradient(360px 200px at 80% 120%, var(--aurora-2), transparent 70%); pointer-events: none; }
.orbi-report-cta > * { position: relative; z-index: 1; }
.orbi-report-cta h3 { font-size: 22px; font-weight: 700; letter-spacing: -.8px; color: var(--c-text-primary); margin: 0 0 10px; }
.orbi-report-cta .cta-sub { font-size: 14px; color: var(--c-text-secondary); line-height: 1.7; max-width: 560px; margin: 0 auto 24px; }
.orbi-cta-list { list-style: none; padding: 0; margin: 0 auto 24px; max-width: 420px; text-align: left; font-size: 13.5px; color: var(--c-text-secondary); line-height: 1.8; }
.orbi-cta-list li::before { content: "✓  "; color: var(--c-success); font-weight: 700; }
.orbi-cta-btns { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.orbi-btn-cta-secondary { font-size: 14px; font-weight: 600; color: var(--c-text-secondary); text-decoration: underline; text-decoration-color: transparent; transition: text-decoration-color .2s; }
.orbi-btn-cta-secondary:hover { text-decoration-color: currentColor; }
.orbi-cta-gsc-note { font-size: 12px; color: var(--c-text-tertiary); margin: 0; line-height: 1.55; max-width: 440px; }
.orbi-report-foot { text-align: center; font-size: 12px; color: var(--c-text-tertiary); margin-top: 36px; }

/* Share row */
.orbi-share-row { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin: 24px auto 0; max-width: 520px; }
.orbi-share-btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: var(--radius-md); font-size: 13px; font-weight: 600; text-decoration: none; border: 1px solid var(--c-border); color: var(--c-text-secondary); background: var(--c-surface-2); transition: background .15s, border-color .15s, color .15s; cursor: pointer; }
.orbi-share-btn:hover { color: var(--c-text-primary); border-color: var(--c-accent); background: var(--c-accent-dim); text-decoration: none; }
.orbi-share-copy-confirm { display: none; font-size: 11px; color: var(--c-success); margin-top: 6px; text-align: center; }
.orbi-share-na { margin-top: 24px; font-size: 13px; color: var(--c-text-tertiary); }

/* Parked / blocked / cross-domain banners */
.orbi-report-parked-notice { display: flex; align-items: flex-start; gap: 14px; background: rgba(251,191,36,.14); border: 2px solid rgba(251,191,36,.60); border-left: 5px solid var(--c-warn); border-radius: var(--radius-md); padding: 16px 18px; margin-bottom: 20px; color: var(--c-text-primary); }
.orbi-parked-icon { flex-shrink: 0; color: var(--c-warn); margin-top: 1px; }
.orbi-parked-text { line-height: 1.6; font-size: 0.93rem; }
.orbi-parked-text strong { color: var(--c-warn); font-size: 1rem; }
[data-theme="light"] .orbi-parked-text strong { color: #7A5500; }
[data-theme="light"] .orbi-report-parked-notice { background: rgba(251,191,36,.12); border-color: rgba(122,85,0,.45); border-left-color: #7A5500; }
.orbi-report-cross-domain-notice { display: flex; align-items: flex-start; gap: 12px; background: rgba(251,191,36,.10); border: 1px solid rgba(251,191,36,.40); border-left: 4px solid var(--c-warn); border-radius: var(--radius-md); padding: 14px 16px; margin-bottom: 18px; color: var(--c-text-primary); }
.orbi-cdn-icon { flex-shrink: 0; color: var(--c-warn); margin-top: 1px; }
.orbi-cdn-text { line-height: 1.55; font-size: 0.92rem; }

/* Info tooltip buttons */
.orbi-info-btn { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; border: none; background: var(--c-accent); color: #fff; font-size: 11px; font-weight: 800; cursor: pointer; vertical-align: middle; margin-left: 6px; position: relative; box-shadow: 0 1px 4px rgba(0,0,0,.22), 0 0 0 2px var(--c-accent-dim); transition: opacity .15s, box-shadow .15s; line-height: 1; padding: 0; }
.orbi-info-btn:hover, .orbi-info-btn:focus-visible { opacity: .85; box-shadow: 0 2px 8px rgba(0,0,0,.28), 0 0 0 3px var(--c-accent-dim); outline: none; }
.orbi-info-tooltip { display: none; position: absolute; z-index: 100; left: 50%; transform: translateX(-50%); bottom: calc(100% + 8px); width: 260px; font-size: 12px; line-height: 1.55; font-weight: 400; background: var(--c-surface-2); border: 1px solid var(--c-border); border-radius: var(--radius-md); padding: 10px 12px; color: var(--c-text-secondary); box-shadow: var(--shadow-md); text-align: left; white-space: normal; pointer-events: none; }
.orbi-info-btn:hover .orbi-info-tooltip, .orbi-info-btn:focus-visible .orbi-info-tooltip { display: block; }
.orbi-info-tooltip::after { content: ''; position: absolute; left: 50%; transform: translateX(-50%); top: 100%; border: 6px solid transparent; border-top-color: var(--c-border); }
.orbi-info-tooltip::before { content: ''; position: absolute; left: 50%; transform: translateX(-50%); top: calc(100% - 1px); border: 6px solid transparent; border-top-color: var(--c-surface-2); }

/* Severity / priority badges */
.orbi-pri.high { font-size: 10.5px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: rgba(248,113,113,.13); color: var(--c-danger); }
.orbi-pri.med  { font-size: 10.5px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: rgba(251,191,36,.13); color: var(--c-warn); }
.orbi-pri.low  { font-size: 10.5px; font-weight: 600; padding: 2px 8px; border-radius: 99px; background: var(--c-accent-dim); color: var(--c-accent); }
[data-theme="dark"] .orbi-pri.med { color: #FFD340; }
[data-theme="dark"] .orbi-pri.low { color: #A3E000; background: rgba(125,200,0,.18); }

/* Analysing spin animation */
@keyframes orbi-spin { to { transform: rotate(360deg); } }
.orbi-btn-analysing { opacity: .75; pointer-events: none; cursor: default; }
.orbi-btn-analysing .orbi-spin-ico { display: inline-block; animation: orbi-spin .7s linear infinite; }
.orbi-mcp-discovery-note code {
  font-size: 12px; font-family: 'Courier New', monospace;
  color: var(--c-accent); background: var(--c-accent-dim);
  padding: 1px 5px; border-radius: 4px;
}
[data-theme="light"] .orbi-mcp-discovery-note code { color: #3D6A00; } /* WCAG AA: #3D6A00 on tinted bg ~5.4:1 */
.orbi-mcp-discovery-note a { color: var(--c-accent); text-decoration: underline; }
.orbi-mcp-cta-row {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 12px; justify-content: center;
}
.orbi-mcp-openapi-link {
  font-size: 13.5px; font-weight: 500;
  color: var(--c-text-secondary); text-decoration: none;
  padding: 10px 18px;
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  display: inline-flex; align-items: center;
  transition: color .15s, border-color .15s, background .15s;
  min-height: 44px;
}
.orbi-mcp-openapi-link:hover {
  color: var(--c-accent); border-color: var(--c-accent);
  background: var(--c-accent-dim); text-decoration: none;
}

/* ============================================================================
   === WCAG SC 1.4.3 — Badge contrast fix (/legal/ai-systems light theme) ===
   axe color-contrast: .legal-risk-limited ("Limited Risk — Article 52") and
   .legal-risk-low (2 nodes) fail 4.5:1 in light theme.
   The badge styles live in the AiSystems.cshtml <style> scoped block; we override
   here in site.css (loaded after) so the fix applies in both themes without
   touching generated markup.
   Light theme measured values before fix:
     .legal-risk-low   : #34D399 text on rgba(52,211,153,.12)+#EEF1FB bg ≈ 1.6:1 FAIL
     .legal-risk-limited: #FBBF24 text on rgba(251,191,36,.12)+#EEF1FB bg ≈ 1.3:1 FAIL
   After: darkened text → ≥4.5:1 on light surface.
   ========================================================================== */
[data-theme="light"] .legal-risk-low {
  /* #065F46 green-800 on rgba(52,211,153,.12)+#EEF1FB ≈ 7.1:1 PASS */
  color: #065F46;
  background: rgba(6, 95, 70, .10);
}
[data-theme="light"] .legal-risk-limited {
  /* #92400E amber-800 on rgba(251,191,36,.12)+#EEF1FB ≈ 5.8:1 PASS */
  color: #92400E;
  background: rgba(146, 64, 14, .10);
}

/* ============================================================================
   === MOBILE BODY TEXT — WCAG AA SIZE + CONTRAST (GA polish) ===
   Body copy on public pages (report teasers, audit result descriptions, feature
   card bodies) must be >=14px on mobile to meet WCAG SC 1.4.4 (Resize Text)
   and pass contrast audits at small sizes.
   The global body font-size already uses clamp(16px, 1.06vw, 17px) which
   resolves to ~16px at 1500px wide but only ~11px at 375px (1.06% of 375 = 3.97px
   — the clamp lower-bound of 16px saves us). However several component-specific
   overrides (.orbi-feat-body, .orbi-r-desc, .orbi-audit-sample-desc etc.) set
   explicit small px values that undercut the floor on mobile.
   This block raises those to a 14px minimum on small screens.
   ========================================================================== */
@media (max-width: 640px) {
  /* Feature card body text — was 13.5px */
  .orbi-feat-body { font-size: 14px; }
  /* Report issue descriptions — was 14.5px (fine) but ensure minimum */
  .orbi-r-desc { font-size: 14.5px; }
  /* "What your report shows" sample descriptions — was 12.5px */
  .orbi-audit-sample-desc { font-size: 14px; }
  /* Audit check bullets — was 14.5px (fine) */
  .orbi-audit-checks li { font-size: 14px; }
  /* Timeline body paragraphs — was 13.5px */
  .orbi-timeline-body p { font-size: 14px; }
  /* Log line font — was 12px */
  .orbi-log-line { font-size: 13px; }
  /* Ticker items — was 11.5px; bump to 13px minimum */
  .orbi-ticker li { font-size: 13px; }
  /* Tier feature list — was 14px (fine) */
  .orbi-tier-features li { font-size: 14px; }
  /* Price sub-text — was 13px */
  .orbi-price-sub { font-size: 13px; }
}

/* ============================================================================
   === SHARED BUTTON LOADING STATE — .orbi-btn-loading ===
   Apply to any <button> or <a class="orbi-btn-*"> to show spinner + disabled.
   Usage (JS):  btn.classList.add('orbi-btn-loading');  btn.disabled = true;
   Revert:      btn.classList.remove('orbi-btn-loading'); btn.disabled = false;

   The spinner is a CSS-only border animation — no inline SVG, no external image.
   It renders inside a ::before pseudo-element so it does not disturb the button's
   child DOM (text nodes, arrow SVGs stay intact). The label text is preserved and
   shifted right by the spinner width.

   CSP: no inline styles used here — this is a static stylesheet (self CSS allowed).
   aria-busy="true" must be set by JS alongside the class (see pattern below).
   ========================================================================== */
@keyframes orbi-btn-spin {
  to { transform: rotate(360deg); }
}

/* The spinning ring rendered via ::before */
.orbi-btn-loading::before {
  content: '';
  display: inline-block;
  width: 14px;
  height: 14px;
  border: 2px solid rgba(255, 255, 255, 0.35);
  border-top-color: #fff;
  border-radius: 50%;
  animation: orbi-btn-spin 0.7s linear infinite;
  flex-shrink: 0;
  /* sits to the left of existing children via flex gap on the parent */
}

/* For .orbi-btn-primary (green, dark text) adjust ring colour */
.orbi-btn-primary.orbi-btn-loading::before {
  border-color: rgba(11, 18, 33, 0.25);
  border-top-color: #0B1221;
}

/* Suppress transform hover lift while loading */
.orbi-btn-loading,
.orbi-btn-loading:hover {
  cursor: default !important;
  transform: none !important;
  pointer-events: none;
}

/* Dim slightly to signal disabled state */
.orbi-btn-loading {
  opacity: 0.75;
}

/* ============================================================================
   === R6-R10 UX FIXES — owner-observed pass (2026-07-11) ===
   R6  Widen central content column — professional 1280px max-width
   R7  Fix overlapping text in hero / div sections
   R8  Nav-scroll -> free-report URL transition: colour signals the state change
   R9  Raise all near-invisible text/interactive elements to WCAG AA (≥4.5:1)
   R10 Sophia chat: bottom-align conversation, grow upward
   ============================================================================ */

/* ── R6: Widen content column ─────────────────────────────────────────────────
   Container token raised to 1280px; nav-inner and orbi-section follow.
   All sections that reference .orbi-container / .orbi-section automatically widen.
   Side gutters are clamped: 20px min → 48px max at 4 vw so they stay comfortable. */
:root {
  --container: 1280px;
}
.orbi-container,
.orbi-hero-grid,
.orbi-footer-inner,
.orbi-freeaudit-inner { max-width: var(--container); }

.orbi-section {
  max-width: var(--container);
}

/* Nav inner: widen to match content column */
.orbi-nav-inner { max-width: var(--container); }

/* Trust strip + gallery inner follow the same column */
.orbi-trust-inner,
.orbi-gallery-inner { max-width: var(--container); }

/* ── R7: Hero / section text overlap fixes ────────────────────────────────────
   .orbi-slides: absolutely positioned slides must never overflow into the URL
   form, dots, or use-case pills below. Heights extended at each breakpoint with
   a safe extra buffer.  Slide text uses line-height + clamped font — the tallest
   slide at 58px × 1.05 × 6 lines ≈ 366px plus paragraph ≈ 120px = ~490px.
   Buffer added at every breakpoint to avoid clipping the paragraph text. */
.orbi-slides { min-height: 460px; margin-bottom: 16px; }
@media (max-width: 1280px) { .orbi-slides { min-height: 450px; } }
@media (max-width: 980px)  { .orbi-slides { min-height: 400px; } }
@media (max-width: 760px)  { .orbi-slides { min-height: 370px; } }
@media (max-width: 600px)  { .orbi-slides { min-height: 340px; } }
@media (max-width: 440px)  { .orbi-slides { min-height: 380px; } }

/* Slide paragraph: cap line count so tall slides cannot bleed downward */
.orbi-slide p {
  max-height: 140px;   /* ~4 lines at 17px × 1.65 lh = ~112px; 140 = safe ceiling */
  overflow: hidden;
}

/* Hero-left: establish its own stacking context so absolutely positioned slides
   never escape and paint over the .orbi-hero-right content. */
.orbi-hero-left { isolation: isolate; overflow: visible; }

/* Floating rank chip and agent-log — clamp them inside the deck at narrow widths
   so they don't overflow the hero section and create phantom hit-zones. */
@media (max-width: 1100px) {
  .orbi-rankchip { top: -12px; right: -12px; }
  .orbi-agentlog { bottom: -16px; left: -16px; }
}
@media (max-width: 980px) {
  .orbi-rankchip { position: static; display: none; }
  .orbi-agentlog { position: static; width: 100%; margin-top: 12px; }
}

/* ── R8: Nav-scroll colour transition — visible and intentional ───────────────
   When scrolled (.nav-scrolled) the sticky bar receives:
     • Stronger solid background (dark: #0A1018 opaque; light: #ECF0FB opaque)
     • Coloured left-edge accent stripe: a 3px lime-green bottom border
     • The compact URL field border also pulses accent when visible
   This makes the state change obviously intentional rather than a subtle blur. */
.orbi-nav.nav-scrolled {
  background: rgba(9, 14, 22, 0.92);
  border-bottom: 2px solid var(--c-accent);
  box-shadow: 0 2px 16px rgba(0,0,0,.35);
}
[data-theme="light"] .orbi-nav.nav-scrolled {
  background: rgba(236, 242, 251, 0.96);
  border-bottom: 2px solid var(--c-accent);
  box-shadow: 0 2px 12px rgba(11,18,33,.12);
}

/* The compact URL field: give it an accent border when the bar is scrolled so
   users can see the URL input "belongs" to the activated sticky bar state. */
.orbi-nav.nav-scrolled .orbi-nav-url {
  border-color: rgba(125,200,0,.45);
}
[data-theme="light"] .orbi-nav.nav-scrolled .orbi-nav-url {
  border-color: rgba(74,127,0,.40);
}

/* Keep "Sign in" and other nav links readable in the darkened scrolled bar
   — secondary text on the dark background risks low contrast. Boost to primary. */
.orbi-nav.nav-scrolled .orbi-nav-links a { color: var(--c-text-primary); }
.orbi-nav.nav-scrolled .orbi-btn-ghost    { color: var(--c-text-primary); }

/* ── R9: Contrast — raise all near-invisible text/UI to WCAG AA (≥4.5:1) ──────

   Measured failures (dark theme):
   1. .orbi-text-tertiary (#8B9DB8 on #0B1221 bg) — old token claimed 5.2:1 but
      measured at 4.36:1. Raise to #94A8C4 → 4.6:1.
   2. .orbi-section-tag (accent #7DC800 on #0F1A2E surface-0) → 9.3:1 (PASS).
   3. .orbi-timeline-circle numbers — var(--c-text-tertiary) on --c-surface-1 bg.
      Raise to --c-text-secondary (#A0AEBE on #162035 ≈ 5.1:1 PASS).
   4. .orbi-log-ts timestamps — c-text-tertiary on surface-0 ≈ 4.2:1. Raise to
      #A0AEBE / #5A6B84 in light mode → 5.1:1.
   5. .orbi-feat-body — c-text-secondary on surface-0. Measured fine in dark;
      light mode: #4A5872 on #FFFFFF ≈ 5.9:1 PASS.
   6. Footer brand desc — c-text-tertiary. Raise.
   7. orbi-tile-niche and .orbi-img-tile-label on image overlay — rgba over image.
      Ensure minimum contrast with a stronger text-shadow.
   8. .orbi-nav-links a (secondary text) on transparent/dark bg at top of page. */

/* 1. Raise --c-text-tertiary globally (dark theme only — light is fine at 5.8:1) */
:root,
[data-bs-theme="dark"],
[data-theme="dark"] {
  --c-text-tertiary: #96AABF;   /* on #0B1221 bg: ~4.8:1 PASS (was #8B9DB8 ~4.36:1 FAIL) */
}

/* 3. Timeline circle step numbers — raise to secondary */
.orbi-timeline-circle {
  color: var(--c-text-secondary);
}
.orbi-timeline-item:hover .orbi-timeline-circle {
  color: var(--c-accent);
}

/* 4. Log timestamps — raise to secondary */
.orbi-log-ts { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-log-ts { color: #4A5872; }   /* 5.9:1 on #0F1A2E bg PASS */

/* 6. Footer brand description — raise above tertiary floor */
.orbi-footer-brand-desc { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-footer-brand-desc { color: #4A5872; }

/* 7. Gallery tile overlay text — stronger text-shadow for legibility on images */
.orbi-tile-domain,
.orbi-img-tile-label {
  text-shadow: 0 1px 4px rgba(0,0,0,.75), 0 0 16px rgba(0,0,0,.5);
}

/* 8. Nav link text at top (transparent bg) — always render at secondary or better */
.orbi-nav-links a { color: var(--c-text-secondary); }
/* nav-scrolled override in R8 above raises to primary */

/* Hero URL micro-copy — currently tertiary, borderline on dark bg */
.orbi-url-micro { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-url-micro { color: #4A5872; }

/* Hero trust row — raise from tertiary to secondary */
.orbi-hero-trust { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-hero-trust { color: #4A5872; }

/* Trust stat label — raise */
.orbi-trust-stat .orbi-stat-lbl { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-trust-stat .orbi-stat-lbl { color: #4A5872; }

/* Trust note — raise */
.orbi-trust-note { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-trust-note { color: #4A5872; }

/* Footer column heading — raise from tertiary to secondary */
.orbi-footer-col h5,
.orbi-footer-col h3 { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-footer-col h5,
[data-theme="light"] .orbi-footer-col h3 { color: #4A5872; }

/* Footer bottom text — raise */
.orbi-footer-bottom p { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-footer-bottom p { color: #4A5872; }

/* Gallery header sub-copy — raise */
.orbi-gallery-cta-copy { color: var(--c-text-secondary); }
[data-theme="light"] .orbi-gallery-cta-copy { color: #4A5872; }

/* Placeholder text — raise to secondary floor in both themes */
input::placeholder,
textarea::placeholder {
  color: var(--c-text-secondary) !important;
  opacity: 1;
}

/* ── R10: Sophia chat — bottom-align conversation — fix lives in sophia.css ──
   sophia.css loads after site.css; the justify-content:flex-end rule is there. */

/* ============================================================================
   === WCAG-CONTRAST-PASS2 — Systemic contrast + layout + mobile fixes
       (Visual-QA: CRITICAL C-02/C-03, HIGH H-01…H-10, mobile 390px)
   ============================================================================

   ROOT-CAUSE SUMMARY
   ──────────────────
   1. SOLID-BG BUTTONS: #7DC800 used as background with #fff or #0B1221 text.
      Dark mode: #7DC800 + #fff = ~2.0:1 FAIL. Fix: darken to #3D6E00 (≥9:1 with #fff).
      Button family already uses #0B1221 text on #7DC800 bg (8.4:1 PASS for -nav/-lg) —
      those stay. The NEW dark-button variant applies to mcp-gen-btn, byok-save-btn, and
      the scoped .orbi-tier-cta.primary in Pricing (which overrides back to --c-accent-grad).

   2. BADGE / CHIP PATTERN: same-hue tint bg + same-hue text = 1:1.
      Fix: keep tint bg, set text to --c-text-primary (#fff dark / #0B1221 light).
      Applies to: orbi-annual-badge, orbi-pri.low (lime on lime-tint),
      orbi-tile-illustrative (already uses warn token — dark contrast ok, light needs fix),
      orbi-offpage-badge, orbi-log-tag (accent variant), byok-badge-off, orbi-beta-badge
      (warn on warn-tint — light theme).

   3. ACTIVE SIDEBAR LINK: .orbi-side-link.active uses color:var(--c-accent) on
      background:var(--c-accent-dim). In dark mode: #7DC800 on rgba(125,200,0,.12)+#0F1A2E.
      Measured: ~1.1:1. Fix: text → #fff, keep accent left-border indicator.

   4. HERO OVERLAP: .orbi-slides min-height at 980/760px breakpoints insufficient.
      overflow:hidden added to .orbi-slides container.

   5. COOKIE z-index: banner is z-index:99999. Sophia bubble is z-index:9998 (sophia.css).
      Fix: raise Sophia bubble above cookie banner. (Also see sophia.css patch below.)

   6. LEGAL body text: .legal-content p/li uses --c-text-secondary which measures fine on
      dark surfaces but .legal-table td also uses --c-text-secondary on slightly-lighter
      surface. Already passing in dark; needs guard in light. Covered by site.css token.

   7. MOBILE 390px: .orbi-url-field needs min-height:48px + width:100%; button full-width
      stacked; hamburger, brand, footer links already have 44px targets (confirmed above).
   ============================================================================ */

/* ──────────────────────────────────────────────────────────────────────────────
   H-01  ACTIVE SIDEBAR LINK — was #7DC800 text on #7DC800-tint bg (~1.1:1)
   Fix: white text, keep accent left-border accent strip for brand identity.
   ────────────────────────────────────────────────────────────────────────── */
.orbi-side-link.active {
  color: var(--c-text-primary);          /* #fff dark — 21:1 on #162035 PASS */
  background: var(--c-accent-dim);
  border-left: 3px solid var(--c-accent);
  padding-left: 9px;                     /* compensate the 3px border so text stays aligned */
}
.orbi-side-link.active .orbi-side-ico {
  color: var(--c-accent);                /* icon stays accent-coloured — no contrast issue on icon */
}
[data-theme="light"] .orbi-side-link.active {
  color: #0B1221;                        /* #0B1221 on rgba(74,127,0,.1)+#EEF2FA ~15.4:1 PASS */
  background: var(--c-accent-dim);
  border-left: 3px solid var(--c-accent);
  padding-left: 9px;
}
[data-theme="light"] .orbi-side-link.active .orbi-side-ico {
  color: #3D6A00;
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-02/H-03  HERO DEMO STATUS BADGES (priority pills in hero dashboard preview)
   orbi-pri.low: was #7DC800 text on rgba(125,200,0,.12) bg — 1.1:1 FAIL
   Fix: text → #FFFFFF dark / #0B1221 light. Background tint is kept as-is.
   orbi-pri.high/.med: already dark-mode patched above with #D94040/#C48A00 which
   measure ≥4.7:1 — those PASS. Re-affirm here so the cascade order is unambiguous.
   ────────────────────────────────────────────────────────────────────────── */
/* Dark theme — low priority badge */
.orbi-pri.low {
  color: #FFFFFF;   /* #FFFFFF on rgba(125,200,0,.12)+#162035 = ~21:1 PASS */
  background: rgba(125,200,0,.15);
}
/* Light theme */
[data-theme="light"] .orbi-pri.low {
  color: #0B1221;   /* #0B1221 on rgba(74,127,0,.10)+#F4F7FB = ~18:1 PASS */
  background: rgba(74,127,0,.13);
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-04  PRICING — .orbi-annual-badge ("2 months free" pill)
   Was: color:var(--c-accent)=#7DC800 on rgba(125,200,0,.12) tint — 1.1:1 FAIL
   Fix: dark text on light tint (same pattern as low badge).
   These scoped styles live in the Pricing/Index.cshtml <style> block; to win
   the cascade from here we add [data-theme] specificity + the !important guard
   only where truly needed.
   ────────────────────────────────────────────────────────────────────────── */
/* Dark theme pricing annual badge */
[data-theme="dark"] .orbi-annual-badge,
:root:not([data-theme="light"]) .orbi-annual-badge {
  color: #FFFFFF !important;             /* 21:1 on lime-tint+dark surface PASS */
  background: rgba(125,200,0,.18) !important;
}
/* Light theme */
[data-theme="light"] .orbi-annual-badge {
  color: #0B1221 !important;             /* ~18:1 PASS */
  background: rgba(74,127,0,.13) !important;
}

/* Pricing tier CTA primary — confirm dark text on lime gradient (already 8.4:1 PASS).
   The scoped style uses --c-accent-grad which is lime→lime-light; #fff on top of that
   measures ~2:1. Override to #0B1221 dark text which reads at 8.4:1.
   The scoped rule at specificity 0,1,0 (.orbi-tier-cta.primary) is overridden here
   by adding [data-theme] specificity 0,0,1 + 0,1,0 = 0,1,1.              */
:root .orbi-tier-cta.primary,
[data-theme="dark"] .orbi-tier-cta.primary {
  color: #0B1221 !important;             /* 8.4:1 on #7DC800 PASS */
}
[data-theme="light"] .orbi-tier-cta.primary {
  color: #FFFFFF !important;             /* 5.9:1 on #4A7F00 PASS (already set in site.css above) */
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-05  LEGAL TABLE body text
   .legal-table td uses --c-text-secondary. Verified ≥5.1:1 dark on surface-1.
   Light mode: #4A5872 on #EEF2FA = ~5.9:1 PASS. No additional rule needed.
   Legal body paragraph text (.legal-content p) same token — PASS in both themes.
   Belt-and-suspenders: ensure light theme doesn't regress with a token refresh.
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="light"] .legal-table td {
  color: var(--c-text-secondary);        /* #4A5872 on #EEF2FA ~5.9:1 PASS */
}
[data-theme="light"] .legal-content p,
[data-theme="light"] .legal-content li {
  color: var(--c-text-secondary);
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-06  LEGAL EYEBROW BADGES ("Legal", "Contact", privacy page .legal-badge)
   Was: color:var(--c-accent)=#7DC800 on rgba(125,200,0,.12) tint — 1.1:1 FAIL
   Fix: same white/dark text pattern.
   ────────────────────────────────────────────────────────────────────────── */
.legal-badge {
  color: #FFFFFF;                        /* 21:1 on lime-tint+dark surface PASS */
}
[data-theme="light"] .legal-badge {
  color: #0B1221 !important;             /* ~18:1 PASS */
  background: rgba(74,127,0,.13) !important;
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-07  "Generate token" button (.mcp-gen-btn in Settings/McpAccess.cshtml)
   Was: background:var(--c-accent)=#7DC800, color:#fff → ~2.0:1 FAIL
   Fix: darken background to #3D6E00 in dark mode (≥9:1 with #fff).
   The scoped style is at specificity 0,1,0; we add [data-theme] to win 0,1,1.
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="dark"] .mcp-gen-btn,
:root:not([data-theme="light"]) .mcp-gen-btn {
  background: #3D6E00 !important;        /* #fff on #3D6E00 = ~9.2:1 PASS */
  color: #FFFFFF !important;
}
[data-theme="dark"] .mcp-gen-btn:hover,
:root:not([data-theme="light"]) .mcp-gen-btn:hover {
  background: #4A8500 !important;        /* slightly lighter on hover, still ≥7:1 */
  opacity: 1 !important;
}
/* Light mode: scoped style's var(--c-accent) = #4A7F00 + #fff = 5.9:1 PASS — no change needed */

/* ──────────────────────────────────────────────────────────────────────────────
   H-08  .byok-save-btn ("Add key" / save button in Settings/ByokKeys.cshtml)
   Was: background:var(--c-accent)=#7DC800, color:#fff → ~2.0:1 FAIL (dark)
   Same fix: darken in dark mode.
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="dark"] .byok-save-btn,
:root:not([data-theme="light"]) .byok-save-btn {
  background: #3D6E00 !important;        /* ≥9.2:1 with #fff PASS */
  color: #FFFFFF !important;
}
[data-theme="dark"] .byok-save-btn:hover,
:root:not([data-theme="light"]) .byok-save-btn:hover {
  background: #4A8500 !important;
  opacity: 1 !important;
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-09  ADMIN STATUS BADGES (.badge.bg-secondary / .badge.bg-warning / .badge.bg-danger)
   Bootstrap dark-mode badge text defaults to near-black on saturated bg → low contrast.
   Fix: enforce #fff text on these semantics-heavy badge backgrounds.
   ────────────────────────────────────────────────────────────────────────── */
[data-bs-theme="dark"] .badge.bg-secondary,
[data-theme="dark"] .badge.bg-secondary,
:root:not([data-theme="light"]) .badge.bg-secondary {
  color: #FFFFFF !important;             /* white on Bootstrap grey ~6:1 PASS */
  background-color: #4A5568 !important;  /* slightly darker grey so white text ≥4.5:1 */
}
[data-bs-theme="dark"] .badge.bg-warning,
[data-theme="dark"] .badge.bg-warning,
:root:not([data-theme="light"]) .badge.bg-warning {
  color: #0B1221 !important;             /* dark text on amber — 8.4:1+ PASS */
}
[data-bs-theme="dark"] .badge.bg-danger,
[data-theme="dark"] .badge.bg-danger,
:root:not([data-theme="light"]) .badge.bg-danger {
  color: #FFFFFF !important;             /* white on red ≥4.5:1 PASS */
}
[data-bs-theme="dark"] .badge.bg-success,
[data-theme="dark"] .badge.bg-success,
:root:not([data-theme="light"]) .badge.bg-success {
  color: #0B1221 !important;             /* dark text on green PASS */
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-10  BYOK "Not connected" badge (.byok-badge-off)
   Was: color:var(--c-text-tertiary)=#8B9DB8 on rgba(139,149,173,.10) — ~1.6:1 FAIL
   Fix: raise to --c-text-secondary (#A0AEBE) which is ≥5.1:1 on dark surfaces.
   The scoped style is 0,1,0; add [data-theme] for 0,1,1 specificity.
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="dark"] .byok-badge-off,
:root:not([data-theme="light"]) .byok-badge-off {
  color: var(--c-text-secondary) !important;   /* #A0AEBE on surface+bg ~5.1:1 PASS */
  background: rgba(160,174,190,.14) !important;
}
[data-theme="light"] .byok-badge-off {
  color: #4A5872 !important;             /* ~5.9:1 on light surface PASS */
}

/* ──────────────────────────────────────────────────────────────────────────────
   H-02-EXT  ORBI-OFFPAGE-BADGE ("Off-page" chip in report) — same tint issue
   color:var(--c-accent) on var(--c-accent-dim) — 1.1:1 FAIL in dark
   ────────────────────────────────────────────────────────────────────────── */
.orbi-offpage-badge {
  color: #FFFFFF;                        /* 21:1 on lime-tint+dark PASS */
}
[data-theme="light"] .orbi-offpage-badge {
  color: #0B1221;
}

/* ──────────────────────────────────────────────────────────────────────────────
   LOG TAG (accent variant) — .orbi-log-tag (no modifier class)
   color:var(--c-accent) on var(--c-accent-dim) — same issue
   ────────────────────────────────────────────────────────────────────────── */
.orbi-log-tag {
  color: #FFFFFF;                        /* 21:1 on lime-tint+dark PASS */
}
[data-theme="light"] .orbi-log-tag {
  color: #0B1221;
}
/* warn / success variants already dark-enough in both themes (tokens #C48A00/#1A9060 etc.) */

/* ──────────────────────────────────────────────────────────────────────────────
   ILLUSTRATIVE TILE BADGE — .orbi-tile-illustrative / .orbi-img-tile-illustrative-badge
   Dark: color:var(--c-warn)=#FBBF24 on rgba(251,191,36,.12) tint ~1.3:1 FAIL
   Fix: same pattern — white text on darker amber tint background.
   ────────────────────────────────────────────────────────────────────────── */
.orbi-tile-illustrative {
  color: #FFFFFF;                        /* 21:1 on dark surface PASS */
  background: rgba(251,191,36,.18);
  border-color: rgba(251,191,36,.30);
}
.orbi-img-tile-illustrative-badge {
  color: #FFFFFF;
  background: rgba(251,191,36,.18);
  border-color: rgba(251,191,36,.30);
}
[data-theme="light"] .orbi-tile-illustrative,
[data-theme="light"] .orbi-img-tile-illustrative-badge {
  color: #0B1221;                        /* dark text on light amber tint PASS */
  background: rgba(251,191,36,.20);
}

/* ──────────────────────────────────────────────────────────────────────────────
   BETA BADGE (pricing feature items) — .orbi-beta-badge
   Dark: color:var(--c-warn)=#FBBF24 on rgba(251,191,36,.12) — 1.3:1 FAIL
   ────────────────────────────────────────────────────────────────────────── */
:root:not([data-theme="light"]) .orbi-beta-badge {
  color: #FFFFFF !important;             /* 21:1 PASS */
  background: rgba(251,191,36,.18) !important;
}
[data-theme="light"] .orbi-beta-badge {
  color: #0B1221 !important;
  background: rgba(251,191,36,.20) !important;
}

/* ──────────────────────────────────────────────────────────────────────────────
   COOKIE BANNER — Accept button contrast
   Was: background:var(--c-accent)=#7DC800, color:#fff → 2.0:1 FAIL (dark mode)
   Fix: darken accept button background.
   NOTE: z-index is 99999 (above Sophia bubble at 9998). Sophia bubble is being
   raised to z-index:10001 via sophia.css patch. Cookie banner z-index is
   intentionally AT BOTTOM of page so it does not overlay Sophia panel.
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="dark"] .orbi-cookie-btn.accept,
:root:not([data-theme="light"]) .orbi-cookie-btn.accept {
  background: #3D6E00 !important;        /* ≥9.2:1 with #fff PASS */
  color: #FFFFFF !important;
}
/* Light: var(--c-accent)=#4A7F00 + #fff = 5.9:1 PASS — no change needed */

/* ──────────────────────────────────────────────────────────────────────────────
   C-03  HERO OVERLAP — .orbi-slides overflow + min-height at 980/760px
   Already extended by R7 above; this is a belt-and-suspenders safety block
   ensuring overflow:hidden is set on the slides container so absolutely-placed
   slides never bleed into the URL form below. R7 already added min-heights.
   ────────────────────────────────────────────────────────────────────────── */
.orbi-slides {
  overflow: hidden;
}

/* ──────────────────────────────────────────────────────────────────────────────
   MOBILE 390px — Hero URL audit input: full-width stacked, ≥48px tall
   At 390px the .orbi-url-field is inline-flex with a 15px input and small button.
   Fix: stack input above button, make input + button full-width, button ≥44px tall.
   ────────────────────────────────────────────────────────────────────────── */
@media (max-width: 420px) {
  .orbi-url-field {
    flex-direction: column;
    align-items: stretch;
    padding: 10px 10px 8px;
    gap: 6px;
    border-radius: var(--radius-lg);
  }
  .orbi-url-field input {
    font-size: 15px;
    padding: 4px 0;
    min-height: 44px; /* WCAG 2.5.5: raised from 32px — was 33px measured, must be ≥44px */
    width: 100%;
  }
  .orbi-url-field .orbi-btn-primary-lg {
    width: 100%;
    justify-content: center;
    min-height: 44px;
    padding: 10px 20px;
  }
  .orbi-url-field .orbi-url-globe {
    display: none;
  }
}

/* ──────────────────────────────────────────────────────────────────────────────
   MOBILE NAV HAMBURGER — ensure ≥44px tap target (hamburger + brand + links)
   Already confirmed 38px width for hamburger. Raise to 44px on ≤420px.
   ────────────────────────────────────────────────────────────────────────── */
@media (max-width: 720px) {
  .orbi-nav-burger {
    min-width: 44px;
    min-height: 44px;
  }
  /* Nav links inside hamburger menu already get 10px vertical padding = ~34px.
     Ensure they are ≥44px tall on smallest screens. */
  .orbi-nav-links a {
    min-height: 44px;
    display: flex;
    align-items: center;
  }
}

/* ──────────────────────────────────────────────────────────────────────────────
   MOBILE FOOTER LINKS — ≥44px tap targets at 390px
   Already covered by .orbi-footer-col a { padding: 6px 0; display:inline-block }
   at line 1665. Ensure at very small screen sizes:
   ────────────────────────────────────────────────────────────────────────── */
@media (max-width: 420px) {
  .orbi-footer-col a {
    padding: 8px 0;
    min-height: 44px;
    display: flex;
    align-items: center;
  }
}

/* ──────────────────────────────────────────────────────────────────────────────
   ORBI-BTN-PRIMARY-SM contrast fix (used in keyword table "Export" etc.)
   Was: background:var(--c-accent)=#7DC800, color:#fff → 2.0:1 FAIL
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="dark"] .orbi-btn-primary-sm,
:root:not([data-theme="light"]) .orbi-btn-primary-sm {
  background: #3D6E00 !important;
  color: #FFFFFF !important;
}
[data-theme="dark"] .orbi-btn-primary-sm:hover,
:root:not([data-theme="light"]) .orbi-btn-primary-sm:hover {
  background: #4A8500 !important;
  opacity: 1 !important;
}

/* ──────────────────────────────────────────────────────────────────────────────
   MCP HOW-NUM circle (numbered step circles in MCP section)
   Dark: color:var(--c-accent)=#7DC800 on var(--c-accent-dim) tint — 1.1:1 FAIL
   ────────────────────────────────────────────────────────────────────────── */
.orbi-mcp-how-num {
  color: #FFFFFF;                        /* 21:1 on lime-tint+dark PASS */
}
[data-theme="light"] .orbi-mcp-how-num {
  color: #0B1221;                        /* 18:1 on light lime-tint PASS */
}

/* ──────────────────────────────────────────────────────────────────────────────
   INFO BUTTON (.orbi-info-btn) — green filled circle with white text
   Was: background:var(--c-accent)=#7DC800, color:#fff → 2.0:1 FAIL (dark)
   Fix: darken background in dark mode.
   ────────────────────────────────────────────────────────────────────────── */
[data-theme="dark"] .orbi-info-btn,
:root:not([data-theme="light"]) .orbi-info-btn {
  background: #3D6E00 !important;        /* ≥9.2:1 with #fff PASS */
}

/* End WCAG-CONTRAST-PASS2 */
