---
updatedAt: 2026-10-07T18:54:37.000Z
agentTools:
  projectIndex: https://docs.sixfab.com/llms.txt
---

# FAQ

<HTMLBlock>{`
<style>
/* Theme guard: the docs container (.rm-ReadMe) decides light/dark once it carries
   data-color-mode; the html element is only the fallback before hydration. The
   :where(...) parts on the dark selectors below stop a light docs pane inside a
   non-light html element (ReadMe admin view) from picking up dark colors.
   They add no specificity. */
/* ════════════════════════════════════════════════════════════════════════════
   Sixfab Edge AI Expansion Board for Raspberry Pi 5 · FAQ
   Built strictly to sixfab-docs-design-language.md v4 + DESIGN.md (6-tier).

   Tier mapping (per §3 of design language and project §3, §7):
   - Default surface : Tier 1 (Sixfab Teal anchor)
   - Hero            : default sf-hero (compact, Troubleshooting / FAQ style;
                       structural page per project §3 (no Neural Field)).
   - Meta bar        : Quickstart / Troubleshooting badge bar (Tier 1 light
                       badge + Tier 1 mint badge --mint).
   - AEO block       : sf-aeo--ai (Tier 3, AI Iris). The page anchors on
                       the NPU + triple-subsystem story.
   - Section icons   : Tier 3 ai-mist background + ai-iris glyph.
   - CTA card        : default --primary (Sixfab Teal)
   - Callouts        : Tier 5 semantic (info / success / warning / danger)

   Built 2026-05-14: structure mirrors AI HAT+ FAQ rev 2026-05-11.
   Categories aligned to project §7: General, Hardware, Software,
   Performance, Connectivity & Storage, Compatibility.

   Source of truth for every technical claim on this page is
   Edge_AI_QA.docx (Q1–Q167 Part 1, QP1–QP78 Part 2, EQ1–EQ15 Part 3).
   Per project §5 canonical compatibility: Raspberry Pi 5 (4 GB / 8 GB)
   and Raspberry Pi Compute Module 5 via the official Raspberry Pi CM5
   IO Board are both supported. Pi 5 2 GB, Pi 4, CM4, and non-Raspberry
   Pi SBCs are not supported.
═══════════════════════════════════════════════════════════════════════════ */

/* === 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 · §3.2 (light mode, scoped to .sf-doc) =============== */
.sf-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-tertiary:   #E8F5F0;
  --on-neutral:    #10202E;

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

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

  /* Shadows · §7.3 */
  --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);

  /* Fonts */
  --font-sans: 'Gilroy', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace;
}

/* === BASE TYPOGRAPHY · §4.4 ============================================ */
.sf-doc {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  -webkit-font-smoothing: antialiased;
}
.sf-doc * { box-sizing: border-box; }

.sf-doc h1 {
  font-size: 3rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1.08;
  color: var(--deep-ink);
  margin: 0 0 16px;
}
.sf-doc h2 {
  font-size: 2.25rem;
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.15;
  color: var(--primary);
  margin: 64px 0 16px;
  padding-bottom: 0;
  border-bottom: 0;
}
.sf-doc h2:first-of-type { margin-top: 0; }
.sf-doc h2.sf-h2--compact {
  font-size: 1.5rem;
  letter-spacing: -0.02em;
  line-height: 1.2;
  margin-top: 56px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--line);
}
.sf-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;
}

.sf-doc p {
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
  color: var(--deep-ink);
  margin: 0 0 16px;
}

.sf-doc ul, .sf-doc ol { padding-left: 24px; margin: 8px 0 16px; }
.sf-doc li {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  margin-bottom: 6px;
}
.sf-doc ul li::marker { color: var(--primary); }
.sf-doc ol li::marker { color: var(--primary); font-weight: 700; }

.sf-doc a {
  color: var(--primary);
  text-decoration: none;
  font-weight: 600;
  transition: opacity .15s;
}
.sf-doc a:hover { color: var(--deep-ink); text-decoration: underline; }

.sf-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;
}
.sf-doc strong { color: var(--deep-ink); font-weight: 700; }

/* === HERO · §6.5 (compact, Troubleshooting / System Monitoring style) ==
   Default Tier 1 surface: --light background, deep-ink type. No gradient
   (gradient hero is reserved per §3.4 governance; FAQ is a structural
   reference page per project §3).
   ======================================================================== */
.sf-hero {
  padding: 32px;
  margin: 0 0 24px;
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-2xl);
}
.sf-hero__copy { min-width: 0; }
.sf-doc .sf-hero__title {
  font-family: var(--font-sans);
  font-size: 2.5rem; font-weight: 800;
  letter-spacing: -0.03em; line-height: 1.08;
  color: var(--deep-ink);
  margin: 0 0 14px;
}
.sf-doc .sf-hero__lead {
  font-size: 1.0625rem; line-height: 1.6;
  color: var(--deep-ink); margin: 0 0 18px;
}
.sf-hero__lead code { background: var(--white); }
.sf-hero__chips { display: flex; flex-wrap: wrap; gap: 6px; }

@media (max-width: 820px) {
  .sf-hero { padding: 24px; }
  .sf-doc .sf-hero__title { font-size: 1.875rem; }
  .sf-doc .sf-hero__lead { font-size: 1rem; }
}

/* === META BAR · Troubleshooting / System Monitoring badge style ========
   Tier 1 light badge + Tier 1 mint badge variant. Sits between hero and
   AEO to anchor page context.
   ======================================================================== */
.sf-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  font-family: var(--font-mono);
  font-size: 0.75rem;
  color: var(--slate);
  margin: 0 0 24px;
}
.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__badge--mint {
  background: var(--neutral);
  color: var(--primary);
  border-color: var(--neutral);
}
.sf-meta__sep { color: var(--line); }

/* === EYEBROW · §4.3 ===================================================== */
.sf-eyebrow {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--primary);
  display: block;
  margin-bottom: 12px;
}

/* === AEO ANSWER BLOCK · §6.1 ===========================================
   --ai variant (Tier 3, AI Iris). The page anchors on the NPU layer.
   Question is the heading. Mirror Troubleshooting / System Monitoring /
   Quickstart.
   ======================================================================== */
.sf-aeo {
  position: relative;
  background: var(--light);
  border: 1px solid var(--line);
  border-left: 4px solid var(--primary);
  border-radius: var(--r-md);
  padding: 24px 32px;
  margin: 0 0 32px;
}
.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 8px;
}
.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); }

/* === PILL · §6.2 ======================================================= */
.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;
}

/* === CALLOUT · §6.3 (Tier 5 semantic) ================================= */
.sf-callout {
  display: flex;
  flex-direction: column;
  gap: 6px;
  border-radius: var(--r-md);
  padding: 12px 16px;
  margin: 16px 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 a { color: inherit; text-decoration: underline; }
.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--danger   { background: var(--danger-bg);  border-left-color: var(--danger); }
.sf-callout--danger   .sf-callout__header { color: var(--danger-text); }

.sf-icon { flex-shrink: 0; }

/* === TOC · §6.15 ======================================================= */
.sf-toc {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  padding: 12px 16px;
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  margin: 0 0 40px;
}
.sf-toc__label {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--slate);
  margin-right: 8px;
}
.sf-toc__item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  background: var(--white);
  border: 0 !important;
  box-shadow: inset 0 0 0 1px var(--line);
  border-radius: var(--r-sm);
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--deep-ink) !important;
  text-decoration: none !important;
  transition: background .15s, box-shadow .15s;
  white-space: nowrap;
}
.sf-toc__item:hover {
  background: var(--primary);
  color: var(--on-primary) !important;
  box-shadow: inset 0 0 0 1px var(--primary);
}
.sf-toc__num {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 500;
  color: var(--slate);
}
.sf-toc__item:hover .sf-toc__num { color: var(--secondary); }

/* === FAQ SECTION HEADER (category band over the accordion) ============ */
.sf-doc .sf-faq-section {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 48px 0 14px;
  padding: 0 0 12px;
  border-bottom: 1px solid var(--line);
  scroll-margin-top: 16px;
}
.sf-doc .sf-faq-section__icon {
  width: 36px;
  height: 36px;
  border-radius: var(--r-md);
  background: var(--ai-mist);
  color: var(--ai-iris);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.sf-doc .sf-faq-section__icon svg {
  width: 18px;
  height: 18px;
  stroke: currentColor;
  stroke-width: 1.85;
  fill: none;
  display: block;
}
.sf-doc h2.sf-faq-section__title {
  flex: 1;
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 1.375rem;
  font-weight: 700;
  letter-spacing: -0.018em;
  color: var(--deep-ink);
  line-height: 1.2;
  display: flex;
  align-items: center;
  min-height: 36px;
}
.sf-faq-section__count {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--slate);
  padding: 4px 10px;
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-full);
  white-space: nowrap;
}

/* === FAQ ACCORDION · §6.16 (single bordered container, native <details>) */
.sf-faq {
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  background: var(--white);
  overflow: hidden;
  margin: 0 0 8px;
}
.sf-faq details { border-bottom: 1px solid var(--line); }
.sf-faq details:last-child { border-bottom: 0; }
.sf-faq summary {
  list-style: none;
  padding: 18px 22px;
  font-size: 1rem;
  font-weight: 700;
  color: var(--deep-ink);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  transition: background .15s;
  letter-spacing: -0.005em;
  line-height: 1.45;
  user-select: none;
}
.sf-faq summary::-webkit-details-marker { display: none; }
.sf-faq summary:hover { background: var(--light); }
.sf-faq details[open] > summary {
  color: var(--primary);
  background: transparent;
}
.sf-faq summary > span { flex: 1; min-width: 0; }
.sf-faq summary code {
  display: inline;
  white-space: nowrap;
  vertical-align: baseline;
  margin: 0 1px;
  font-size: 0.8125rem;
}
.sf-faq summary::after {
  content: '';
  width: 9px; height: 9px;
  border-right: 1.7px solid var(--slate);
  border-bottom: 1.7px solid var(--slate);
  transform: rotate(45deg);
  transition: transform .2s, border-color .2s;
  margin-top: -3px;
  flex-shrink: 0;
}
.sf-faq details[open] > summary::after {
  transform: rotate(-135deg);
  margin-top: 3px;
  border-color: var(--primary);
}
.sf-faq__a {
  padding: 0 22px 20px;
  font-size: 0.9375rem;
  color: var(--deep-ink);
  line-height: 1.65;
}
.sf-faq__a > *:first-child { margin-top: 0; }
.sf-faq__a > *:last-child { margin-bottom: 0; }
.sf-faq__a p { margin: 0 0 10px; font-size: 0.9375rem; line-height: 1.65; }
.sf-faq__a ul, .sf-faq__a ol { padding-left: 22px; margin: 4px 0 10px; }
.sf-faq__a li { font-size: 0.9375rem; margin-bottom: 4px; }
.sf-faq__a code { font-size: 0.8125rem; }
.sf-faq__a strong { color: var(--deep-ink); font-weight: 700; }
.sf-faq__a a { color: var(--primary); }

/* === TABLE · §6.10 ===================================================== */
.sf-table-wrap {
  display: block;
  width: 100%;
  overflow-x: auto;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  background: var(--white);
  margin: 14px 0 18px;
}
.sf-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 0.9375rem;
  margin: 0 !important;
}
.sf-table thead th {
  padding: 12px 16px;
  font-family: var(--font-sans);
  font-size: 0.8125rem;
  font-weight: 700;
  color: var(--slate);
  background: var(--light);
  text-align: left;
  border-bottom: 1px solid var(--line);
  white-space: nowrap;
}
.sf-table td {
  padding: 12px 16px;
  border-bottom: 1px solid var(--line);
  font-size: 0.9375rem;
  color: var(--deep-ink);
  vertical-align: top;
}
.sf-table tbody th,
.sf-table th[scope="row"] {
  padding: 12px 16px;
  border-bottom: 1px solid var(--line);
  font-family: var(--font-sans);
  font-size: 0.9375rem;
  font-weight: 600;
  text-align: left;
  color: var(--primary);
  background: var(--light);
  width: 36%;
  vertical-align: top;
}
.sf-table tr:last-child td,
.sf-table tr:last-child th { border-bottom: 0; }

/* === TERMINAL · §6.7 =================================================== */
.sf-terminal {
  background: #0D1117 !important;
  border: 1px solid #30363D !important;
  border-radius: var(--r-md);
  margin: 14px 0 18px;
  overflow: hidden;
  font-family: var(--font-mono);
}
.sf-terminal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  background: #161B22 !important;
  border-bottom: 1px solid #30363D !important;
  font-size: 0.6875rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #8B949E !important;
}
.sf-terminal__title { font-weight: 600; }
.sf-terminal__lang  {
  padding: 1px 7px;
  background: rgba(255,255,255,0.06);
  border-radius: var(--r-sm);
  color: #C9D1D9 !important;
  font-size: 0.625rem;
}
.sf-terminal pre {
  margin: 0 !important;
  padding: 14px 16px !important;
  background: transparent !important;
  border: 0 !important;
  color: #E6EDF3 !important;
  font-family: var(--font-mono) !important;
  font-size: 0.8125rem !important;
  line-height: 1.55 !important;
  overflow-x: auto;
  white-space: pre;
}
.sf-tx-cmd  { color: #7EE787 !important; }
.sf-tx-flag { color: #79C0FF !important; }
.sf-tx-arg  { color: #E3B341 !important; }
.sf-tx-cmt  { color: #8B949E !important; font-style: italic; }

/* === CTA CARD · §6.19 (default --primary accent) ====================== */
.sf-cta-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 20px 24px;
  background: var(--white);
  border: 1px solid var(--line);
  border-left: 4px solid var(--primary);
  border-radius: var(--r-xl);
  margin: 24px 0;
}
.sf-cta-card__copy { flex: 1; }
.sf-cta-card__title { font-size: 1.0625rem; font-weight: 700; color: var(--deep-ink); margin: 0 0 4px; }
.sf-cta-card__desc  { font-size: 0.9375rem; color: var(--slate); margin: 0; }
.sf-cta-card__btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 18px;
  background: var(--primary);
  color: var(--on-primary) !important;
  font-family: var(--font-sans);
  font-size: 0.875rem;
  font-weight: 600;
  border-radius: var(--r-sm);
  text-decoration: none !important;
  white-space: nowrap;
  transition: background .15s, transform .15s;
}
.sf-cta-card__btn:hover { background: var(--deep-ink); }
.sf-cta-card__btn svg { width: 14px; height: 14px; stroke: currentColor; stroke-width: 2; fill: none; }

/* === CONTACT GRID (page-end support tiles) ============================= */
.sf-contact-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin: 16px 0 8px;
}
.sf-contact-card {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 22px 22px 20px;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  text-decoration: none !important;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.sf-contact-card:hover {
  border-color: var(--primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-sm);
  text-decoration: none !important;
}
.sf-contact-card__icon {
  width: 36px; height: 36px;
  border-radius: var(--r-md);
  background: var(--ai-mist);
  color: var(--ai-iris);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 6px;
}
.sf-contact-card__icon svg { width: 18px; height: 18px; stroke: currentColor; stroke-width: 1.85; fill: none; }
.sf-contact-card__title {
  font-size: 1rem;
  font-weight: 700;
  color: var(--deep-ink);
  margin: 0;
}
.sf-contact-card__desc {
  font-size: 0.8125rem;
  color: var(--slate);
  line-height: 1.55;
  margin: 0;
}

/* === RESPONSIVE · §8 =================================================== */
@media (max-width: 820px) {
  .sf-doc h1 { font-size: 2.25rem; }
  .sf-cta-card { flex-direction: column; align-items: flex-start; }
  .sf-contact-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
  .sf-doc h1 { font-size: 2rem; }
  .sf-doc h2 { font-size: 1.625rem; }
  .sf-doc h2.sf-h2--compact { font-size: 1.25rem; }
  .sf-doc h3 { font-size: 1.25rem; }
  .sf-contact-grid   { grid-template-columns: 1fr; }
  .sf-faq summary    { padding: 16px 18px; font-size: 0.9375rem; }
  .sf-faq__a         { padding: 0 18px 18px; }
  .sf-table thead th, .sf-table tbody th, .sf-table th[scope="row"], .sf-table td { padding: 9px 12px; font-size: 0.8125rem; }
  .sf-terminal pre   { font-size: 0.75rem !important; }
  .sf-faq-section__count { display: none; }
}
@media (max-width: 400px) {
  .sf-doc h1 { font-size: 1.75rem; }
}

/* === DARK MODE · §3.5 (token override + dual selector per §13.7) ====== */
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc {
  --primary:       #034860;
  --secondary:     #00E0B8;
  --tertiary:      #1B2D45;
  --neutral:       #E8F5F0;
  --white:         #FFFFFF;
  --light:         #14222F;
  --line:          #2A3A4D;
  --slate-light:   #94A8B5;
  --slate:         #B5C3CE;
  --deep-ink:      #E8F5F0;
  --ai-iris:       #9783F4;
  --ai-mist:       #1F1A33;
  --success-bg:    #052E1B;
  --warning-bg:    #2A1F05;
  --danger-bg:     #2A0E0E;
  --info-bg:       #0A2E3F;
  --success-text:  #34D399;
  --warning-text:  #FBBF24;
  --danger-text:   #F87171;
  --info-text:     #5CD3EE;
}
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc h2 { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc a  { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc a:hover { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc code { background: rgba(255, 255, 255, 0.06); color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-eyebrow { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-aeo { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); border-left-color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-aeo__label { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-aeo__text strong { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-aeo__text { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-toc { background: rgba(255,255,255,0.03); border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-toc__item { background: rgba(255,255,255,0.04); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); color: var(--neutral) !important; }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-toc__item:hover { background: var(--secondary); color: var(--on-secondary) !important; box-shadow: inset 0 0 0 1px var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-toc__item:hover .sf-toc__num { color: var(--on-secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-table-wrap,
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq,
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-cta-card,
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-contact-card { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq details { border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq summary { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq summary:hover { background: rgba(255,255,255,0.04); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq details[open] > summary { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq summary::after { border-color: var(--slate-light); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq details[open] > summary::after { border-color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq__a { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq__a strong { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq__a a { color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq-section { border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq-section__icon { background: rgba(107,71,240,0.18); color: #B299FF; }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) h2.sf-faq-section__title { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-faq-section__count { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); color: var(--slate-light); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-table thead th { background: rgba(255,255,255,0.04); color: var(--slate-light); border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-table td { color: var(--neutral); border-color: rgba(255,255,255,0.06); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-table tbody th,
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-table th[scope="row"] { background: rgba(255,255,255,0.04); color: var(--secondary); border-color: rgba(255,255,255,0.06); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-cta-card__title { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-cta-card { border-left-color: var(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-cta-card__btn { background: var(--secondary); color: var(--on-secondary) !important; }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-cta-card__btn:hover { background: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-contact-card__icon { background: rgba(107,71,240,0.18); color: #B299FF; }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-contact-card__title { color: var(--neutral); }

[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-hero { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-hero__title { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-hero__lead  { color: var(--neutral); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-hero__lead code { background: rgba(255,255,255,0.06); }

[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-aeo--ai { background: rgba(107,71,240,0.12); border-color: rgba(107,71,240,0.30); border-left-color: var(--ai-iris); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-aeo--ai .sf-aeo__label { color: #B299FF; }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-aeo--ai .sf-aeo__text strong { color: #B299FF; }

[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-meta__badge { background: rgba(255,255,255,0.06); color: var(--secondary); border-color: var(--line); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-meta__badge--mint { background: rgba(0,224,184,0.14); color: var(--secondary); border-color: rgba(0,224,184,0.30); }

@media (prefers-color-scheme: dark) {
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc {
    --primary:       #034860;
    --secondary:     #00E0B8;
    --tertiary:      #1B2D45;
    --neutral:       #E8F5F0;
    --white:         #FFFFFF;
    --light:         #14222F;
    --line:          #2A3A4D;
    --slate-light:   #94A8B5;
    --slate:         #B5C3CE;
    --deep-ink:      #E8F5F0;
    --ai-iris:       #9783F4;
    --ai-mist:       #1F1A33;
    --success-bg:    #052E1B;
    --warning-bg:    #2A1F05;
    --danger-bg:     #2A0E0E;
    --info-bg:       #0A2E3F;
    --success-text:  #34D399;
    --warning-text:  #FBBF24;
    --danger-text:   #F87171;
    --info-text:     #5CD3EE;
  }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc h2 { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc a  { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc a:hover { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc code { background: rgba(255, 255, 255, 0.06); color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-eyebrow { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-aeo { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); border-left-color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-aeo__label { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-aeo__text strong { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-aeo__text { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-toc { background: rgba(255,255,255,0.03); border-color: rgba(255,255,255,0.08); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-toc__item { background: rgba(255,255,255,0.04); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); color: var(--neutral) !important; }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-toc__item:hover { background: var(--secondary); color: var(--on-secondary) !important; box-shadow: inset 0 0 0 1px var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-toc__item:hover .sf-toc__num { color: var(--on-secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-table-wrap,
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq,
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-cta-card,
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-contact-card { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq details { border-color: rgba(255,255,255,0.08); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq summary { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq summary:hover { background: rgba(255,255,255,0.04); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq details[open] > summary { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq summary::after { border-color: var(--slate-light); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq details[open] > summary::after { border-color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq__a { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq__a strong { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq__a a { color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq-section { border-color: rgba(255,255,255,0.08); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq-section__icon { background: rgba(107,71,240,0.18); color: #B299FF; }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) h2.sf-faq-section__title { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-faq-section__count { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); color: var(--slate-light); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-table thead th { background: rgba(255,255,255,0.04); color: var(--slate-light); border-color: rgba(255,255,255,0.08); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-table td { color: var(--neutral); border-color: rgba(255,255,255,0.06); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-table tbody th,
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-table th[scope="row"] { background: rgba(255,255,255,0.04); color: var(--secondary); border-color: rgba(255,255,255,0.06); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-cta-card__title { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-cta-card { border-left-color: var(--secondary); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-cta-card__btn { background: var(--secondary); color: var(--on-secondary) !important; }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-cta-card__btn:hover { background: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-contact-card__icon { background: rgba(107,71,240,0.18); color: #B299FF; }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-contact-card__title { color: var(--neutral); }

  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-hero { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-hero__title { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-hero__lead  { color: var(--neutral); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-hero__lead code { background: rgba(255,255,255,0.06); }

  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc .sf-aeo--ai { background: rgba(107,71,240,0.12); border-color: rgba(107,71,240,0.30); border-left-color: var(--ai-iris); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc .sf-aeo--ai .sf-aeo__label { color: #B299FF; }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-doc .sf-aeo--ai .sf-aeo__text strong { color: #B299FF; }

  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-meta__badge { background: rgba(255,255,255,0.06); color: var(--secondary); border-color: var(--line); }
  :is(html:not([data-color-mode="light"]):where(:not(:has(.rm-ReadMe[data-color-mode="light"]))),:where(.rm-ReadMe:is([data-color-mode="system"],[data-color-mode="dark"]))) .sf-meta__badge--mint { background: rgba(0,224,184,0.14); color: var(--secondary); border-color: rgba(0,224,184,0.30); }
}

/* ReadMe table reset · keep block scrolling, force table layout */
.markdown-body table { margin-bottom: 0 !important; }
.sf-doc .sf-table-wrap { display: block !important; width: 100% !important; overflow-x: auto !important; }
.sf-doc table.sf-table { display: table !important; width: 100% !important; table-layout: auto !important; }
</style>

<div class="sf-doc">

  
  <header class="sf-hero">
    <div class="sf-hero__copy">
      <p class="sf-hero__title">Frequently Asked Questions</p>
      <p class="sf-hero__lead">
        Direct answers to the most common questions about the <strong>Sixfab Edge AI Expansion Board for Raspberry Pi 5</strong>: compatibility, hardware assembly, the DXNN SDK, the three M.2 subsystems (AI, NVMe, LTE/5G), power and thermal limits, custom-model deployment, and <code>dxrt-runtime</code> updates. Each entry is short and technical. For deeper reference, follow the linked pages on hardware, the DEEPX NPU, the runtime, or troubleshooting.
      </p>
      <div class="sf-hero__chips">
        <span class="sf-pill">DEEPX DX-M1</span>
        <span class="sf-pill">Raspberry Pi 5</span>
        <span class="sf-pill">PCIe Gen 2 / Gen 3 x1</span>
        <span class="sf-pill">Triple M.2</span>
        <span class="sf-pill">USB-C PD 27 W</span>
        <span class="sf-pill">dxrt-runtime</span>
      </div>
    </div>
  </header>


  
  <div class="sf-meta">
    <span class="sf-meta__badge">Edge AI Expansion Board</span>
    <span class="sf-meta__sep">·</span>
    <span class="sf-meta__badge sf-meta__badge--mint">Reference</span>
    <span class="sf-meta__sep">·</span>
    <span>FAQ</span>
    <span class="sf-meta__sep">·</span>
    <span>Updated 2026-05-14</span>
  </div>


  
  <div class="sf-aeo sf-aeo--ai">
    <span class="sf-aeo__label">What is the Sixfab Edge AI Expansion Board?</span>
    <p class="sf-aeo__text">
      The <strong>Sixfab Edge AI Expansion Board for Raspberry Pi 5</strong> is an under-board baseboard with three M.2 slots: the <strong>DEEPX DX-M1 M.2 AI Module</strong> (up to 25 TOPS at INT8) over a dedicated PCIe Gen 2 / Gen 3 x1 link, an NVMe SSD slot, and an LTE/5G modem slot on M.2 Key-B. A single <strong>USB-C PD input</strong> (27 W minimum, 45 W recommended) powers the full stack and back-powers the Pi 5 through pogo pins. <strong>Supported host platforms: Raspberry Pi 5 (4 GB or 8 GB) and Raspberry Pi Compute Module 5 via the official Raspberry Pi CM5 IO Board.</strong> Pi 5 2 GB, Pi 4, CM4, and non-Raspberry Pi SBCs are not supported. The product runs vision models today; LLMs are on the DEEPX roadmap and Sixfab will support them as the silicon enables.
    </p>
  </div>

  
  <nav class="sf-toc" aria-label="On this page">
    <span class="sf-toc__label">On this page</span>
    <a href="#general"              class="sf-toc__item"><span class="sf-toc__num">01</span>General</a>
    <a href="#hardware"             class="sf-toc__item"><span class="sf-toc__num">02</span>Hardware</a>
    <a href="#software"             class="sf-toc__item"><span class="sf-toc__num">03</span>Software</a>
    <a href="#performance"          class="sf-toc__item"><span class="sf-toc__num">04</span>Performance</a>
    <a href="#connectivity-storage" class="sf-toc__item"><span class="sf-toc__num">05</span>Connectivity &amp; storage</a>
    <a href="#compatibility"        class="sf-toc__item"><span class="sf-toc__num">06</span>Compatibility</a>
  </nav>

  
  <div class="sf-faq-section" id="general">
    <span class="sf-faq-section__icon" aria-hidden="true">
      <svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.1 9a3 3 0 0 1 5.8 1c0 2 -3 3 -3 3M12 17h.01"/></svg>
    </span>
    <h2 class="sf-faq-section__title">General</h2>
    <span class="sf-faq-section__count">5 questions</span>
  </div>

  <div class="sf-faq">
    <details>
      <summary><span>What is the difference between the Edge AI Expansion Board and Sixfab AI HAT+?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Same DEEPX silicon family, different form factor and different surrounding subsystems.</strong> The Sixfab AI HAT+ is a top-mounted HAT+ specification compliant board that carries the DEEPX <strong>DX-M1M (25 TOPS at INT8)</strong> or <strong>DX-M1ML (13 TOPS at INT8)</strong> NPU only — soldered to the PCB and selected at purchase as one of two SKUs. The Edge AI Expansion Board is a bottom-mounted baseboard that carries the <strong>DEEPX DX-M1 M.2 AI Module</strong> on a swappable M.2 slot and adds an NVMe SSD slot plus an LTE/5G modem slot alongside the NPU, all three accessible at the same time. The DXNN SDK, <code>dxrt-runtime</code>, and compiled <code>.dxnn</code> models work across both products: generally, migration between AI HAT+ and the Edge AI Expansion Board can be done with the same commands without issues. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-overview" target="_blank" rel="noopener">Edge AI Expansion Board overview</a> for the full product positioning.</p>
        <div class="sf-table-wrap">
          <table class="sf-table">
            <thead>
              <tr><th scope="col">Feature</th><th scope="col">Edge AI Expansion Board</th><th scope="col">Sixfab AI HAT+</th></tr>
            </thead>
            <tbody>
              <tr><th scope="row">Mount</th><td>Under Raspberry Pi 5 (baseboard)</td><td>Above Raspberry Pi 5 (HAT+)</td></tr>
              <tr><th scope="row">NPU</th><td>DEEPX DX-M1 M.2 AI Module (swappable M.2)</td><td>DEEPX DX-M1M / DX-M1ML (soldered to the PCB)</td></tr>
              <tr><th scope="row">NVMe slot</th><td>Yes, M.2 M-Key via internal USB hub</td><td>No</td></tr>
              <tr><th scope="row">LTE/5G slot</th><td>Yes, M.2 Key-B with nano SIM</td><td>No</td></tr>
              <tr><th scope="row">Power input</th><td>USB-C PD, back-powers Pi 5 via pogo pins</td><td>Powered by Pi 5</td></tr>
              <tr><th scope="row">Host link</th><td>PCIe Gen 2 / Gen 3 x1 (40 mm FFC)</td><td>PCIe Gen 3 x1 (HAT+ FFC)</td></tr>
            </tbody>
          </table>
        </div>
      </div>
    </details>

    <details>
      <summary><span>What is the difference between the two Edge AI Expansion Board variants?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Same baseboard, same mounting kit, same accessories — the difference is whether the DEEPX DX-M1 M.2 AI Module is included in the box.</strong> <strong>Variant 1 (Board only)</strong> ships the Edge AI Expansion Board, the USB 3.0 Bridge, the 40 mm PCIe FFC, and the full M2.5 / M2 mounting kit. The DEEPX DX-M1 M.2 AI Module is <em>not</em> included; this variant is for customers who already have the module, want to source it on a separate purchase order, or need to standardise a single board SKU across deployments. <strong>Variant 2 (Board + DEEPX DX-M1 module)</strong> ships the same kit plus the DEEPX DX-M1 M.2 AI Module pre-bundled, for a single-SKU path from box to first inference. The driver, <code>dxrt-runtime</code>, and DXNN SDK are identical for both. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-overview" target="_blank" rel="noopener">Overview</a> for the full variant breakdown.</p>
      </div>
    </details>

    <details>
      <summary><span>Does the Edge AI Expansion Board run fully offline after installation?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, fully on-device after install.</strong> The initial <code>sixfab-dx</code> install requires internet to fetch APT packages. After that, the Edge AI Expansion Board runs entirely offline at inference time: everything stays on-device, with no outbound data flow unless your application explicitly adds it. This makes it suitable for privacy-sensitive deployments such as facial recognition, medical imaging, and restricted-area monitoring where data must stay on the local network. By default, no application is shipped pre-installed to monitor traffic; for verification, tools such as <code>tcpdump</code> can be used to inspect whether data is going out. Internet is needed again only when you want to update the runtime or NPU firmware. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-overview" target="_blank" rel="noopener">Overview</a> for the on-device privacy posture.</p>
        <div class="sf-callout sf-callout--success">
          <div class="sf-callout__header">
            <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>
            <span>Privacy by design</span>
          </div>
          <div class="sf-callout__content">
            <p>All inference is processed locally. No telemetry, no cloud calls, no data leaves the device at runtime, and the cellular modem only transmits when your application initiates a connection.</p>
          </div>
        </div>
      </div>
    </details>

    <details>
      <summary><span>Which AI tasks are not suitable for the Edge AI Expansion Board?</span></summary>
      <div class="sf-faq__a">
        <p>The DEEPX silicon supports vision models today; LLMs are on the DEEPX roadmap and Sixfab will support them as the silicon enables. The following workloads are not supported on current Edge AI Expansion Board shipments:</p>
        <ul>
          <li>Large language models and text generation</li>
          <li>Audio-only models (speech recognition, acoustic classification)</li>
          <li>Transformer-based language models (BERT, GPT, T5 variants)</li>
          <li>On-device model training or fine-tuning (the Edge AI Expansion Board runs inference only)</li>
        </ul>
        <p>For training-then-deploy workflows, use the ONNX → DXNN compiler on an Ubuntu workstation, or follow the Sixfab × Ultralytics acceleration path. See the <a href="/docs/ai-model-deployment-custom-models-dxnn-sdk" target="_blank" rel="noopener">Custom Models (DXNN SDK)</a> page for both routes.</p>
      </div>
    </details>

    <details>
      <summary><span>Are all my applications protected from data leaving the device?</span></summary>
      <div class="sf-faq__a">
        <p><strong>By default, yes, but verification is your responsibility once a cellular modem is installed.</strong> No application is shipped pre-installed to monitor or block outbound traffic. The AI inference stack itself does not phone home, and the LTE/5G modem will not transmit unless your user application initiates a connection. For deployments that require traffic verification, tools such as <code>tcpdump</code> can be used to inspect outbound traffic; this requires intermediate-level network knowledge. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-cellular-connectivity" target="_blank" rel="noopener">Cellular Connectivity</a> page for traffic-control patterns.</p>
      </div>
    </details>
  </div>

  
  <div class="sf-faq-section" id="hardware">
    <span class="sf-faq-section__icon" aria-hidden="true">
      <svg viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><rect x="9" y="9" width="6" height="6"/><line x1="9" y1="2" x2="9" y2="4"/><line x1="15" y1="2" x2="15" y2="4"/><line x1="9" y1="20" x2="9" y2="22"/><line x1="15" y1="20" x2="15" y2="22"/><line x1="20" y1="9" x2="22" y2="9"/><line x1="20" y1="14" x2="22" y2="14"/><line x1="2" y1="9" x2="4" y2="9"/><line x1="2" y1="14" x2="4" y2="14"/></svg>
    </span>
    <h2 class="sf-faq-section__title">Hardware</h2>
    <span class="sf-faq-section__count">7 questions</span>
  </div>

  <div class="sf-faq">
    <details>
      <summary><span>Which way around does the PCIe FFC cable connect?</span></summary>
      <div class="sf-faq__a">
        <p><strong>The end labelled <code>RPI5</code> goes to the Raspberry Pi 5; the end labelled <code>EDGE_AI</code> goes to the Expansion Board.</strong> The cable is a 40 mm FFC. The metal pin contacts must face <em>inward</em> (toward the respective circuit boards) and the labels must face <em>outward</em> (visible to you) at both ends. Using a different or longer cable is not recommended. PCIe FFC orientation is the most common assembly mistake; if <code>lspci</code> returns nothing after install, this is the first thing to check.</p>
        <div class="sf-callout sf-callout--warning">
          <div class="sf-callout__header">
            <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></svg>
            <span>Labels out, pins in</span>
          </div>
          <div class="sf-callout__content">
            <p>Re-verify that the <code>RPI5</code> and <code>EDGE_AI</code> labels are facing OUT (visible to you) and the metal pins are facing IN toward the circuit boards. This is the #1 cause of a missing NPU in <code>lspci</code>.</p>
          </div>
        </div>
      </div>
    </details>

    <details>
      <summary><span>What is the minimum power supply for the Edge AI Expansion Board?</span></summary>
      <div class="sf-faq__a">
        <p><strong>27 W USB-C PD minimum; 45 W recommended for full-stack configurations.</strong> The board accepts USB-C PD profiles of 5 V / 5 A, 9 V / 3 A, or 12 V / 2.25 A. Connecting a supply below 27 W results in reduced system performance and triggers a visual under-voltage warning on the Raspberry Pi 5. The 45 W envelope is recommended when AI, NVMe, and LTE/5G are all populated, since the cellular modem and NVMe SSD are both power-heavy. The board's total budget across all three M.2 slots, pogo pins, and the USB hub is bounded by the connected PSU; there is no on-board buck or boost. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> for the recommended bring-up kit.</p>
        <div class="sf-callout sf-callout--warning">
          <div class="sf-callout__header">
            <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></svg>
            <span>Set usb_max_current_enable=1 on first boot</span>
          </div>
          <div class="sf-callout__content">
            <p>Without <code>usb_max_current_enable=1</code> in <code>/boot/firmware/config.txt</code>, the Pi 5 pauses at boot and prompts the user to press the on-board button before continuing. Apply this setting during first-boot configuration.</p>
          </div>
        </div>
      </div>
    </details>

    <details>
      <summary><span>How does the board back-power the Raspberry Pi 5?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Through two 5 V pogo pins and two GND pogo pins on the underside of the Pi 5 GPIO header.</strong> No GPIO data pins are used. The pogo pins are rated for 3 A each (standard 2.54 mm pitch header rating), and the back-power scheme is compatible with the supported Raspberry Pi 5 variants (4 GB and 8 GB). Because no GPIO data pins are consumed, a standard top-mounted HAT can still be installed on the Pi 5 GPIO header while the Expansion Board sits underneath. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-pinout-gpio" target="_blank" rel="noopener">Pinout &amp; GPIO</a> page for the pogo-pin map.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I install a top-mounted HAT at the same time as the Edge AI Expansion Board?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, standard HATs are supported.</strong> The Edge AI Expansion Board sits under the Pi 5 and uses only pogo pins for back-power, so it does not consume any Raspberry Pi 5 GPIO data pins. The GPIO header is forwarded upward and a standard HAT can be installed on top of the Pi 5 as normal. If your top-mounted HAT requires additional external power, consult Sixfab before assembly. Anything designed for Pi 4 / Pi 5 that connects via the GPIO header or USB ports and draws power from the Pi is supported without issues. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-pinout-gpio" target="_blank" rel="noopener">Pinout &amp; GPIO</a> page for the GPIO forwarding diagram.</p>
      </div>
    </details>

    <details>
      <summary><span>Is the official Raspberry Pi Active Cooler compatible?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, the Edge AI Expansion Board is 100% compatible with the official Raspberry Pi Active Cooler.</strong> The Active Cooler installs on the Pi 5 as usual and runs from the Pi 5's own JST-SH fan header. The Expansion Board has no dedicated fan connector of its own; the design is intended to work in harmony with the Pi 5's existing cooling infrastructure. Active cooling is strongly recommended: the Pi 5 sits on top of the Expansion Board and can throttle under sustained AI load without it.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I hot-plug the Edge AI Expansion Board or its M.2 modules?</span></summary>
      <div class="sf-faq__a">
        <p><strong>No.</strong> The Edge AI Expansion Board requires the Raspberry Pi 5 to be fully powered off before mounting, removing, or changing any M.2 module. The PCIe FFC, pogo pins, and M.2 slots are not designed for live insertion or removal. Always shut down the Pi 5 from the OS, disconnect the USB-C PD supply, then make the change. If the USB-C power cable is accidentally unplugged during operation, no physical damage occurs to the board, but unsaved data is lost and file-system errors may occur on the NVMe SSD.</p>
        <div class="sf-callout sf-callout--danger">
          <div class="sf-callout__header">
            <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></svg>
            <span>Power off before any hardware change</span>
          </div>
          <div class="sf-callout__content">
            <p>Shutdown the OS, disconnect USB-C, then mount or swap modules. There is no physical power button on the Expansion Board; initiate shutdown from the Raspberry Pi 5 software.</p>
          </div>
        </div>
      </div>
    </details>

    <details>
      <summary><span>Can I use the Edge AI Expansion Board with a Raspberry Pi 5 case?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Generally not: off-the-shelf Pi 5 cases are not compatible.</strong> The Expansion Board sits under the Pi 5 with 15 mm M2.5 spacers as base standoffs and the assembled stack measures roughly 36 mm in Z height. Standard Pi 5 enclosures are designed for the Pi 5 footprint alone and do not accommodate an under-mounted baseboard with three populated M.2 slots. For closed-enclosure deployments, plan a custom enclosure sized for the full stack including the protruding USB-C connector and the assembled spacer height. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-specifications" target="_blank" rel="noopener">Specifications</a> page for mechanical dimensions.</p>
      </div>
    </details>
  </div>

  
  <div class="sf-faq-section" id="software">
    <span class="sf-faq-section__icon" aria-hidden="true">
      <svg viewBox="0 0 24 24"><polyline points="7 8 3 12 7 16"/><polyline points="17 8 21 12 17 16"/><line x1="14" y1="4" x2="10" y2="20"/></svg>
    </span>
    <h2 class="sf-faq-section__title">Software</h2>
    <span class="sf-faq-section__count">7 questions</span>
  </div>

  <div class="sf-faq">
    <details>
      <summary><span>Which operating systems are supported?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Raspberry Pi OS Bookworm and Trixie (64-bit) are the officially supported environments.</strong> ARM-based Debian Bookworm or Trixie can be made to work if pushed, but Raspberry Pi OS is the recommended path. The model-compilation toolchain (DX-COM) runs on a separate x86_64 workstation (not on the Pi itself) and supports Ubuntu 20.04 / 22.04 / 24.04 as the primary environments, plus Fedora 42–45, Red Hat Enterprise Linux 9–10, and CentOS Stream 9–10 validated as of DX-COM v2.3.0. See the <a href="/docs/ai-model-deployment-custom-models-dxnn-sdk" target="_blank" rel="noopener">Custom Models (DXNN SDK)</a> page for the host-machine requirements.</p>
      </div>
    </details>

    <details>
      <summary><span>What do I need to add to <code>config.txt</code> before first boot?</span></summary>
      <div class="sf-faq__a">
        <p>Three settings go at the end of <code>/boot/firmware/config.txt</code> before installing the Sixfab APT package. PCIe is not enabled by default on Raspberry Pi OS, and Gen 3 is opt-in:</p>
        <div class="sf-terminal">
          <div class="sf-terminal__head">
            <span class="sf-terminal__title">/boot/firmware/config.txt</span>
            <span class="sf-terminal__lang">ini</span>
          </div>
<pre><span class="sf-tx-cmt"># Enable the PCIe x1 lane (default: disabled)</span>
<span class="sf-tx-arg">dtparam=pciex1</span>

<span class="sf-tx-cmt"># Force PCIe Gen 3 for the AI accelerator (default: Gen 2)</span>
<span class="sf-tx-arg">dtparam=pciex1_gen=3</span>

<span class="sf-tx-cmt"># Allow the full USB-C PD current; required by the Expansion Board</span>
<span class="sf-tx-arg">usb_max_current_enable=1</span></pre>
        </div>
        <p>Reboot, then install <code>sixfab-dx</code> from the Sixfab APT repository. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> for the full first-boot procedure.</p>
        <div class="sf-callout sf-callout--info">
          <div class="sf-callout__header">
            <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><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>Gen 3 is opt-in here</span>
          </div>
          <div class="sf-callout__content">
            <p>Unlike the AI HAT+ (which ships with PCIe Gen 3 force-applied at the factory), the Edge AI Expansion Board uses the host's <code>config.txt</code> to select the PCIe generation. Gen 2 is the default; Gen 3 is opt-in via the line above. Measured bandwidth is 400–450 MB/s at Gen 2 and 800–900 MB/s at Gen 3.</p>
          </div>
        </div>
      </div>
    </details>

    <details>
      <summary><span>How do I install the driver and runtime?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Install <code>sixfab-dx</code> from the Sixfab APT repository.</strong> The package handles the driver build via DKMS, installs the user-space <code>dxrt-runtime</code>, and pulls in all required dependencies automatically. After installation, verify the NPU with <code>dxrt-cli -s</code> and the device node with <code>ls /dev/dxrt0</code>:</p>
        <div class="sf-terminal">
          <div class="sf-terminal__head">
            <span class="sf-terminal__title">terminal · Raspberry Pi 5</span>
            <span class="sf-terminal__lang">bash</span>
          </div>
<pre><span class="sf-tx-cmt"># 1. Fetch and install the Sixfab APT repo definition</span>
<span class="sf-tx-cmd">wget</span> https://github.com/sixfab/sixfab_dx/releases/download/v0.1/apt-repo-sixfab.deb
<span class="sf-tx-cmd">sudo dpkg</span> <span class="sf-tx-flag">-i</span> <span class="sf-tx-arg">apt-repo-sixfab.deb</span>

<span class="sf-tx-cmt"># 2. Install the driver, runtime, and dependencies</span>
<span class="sf-tx-cmd">sudo apt</span> update &amp;&amp; <span class="sf-tx-cmd">sudo apt</span> install <span class="sf-tx-arg">sixfab-dx</span>

<span class="sf-tx-cmt"># 3. Verify the NPU is detected</span>
<span class="sf-tx-cmd">dxrt-cli</span> <span class="sf-tx-flag">-s</span></pre>
        </div>
        <p>See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> page for the full install flow including verification commands for the NVMe and cellular subsystems.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I use OpenCV, NumPy, and Pillow with the DXNN runtime?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes.</strong> OpenCV, NumPy, Pillow, scikit-image, <code>Picamera2</code>, and <code>libcamera</code> all coexist with <code>dxrt-runtime</code> with no conflicts. Both Python (<code>dx_engine</code>) and C++ (<code>dxrt</code> API) interfaces are supported; C++ is the more latency-optimized path for production pipelines. The <code>dxrt-api</code> provides direct connection to the NPU. See the <a href="/docs/ai-model-deployment-custom-models-dxnn-sdk" target="_blank" rel="noopener">Custom Models (DXNN SDK)</a> page for both API patterns.</p>
      </div>
    </details>

    <details>
      <summary><span>Does the DXNN SDK support Docker containers?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, run the container in privileged mode with the NPU device node passed through.</strong> The kernel driver lives on the host, and the container needs access to <code>/dev/dxrt0</code>:</p>
        <div class="sf-terminal">
          <div class="sf-terminal__head">
            <span class="sf-terminal__title">terminal</span>
            <span class="sf-terminal__lang">bash</span>
          </div>
<pre><span class="sf-tx-cmd">docker run</span> <span class="sf-tx-flag">--privileged</span> <span class="sf-tx-flag">-v</span> <span class="sf-tx-arg">/dev/dxrt0:/dev/dxrt0</span> my-app:latest</pre>
        </div>
        <p>See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> page for runtime-on-host requirements.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I use a model from Hugging Face or the ONNX Model Zoo directly on the NPU?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, after a one-time compilation step.</strong> Download the ONNX file, compile it with DX-COM on an x86_64 Ubuntu workstation, and deploy the resulting <code>.dxnn</code> file to the Raspberry Pi via SCP; no retraining needed. If the model has a layer the NPU cannot accelerate, the runtime falls back to CPU for that layer if it is executable by ONNX, but FPS will drop significantly. Check the DEEPX supported-operator list before compiling. See the <a href="/docs/ai-model-deployment-custom-models-dxnn-sdk" target="_blank" rel="noopener">Custom Models (DXNN SDK)</a> page for the full conversion path, and the <a href="/docs/ai-model-deployment-sixfab-model-zoo" target="_blank" rel="noopener">Sixfab Model Zoo</a> for pre-compiled models that skip this step entirely.</p>
      </div>
    </details>

    <details>
      <summary><span>How do I update <code>dxrt-runtime</code> and the NPU firmware?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Runtime via APT, firmware via <code>dxrt-cli -u</code>.</strong> The runtime ships through the Sixfab APT repository: <code>sudo apt update &amp;&amp; sudo apt install sixfab-dx</code> replaces the previous version in place, and the kernel driver is part of the same package, so a runtime update also refreshes the driver via DKMS. Firmware updates are rarely required; only run them when the runtime reports a version mismatch:</p>
        <div class="sf-terminal">
          <div class="sf-terminal__head">
            <span class="sf-terminal__title">terminal · Raspberry Pi 5</span>
            <span class="sf-terminal__lang">bash</span>
          </div>
<pre><span class="sf-tx-cmt"># 1. Check the current firmware version</span>
<span class="sf-tx-cmd">dxrt-cli</span> <span class="sf-tx-flag">-s</span>   <span class="sf-tx-cmt"># FW version : vX.Y.Z</span>

<span class="sf-tx-cmt"># 2. Clone the firmware image (one-time)</span>
<span class="sf-tx-cmd">git clone</span> https://github.com/DEEPX-AI/dx_fw

<span class="sf-tx-cmt"># 3. Flash the firmware</span>
<span class="sf-tx-cmd">dxrt-cli</span> <span class="sf-tx-flag">-u</span> <span class="sf-tx-arg">dx_fw/m1/2.5.6/mdot2/fw.bin</span>

<span class="sf-tx-cmt"># 4. Confirm the new version is active</span>
<span class="sf-tx-cmd">dxrt-cli</span> <span class="sf-tx-flag">-s</span></pre>
        </div>
        <p>Existing compiled <code>.dxnn</code> models generally continue to work after a runtime update. When a release introduces a breaking ABI change, the runtime returns an explicit version-mismatch error at load time rather than failing silently; that is the signal to recompile the source ONNX with the matching DX-COM compiler version. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-troubleshooting" target="_blank" rel="noopener">Troubleshooting</a> page for the version-mismatch recovery flow.</p>
      </div>
    </details>
  </div>

  
  <div class="sf-faq-section" id="performance">
    <span class="sf-faq-section__icon" aria-hidden="true">
      <svg viewBox="0 0 24 24"><path d="M13 3l0 7l6 0l-8 11l0 -7l-6 0l8 -11"/></svg>
    </span>
    <h2 class="sf-faq-section__title">Performance</h2>
    <span class="sf-faq-section__count">5 questions</span>
  </div>

  <div class="sf-faq">
    <details>
      <summary><span>How many simultaneous camera streams can the NPU handle?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Roughly four 720p streams before the Raspberry Pi 5 CPU becomes the bottleneck.</strong> After four streams, the frame rate begins to drop, but the drop is caused by CPU saturation on frame capture and preprocessing, not by the NPU itself. Profile with <code>dxtop</code> during multi-stream inference to confirm which subsystem is the limiter. For higher concurrency, reduce per-stream resolution, use C++ rather than Python for the preprocessing path, or offload frame capture to a hardware accelerator. See the <a href="/docs/ai-model-deployment-system-monitoring" target="_blank" rel="noopener">System Monitoring</a> page for profiling commands.</p>
      </div>
    </details>

    <details>
      <summary><span>Can the NPU run more than one AI model at the same time?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, up to 3 concurrent models tested.</strong> The NPU schedules concurrent inference across multiple models. Up to three models running in parallel have been verified without issue; more than three has not been tested. Practical limits depend on the combined model size fitting in NPU memory and on the CPU's ability to feed frames at the requested rate. See the <a href="/docs/ai-model-deployment-custom-models-dxnn-sdk" target="_blank" rel="noopener">Custom Models (DXNN SDK)</a> page for concurrent-inference patterns.</p>
      </div>
    </details>

    <details>
      <summary><span>Does running NVMe and LTE/5G concurrently with AI slow down inference?</span></summary>
      <div class="sf-faq__a">
        <p><strong>No, there is virtually no degradation in AI inference performance.</strong> The AI accelerator sits on a dedicated PCIe Gen 2 / Gen 3 x1 link via the 40 mm FFC, while the NVMe SSD and LTE/5G modem share a separate internal USB 3.2 Gen 1 (5 Gbps) hub through the USB Bridge PCBA. Because the two data paths are independent at the hardware level, AI throughput does not measurably drop when both the SSD and the cellular modem are active. The triple-subsystem story is the reason this board exists: it is designed to do all three concurrently. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-overview" target="_blank" rel="noopener">Overview</a> for the data-path diagram.</p>
        <div class="sf-callout sf-callout--success">
          <div class="sf-callout__header">
            <svg class="sf-icon" width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>
            <span>AI + storage + cellular, in parallel</span>
          </div>
          <div class="sf-callout__content">
            <p>The dedicated PCIe lane for the NPU keeps it isolated from the USB hub that carries the SSD and the cellular modem. Real-time inference, on-device data buffering, and WAN connectivity coexist without measurable contention.</p>
          </div>
        </div>
      </div>
    </details>

    <details>
      <summary><span>What is the maximum NVMe SSD throughput on this board?</span></summary>
      <div class="sf-faq__a">
        <p><strong>380–440 MB/s sequential read; 350–410 MB/s sequential write.</strong> The NVMe slot is USB-attached through the internal USB 3.2 Gen 1 (5 Gbps) hub and a Realtek RTL9210B-CG USB-to-NVMe bridge, so throughput is capped at the 5 Gbps USB bus minus 8b/10b encoding overhead and protocol management. The OS sees the SSD as a USB Mass Storage device (typically <code>/dev/sda</code>), not as a native PCIe NVMe device. For workloads that need native NVMe throughput, the Edge AI Expansion Board's storage path is not the right tool; its design priority is concurrent operation with the cellular modem on the same USB hub. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-nvme-storage" target="_blank" rel="noopener">NVMe Storage</a> page for the validated SSD list and partition setup.</p>
      </div>
    </details>

    <details>
      <summary><span>What happens if my power supply is below 27 W?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Reduced system performance and a visual under-voltage warning.</strong> The Raspberry Pi 5 detects under-voltage and degrades in stages: a yellow lightning-bolt indicator appears, the CPU throttles, and at extreme transients the NPU may throttle or time out mid-inference. The board's total budget is bounded by the connected PSU, so undersized supplies cascade across every subsystem. Use the official Raspberry Pi 27 W USB-C PD supply as the minimum; 45 W is recommended when AI, NVMe, and cellular are all populated. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-troubleshooting" target="_blank" rel="noopener">Troubleshooting</a> page for under-voltage diagnostics.</p>
      </div>
    </details>
  </div>

  
  <div class="sf-faq-section" id="connectivity-storage">
    <span class="sf-faq-section__icon" aria-hidden="true">
      <svg viewBox="0 0 24 24"><path d="M5 12l5 -5l5 5"/><path d="M5 19l5 -5l5 5"/><path d="M15 5l4 0l0 4"/><path d="M19 15l0 4l-4 0"/></svg>
    </span>
    <h2 class="sf-faq-section__title">Connectivity &amp; storage</h2>
    <span class="sf-faq-section__count">6 questions</span>
  </div>

  <div class="sf-faq">
    <details>
      <summary><span>Which M.2 slot is which, and what goes where?</span></summary>
      <div class="sf-faq__a">
        <p>The Expansion Board carries <strong>three M.2 slots</strong>, each silkscreened with a slot label. Modules are not interchangeable across slots:</p>
        <div class="sf-table-wrap">
          <table class="sf-table">
            <thead>
              <tr><th scope="col">Slot label</th><th scope="col">Key</th><th scope="col">Hosts</th><th scope="col">Data path</th></tr>
            </thead>
            <tbody>
              <tr><th scope="row"><code>M.2-PCIE</code></th><td>M-Key</td><td>DEEPX DX-M1 AI accelerator</td><td>PCIe Gen 2 / Gen 3 x1 via 40 mm FFC</td></tr>
              <tr><th scope="row"><code>M.2-SSD</code></th><td>M-Key</td><td>NVMe SSD (2230 / 2242 / 2260 / 2280)</td><td>USB 3.2 Gen 1 via RTL9210B-CG bridge</td></tr>
              <tr><th scope="row"><code>CELLULAR LTE/5G</code></th><td>Key-B</td><td>LTE/5G modem with nano SIM</td><td>USB 3.2 Gen 1 via USB Bridge PCBA</td></tr>
            </tbody>
          </table>
        </div>
        <p>All three slots use the same insertion procedure: 30° insertion angle, seat the gold contacts, press flat, secure with an M2 × 6 mm flat-head screw, finger-tight only. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> for the assembly walkthrough.</p>
      </div>
    </details>

    <details>
      <summary><span>Can the NVMe SSD and the LTE/5G modem run at the same time?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, both run in parallel without issue.</strong> The NVMe slot and the LTE/5G modem slot are both managed by the same internal USB 3.2 Gen 1 hub, but the hub splits Raspberry Pi 5's USB 3.0 bandwidth at the hardware level, so the two paths are functionally independent. The total USB bus ceiling is 5 Gbps, shared across both devices; sustained NVMe at 380–440 MB/s plus typical LTE/5G data rates fit comfortably under that ceiling. AI inference on the dedicated PCIe lane is not affected. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-overview" target="_blank" rel="noopener">Overview</a> for the data-path diagram.</p>
      </div>
    </details>

    <details>
      <summary><span>Does the board have a built-in antenna for the LTE/5G modem?</span></summary>
      <div class="sf-faq__a">
        <p><strong>No, bring your own antenna.</strong> The Expansion Board has no built-in antennas. It provides the mechanical infrastructure to connect external antennas via the M.2 modem module's own RF connectors. The antenna connector type (typically U.FL or a similar SMC variant) and the number of antenna ports (main, diversity, GNSS) depend on the modem module installed in the M.2 Key-B slot. <code>[NEED FROM SIXFAB: tested modem list with confirmed antenna connector types]</code>. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-cellular-connectivity" target="_blank" rel="noopener">Cellular Connectivity</a> page for the current cellular module compatibility status.</p>
      </div>
    </details>

    <details>
      <summary><span>How many SIM card slots does the board have, and does it support eSIM?</span></summary>
      <div class="sf-faq__a">
        <p><strong>One nano SIM slot; eUICC nano SIMs are supported; no onboard eSIM chip.</strong> The Expansion Board carries a single physical nano SIM slot as the primary connectivity option. There is no onboard eSIM chip integrated directly into the board's PCB, but users can run an eUICC nano SIM card in the physical slot to switch between operator profiles in software. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-cellular-connectivity" target="_blank" rel="noopener">Cellular Connectivity</a> page for SIM and eUICC setup.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I boot Raspberry Pi OS from an NVMe SSD installed in the Expansion Board?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, but it is technically a USB Boot.</strong> Because the NVMe slot routes through the internal USB hub via the Realtek bridge, the OS sees the SSD as a USB Mass Storage device, not as a native PCIe NVMe device. To boot from it, update the Pi 5 bootloader (EEPROM) configuration to enable USB Boot at the appropriate priority. The SSD then becomes the boot device the same way an external USB SSD would. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-nvme-storage" target="_blank" rel="noopener">NVMe Storage</a> page for the bootloader update steps and validated boot configuration.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I still use the Raspberry Pi 5's USB ports while the Expansion Board is installed?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, three of the four Pi 5 USB ports remain free for peripherals.</strong> The USB Bridge PCBA occupies one of the two blue USB 3.0 ports on the Pi 5 to connect the on-board hub. That leaves one USB 3.0 port and both USB 2.0 ports available for keyboard, mouse, USB camera, or other peripherals. Two caveats:</p>
        <ul>
          <li><strong>Bandwidth.</strong> All Pi 5 USB ports share the 5 Gbps bandwidth of the RP1 chip. Adding another high-speed drive forces the on-board NVMe, cellular modem, and that drive to share the 5 Gbps ceiling.</li>
          <li><strong>Power.</strong> Total current across all Pi 5 USB ports is capped at 1.6 A. The cellular modem and NVMe SSD are both power-heavy, so adding another high-draw device (such as an external HDD) may cause system instability.</li>
        </ul>
        <p>For peripherals that draw &lt; 500 mA (keyboards, mice, low-power webcams) there is no measurable impact.</p>
      </div>
    </details>
  </div>

  
  <div class="sf-faq-section" id="compatibility">
    <span class="sf-faq-section__icon" aria-hidden="true">
      <svg viewBox="0 0 24 24"><path d="M12 2l9 4.5l-9 4.5l-9 -4.5z"/><path d="M3 11.5l9 4.5l9 -4.5"/><path d="M3 16.5l9 4.5l9 -4.5"/></svg>
    </span>
    <h2 class="sf-faq-section__title">Compatibility</h2>
    <span class="sf-faq-section__count">6 questions</span>
  </div>

  <div class="sf-faq">
    <details>
      <summary><span>Which Raspberry Pi models are supported?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Raspberry Pi 5 (4 GB or 8 GB) and Raspberry Pi Compute Module 5 via the official Raspberry Pi CM5 IO Board.</strong> The Edge AI Expansion Board's mechanical layout, pogo-pin back-power scheme, and 40 mm PCIe FFC cable are designed to work with the Pi 5 board and with CM5 mounted on the CM5 IO Board. The 2 GB Pi 5 SKU is not supported; 4 GB is the minimum so the system has enough headroom for the AI inference stack alongside the OS. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-overview" target="_blank" rel="noopener">Overview</a> for the canonical compatibility statement.</p>
        <div class="sf-table-wrap">
          <table class="sf-table">
            <thead>
              <tr><th scope="col">Host platform</th><th scope="col">Supported</th><th scope="col">Note</th></tr>
            </thead>
            <tbody>
              <tr><th scope="row">Raspberry Pi 5 (4 GB / 8 GB)</th><td>Yes</td><td>Primary validated host platform</td></tr>
              <tr><th scope="row">Raspberry Pi Compute Module 5 + CM5 IO Board</th><td>Yes</td><td>Secondary supported path via the official IO Board</td></tr>
              <tr><th scope="row">Raspberry Pi 5 (2 GB)</th><td>No</td><td>Insufficient RAM headroom for the AI inference stack</td></tr>
              <tr><th scope="row">Raspberry Pi 4 / Compute Module 4</th><td>No</td><td>No PCIe FFC connector</td></tr>
              <tr><th scope="row">Non-Raspberry Pi SBCs</th><td>No</td><td>Even with a PCIe FFC interface</td></tr>
            </tbody>
          </table>
        </div>
      </div>
    </details>

    <details>
      <summary><span>Which Raspberry Pi Camera Modules are supported?</span></summary>
      <div class="sf-faq__a">
        <p><strong>All current Raspberry Pi camera modules are tested and supported.</strong> The camera connects to the Pi 5 CSI port, not to the Expansion Board, so the NPU only sees preprocessed frames passed from your application code. Validated cameras include:</p>
        <ul>
          <li><strong>Camera Module 2</strong> (IMX219, 8 MP): the standard module</li>
          <li><strong>Camera Module 3</strong> (IMX708, 12 MP): with powered autofocus</li>
          <li><strong>High Quality Camera</strong> (IMX477, 12.3 MP): interchangeable C/CS-mount lenses</li>
          <li><strong>Global Shutter Camera</strong> (IMX296): high-speed motion capture</li>
        </ul>
        <p>USB webcams, local video files, and RTSP streams from IP cameras are also valid frame sources. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> for an end-to-end capture-and-inference example.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I stack multiple Edge AI Expansion Boards on a single Pi 5?</span></summary>
      <div class="sf-faq__a">
        <p><strong>No, one Expansion Board per Pi 5.</strong> The Raspberry Pi 5 exposes a single PCIe FFC connector, which the Edge AI Expansion Board occupies. The pogo-pin back-power scheme and the under-board mechanical footprint also assume a single baseboard. Using multiple Expansion Boards across multiple Pi 5 units in the same deployment is fine; stacking them on a single Pi 5 is not supported. To scale beyond a single NPU on one Pi 5, deploy multiple Pi 5 + Expansion Board units and coordinate them from an edge orchestrator on your local network.</p>
      </div>
    </details>

    <details>
      <summary><span>Is the Edge AI Expansion Board suitable for outdoor or industrial deployments?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Not without an enclosure.</strong> The Edge AI Expansion Board is a commercial-grade PCB intended for indoor use. Outdoor or industrial deployments require a sealed enclosure rated IP54 or higher to handle moisture and dust, an active cooling path inside the enclosure (the NPU can throttle around 90 °C under sustained load), and a thermal design that dissipates the system's full power draw without breaking the IP seal. The customer should monitor and control the level of cooling required for their application; for many applications passive cooling is sufficient at 25 °C ambient, but under stress conditions or in higher ambient temperatures, this must be measured and managed by the deployer. For fully-rated industrial AI workloads, see the <strong>ALPON X5 AI</strong> product line, which ships fanless, IP-rated, and 24/7 certified out of the box.</p>
      </div>
    </details>

    <details>
      <summary><span>Can I migrate code and models from the Sixfab AI HAT+ to the Edge AI Expansion Board?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, the same <code>.dxnn</code> models and <code>dxrt</code> commands work unchanged.</strong> Both products are built on the DEEPX <strong>DX-M1 series</strong> NPU and share the same DXNN SDK: the Edge AI Expansion Board carries the <strong>DEEPX DX-M1 M.2 AI Module</strong> on a swappable M.2 slot, while the AI HAT+ ships the <strong>DEEPX DX-M1M (25 TOPS at INT8)</strong> or <strong>DX-M1ML (13 TOPS at INT8)</strong> soldered to the board. Migration is generally a drop-in: compiled models, inference code (Python <code>dx_engine</code> or C++ <code>dxrt</code> API), and command-line tools (<code>dxrt-cli</code>, <code>dxtop</code>) carry over without modification. What changes is the surrounding environment: the Edge AI Expansion Board adds the NVMe and LTE/5G subsystems, the PCIe Gen 3 step requires a <code>config.txt</code> edit (unlike AI HAT+, which factory-applies Gen 3), and power is supplied through USB-C PD rather than the Pi 5's own USB-C input. See the <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> page for the bring-up steps unique to this product.</p>
      </div>
    </details>

    <details>
      <summary><span>Does the Edge AI Expansion Board have a hardware watchdog if the Pi 5 freezes?</span></summary>
      <div class="sf-faq__a">
        <p><strong>Yes, the watchdog lives on the Raspberry Pi 5 itself, not on the Expansion Board.</strong> If the Pi 5 freezes or crashes, the Pi 5's built-in hardware watchdog can automatically restart the system once configured in <code>config.txt</code> and enabled at the systemd level. The Expansion Board has no independent watchdog of its own and no physical power button. Initiate clean shutdowns from the Raspberry Pi 5 software, and rely on the Pi 5's watchdog for unattended recovery from soft hangs.</p>
      </div>
    </details>
  </div>

  
  <h2 style="margin-top: 48px;">Still have questions?</h2>

  <p>Reach out through any of the channels below. For technical diagnostics, bring the <code>lspci</code> output, the <code>lsusb</code> output, the <code>dxrt-cli -s</code> snapshot, and the runtime version reported by the device.</p>

  <div class="sf-contact-grid">
    <a class="sf-contact-card" href="mailto:hello@sixfab.com" target="_blank" rel="noopener">
      <span class="sf-contact-card__icon" aria-hidden="true">
        <svg viewBox="0 0 24 24"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
      </span>
      <h3 class="sf-contact-card__title">Email support</h3>
      <p class="sf-contact-card__desc">hello@sixfab.com for technical questions and RMA requests.</p>
    </a>
    <a class="sf-contact-card" href="https://community.sixfab.com" target="_blank" rel="noopener">
      <span class="sf-contact-card__icon" aria-hidden="true">
        <svg viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
      </span>
      <h3 class="sf-contact-card__title">Community forum</h3>
      <p class="sf-contact-card__desc">community.sixfab.com for developer discussion and shared builds.</p>
    </a>
    <a class="sf-contact-card" href="https://sixfab.com/contact/" target="_blank" rel="noopener">
      <span class="sf-contact-card__icon" aria-hidden="true">
        <svg viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>
      </span>
      <h3 class="sf-contact-card__title">Contact Sixfab</h3>
      <p class="sf-contact-card__desc">Sales, volume pricing, custom variants, and partnership inquiries.</p>
    </a>
  </div>

  

</div>
`}</HTMLBlock>

<br />