/* ===========================================================================
   Novetest — ailovestesting.com
   Design-faithful stylesheet.

   The page markup keeps the design's original inline styles verbatim so the
   visuals match the approved draft pixel-for-pixel. This stylesheet adds ONLY
   what inline styles cannot express:
     - base reset & web-font wiring
     - :hover / :focus states (the draft used non-standard style-hover/-focus)
     - keyframes & reduced-motion
     - the responsive (mobile-first) collapse of the draft's fixed grids
   Responsive rules use !important so they win over the inline grid styles.
   =========================================================================== */

*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;}
body{
  margin:0;background:#fafaf7;color:#16181a;
  font-family:-apple-system,'Helvetica Neue',Helvetica,Arial,sans-serif;
  min-height:100vh;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
a{text-decoration:none;color:inherit;}
img,svg{max-width:100%;}
::selection{background:rgba(14,159,110,0.22);}
@keyframes nvtblink{0%,49%{opacity:1}50%,100%{opacity:0}}

/* Skip link (a11y) */
.nv-skip{
  position:absolute;left:-9999px;top:0;z-index:100;
  background:#16181a;color:#fafaf7;padding:10px 16px;border-radius:0 0 8px 0;font-size:14px;
}
.nv-skip:focus{left:0;}

/* Visible keyboard focus (a11y) */
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{
  outline:2px solid #0e9f6e;outline-offset:2px;border-radius:4px;
}

/* --- hover / focus helpers (replace the draft's style-hover / style-focus) --- */
.nv-btn-dark{transition:background .15s ease;}
.nv-btn-dark:hover{background:#000 !important;}
.nv-btn-outline{transition:border-color .15s ease;}
.nv-btn-outline:hover{border-color:rgba(0,0,0,0.35) !important;}
/* green-hero buttons (Main hero sits on an emerald background) */
.nv-hero-cta{transition:background .15s ease,transform .15s ease;box-shadow:0 10px 26px -12px rgba(0,0,0,0.45);}
.nv-hero-cta:hover{background:#eafff5 !important;}
.nv-hero-ghost{transition:border-color .15s ease,background .15s ease;}
.nv-hero-ghost:hover{border-color:#ffffff !important;background:rgba(255,255,255,0.10) !important;}
/* mint CTA on the dark gradient sections */
.nv-btn-mint{transition:background .15s ease;}
.nv-btn-mint:hover{background:#5ef0a8 !important;}
.nv-ghost-link{transition:opacity .15s ease,color .15s ease;}
.nv-ghost-link:hover{opacity:.72;}
.nv-star{transition:border-color .15s ease;}
.nv-star:hover{border-color:rgba(0,0,0,0.3) !important;}
.nv-install{transition:border-color .15s ease;}
.nv-install:hover{border-color:rgba(14,159,110,0.6) !important;}
.nv-copy-btn{transition:background .15s ease;}
.nv-copy-btn:hover{background:#1d2022 !important;}
.nv-menu-item{transition:background .12s ease;}
.nv-menu-item:hover{background:#f3f3ee;}
.nv-doc-link{transition:background .12s ease;}
.nv-doc-link:hover{background:#f3f3ee;}
.nv-cta-readlink{transition:color .15s ease;}
.nv-cta-readlink:hover{color:#cfd2d4 !important;}
.nv-input{transition:border-color .15s ease;}
.nv-input:focus{border-color:#0e9f6e !important;}
.nv-tab{transition:color .15s ease;}
.nv-tab:hover{color:#111315 !important;}
.nv-blog-link{transition:opacity .15s ease;}
.nv-blog-link:hover{opacity:.72;}

/* --- nav dropdowns (hover, plus click-toggle wired up in app.js) --- */
.nv-menu-toggle{display:none;}
.nv-dropdown-wrap{position:relative;}
.nv-dropdown{display:none;}
.nv-dropdown-wrap:hover .nv-dropdown,
.nv-dropdown-wrap.open .nv-dropdown{display:block;}
/* invisible bridge spanning the gap between the tab and the menu, so a hover
   doesn't drop while the pointer travels down to the items */
.nv-dropdown::before{content:"";position:absolute;left:0;right:0;top:-12px;height:12px;}
.nv-dropdown-toggle .nv-caret{transition:transform .15s ease;}
.nv-dropdown-wrap.open .nv-caret{transform:rotate(180deg);}
/* "soon" entries are placeholders — visible, but not interactive */
.nv-menu-item-soon{opacity:.6;}
.nv-menu-item-soon:hover{background:transparent;}

/* --- mobile menu panel --- */
.nv-mobile-menu{display:none;border-top:1px solid rgba(0,0,0,0.07);background:#fafaf7;}
.nv-mobile-menu.open{display:block;}
.nv-mobile-menu a{
  display:block;padding:13px 32px;font-size:15px;color:#16181a;
  border-bottom:1px solid rgba(0,0,0,0.05);font-weight:500;
}
.nv-mobile-menu a:hover{background:#f3f3ee;}
.nv-mobile-menu .nv-mobile-soon{
  display:flex;align-items:center;gap:8px;padding:13px 32px;font-size:15px;color:#9a9ea0;
  border-bottom:1px solid rgba(0,0,0,0.05);font-weight:500;cursor:default;
}

/* --- responsive collapse --- */
@media (max-width:920px){
  .nv-tabs{display:none !important;}
  .nv-nav-actions{display:none !important;}
  .nv-menu-toggle{display:inline-flex !important;}

  .nv-hero-grid{grid-template-columns:1fr !important;gap:40px !important;}
  .nv-grid-3{grid-template-columns:1fr !important;}
  .nv-grid-2{grid-template-columns:1fr !important;}
  .nv-results-grid{grid-template-columns:1fr !important;}
  .nv-docs-grid{grid-template-columns:1fr !important;}
  .nv-contact-grid{grid-template-columns:1fr !important;}
  .nv-grid-6{grid-template-columns:repeat(3,1fr) !important;}

  /* problem|breakthrough column headers make no sense once the grid is 1-col */
  .nv-pb-head{display:none !important;}

  .nv-docs-side{position:static !important;}

  .nv-h1{font-size:38px !important;}
  .nv-h1-lg{font-size:40px !important;}
  .nv-h2{font-size:27px !important;}
  .nv-vision{font-size:30px !important;}
}
@media (max-width:560px){
  .nv-grid-6{grid-template-columns:repeat(2,1fr) !important;}
  .nv-pad{padding-left:20px !important;padding-right:20px !important;}
  .nv-h1{font-size:31px !important;}
  .nv-h1-lg{font-size:32px !important;}
  .nv-h2{font-size:24px !important;}
  .nv-cta-h2{font-size:30px !important;}
  .nv-vision{font-size:25px !important;}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;}
}


/* === nv-greenfx (frosted holographic glass) · main hero + for-agents invite ===
   Frosted-glass + flowing-mesh treatment layered over GREEN_GRADIENT_BG.
   Section gets class .nv-greenfx; components.green_fx() emits the layers;
   app.js wires the pointer interactivity. */
.nv-greenfx{position:relative;overflow:hidden;isolation:isolate;}
.nv-greenfx .fxl{position:absolute;inset:0;pointer-events:none;}

/* ---- flowing emerald gradient mesh (color layer) ---- */
.nv-greenfx .mesh{
  z-index:0;
  background:
    radial-gradient(42% 52% at 80% 24%, rgba(86,230,168,0.55) 0%, rgba(86,230,168,0) 60%),
    radial-gradient(46% 56% at 96% 72%, rgba(47,217,138,0.42) 0%, rgba(47,217,138,0) 62%),
    radial-gradient(52% 62% at 58% 98%, rgba(18,176,116,0.40) 0%, rgba(18,176,116,0) 60%);
  background-size:200% 200%;
  background-position:50% 50%;
  animation:nvgf-meshA 40s ease-in-out infinite;
}
.nv-greenfx .mesh2{
  z-index:0;
  mix-blend-mode:screen;
  background:
    radial-gradient(36% 46% at 42% 22%, rgba(86,230,168,0.10) 0%, rgba(86,230,168,0) 60%),
    radial-gradient(40% 50% at 14% 82%, rgba(14,159,110,0.24) 0%, rgba(14,159,110,0) 62%),
    radial-gradient(34% 42% at 18% 60%, rgba(124,255,196,0.12) 0%, rgba(124,255,196,0) 60%),
    radial-gradient(44% 54% at 74% 48%, rgba(124,255,196,0.22) 0%, rgba(124,255,196,0) 60%);
  background-size:220% 220%;
  background-position:50% 50%;
  animation:nvgf-meshB 46s ease-in-out infinite;
}

/* ---- readability veil: keeps top-left deep emerald under the white headline ---- */
.nv-greenfx .veil{
  z-index:1;
  background:
    linear-gradient(102deg, rgba(4,19,12,0.66) 0%, rgba(4,19,12,0.40) 22%, rgba(4,19,12,0.10) 46%, rgba(4,19,12,0) 62%),
    linear-gradient(180deg, rgba(4,19,12,0.24) 0%, rgba(4,19,12,0) 34%);
}

/* ---- frosted glass: large cloudy "thickness" patches via inline feTurbulence filter ---- */
.nv-greenfx .frost-cloud{
  z-index:1;
  filter:url(#nvgf-frostcloud);
  opacity:0.5;
  mix-blend-mode:soft-light;
  will-change:transform, opacity;
  -webkit-mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.35) 24%, #000 50%);
          mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.35) 24%, #000 50%);
  animation:nvgf-cloud 36s ease-in-out infinite;
}

/* ---- frosted glass: fine speckle grain via self-contained data-URI feTurbulence ---- */
.nv-greenfx .frost-fine{
  z-index:1;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='nvgf-noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' seed='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23nvgf-noise)'/%3E%3C/svg%3E");
  background-size:220px 220px;
  background-repeat:repeat;
  opacity:0.10;
  mix-blend-mode:overlay;
  will-change:transform;
  transition:transform .5s cubic-bezier(.22,.61,.36,1);
  -webkit-mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.30) 26%, #000 52%);
          mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.30) 26%, #000 52%);
}

/* ---- restrained holographic sheen, masked to the top-right ---- */
.nv-greenfx .sheen{
  z-index:1;
  mix-blend-mode:screen;
  will-change:transform, background-position;
  transition:transform .5s cubic-bezier(.22,.61,.36,1);
  background:linear-gradient(116deg,
     rgba(124,255,196,0) 38%,
     rgba(124,255,196,0.12) 47%,
     rgba(216,255,233,0.16) 51%,
     rgba(34,211,197,0.10) 56%,
     rgba(124,255,196,0) 66%);
  background-size:240% 240%;
  background-position:8% 50%;
  -webkit-mask-image:radial-gradient(82% 92% at 92% 6%, #000 0%, rgba(0,0,0,0.25) 46%, rgba(0,0,0,0) 72%);
          mask-image:radial-gradient(82% 92% at 92% 6%, #000 0%, rgba(0,0,0,0.25) 46%, rgba(0,0,0,0) 72%);
  animation:nvgf-sheen 30s ease-in-out infinite;
}

@keyframes nvgf-meshA{
  0%{background-position:36% 42%;}
  50%{background-position:64% 58%;}
  100%{background-position:36% 42%;}
}
@keyframes nvgf-meshB{
  0%{background-position:70% 28%;}
  50%{background-position:28% 72%;}
  100%{background-position:70% 28%;}
}
@keyframes nvgf-cloud{
  0%{transform:translate3d(0,0,0); opacity:0.42;}
  50%{transform:translate3d(-2.4%,1.6%,0); opacity:0.58;}
  100%{transform:translate3d(0,0,0); opacity:0.42;}
}
@keyframes nvgf-sheen{
  0%{background-position:6% 50%;}
  50%{background-position:94% 50%;}
  100%{background-position:6% 50%;}
}

@media (prefers-reduced-motion: reduce){
  .nv-greenfx .mesh,
  .nv-greenfx .mesh2,
  .nv-greenfx .frost-cloud,
  .nv-greenfx .sheen{animation:none;}
  .nv-greenfx .sheen,
  .nv-greenfx .frost-fine{transition:none;}
}
/* interactive pointer layers — added on integration, tuned to half the trial boost */
.nv-greenfx .iglow{
  z-index:0; mix-blend-mode:screen; opacity:0; transition:opacity .55s ease;
  background:radial-gradient(30% 37% at var(--gx,63%) var(--gy,41%),
     rgba(124,255,196,0.32) 0%,
     rgba(94,240,168,0.17) 37%,
     rgba(86,230,168,0.07) 60%,
     rgba(124,255,196,0) 78%);
  will-change:background;
}
.nv-greenfx.is-live .iglow{ opacity:1; }
.nv-greenfx .iwash{
  z-index:0; mix-blend-mode:screen; opacity:0; transition:opacity .8s ease;
  background:radial-gradient(60% 70% at var(--wx,42%) var(--wy,58%),
     rgba(47,217,138,0.10) 0%,
     rgba(14,159,110,0.05) 45%,
     rgba(14,159,110,0) 72%);
  will-change:background;
}
.nv-greenfx.is-live .iwash{ opacity:1; }
/* headline emphasis word on the green sections — bright spring green vs white body text */
.nv-greenfx .nv-accent{ color:#5ef0a8; text-shadow:0 0 22px rgba(94,240,168,0.30); }
/* …except the For Agents invite: its centered heading sits at the top of the
   section, over the veil's dark top band, so the standard accent gets lost there.
   Lift it to the brightest mint with a soft glow so it pops (a darker accent only
   blended further into the veiled green). */
.nv-greenfx .nv-accent.nv-accent-invite{ color:#7CFFC4; text-shadow:0 0 20px rgba(124,255,196,0.45); }
@media (prefers-reduced-motion: reduce){
  .nv-greenfx .iglow,
  .nv-greenfx .iwash{ transition:none; }
}


/* === nv-darkfx (frosted black glass) · For Agents hero + Main closing CTA ===
   Same frosted-glass philosophy as .nv-greenfx, re-skinned for the black sections:
   near-black field, emerald only as a faint edge/cursor glow, no readability veil
   (a soft vignette instead), ambient green tuned weak. dark_fx() emits the layers,
   app.js wires the cursor glow. */
.nv-darkfx{position:relative;overflow:hidden;isolation:isolate;}
.nv-darkfx .fxl{position:absolute;inset:0;pointer-events:none;}
/* emerald life pushed to right / bottom-right / floor — BLACK keeps the field, mint only at the edges (color layer, z0) */
.nv-darkfx .mesh{ z-index:0;
  background:
    radial-gradient(52% 66% at 90% 16%, rgba(47,217,138,0.10) 0%, rgba(47,217,138,0) 70%),
    radial-gradient(62% 76% at 98% 70%, rgba(18,176,116,0.085) 0%, rgba(18,176,116,0) 72%),
    radial-gradient(72% 80% at 74% 106%, rgba(14,159,110,0.092) 0%, rgba(14,159,110,0) 70%);
  background-size:200% 200%; background-position:50% 50%; animation:nvdf-meshA 44s ease-in-out infinite; }
.nv-darkfx .mesh2{ z-index:0; mix-blend-mode:screen;
  background:
    radial-gradient(44% 54% at 82% 30%, rgba(124,255,196,0.045) 0%, rgba(124,255,196,0) 70%),
    radial-gradient(58% 68% at 20% 110%, rgba(14,159,110,0.045) 0%, rgba(14,159,110,0) 70%),
    radial-gradient(58% 70% at 98% 48%, rgba(86,230,168,0.052) 0%, rgba(86,230,168,0) 70%);
  background-size:220% 220%; background-position:50% 50%; animation:nvdf-meshB 52s ease-in-out infinite; }
/* veil replaced by a very faint depth vignette — only DARKENS (corners/top/floor), never lifts luminance behind headings (z1) */
.nv-darkfx .vignette{ z-index:1;
  background:
    radial-gradient(140% 120% at 50% -12%, rgba(0,0,0,0) 58%, rgba(0,0,0,0.22) 100%),
    linear-gradient(180deg, rgba(0,0,0,0.10) 0%, rgba(0,0,0,0) 26%, rgba(0,0,0,0) 70%, rgba(0,0,0,0.20) 100%); }
/* frosted glass — cloudy thickness via inline feTurbulence, soft-light & masked to the open right (z1) */
.nv-darkfx .frost-cloud{ z-index:1; filter:url(#nvdf-frostcloud); opacity:0.38; mix-blend-mode:soft-light;
  will-change:transform,opacity;
  -webkit-mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.30) 26%, #000 52%);
          mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.30) 26%, #000 52%);
  animation:nvdf-cloud 40s ease-in-out infinite; }
/* frosted glass — fine speckle grain via self-contained data-URI feTurbulence (z1, overlay) */
.nv-darkfx .frost-fine{ z-index:1;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='nvdf-noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' seed='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23nvdf-noise)'/%3E%3C/svg%3E");
  background-size:220px 220px; background-repeat:repeat; opacity:0.07; mix-blend-mode:overlay; will-change:transform; transition:transform .5s cubic-bezier(.22,.61,.36,1);
  -webkit-mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.26) 28%, #000 54%);
          mask-image:linear-gradient(100deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.26) 28%, #000 54%); }
/* restrained holographic sheen, masked to top-right (z1, screen) — lower alphas than green so it stays a glint */
.nv-darkfx .sheen{ z-index:1; mix-blend-mode:screen; will-change:transform,background-position; transition:transform .5s cubic-bezier(.22,.61,.36,1);
  background:linear-gradient(116deg, rgba(124,255,196,0) 40%, rgba(124,255,196,0.021) 48%, rgba(216,255,233,0.030) 51%, rgba(34,211,197,0.018) 55%, rgba(124,255,196,0) 64%);
  background-size:240% 240%; background-position:8% 50%;
  -webkit-mask-image:radial-gradient(82% 92% at 92% 6%, #000 0%, rgba(0,0,0,0.25) 46%, rgba(0,0,0,0) 72%);
          mask-image:radial-gradient(82% 92% at 92% 6%, #000 0%, rgba(0,0,0,0.25) 46%, rgba(0,0,0,0) 72%);
  animation:nvdf-sheen 34s ease-in-out infinite; }
/* interactive cursor layers (z0, screen) — set by js via --gx/--gy/--wx/--wy; low alpha because near-black makes highlights read */
.nv-darkfx .iglow{ z-index:0; mix-blend-mode:screen; opacity:0; transition:opacity .55s ease; will-change:background;
  background:radial-gradient(28% 34% at var(--gx,63%) var(--gy,41%), rgba(124,255,196,0.18) 0%, rgba(94,240,168,0.09) 38%, rgba(86,230,168,0.04) 62%, rgba(124,255,196,0) 78%); }
.nv-darkfx.is-live .iglow{ opacity:1; }
.nv-darkfx .iwash{ z-index:0; mix-blend-mode:screen; opacity:0; transition:opacity .8s ease; will-change:background;
  background:radial-gradient(58% 68% at var(--wx,42%) var(--wy,58%), rgba(47,217,138,0.07) 0%, rgba(14,159,110,0.03) 46%, rgba(14,159,110,0) 72%); }
.nv-darkfx.is-live .iwash{ opacity:1; }
@keyframes nvdf-meshA{0%{background-position:42% 40%;}50%{background-position:60% 60%;}100%{background-position:42% 40%;}}
@keyframes nvdf-meshB{0%{background-position:68% 30%;}50%{background-position:30% 70%;}100%{background-position:68% 30%;}}
@keyframes nvdf-cloud{0%{transform:translate3d(0,0,0);opacity:0.30;}50%{transform:translate3d(-2%,1.4%,0);opacity:0.44;}100%{transform:translate3d(0,0,0);opacity:0.30;}}
@keyframes nvdf-sheen{0%{background-position:6% 50%;}50%{background-position:94% 50%;}100%{background-position:6% 50%;}}
@media (prefers-reduced-motion: reduce){
  .nv-darkfx .mesh,.nv-darkfx .mesh2,.nv-darkfx .frost-cloud,.nv-darkfx .sheen{animation:none;}
  .nv-darkfx .sheen,.nv-darkfx .frost-fine,.nv-darkfx .iglow,.nv-darkfx .iwash{transition:none;}
}

/* ===========================================================================
   Docs · novetest  (/docs/novetest/…)
   Markdown rendered by nvsite/mdrender.py. One document per page; the
   For human / For agent tab panels and the top-right audience toggle are all
   driven by the single data-nv-audience attribute on <html> (set pre-paint by
   the inline script, then wired for clicks in app.js §6). Default = human, so
   with JS off the human view shows.
   =========================================================================== */

/* layout ------------------------------------------------------------------- */
.nv-docs-grid{
  display:grid;grid-template-columns:212px minmax(0,1fr);gap:46px;
  max-width:1240px;margin:0 auto;padding:36px 32px 100px;align-items:start;
}
.nv-docs-main{min-width:0;}                 /* let code/tables scroll, not blow out the grid */

/* sidebar ------------------------------------------------------------------ */
.nv-docs-side{position:sticky;top:calc(var(--nv-navh,58px) + 22px);}
.nv-doc-navtitle{
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:0.12em;
  text-transform:uppercase;color:#6b6f71;margin-bottom:14px;padding-left:12px;
}
.nv-doc-navlist{display:flex;flex-direction:column;gap:1px;}
.nv-doc-navlink{
  display:block;padding:8px 12px;border-radius:7px;font-size:14px;line-height:1.35;
  color:#52565a;border-left:2px solid transparent;transition:background .12s ease,color .12s ease;
}
.nv-doc-navlink:hover{background:#f0f0ea;color:#16181a;}
.nv-doc-navlink.is-active{
  background:#eef7f1;color:#0a7d54;font-weight:600;border-left-color:#0e9f6e;
}

/* sticky sub-header: breadcrumb + audience toggle -------------------------- */
.nv-docs-topbar{
  position:sticky;top:var(--nv-navh,58px);z-index:30;
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  margin:-36px -8px 22px;padding:12px 8px;
  background:rgba(250,250,247,0.85);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid rgba(0,0,0,0.07);
}
.nv-doc-crumb{display:flex;align-items:center;gap:9px;font-family:'JetBrains Mono',monospace;font-size:12px;color:#6b6f71;}
.nv-doc-crumblink{color:#6b6f71;transition:color .12s ease;}
.nv-doc-crumblink:hover{color:#0a7d54;}
.nv-doc-crumbsep{color:#cdcdc6;}
.nv-doc-crumbcur{color:#52565a;}

.nv-aud-toggle{
  display:inline-flex;align-items:center;gap:5px;
  background:#fff;border:1px solid rgba(0,0,0,0.12);border-radius:9px;padding:4px 5px 4px 11px;
  box-shadow:0 1px 2px rgba(0,0,0,0.04);
}
.nv-aud-text{
  font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:0.08em;
  text-transform:uppercase;color:#6b6f71;margin-right:3px;
}
.nv-aud-btn{
  font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:500;color:#5b5e60;
  background:transparent;border:none;border-radius:6px;padding:5px 11px;cursor:pointer;
  transition:background .12s ease,color .12s ease;
}
.nv-aud-btn:hover{color:#16181a;}
.nv-aud-dot{color:#cdcdc6;font-size:12px;}
html:not([data-nv-audience="agent"]) .nv-aud-btn--human,
html[data-nv-audience="agent"] .nv-aud-btn--agent{
  background:#16181a;color:#fafaf7;
}
html:not([data-nv-audience="agent"]) .nv-aud-btn--human:hover,
html[data-nv-audience="agent"] .nv-aud-btn--agent:hover{color:#fafaf7;}

/* prose -------------------------------------------------------------------- */
.nv-doc{max-width:820px;font-size:16px;line-height:1.7;color:#3f4346;}
.nv-doc > *:first-child{margin-top:0;}
.nv-doc p{margin:0 0 17px;}
.nv-doc-a{color:#0a7d54;font-weight:500;border-bottom:1px solid rgba(14,159,110,0.28);transition:border-color .12s ease,color .12s ease;}
.nv-doc-a:hover{color:#0e9f6e;border-bottom-color:#0e9f6e;}
.nv-doc strong{color:#1c1f21;font-weight:600;}
.nv-doc em{font-style:italic;}

.nv-doc-h1{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:38px;line-height:1.08;letter-spacing:-0.025em;margin:0 0 18px;color:#111315;}
.nv-doc-h2{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:25px;letter-spacing:-0.02em;margin:52px 0 16px;padding-top:30px;border-top:1px solid rgba(0,0,0,0.08);color:#16181a;}
.nv-doc-h3{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:19.5px;letter-spacing:-0.01em;margin:34px 0 12px;color:#1c1f21;}
.nv-doc-h4{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:16px;margin:26px 0 10px;color:#1c1f21;}
.nv-doc-h5,.nv-doc-h6{font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:14px;margin:22px 0 8px;color:#3a3d3f;}
.nv-doc-h1,.nv-doc-h2,.nv-doc-h3,.nv-doc-h4,.nv-doc-h5,.nv-doc-h6{scroll-margin-top:calc(var(--nv-navh,58px) + 70px);}
/* the lead paragraph (right after the H1) reads a touch larger / lighter */
.nv-doc-h1 + p{font-size:18px;line-height:1.62;color:#52565a;margin-bottom:26px;}

/* lists -------------------------------------------------------------------- */
.nv-doc-list{margin:0 0 17px;padding-left:24px;}
.nv-doc-list li{margin:0 0 8px;padding-left:3px;}
.nv-doc-list li::marker{color:#9a9ea0;}
.nv-doc-list .nv-doc-list{margin:9px 0 4px;}
.nv-doc-list p{margin:0 0 10px;}
.nv-doc-list li > .nv-codeblock,.nv-doc-list li > .nv-tablescroll{margin:12px 0;}

/* horizontal rule ---------------------------------------------------------- */
.nv-doc-hr{border:none;border-top:1px solid rgba(0,0,0,0.09);margin:38px 0;}

/* inline code -------------------------------------------------------------- */
.nv-code{
  font-family:'JetBrains Mono',monospace;font-size:0.86em;
  background:#eef0ec;color:#0a5e44;border:1px solid rgba(14,159,110,0.14);
  border-radius:5px;padding:1.5px 5px;overflow-wrap:break-word;
}
.nv-doc-h1 .nv-code,.nv-doc-h2 .nv-code,.nv-doc-h3 .nv-code,.nv-doc-h4 .nv-code{font-size:0.82em;background:#eceae3;}
.nv-doc-a .nv-code{background:transparent;border-color:transparent;color:inherit;padding:0;}

/* fenced code blocks ------------------------------------------------------- */
.nv-codeblock{position:relative;margin:0 0 20px;background:#0b0d0e;border:1px solid rgba(0,0,0,0.14);border-radius:11px;overflow:hidden;}
.nv-code-lang{
  position:absolute;top:0;left:0;font-family:'JetBrains Mono',monospace;font-size:10px;
  letter-spacing:0.08em;text-transform:uppercase;color:#8b9197;
  background:#121517;border-bottom:1px solid rgba(255,255,255,0.06);border-right:1px solid rgba(255,255,255,0.06);
  border-radius:11px 0 8px 0;padding:4px 11px;
}
.nv-code-copy{
  position:absolute;top:7px;right:7px;font-family:'JetBrains Mono',monospace;font-size:11px;
  color:#2fd98a;background:#15181a;border:1px solid rgba(255,255,255,0.1);border-radius:6px;
  padding:4px 9px;cursor:pointer;transition:background .15s ease;z-index:2;
}
.nv-code-copy:hover{background:#1d2022;}
.nv-pre{
  margin:0;padding:34px 18px 16px;overflow-x:auto;
  font-family:'JetBrains Mono',monospace;font-size:13px;line-height:1.6;color:#cdd2d4;
  -webkit-overflow-scrolling:touch;
}
.nv-pre code{font-family:inherit;white-space:pre;}
/* the 34px top strip is reserved on every block so the copy button / language
   label never overlap the first line — including long banners like --help */

/* tables ------------------------------------------------------------------- */
.nv-tablescroll{overflow-x:auto;margin:0 0 22px;border:1px solid rgba(0,0,0,0.1);border-radius:10px;-webkit-overflow-scrolling:touch;}
.nv-doc-table{border-collapse:collapse;width:100%;font-size:13.5px;line-height:1.55;}
.nv-doc-table th,.nv-doc-table td{text-align:left;padding:10px 14px;border-bottom:1px solid rgba(0,0,0,0.07);vertical-align:top;}
.nv-doc-table thead th{
  font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:0.05em;text-transform:uppercase;
  color:#5b5e60;background:#f0f0ea;border-bottom:1px solid rgba(0,0,0,0.12);white-space:nowrap;
}
.nv-doc-table tbody tr:last-child td{border-bottom:none;}
.nv-doc-table tbody tr:nth-child(even){background:rgba(0,0,0,0.018);}
.nv-doc-table td{color:#4a4e51;}
.nv-doc-table .nv-code{white-space:nowrap;}

/* blockquote callout ------------------------------------------------------- */
.nv-doc-quote{
  margin:0 0 22px;padding:16px 20px;border-radius:0 11px 11px 0;
  border-left:3px solid #0e9f6e;background:rgba(14,159,110,0.06);color:#3a5a4c;
}
.nv-doc-quote > *:last-child{margin-bottom:0;}
.nv-doc-quote strong{color:#0a5e44;}

/* audience tab control ----------------------------------------------------- */
.nv-tabwrap{margin:0 0 22px;border:1px solid rgba(0,0,0,0.1);border-radius:12px;overflow:hidden;background:#fff;}
.nv-tablist{display:flex;gap:0;background:#f4f4ee;border-bottom:1px solid rgba(0,0,0,0.09);padding:5px 5px 0;}
.nv-tabbtn{
  font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:500;color:#7a7f82;
  background:transparent;border:none;border-bottom:2px solid transparent;
  padding:9px 16px;cursor:pointer;transition:color .12s ease,background .12s ease;
  border-radius:7px 7px 0 0;margin-bottom:-1px;
}
.nv-tabbtn:hover{color:#16181a;}
html:not([data-nv-audience="agent"]) .nv-tabbtn--human,
html[data-nv-audience="agent"] .nv-tabbtn--agent{
  color:#0a7d54;background:#fff;border-bottom-color:#0e9f6e;
}
.nv-tabpanels{padding:20px 22px 4px;}
.nv-tabpanel{display:none;}
.nv-tabpanel > *:first-child{margin-top:0;}
html:not([data-nv-audience="agent"]) .nv-tabpanel--human{display:block;}
html[data-nv-audience="agent"] .nv-tabpanel--agent{display:block;}
/* tabs nested inside a tab panel just stack their content (no double frame) */
.nv-tabpanel .nv-codeblock:last-child,.nv-tabpanel p:last-child{margin-bottom:16px;}

/* prev / next pager -------------------------------------------------------- */
.nv-doc-pager{display:flex;justify-content:space-between;gap:14px;margin-top:54px;padding-top:26px;border-top:1px solid rgba(0,0,0,0.09);}
/* keeps prev on the left and next on the right even when one side is absent
   (e.g. the first page has no prev) — the empty half just stays empty */
.nv-doc-pagerspacer{flex:1;max-width:50%;}
.nv-doc-pagerlink{
  display:flex;flex-direction:column;gap:3px;flex:1;max-width:50%;
  border:1px solid rgba(0,0,0,0.1);border-radius:11px;padding:14px 18px;
  transition:border-color .15s ease,background .15s ease;
}
.nv-doc-pagerlink--next{align-items:flex-end;text-align:right;}
.nv-doc-pagerlink:hover{border-color:rgba(14,159,110,0.5);background:rgba(14,159,110,0.04);}
.nv-doc-pagerdir{font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:0.04em;color:#6b6f71;}
.nv-doc-pagername{font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:600;color:#16181a;}

/* responsive --------------------------------------------------------------- */
@media (max-width:920px){
  .nv-docs-grid{gap:0 !important;padding-top:24px !important;}
  .nv-docs-side{
    position:static !important;margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid rgba(0,0,0,0.08);
  }
  .nv-doc-navlist{flex-direction:row;flex-wrap:wrap;gap:6px;}
  .nv-doc-navlink{border-left:none;padding:7px 12px;border:1px solid rgba(0,0,0,0.1);border-radius:999px;font-size:13px;}
  .nv-doc-navlink.is-active{border-color:#0e9f6e;}
  .nv-docs-topbar{margin-top:0;}
}
@media (max-width:560px){
  .nv-doc-h1{font-size:30px !important;}
  .nv-doc-h2{font-size:22px !important;}
  .nv-aud-text{display:none;}
  .nv-doc-pager{flex-direction:column;}
  .nv-doc-pagerspacer{display:none;}
  .nv-doc-pagerlink{max-width:100%;}
  .nv-doc-pagerlink--next{align-items:flex-start;text-align:left;}
}

/* live 'latest release' version badge — Product hero + Docs landing (see components.version_badge) */
.nv-verbadge{transition:background-color .12s ease,border-color .12s ease;}
.nv-verbadge:hover{background:#e3f2e9;border-color:rgba(14,159,110,0.55);}
.nv-verbadge-dot{flex:none;width:7px;height:7px;border-radius:999px;background:#0e9f6e;}
.nv-verbadge--live .nv-verbadge-dot{animation:nv-verpulse 2.4s ease-in-out infinite;}
@keyframes nv-verpulse{
  0%,100%{box-shadow:0 0 0 0 rgba(14,159,110,0.5);}
  50%{box-shadow:0 0 0 4px rgba(14,159,110,0);}
}
@media (prefers-reduced-motion: reduce){
  .nv-verbadge--live .nv-verbadge-dot{animation:none;}
}
/* compact 'latest' version line under the Docs sidebar title — its own line, no extra width */
.nv-doc-navver{display:block;margin-top:3px;font-size:10px;letter-spacing:0.04em;text-transform:none;font-weight:400;color:#a8abac;}

/* clickable novetest box in the ecosystem diagram (Main + For Agents) -> /products/novetest/ */
.nv-eco-novetest{transition:border-color .14s ease,box-shadow .14s ease,transform .14s ease;}
.nv-eco-novetest:hover{border-color:#0b8f60;box-shadow:0 16px 40px -18px rgba(14,159,110,0.62);transform:translateY(-2px);}
.nv-eco-novetest:focus-visible{outline:2px solid #0e9f6e;outline-offset:3px;}
.nv-eco-arrow{transition:transform .14s ease;}
.nv-eco-novetest:hover .nv-eco-arrow{transform:translateX(3px);}
@media (prefers-reduced-motion: reduce){
  .nv-eco-novetest:hover{transform:none;}
  .nv-eco-novetest:hover .nv-eco-arrow{transform:none;}
}

/* ── 100% Coverage lab (/products/test-case-generator/, covlab-*.js) ──────
   Three panels: dark code editor · CFG (SVG) · generated test suite. */
.nv-cov-grid{display:grid;grid-template-columns:1.02fr 1.14fr 1fr;gap:16px;align-items:stretch;}
.nv-cov-panel{background:#fff;border:1px solid rgba(0,0,0,0.09);border-radius:14px;
  box-shadow:0 1px 3px rgba(0,0,0,0.04);display:flex;flex-direction:column;min-width:0;overflow:hidden;}
.nv-cov-panel-body{overflow:auto;flex:1;min-height:0;}
.nv-cov-cfgbody{padding:18px 14px;height:492px;}
.nv-cov-suitebody{padding:12px 14px 16px;}
.nv-cov-status{font-family:'JetBrains Mono',monospace;font-size:11px;color:#0a7d54;}
.nv-cov-status.is-err{color:#9a3d12;}

/* panel 1 — editor (textarea over a highlighted <pre> twin; metrics of the
   two layers must match exactly: same font, line-height, padding, tab-size) */
.nv-cov-editor{display:flex;flex:1;min-height:0;height:546px;background:#0b0d0e;
  font-family:'JetBrains Mono',monospace;font-size:13px;line-height:20px;position:relative;}
.nv-cov-gutterwrap{flex:none;width:46px;overflow:hidden;background:#15181a;
  border-right:1px solid rgba(255,255,255,0.08);padding:14px 0;}
.nv-cov-gutter{color:#5b6066;text-align:right;padding-right:10px;font-size:11.5px;line-height:20px;}
.nv-cov-codewrap{position:relative;flex:1;min-width:0;display:flex;}
.nv-cov-hl{position:absolute;inset:0;margin:0;padding:14px 16px;overflow:hidden;
  font:inherit;line-height:20px;white-space:pre;tab-size:4;color:#e8eaec;pointer-events:none;}
.nv-cov-code{flex:1;min-width:0;background:transparent;color:#e8eaec;border:none;resize:none;
  outline:none;padding:14px 16px;font:inherit;line-height:20px;caret-color:#2fd98a;
  white-space:pre;overflow:auto;tab-size:4;position:relative;}
.nv-cov-editor.is-hl .nv-cov-code{color:transparent;-webkit-text-fill-color:transparent;}
.nv-cov-code::selection{background:rgba(47,217,138,0.28);}
.nv-cov-code:focus,.nv-cov-code:focus-visible{outline:none;box-shadow:none;}
/* token palette (dark editor) */
.hl-c{color:#6a7178;}                       /* comments        */
.hl-s{color:#e8c785;}                       /* strings         */
.hl-d{color:#ffb86c;}                       /* @decorator line */
.hl-k{color:#2fd98a;}                       /* keywords        */
.hl-l{color:#c9a6ff;}                       /* True/False/None */
.hl-n{color:#8ab8ff;}                       /* numbers         */

/* panel 2 — CFG */
.nv-cfg-shape{fill:#fff;stroke:rgba(0,0,0,0.32);stroke-width:1.2;
  transition:stroke .14s ease,fill .14s ease,opacity .14s ease;}
.nv-cfg-node--decision .nv-cfg-shape{fill:#fbfaf4;}
.nv-cfg-cap{fill:#16181a;transition:fill .14s ease,opacity .14s ease;}
.nv-cfg-captext{fill:#fafaf7;font-family:'JetBrains Mono',monospace;font-size:11px;
  letter-spacing:0.08em;text-transform:uppercase;}
.nv-cfg-cond{fill:#111315;font-family:'JetBrains Mono',monospace;font-size:11.5px;font-weight:600;}
.nv-cfg-lines{fill:#6f7478;font-family:'JetBrains Mono',monospace;font-size:11px;}
.nv-cfg-edge{stroke:#8a8f92;stroke-width:1.4;transition:stroke .14s ease,opacity .14s ease;}
.nv-cfg-elabel{font-family:'JetBrains Mono',monospace;font-size:10.5px;transition:opacity .14s ease;}
.nv-cfg-elabel--true{fill:#0a7d54;}
.nv-cfg-elabel--false{fill:#b45309;}
.nv-cfg-edge.is-hot{stroke:#0e9f6e;stroke-width:2.6;}
.nv-cfg-node.is-hot .nv-cfg-shape{stroke:#0e9f6e;stroke-width:2;fill:#eef7f1;}
.nv-cfg-node.is-hot .nv-cfg-cap{fill:#0e9f6e;}
.nv-cfg-svg.has-hot .nv-cfg-node:not(.is-hot){opacity:0.3;}
.nv-cfg-svg.has-hot .nv-cfg-edge:not(.is-hot){opacity:0.22;}
.nv-cfg-svg.has-hot .nv-cfg-elabel:not(.is-hot){opacity:0.25;}

/* panel 3 — suite */
.nv-cov-select{font-family:'JetBrains Mono',monospace;font-size:12px;color:#16181a;background:#fff;
  border:1px solid rgba(0,0,0,0.14);border-radius:7px;height:30px;padding:0 9px;cursor:pointer;max-width:100%;}
.nv-cov-select:focus-visible{outline:2px solid #0e9f6e;outline-offset:2px;}
.nv-cov-score{display:flex;align-items:baseline;gap:10px;padding:14px 16px 4px;flex-wrap:wrap;}
.nv-cov-pct{font-family:'Space Grotesk',sans-serif;font-size:32px;font-weight:600;
  letter-spacing:-0.02em;color:#b45309;}
.nv-cov-pct.is-full{color:#0a7d54;}
.nv-cov-frac{font-family:'JetBrains Mono',monospace;font-size:12px;color:#9a9ea0;}
.nv-cov-cases{display:flex;flex-direction:column;gap:6px;}
.nv-cov-case{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:10px;
  width:100%;text-align:left;font-family:'JetBrains Mono',monospace;font-size:12.5px;color:#1c1f21;
  background:#fff;border:1px solid rgba(0,0,0,0.1);border-radius:8px;padding:8px 11px;cursor:pointer;
  transition:border-color .12s ease,background-color .12s ease;}
.nv-cov-case:hover,.nv-cov-case:focus-visible{border-color:#0e9f6e;background:#f4faf7;outline:none;}
.nv-cov-case.is-pinned{border-color:#0e9f6e;background:#eef7f1;box-shadow:0 0 0 1px #0e9f6e inset;}
.nv-cov-case-idx{color:#9a9ea0;font-size:11px;min-width:16px;}
.nv-cov-case-call{white-space:pre-wrap;word-break:break-word;min-width:0;}
.nv-cov-case-ret{color:#0a7d54;white-space:normal;word-break:break-word;max-width:14em;}
.nv-cov-case.is-err .nv-cov-case-ret{color:#b45309;}
.nv-cov-note{font-size:12.5px;line-height:1.55;color:#6f7478;border-top:1px dashed rgba(0,0,0,0.14);
  margin-top:12px;padding-top:10px;}
.nv-cov-note strong{color:#3a3d3f;}
.nv-cov-miss{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:#9a3d12;}
.nv-cov-hint{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:#9a9ea0;margin-top:12px;}
.nv-cov-msg{border-radius:10px;padding:16px 18px;margin:2px 0;}
.nv-cov-msg--err{background:#fbf1ec;border:1px solid rgba(180,83,9,0.25);}
.nv-cov-msg--err .nv-cov-msg-title{color:#9a3d12;}
.nv-cov-msg--idle{background:#f6f6f1;border:1px dashed rgba(0,0,0,0.16);}
.nv-cov-msg--idle .nv-cov-msg-title{color:#5b5e60;}
.nv-cov-msg-title{font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:600;margin-bottom:6px;}
.nv-cov-msg-body{font-size:13.5px;line-height:1.55;color:#6f7478;}

@media (max-width:1200px){
  .nv-cov-grid{grid-template-columns:1fr 1fr;}
  .nv-cov-panel--suite,.nv-cov-panel:nth-child(3){grid-column:1/-1;}
}
@media (max-width:820px){
  .nv-cov-grid{grid-template-columns:1fr;}
  .nv-cov-editor{height:400px;}
  .nv-cov-cfgbody{height:420px;}
}
@media (prefers-reduced-motion: reduce){
  .nv-cfg-shape,.nv-cfg-cap,.nv-cfg-edge,.nv-cfg-elabel,.nv-cov-case{transition:none;}
}
