/* ============================================================================
   The public blog — /blog and /blog/<slug>. Built by scripts/build_blog.py.
   ----------------------------------------------------------------------------
   House scale and palette, literal values (same reason as assets/sitepage.css:
   these pages define no palette of their own). Instrument Sans body, Bricolage
   Grotesque headings, JetBrains Mono for labels and figures.

   Motion follows the homepage contract: every start state is scoped to html.js
   (set before first paint by assets/sitefigure.js), so with no JavaScript the
   finished page is what renders, and reduced motion gets no movement at all.
   ========================================================================== */

.bp{margin:0;background:#FBFAFE;color:#161232;
  font-family:'Instrument Sans',system-ui,-apple-system,sans-serif;
  -webkit-font-smoothing:antialiased;line-height:1.55;}
.bp *{box-sizing:border-box;}
/* Not `.bp a`: that outranks the shared nav's button classes and painted the
   white "Book a demo" label dark on indigo. */
.bp-hero a,.bl-card,.bl-feature,.bp-toc a{color:inherit;}
.bp-wrap{max-width:1180px;margin:0 auto;padding:0 24px;}
.bp h1,.bp h2,.bp h3{font-family:'Bricolage Grotesque','Instrument Sans',system-ui,sans-serif;color:#161232;}

/* ---------- reading progress ---------- */
.bp-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:120;pointer-events:none;}
.bp-progress i{display:block;height:100%;width:100%;transform-origin:0 50%;transform:scaleX(0);
  background:linear-gradient(90deg,#2B2AE0,#A07FE0 60%,#37C39A);}
html:not(.js) .bp-progress{display:none;}

/* ---------- article hero ---------- */
.bp-hero{position:relative;overflow:hidden;padding:64px 0 40px;
  background:radial-gradient(900px 320px at 12% -10%,rgba(43,42,224,.10),transparent 70%),
             radial-gradient(700px 300px at 95% 0%,rgba(160,127,224,.12),transparent 70%),
             linear-gradient(180deg,#F2F2FF,#FBFAFE);
  border-bottom:1px solid #EFEDF7;}
.bp-hero .bp-wrap{max-width:900px;}
.bp-crumbs{display:flex;align-items:center;gap:10px;font:500 12px/1 'JetBrains Mono',ui-monospace,monospace;
  letter-spacing:.08em;text-transform:uppercase;color:#746D96;margin-bottom:22px;}
.bp-crumbs a{text-decoration:none;}
.bp-crumbs a:hover{color:#2B2AE0;}
.bp-crumbs a[style]{color:var(--cat);background:#fff;border:1px solid #E8E6F2;border-radius:99px;padding:6px 10px;}
.bp-hero h1{font-size:50px;line-height:1.05;letter-spacing:-.045em;font-weight:800;margin:0 0 18px;text-wrap:balance;}
.bp-dek{font-size:20px;line-height:1.55;color:#453F63;margin:0 0 20px;max-width:760px;}
.bp-meta{display:flex;align-items:center;gap:12px;font-size:14px;color:#746D96;margin:0;}
.bp-meta b{color:#161232;font-weight:650;}
.bp-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;flex:none;
  box-shadow:0 0 0 2px #fff,0 0 0 3px #E1DEF0;}

/* ---------- about the author ---------- */
.bp-author{display:flex;gap:18px;align-items:flex-start;margin:48px 0 0;padding:22px;
  background:#fff;border:1px solid #E8E6F2;border-radius:18px;}
.bp-author img{width:72px;height:72px;border-radius:16px;object-fit:cover;flex:none;}
.bp-author-lab{display:block;font:500 11px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.13em;
  text-transform:uppercase;color:#8A84A8;margin-bottom:8px;}
.bp-author b{display:block;font-size:17px;color:#161232;}
.bp-author-role{display:block;font-size:13.5px;color:#746D96;margin:2px 0 8px;}
.bp-author p{margin:0;font-size:15px;line-height:1.6;color:#453F63;}
@media (max-width:520px){.bp-author{flex-direction:column}}
@media (max-width:720px){.bp-hero{padding:40px 0 28px}.bp-hero h1{font-size:34px}.bp-dek{font-size:17px}}

html.js .bp-hero h1,html.js .bp-hero .bp-dek,html.js .bp-hero .bp-meta{opacity:0;transform:translateY(10px);
  animation:bp-rise .7s cubic-bezier(.22,1,.36,1) forwards;}
html.js .bp-hero .bp-dek{animation-delay:.08s}
html.js .bp-hero .bp-meta{animation-delay:.16s}
@keyframes bp-rise{to{opacity:1;transform:none}}

/* ---------- layout: sticky contents + article ---------- */
.bp-layout{display:grid;grid-template-columns:230px minmax(0,740px);gap:56px;justify-content:center;
  padding-top:44px;padding-bottom:40px;}
.bp-toc{position:sticky;top:96px;align-self:start;max-height:calc(100vh - 120px);overflow:auto;padding-right:6px;}
.bp-toc-lab{display:block;font:500 11px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.13em;
  text-transform:uppercase;color:#8A84A8;margin:6px 0 14px;}
.bp-toc ol{list-style:none;margin:0;padding:0;border-left:2px solid #EFEDF7;}
.bp-toc li a{display:block;padding:7px 0 7px 14px;margin-left:-2px;border-left:2px solid transparent;
  font-size:14px;line-height:1.4;color:#5F5980;text-decoration:none;transition:color .2s,border-color .2s;}
.bp-toc li a:hover{color:#161232;}
.bp-toc li a.is-on{color:#2B2AE0;border-left-color:#2B2AE0;font-weight:600;}
@media (max-width:1000px){.bp-layout{grid-template-columns:minmax(0,740px)}.bp-toc{display:none}}

/* ---------- the short answer ---------- */
.bp-answer{position:relative;background:#fff;border:1px solid #E1DFFB;border-radius:18px;
  padding:22px 24px 20px 26px;margin:0 0 36px;box-shadow:0 10px 30px rgba(43,42,224,.07);overflow:hidden;}
.bp-answer::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:linear-gradient(180deg,#2B2AE0,#A07FE0);}
.bp-answer-lab{display:block;font:500 11px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.13em;
  text-transform:uppercase;color:#2B2AE0;margin-bottom:10px;}
.bp-answer p{margin:0;font-size:18px;line-height:1.65;color:#161232;}

/* ---------- body typography ---------- */
.bp-body{font-size:18px;line-height:1.75;color:#2D2850;}
.bp-body > *:first-child{margin-top:0;}
.bp-body p{margin:0 0 22px;}
.bp-body h2{font-size:31px;line-height:1.15;letter-spacing:-.03em;font-weight:800;margin:58px 0 16px;scroll-margin-top:96px;}
.bp-body h3{font-size:21px;line-height:1.3;letter-spacing:-.015em;font-weight:700;margin:34px 0 10px;scroll-margin-top:96px;}
.bp-body a{color:#2B2AE0;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;}
.bp-body a:hover{color:#1D1CBA;text-decoration-thickness:2px;}
.bp-body strong{color:#161232;font-weight:650;}
.bp-body ul,.bp-body ol{margin:0 0 24px;padding-left:24px;}
.bp-body li{margin:0 0 9px;padding-left:4px;}
.bp-body li::marker{color:#8A84A8;}
.bp-body ol > li::marker{font:600 15px 'JetBrains Mono',ui-monospace,monospace;color:#2B2AE0;}
.bp-body blockquote{margin:28px 0;padding:4px 0 4px 22px;border-left:3px solid #A07FE0;color:#453F63;font-size:19px;}
.bp-body code{font:500 .86em 'JetBrains Mono',ui-monospace,monospace;background:#F1F0FF;border-radius:6px;padding:2px 6px;color:#1D1CBA;}
.bp-body pre{background:#161232;color:#E9E7FF;border-radius:14px;padding:18px 20px;overflow:auto;font-size:14px;line-height:1.6;}
.bp-body pre code{background:none;color:inherit;padding:0;}
.bp-body hr{border:0;height:1px;background:#EFEDF7;margin:40px 0;}
.bp-body .sfig{margin:30px 0 34px;background:#fff;}
/* The article column is ~740px, so a 1000-unit drawing scales to about 0.7 and
   the house label sizes rendered near 8px. Raised here for posts only; the
   product pages keep their own sizes. The phone sizes in sitefigure.css win
   below 720px, where the drawing scrolls at a fixed minimum width instead. */
@media (min-width:721px){
  .bp-body .sfig .t-lab{font-size:13px;letter-spacing:.1em;}
  .bp-body .sfig .t-val{font-size:16px;}
  .bp-body .sfig .t-small{font-size:13px;}
}
@media (max-width:720px){.bp-body{font-size:17px}.bp-body h2{font-size:25px;margin-top:44px}}

/* Tables scroll inside their own box; the page body never scrolls sideways. */
.bp-tbl{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:26px 0 30px;border:1px solid #E8E6F2;
  border-radius:16px;background:#fff;box-shadow:0 1px 2px rgba(16,24,40,.04);}
.bp-tbl table{border-collapse:collapse;width:100%;min-width:560px;font-size:15px;line-height:1.5;}
.bp-tbl th,.bp-tbl td{padding:12px 16px;text-align:left;vertical-align:top;border-bottom:1px solid #F1F0F8;}
.bp-tbl thead th{font:600 11.5px/1.3 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.08em;
  text-transform:uppercase;color:#746D96;background:#F7F6FC;border-bottom:1px solid #E8E6F2;}
.bp-tbl tbody tr:last-child td{border-bottom:0;}
.bp-tbl tbody tr:hover td{background:#FBFAFF;}
.bp-tbl td[align="right"],.bp-tbl th[align="right"]{text-align:right;font-family:'JetBrains Mono',ui-monospace,monospace;font-size:14px;}

/* ---------- FAQ ---------- */
.bp-faq{margin:56px 0 0;}
.bp-faq h2{font-size:31px;letter-spacing:-.03em;font-weight:800;margin:0 0 18px;scroll-margin-top:96px;}
.bp-faq-item{border:1px solid #E8E6F2;border-radius:14px;background:#fff;margin:0 0 10px;transition:box-shadow .25s,border-color .25s;}
.bp-faq-item[open]{border-color:#D6D3F7;box-shadow:0 8px 24px rgba(43,42,224,.07);}
.bp-faq-item summary{list-style:none;cursor:pointer;padding:17px 52px 17px 20px;position:relative;
  font-weight:650;font-size:17px;line-height:1.4;color:#161232;}
.bp-faq-item summary::-webkit-details-marker{display:none;}
.bp-faq-item summary::after{content:"";position:absolute;right:20px;top:50%;width:10px;height:10px;
  border-right:2px solid #2B2AE0;border-bottom:2px solid #2B2AE0;transform:translateY(-70%) rotate(45deg);transition:transform .25s;}
.bp-faq-item[open] summary::after{transform:translateY(-30%) rotate(-135deg);}
.bp-faq-a{padding:0 20px 16px;font-size:16.5px;line-height:1.7;color:#453F63;}
.bp-faq-a p{margin:0 0 10px;}

/* ---------- product box ---------- */
.bp-cta{position:relative;margin:56px 0 8px;border-radius:24px;overflow:hidden;color:#fff;
  background:radial-gradient(520px 260px at 100% 0%,rgba(160,127,224,.45),transparent 70%),
             radial-gradient(480px 260px at 0% 100%,rgba(55,195,154,.22),transparent 70%),#161232;}
.bp-cta-in{position:relative;padding:34px 34px 32px;}
.bp-cta-lab{display:block;font:500 11px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.13em;text-transform:uppercase;color:#C9C8FF;margin-bottom:12px;}
.bp-cta h2{color:#fff;font-size:29px;line-height:1.15;letter-spacing:-.03em;margin:0 0 12px;}
.bp-cta p{color:#D9D6F2;font-size:16.5px;line-height:1.65;margin:0 0 22px;max-width:600px;}
.bp-cta-row{display:flex;flex-wrap:wrap;gap:10px;}
.bp-btn{display:inline-flex;align-items:center;justify-content:center;height:46px;padding:0 20px;border-radius:11px;
  font-weight:700;font-size:15px;text-decoration:none;transition:transform .2s,background .2s,box-shadow .2s;}
.bp-btn:hover{transform:translateY(-1px);}
.bp-btn-primary{background:#fff;color:#161232;box-shadow:0 8px 22px rgba(0,0,0,.25);}
.bp-btn-ghost{color:#fff;border:1px solid rgba(255,255,255,.28);}
.bp-btn-ghost:hover{background:rgba(255,255,255,.08);}

/* ---------- related + index cards ---------- */
.bp-related{padding:56px 0 72px;border-top:1px solid #EFEDF7;background:#fff;}
.bp-related h2{font-size:27px;letter-spacing:-.03em;margin:0 0 22px;}
.bl-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;}
@media (max-width:980px){.bl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.bl-grid{grid-template-columns:1fr}}
.bl-card{position:relative;display:flex;flex-direction:column;text-decoration:none;background:#fff;
  border:1px solid #E8E6F2;border-radius:18px;padding:24px 22px 20px;overflow:hidden;
  box-shadow:0 1px 2px rgba(16,24,40,.04);transition:transform .3s cubic-bezier(.22,1,.36,1),box-shadow .3s,border-color .3s;}
.bl-card::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--cat,#2B2AE0);
  transform:scaleX(.18);transform-origin:0 50%;transition:transform .45s cubic-bezier(.22,1,.36,1);}
.bl-card:hover{transform:translateY(-4px);border-color:#DCD9F3;box-shadow:0 18px 40px rgba(22,18,50,.09);}
.bl-card:hover::before{transform:scaleX(1);}
.bl-cat{font:600 11px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.11em;text-transform:uppercase;color:var(--cat,#2B2AE0);}
.bl-card h3{font-size:21px;line-height:1.22;letter-spacing:-.02em;font-weight:750;margin:12px 0 10px;}
.bl-card p{font-size:15px;line-height:1.6;color:#5F5980;margin:0 0 18px;flex:1;}
.bl-meta{font-size:13px;color:#8A84A8;}
.bl-card[hidden]{display:none!important;}

html.js .bl-card.bl-reveal{opacity:0;transform:translateY(16px);}
html.js .bl-card.bl-reveal.in{opacity:1;transform:none;
  transition:opacity .6s cubic-bezier(.22,1,.36,1),transform .6s cubic-bezier(.22,1,.36,1),box-shadow .3s,border-color .3s;
  transition-delay:calc(var(--d,0) * 70ms),calc(var(--d,0) * 70ms),0s,0s;}
html.js .bl-card.bl-reveal.in:hover{transform:translateY(-4px);transition-delay:0s;}

/* ---------- blog index ---------- */
.bl-hero{position:relative;overflow:hidden;padding:76px 0 34px;
  background:linear-gradient(180deg,#F2F2FF,#FBFAFE);}
.bl-hero::before,.bl-hero::after{content:"";position:absolute;border-radius:50%;filter:blur(60px);opacity:.55;pointer-events:none;}
.bl-hero::before{width:460px;height:460px;left:-120px;top:-220px;background:#C9C8FF;}
.bl-hero::after{width:380px;height:380px;right:-90px;top:-120px;background:#E4D6FA;}
html.js .bl-hero::before{animation:bl-drift 16s ease-in-out infinite alternate;}
html.js .bl-hero::after{animation:bl-drift 19s ease-in-out infinite alternate-reverse;}
@keyframes bl-drift{to{transform:translate(60px,40px) scale(1.08)}}
.bl-hero .bp-wrap{position:relative;z-index:1;}
.bl-eyebrow{display:inline-block;font:600 11.5px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.14em;
  text-transform:uppercase;color:#2B2AE0;margin-bottom:18px;}
.bl-hero h1{font-size:60px;line-height:1.02;letter-spacing:-.05em;font-weight:800;margin:0 0 18px;max-width:880px;text-wrap:balance;}
.bl-lede{font-size:19px;line-height:1.6;color:#453F63;max-width:760px;margin:0 0 28px;}
.bl-chips{display:flex;flex-wrap:wrap;gap:8px;}
.bl-chip{font:600 14px/1 'Instrument Sans',system-ui,sans-serif;color:#453F63;background:#fff;border:1px solid #E1DEF0;
  border-radius:99px;padding:10px 15px;cursor:pointer;transition:background .2s,color .2s,border-color .2s,transform .2s;}
.bl-chip:hover{transform:translateY(-1px);border-color:#CFCBEA;}
.bl-chip.is-on{background:#161232;color:#fff;border-color:#161232;}
@media (max-width:720px){.bl-hero{padding:48px 0 26px}.bl-hero h1{font-size:38px}.bl-lede{font-size:17px}}

.bl-main{padding-top:26px;padding-bottom:84px;}
.bl-feature{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:28px;align-items:center;
  text-decoration:none;background:#fff;border:1px solid #E8E6F2;border-radius:24px;padding:34px;margin:0 0 22px;
  box-shadow:0 20px 50px rgba(22,18,50,.07);transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .35s;}
.bl-feature:hover{transform:translateY(-3px);box-shadow:0 26px 60px rgba(22,18,50,.11);}
.bl-feature h2{font-size:36px;line-height:1.08;letter-spacing:-.04em;margin:14px 0 14px;}
.bl-feature p{font-size:16.5px;line-height:1.65;color:#5F5980;margin:0 0 20px;}
.bl-read{display:inline-flex;align-items:center;gap:8px;font-weight:700;color:#2B2AE0;}
.bl-read svg{width:18px;height:18px;transition:transform .25s;}
.bl-feature:hover .bl-read svg{transform:translateX(4px);}
.bl-feature-fig.sfig{margin:0;border:0;box-shadow:none;background:radial-gradient(circle at 50% 45%,#F1F0FF,#FBFAFE 70%);border-radius:18px;}
.bl-feature[hidden]{display:none!important;}
@media (max-width:860px){.bl-feature{grid-template-columns:1fr;padding:24px}.bl-feature h2{font-size:28px}}

@media (prefers-reduced-motion:reduce){
  html.js .bp-hero h1,html.js .bp-hero .bp-dek,html.js .bp-hero .bp-meta{opacity:1;transform:none;animation:none;}
  html.js .bl-card.bl-reveal{opacity:1;transform:none;}
  html.js .bl-hero::before,html.js .bl-hero::after{animation:none;}
  .bl-card,.bl-feature,.bl-chip,.bp-btn{transition:none;}
}
