/* MetaGem shared shell: tokens, base, header, footer.
   Page-specific styles stay in each page's own <style> block. */

:root{
  --purple:#501AC8;
  --purple-glow:#7B43F0;
  --coral:#CF6679;
  --bg:#07070C;
  --bg-2:#0D0B16;
  --surface:#12101D;
  --border:#211C33;
  --text:#FFFFFF;
  --muted:#A8A4B8;
  --radius:14px;
  --maxw:1180px;
  /* Unified type scale (2026-07-17): one default for comparable text across the site. */
  --fs-body:17px;
  --fs-bullet:16px;
  --fs-card-title:18px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;background:var(--bg)}
body{
  font-family:"Plus Jakarta Sans",sans-serif;
  font-size:var(--fs-body);
  background:var(--bg);
  color:var(--text);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

/* ---------- Page background ----------
   Replaced the AI-generated wallpaper (hero-bg.jpg, 72.5 KB, fixed) on
   2026-07-17. Structure borrowed from hatchworks.com: one long gradient running
   the full document height, climbing as you scroll, falling back to near-black
   for the footer. Their version is a 24.6 KB JPEG and is not animated at all —
   the motion people think they see is just scroll. This is CSS: zero bytes, no
   request, crisp at any width. Their cyan is theirs; this is #501AC8, ours.

   The stops look arbitrary because they are baked. They came from a tuning pass
   where the ramp was driven by one --peak variable (fraction of #501AC8 mixed
   against #07070C) with a live slider; Vlad landed on 42% and these are that
   ramp resolved. To retune, don't nudge individual stops — restore the
   color-mix version from git history, move the slider, re-bake.

   html{background} above is load-bearing: without it the browser propagates
   body's background to the canvas and sizes it to the VIEWPORT, so
   background-size:100% 100% would mean "one screen" and the long ramp would
   collapse into a repeating screenful. */
body.bg-aurora,
body.single-post{
  background:
    /* off-centre blooms so it doesn't read as a symmetrical effect */
    radial-gradient(1300px 800px at 82% 30%, rgba(123,67,240,.125), transparent 60%),
    radial-gradient(1000px 700px at 8% 55%, rgba(80,26,200,.118), transparent 62%),
    radial-gradient(1600px 900px at 65% 78%, rgba(123,67,240,.14), transparent 64%),
    /* the long climb: black -> deep purple band near the bottom -> black footer */
    linear-gradient(180deg,
      #07070C 0%,
      #090711 20%,
      #0C0819 35%,
      #110A25 50%,
      #170B35 62%,
      #1F0D4A 74%,
      #260F5B 84%,
      #100924 93%,
      #07070C 100%);
  background-repeat:no-repeat;
  background-size:100% 100%;
  background-attachment:scroll;
}

/* Grain. Dark purple ramps band visibly on 6-bit and cheap panels. ~250 bytes
   inline, no request, kills the stepping. */
body.bg-aurora::before,
body.single-post::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:-1;
  pointer-events:none;
  opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* Hero glow. Animates ONLY transform + opacity on a composited layer, so it
   stays on the GPU and never triggers layout or paint. Animating gradient stops
   or background-position instead would repaint a full-screen surface every frame
   and jank the scroll. */
body.bg-aurora .hero{
  position:relative;
  overflow:hidden;
  isolation:isolate;
}
body.bg-aurora .hero::after{
  content:"";
  position:absolute;
  inset:-35%;
  z-index:0;
  pointer-events:none;
  background:
    radial-gradient(50% 50% at 26% 30%, rgba(123,67,240,.55), transparent 62%),
    radial-gradient(46% 46% at 74% 66%, rgba(80,26,200,.48), transparent 64%),
    radial-gradient(38% 38% at 52% 20%, rgba(160,110,255,.30), transparent 60%);
  will-change:transform,opacity;
  animation:aurora-drift 20s ease-in-out infinite alternate;
}
/* Lift hero content above the glow, or the ::after paints last and washes over
   the headline and buttons. */
body.bg-aurora .hero > .wrap,
body.bg-aurora .hero > .hero-inner{
  position:relative;
  z-index:1;
}
@keyframes aurora-drift{
  0%  {transform:translate3d(-6%,-4%,0) scale(1);    opacity:.55}
  50% {transform:translate3d(6%,4%,0)   scale(1.25); opacity:1}
  100%{transform:translate3d(-4%,6%,0)  scale(1.08); opacity:.62}
}
/* Drifting backgrounds are a genuine vestibular trigger. The static ramp carries
   the design without this. */
@media(prefers-reduced-motion:reduce){
  body.bg-aurora .hero::after{animation:none}
}

a{color:inherit;text-decoration:none}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}
h1,h2,h3{font-weight:800;line-height:1.1;letter-spacing:-.01em}
.pill{
  display:inline-flex;align-items:center;gap:12px;
  color:#b79bf2;font-size:12px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;
}
.pill::before{
  content:"";width:26px;height:2px;border-radius:2px;
  background:var(--coral);display:inline-block;flex:none;
}
.btn{
  display:inline-block;background:var(--purple);color:#fff;font-weight:700;
  padding:15px 34px;border-radius:40px;transition:transform .15s,box-shadow .2s;
  box-shadow:0 8px 30px rgba(80,26,200,.45);
}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 38px rgba(80,26,200,.6)}

