/* BoltAudit — one shared stylesheet for the whole site.
   Loaded by every page, cached after the first. Page files keep only their own
   page-unique rules inline. Do not duplicate anything from this file into a page. */

:root{
--navy:#1f2a44;--navy-2:#2a3a5c;--navy-3:#16203a;
--orange:#f15a16;--orange-2:#ff6b28;--orange-deep:#d84f12;
--page:#e9eaec;--shell:#f7f7f5;--card:#ffffff;
--ink:#1f2a44;--muted:#5b6577;--muted2:#8b93a3;--muted-2:#8b93a3;
--faint:#b6bcc8;--tint:#eef1f6;--line:#e4e7ee;--otint:#fdf0e8;--orange-tint:#fdf0e8;
--good:#187a45;--goodbg:#e2f5ea;--good-bg:#e2f5ea;--bad:#b3261e;--badbg:#fdeceb;--bad-bg:#fdeceb;
--navbg:rgba(255,255,255,.72);--code:#16203a;
}
html[data-theme="dark"]{
--page:#141c30;--shell:#1a2338;--card:#212c46;--ink:#eef1f6;--muted:#aeb8cf;--muted2:#8b93a3;--muted-2:#8b93a3;
--faint:#5b6577;--tint:#2a3a5c;--line:#2f3d5c;--otint:rgba(241,90,22,.16);--orange-tint:rgba(241,90,22,.16);
--good:#5fd396;--goodbg:rgba(24,122,69,.25);--good-bg:rgba(24,122,69,.25);--bad:#ff9088;--badbg:rgba(179,38,30,.25);--bad-bg:rgba(179,38,30,.25);
--navbg:rgba(26,35,56,.72);--code:#0f1729;
}

/* ── legacy token aliases ─────────────────────────────────────────────────────
   The blog and fixes pages keep their own stylesheets (see the <style> block in
   each shell). Those rules were written against the previous design system's
   --ba-* scale, and there are ~40KB of them — rewriting every declaration to
   the new token names would be a large, entirely mechanical diff with plenty of
   room to introduce a typo.

   Aliasing instead maps the old names onto the new ones in one place. Two
   things fall out of that: the pages pick up the new brand (the old --ba-spark*
   scale was blue; it now resolves to the orange used everywhere else), and
   because the targets are theme-aware, those pages get light/dark support they
   never had. */
:root{
--ba-font:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
--ba-ink:var(--ink);--ba-ink-2:var(--ink);--ba-ink-3:var(--muted);
--ba-ink-4:var(--muted);--ba-ink-5:var(--muted2);--ba-ink-6:var(--faint);
--ba-hair:var(--line);--ba-hair-2:var(--line);
--ba-paper:var(--page);--ba-surface:var(--card);--ba-surface-2:var(--tint);
--ba-blue:var(--orange);--ba-blue-deep:var(--orange-deep);
--ba-blue-tint:var(--orange-tint);--ba-blue-border:var(--orange-tint);
--ba-spark:var(--orange);--ba-spark-deep:var(--orange-deep);
--ba-spark-tint:var(--orange-tint);--ba-spark-border:var(--orange-tint);
--ba-black:var(--ink);--ba-black-2:var(--ink);--ba-dark:var(--code);--ba-dark-2:var(--code);
}

