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

# Specifications

<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, Specifications
   Built on DESIGN.md (six-tier color system) + sixfab-docs-design-language.md
   Tier 1 surface (Sixfab Teal anchor). AI Iris is reserved for AI feature
   surfaces and does not appear on this structural page.
   ========================================================================== */

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

/* === DESIGN TOKENS (Tier 1-6, DESIGN.md canonical) ====================== */
.sf-doc {
  --primary:       #034860;
  --secondary:     #00E0B8;
  --tertiary:      #1B2D45;
  --neutral:       #E8F5F0;
  --white:         #FFFFFF;
  --light:         #F6F8F9;
  --line:          #DDE6EC;
  --slate-light:   #94A8B5;
  --slate:         #52667A;
  --deep-ink:      #10202E;
  --ai-iris:       #6B47F0;
  --ai-mist:       #F0EDFF;
  --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-primary:    #FFFFFF;
  --on-secondary:  #1B2D45;
  --on-neutral:    #10202E;

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

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

  --shadow-sm: 0 1px 2px rgba(10, 23, 33, 0.04);
  --shadow-md: 0 4px 12px rgba(10, 23, 33, 0.06);

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

/* === BASE TYPOGRAPHY (design language §4.4) ============================= */
.sf-doc {
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
.sf-doc *, .sf-doc *::before, .sf-doc *::after { 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: 0; border: 0;
}
.sf-doc h2:first-of-type { margin-top: 0; }
.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 h4 {
  font-size: 1.125rem; font-weight: 600; letter-spacing: -0.015em;
  line-height: 1.3; color: var(--deep-ink); margin: 24px 0 8px;
}
.sf-doc p { font-size: 1rem; line-height: 1.6; color: var(--deep-ink); margin: 0 0 16px; text-align: justify; hyphens: auto; }
.sf-doc .sf-lead { font-size: 1.125rem; line-height: 1.6; color: var(--deep-ink); margin: 0 0 24px; text-align: justify; hyphens: auto; }
/* Override: keep tight component prose left-aligned (justify creates ugly gaps in narrow columns) */
.sf-doc .sf-hero__lead,
.sf-doc .sf-aeo__text,
.sf-doc .sf-callout__content p,
.sf-doc .sf-conn__desc,
.sf-doc .sf-method__desc,
.sf-doc .sf-led-card__desc { text-align: left; hyphens: manual; }
.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 a { color: var(--primary); text-decoration: none; }
.sf-doc a:hover { color: var(--deep-ink); text-decoration: underline; }
.sf-doc strong { color: var(--deep-ink); font-weight: 700; }
.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;
}

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

/* === HERO (compact, single-column, Tier 1 default surface) ============== */
.sf-hero {
  padding: var(--xl);
  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-size: 2.5rem; font-weight: 800; line-height: 1.08; letter-spacing: -0.03em;
  color: var(--deep-ink); margin: 0 0 14px;
  font-family: var(--font-sans);
  text-align: left; hyphens: manual;
}
.sf-doc .sf-hero__lead {
  font-size: 1.0625rem; line-height: 1.6;
  color: var(--deep-ink); margin: 0 0 18px;
  font-family: var(--font-sans);
}
.sf-hero__chips { display: flex; flex-wrap: wrap; gap: 6px; }

/* === META BAR ============================================================ */
.sf-meta {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: var(--sm);
  font-family: var(--font-mono);
  font-size: 0.75rem; color: var(--slate);
  margin: 0 0 var(--lg);
}
.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);
  text-decoration: none !important;
}
.sf-meta__badge:hover { background: var(--neutral); color: var(--primary); }
.sf-meta__badge--mint {
  background: var(--neutral); color: var(--primary); border-color: var(--neutral);
}
.sf-meta__sep { color: var(--line); }

/* === IN THIS GUIDE (sf-toc, design language §6.15) ====================== */
.sf-toc {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 6px;
  padding: var(--md) var(--lg);
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  margin: 0 0 var(--xl);
}
.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: var(--sm);
}
.sf-toc__item {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px;
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--r-sm);
  font-size: 0.8125rem; font-weight: 600;
  color: var(--deep-ink);
  text-decoration: none !important;
  white-space: nowrap;
}
.sf-doc .sf-toc__item:hover,
.sf-doc .sf-toc__item:focus {
  background: var(--primary);
  color: var(--white) !important;
  border-color: var(--primary);
  text-decoration: none !important;
}
.sf-doc .sf-toc__item:hover .sf-toc__num,
.sf-doc .sf-toc__item:focus .sf-toc__num {
  color: var(--secondary);
}
.sf-toc__num {
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500; color: var(--slate);
}

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

/* === PILLS (design language §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;
}
.sf-pill--success { background: var(--success-bg); color: var(--success-text); border-color: var(--success-bg); }
.sf-pill--warning { background: var(--warning-bg); color: var(--warning-text); border-color: var(--warning-bg); }
.sf-pill--info    { background: var(--info-bg);    color: var(--info-text);    border-color: var(--info-bg); }
.sf-pill--danger  { background: var(--danger-bg);  color: var(--danger-text);  border-color: var(--danger-bg); }
.sf-pill--brand   { background: var(--primary);    color: var(--on-primary);   border-color: var(--primary); }
.sf-pill--mint    { background: var(--secondary);  color: var(--on-secondary); border-color: var(--secondary); font-weight: 700; }

/* === QUICK REFERENCE (compact, dense card grid) ========================= */
.sf-qref {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 10px;
  margin: 0 0 var(--xl);
}
.sf-qref__item {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  padding: 14px 16px;
  display: flex; flex-direction: column; gap: 4px;
  transition: border-color .15s;
}
.sf-qref__item:hover { border-color: var(--slate-light); }
.sf-qref__item--featured {
  background: var(--neutral);
  border: 2px solid var(--secondary);
  padding: 13px 15px;
}
.sf-qref__label {
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--slate);
}
.sf-qref__item--featured .sf-qref__label { color: var(--primary); }
.sf-qref__value {
  font-family: var(--font-sans);
  font-size: 1.375rem; font-weight: 800;
  letter-spacing: -0.025em;
  color: var(--deep-ink); line-height: 1.1;
  margin-top: 2px;
}
.sf-qref__sub {
  font-family: var(--font-mono);
  font-size: 0.6875rem; color: var(--slate);
  margin-top: 4px; line-height: 1.4;
  letter-spacing: 0.02em;
}