/* ---------- Header ---------- */
header.site{
  position:sticky;top:0;z-index:50;
  background:rgba(7,7,12,.82);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--border);
}
.nav{display:flex;align-items:center;justify-content:space-between;height:74px}
.logo{display:flex;align-items:center;gap:0;font-weight:800;font-size:22px;color:#fff}
.logo .gem{
  width:30px;height:30px;border-radius:7px;margin-right:10px;
  background:conic-gradient(from 140deg,var(--purple),var(--purple-glow),var(--coral),var(--purple));
  box-shadow:0 0 18px rgba(123,67,240,.6);
}
.logo b{color:#fff}
.logo img{height:48px;width:auto;display:block}
.menu{display:flex;gap:20px;list-style:none}
.menu a{
  font-size:13px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;
  color:#fff;transition:color .2s;padding:6px 0;position:relative;
}
.menu a:hover{color:var(--coral)}
.menu a.active{color:#f6b64e}
.menu a.active::after{
  content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;background:#f6b64e;
}
/* branded keyboard focus ring (suppresses the raw browser box on mouse click, shows for keyboard) */
.menu a:focus{outline:none}
.menu a:focus-visible{outline:2px solid var(--purple-glow);outline-offset:3px;border-radius:4px}
.burger{display:none;background:none;border:0;color:#fff;font-size:26px;cursor:pointer}

/* ---------- Footer ---------- */
footer.site{background:var(--bg-2);border-top:1px solid var(--border);padding:70px 0 30px}
.fgrid{display:grid;grid-template-columns:1.8fr 1fr 1fr;gap:40px}
.fgrid h4{font-size:16px;margin-bottom:18px}
.fgrid p{color:var(--muted);font-size:14px}
.fgrid ul{list-style:none}
.fgrid li{margin-bottom:10px}
.fgrid li a{color:#fff;font-size:14px}
.fgrid li a:hover{color:#fff}
/* ---------- Footer newsletter band ----------
   2026-07-17. Was a big centred section on 7 pages (.nlband) and, before that, a
   cramped column inside the footer (.nl). Now one horizontal band at the top of
   the footer, so it appears wherever the footer does — the hatchworks.com shape:
   pitch on the left, form on the right, columns underneath.

   Restrained on purpose. The page background now carries the purple, so a heavy
   purple card here fights it rather than adding to it. */
.fnl{
  display:grid;
  grid-template-columns:1.15fr 1fr;
  gap:48px;
  align-items:center;
  margin-bottom:56px;
  padding:32px 36px;
  border:1px solid var(--border);
  border-radius:18px;
  background:linear-gradient(135deg,rgba(80,26,200,.16),rgba(123,67,240,.04));
}
.fnl h2{font-size:clamp(20px,2.2vw,26px);line-height:1.25;margin-bottom:8px}
.fnl .fnl-copy p{color:var(--muted);font-size:14px;max-width:54ch;margin:0}
.fnl-act{display:flex;justify-content:flex-end;align-items:center}
.fnl-act .btn{white-space:nowrap}
/* .fnl newsletter form retired 2026-07-31: the band now carries the Request-a-call CTA */
.fnl-note{flex-basis:100%;margin:0;color:var(--muted);font-size:12px}

.copy{border-top:1px solid var(--border);margin-top:50px;padding-top:24px;display:flex;justify-content:space-between;color:var(--muted);font-size:13px}

/* ---------- Pre-footer CTA (split, with trust chips) ---------- */
.homecta{max-width:var(--maxw);margin:0 auto;display:grid;grid-template-columns:1.5fr 1fr;gap:22px 44px;align-items:center;padding:44px 44px;border:1px solid var(--border);border-radius:20px;background:var(--surface);position:relative;overflow:hidden}
.homecta::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,var(--purple),var(--coral))}
.homecta h2{font-size:clamp(24px,3vw,34px);margin-bottom:12px}
.homecta p{color:var(--muted);font-size:var(--fs-body);margin:0}
.homecta .act{display:flex;justify-content:flex-end;align-items:center}
.homecta .chips{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:12px 26px;margin-top:4px}
.homecta .chips span{color:#cfc9e0;font-size:14px;font-weight:600;display:inline-flex;align-items:center;gap:9px}
.homecta .chips span::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--coral);flex:none}

@media(max-width:900px){
  .fgrid{grid-template-columns:1fr 1fr}
  /* stack the band before the two columns get too narrow for an inline form */
  .fnl{grid-template-columns:1fr;gap:24px;padding:28px 26px;margin-bottom:44px}
  .fnl-act{justify-content:flex-start}
}
@media(max-width:700px){
  .homecta{grid-template-columns:1fr;gap:24px 0;padding:38px 28px}
}
@media(max-width:600px){
  .fgrid{grid-template-columns:1fr}
  .copy{flex-direction:column;gap:10px}
  .fnl{padding:24px 20px}
}

nav.primary{display:flex}

@media(max-width:1120px){
  .burger{display:block}
  nav.primary{
    display:none;position:absolute;top:74px;left:0;right:0;
    background:rgba(7,7,12,.98);border-bottom:1px solid var(--border);
    padding:10px 0 16px;max-height:calc(100vh - 74px);overflow:auto;
  }
  header.site.nav-open nav.primary{display:block}
  .menu{flex-direction:column;gap:0;padding:0 24px}
  .menu>li{border-bottom:1px solid var(--border)}
  .menu>li:last-child{border-bottom:0}
  .menu>li>a{display:block;padding:14px 0}
  }

/* ---------- WordPress blog (Hello Elementor + Theme Builder single post) ---------- */
.elementor-widget-theme-post-title,
.elementor-widget-theme-post-content{max-width:760px !important;margin-left:auto !important;margin-right:auto !important}
.elementor-widget-theme-post-title{padding-top:40px}
.elementor-widget-theme-post-title h1{font-size:clamp(30px,4.4vw,48px);line-height:1.14;color:#fff;margin-bottom:6px}
.elementor-widget-theme-post-content{font-size:17px;line-height:1.75;color:#d7d4e2;padding-bottom:48px}
.elementor-widget-theme-post-content h2{font-size:28px;color:#fff;margin:42px 0 16px}
.elementor-widget-theme-post-content h3{font-size:21px;color:#fff;margin:32px 0 12px}
.elementor-widget-theme-post-content p{margin-bottom:24px}
.elementor-widget-theme-post-content a{color:var(--coral);text-decoration:underline;text-underline-offset:3px}
.elementor-widget-theme-post-content ul,
.elementor-widget-theme-post-content ol{margin:0 0 24px 22px}
.elementor-widget-theme-post-content li{margin-bottom:9px}
.elementor-widget-theme-post-content blockquote{border-left:3px solid var(--purple);background:var(--surface);margin:0 0 26px;padding:20px 26px;border-radius:0 12px 12px 0;color:#fff;font-style:italic}
.elementor-widget-theme-post-content img{border-radius:14px;border:1px solid var(--border);max-width:100%;height:auto}

/* ---------- WordPress blog archive (/articles) cards ---------- */
.elementor-posts .elementor-post{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:transform .2s,border-color .2s,box-shadow .2s}
.elementor-posts .elementor-post:hover{transform:translateY(-6px);border-color:var(--purple);box-shadow:0 16px 44px rgba(80,26,200,.32)}
.elementor-post__text{padding:18px 20px 22px}
.elementor-post__title{font-size:18px;line-height:1.3;margin-bottom:8px}
.elementor-post__title a{color:#fff}
.elementor-post__title a:hover{color:var(--coral)}
.elementor-post__meta-data{color:var(--muted);font-size:12px;margin-bottom:10px}
.elementor-post__excerpt p{color:var(--muted);font-size:14px;line-height:1.55}
.elementor-post__read-more{color:var(--coral);font-weight:700;font-size:13px}
.elementor-post__read-more:hover{color:#fff}
/* Box the archive grid to the site content width (was full-bleed) */
.elementor-widget-archive-posts,
.elementor-widget-posts{max-width:1180px !important;margin-left:auto !important;margin-right:auto !important;padding-left:24px;padding-right:24px}
/* Force card title white + read-more coral over Elementor/Hello defaults */
.elementor-post__title a,
.elementor-post__title a:hover,
.elementor-post__title a:visited{color:#fff !important}
.elementor-post__read-more,
.elementor-post__read-more:visited{color:var(--coral) !important}
.elementor-post__read-more:hover{color:#fff !important}

/* ---------- Loop Grid archive cards (MetaGem Article Card loop item) ---------- */
.elementor-loop-container{gap:28px}
.mg-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:transform .2s,border-color .2s,box-shadow .2s}
.mg-card:hover{transform:translateY(-6px);border-color:var(--purple);box-shadow:0 16px 44px rgba(80,26,200,.32)}
/* Full-bleed featured image across the top of the card */
.mg-card>.elementor-widget-theme-post-featured-image img{display:block;width:100%;height:200px;object-fit:cover;border-radius:0}
/* Padded body holding chip, date, title, excerpt, byline */
.mg-card>.e-con{padding:16px 20px 22px !important}
/* Purple category chip above the title */
.mg-card .mg-chip .elementor-heading-title,
.mg-card .mg-chip .elementor-heading-title a{display:inline-block;background:var(--purple) !important;color:#fff !important;font-size:11px;font-weight:700;letter-spacing:.02em;text-transform:none !important;padding:5px 12px;border-radius:40px;text-decoration:none}
/* White post title */
.mg-card .elementor-widget-theme-post-title .elementor-heading-title,
.mg-card .elementor-widget-theme-post-title a{color:#fff !important}
.mg-card .elementor-widget-theme-post-title .elementor-heading-title{font-size:19px;line-height:1.3}
/* Muted plain headings (fallback; chip/date/readmore/title are styled below) */
.mg-card .elementor-widget-heading:not(.mg-chip):not(.elementor-widget-theme-post-title):not(.mg-date):not(.mg-readmore) .elementor-heading-title{color:var(--muted) !important;font-size:12px;font-weight:600}
/* Muted excerpt */
.mg-card .elementor-widget-theme-post-excerpt{color:var(--muted);font-size:14px;line-height:1.55}
/* Date pill overlaid on the bottom-left of the featured image */
.mg-card{position:relative}
.mg-card .mg-date{position:absolute;left:16px;top:-40px;z-index:2;margin:0}
.mg-card .mg-date .elementor-heading-title{display:inline-block;background:rgba(80,26,200,.92);color:#fff !important;font-size:11px;font-weight:700;letter-spacing:.02em;padding:5px 11px;border-radius:40px}
/* Coral Read More CTA */
.mg-card .mg-readmore{margin-top:12px}
.mg-card .mg-readmore .elementor-heading-title{color:var(--coral) !important;font-size:13px;font-weight:700;text-transform:none;letter-spacing:.02em}

/* ---------- Single post: featured-image hero ----------
   The page background for WordPress posts is handled by the body.single-post
   selector in the page-background block near the top of this file. It used to
   carry its own copy of the hero-bg.jpg wallpaper here; that was removed with
   the wallpaper on 2026-07-17 so posts and static pages share one background.
   (WordPress loads this stylesheet through the Elementor header widget in
   template 2495 — see the MetaGem canon on version-pinning shell.css in BOTH
   places when it changes.) */
.mg-post-hero{max-width:760px !important;margin:36px auto 0 !important}
.mg-post-hero img{width:100%;height:auto;border-radius:14px;border:1px solid var(--border);display:block}
.mg-post-hero figure,.mg-post-hero .elementor-widget-container{margin:0}

/* ---------- Nav v2 (2026-07-05; dropdowns removed 2026-07-31) ---------- */
.nav-cta{padding:11px 20px;font-size:13px;letter-spacing:.04em;white-space:nowrap;margin-left:18px}
.hero-microcopy{color:var(--muted);font-size:13.5px;margin-top:14px;font-style:italic}
@media(max-width:600px){.nav-cta{display:none}}

/* nav v2.1: single-line top labels */
.menu > li > a{white-space:nowrap}

/* nav v2.2: unified Resources dropdown */

/* nav v2.3: header contents span wider than the content column */
header.site .wrap{max-width:1600px}

/* nav v2.4: single-column dropdowns everywhere */

/* nav v2.5 (2026-07-05): larger brighter labels, lift hover, featured frames removed */
.menu > li > a{font-size:13px;font-weight:700;color:#fff;display:inline-block;transition:transform .15s,color .2s}
.menu > li > a:hover{transform:translateY(-2px);color:#fff}


/* NAV DROPDOWN STANDARD retired 2026-07-31: the nav has no dropdowns anymore.
   Five flat links + CTA; burger under 1120px. History: see the 2026-07-20 Master Log. */
/* Services mega-menu retired 2026-07-31 (pillar merge): three flat pillar links replaced the panel. */
/* Grafted-section anchors (2026-07-31 pillar merge): land jumps below the 74px sticky header */
.graft-anchor{scroll-margin-top:96px}