body{margin:0;background:var(--page);color:var(--muted);font:500 16px/1.6 "Inter",system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;transition:background .3s}
a{color:var(--ink);text-decoration:none}
a:hover{color:#d84f12}
:focus-visible{outline:3px solid #f15a16;outline-offset:2px;border-radius:8px}
h1,h2,h3{text-wrap:pretty}

/* logo */
.ba-logo{display:block;width:auto;flex:none}
.ba-logo-dark{display:none}
html[data-theme="dark"] .ba-logo-light{display:none}
html[data-theme="dark"] .ba-logo-dark{display:block}

/* nav dropdowns */
.ba-drop{position:relative}
.ba-drop > .ba-panel{visibility:hidden;opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s;position:absolute;top:100%;inset-inline-start:50%;margin-inline-start:-140px;padding-top:12px;z-index:60}
.ba-drop:hover > .ba-panel,.ba-drop:focus-within > .ba-panel{visibility:visible;opacity:1;transform:translateY(0)}
.ba-drop > button{transition:color .3s}
.ba-drop > button:hover{color:#d84f12}
@media (max-width:940px){.ba-navlinks{display:none !important}.ba-burger{display:inline-flex !important}}

/* mobile nav drawer (hamburger accordion panel), driven by ba-newnav.is-open via ba.js toggleNav() */
.ba-newnav-panel{display:none}
.ba-newnav.is-open .ba-newnav-panel{display:block}

/* theme toggle button (nav + footer), driven by html[data-theme] via ba.js */
.ba-theme-toggle .ba-toggle-ic-dark{display:none}
html[data-theme="dark"] .ba-theme-toggle .ba-toggle-ic-dark{display:block}
html[data-theme="dark"] .ba-theme-toggle .ba-toggle-ic-light{display:none}
.ba-theme-toggle .ba-theme-knob{transform:translateX(0)}
html[data-theme="dark"] .ba-theme-toggle .ba-theme-knob{transform:translateX(30px)}

/* accordions */
details.ba-acc > summary::-webkit-details-marker{display:none}
details.ba-faq > summary::-webkit-details-marker{display:none}
details.ba-faq,details.ba-acc{contain:layout style}

/* shared card + reveal behaviour */
.ba-fixcard{transition:transform .2s,box-shadow .2s;contain:layout style}
.ba-fixcard:hover{transform:translateY(-3px);box-shadow:0 18px 50px -24px rgba(31,42,68,.35)}
.ba-rev{opacity:0;transform:translateY(26px);transition:opacity .6s ease,transform .6s cubic-bezier(.2,.7,.2,1)}
.ba-cta:hover{transform:translateY(-2px)}
/* content is never left hidden if scripting fails */
html:not(.ba-js) .ba-rev,html:not(.ba-js) .ba-stag > *,html:not(.ba-js) .ba-heroseq{opacity:1 !important;transform:none !important}

/* responsive grid defaults (pages override where their grid differs) */
@media (max-width:900px){
  .ba-g4{grid-template-columns:1fr 1fr !important}
  .ba-g3{grid-template-columns:1fr 1fr !important}
  .ba-g2{grid-template-columns:1fr !important}
  .ba-foot{grid-template-columns:1fr 1fr !important}
  .ba-fixgrid{grid-template-columns:1fr 1fr !important}
  .ba-rel{grid-template-columns:1fr 1fr 1fr !important}
}
@media (max-width:560px){
  .ba-g4,.ba-g3,.ba-g2,.ba-foot,.ba-fixgrid,.ba-rel{grid-template-columns:1fr !important}
  .ba-section{padding-block:60px !important}
}

/* render cost: skip offscreen sections until they scroll near */
section.ba-section:nth-of-type(n+3):not(:has(.ba-stag,.ba-rev,.ba-rv,.ba-draw,.ba-marker,.ba-bar,.ba-elbow,.ba-fill,.ba-num,.ba-arc61,.ba-heroseq)){content-visibility:auto;contain-intrinsic-size:auto 720px}
[data-ba-tabpanel="off"]{content-visibility:hidden}

@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none !important;transition:none !important}}

/* ── article prose (blog + fixes) ─────────────────────────────────────────────
   The static pages in this design style every element with an inline `style=`
   attribute. Blog and fix pages can't: their bodies are Markdown rendered to
   plain <h2>/<p>/<ul>/<pre> by the SSR Function (functions/blog/[slug].js) and
   by marked.js on the client, so there is nowhere to hang inline styles.

   These rules reproduce the design's type scale for that generated markup.
   Values are lifted from the design's own article pages — h2 clamp(24,2.9vw,32),
   h3 20/800, body 16.5/var(--muted) — so a CMS post and a hand-built page read
   as the same system. Everything resolves through the theme variables above,
   so prose follows light/dark with the rest of the site. */
.article-body{max-width:760px;margin-inline:auto;padding-inline:24px;padding-block:8px 72px;font-size:16.5px;line-height:1.75;color:var(--muted)}
.article-body > :first-child{margin-top:0}
.article-body h2{font-size:clamp(24px,2.9vw,32px);font-weight:800;letter-spacing:-.02em;line-height:1.15;color:var(--ink);margin-block:52px 16px;text-wrap:balance}
.article-body h3{font-size:20px;font-weight:800;letter-spacing:-.02em;line-height:1.25;color:var(--ink);margin-block:36px 12px;text-wrap:balance}
.article-body h4{font-size:16.5px;font-weight:800;color:var(--ink);margin-block:28px 10px}
.article-body p{margin-block:0 20px;text-wrap:pretty}
.article-body a{color:var(--orange);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
.article-body a:hover{color:var(--orange-deep)}
.article-body strong{color:var(--ink);font-weight:700}
.article-body ul,.article-body ol{margin-block:0 20px;padding-inline-start:24px;display:grid;gap:10px}
.article-body ul{list-style:disc}
.article-body ol{list-style:decimal}
.article-body li::marker{color:var(--faint)}
.article-body li > ul,.article-body li > ol{margin-block:10px 0}
.article-body code{font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace;font-size:.88em;background:var(--tint);color:var(--ink);padding:2px 7px;border-radius:6px}
.article-body pre{background:var(--code);border-radius:14px;padding:20px 22px;margin-block:0 24px;overflow-x:auto}
.article-body pre code{font-size:13px;line-height:1.7;color:#c9d2e6;background:none;padding:0;border-radius:0}
.article-body blockquote{margin-block:0 24px;margin-inline:0;padding:4px 0 4px 20px;border-inline-start:3px solid var(--orange);color:var(--ink)}
.article-body blockquote p:last-child{margin-bottom:0}
.article-body img{max-width:100%;height:auto;border-radius:14px;margin-block:8px 24px}
.article-body hr{border:0;border-top:1px solid var(--line);margin-block:40px}
.article-body table{width:100%;border-collapse:collapse;font-size:14px;margin-block:0 24px;display:block;overflow-x:auto}
.article-body th{text-align:start;padding:14px 18px;font-weight:700;color:var(--ink);border-bottom:1px solid var(--line);white-space:nowrap}
.article-body td{padding:13px 18px;color:var(--muted);border-bottom:1px solid var(--line)}
@media (max-width:560px){.article-body{font-size:16px;padding-inline:20px}}