/* === SPEC GROUPS (modern card grid replacing per-category tables) ======= */
.sf-spec-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 16px;
  margin: 0 0 24px;
}
.sf-spec-card {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 20px 22px;
  display: flex; flex-direction: column;
  transition: border-color .15s;
}
.sf-spec-card:hover { border-color: var(--slate-light); }
.sf-spec-card__head {
  display: flex; align-items: center; gap: 10px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--line);
  margin-bottom: 14px;
}
.sf-spec-card__icon {
  width: 32px; height: 32px;
  border-radius: var(--r-md);
  background: var(--light); color: var(--primary);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.sf-spec-card__icon svg { width: 18px; height: 18px; }
.sf-spec-card__title {
  font-size: 1rem; font-weight: 700;
  color: var(--primary);
  letter-spacing: -0.01em;
}
.sf-spec-card__body { display: flex; flex-direction: column; }
.sf-spec-row {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px dashed var(--line);
}
.sf-spec-row:last-child { border-bottom: 0; padding-bottom: 0; }
.sf-spec-row__key {
  font-size: 0.875rem; font-weight: 600;
  color: var(--slate);
  flex-shrink: 0;
}
.sf-spec-row__val {
  font-size: 0.875rem; font-weight: 600;
  color: var(--deep-ink);
  text-align: right;
  line-height: 1.45;
}
.sf-spec-row__val code {
  font-size: 0.8125rem;
}
.sf-spec-row__val em {
  font-style: italic; color: var(--slate); font-weight: 500;
}

/* === COMPARE TABLE (Variants, div-based, immune to ReadMe table resets) = */
.sf-compare-wrap {
  width: 100%;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  background: var(--white);
  margin: 16px 0 24px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.sf-compare__head {
  display: grid;
  grid-template-columns: 38% 31% 31%;
  background: var(--light);
  border-bottom: 2px solid var(--line);
}
.sf-compare__hcell {
  padding: 18px 20px;
  font-family: var(--font-sans);
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--deep-ink);
  text-align: left;
}
.sf-compare__hcell:not(:first-child) { text-align: center; }
.sf-compare__hcell--featured {
  color: var(--primary);
  background: var(--neutral);
  position: relative;
}
.sf-compare__hcell--featured::after {
  content: '';
  position: absolute; left: 0; right: 0; bottom: -2px;
  height: 3px;
  background: var(--secondary);
}
.sf-compare__row {
  display: grid;
  grid-template-columns: 38% 31% 31%;
  border-bottom: 1px solid var(--line);
}
.sf-compare__row:last-child { border-bottom: 0; }
.sf-compare__cell {
  padding: 14px 20px;
  font-size: 0.9375rem;
  color: var(--deep-ink);
  line-height: 1.5;
  display: flex;
  align-items: center;
}
.sf-compare__cell:first-child {
  font-weight: 600;
  background: var(--light);
}
.sf-compare__cell:not(:first-child) {
  justify-content: center;
  text-align: center;
}
.sf-compare__cell--featured {
  background: rgba(232, 245, 240, 0.55);
  font-weight: 700;
}
.sf-compare__num {
  font-family: var(--font-mono);
  font-size: 0.9375rem; font-weight: 600;
}

/* === CALLOUTS (design language §6.3) ==================================== */
.sf-callout {
  display: flex; flex-direction: column; gap: 8px;
  border-radius: var(--r-md);
  padding: 14px 18px;
  margin: 20px 0;
  border-left: 4px solid;
}
.sf-callout__header {
  display: flex; align-items: center; gap: 8px;
  font-size: 0.875rem; font-weight: 700; line-height: 1;
}
.sf-callout__header svg { width: 16px; height: 16px; flex-shrink: 0; }
.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; }
.sf-callout__content p:last-child { margin-bottom: 0; }
.sf-callout__content code { background: rgba(0, 0, 0, 0.06); }
.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); }

/* === CONNECTORS ========================================================= */
.sf-conn-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 16px;
  margin: 0 0 24px;
}
.sf-conn {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 22px;
  display: flex; flex-direction: column;
  position: relative;
  transition: border-color .15s, box-shadow .15s;
}
.sf-conn:hover { border-color: var(--slate-light); box-shadow: var(--shadow-md); }
.sf-conn--required { border-color: rgba(3, 72, 96, 0.25); }

.sf-conn__top {
  display: flex; align-items: center; gap: 14px;
  margin-bottom: 16px;
}
.sf-conn__icon {
  width: 44px; height: 44px;
  border-radius: var(--r-lg);
  background: var(--light);
  color: var(--primary);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.sf-conn--required .sf-conn__icon {
  background: var(--primary); color: var(--white);
}
.sf-conn__icon svg { width: 22px; height: 22px; }
.sf-conn__heading { flex: 1; min-width: 0; }
.sf-conn__name {
  display: block;
  font-size: 1.125rem; font-weight: 700;
  color: var(--deep-ink);
  letter-spacing: -0.01em;
  line-height: 1.25;
  margin-bottom: 4px;
}

.sf-conn__specs {
  background: var(--light);
  border-radius: var(--r-md);
  padding: 4px 0;
  margin-bottom: 14px;
  display: flex;
  flex-direction: column;
}
.sf-conn__spec-row {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 8px 14px;
  border-bottom: 1px solid var(--line);
}
.sf-conn__spec-row:last-child { border-bottom: 0; }
.sf-conn__spec-key {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--slate);
  white-space: nowrap;
  min-width: 72px;
  flex-shrink: 0;
}
.sf-conn__spec-val {
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--deep-ink);
  line-height: 1.45;
}
.sf-conn__spec-val code {
  font-size: 0.8125rem;
  background: var(--white);
  border-radius: 3px;
}

.sf-conn__desc {
  font-size: 0.875rem;
  color: var(--deep-ink);
  line-height: 1.55;
  margin: 0 0 14px;
  flex: 1;
}
.sf-conn__tags { display: flex; gap: 6px; flex-wrap: wrap; margin-top: auto; }

/* === COOLING METHOD GRID =============================================== */
.sf-method-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 14px;
  margin: 0 0 24px;
}
.sf-method {
  position: relative;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 20px;
  display: flex; flex-direction: column; gap: 10px;
  transition: border-color .15s;
}
.sf-method:hover { border-color: var(--slate-light); }
.sf-method--rec {
  background: var(--neutral);
  border: 2px solid var(--secondary);
  padding: 19px;
}
.sf-method__badge {
  position: absolute;
  top: -10px; left: 16px;
  background: var(--secondary); color: var(--on-secondary);
  font-family: var(--font-mono);
  font-size: 0.625rem; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase;
  padding: 4px 10px;
  border-radius: var(--r-sm);
}
.sf-method__icon {
  width: 36px; height: 36px;
  border-radius: var(--r-md);
  background: var(--light); color: var(--primary);
  display: flex; align-items: center; justify-content: center;
}
.sf-method--rec .sf-method__icon { background: var(--white); }
.sf-method__icon svg { width: 18px; height: 18px; }
.sf-method__title { font-size: 1rem; font-weight: 700; color: var(--deep-ink); }
.sf-method__desc  { font-size: 0.875rem; color: var(--deep-ink); line-height: 1.55; flex: 1; }

