---
updatedAt: 2026-09-17T10:41:56.000Z
agentTools:
  projectIndex: https://docs.sixfab.com/llms.txt
---

# Overview

<HTMLBlock>{`
<style>
/* === FONTS ============================================================== */
@font-face { font-family:'Gilroy'; src:url('https://sixfab.com/wp-content/fonts/Gilroy-Regular.woff2')   format('woff2'); font-weight:400; font-display:swap; }
@font-face { font-family:'Gilroy'; src:url('https://sixfab.com/wp-content/fonts/Gilroy-Medium.woff2')    format('woff2'); font-weight:500; font-display:swap; }
@font-face { font-family:'Gilroy'; src:url('https://sixfab.com/wp-content/fonts/Gilroy-SemiBold.woff2')  format('woff2'); font-weight:600; font-display:swap; }
@font-face { font-family:'Gilroy'; src:url('https://sixfab.com/wp-content/fonts/Gilroy-Bold.woff2')      format('woff2'); font-weight:700; font-display:swap; }
@font-face { font-family:'Gilroy'; src:url('https://sixfab.com/wp-content/fonts/Gilroy-ExtraBold.woff2') format('woff2'); font-weight:800; font-display:swap; }
@font-face { font-family:'JetBrains Mono'; src:url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono@2.304/fonts/webfonts/JetBrainsMono-Regular.woff2') format('woff2'); font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'JetBrains Mono'; src:url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono@2.304/fonts/webfonts/JetBrainsMono-Medium.woff2') format('woff2'); font-weight:500; font-style:normal; font-display:swap; }

/* === DESIGN TOKENS (Tier 1-6, scoped to .exp-doc) ======================= */
.exp-doc {
  /* Tier 1: Core Brand */
  --primary:       #034860;
  --secondary:     #00E0B8;
  --tertiary:      #1B2D45;
  --neutral:       #E8F5F0;

  /* Tier 2: Neutral & Interface */
  --white:         #FFFFFF;
  --light:         #F6F8F9;
  --line:          #DDE6EC;
  --slate-light:   #94A8B5;
  --slate:         #52667A;
  --deep-ink:      #10202E;

  /* Tier 3: AI / Product Accent */
  --ai-iris:       #6B47F0;
  --ai-mist:       #F0EDFF;

  /* Tier 5: Semantic / Status */
  --success:       #00B894;
  --warning:       #F59E0B;
  --danger:        #DC2626;
  --info:          #429CBF;
  --success-text:  #047857;
  --warning-text:  #92400E;
  --danger-text:   #B91C1C;
  --info-text:     #0E4A66;
  --success-bg:    #E0F5EE;
  --warning-bg:    #FDF1DC;
  --danger-bg:     #FBE5E5;
  --info-bg:       #DCEFF7;

  /* On-colors */
  --on-primary:    #FFFFFF;
  --on-secondary:  #1B2D45;
  --on-neutral:    #10202E;

  /* Spacing */
  --xs: 4px; --sm: 8px; --md: 16px; --lg: 24px; --xl: 32px;
  --2xl: 48px; --3xl: 64px;

  /* Radius */
  --r-sm: 4px; --r-md: 6px; --r-lg: 8px; --r-xl: 12px; --r-2xl: 16px; --r-full: 9999px;

  /* Shadows */
  --shadow-sm:    0 1px 2px rgba(10, 23, 33, 0.04);
  --shadow-md:    0 4px 12px rgba(10, 23, 33, 0.06);
  --shadow-lg:    0 8px 24px rgba(10, 23, 33, 0.08);
  --shadow-focus: 0 0 0 2px var(--white), 0 0 0 4px var(--secondary);

  /* Named gradients */
  --grad-neural:   linear-gradient(135deg, #1B2D45 0%, #6B47F0 55%, #00E0B8 100%);

  /* Fonts */
  --font-sans: 'Gilroy', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  --font-mono: 'JetBrains Mono', 'SFMono-Regular', Menlo, Consolas, monospace;

  /* Wrapper base: ReadMe's .markdown-body owns font-family otherwise, so the
     brand font has to be re-declared here. Fill the ReadMe content column. */
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  padding: 0 0 80px;
  width: 100%;
  max-width: none;
}

/* === BASE TYPOGRAPHY ==================================================== */
.exp-doc h1 {
  font-family: var(--font-sans);
  font-size: 3rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1.08;
  color: var(--deep-ink);
  margin: 0 0 16px;
}
.exp-doc h2 {
  font-family: var(--font-sans);
  font-size: 2.25rem;
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.15;
  color: var(--primary);
  margin: 64px 0 16px;
  padding: 0;
  border: 0;
}
.exp-doc h2:first-of-type { margin-top: 0; }
.exp-doc h3 {
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.2;
  color: var(--deep-ink);
  margin: 32px 0 12px;
}
.exp-doc h4 {
  font-size: 1.125rem;
  font-weight: 600;
  letter-spacing: -0.015em;
  line-height: 1.3;
  color: var(--deep-ink);
  margin: 24px 0 8px;
}
.exp-doc p {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  margin: 0 0 16px;
}
.exp-doc p:last-child { margin-bottom: 0; }
.exp-doc .sf-prose-justify { text-align: justify; hyphens: auto; }
.exp-doc strong { color: var(--deep-ink); font-weight: 700; }
.exp-doc ul, .exp-doc ol { padding-left: 24px; margin: 8px 0 16px; }
.exp-doc li { font-size: 1rem; line-height: 1.6; color: var(--deep-ink); margin-bottom: 6px; }
.exp-doc ul li::marker { color: var(--primary); }
.exp-doc a {
  color: var(--primary);
  text-decoration: none;
  /* No color transition: theme toggles would flash the light-mode ink on the
     dark surface for ~150 ms. */
}
.exp-doc a:hover { color: var(--deep-ink); text-decoration: underline; }
.exp-doc code {
  font-family: var(--font-mono);
  font-size: 0.875rem;
  background: var(--light);
  color: var(--primary);
  padding: 1px 5px;
  border-radius: var(--r-sm);
  border: 0;
}
.exp-doc hr { border: 0; height: 1px; background: var(--line); margin: 48px 0; }

/* === EYEBROW ============================================================ */
.sf-eyebrow {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--primary);
  display: block;
  margin-bottom: 12px;
}

/* === HERO (sf-hero--ai = Neural Field gradient) ========================= */
.sf-hero {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--xl);
  align-items: center;
  padding: var(--xl);
  margin: 0 0 48px;
  background: var(--light);
  border-radius: var(--r-2xl);
  overflow: hidden;
}
.sf-hero--ai {
  background: var(--grad-neural);
  color: var(--white);
}
.sf-hero--ai .sf-eyebrow     { color: var(--secondary); }
.sf-hero--ai code            { background: rgba(255,255,255,0.12); color: var(--secondary); }

.sf-hero__copy { min-width: 0; }
.exp-doc .sf-hero__title {
  font-size: 3rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1.08;
  color: var(--deep-ink);
  margin: 0 0 16px;
  font-family: var(--font-sans);
}
.exp-doc .sf-hero__lead {
  font-size: 1.125rem;
  line-height: 1.6;
  color: var(--deep-ink);
  margin: 0 0 20px;
  max-width: none;
  text-align: justify;
  hyphens: auto;
}
/* Neural Field gradient hero: white text must beat the scoped base rules
   above (same 2-class specificity, so it has to come later and scoped). */
.exp-doc .sf-hero--ai .sf-hero__title { color: var(--white); }
.exp-doc .sf-hero--ai .sf-hero__lead  { color: rgba(255,255,255,0.92); }
.sf-hero--ai .sf-hero__lead strong {
  color: var(--white);
  font-weight: 800;
}
.sf-hero__chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 24px; }
.sf-hero__cta   { display: flex; flex-wrap: wrap; gap: 12px; }

/* === META BAR =========================================================== */
.sf-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--slate);
  margin: 0 0 28px;
}
.sf-meta__badge {
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 0.75rem;
  padding: 3px 8px;
  border-radius: var(--r-sm);
  background: var(--light);
  color: var(--primary);
  border: 1px solid var(--line);
}
.sf-meta__sep { color: var(--line); }

/* === AEO BLOCK (sf-aeo--ai = question is the heading) ================== */
.sf-aeo {
  position: relative;
  background: var(--light);
  border: 1px solid var(--line);
  border-left: 4px solid var(--primary);
  border-radius: var(--r-md);
  padding: var(--lg) var(--xl);
  margin: 0 0 var(--xl);
}
.sf-aeo--ai {
  background: var(--ai-mist);
  border-color: rgba(107,71,240,0.20);
  border-left-color: var(--ai-iris);
}
.sf-aeo__label {
  display: block;
  font-family: var(--font-sans);
  font-size: 1.375rem;
  font-weight: 700;
  line-height: 1.25;
  letter-spacing: -0.015em;
  text-transform: none;
  color: var(--primary);
  margin: 0 0 var(--sm);
}
.sf-aeo--ai .sf-aeo__label { color: var(--ai-iris); }
.sf-aeo__text {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  margin: 0;
}
.sf-aeo__text strong { color: var(--primary); font-weight: 600; }
.sf-aeo--ai .sf-aeo__text strong { color: var(--ai-iris); }

/* === PILLS ============================================================== */
.sf-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 600;
  padding: 3px 8px;
  border-radius: var(--r-sm);
  background: var(--light);
  color: var(--deep-ink);
  border: 1px solid var(--line);
  white-space: nowrap;
  vertical-align: middle;
  line-height: 1.4;
}
.sf-pill--ai {
  background: var(--ai-iris);
  color: var(--white);
  border-color: var(--ai-iris);
  font-size: 0.875rem;
  font-weight: 700;
}
.sf-pill--brand {
  background: var(--primary);
  color: var(--on-primary);
  border-color: var(--primary);
}
/* On gradient hero: pills get a translucent dark surface */
.sf-hero--ai .sf-hero__chips .sf-pill {
  background: rgba(255,255,255,0.10);
  color: var(--white);
  border-color: rgba(255,255,255,0.18);
}
.sf-hero--ai .sf-hero__chips .sf-pill--ai {
  background: var(--white);
  color: var(--ai-iris);
  border-color: var(--white);
}

/* === BUTTONS ============================================================ */
.sf-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  font-weight: 600;
  line-height: 1;
  padding: 12px 20px;
  border-radius: var(--r-sm);
  text-decoration: none !important;
  border: 1px solid transparent;
  cursor: pointer;
  transition: background-color .15s, border-color .15s, transform .15s;
  white-space: nowrap;
}
.sf-btn .sf-icon { transition: transform .15s; }
.sf-btn:hover .sf-icon { transform: translateX(2px); }
.sf-btn:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
.sf-btn--mint    { background: var(--secondary); color: var(--on-secondary); }
.sf-btn--mint:hover { background: #00C8A4; }
.sf-btn--secondary-dark { background: var(--tertiary); color: var(--secondary); border-color: var(--secondary); padding: 11px 19px; }
.sf-btn--secondary { background: var(--white); color: var(--primary); border-color: var(--primary); padding: 11px 19px; }
.sf-btn--secondary:hover { background: var(--light); }
/* Hero CTA elevation + contrast: butonlar Neural Field gradient üzerinde her zaman ayırt edilebilsin */
.sf-hero--ai .sf-btn--mint,
.sf-hero--ai .sf-btn--secondary-dark {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18), 0 0 0 1px rgba(255, 255, 255, 0.06);
}
/* On the Neural Field gradient, the mint-on-navy contrast fails over the iris/mint stops.
   White text + white border is readable across the whole gradient. */
.sf-hero--ai .sf-btn--secondary-dark {
  background: rgba(255, 255, 255, 0.08);
  color: #FFFFFF;
  border-color: rgba(255, 255, 255, 0.45);
}
.sf-hero--ai .sf-btn--secondary-dark:hover,
.sf-hero--ai .sf-btn--secondary-dark:focus-visible {
  background: rgba(255, 255, 255, 0.20);
  color: #FFFFFF;
  border-color: #FFFFFF;
}

/* === SPEC BAR (under hero, replaces old wide spec strip) =============== */
.sf-spec-bar {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
  margin: 0 0 var(--2xl);
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  overflow: hidden;
}
.sf-spec-bar__item {
  padding: 18px 20px;
  border-right: 1px solid var(--line);
}
.sf-spec-bar__item:last-child { border-right: 0; }
.sf-spec-bar__label {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--slate);
  margin-bottom: 6px;
}
.sf-spec-bar__value {
  font-family: var(--font-sans);
  font-size: 1.5rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--primary);
  line-height: 1.1;
  margin-bottom: 2px;
}
.sf-spec-bar__sub {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--slate);
}

/* === FEATURE GRID ======================================================= */
.sf-feature-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px;
  margin: 18px 0 24px;
}
.sf-card {
  background: var(--white);
  color: var(--deep-ink);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 18px 20px;
  transition: border-color .15s, transform .15s;
}
.sf-card:hover { border-color: var(--slate-light); }
.sf-card--ai {
  background: var(--ai-mist);
  border: 1px solid rgba(107,71,240,.18);
  position: relative;
}
.sf-card--ai::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: var(--ai-iris);
  border-radius: var(--r-xl) var(--r-xl) 0 0;
}
.sf-feature {
  display: flex;
  gap: 14px;
  align-items: flex-start;
}
.sf-feature__icon {
  width: 36px;
  height: 36px;
  border-radius: var(--r-md);
  background: var(--light);
  color: var(--primary);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  border: 1px solid var(--line);
}
.sf-card--ai .sf-feature__icon {
  background: var(--white);
  color: var(--ai-iris);
  border-color: rgba(107,71,240,.18);
}
.sf-feature__title {
  font-size: 1rem;
  font-weight: 700;
  color: var(--deep-ink);
  margin-bottom: 4px;
  line-height: 1.3;
}
.sf-feature__desc {
  font-size: 0.875rem;
  color: var(--slate);
  line-height: 1.55;
}
.sf-feature__desc strong { color: var(--deep-ink); }

/* === SKU COMPARISON CARDS (MSRP row REMOVED per project decision) ====== */
.sf-sku-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin: 20px 0 8px;
}
.sf-sku {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.sf-sku--highlighted {
  background: var(--neutral);
  border: 2px solid var(--secondary);
}
.sf-sku__head {
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--line);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  min-height: 92px;
  box-sizing: border-box;
}
.sf-sku--highlighted .sf-sku__head { border-bottom-color: rgba(0,224,184,.30); }
.sf-sku__name {
  font-family: var(--font-sans);
  font-size: 1.125rem;
  font-weight: 700;
  color: var(--deep-ink);
  line-height: 1.25;
  margin-bottom: 2px;
}
.sf-sku__chip {
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--slate);
}
.sf-sku__badge {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: var(--r-sm);
  background: var(--secondary);
  color: var(--on-secondary);
  white-space: nowrap;
  flex-shrink: 0;
}
.sf-sku__badge--std {
  background: var(--light);
  color: var(--slate);
  border: 1px solid var(--line);
}
.sf-sku__body { padding: 14px 20px 18px; }
.sf-sku__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  min-height: 44px;
  box-sizing: border-box;
  border-bottom: 1px solid var(--line);
  font-size: 0.9375rem;
}
.sf-sku--highlighted .sf-sku__row { border-bottom-color: rgba(0,224,184,.20); }
.sf-sku__row:last-of-type { border-bottom: 0; }
.sf-sku__row-label {
  color: var(--slate);
  font-size: 0.8125rem;
}
.sf-sku__row-value {
  font-family: var(--font-sans);
  font-weight: 600;
  color: var(--deep-ink);
}
.sf-sku__row-value--accent { color: var(--primary); font-weight: 700; }
.sf-sku__note {
  margin-top: 14px;
  padding: 10px 12px;
  background: var(--light);
  border-radius: var(--r-md);
  font-size: 0.8125rem;
  color: var(--slate);
  line-height: 1.5;
}
.sf-sku--highlighted .sf-sku__note { background: rgba(255,255,255,.55); }
.sf-sku__note strong { color: var(--deep-ink); }

/* === SOFTWARE PATHS (Model Zoo / DXNN SDK) ============================= */
.sf-path-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin: 18px 0 8px;
}
a.sf-path {
  text-decoration: none !important;
  color: inherit;
  cursor: pointer;
}
.sf-path {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease;
}
a.sf-path:hover {
  border-color: var(--primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
a.sf-path.sf-path--ai:hover {
  border-color: var(--ai-iris);
  box-shadow: 0 4px 18px rgba(107,71,240,0.20);
}
.sf-path__head-row {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
}
.sf-path__head-arrow {
  color: var(--primary);
  flex-shrink: 0;
  margin-top: 2px;
  opacity: 0.55;
  transition: transform .15s ease, opacity .15s ease;
}
.sf-path--ai .sf-path__head-arrow { color: var(--ai-iris); }
a.sf-path:hover .sf-path__head-arrow {
  transform: translate(2px, -2px);
  opacity: 1;
}
.sf-path--ai {
  background: var(--ai-mist);
  border-color: rgba(107,71,240,.18);
  position: relative;
}
.sf-path--ai::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: var(--ai-iris);
}
.sf-path__head {
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--line);
}
.sf-path--ai .sf-path__head { border-bottom-color: rgba(107,71,240,.18); }
.sf-path__option {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--slate);
  margin-bottom: 4px;
}
.sf-path--ai .sf-path__option { color: var(--ai-iris); }
.sf-path__name {
  font-size: 1.125rem;
  font-weight: 700;
  color: var(--deep-ink);
  margin-bottom: 8px;
}
.sf-path__tag {
  display: inline-block;
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 600;
  padding: 3px 8px;
  border-radius: var(--r-sm);
  background: var(--success-bg);
  color: var(--success-text);
  border: 1px solid var(--success-bg);
}
.sf-path--ai .sf-path__tag {
  background: var(--white);
  color: var(--ai-iris);
  border-color: rgba(107,71,240,.20);
}
.sf-path__body { padding: 14px 20px 18px; flex: 1; }
.sf-path__body p {
  font-size: 0.9375rem;
  color: var(--deep-ink);
  margin-bottom: 10px;
  line-height: 1.55;
}
.sf-path__body ul { padding-left: 18px; margin: 8px 0 0; }
.sf-path__body li {
  font-size: 0.875rem;
  color: var(--deep-ink);
  margin-bottom: 6px;
  line-height: 1.5;
}
.sf-path__body li strong { color: var(--deep-ink); }

/* === PIPELINE / FLOW (vivid, modern, card-based) ======================== */
.sf-flow {
  margin: 18px 0 24px;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-2xl);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.sf-flow__head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 22px;
  background: var(--light);
  border-bottom: 1px solid var(--line);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--slate);
}
.sf-flow__head .sf-icon { color: var(--primary); }
.sf-flow__title { color: var(--primary); }
.sf-flow__steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  padding: 28px 22px 28px;
  position: relative;
}
.sf-flow__steps::before {
  content: '';
  position: absolute;
  top: 70px;
  left: 22px;
  right: 22px;
  height: 2px;
  background: linear-gradient(90deg,
    var(--primary) 0%,
    var(--primary) 35%,
    var(--ai-iris) 50%,
    var(--ai-iris) 65%,
    var(--secondary) 100%);
  border-radius: var(--r-full);
  opacity: 0.4;
  z-index: 0;
}
.sf-flow__step {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 0 6px;
}
.sf-flow__icon {
  width: 64px;
  height: 64px;
  border-radius: var(--r-full);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--white);
  color: var(--primary);
  border: 2px solid var(--primary);
  margin-bottom: 14px;
  box-shadow: 0 0 0 6px var(--white), 0 4px 14px rgba(3,72,96,0.18);
  transition: transform .2s ease, box-shadow .2s ease;
}
.sf-flow__step:hover .sf-flow__icon {
  transform: translateY(-3px);
  box-shadow: 0 0 0 6px var(--white), 0 8px 20px rgba(3,72,96,0.28);
}
.sf-flow__step--ai .sf-flow__icon {
  color: var(--ai-iris);
  border-color: var(--ai-iris);
  background: var(--white);
  box-shadow: 0 0 0 6px var(--white), 0 4px 14px rgba(107,71,240,0.30);
}
.sf-flow__step--ai:hover .sf-flow__icon {
  box-shadow: 0 0 0 6px var(--white), 0 8px 22px rgba(107,71,240,0.45);
}
.sf-flow__num {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--slate);
  margin-bottom: 6px;
}
.sf-flow__step--ai .sf-flow__num { color: var(--ai-iris); }
.sf-flow__step-title {
  font-family: var(--font-sans);
  font-size: 1rem;
  font-weight: 700;
  color: var(--deep-ink);
  margin-bottom: 6px;
  line-height: 1.3;
  letter-spacing: -0.01em;
}
.sf-flow__step-desc {
  font-size: 0.8125rem;
  color: var(--slate);
  line-height: 1.5;
  max-width: 180px;
}
.sf-flow__foot {
  padding: 16px 22px;
  background: var(--info-bg);
  border-top: 1px solid var(--line);
  display: flex;
  gap: 12px;
  align-items: flex-start;
}
.sf-flow__foot-icon { color: var(--info-text); flex-shrink: 0; margin-top: 2px; }
.sf-flow__foot-title {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--info-text);
  margin-bottom: 4px;
}
.sf-flow__foot-text {
  font-size: 0.9375rem;
  color: var(--deep-ink);
  line-height: 1.55;
}
.sf-flow__foot-text strong { color: var(--deep-ink); }

/* === CALLOUT (Tier 5 + AI) ============================================= */
.sf-callout {
  display: flex;
  flex-direction: column;
  gap: 6px;
  border-radius: var(--r-md);
  padding: 14px 18px;
  margin: 20px 0;
  border-left: 4px solid;
}
.sf-callout__header {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 0.875rem;
  font-weight: 700;
  line-height: 1;
}
.sf-callout__content {
  font-size: 0.9375rem;
  line-height: 1.6;
  color: var(--deep-ink);
}
.sf-callout__content p { margin: 0 0 6px; font-size: 0.9375rem; color: inherit; }
.sf-callout__content p:last-child { margin-bottom: 0; }
.sf-callout__content code {
  background: rgba(0,0,0,0.06);
  border: 0;
}
.sf-callout--info     { background: var(--info-bg);    border-left-color: var(--info); }
.sf-callout--info     .sf-callout__header { color: var(--info-text); }
.sf-callout--success  { background: var(--success-bg); border-left-color: var(--success); }
.sf-callout--success  .sf-callout__header { color: var(--success-text); }
.sf-callout--warning  { background: var(--warning-bg); border-left-color: var(--warning); }
.sf-callout--warning  .sf-callout__header { color: var(--warning-text); }
.sf-callout--ai       { background: var(--ai-mist);    border-left-color: var(--ai-iris); }
.sf-callout--ai       .sf-callout__header { color: var(--ai-iris); }

/* === USE CASE GRID ===================================================== */
.sf-use-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
  margin: 18px 0;
}
.sf-use {
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 16px 18px;
  background: var(--white);
  display: flex;
  gap: 12px;
  align-items: flex-start;
  transition: border-color .15s;
}
.sf-use:hover { border-color: var(--slate-light); }
.sf-use__icon {
  width: 32px;
  height: 32px;
  border-radius: var(--r-md);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: var(--light);
  color: var(--primary);
  border: 1px solid var(--line);
}
.sf-use__title {
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--deep-ink);
  margin-bottom: 4px;
  line-height: 1.3;
}
.sf-use__desc {
  font-size: 0.8125rem;
  color: var(--slate);
  line-height: 1.55;
}

/* === COMPATIBILITY BLOCK ================================================ */
.sf-compat {
  margin: 16px 0 24px;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  overflow: hidden;
}
.sf-compat__head {
  padding: 12px 20px;
  background: var(--light);
  border-bottom: 1px solid var(--line);
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--primary);
}
.sf-compat__cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0;
}
.sf-compat__col {
  padding: 18px 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.sf-compat__col + .sf-compat__col {
  border-left: 1px solid var(--line);
}
.sf-compat__col-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  font-weight: 700;
}
.sf-compat__col--yes .sf-compat__col-head { color: var(--success-text); }
.sf-compat__col--no  .sf-compat__col-head { color: var(--danger-text); }
.sf-compat__col-head .sf-compat__dot {
  width: 18px;
  height: 18px;
  border-radius: var(--r-full);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.sf-compat__col--yes .sf-compat__dot { background: var(--success-bg); color: var(--success-text); }
.sf-compat__col--no  .sf-compat__dot { background: var(--danger-bg);  color: var(--danger-text); }
.sf-compat__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.sf-compat__list li {
  font-size: 0.9375rem;
  line-height: 1.5;
  color: var(--deep-ink);
  margin: 0;
}
.sf-compat__list li strong { color: var(--deep-ink); }
.sf-compat__note {
  padding: 12px 20px;
  background: var(--info-bg);
  border-top: 1px solid var(--line);
  display: flex;
  gap: 10px;
  align-items: flex-start;
}
.sf-compat__note-icon { color: var(--info-text); flex-shrink: 0; margin-top: 1px; }
.sf-compat__note-text {
  font-size: 0.875rem;
  color: var(--info-text);
  line-height: 1.55;
}
.sf-compat__note-text strong { color: var(--info-text); font-weight: 700; }
.sf-compat__note-text a { color: var(--info-text); text-decoration: underline; }

@media (max-width: 640px) {
  .sf-compat__cols { grid-template-columns: 1fr; }
  .sf-compat__col + .sf-compat__col { border-left: 0; border-top: 1px solid var(--line); }
}

/* === BRING-UP KIT ======================================================= */
.sf-kit {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 14px;
  margin: 18px 0 24px;
}
.sf-kit__item {
  position: relative;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 18px 20px 20px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: border-color .15s, transform .15s, box-shadow .15s;
  overflow: hidden;
}
.sf-kit__item::before {
  content: '';
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  height: 3px;
  background: var(--line);
  transition: height .15s ease;
}
.sf-kit__item:hover {
  border-color: var(--slate-light);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.sf-kit__item--required::before    { background: var(--primary); }
.sf-kit__item--recommended::before { background: var(--success);  }
.sf-kit__item--included::before    { background: var(--info);     }

.sf-kit__item-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  margin-top: 4px;
}
.sf-kit__name {
  font-family: var(--font-sans);
  font-size: 1rem;
  font-weight: 700;
  color: var(--deep-ink);
  line-height: 1.3;
  letter-spacing: -0.01em;
  flex: 1;
  min-width: 0;
}
.sf-kit__pill {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 4px 9px;
  border-radius: var(--r-full);
  white-space: nowrap;
  flex-shrink: 0;
  line-height: 1;
}
.sf-kit__item--required .sf-kit__pill {
  background: var(--primary);
  color: var(--on-primary);
}
.sf-kit__item--recommended .sf-kit__pill {
  background: var(--success-bg);
  color: var(--success-text);
  border: 1px solid rgba(0,184,148,0.30);
}
.sf-kit__item--included .sf-kit__pill {
  background: var(--info-bg);
  color: var(--info-text);
  border: 1px solid rgba(31,142,205,0.30);
}
.sf-kit__desc {
  font-size: 0.875rem;
  color: var(--slate);
  line-height: 1.55;
}
.sf-kit__desc strong { color: var(--deep-ink); font-weight: 600; }

/* === BRING-UP KIT · TWO COLUMNS ("In the box" / "You'll also need") ===== */
.sf-kit-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  margin: 18px 0 24px;
}
.sf-kit-col {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-2xl);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.sf-kit-col__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 20px;
  background: var(--light);
  border-bottom: 1px solid var(--line);
}
.sf-kit-col--included .sf-kit-col__head {
  background: var(--info-bg);
  border-bottom-color: rgba(31,142,205,0.20);
}
.sf-kit-col--byo .sf-kit-col__head {
  background: var(--neutral);
  border-bottom-color: rgba(0,224,184,0.22);
}
.sf-kit-col__title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--deep-ink);
  letter-spacing: -0.01em;
}
.sf-kit-col__title-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: var(--r-md);
  flex-shrink: 0;
}
.sf-kit-col--included .sf-kit-col__title-icon {
  background: rgba(31,142,205,0.18);
  color: var(--info-text);
}
.sf-kit-col--byo .sf-kit-col__title-icon {
  background: rgba(0,184,148,0.18);
  color: var(--success-text);
}
.sf-kit-col__count {
  font-family: var(--font-sans);
  font-size: 0.6875rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--slate);
  padding: 3px 9px;
  border-radius: var(--r-full);
  background: var(--white);
  border: 1px solid var(--line);
}
.sf-kit-col__list {
  list-style: none;
  padding: 0;
  margin: 0;
  flex: 1;
}
.sf-kit-col__item {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 14px;
  padding: 14px 20px;
  border-bottom: 1px solid var(--line);
  align-items: flex-start;
}
.sf-kit-col__item:last-child { border-bottom: 0; }
.sf-kit-col__num {
  font-family: var(--font-mono);
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--slate);
  letter-spacing: 0;
  background: var(--light);
  padding: 3px 8px;
  border-radius: var(--r-sm);
  line-height: 1.4;
  min-width: 28px;
  text-align: center;
  flex-shrink: 0;
}
.sf-kit-col--byo .sf-kit-col__num {
  background: var(--neutral);
  color: var(--primary);
}
.sf-kit-col__body {
  min-width: 0;
}
.sf-kit-col__name {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--deep-ink);
  line-height: 1.3;
  letter-spacing: -0.01em;
  margin-bottom: 4px;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.sf-kit-col__optional {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 2px 7px;
  border-radius: var(--r-full);
  background: var(--light);
  color: var(--slate);
  border: 1px solid var(--line);
  line-height: 1.2;
}
.sf-kit-col__variant {
  font-family: var(--font-sans);
  font-size: 0.625rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 2px 7px;
  border-radius: var(--r-full);
  background: var(--ai-mist);
  color: var(--ai-iris);
  border: 1px solid rgba(107, 71, 240, 0.2);
  line-height: 1.2;
}
.sf-kit-col__spec {
  font-family: var(--font-mono);
  font-size: 0.75rem;
  color: var(--slate);
  line-height: 1.5;
}
.sf-kit-col__spec strong { color: var(--deep-ink); font-weight: 600; font-family: var(--font-sans); }
.sf-kit-col__hint {
  font-size: 0.8125rem;
  color: var(--slate);
  line-height: 1.5;
  margin-top: 2px;
}
.sf-kit-col__hint strong { color: var(--deep-ink); font-weight: 600; }

@media (max-width: 820px) {
  .sf-kit-cols { grid-template-columns: 1fr; gap: 14px; }
}
@media (max-width: 480px) {
  .sf-kit-col__item { grid-template-columns: 1fr; gap: 6px; }
  .sf-kit-col__num { justify-self: start; }
}

/* === CAPABILITY BOUNDARIES (Cornerstone §2.4) ========================== */
/* Card grid pattern. */
.sf-bounds {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin: 18px 0 24px;
}
@media (max-width: 720px)  { .sf-bounds { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px)  { .sf-bounds { grid-template-columns: 1fr; } }

.sf-bound {
  position: relative;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 20px 22px 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: border-color .15s, transform .15s, box-shadow .15s;
  overflow: hidden;
}
.sf-bound::before {
  content: '';
  position: absolute;
  top: 0; left: 0;
  width: 100%;
  height: 3px;
  background: var(--warning);
  opacity: 0.85;
}
.sf-bound:hover {
  border-color: var(--slate-light);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.sf-bound__icon {
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-md);
  background: var(--warning-bg);
  color: var(--warning-text);
  flex-shrink: 0;
}
.sf-bound__label {
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  font-weight: 700;
  color: var(--deep-ink);
  line-height: 1.3;
  letter-spacing: -0.01em;
}
.sf-bound__desc {
  font-size: 0.875rem;
  color: var(--slate);
  line-height: 1.6;
  text-align: justify;
  hyphens: auto;
}
.sf-bound__desc strong { color: var(--deep-ink); font-weight: 600; }

/* === LOCKUP FOOTER ===================================================== */
.sf-lockup {
  margin: var(--2xl) 0 0;
  padding: var(--xl);
  background: var(--tertiary);
  border-radius: var(--r-2xl);
  text-align: center;
  color: rgba(255, 255, 255, 0.92);
}
.sf-lockup__eyebrow {
  font-family: var(--font-sans);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--secondary);
  margin-bottom: 12px;
  display: block;
}
.sf-lockup__line {
  font-family: var(--font-sans);
  font-size: 1.5rem;
  font-weight: 700;
  color: #FFFFFF;
  margin-bottom: 6px;
  letter-spacing: -0.015em;
}
.exp-doc .sf-lockup__sub {
  font-size: 0.9375rem;
  color: #FFFFFF;
  margin: 0 auto;
  line-height: 1.55;
  text-align: center;
}

/* === RELATED GRID ======================================================= */
.sf-related { margin: 64px 0 0; }
.sf-related h2 { margin-top: 0; }
.sf-related__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 14px;
  margin-top: 16px;
}
.sf-related__card {
  display: grid;
  grid-template-columns: 40px 1fr;
  grid-template-rows: auto auto;
  column-gap: 14px;
  row-gap: 8px;
  align-items: center;
  text-decoration: none !important;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 18px 20px;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.sf-related__card:hover {
  border-color: var(--primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}
.sf-related__icon {
  grid-column: 1;
  grid-row: 1;
  width: 40px;
  height: 40px;
  border-radius: var(--r-md);
  background: var(--light);
  color: var(--primary);
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--line);
  margin: 0;
}
.sf-related__title {
  grid-column: 2;
  grid-row: 1;
  font-family: var(--font-sans);
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--deep-ink);
  line-height: 1.3;
  letter-spacing: -0.01em;
  align-self: center;
}
.sf-related__desc {
  grid-column: 1 / -1;
  grid-row: 2;
  font-size: 0.8125rem;
  color: var(--slate);
  line-height: 1.55;
}

/* === ICON BASE ========================================================= */
.sf-icon {
  display: inline-block;
  flex-shrink: 0;
  vertical-align: middle;
}

/* === DARK MODE (explicit) ============================================== */
[data-color-mode="dark"] .exp-doc {
  --primary:       #034860;
  --secondary:     #00E0B8;
  --tertiary:      #1B2D45;
  --neutral:       #E8F5F0;
  --white:         #FFFFFF;
  --light:         #14222F;
  --line:          #2A3A4D;
  --slate-light:   #94A8B5;
  --slate:         #B5C3CE;
  --deep-ink:      #E8F5F0;
  --success-bg:    #052E1B;
  --warning-bg:    #2A1F05;
  --danger-bg:     #2A0E0E;
  --info-bg:       #0A2E3F;
  --success-text:  #34D399;
  --warning-text:  #FBBF24;
  --danger-text:   #F87171;
  --info-text:     #5CD3EE;
  --shadow-sm: 0 1px 2px rgba(0,0,0,.30);
  --shadow-md: 0 4px 12px rgba(0,0,0,.40);
  background: var(--tertiary);
}
[data-color-mode="dark"] .exp-doc h2 { color: var(--secondary); }
[data-color-mode="dark"] .exp-doc h3,
[data-color-mode="dark"] .exp-doc h4 { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc p,
[data-color-mode="dark"] .exp-doc li { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc strong { color: var(--white); }
[data-color-mode="dark"] .exp-doc a { color: var(--secondary); }
/* Hero CTA buttons: the dark anchor rule above and ReadMe's own
   .markdown-body a rule both out-specify .sf-btn--mint, which renders the
   mint button mint-on-mint. Four-class selectors win back the button ink. */
[data-color-mode="dark"] .exp-doc .sf-hero__cta a { color: var(--white); }
[data-color-mode="dark"] .exp-doc .sf-hero__cta .sf-btn--mint { color: var(--on-secondary); }
[data-color-mode="dark"] .exp-doc .sf-lockup__sub { color: #FFFFFF; }
[data-color-mode="dark"] .exp-doc code {
  background: rgba(255,255,255,0.06);
  color: var(--secondary);
}
[data-color-mode="dark"] .exp-doc .sf-card,
[data-color-mode="dark"] .exp-doc .sf-sku,
[data-color-mode="dark"] .exp-doc .sf-path,
[data-color-mode="dark"] .exp-doc .sf-use,
[data-color-mode="dark"] .exp-doc .sf-related__card,
[data-color-mode="dark"] .exp-doc .sf-flow,
[data-color-mode="dark"] .exp-doc .sf-spec-bar {
  background: rgba(255,255,255,0.06);
  border-color: rgba(255,255,255,0.08);
}
[data-color-mode="dark"] .exp-doc .sf-feature__icon,
[data-color-mode="dark"] .exp-doc .sf-related__icon,
[data-color-mode="dark"] .exp-doc .sf-use__icon,
[data-color-mode="dark"] .exp-doc .sf-flow__icon {
  background: rgba(255,255,255,0.06);
  border-color: rgba(255,255,255,0.10);
  color: var(--secondary);
}
[data-color-mode="dark"] .exp-doc .sf-spec-bar__item { border-right-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"] .exp-doc .sf-spec-bar__value { color: var(--secondary); }
[data-color-mode="dark"] .exp-doc .sf-meta__badge {
  background: rgba(255,255,255,0.06);
  color: var(--secondary);
  border-color: rgba(255,255,255,0.08);
}
[data-color-mode="dark"] .exp-doc .sf-pill {
  background: rgba(255,255,255,0.06);
  color: var(--neutral);
  border-color: rgba(255,255,255,0.08);
}
[data-color-mode="dark"] .exp-doc .sf-aeo {
  background: rgba(255,255,255,0.04);
  border-color: rgba(255,255,255,0.08);
}
[data-color-mode="dark"] .exp-doc .sf-aeo--ai {
  background: rgba(107,71,240,.10);
  border-color: rgba(107,71,240,.30);
}
[data-color-mode="dark"] .exp-doc .sf-card--ai,
[data-color-mode="dark"] .exp-doc .sf-path--ai {
  background: rgba(107,71,240,.10);
  border-color: rgba(107,71,240,.30);
}
[data-color-mode="dark"] .exp-doc .sf-sku--highlighted {
  background: rgba(0,224,184,.08);
  border-color: var(--secondary);
}
[data-color-mode="dark"] .exp-doc .sf-compat,
[data-color-mode="dark"] .exp-doc .sf-kit__item {
  background: rgba(255,255,255,0.04);
  border-color: rgba(255,255,255,0.08);
}
[data-color-mode="dark"] .exp-doc .sf-compat__head {
  background: rgba(255,255,255,0.05);
  border-bottom-color: rgba(255,255,255,0.08);
  color: var(--secondary);
}
[data-color-mode="dark"] .exp-doc .sf-compat__col + .sf-compat__col {
  border-color: rgba(255,255,255,0.08);
}
[data-color-mode="dark"] .exp-doc .sf-compat__list li,
[data-color-mode="dark"] .exp-doc .sf-kit__name,
[data-color-mode="dark"] .exp-doc .sf-feature__title,
[data-color-mode="dark"] .exp-doc .sf-use__title,
[data-color-mode="dark"] .exp-doc .sf-related__title,
[data-color-mode="dark"] .exp-doc .sf-flow__step-title,
[data-color-mode="dark"] .exp-doc .sf-sku__name,
[data-color-mode="dark"] .exp-doc .sf-path__name { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc .sf-feature__desc,
[data-color-mode="dark"] .exp-doc .sf-use__desc,
[data-color-mode="dark"] .exp-doc .sf-related__desc,
[data-color-mode="dark"] .exp-doc .sf-flow__step-desc,
[data-color-mode="dark"] .exp-doc .sf-kit__desc,
[data-color-mode="dark"] .exp-doc .sf-sku__row-label,
[data-color-mode="dark"] .exp-doc .sf-flow__num { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-feature__desc strong,
[data-color-mode="dark"] .exp-doc .sf-kit__desc strong,
[data-color-mode="dark"] .exp-doc .sf-compat__list li strong { color: var(--white); }
/* sf-bound (capability boundaries): dark mode */
[data-color-mode="dark"] .exp-doc .sf-bound { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"] .exp-doc .sf-bound__icon { background: rgba(245,158,11,.14); color: #FBBF24; }
[data-color-mode="dark"] .exp-doc .sf-bound__label { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc .sf-bound__desc { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-bound__desc strong { color: var(--neutral); }
/* sf-kit-cols dark */
[data-color-mode="dark"] .exp-doc .sf-kit-col { background: var(--card-bg, #131A24); border-color: rgba(255,255,255,.08); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__head { background: rgba(255,255,255,.04); border-bottom-color: rgba(255,255,255,.08); }
[data-color-mode="dark"] .exp-doc .sf-kit-col--included .sf-kit-col__head { background: rgba(31,142,205,.14); border-bottom-color: rgba(31,142,205,.22); }
[data-color-mode="dark"] .exp-doc .sf-kit-col--byo .sf-kit-col__head { background: rgba(0,184,148,.14); border-bottom-color: rgba(0,184,148,.22); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__title { color: #F0F6FC; }
[data-color-mode="dark"] .exp-doc .sf-kit-col--included .sf-kit-col__title-icon { background: rgba(31,142,205,.24); color: #93C5FD; }
[data-color-mode="dark"] .exp-doc .sf-kit-col--byo .sf-kit-col__title-icon { background: rgba(0,184,148,.24); color: #4ADE80; }
[data-color-mode="dark"] .exp-doc .sf-kit-col__count { background: rgba(255,255,255,.06); color: var(--slate); border-color: rgba(255,255,255,.08); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__item { border-bottom-color: rgba(255,255,255,.06); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__name { color: #F0F6FC; }
[data-color-mode="dark"] .exp-doc .sf-kit-col__num { background: rgba(255,255,255,.06); color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-kit-col--byo .sf-kit-col__num { background: rgba(0,184,148,.18); color: #4ADE80; }
[data-color-mode="dark"] .exp-doc .sf-kit-col__spec { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__spec strong { color: #F0F6FC; }
[data-color-mode="dark"] .exp-doc .sf-kit-col__hint { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__hint strong { color: #F0F6FC; }
[data-color-mode="dark"] .exp-doc .sf-kit-col__optional { background: rgba(255,255,255,.06); color: var(--slate); border-color: rgba(255,255,255,.08); }
[data-color-mode="dark"] .exp-doc .sf-kit-col__variant { background: rgba(107, 71, 240, 0.18); color: #B8A6FF; border-color: rgba(107, 71, 240, 0.35); }
[data-color-mode="dark"] .exp-doc .sf-sku__row-value { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc .sf-sku__row-value--accent { color: var(--secondary); }
[data-color-mode="dark"] .exp-doc .sf-sku__row { border-bottom-color: rgba(255,255,255,0.06); }
[data-color-mode="dark"] .exp-doc .sf-sku__head { border-bottom-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"] .exp-doc .sf-sku__chip { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-sku__note {
  background: rgba(255,255,255,0.04);
  color: var(--slate);
}
[data-color-mode="dark"] .exp-doc .sf-sku__note strong { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc .sf-sku--highlighted .sf-sku__note { background: rgba(0,224,184,.10); color: var(--neutral); }
/* Mint code chips on the highlighted SKU's tinted note surface need a darker
   chip background to clear AA (4.21 -> 6.9). */
[data-color-mode="dark"] .exp-doc .sf-sku--highlighted code { background: rgba(0,0,0,0.28); }
[data-color-mode="dark"] .exp-doc .sf-path__head { background: rgba(255,255,255,0.04); border-bottom-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"] .exp-doc .sf-path__option { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-path__body p,
[data-color-mode="dark"] .exp-doc .sf-path__body li { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc .sf-flow__head { background: rgba(255,255,255,0.05); border-bottom-color: rgba(255,255,255,0.08); color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-flow__title { color: var(--secondary); }
[data-color-mode="dark"] .exp-doc .sf-spec-bar__label,
[data-color-mode="dark"] .exp-doc .sf-spec-bar__sub { color: var(--slate); }
[data-color-mode="dark"] .exp-doc .sf-aeo__text { color: var(--neutral); }
[data-color-mode="dark"] .exp-doc .sf-aeo__text strong { color: var(--secondary); }
[data-color-mode="dark"] .exp-doc .sf-aeo--ai .sf-aeo__label { color: #B59CFF; }
[data-color-mode="dark"] .exp-doc .sf-card--ai .sf-feature__icon { color: #B59CFF; }
[data-color-mode="dark"] .exp-doc .sf-path--ai .sf-path__option { color: #B59CFF; }
[data-color-mode="dark"] .exp-doc .sf-path--ai .sf-path__tag { background: rgba(255,255,255,.08); color: #B59CFF; border-color: rgba(181,156,255,.30); }
[data-color-mode="dark"] .exp-doc .sf-callout--ai .sf-callout__header { color: #B59CFF; }

[data-color-mode="dark"] .exp-doc .sf-compat__col--yes .sf-compat__col-head { color: #4ADE80; }
[data-color-mode="dark"] .exp-doc .sf-compat__col--no  .sf-compat__col-head { color: #FCA5A5; }
[data-color-mode="dark"] .exp-doc .sf-compat__col--yes .sf-compat__dot { background: rgba(0,184,148,.20); color: #4ADE80; }
[data-color-mode="dark"] .exp-doc .sf-compat__col--no  .sf-compat__dot { background: rgba(220,38,38,.22); color: #FCA5A5; }
[data-color-mode="dark"] .exp-doc .sf-compat__note {
  background: rgba(31,142,205,.16);
  border-top-color: rgba(255,255,255,.08);
}
[data-color-mode="dark"] .exp-doc .sf-compat__note-icon,
[data-color-mode="dark"] .exp-doc .sf-compat__note-text,
[data-color-mode="dark"] .exp-doc .sf-compat__note-text a,
[data-color-mode="dark"] .exp-doc .sf-compat__note-text strong { color: #93C5FD; }

[data-color-mode="dark"] .exp-doc .sf-kit__item--required    { border-left-color: var(--secondary); }
[data-color-mode="dark"] .exp-doc .sf-kit__item--required .sf-kit__pill { background: var(--secondary); color: var(--on-secondary); }
[data-color-mode="dark"] .exp-doc .sf-kit__item--recommended .sf-kit__pill { background: rgba(0,184,148,.20); color: #4ADE80; }
[data-color-mode="dark"] .exp-doc .sf-kit__item--included    { border-left-color: #79C0FF; }
[data-color-mode="dark"] .exp-doc .sf-kit__item--included .sf-kit__pill { background: rgba(31,142,205,.20); color: #93C5FD; }

[data-color-mode="dark"] .exp-doc .sf-flow__foot { background: rgba(31,142,205,.18); border-top-color: rgba(255,255,255,.08); }
[data-color-mode="dark"] .exp-doc .sf-flow__foot-title,
[data-color-mode="dark"] .exp-doc .sf-flow__foot-text,
[data-color-mode="dark"] .exp-doc .sf-flow__foot-text strong { color: #93C5FD; }
[data-color-mode="dark"] .exp-doc .sf-flow__foot-icon { color: #93C5FD; }
[data-color-mode="dark"] .exp-doc .sf-callout--info { background: rgba(31,142,205,.14); }
[data-color-mode="dark"] .exp-doc .sf-callout--info .sf-callout__header,
[data-color-mode="dark"] .exp-doc .sf-callout--info .sf-callout__content,
[data-color-mode="dark"] .exp-doc .sf-callout--info .sf-callout__content p { color: #93C5FD; }
[data-color-mode="dark"] .exp-doc .sf-callout--info .sf-callout__content strong { color: #BFDBFE; }
[data-color-mode="dark"] .exp-doc .sf-callout--success { background: rgba(0,184,148,.14); }
[data-color-mode="dark"] .exp-doc .sf-callout--success .sf-callout__header,
[data-color-mode="dark"] .exp-doc .sf-callout--success .sf-callout__content { color: #4ADE80; }
[data-color-mode="dark"] .exp-doc .sf-callout--warning { background: rgba(245,158,11,.14); }
[data-color-mode="dark"] .exp-doc .sf-callout--warning .sf-callout__header,
[data-color-mode="dark"] .exp-doc .sf-callout--warning .sf-callout__content { color: #FBBF24; }
[data-color-mode="dark"] .exp-doc .sf-callout--ai { background: rgba(107,71,240,.14); }
[data-color-mode="dark"] .exp-doc .sf-callout--ai .sf-callout__content { color: var(--neutral); }

/* === DARK MODE (system preference) ===================================== */
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .exp-doc {
    --primary:       #034860;
    --secondary:     #00E0B8;
    --tertiary:      #1B2D45;
    --neutral:       #E8F5F0;
    --white:         #FFFFFF;
    --light:         #14222F;
    --line:          #2A3A4D;
    --slate-light:   #94A8B5;
    --slate:         #B5C3CE;
    --deep-ink:      #E8F5F0;
    --success-bg:    #052E1B;
    --warning-bg:    #2A1F05;
    --danger-bg:     #2A0E0E;
    --info-bg:       #0A2E3F;
    --success-text:  #34D399;
    --warning-text:  #FBBF24;
    --danger-text:   #F87171;
    --info-text:     #5CD3EE;
    --shadow-sm: 0 1px 2px rgba(0,0,0,.30);
    --shadow-md: 0 4px 12px rgba(0,0,0,.40);
    background: var(--tertiary);
  }
  html:not([data-color-mode="light"]) .exp-doc h2 { color: var(--secondary); }
  html:not([data-color-mode="light"]) .exp-doc h3,
  html:not([data-color-mode="light"]) .exp-doc h4 { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc p,
  html:not([data-color-mode="light"]) .exp-doc li { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc strong { color: var(--white); }
  html:not([data-color-mode="light"]) .exp-doc a { color: var(--secondary); }
  /* Hero CTA buttons: the dark anchor rule above and ReadMe's own
     .markdown-body a rule both out-specify .sf-btn--mint, which renders the
     mint button mint-on-mint. Four-class selectors win back the button ink. */
  html:not([data-color-mode="light"]) .exp-doc .sf-hero__cta a { color: var(--white); }
  html:not([data-color-mode="light"]) .exp-doc .sf-hero__cta .sf-btn--mint { color: var(--on-secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-lockup__sub { color: #FFFFFF; }
  html:not([data-color-mode="light"]) .exp-doc code {
    background: rgba(255,255,255,0.06);
    color: var(--secondary);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-card,
  html:not([data-color-mode="light"]) .exp-doc .sf-sku,
  html:not([data-color-mode="light"]) .exp-doc .sf-path,
  html:not([data-color-mode="light"]) .exp-doc .sf-use,
  html:not([data-color-mode="light"]) .exp-doc .sf-related__card,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow,
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar {
    background: rgba(255,255,255,0.06);
    border-color: rgba(255,255,255,0.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-feature__icon,
  html:not([data-color-mode="light"]) .exp-doc .sf-related__icon,
  html:not([data-color-mode="light"]) .exp-doc .sf-use__icon,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__icon {
    background: rgba(255,255,255,0.06);
    border-color: rgba(255,255,255,0.10);
    color: var(--secondary);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__item { border-right-color: rgba(255,255,255,0.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__value { color: var(--secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-meta__badge {
    background: rgba(255,255,255,0.06);
    color: var(--secondary);
    border-color: rgba(255,255,255,0.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-pill {
    background: rgba(255,255,255,0.06);
    color: var(--neutral);
    border-color: rgba(255,255,255,0.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-aeo {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-aeo--ai {
    background: rgba(107,71,240,.10);
    border-color: rgba(107,71,240,.30);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-card--ai,
  html:not([data-color-mode="light"]) .exp-doc .sf-path--ai {
    background: rgba(107,71,240,.10);
    border-color: rgba(107,71,240,.30);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku--highlighted {
    background: rgba(0,224,184,.08);
    border-color: var(--secondary);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat,
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__item {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__head {
    background: rgba(255,255,255,0.05);
    border-bottom-color: rgba(255,255,255,0.08);
    color: var(--secondary);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__col + .sf-compat__col {
    border-color: rgba(255,255,255,0.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__list li,
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__name,
  html:not([data-color-mode="light"]) .exp-doc .sf-feature__title,
  html:not([data-color-mode="light"]) .exp-doc .sf-use__title,
  html:not([data-color-mode="light"]) .exp-doc .sf-related__title,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__step-title,
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__name,
  html:not([data-color-mode="light"]) .exp-doc .sf-path__name { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc .sf-feature__desc,
  html:not([data-color-mode="light"]) .exp-doc .sf-use__desc,
  html:not([data-color-mode="light"]) .exp-doc .sf-related__desc,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__step-desc,
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__desc,
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__row-label,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__num { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-feature__desc strong,
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__desc strong,
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__list li strong { color: var(--white); }
  /* sf-bound (capability boundaries): auto-dark */
  html:not([data-color-mode="light"]) .exp-doc .sf-bound { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-bound__icon { background: rgba(245,158,11,.14); color: #FBBF24; }
  html:not([data-color-mode="light"]) .exp-doc .sf-bound__label { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc .sf-bound__desc { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-bound__desc strong { color: var(--neutral); }
  /* sf-kit-cols auto-dark */
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col { background: var(--card-bg, #131A24); border-color: rgba(255,255,255,.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__head { background: rgba(255,255,255,.04); border-bottom-color: rgba(255,255,255,.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col--included .sf-kit-col__head { background: rgba(31,142,205,.14); border-bottom-color: rgba(31,142,205,.22); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col--byo .sf-kit-col__head { background: rgba(0,184,148,.14); border-bottom-color: rgba(0,184,148,.22); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__title { color: #F0F6FC; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col--included .sf-kit-col__title-icon { background: rgba(31,142,205,.24); color: #93C5FD; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col--byo .sf-kit-col__title-icon { background: rgba(0,184,148,.24); color: #4ADE80; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__count { background: rgba(255,255,255,.06); color: var(--slate); border-color: rgba(255,255,255,.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__item { border-bottom-color: rgba(255,255,255,.06); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__name { color: #F0F6FC; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__num { background: rgba(255,255,255,.06); color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col--byo .sf-kit-col__num { background: rgba(0,184,148,.18); color: #4ADE80; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__spec { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__spec strong { color: #F0F6FC; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__hint { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__hint strong { color: #F0F6FC; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__optional { background: rgba(255,255,255,.06); color: var(--slate); border-color: rgba(255,255,255,.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit-col__variant { background: rgba(107, 71, 240, 0.18); color: #B8A6FF; border-color: rgba(107, 71, 240, 0.35); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__row-value { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__row-value--accent { color: var(--secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__row { border-bottom-color: rgba(255,255,255,0.06); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__head { border-bottom-color: rgba(255,255,255,0.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__chip { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__note {
    background: rgba(255,255,255,0.04);
    color: var(--slate);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku__note strong { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc .sf-sku--highlighted .sf-sku__note { background: rgba(0,224,184,.10); color: var(--neutral); }
  /* Mint code chips on the highlighted SKU's tinted note surface need a darker
     chip background to clear AA (4.21 -> 6.9). */
  html:not([data-color-mode="light"]) .exp-doc .sf-sku--highlighted code { background: rgba(0,0,0,0.28); }
  html:not([data-color-mode="light"]) .exp-doc .sf-path__head { background: rgba(255,255,255,0.04); border-bottom-color: rgba(255,255,255,0.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-path__option { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-path__body p,
  html:not([data-color-mode="light"]) .exp-doc .sf-path__body li { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__head { background: rgba(255,255,255,0.05); border-bottom-color: rgba(255,255,255,0.08); color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__title { color: var(--secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__label,
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__sub { color: var(--slate); }
  html:not([data-color-mode="light"]) .exp-doc .sf-aeo__text { color: var(--neutral); }
  html:not([data-color-mode="light"]) .exp-doc .sf-aeo__text strong { color: var(--secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-aeo--ai .sf-aeo__label { color: #B59CFF; }
  html:not([data-color-mode="light"]) .exp-doc .sf-card--ai .sf-feature__icon { color: #B59CFF; }
  html:not([data-color-mode="light"]) .exp-doc .sf-path--ai .sf-path__option { color: #B59CFF; }
  html:not([data-color-mode="light"]) .exp-doc .sf-path--ai .sf-path__tag { background: rgba(255,255,255,.08); color: #B59CFF; border-color: rgba(181,156,255,.30); }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--ai .sf-callout__header { color: #B59CFF; }

  html:not([data-color-mode="light"]) .exp-doc .sf-compat__col--yes .sf-compat__col-head { color: #4ADE80; }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__col--no  .sf-compat__col-head { color: #FCA5A5; }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__col--yes .sf-compat__dot { background: rgba(0,184,148,.20); color: #4ADE80; }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__col--no  .sf-compat__dot { background: rgba(220,38,38,.22); color: #FCA5A5; }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__note {
    background: rgba(31,142,205,.16);
    border-top-color: rgba(255,255,255,.08);
  }
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__note-icon,
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__note-text,
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__note-text a,
  html:not([data-color-mode="light"]) .exp-doc .sf-compat__note-text strong { color: #93C5FD; }

  html:not([data-color-mode="light"]) .exp-doc .sf-kit__item--required    { border-left-color: var(--secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__item--required .sf-kit__pill { background: var(--secondary); color: var(--on-secondary); }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__item--recommended .sf-kit__pill { background: rgba(0,184,148,.20); color: #4ADE80; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__item--included    { border-left-color: #79C0FF; }
  html:not([data-color-mode="light"]) .exp-doc .sf-kit__item--included .sf-kit__pill { background: rgba(31,142,205,.20); color: #93C5FD; }

  html:not([data-color-mode="light"]) .exp-doc .sf-flow__foot { background: rgba(31,142,205,.18); border-top-color: rgba(255,255,255,.08); }
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__foot-title,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__foot-text,
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__foot-text strong { color: #93C5FD; }
  html:not([data-color-mode="light"]) .exp-doc .sf-flow__foot-icon { color: #93C5FD; }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--info { background: rgba(31,142,205,.14); }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--info .sf-callout__header,
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--info .sf-callout__content,
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--info .sf-callout__content p { color: #93C5FD; }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--info .sf-callout__content strong { color: #BFDBFE; }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--success { background: rgba(0,184,148,.14); }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--success .sf-callout__header,
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--success .sf-callout__content { color: #4ADE80; }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--warning { background: rgba(245,158,11,.14); }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--warning .sf-callout__header,
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--warning .sf-callout__content { color: #FBBF24; }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--ai { background: rgba(107,71,240,.14); }
  html:not([data-color-mode="light"]) .exp-doc .sf-callout--ai .sf-callout__content { color: var(--neutral); }
}

/* === RESPONSIVE ========================================================= */
@media (max-width: 820px) {
  .sf-hero { grid-template-columns: 1fr; gap: var(--lg); padding: var(--lg); }
  .exp-doc .sf-hero__title { font-size: 2.25rem; }
  .sf-spec-bar { grid-template-columns: 1fr 1fr; }
  .sf-spec-bar__item:nth-child(2) { border-right: 0; }
  .sf-spec-bar__item:nth-child(1),
  .sf-spec-bar__item:nth-child(2) { border-bottom: 1px solid var(--line); }
  [data-color-mode="dark"] .exp-doc .sf-spec-bar__item:nth-child(1),
  [data-color-mode="dark"] .exp-doc .sf-spec-bar__item:nth-child(2) { border-bottom-color: rgba(255,255,255,.08); }
  .sf-flow__steps { grid-template-columns: 1fr 1fr; gap: 24px 0; }
  .sf-flow__step::after { display: none; }
}

@media (max-width: 640px) {
  .exp-doc h1 { font-size: 2rem; }
  .exp-doc h2 { font-size: 1.625rem; }
  .exp-doc h3 { font-size: 1.25rem; }
  .exp-doc .sf-hero__title { font-size: 1.875rem; }
  .sf-feature-grid,
  .sf-sku-grid,
  .sf-path-grid,
  .sf-use-grid { grid-template-columns: 1fr; }
  .sf-flow__steps { grid-template-columns: 1fr; gap: 18px 0; }
  .sf-spec-bar { grid-template-columns: 1fr; }
  .sf-spec-bar__item { border-right: 0; border-bottom: 1px solid var(--line); }
  .sf-spec-bar__item:last-child { border-bottom: 0; }
  [data-color-mode="dark"] .exp-doc .sf-spec-bar__item { border-bottom-color: rgba(255,255,255,.08); }
}

@media (max-width: 400px) {
  .exp-doc .sf-hero__title { font-size: 1.625rem; }
  .sf-hero { padding: var(--md); }
}

/* System-preference dark counterparts of the responsive [data-color-mode="dark"]
   spec-bar border overrides above (dark-mode duplication rule). */
@media (max-width: 820px) and (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__item:nth-child(1),
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__item:nth-child(2) { border-bottom-color: rgba(255,255,255,.08); }
}
@media (max-width: 640px) and (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .exp-doc .sf-spec-bar__item { border-bottom-color: rgba(255,255,255,.08); }
}
</style>

<div class="exp-doc">

  
  <header class="sf-hero sf-hero--ai">
    <div class="sf-hero__copy">
      <p class="sf-hero__title">Sixfab Edge AI Expansion Board for Raspberry Pi 5</p>
      <p class="sf-hero__lead">
        A bottom-mount baseboard for Raspberry Pi 5 that combines the <strong>DEEPX DX-M1 M.2 AI Module</strong> (up to 25 TOPS at INT8), an NVMe SSD slot, and an LTE/5G modem slot in one stack. The AI accelerator connects over PCIe Gen 2/Gen 3 x1 via a 40 mm FFC; storage and cellular share an internal USB 3.0 (5 Gbps) hub. One USB-C PD input powers the full stack and back-powers the Pi 5 through pogo pins. Intelligented by DEEPX. Built on Raspberry Pi.
      </p>
      <div class="sf-hero__chips">
        <span class="sf-pill sf-pill--ai">Up to 25 TOPS</span>
        <span class="sf-pill">DEEPX DX-M1</span>
        <span class="sf-pill">Triple M.2</span>
        <span class="sf-pill">Raspberry Pi 5</span>
        <span class="sf-pill">PCIe Gen 2/Gen 3 x1</span>
        <span class="sf-pill">USB-C PD</span>
      </div>
      <div class="sf-hero__cta">
        <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener" class="sf-btn sf-btn--mint">
          Quickstart
          <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
        </a>
        <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-specifications" target="_blank" rel="noopener" class="sf-btn sf-btn--secondary-dark">Specifications</a>
      </div>
    </div>
  </header>

  
  <div class="sf-meta">
    <span class="sf-meta__badge">Edge AI Expansion Board</span>
    <span class="sf-meta__sep">·</span>
    <span>Overview</span>
    <span class="sf-meta__sep">·</span>
    <span>Intelligented by DEEPX</span>
    <span class="sf-meta__sep">·</span>
    <span>Built on Raspberry Pi</span>
  </div>

  
  <div class="sf-spec-bar">
    <div class="sf-spec-bar__item">
      <div class="sf-spec-bar__label">NPU</div>
      <div class="sf-spec-bar__value">Up to 25 TOPS</div>
      <div class="sf-spec-bar__sub">INT8 · DEEPX DX-M1 M.2 AI Module</div>
    </div>
    <div class="sf-spec-bar__item">
      <div class="sf-spec-bar__label">Host link</div>
      <div class="sf-spec-bar__value">PCIe Gen 2/Gen 3</div>
      <div class="sf-spec-bar__sub">x1 · 40 mm PCIe FFC</div>
    </div>
    <div class="sf-spec-bar__item">
      <div class="sf-spec-bar__label">Expansion</div>
      <div class="sf-spec-bar__value">3× M.2</div>
      <div class="sf-spec-bar__sub">AI + NVMe + LTE/5G</div>
    </div>
    <div class="sf-spec-bar__item">
      <div class="sf-spec-bar__label">Power input</div>
      <div class="sf-spec-bar__value">USB-C PD</div>
      <div class="sf-spec-bar__sub">27 W min · 45 W recommended</div>
    </div>
  </div>

  
  <h2>What the Edge AI Expansion Board is</h2>
  <p class="sf-prose-justify">
    The Sixfab Edge AI Expansion Board is an under-board baseboard for Raspberry Pi 5 that integrates three subsystems production vision workloads usually need together: a dedicated DEEPX neural processing unit for inference, fast local storage for buffering and logging, and a cellular modem for wide-area connectivity. All three slots can be populated and operated concurrently with no measurable degradation in AI throughput.
  </p>
  <p class="sf-prose-justify">
    The AI accelerator slot connects to the Raspberry Pi 5 over a <strong>dedicated PCIe Gen 2/Gen 3 x1 link</strong> through a 40 mm FFC cable, separate from the NVMe and cellular paths. PCIe Gen 2 is the default on Raspberry Pi OS for stability; Gen 3 is enabled by adding <code>dtparam=pciex1_gen=3</code> to <code>/boot/firmware/config.txt</code>. Measured bandwidth is 400–450 MB/s at Gen 2 and 800–900 MB/s at Gen 3.
  </p>
  <p class="sf-prose-justify">
    The NVMe and cellular slots are routed through an on-board <strong>USB 3.0 (5 Gbps) hub</strong>: NVMe via a Realtek RTL9210B-CG USB-to-NVMe bridge, cellular via the USB Bridge PCBA. The OS sees these as standard USB Mass Storage and USB cellular devices, so they require no extra kernel drivers beyond what Raspberry Pi OS ships. The board is shipped today with a <strong>vision focus</strong>: object detection, classification, segmentation, pose estimation. <strong>LLMs are on the DEEPX silicon roadmap</strong> and Sixfab will support them as the silicon enables. No dates.
  </p>

  
  <h2>Two variants</h2>
  <p>
    The Edge AI Expansion Board ships in two bundle compositions. Both contain the same baseboard, the same mounting kit, and the same accessories. <strong>The difference is whether the DEEPX DX-M1 M.2 AI module is included in the box.</strong>
  </p>

  <div class="sf-sku-grid">

    <div class="sf-sku">
      <div class="sf-sku__head">
        <div>
          <div class="sf-sku__name">Variant 1: Board only</div>
          <div class="sf-sku__chip">DEEPX M1 ready</div>
        </div>
        <span class="sf-sku__badge sf-sku__badge--std">Module not included</span>
      </div>
      <div class="sf-sku__body">
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">AI Expansion Board</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">USB 3.0 Bridge</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">PCIe Cable (40 mm FFC)</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2.5 15 mm F-F plastic spacer</span>
          <span class="sf-sku__row-value">6×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2.5 5 mm M-F plastic spacer</span>
          <span class="sf-sku__row-value">4×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2.5 screw</span>
          <span class="sf-sku__row-value">6×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2 flathead screw</span>
          <span class="sf-sku__row-value">3×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2 module plastic spacer</span>
          <span class="sf-sku__row-value">3×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">USB Type-C plastic cap</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">DEEPX DX-M1 M.2 AI module</span>
          <span class="sf-sku__row-value">Not included</span>
        </div>
        <div class="sf-sku__note">
          For customers who already have a <strong>DEEPX DX-M1 M.2 AI Module</strong>, want to source the module on a separate purchase order, or need to standardise a single board SKU across deployments.
        </div>
      </div>
    </div>

    <div class="sf-sku sf-sku--highlighted">
      <div class="sf-sku__head">
        <div>
          <div class="sf-sku__name">Variant 2: Board + DEEPX M1 module</div>
          <div class="sf-sku__chip">Ready to inference out of the box</div>
        </div>
        <span class="sf-sku__badge">Bundled module</span>
      </div>
      <div class="sf-sku__body">
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">AI Expansion Board</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">USB 3.0 Bridge</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">PCIe Cable (40 mm FFC)</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2.5 15 mm F-F plastic spacer</span>
          <span class="sf-sku__row-value">6×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2.5 5 mm M-F plastic spacer</span>
          <span class="sf-sku__row-value">4×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2.5 screw</span>
          <span class="sf-sku__row-value">6×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2 flathead screw</span>
          <span class="sf-sku__row-value">3×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">M2 module plastic spacer</span>
          <span class="sf-sku__row-value">3×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">USB Type-C plastic cap</span>
          <span class="sf-sku__row-value">1×</span>
        </div>
        <div class="sf-sku__row">
          <span class="sf-sku__row-label">DEEPX DX-M1 M.2 AI module</span>
          <span class="sf-sku__row-value sf-sku__row-value--accent">1× included</span>
        </div>
        <div class="sf-sku__note">
          The single-SKU path from box to first inference. Includes the <strong>DEEPX DX-M1</strong> M.2 module pre-bundled with the board; install, stack on the Pi 5, install the runtime, and run <code>dxrt-cli -s</code>.
        </div>
      </div>
    </div>

  </div>

  <div class="sf-callout sf-callout--info">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
      <span>Quantization and accuracy</span>
    </div>
    <div class="sf-callout__content">
      <p>The DEEPX silicon runs <strong>INT8 only</strong>. The DXNN compiler quantizes models from FP32 to INT8 automatically; expect approximately <strong>2 % accuracy loss</strong> compared with the original trained model. Plan benchmarks and acceptance criteria around the quantized model, not the FP32 baseline.</p>
    </div>
  </div>

  
  <h2>Key features</h2>

  <div class="sf-feature-grid">

    <div class="sf-card">
      <div class="sf-feature">
        <div class="sf-feature__icon">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="1"/><path d="M9 9h6v6H9z"/><path d="M3 10h2M3 14h2M19 10h2M19 14h2M10 3v2M14 3v2M10 19v2M14 19v2"/></svg>
        </div>
        <div>
          <div class="sf-feature__title">DEEPX NPU on a swappable M.2 module</div>
          <div class="sf-feature__desc">The <strong>DEEPX DX-M1 M.2 AI Module</strong> delivers up to 25 TOPS at INT8 precision on a removable M.2 M-Key module rather than soldered to the PCB. Swap or replace the module without changing the board, with the Pi 5 powered off.</div>
        </div>
      </div>
    </div>

    <div class="sf-card">
      <div class="sf-feature">
        <div class="sf-feature__icon">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="6" width="18" height="12" rx="1"/><path d="M7 10h2M7 14h2M13 10h4M13 14h4"/></svg>
        </div>
        <div>
          <div class="sf-feature__title">Triple M.2: AI + NVMe + LTE/5G</div>
          <div class="sf-feature__desc"><strong>Three dedicated slots</strong>: M.2 M-Key for the DX-M1 over PCIe, M.2 M-Key for NVMe storage via the on-board USB 3.0 hub, and M.2 Key-B for an LTE/5G modem with a nano SIM slot (eUICC supported).</div>
        </div>
      </div>
    </div>

    <div class="sf-card">
      <div class="sf-feature">
        <div class="sf-feature__icon">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12h4l3 8 4 -16 3 8h4"/></svg>
        </div>
        <div>
          <div class="sf-feature__title">Single USB-C PD powers the stack</div>
          <div class="sf-feature__desc">One <strong>USB-C PD input</strong> (5 V/5 A · 9 V/3 A · 12 V/2.25 A) feeds the board and <strong>back-powers Raspberry Pi 5 through pogo pins</strong> on the GPIO header underside. The Pi 5's own USB-C port stays free and gets a blanking plug.</div>
        </div>
      </div>
    </div>

    <div class="sf-card sf-card--ai">
      <div class="sf-feature">
        <div class="sf-feature__icon">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8"/><path d="M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8"/><path d="M17.5 16a3.5 3.5 0 0 0 0 -7h-.5"/><path d="M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0"/><path d="M6.5 16a3.5 3.5 0 0 1 0 -7h.5"/><path d="M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10"/></svg>
        </div>
        <div>
          <div class="sf-feature__title">Two software paths</div>
          <div class="sf-feature__desc">Start with the <strong>Sixfab Model Zoo</strong> for pre-compiled DXNN models, or use the <strong>DXNN SDK</strong> for the full ONNX → DXNN compile flow. The <strong>Sixfab × Ultralytics acceleration path</strong> takes a labeled dataset to a deployed custom model in days.</div>
        </div>
      </div>
    </div>

    <div class="sf-card">
      <div class="sf-feature">
        <div class="sf-feature__icon">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V7a4 4 0 1 1 8 0v4"/></svg>
        </div>
        <div>
          <div class="sf-feature__title">On-device inference, no cloud</div>
          <div class="sf-feature__desc">After the runtime install, the system runs <strong>fully offline</strong>. No frames or model outputs leave the Pi 5 unless the user application explicitly forwards them, a fit for privacy-sensitive vision deployments. Cellular is for outbound results, not inference.</div>
        </div>
      </div>
    </div>

    <div class="sf-card">
      <div class="sf-feature">
        <div class="sf-feature__icon">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 17l6 -6l4 4l8 -8"/><path d="M21 7v4M21 7h-4"/></svg>
        </div>
        <div>
          <div class="sf-feature__title">Concurrent AI + storage + cellular</div>
          <div class="sf-feature__desc">The dedicated PCIe lane keeps the NPU isolated from the USB hub. <strong>Simultaneous NVMe writes and LTE/5G traffic do not degrade AI throughput.</strong> Buffer locally, forward over WAN, and infer, all at the same time.</div>
        </div>
      </div>
    </div>

  </div>

  
  <h2>How a deployment runs on the stack</h2>
  <p>
    The Edge AI Expansion Board lets the Raspberry Pi 5 keep doing what it is good at (capture, application logic, and I/O) while offloading inference to the DEEPX NPU and pushing buffered data through storage or the cellular link.
  </p>

  <div class="sf-flow">
    <div class="sf-flow__head">
      <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="1"/><path d="M9 9h6v6H9z"/></svg>
      <span class="sf-flow__title">Deployment data flow</span>
    </div>
    <div class="sf-flow__steps">

      <div class="sf-flow__step">
        <div class="sf-flow__icon">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 3h2a3 3 0 0 1 3 3v2M15 21h2a3 3 0 0 0 3 -3v-2M3 15v2a3 3 0 0 0 3 3h2M3 9v-2a3 3 0 0 1 3 -3h2"/><circle cx="12" cy="12" r="3"/></svg>
        </div>
        <div class="sf-flow__num">Step 1</div>
        <div class="sf-flow__step-title">Capture on Pi 5</div>
        <div class="sf-flow__step-desc">CSI, USB, or IP camera feeds frames into the Pi 5. The Pi handles capture and pre-processing.</div>
      </div>

      <div class="sf-flow__step sf-flow__step--ai">
        <div class="sf-flow__icon">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8"/><path d="M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8"/><path d="M17.5 16a3.5 3.5 0 0 0 0 -7h-.5"/><path d="M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0"/><path d="M6.5 16a3.5 3.5 0 0 1 0 -7h.5"/><path d="M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10"/></svg>
        </div>
        <div class="sf-flow__num">Step 2</div>
        <div class="sf-flow__step-title">NPU inference</div>
        <div class="sf-flow__step-desc">DEEPX NPU runs the compiled DXNN model. INT8 execution over PCIe Gen 2/Gen 3 x1.</div>
      </div>

      <div class="sf-flow__step">
        <div class="sf-flow__icon">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 4h16v6H4zM4 14h16v6H4z"/><circle cx="8" cy="7" r="1" fill="currentColor"/><circle cx="8" cy="17" r="1" fill="currentColor"/></svg>
        </div>
        <div class="sf-flow__num">Step 3</div>
        <div class="sf-flow__step-title">Buffer on NVMe</div>
        <div class="sf-flow__step-desc">Frames, detections, or events written to NVMe via the on-board USB 3.0 hub. 380&ndash;440 MB/s sequential.</div>
      </div>

      <div class="sf-flow__step">
        <div class="sf-flow__icon">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/><circle cx="5" cy="12" r="2"/></svg>
        </div>
        <div class="sf-flow__num">Step 4</div>
        <div class="sf-flow__step-title">Forward over LTE/5G</div>
        <div class="sf-flow__step-desc">Events or summaries pushed out through the M.2 Key-B modem. Raw frames never need to leave.</div>
      </div>

    </div>
  </div>

  
  <h2>Software: two paths to a running model</h2>
  <p>
    Both paths run on top of the same DEEPX runtime (<code>dxrt-runtime</code>) and the kernel driver shipped from the Sixfab APT repository on Raspberry Pi OS. The difference is what is on disk before <code>dxrt-cli -s</code> is run.
  </p>

  <div class="sf-path-grid">

    <a class="sf-path" href="https://docs.sixfab.com/docs/ai-model-deployment-sixfab-model-zoo" target="_blank" rel="noopener" aria-label="Open Sixfab Model Zoo guide">
      <div class="sf-path__head">
        <div class="sf-path__head-row">
          <div>
            <div class="sf-path__option">Path 1</div>
            <div class="sf-path__name">Sixfab Model Zoo</div>
            <span class="sf-path__tag">Fastest start</span>
          </div>
          <svg class="sf-path__head-arrow" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7M9 7h8v8"/></svg>
        </div>
      </div>
      <div class="sf-path__body">
        <p>A curated set of <strong>pre-compiled DXNN models</strong> (YOLOv8 family, MobileNet, ResNet, and others) ready to deploy without any compiler workflow.</p>
        <ul>
          <li><strong>No compilation step.</strong> Download the <code>.dxnn</code> artifact and run it.</li>
          <li><strong>Reference inference scripts</strong> for camera input and recorded video.</li>
          <li><strong>Sourced from</strong> <code>github.com/sixfab/sixfab-dx-examples</code>; <code>auto-install.sh</code> sets up the Python and C++ example trees.</li>
        </ul>
      </div>
    </a>

    <a class="sf-path" href="https://docs.sixfab.com/docs/ai-model-deployment-custom-models-dxnn-sdk" target="_blank" rel="noopener" aria-label="Open Custom Models (DXNN SDK) guide">
      <div class="sf-path__head">
        <div class="sf-path__head-row">
          <div>
            <div class="sf-path__option">Path 2</div>
            <div class="sf-path__name">Custom Models (DXNN SDK)</div>
            <span class="sf-path__tag">Full custom deployment</span>
          </div>
          <svg class="sf-path__head-arrow" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 17L17 7M9 7h8v8"/></svg>
        </div>
      </div>
      <div class="sf-path__body">
        <p>The <strong>DXNN SDK</strong> compiles a model from <strong>ONNX</strong> down to the <strong>DXNN</strong> format the NPU executes. PyTorch, TensorFlow, Keras, and Ultralytics models export to ONNX first, then the DXNN compiler (<code>dx-com</code>) handles quantization and graph mapping.</p>
        <ul>
          <li><strong>ONNX → DXNN</strong> compile path with automatic INT8 quantization.</li>
          <li><strong>Sixfab × Ultralytics acceleration path</strong> for custom YOLO models.</li>
          <li><strong>Compiler runs on x86_64 Ubuntu</strong> (20.04 / 22.04 / 24.04), ≥16 GB RAM, ≥8 GB disk. Not on the Pi.</li>
        </ul>
      </div>
    </a>

  </div>

  <div class="sf-callout sf-callout--ai">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
      <span>Recommended starting path</span>
    </div>
    <div class="sf-callout__content">
      <p>Validate the hardware first with the <strong>Sixfab Model Zoo</strong>: a Pi 5, an Edge AI Expansion Board with the DX-M1 installed, and a YOLOv8n DXNN file are enough to confirm the NPU is detected on PCIe and producing correct output. From there, move to the <strong>DXNN SDK</strong> when the application needs a model that is not in the zoo or a custom-trained one.</p>
    </div>
  </div>

  
  <h2>What you can build</h2>
  <p>
    The Edge AI Expansion Board is sized for connected edge deployments where local inference, on-device buffering, and dependable WAN connectivity are required at the same time. Examples below; this is a sample, not a limit.
  </p>

  <div class="sf-use-grid">

    <div class="sf-use">
      <div class="sf-use__icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 7h2l1 -2h8l1 2h2a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2"/><circle cx="12" cy="13" r="3"/></svg>
      </div>
      <div>
        <div class="sf-use__title">Connected AI cameras &amp; security</div>
        <div class="sf-use__desc">Detection and intrusion analytics with on-device buffering to NVMe and event forwarding over LTE/5G. Frames stay local, only events leave.</div>
      </div>
    </div>

    <div class="sf-use">
      <div class="sf-use__icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 21h18M5 21v-16a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v16"/><path d="M9 8h1M9 12h1M9 16h1M14 8h1M14 12h1M14 16h1"/></svg>
      </div>
      <div>
        <div class="sf-use__title">Smart-city &amp; infrastructure</div>
        <div class="sf-use__desc">Traffic and pedestrian analytics with cellular backhaul. Suitable for sites without wired networking; power the stack from a single USB-C PD supply.</div>
      </div>
    </div>

    <div class="sf-use">
      <div class="sf-use__icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="6" y="4" width="12" height="8" rx="2"/><path d="M9 12v9M15 12v9M5 16h14M9 7h.01M15 7h.01"/></svg>
      </div>
      <div>
        <div class="sf-use__title">Mobile &amp; stationary robotics</div>
        <div class="sf-use__desc">AMRs and inspection robots that need vision inference plus connected logging: NVMe for telemetry, LTE/5G for OTA fleet links.</div>
      </div>
    </div>

    <div class="sf-use">
      <div class="sf-use__icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 21h18M5 21v-14l8 -4v18M19 21v-10l-6 -4M9 9l0 .01M9 12l0 .01M9 15l0 .01M9 18l0 .01"/></svg>
      </div>
      <div>
        <div class="sf-use__title">Industrial inspection &amp; QC</div>
        <div class="sf-use__desc">Defect detection on assembly lines with local storage of evidence frames and remote dashboards via cellular when wired networking is restricted.</div>
      </div>
    </div>

    <div class="sf-use">
      <div class="sf-use__icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M5.6 18.4l2.8 -2.8M15.6 8.4l2.8 -2.8"/><circle cx="12" cy="12" r="3"/></svg>
      </div>
      <div>
        <div class="sf-use__title">Remote monitoring &amp; AIoT gateways</div>
        <div class="sf-use__desc">Sensor fusion plus on-device inference at unattended sites. Pogo-pin back-power keeps the wiring on one connector for easier enclosure design.</div>
      </div>
    </div>

    <div class="sf-use">
      <div class="sf-use__icon">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="4" width="18" height="6" rx="1"/><rect x="3" y="14" width="18" height="6" rx="1"/><circle cx="7" cy="7" r=".5" fill="currentColor"/><circle cx="7" cy="17" r=".5" fill="currentColor"/></svg>
      </div>
      <div>
        <div class="sf-use__title">Privacy-sensitive analytics</div>
        <div class="sf-use__desc">Healthcare, retail, and workplace deployments where raw video must not leave the device. Inference runs locally; only structured outputs travel.</div>
      </div>
    </div>

  </div>

  
  <h2>What the Edge AI Expansion Board does not do</h2>
  <p>
    Stating limits up front is part of the brand contract. Plan deployments against the lines below; do not plan against marketing speculation.
  </p>

  <div class="sf-bounds">

    <div class="sf-bound">
      <div class="sf-bound__icon" aria-hidden="true">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
      </div>
      <div class="sf-bound__label">Vision today, LLMs later</div>
      <div class="sf-bound__desc">The DEEPX silicon is sized for <strong>vision and similar inference workloads</strong>. LLM support is on the DEEPX roadmap and Sixfab will support it as the silicon enables. No dates.</div>
    </div>

    <div class="sf-bound">
      <div class="sf-bound__icon" aria-hidden="true">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"/></svg>
      </div>
      <div class="sf-bound__label">No on-device training</div>
      <div class="sf-bound__desc">Training is done independently on a host machine. Trained models are exported to <strong>ONNX</strong> and compiled with the DXNN compiler before deployment, or built through the Sixfab × Ultralytics acceleration path.</div>
    </div>

    <div class="sf-bound">
      <div class="sf-bound__icon" aria-hidden="true">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"/></svg>
      </div>
      <div class="sf-bound__label">Not hot-pluggable</div>
      <div class="sf-bound__desc"><strong>Hot-plug is not supported.</strong> The Raspberry Pi 5 must be powered off and the USB-C cable disconnected before the Edge AI Expansion Board or any M.2 module is mounted or removed. Inserting or removing a module while the stack is powered can damage the hardware.</div>
    </div>

    <div class="sf-bound">
      <div class="sf-bound__icon" aria-hidden="true">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M9 9h6v6H9z"/></svg>
      </div>
      <div class="sf-bound__label">INT8 only on the NPU</div>
      <div class="sf-bound__desc">The DXNN compiler quantizes from FP32 to <strong>INT8</strong> automatically. Approximately <strong>2 % accuracy loss</strong> versus the original trained model is expected.</div>
    </div>

    <div class="sf-bound">
      <div class="sf-bound__icon" aria-hidden="true">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="6" rx="1"/><rect x="3" y="14" width="18" height="6" rx="1"/><circle cx="7" cy="7" r=".5" fill="currentColor"/><circle cx="7" cy="17" r=".5" fill="currentColor"/></svg>
      </div>
      <div class="sf-bound__label">NVMe is USB-attached</div>
      <div class="sf-bound__desc">The NVMe slot is <strong>not a native PCIe device</strong>. It is routed through the on-board USB 3.0 (5 Gbps) hub and a Realtek RTL9210B-CG bridge, so the OS sees a <strong>USB Mass Storage device</strong> (<code>/dev/sda</code>) capped at the 5 Gbps USB bus &mdash; 380&ndash;440 MB/s sequential read in practice, not full PCIe NVMe speed.</div>
    </div>

    <div class="sf-bound">
      <div class="sf-bound__icon" aria-hidden="true">
        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><polyline points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>
      </div>
      <div class="sf-bound__label">Needs the 27 W PSU</div>
      <div class="sf-bound__desc"><strong>It does not run on standard 5 V / 3 A (15 W) supplies.</strong> The official Raspberry Pi 27 W USB-C PD power supply is the minimum; <strong>45 W is recommended</strong> for full-stack configurations (AI + NVMe + cellular populated).</div>
    </div>

  </div>

  
  <h2>Compatibility</h2>
  <p>
    The Edge AI Expansion Board is designed for the Raspberry Pi 5 host platform. The mechanical footprint, the pogo-pin back-power layout, the PCIe FFC orientation, and the USB hub routing are tuned to the Pi 5 board revision.
  </p>

  <div class="sf-compat">
    <div class="sf-compat__head">Supported host platforms</div>
    <div class="sf-compat__cols">

      <div class="sf-compat__col sf-compat__col--yes">
        <div class="sf-compat__col-head">
          <span class="sf-compat__dot">
            <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12l5 5L20 7"/></svg>
          </span>
          <span>Supported</span>
        </div>
        <ul class="sf-compat__list">
          <li><strong>Raspberry Pi 5</strong> with <strong>4 GB</strong>, <strong>8 GB (recommended)</strong>, or <strong>16 GB</strong> of RAM &mdash; the primary and only supported host platform.</li>
        </ul>
      </div>

      <div class="sf-compat__col sf-compat__col--no">
        <div class="sf-compat__col-head">
          <span class="sf-compat__dot">
            <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>
          </span>
          <span>Not supported</span>
        </div>
        <ul class="sf-compat__list">
          <li><strong>Raspberry Pi 4</strong> and <strong>Compute Module 4</strong>.</li>
          <li><strong>Non-Raspberry Pi SBCs</strong> (Orange Pi, Rock Pi, Jetson, etc.), even those with a PCIe FFC interface.</li>
        </ul>
      </div>

    </div>
    <div class="sf-compat__note">
      <svg class="sf-compat__note-icon" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
      <div class="sf-compat__note-text">
        <strong>Co-existence with other Pi 5 accessories:</strong> the Edge AI Expansion Board forwards the Pi 5 GPIO header upward without consuming any data pins, so a standard top-mounted HAT can still be used. The official Raspberry Pi Active Cooler is 100 % compatible. Camera Module 2 (IMX219), Camera Module 3 (IMX708), HQ Camera (IMX477), and Global Shutter Camera (IMX296) are tested.
      </div>
    </div>
  </div>

  <h3>Recommended bring-up kit</h3>
  <p>
    Everything needed to get a Raspberry Pi 5 and an Edge AI Expansion Board from the box to a running inference. The left column is what the Edge AI Expansion Board ships with; the right column is what to buy alongside it. The last item on the left, the <strong>DEEPX DX-M1 M.2 AI module</strong>, ships only with <strong>Variant 2</strong>; Variant 1 customers source it separately.
  </p>

  <div class="sf-kit-cols">

    
    <div class="sf-kit-col sf-kit-col--included">
      <div class="sf-kit-col__head">
        <div class="sf-kit-col__title">
          <span class="sf-kit-col__title-icon" aria-hidden="true">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>
          </span>
          <span>In the box</span>
        </div>
        <span class="sf-kit-col__count">9–10 items</span>
      </div>
      <ul class="sf-kit-col__list">
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">01</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">Edge AI Expansion Board</div>
            <div class="sf-kit-col__spec">The baseboard itself, with the on-board USB 3.0 hub, three M.2 slots (AI, NVMe, cellular), USB-C PD input, and pogo pins for back-powering the Pi 5. <strong>88.46 × 89.19 mm overall.</strong></div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">02</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">USB 3.0 Bridge</div>
            <div class="sf-kit-col__spec"><strong>One piece.</strong> The internal USB Bridge PCBA that routes the M.2 NVMe and M.2 cellular slots through the on-board USB 3.0 (5 Gbps) hub.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">03</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">PCIe FFC cable</div>
            <div class="sf-kit-col__spec"><strong>40 × 8.5 mm.</strong> Connects the Raspberry Pi 5's external PCIe port to the Edge AI Expansion Board. Labeled <code>RPi5</code> on one end and <code>Edge AI</code> on the other for foolproof orientation. Pin 1 arrows match the PCB markings.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">04</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">M2.5 F-F spacers, 15 mm</div>
            <div class="sf-kit-col__spec"><strong>Six pieces.</strong> Bottom standoffs. Lift the assembled stack off the work surface so the Edge AI Expansion Board can sit underneath the Pi 5.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">05</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">M2.5 M-F spacers, 5 mm</div>
            <div class="sf-kit-col__spec"><strong>Four pieces.</strong> Set the clearance between the Edge AI Expansion Board and the Raspberry Pi 5 PCB and ensure proper pogo-pin contact on the GPIO header underside.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">06</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">M2.5 screws</div>
            <div class="sf-kit-col__spec"><strong>Six pieces.</strong> Fasten the M2.5 spacer stack between the Raspberry Pi 5 and the Edge AI Expansion Board. <strong>Finger-tight only;</strong> over-torquing can damage the standoffs.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">07</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">M2 flat-head screws</div>
            <div class="sf-kit-col__spec"><strong>Three pieces.</strong> Secure the M.2 modules (AI, NVMe, cellular) into their slots. Finger-tight only.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">08</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">M2 module plastic spacers</div>
            <div class="sf-kit-col__spec"><strong>Three pieces.</strong> Level each M.2 module (AI, NVMe, cellular) in its slot so the module sits flush against the standoff before tightening.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">09</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">USB-C blanking plug</div>
            <div class="sf-kit-col__spec">Fits the Raspberry Pi 5's own USB-C port, which stays free because the Edge AI Expansion Board's USB-C PD input back-powers the Pi 5 through the pogo pins.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">10</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">
              DEEPX DX-M1 M.2 AI module
              <span class="sf-kit-col__variant">Variant 2 only</span>
            </div>
            <div class="sf-kit-col__spec"><strong>One piece.</strong> The DEEPX neural processing unit on an M.2 M-Key module, up to <strong>25 TOPS at INT8</strong> precision, with 4 GB LPDDR5 @ 5600 MT/s on-package memory. Ships pre-bundled with Variant 2; Variant 1 buyers source the module separately and install it into the AI M.2 slot.</div>
          </div>
        </li>
      </ul>
    </div>

    
    <div class="sf-kit-col sf-kit-col--byo">
      <div class="sf-kit-col__head">
        <div class="sf-kit-col__title">
          <span class="sf-kit-col__title-icon" aria-hidden="true">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
          </span>
          <span>You'll also need</span>
        </div>
        <span class="sf-kit-col__count">Buy separately</span>
      </div>
      <ul class="sf-kit-col__list">
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">01</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">Raspberry Pi 5</div>
            <div class="sf-kit-col__hint"><strong>4 GB, 8 GB, or 16 GB.</strong> The 8 GB variant is recommended for most workloads; step up to 16 GB for multi-stream or heavy pre-processing pipelines.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">02</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">USB-C PD power supply</div>
            <div class="sf-kit-col__hint">The official Raspberry Pi 27 W USB-C PD supply is the minimum. <strong>45 W is recommended</strong> when AI, NVMe, and cellular are all populated. Standard 15 W chargers cause under-voltage warnings and SSD disconnects.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">03</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">microSD card</div>
            <div class="sf-kit-col__hint"><strong>Class 10 / A2, 32 GB or larger.</strong> Holds Raspberry Pi OS, <code>dxrt-runtime</code>, and any compiled DXNN model files.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">04</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">
              Raspberry Pi Active Cooler
              <span class="sf-kit-col__optional">Recommended</span>
            </div>
            <div class="sf-kit-col__hint">The Pi 5 sits on top of the Edge AI Expansion Board; without active cooling the Pi 5 CPU can throttle under sustained load. The Edge AI Expansion Board does not have a fan connector of its own; the Active Cooler runs from the Pi 5's own JST-SH header.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">05</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">
              NVMe SSD (M.2 M-Key)
              <span class="sf-kit-col__optional">Optional</span>
            </div>
            <div class="sf-kit-col__hint"><strong>2230 / 2242 / 2260 / 2280 form factors.</strong> The 256 GB and 512 GB Raspberry Pi NVMe SSDs are the validated reference; other M-Key NVMe SSDs in the four supported sizes work but are not part of the validated list.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">06</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">
              LTE/5G M.2 modem &amp; nano SIM
              <span class="sf-kit-col__optional">Optional</span>
            </div>
            <div class="sf-kit-col__hint">An M.2 Key-B cellular modem and a nano SIM (eUICC supported). Only needed for deployments that require WAN connectivity from the device itself.</div>
          </div>
        </li>
        <li class="sf-kit-col__item">
          <span class="sf-kit-col__num">07</span>
          <div class="sf-kit-col__body">
            <div class="sf-kit-col__name">
              Camera
              <span class="sf-kit-col__optional">Optional</span>
            </div>
            <div class="sf-kit-col__hint">A Raspberry Pi Camera Module, a USB camera, or an IP camera (RTSP). Only needed for live-video pipelines; recorded video files work without one.</div>
          </div>
        </li>
      </ul>
    </div>

  </div>

  
  <div class="sf-lockup">
    <span class="sf-lockup__eyebrow">Partnership lockups</span>
    <div class="sf-lockup__line">Intelligented by DEEPX. Built on Raspberry Pi.</div>
    <p class="sf-lockup__sub">DEEPX silicon. Raspberry Pi host. Sixfab integration, software stack, and support.</p>
  </div>

</div>


`}</HTMLBlock>

<br />