/* === LED ROW (semantic dot + label + meaning) =========================== */
.sf-led-dot {
  width: 14px; height: 14px;
  border-radius: var(--r-full);
  display: inline-block; flex-shrink: 0;
  position: relative;
  border: 1px solid rgba(0, 0, 0, 0.08);
}
.sf-led-dot::after {
  content: '';
  position: absolute; inset: -3px;
  border-radius: var(--r-full);
  background: inherit; opacity: 0.22; z-index: -1;
}

.sf-led-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 12px;
  margin: 0 0 24px;
}
.sf-led-card {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  padding: 16px 18px;
  display: flex; flex-direction: column; gap: 10px;
}
.sf-led-card__head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 10px;
}
.sf-led-card__name {
  display: flex; align-items: center; gap: 10px;
  font-weight: 700; color: var(--deep-ink); font-size: 0.9375rem;
}
.sf-led-card__desc {
  font-size: 0.875rem; color: var(--deep-ink); line-height: 1.5; margin: 0;
}

/* === MECHANICAL FIGURE (placeholder image area) ========================= */
.sf-mech-stack {
  display: flex;
  flex-direction: column;
  gap: 20px;
  margin: 0 0 24px;
}
.sf-mech-card {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 20px 22px;
  display: flex; flex-direction: column;
}
.sf-mech-card__title {
  font-size: 1rem; font-weight: 700;
  color: var(--primary);
  letter-spacing: -0.01em;
  padding-bottom: 12px; margin-bottom: 12px;
  border-bottom: 1px solid var(--line);
}
.sf-mech-image {
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
  min-height: 320px;
  padding: 24px;
  position: relative;
  width: 100%;
}
.sf-mech-image img {
  display: block;
  width: 100%;
  height: auto;
  max-width: 800px;
  object-fit: contain;
}
.sf-mech-image img:not([src]),
.sf-mech-image img[src=""] {
  display: none;
}
.sf-mech-image:has(img:not([src]))::before,
.sf-mech-image:has(img[src=""])::before {
  content: 'Mechanical drawing pending';
  font-family: var(--font-mono);
  font-size: 0.8125rem;
  color: var(--slate);
  text-align: center;
  letter-spacing: 0.04em;
  padding: 0 16px;
}

/* === ESD ROWS =========================================================== */
.sf-esd-list { display: flex; flex-direction: column; gap: 10px; margin: 0 0 24px; }
.sf-esd-row {
  display: flex; gap: 14px; align-items: flex-start;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  padding: 14px 16px;
}
.sf-esd-row__icon {
  width: 32px; height: 32px;
  border-radius: var(--r-sm);
  background: var(--light); color: var(--primary);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.sf-esd-row__icon svg { width: 16px; height: 16px; }
.sf-esd-row__text { font-size: 0.9375rem; color: var(--deep-ink); line-height: 1.55; }

/* === COMPLIANCE PILLS ROW =============================================== */
.sf-compliance-row {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin: 0 0 16px;
}

/* === RESPONSIVE (design language §8) ==================================== */
@media (max-width: 820px) {
  .sf-doc h1 { font-size: 2.25rem; }
  .sf-doc h2 { font-size: 1.75rem; margin-top: 48px; }
  .sf-doc h3 { font-size: 1.25rem; }
  .sf-hero { padding: var(--lg); }
  .sf-doc .sf-hero__title { font-size: 2rem; }
}
@media (max-width: 640px) {
  .sf-qref { grid-template-columns: 1fr 1fr; }
  .sf-method-grid { grid-template-columns: 1fr; }
  .sf-spec-grid { grid-template-columns: 1fr; }
  .sf-conn-grid { grid-template-columns: 1fr; }
  .sf-conn { padding: 18px; }
  .sf-doc .sf-hero__title { font-size: 1.75rem; }
  .sf-compare__head,
  .sf-compare__row { grid-template-columns: 36% 32% 32%; }
  .sf-compare__hcell,
  .sf-compare__cell { padding: 12px 10px; font-size: 0.8125rem; }
}
@media (max-width: 400px) {
  .sf-qref { grid-template-columns: 1fr; }
  .sf-doc h1 { font-size: 1.875rem; }
  .sf-aeo { padding: var(--md) var(--lg); }
  .sf-aeo__label { font-size: 1.125rem; }
  .sf-doc .sf-hero__title { font-size: 1.625rem; }
}

/* === DARK MODE (design language §3.5, §9) =============================== */
[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:         #1B2D45;
  --light:         #14222F;
  --line:          #2A3A4D;
  --slate-light:   #94A8B5;
  --slate:         #B5C3CE;
  --deep-ink:      #E8F5F0;
  --on-primary:    #FFFFFF;
  --ai-mist:       rgba(107, 71, 240, 0.12);
  --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(--secondary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .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-doc .sf-qref__item--featured .sf-qref__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-doc .sf-mech-card__title { 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 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-doc .sf-aeo { 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-doc .sf-aeo--ai { background: rgba(107, 71, 240, 0.12); }
[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-doc .sf-meta__badge { background: var(--light); 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-doc .sf-meta__badge--mint { background: rgba(0, 224, 184, 0.14); color: var(--secondary); border-color: rgba(0, 224, 184, 0.30); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-toc { 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-doc .sf-toc__item {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.10);
  color: var(--neutral);
}
/* --white flips to Ink Navy in dark, so the Tier 1 hover surface needs explicit white ink */
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-toc__item:hover,
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-toc__item:focus { color: var(--on-primary) !important; }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-hero { background: rgba(255, 255, 255, 0.04); 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-doc .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-doc .sf-qref__item { 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-doc .sf-qref__item--featured { background: rgba(0, 224, 184, 0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-qref__value { 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 .sf-spec-card { 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-doc .sf-spec-card__icon { background: var(--light); 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 .sf-spec-card__title { 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 .sf-compare-wrap { background: var(--tertiary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-compare__head { background: var(--light); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-compare__hcell { 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 .sf-compare__hcell--featured { color: var(--secondary); background: rgba(0, 224, 184, 0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-compare__cell { 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 .sf-compare__cell:first-child { background: var(--light); 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 .sf-compare__cell--featured { background: rgba(0, 224, 184, 0.05); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-conn { 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-doc .sf-conn--required .sf-conn__icon { background: var(--secondary); color: var(--tertiary); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-conn__icon { background: var(--light); 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 .sf-conn__specs { background: var(--light); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-conn__spec-val code { background: rgba(0, 0, 0, 0.30); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-method { 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-doc .sf-method--rec { background: rgba(0, 224, 184, 0.08); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-method__icon { background: var(--light); 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 .sf-method__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-doc .sf-led-card { 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-doc .sf-mech-card { 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-doc .sf-mech-image { background: var(--light); }
[data-color-mode="dark"]:where(.rm-ReadMe,:not(:has(.rm-ReadMe:is([data-color-mode="light"],[data-color-mode="system"])))) .sf-doc .sf-esd-row { 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-doc .sf-esd-row__icon { background: var(--light); 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 .sf-pill { background: var(--light); color: var(--neutral); }

/* System dark-mode (when ReadMe data attribute is not explicitly 'light') */
@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 {
    --white:      #1B2D45;
    --light:      #14222F;
    --line:       #2A3A4D;
    --deep-ink:   #E8F5F0;
    --slate:      #B5C3CE;
    --ai-mist:    rgba(107, 71, 240, 0.12);
    --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(--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 .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-doc .sf-qref__item--featured .sf-qref__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-doc .sf-mech-card__title { 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 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-doc .sf-hero { 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-doc .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-doc .sf-aeo { 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-doc .sf-aeo--ai { background: rgba(107, 71, 240, 0.12); }
  :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-doc .sf-meta__badge { background: var(--light); 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-doc .sf-meta__badge--mint { background: rgba(0, 224, 184, 0.14); color: var(--secondary); border-color: rgba(0, 224, 184, 0.30); }
  :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-toc { 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-doc .sf-toc__item { background: rgba(255, 255, 255, 0.06); border-color: rgba(255, 255, 255, 0.10); 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 .sf-toc__item:hover,
  :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-toc__item:focus { color: #FFFFFF !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-doc .sf-qref__item { 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-doc .sf-qref__item--featured { background: rgba(0, 224, 184, 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-doc .sf-qref__value { 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 .sf-spec-card { 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-doc .sf-spec-card__icon { background: var(--light); 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 .sf-spec-card__title { 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 .sf-compare-wrap { background: var(--tertiary); }
  :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-compare__head { background: var(--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-doc .sf-compare__hcell { 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 .sf-compare__hcell--featured { color: var(--secondary); background: rgba(0, 224, 184, 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-doc .sf-compare__cell { 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 .sf-compare__cell:first-child { background: var(--light); 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 .sf-compare__cell--featured { background: rgba(0, 224, 184, 0.05); }
  :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-conn { 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-doc .sf-conn--required .sf-conn__icon { background: var(--secondary); color: var(--tertiary); }
  :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-conn__icon { background: var(--light); 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 .sf-conn__specs { background: var(--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-doc .sf-conn__spec-val code { background: rgba(0, 0, 0, 0.30); }
  :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-method { 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-doc .sf-method--rec { background: rgba(0, 224, 184, 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-doc .sf-method__icon { background: var(--light); 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 .sf-method__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-doc .sf-led-card { 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-doc .sf-mech-card { 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-doc .sf-mech-image { background: var(--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-doc .sf-esd-row { 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-doc .sf-esd-row__icon { background: var(--light); 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 .sf-pill { background: var(--light); color: var(--neutral); }
}
</style>


<div class="sf-doc">

  
  <header class="sf-hero">
    <div class="sf-hero__copy">
      <span class="sf-eyebrow">Hardware Reference</span>
      <p class="sf-hero__title">Sixfab Edge AI Expansion Board specifications</p>
      <p class="sf-hero__lead">
        Electrical, mechanical, thermal, and software specifications for the
        Sixfab Edge AI Expansion Board for Raspberry Pi 5. Use it as the canonical
        reference when sizing power supplies, selecting M.2 modules, or designing
        custom enclosures around the under-board stack.
        <em>Intelligented by DEEPX. Built on Raspberry Pi.</em>
      </p>
      <div class="sf-hero__chips">
        <span class="sf-pill">DEEPX DX-M1</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</span>
        <span class="sf-pill">Raspberry Pi 5</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">Hardware Reference</span>
    <span class="sf-meta__sep">·</span>
    <span>Specifications</span>
    <span class="sf-meta__sep">·</span>
    <span>Updated 2026-05-14</span>
  </div>


  
  <nav class="sf-toc" aria-label="On this page">
    <span class="sf-toc__label">In this guide</span>
    <a href="#quick-reference"   class="sf-toc__item"><span class="sf-toc__num">01</span>Quick reference</a>
    <a href="#tech-specs"        class="sf-toc__item"><span class="sf-toc__num">02</span>Technical specifications</a>
    <a href="#connectors"        class="sf-toc__item"><span class="sf-toc__num">03</span>Connectors &amp; slots</a>
    <a href="#led"               class="sf-toc__item"><span class="sf-toc__num">04</span>LED indicators</a>
    <a href="#cooling"           class="sf-toc__item"><span class="sf-toc__num">05</span>Cooling</a>
    <a href="#mechanical"        class="sf-toc__item"><span class="sf-toc__num">06</span>Mechanical</a>
    <a href="#compliance"        class="sf-toc__item"><span class="sf-toc__num">07</span>Compliance</a>
    <a href="#safety"            class="sf-toc__item"><span class="sf-toc__num">08</span>Safety</a>
  </nav>


  
  <h2 id="quick-reference">Quick reference</h2>
  <p class="sf-lead">Headline figures at a glance. Scan this block first; full per-category detail follows below.</p>

  <div class="sf-qref">
    <div class="sf-qref__item sf-qref__item--featured">
      <span class="sf-qref__label">AI Performance</span>
      <span class="sf-qref__value">25 TOPS</span>
      <span class="sf-qref__sub">DX-M1 · INT8</span>
    </div>
    <div class="sf-qref__item">
      <span class="sf-qref__label">Host Interface</span>
      <span class="sf-qref__value">PCIe Gen 2/3</span>
      <span class="sf-qref__sub">x1 · 40 mm FFC</span>
    </div>
    <div class="sf-qref__item">
      <span class="sf-qref__label">Expansion</span>
      <span class="sf-qref__value">3× M.2</span>
      <span class="sf-qref__sub">AI + NVMe + LTE/5G</span>
    </div>
    <div class="sf-qref__item">
      <span class="sf-qref__label">Power Input</span>
      <span class="sf-qref__value">USB-C PD</span>
      <span class="sf-qref__sub">27 W min · 45 W rec.</span>
    </div>
    <div class="sf-qref__item">
      <span class="sf-qref__label">Form Factor</span>
      <span class="sf-qref__value">Under-board</span>
      <span class="sf-qref__sub">88.46 × 89.19 mm</span>
    </div>
    <div class="sf-qref__item">
      <span class="sf-qref__label">Operating Temp</span>
      <span class="sf-qref__value">0 – 70 °C</span>
      <span class="sf-qref__sub">Commercial range</span>
    </div>
    <div class="sf-qref__item">
      <span class="sf-qref__label">Host Platform</span>
      <span class="sf-qref__value">Raspberry Pi 5</span>
      <span class="sf-qref__sub">All RAM tiers</span>
    </div>
  </div>


  
  <h2 id="tech-specs">Technical specifications</h2>
  <p class="sf-lead">Per-category breakdown of the Edge AI Expansion Board electrical, mechanical, and software specifications.</p>

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

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="6" width="12" height="12" rx="1.5"/><path d="M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4"/></svg>
        </div>
        <div class="sf-spec-card__title">Compute</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">NPU</span>
          <span class="sf-spec-row__val">DEEPX DX-M1</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">AI performance</span>
          <span class="sf-spec-row__val">25 TOPS</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Precision</span>
          <span class="sf-spec-row__val">INT8 only</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Module form</span>
          <span class="sf-spec-row__val">M.2 M-Key (2230–2280)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Runtime</span>
          <span class="sf-spec-row__val"><code>dxrt-runtime</code></span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="6" width="18" height="12" rx="1.5"/><path d="M7 6v12M11 6v12M15 6v12M19 6v12"/></svg>
        </div>
        <div class="sf-spec-card__title">Memory</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">On-NPU RAM</span>
          <span class="sf-spec-row__val">4 GB LPDDR5</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Speed</span>
          <span class="sf-spec-row__val">5600 MT/s</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Access</span>
          <span class="sf-spec-row__val">NPU-exclusive</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Max model size</span>
          <span class="sf-spec-row__val">Bounded by NPU RAM</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12c4-4 6-4 9 0s5 4 9 0"/><path d="M3 8h18M3 16h18" stroke-dasharray="2 2"/></svg>
        </div>
        <div class="sf-spec-card__title">Host interface</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Protocol</span>
          <span class="sf-spec-row__val">PCIe Gen 2/Gen 3 x1</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Default link</span>
          <span class="sf-spec-row__val">Gen 2 (auto)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Gen 3 enable</span>
          <span class="sf-spec-row__val"><code>dtparam=pciex1_gen=3</code></span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Cable</span>
          <span class="sf-spec-row__val">40 × 8.5 mm FFC</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Gen 2 throughput</span>
          <span class="sf-spec-row__val">400 – 450 MB/s</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Gen 3 throughput</span>
          <span class="sf-spec-row__val">800 – 900 MB/s</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><circle cx="8" cy="12" r="1.5"/><path d="M12 12h6"/></svg>
        </div>
        <div class="sf-spec-card__title">Storage</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Slot</span>
          <span class="sf-spec-row__val">M.2 M-Key</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Form factors</span>
          <span class="sf-spec-row__val">2230 / 2242 / 2260 / 2280</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Bridge</span>
          <span class="sf-spec-row__val">Realtek RTL9210B-CG</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">OS view</span>
          <span class="sf-spec-row__val">USB Mass Storage (<code>/dev/sda</code>)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Seq. read</span>
          <span class="sf-spec-row__val">380 – 440 MB/s</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Seq. write</span>
          <span class="sf-spec-row__val">350 – 410 MB/s</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Validated SSDs</span>
          <span class="sf-spec-row__val">RPi 256 GB &amp; 512 GB NVMe</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12a7 7 0 0 1 14 0M2 12a10 10 0 0 1 20 0M8 12a4 4 0 0 1 8 0"/><circle cx="12" cy="12" r="1.5" fill="currentColor"/></svg>
        </div>
        <div class="sf-spec-card__title">Cellular</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Slot</span>
          <span class="sf-spec-row__val">M.2 Key-B</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Transport</span>
          <span class="sf-spec-row__val">USB via internal hub</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">SIM</span>
          <span class="sf-spec-row__val">1× nano SIM (eUICC OK)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Antennas</span>
          <span class="sf-spec-row__val">User-supplied, per module</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 9V4M12 20v-5M9 12H4M20 12h-5M5.6 5.6l3 3M18.4 5.6l-3 3M5.6 18.4l3-3M18.4 18.4l-3-3"/></svg>
        </div>
        <div class="sf-spec-card__title">Internal USB hub</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Standard</span>
          <span class="sf-spec-row__val">USB 3.2 Gen 1</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Aggregate</span>
          <span class="sf-spec-row__val">5 Gbps shared</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Pi 5 link</span>
          <span class="sf-spec-row__val">USB Bridge</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Hosts</span>
          <span class="sf-spec-row__val">NVMe + cellular slots</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Pi 5 port use</span>
          <span class="sf-spec-row__val">1× USB 3.0 occupied</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 4 14h7l-2 8 9-12h-7z"/></svg>
        </div>
        <div class="sf-spec-card__title">Power</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Input</span>
          <span class="sf-spec-row__val">USB-C PD, 12 V</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">27 W profiles</span>
          <span class="sf-spec-row__val">9V/3A · 12V/2.25A</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">45 W profiles</span>
          <span class="sf-spec-row__val">9V/5A · 12V/3.75A</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Recommended PSU</span>
          <span class="sf-spec-row__val">RPi 45 W (full stack)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Pi 5 back-power</span>
          <span class="sf-spec-row__val">Pogo pins (2× 5V + 2× GND)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Pogo current</span>
          <span class="sf-spec-row__val">3 A/pin (6 A total)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Power monitoring</span>
          <span class="sf-spec-row__val">None on-board</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="1.5"/><circle cx="6" cy="6" r="1"/><circle cx="18" cy="6" r="1"/><circle cx="6" cy="18" r="1"/><circle cx="18" cy="18" r="1"/></svg>
        </div>
        <div class="sf-spec-card__title">Mechanical</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">PCB size</span>
          <span class="sf-spec-row__val">87 × 88 mm</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">With connectors</span>
          <span class="sf-spec-row__val">88.46 × 89.19 mm</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Assembled Z-stack</span>
          <span class="sf-spec-row__val">~36.26 mm</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Mounting</span>
          <span class="sf-spec-row__val">M2.5 × 4</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Form factor</span>
          <span class="sf-spec-row__val">Under-board baseboard</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"/></svg>
        </div>
        <div class="sf-spec-card__title">Environmental</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Commercial range</span>
          <span class="sf-spec-row__val">0 – 70 °C</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Industrial range</span>
          <span class="sf-spec-row__val">-40 – 85 °C</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">NPU throttle</span>
          <span class="sf-spec-row__val">~90 °C threshold</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Heat sources</span>
          <span class="sf-spec-row__val">DX-M1 module &amp; NVMe SSD</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Cooling</span>
          <span class="sf-spec-row__val">Pi 5 Active Cooler + DX-M1 heatsink</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Deployment</span>
          <span class="sf-spec-row__val">Indoor, commercial-grade</span>
        </div>
      </div>
    </div>

    
    <div class="sf-spec-card">
      <div class="sf-spec-card__head">
        <div class="sf-spec-card__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M16 18l6-6-6-6M8 6l-6 6 6 6"/></svg>
        </div>
        <div class="sf-spec-card__title">Software</div>
      </div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Host OS</span>
          <span class="sf-spec-row__val">Raspberry Pi OS</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Driver</span>
          <span class="sf-spec-row__val">DKMS via <code>sixfab-dx</code></span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Runtime</span>
          <span class="sf-spec-row__val">DEEPX <code>dxrt-runtime</code></span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">CLI tools</span>
          <span class="sf-spec-row__val"><code>dxrt-cli</code> · <code>dxtop</code></span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Model format</span>
          <span class="sf-spec-row__val">ONNX → DXNN</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">SDK</span>
          <span class="sf-spec-row__val">DEEPX DXNN SDK (host)</span>
        </div>
      </div>
    </div>

  </div>


  
  <h2 id="connectors">Connectors &amp; slots</h2>
  <p class="sf-lead">Five user-facing interfaces on the board: three M.2 slots, the PCIe FFC link to the Pi 5, and the USB-C PD power input. Plus a pogo-pin back-power array on the top surface, a nano SIM slot, and a USB-A passthrough for the internal USB Bridge.</p>

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

    
    <div class="sf-conn sf-conn--required">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 4 14h7l-2 8 9-12h-7z"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">USB-C PD input</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Type</span>
          <span class="sf-conn__spec-val">USB Type-C, PD</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Voltage</span>
          <span class="sf-conn__spec-val">12 V</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Min PSU</span>
          <span class="sf-conn__spec-val">27 W</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Recommended</span>
          <span class="sf-conn__spec-val">45 W full-stack</span>
        </div>
      </div>

      <p class="sf-conn__desc">Single power input for the entire stack. The board back-powers the Raspberry Pi 5 through pogo pins; the Pi 5's own USB-C port stays unused. Below 27 W the system shows a visible under-voltage warning and throttles.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--brand">Required</span>
        <span class="sf-pill sf-pill--mint">Back-powers Pi 5</span>
      </div>
    </div>

    
    <div class="sf-conn sf-conn--required">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12c4-4 6-4 9 0s5 4 9 0"/><path d="M3 8h18M3 16h18" stroke-dasharray="2 2"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">PCIe FFC connector</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Type</span>
          <span class="sf-conn__spec-val">FFC, Sixfab cable</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Cable</span>
          <span class="sf-conn__spec-val">40 × 8.5 mm (included)</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Protocol</span>
          <span class="sf-conn__spec-val">PCIe Gen 2/Gen 3 x1</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Labels</span>
          <span class="sf-conn__spec-val"><code>RPI5</code> / <code>EDGE_AI</code></span>
        </div>
      </div>

      <p class="sf-conn__desc">Dedicated PCIe link between the Raspberry Pi 5 and the DEEPX DX-M1 in the M.2-PCIE slot. The <code>RPI5</code>-labelled end goes to the Pi 5's PCIe FPC port; the <code>EDGE_AI</code>-labelled end goes to the Expansion Board's FFC connector. Labels face outward, metal pins inward.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--brand">Required</span>
        <span class="sf-pill sf-pill--success">Cable included</span>
      </div>
    </div>

    
    <div class="sf-conn sf-conn--required">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="9" width="18" height="6" rx="1"/><path d="M6 12h.01M9 12h.01M12 12h.01"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">M.2-PCIE slot (AI)</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Key</span>
          <span class="sf-conn__spec-val">M-Key</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Form</span>
          <span class="sf-conn__spec-val">2230 / 2242 / 2260 / 2280</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Link</span>
          <span class="sf-conn__spec-val">PCIe direct (FFC)</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Screw</span>
          <span class="sf-conn__spec-val">M2 × 6 mm flat-head</span>
        </div>
      </div>

      <p class="sf-conn__desc">The only slot wired to the dedicated PCIe link. Houses the DEEPX DX-M1 M.2 module. The included spacer sits between the module and the Expansion Board's mounting hole. Insert at 30° and finger-tighten the M2 screw.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--brand">Required</span>
        <span class="sf-pill sf-pill--info">DEEPX DX-M1 only</span>
      </div>
    </div>

    
    <div class="sf-conn">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><circle cx="8" cy="12" r="1.5"/><path d="M12 12h6"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">M.2-SSD slot</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Key</span>
          <span class="sf-conn__spec-val">M-Key</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Form</span>
          <span class="sf-conn__spec-val">2230 / 2242 / 2260 / 2280</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Link</span>
          <span class="sf-conn__spec-val">USB via RTL9210B-CG</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">OS view</span>
          <span class="sf-conn__spec-val"><code>/dev/sda</code></span>
        </div>
      </div>

      <p class="sf-conn__desc">NVMe SSD slot routed through the on-board USB 3.0 hub and a Realtek USB-to-NVMe bridge. The OS sees a USB Mass Storage device, not a native NVMe block device. M.2 SATA modules are not supported.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--info">Optional</span>
        <span class="sf-pill sf-pill--success">USB-boot capable</span>
      </div>
    </div>

    
    <div class="sf-conn">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12a7 7 0 0 1 14 0M2 12a10 10 0 0 1 20 0M8 12a4 4 0 0 1 8 0"/><circle cx="12" cy="12" r="1.5" fill="currentColor"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">CELLULAR LTE/5G slot</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Key</span>
          <span class="sf-conn__spec-val">M.2 Key-B</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Link</span>
          <span class="sf-conn__spec-val">USB via internal hub</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">SIM</span>
          <span class="sf-conn__spec-val">1× nano (eUICC OK)</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Antennas</span>
          <span class="sf-conn__spec-val">User-supplied</span>
        </div>
      </div>

      <p class="sf-conn__desc">M.2 Key-B slot for an LTE or 5G modem module, exposed to the OS over the internal USB 3.2 Gen 1 hub through the USB Bridge. The board carries no built-in antennas; the antenna connector type depends on the chosen modem module.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--info">Optional</span>
        <span class="sf-pill sf-pill--success">Concurrent with NVMe</span>
      </div>
    </div>

    
    <div class="sf-conn">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="18" cy="12" r="2"/><path d="M6 14v6M12 14v6M18 14v6"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">Pogo-pin back-power</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Pins</span>
          <span class="sf-conn__spec-val">2× 5V + 2× GND</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Target</span>
          <span class="sf-conn__spec-val">RPi 5 GPIO underside</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Pitch</span>
          <span class="sf-conn__spec-val">2.54 mm</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Rating</span>
          <span class="sf-conn__spec-val">3 A per pin</span>
        </div>
      </div>

      <p class="sf-conn__desc">Four spring-loaded contacts on the top surface that press into 5V and GND pads on the underside of the Raspberry Pi 5 GPIO header. No data signals are routed through pogo pins; they carry power only. Spacer torque is critical for reliable contact.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--brand">Required</span>
        <span class="sf-pill sf-pill--warning">Finger-tight only</span>
      </div>
    </div>

    
    <div class="sf-conn">
      <div class="sf-conn__top">
        <div class="sf-conn__icon" aria-hidden="true">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="9" width="16" height="6" rx="1"/><path d="M9 9V6M15 9V6"/></svg>
        </div>
        <div class="sf-conn__heading">
          <span class="sf-conn__name">USB Bridge</span>
        </div>
      </div>

      <div class="sf-conn__specs">
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Type</span>
          <span class="sf-conn__spec-val">USB-A bridge</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Pi 5 port</span>
          <span class="sf-conn__spec-val">Occupies 1× USB 3.0</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Speed</span>
          <span class="sf-conn__spec-val">5 Gbps</span>
        </div>
        <div class="sf-conn__spec-row">
          <span class="sf-conn__spec-key">Carries</span>
          <span class="sf-conn__spec-val">NVMe + cellular data</span>
        </div>
      </div>

      <p class="sf-conn__desc">Short USB-A bridge that connects the on-board hub to one of the Raspberry Pi 5's blue USB 3.0 ports. Mandatory for both the NVMe SSD and the LTE/5G modem to function. The Pi 5's remaining three USB ports (one USB 3.0, two USB 2.0) stay free for peripherals.</p>

      <div class="sf-conn__tags">
        <span class="sf-pill sf-pill--brand">Required</span>
        <span class="sf-pill sf-pill--info">Storage + cellular path</span>
      </div>
    </div>

  </div>

  <div class="sf-callout sf-callout--info">
    <div class="sf-callout__header">
      <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
      <span>The board has no test points, solder jumpers, or debug pads</span>
    </div>
    <div class="sf-callout__content">
      <p>Hardware developers integrating the Expansion Board into custom carrier designs work from the user-facing interfaces above only. There are no exposed debug UART, GPIO pass-through control, or user-configurable hardware bridges. The GPIO header on the Pi 5 is forwarded upward unchanged, so a standard top-mounted HAT can co-exist. See <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-pinout-gpio" target="_blank" rel="noopener">Pinout &amp; GPIO</a>.</p>
    </div>
  </div>


  
  <h2 id="led">LED indicators</h2>
  <p class="sf-lead">The Expansion Board has four LEDs grouped near the edge of the PCB. One is for power; the other three are wired to the module slots (cellular network activity, NVMe SSD activity, and the M.2 connector on the PCIe line). The LEDs are hardware-driven and <strong>cannot be controlled programmatically</strong>. Detailed runtime telemetry lives in <code>dxrt-cli</code> and <code>dxtop</code>, see <a href="/docs/ai-model-deployment-system-monitoring" target="_blank" rel="noopener">System Monitoring</a>.</p>

  <div class="sf-led-grid">
    <div class="sf-led-card">
      <div class="sf-led-card__head">
        <div class="sf-led-card__name">
          <span class="sf-led-dot" style="background:#DC2626"></span>
          PWR · Power · Red
        </div>
        <span class="sf-pill sf-pill--success">Power good</span>
      </div>
      <p class="sf-led-card__desc">On when the Expansion Board is receiving valid USB-C PD input and its on-board rails are up. Off indicates no power, an under-voltage PSU, or a USB-C cable issue.</p>
    </div>

    <div class="sf-led-card">
      <div class="sf-led-card__head">
        <div class="sf-led-card__name">
          <span class="sf-led-dot" style="background:#429CBF"></span>
          CELL · Cellular · Blue
        </div>
        <span class="sf-pill sf-pill--info">Cellular activity</span>
      </div>
      <p class="sf-led-card__desc">Driven by the LTE/5G modem in the CELLULAR slot. Indicates network registration and signal activity. Specific blink-vs-solid meaning is set by the modem module's firmware, refer to the installed module's datasheet for the exact decoding.</p>
    </div>

    <div class="sf-led-card">
      <div class="sf-led-card__head">
        <div class="sf-led-card__name">
          <span class="sf-led-dot" style="background:#429CBF"></span>
          M.2-USB · SSD activity · Blue
        </div>
        <span class="sf-pill sf-pill--info">NVMe SSD activity</span>
      </div>
      <p class="sf-led-card__desc">Direct activity LED for the NVMe SSD in the M.2-SSD slot. It blinks during read, write, and erase operations on the installed SSD, and stays off when no SSD is present. It does not indicate internal USB hub or cellular traffic.</p>
    </div>

    <div class="sf-led-card">
      <div class="sf-led-card__head">
        <div class="sf-led-card__name">
          <span class="sf-led-dot" style="background:#429CBF"></span>
          M.2-PCIE · PCIe M.2 slot · Blue
        </div>
        <span class="sf-pill sf-pill--warning">Not driven by DX-M1</span>
      </div>
      <p class="sf-led-card__desc">Controlled through the M.2 connector on the PCIe line. The DEEPX DX-M1 does not currently drive this LED output, so with the DX-M1 installed the LED shows no activity; an NVMe SSD installed in this slot would drive it. Activity indication for the DX-M1 is in progress.</p>
    </div>
  </div>


  
  <h2 id="cooling">Cooling</h2>
  <p class="sf-lead">Each part of the assembled stack has its own cooling path. Plan cooling per component, and validate the result at the target ambient temperature before deployment.</p>

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

    <div class="sf-method sf-method--rec">
      <span class="sf-method__badge">Recommended</span>
      <div class="sf-method__icon">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 4c2 2 2 5 0 8M12 20c-2-2-2-5 0-8M4 12c2-2 5-2 8 0M20 12c-2 2-5 2-8 0"/></svg>
      </div>
      <div class="sf-method__title">Raspberry Pi Active Cooler (Pi 5)</div>
      <p class="sf-method__desc">The official Raspberry Pi Active Cooler is recommended for the Raspberry Pi 5. It matters for AI workloads: it keeps the Pi 5 running without thermal throttling while it drives the inference pipeline.</p>
    </div>

    <div class="sf-method">
      <span class="sf-method__badge">Required</span>
      <div class="sf-method__icon">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="6" width="16" height="12" rx="1"/><path d="M7 9v6M10 9v6M13 9v6M16 9v6"/></svg>
      </div>
      <div class="sf-method__title">DX-M1 heatsink (supplied)</div>
      <p class="sf-method__desc">Always install the heatsink supplied with the DEEPX DX-M1 module. If your workload or enclosure calls for active cooling on the module, contact Sixfab.</p>
    </div>

    <div class="sf-method">
      <div class="sf-method__icon">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><circle cx="8" cy="12" r="1.5"/><path d="M12 12h6"/></svg>
      </div>
      <div class="sf-method__title">NVMe SSD &amp; cellular modules</div>
      <p class="sf-method__desc">If these modules need cooling in your deployment, commercially available passive or active coolers in a suitable form factor can be used. Contact Sixfab for detailed guidance.</p>
    </div>

    <div class="sf-method">
      <div class="sf-method__icon">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"/></svg>
      </div>
      <div class="sf-method__title">Hot or enclosed installations</div>
      <p class="sf-method__desc">If the setup will run in a hot environment or inside a closed enclosure, make sure system-level cooling is part of the design from the start, and verify thermal headroom before shipping.</p>
    </div>

  </div>

  <div class="sf-callout sf-callout--warning">
    <div class="sf-callout__header">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 2 1 22h22z"/><path d="M12 9v5M12 17h.01"/></svg>
      <span>NPU throttles at ~90 °C</span>
    </div>
    <div class="sf-callout__content">
      <p>The DX-M1 reduces clock rate when on-NPU temperature approaches roughly 90 °C. Live temperature is exposed by <code>dxrt-cli -s</code> and the running view in <code>dxtop</code>. Continuous throttling indicates insufficient cooling for the workload, so either reduce duty cycle, add active cooling, or improve enclosure airflow.</p>
    </div>
  </div>


  
  <h2 id="mechanical">Mechanical dimensions</h2>
  <p class="sf-lead">Under-board baseboard for Raspberry Pi 5, mounted underneath via M2.5 spacers. Off-the-shelf Pi 5 cases generally do not fit the assembled stack, so custom enclosures are expected for deployment. See <a href="/docs/edge-ai-expansion-board-raspberry-pi-5-quickstart" target="_blank" rel="noopener">Quickstart</a> for the full assembly sequence.</p>

  <div class="sf-mech-stack">

    
    <div class="sf-mech-card">
      <div class="sf-mech-card__title">Board dimensions &amp; stack-up</div>
      <div class="sf-spec-card__body">
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">PCB X-axis (width)</span>
          <span class="sf-spec-row__val">87 mm (base) · 88.46 mm (with USB-A)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">PCB Y-axis (length)</span>
          <span class="sf-spec-row__val">88 mm (base) · 89.19 mm (with USB-C)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">PCB thickness</span>
          <span class="sf-spec-row__val">1.6 mm</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Bottom spacers</span>
          <span class="sf-spec-row__val">4× M2.5 F-F · 15 mm</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Stack spacers</span>
          <span class="sf-spec-row__val">4× M2.5 M-F · 5 mm</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Assembled Z-height</span>
          <span class="sf-spec-row__val">~36.26 mm (full stack)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Mounting holes</span>
          <span class="sf-spec-row__val">M2.5 × 4 (to Pi 5) · M3 × 3 (deck)</span>
        </div>
        <div class="sf-spec-row">
          <span class="sf-spec-row__key">Off-the-shelf Pi 5 case</span>
          <span class="sf-spec-row__val">Generally not compatible</span>
        </div>
      </div>
    </div>

  </div>


  
  <h2 id="compliance">Compliance</h2>
  <p class="sf-lead">Regulatory and safety certification status for the Edge AI Expansion Board. Status reflects what has been confirmed by Sixfab R&amp;D as of this revision.</p>

  <div class="sf-compliance-row">
    <span class="sf-pill sf-pill--warning">CE · Pending</span>
    <span class="sf-pill sf-pill--warning">FCC · Pending</span>
    <span class="sf-pill sf-pill--warning">RoHS · Pending</span>
    <span class="sf-pill sf-pill--warning">UKCA · Pending</span>
    <span class="sf-pill sf-pill--warning">EMI/EMC · Pending</span>
  </div>


  
  <h2 id="safety">Safety &amp; handling</h2>
  <p class="sf-lead">Handle the board by its edges and avoid touching the onboard components, connector contacts, and header pins with bare hands. Observe normal anti-static precautions when unpacking and installing.</p>

  <div class="sf-callout sf-callout--warning">
    <div class="sf-callout__header">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 2 1 22h22z"/><path d="M12 9v5M12 17h.01"/></svg>
      <span>Not hot-pluggable</span>
    </div>
    <div class="sf-callout__content">
      <p>Always power off the Raspberry Pi 5 completely and disconnect the USB-C PD cable before installing, removing, or swapping M.2 modules, the PCIe FFC cable, or the USB Bridge. Hot insertion or removal can damage the DEEPX DX-M1, the NVMe SSD, the modem module, or the Pi 5 itself through current spikes on the PCIe and USB rails.</p>
    </div>
  </div>

  <div class="sf-callout sf-callout--warning">
    <div class="sf-callout__header">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 8v4M12 16h.01"/></svg>
      <span>Use the official Raspberry Pi 27 W or 45 W USB-C PD Supply</span>
    </div>
    <div class="sf-callout__content">
      <p>The minimum supported PSU is the <strong>Raspberry Pi 27 W USB-C PD Supply</strong>. The <strong>45 W supply</strong> is recommended whenever the AI accelerator, NVMe SSD, and LTE/5G modem are populated together. Standard 5 V / 3 A (15 W) phone chargers will trigger under-voltage warnings and may reboot the system. If you boot from the NVMe SSD, also set <code>usb_max_current_enable=1</code> in <code>/boot/firmware/config.txt</code> on first boot; without it, the Pi 5 pauses at boot and waits for a button press. This setting is not required when running from a microSD card.</p>
    </div>
  </div>

  <div class="sf-callout sf-callout--warning">
    <div class="sf-callout__header">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 2 1 22h22z"/><path d="M12 9v5M12 17h.01"/></svg>
      <span>Finger-tighten the spacers and screws</span>
    </div>
    <div class="sf-callout__content">
      <p>The 15 mm and 5 mm M2.5 spacers, the 4× M2.5 mounting screws, and the 3× M2 6 mm flat-head M.2 screws are all <strong>finger-tight only</strong>. Loose spacers cause intermittent pogo-pin contact, which surfaces as power glitches or reboots under inference load. Over-torquing strips the threads in the spacers and the threads are not field-repairable. No power driver.</p>
    </div>
  </div>

  <h3>Physical design notes</h3>
  <ul>
    <li><strong>No buttons or switches on the Expansion Board.</strong> No reset, no power button, no user-programmable switch. Power state follows the USB-C PD input.</li>
    <li><strong>No back-feed protection on the Pi 5 USB-C side.</strong> Power must come from the Expansion Board only. Plugging a second PSU into the Pi 5's USB-C port causes only the Pi 5 itself to operate, and the Expansion Board stack is unsupported in that configuration.</li>
    <li><strong>No power-monitoring circuitry.</strong> Real-time per-slot or full-stack power draw is not measurable from the Raspberry Pi side. <code>dxtop</code> exposes NPU-side power only; full-stack power requires an external USB-C power meter.</li>
    <li><strong>No vibration qualification.</strong> The pogo-pin back-power connection has not been qualified for high-vibration environments (drones, mobile robots). Long-term reliability under sustained shock and vibration is unverified.</li>
    <li><strong>Indoor commercial use.</strong> The Edge AI Expansion Board is a commercial-grade electronic assembly intended for indoor deployment. Outdoor use requires a sealed enclosure addressing moisture, temperature, ventilation, and airborne contaminants.</li>
  </ul>

</div>


`}</HTMLBlock>

<br />