<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://bmcwiki.mit.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gibcus</id>
	<title>BioMicro Center - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://bmcwiki.mit.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gibcus"/>
	<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php/Special:Contributions/Gibcus"/>
	<updated>2026-04-14T13:42:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123858</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123858"/>
		<updated>2026-02-18T18:22:56Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
window.BMC_DEBUG = true;&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      if ( document.getElementById( &#039;bmc-topnav&#039; ) ) return; // already ran&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  window.BMC = BMC; // expose globally for debugging&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF — hook registered AFTER BMC is fully defined&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  // Fire immediately — multiple strategies&lt;br /&gt;
  function tryInit() {&lt;br /&gt;
    if ( document.getElementById( &#039;bmc-topnav&#039; ) ) return;&lt;br /&gt;
    if ( typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.config ) { BMC.init(); }&lt;br /&gt;
  }&lt;br /&gt;
  tryInit();&lt;br /&gt;
  setTimeout( tryInit, 500 );&lt;br /&gt;
  setTimeout( tryInit, 1500 );&lt;br /&gt;
  if ( document.readyState !== &#039;loading&#039; ) {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123856</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123856"/>
		<updated>2026-02-18T18:21:07Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;$.getScript( &#039;/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039;, function () {&lt;br /&gt;
  BMC.init();&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123854</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123854"/>
		<updated>2026-02-18T18:19:30Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;$.getScript( &#039;/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039; );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123852</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123852"/>
		<updated>2026-02-18T18:11:20Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.hook( &#039;wikipage.content&#039; ).add( function () { $.getScript( &#039;/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039; ); } );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123850</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123850"/>
		<updated>2026-02-18T18:06:34Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;( function () {&lt;br /&gt;
  function loadBMC() {&lt;br /&gt;
    $.getScript( &#039;/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  if ( window.jQuery ) {&lt;br /&gt;
    loadBMC();&lt;br /&gt;
  } else {&lt;br /&gt;
    window.addEventListener( &#039;load&#039;, loadBMC );&lt;br /&gt;
  }&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123849</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123849"/>
		<updated>2026-02-18T18:05:44Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.using( &#039;jquery&#039;, function() {&lt;br /&gt;
  $.getScript( &#039;/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123848</id>
		<title>User:Gibcus/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123848"/>
		<updated>2026-02-18T18:03:00Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
window.BMC_DEBUG = true;&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      if ( document.getElementById( &#039;bmc-topnav&#039; ) ) return; // already ran&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  window.BMC = BMC; // expose globally for debugging&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF — hook registered AFTER BMC is fully defined&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  // Fire immediately — multiple strategies&lt;br /&gt;
  function tryInit() {&lt;br /&gt;
    if ( document.getElementById( &#039;bmc-topnav&#039; ) ) return;&lt;br /&gt;
    if ( typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.config ) { BMC.init(); }&lt;br /&gt;
  }&lt;br /&gt;
  tryInit();&lt;br /&gt;
  setTimeout( tryInit, 500 );&lt;br /&gt;
  setTimeout( tryInit, 1500 );&lt;br /&gt;
  if ( document.readyState !== &#039;loading&#039; ) {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123847</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123847"/>
		<updated>2026-02-18T18:00:20Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;$.getScript(&#039;/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039;);&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123832</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123832"/>
		<updated>2026-02-18T17:19:30Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.load(&#039;https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js?action=raw&amp;amp;ctype=text/javascript&#039;);&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123831</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123831"/>
		<updated>2026-02-18T17:18:42Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: Replaced content with &amp;quot;importScript(&amp;#039;User:Gibcus/common.js&amp;#039;);&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;importScript(&#039;User:Gibcus/common.js&#039;);&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123830</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123830"/>
		<updated>2026-02-18T17:17:45Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      if ( document.getElementById( &#039;bmc-topnav&#039; ) ) return; // already ran&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF — hook registered AFTER BMC is fully defined&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  // Also fire immediately in case the hook already fired&lt;br /&gt;
  if ( document.readyState !== &#039;loading&#039; ) {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123829</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123829"/>
		<updated>2026-02-18T17:17:34Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123827</id>
		<title>User:Gibcus/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123827"/>
		<updated>2026-02-18T17:04:58Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123825</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123825"/>
		<updated>2026-02-18T16:55:08Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      if ( document.getElementById( &#039;bmc-topnav&#039; ) ) return; // already ran&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF — hook registered AFTER BMC is fully defined&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  // Also fire immediately in case the hook already fired&lt;br /&gt;
  if ( document.readyState !== &#039;loading&#039; ) {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123824</id>
		<title>User:Gibcus/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123824"/>
		<updated>2026-02-18T16:51:20Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.load(&#039;/index.php/User:Gibcus/vector-2022.js?action=raw&amp;amp;ctype=text/javascript&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     0. WAIT FOR DOM&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, function () { BMC.init(); } );&lt;br /&gt;
  } else {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123823</id>
		<title>User:Gibcus/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123823"/>
		<updated>2026-02-18T16:50:36Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.load(&#039;/index.php/User:Gibcus/vector-2022.js?action=raw&amp;amp;ctype=text/javascript&#039;);&lt;br /&gt;
document.getElementById(&#039;bmc-topnav&#039;)&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     0. WAIT FOR DOM&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, function () { BMC.init(); } );&lt;br /&gt;
  } else {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123822</id>
		<title>User:Gibcus/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123822"/>
		<updated>2026-02-18T16:50:02Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.load(&#039;/index.php/User:Gibcus/vector-2022.js?action=raw&amp;amp;ctype=text/javascript&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     0. WAIT FOR DOM&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, function () { BMC.init(); } );&lt;br /&gt;
  } else {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123816</id>
		<title>User:Gibcus/vector-2022.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/vector-2022.js&amp;diff=123816"/>
		<updated>2026-02-18T15:59:30Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: Created page with &amp;quot;/**  * User:Gibcus/common.js  * MIT BioMicro Center — Modern Wiki Theme Engine  *  * Paste this entire file into:  * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js  *  * It applies to YOUR login session only.  * To deploy for all users, an admin with editinterface rights  * must paste it into MediaWiki:Common.js instead.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ============================================================      0. WAIT FOR DOM   ==============...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     0. WAIT FOR DOM&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, function () { BMC.init(); } );&lt;br /&gt;
  } else {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123813</id>
		<title>User:Gibcus/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Gibcus/common.js&amp;diff=123813"/>
		<updated>2026-02-18T15:37:04Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: Created page with &amp;quot;/**  * User:Gibcus/common.js  * MIT BioMicro Center — Modern Wiki Theme Engine  *  * Paste this entire file into:  * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js  *  * It applies to YOUR login session only.  * To deploy for all users, an admin with editinterface rights  * must paste it into MediaWiki:Common.js instead.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ============================================================      0. WAIT FOR DOM   ==============...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * User:Gibcus/common.js&lt;br /&gt;
 * MIT BioMicro Center — Modern Wiki Theme Engine&lt;br /&gt;
 *&lt;br /&gt;
 * Paste this entire file into:&lt;br /&gt;
 * https://bmcwiki.mit.edu/index.php/User:Gibcus/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * It applies to YOUR login session only.&lt;br /&gt;
 * To deploy for all users, an admin with editinterface rights&lt;br /&gt;
 * must paste it into MediaWiki:Common.js instead.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     0. WAIT FOR DOM&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     1. DESIGN TOKENS&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var TOKENS = {&lt;br /&gt;
    black:    &#039;#0d0d0d&#039;,&lt;br /&gt;
    darkGray: &#039;#1a1a1a&#039;,&lt;br /&gt;
    midGray:  &#039;#2e2e2e&#039;,&lt;br /&gt;
    border:   &#039;#e2ddd6&#039;,&lt;br /&gt;
    bg:       &#039;#f5f3ef&#039;,&lt;br /&gt;
    bgCard:   &#039;#ffffff&#039;,&lt;br /&gt;
    gold:     &#039;#b8913a&#039;,&lt;br /&gt;
    goldHov:  &#039;#d4a84b&#039;,&lt;br /&gt;
    red:      &#039;#8b1a1a&#039;,   // MIT red accent&lt;br /&gt;
    text:     &#039;#1c1c1c&#039;,&lt;br /&gt;
    textMid:  &#039;#555555&#039;,&lt;br /&gt;
    textLight:&#039;#888888&#039;,&lt;br /&gt;
    fontBody: &amp;quot;&#039;DM Sans&#039;, &#039;Helvetica Neue&#039;, Arial, sans-serif&amp;quot;,&lt;br /&gt;
    fontMono: &amp;quot;&#039;DM Mono&#039;, &#039;Courier New&#039;, monospace&amp;quot;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     2. GLOBAL CSS — injected once, applies to every BMC page&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var GLOBAL_CSS = [&lt;br /&gt;
    &amp;quot;@import url(&#039;https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,400&amp;amp;family=DM+Mono:wght@400;500&amp;amp;display=swap&#039;);&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Reset MediaWiki chrome --- */&lt;br /&gt;
    &#039;#mw-navigation, #mw-head, #mw-panel, #mw-sidebar-button,&#039;,&lt;br /&gt;
    &#039;#mw-sidebar-checkbox, .mw-footer, #footer, #p-logo,&#039;,&lt;br /&gt;
    &#039;.vector-menu-tabs, .vector-header-start .vector-header-logo,&#039;,&lt;br /&gt;
    &#039;.mw-portlet-lang, #p-cactions, .vector-page-toolbar { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#content, #mw-content-text, .mw-body, #mw-body-content,&#039;,&lt;br /&gt;
    &#039;.mw-body-content { margin: 0 !important; padding: 0 !important;&#039;,&lt;br /&gt;
    &#039;max-width: none !important; border: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;body { background: &#039; + TOKENS.bg + &#039; !important;&#039;,&lt;br /&gt;
    &#039;font-family: &#039; + TOKENS.fontBody + &#039; !important;&#039;,&lt;br /&gt;
    &#039;color: &#039; + TOKENS.text + &#039; !important; margin: 0 !important; padding: 0 !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* hide edit pencil icons in headings */&lt;br /&gt;
    &#039;.mw-editsection { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- BMC Top Nav Bar --- */&lt;br /&gt;
    &#039;#bmc-topnav {&#039;,&lt;br /&gt;
    &#039;  position: sticky; top: 0; z-index: 1000;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  padding: 0 32px; height: 56px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 0 rgba(255,255,255,0.06);&#039;,&lt;br /&gt;
    &#039;  gap: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo {&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #fff; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: -0.01em; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  padding-right: 32px;&#039;,&lt;br /&gt;
    &#039;  border-right: 1px solid #333;&#039;,&lt;br /&gt;
    &#039;  margin-right: 8px;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 10px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo span.accent { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-topnav .bmc-nav-logo img { height: 28px; width: 28px; border-radius: 4px; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center;&#039;,&lt;br /&gt;
    &#039;  gap: 2px; flex: 1; overflow-x: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a {&#039;,&lt;br /&gt;
    &#039;  color: #aaa; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.8em; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.03em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 13px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s, background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a:hover { color: #fff; background: #2a2a2a; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-links a.bmc-nav-active { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;#bmc-nav-right {&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 12px; margin-left: auto;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.75em; letter-spacing: 0.05em;&#039;,&lt;br /&gt;
    &#039;  padding: 6px 14px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none; white-space: nowrap;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-ilabs-btn:hover { background: &#039; + TOKENS.goldHov + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search {&#039;,&lt;br /&gt;
    &#039;  color: #888; font-size: 1.1em;&#039;,&lt;br /&gt;
    &#039;  text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  padding: 4px 8px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-nav-right a.bmc-nav-search:hover { color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page wrapper --- */&lt;br /&gt;
    &#039;#bmc-page-wrap {&#039;,&lt;br /&gt;
    &#039;  max-width: 1140px; margin: 0 auto;&#039;,&lt;br /&gt;
    &#039;  padding: 40px 32px 80px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
    &#039;  #bmc-page-wrap { padding: 24px 16px 60px; }&#039;,&lt;br /&gt;
    &#039;  #bmc-topnav { padding: 0 16px; }&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Page title --- */&lt;br /&gt;
    &#039;#bmc-page-title {&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title h1 {&#039;,&lt;br /&gt;
    &#039;  font-size: 2em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; letter-spacing: -0.025em;&#039;,&lt;br /&gt;
    &#039;  line-height: 1.1; margin: 0 0 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-title .bmc-subtitle {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  font-weight: 400;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Section headings --- */&lt;br /&gt;
    &#039;#bmc-page-wrap h2 {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 40px 0 16px;&#039;,&lt;br /&gt;
    &#039;  padding-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap h3 {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  margin: 28px 0 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic body content prose --- */&lt;br /&gt;
    &#039;#bmc-page-wrap p {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid transparent;&#039;,&lt;br /&gt;
    &#039;  transition: border-color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap a:hover { border-bottom-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic list styling --- */&lt;br /&gt;
    &#039;#bmc-page-wrap ul, #bmc-page-wrap ol {&#039;,&lt;br /&gt;
    &#039;  padding-left: 1.4em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.92em; line-height: 1.7;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; margin-bottom: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Generic wiki tables → clean style --- */&lt;br /&gt;
    &#039;#bmc-page-wrap table.wikitable, #bmc-page-wrap table {&#039;,&lt;br /&gt;
    &#039;  border-collapse: collapse; width: 100%;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; margin-bottom: 24px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table th {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ddd; font-weight: 500;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 14px; text-align: left;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.82em; letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table td {&#039;,&lt;br /&gt;
    &#039;  padding: 9px 14px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.text + &#039;; vertical-align: top;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:last-child td { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-page-wrap table tr:hover td { background: #faf8f5; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Card component --- */&lt;br /&gt;
    &#039;.bmc-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-card-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-bottom: 32px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Inline badge --- */&lt;br /&gt;
    &#039;.bmc-badge {&#039;,&lt;br /&gt;
    &#039;  display: inline-block;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.7em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.06em; text-transform: uppercase;&#039;,&lt;br /&gt;
    &#039;  padding: 2px 7px; border-radius: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.gold + &#039;22;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.gold + &#039;; margin-left: 6px;&#039;,&lt;br /&gt;
    &#039;  vertical-align: middle;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- TOC hide (we build nav instead) --- */&lt;br /&gt;
    &#039;#toc, .toc { display: none !important; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Breadcrumb strip under nav --- */&lt;br /&gt;
    &#039;#bmc-breadcrumb {&#039;,&lt;br /&gt;
    &#039;  background: #fff;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 10px 32px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textLight + &#039;;&#039;,&lt;br /&gt;
    &#039;  display: flex; align-items: center; gap: 6px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a { color: &#039; + TOKENS.textMid + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-breadcrumb .sep { color: #ccc; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* --- Pricing-specific styles (reused from earlier) --- */&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle {&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 4px;&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 10px; padding: 4px;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 24px; width: fit-content;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button {&#039;,&lt;br /&gt;
    &#039;  padding: 7px 18px; border: none;&#039;,&lt;br /&gt;
    &#039;  border-radius: 7px; font-size: 0.8em;&#039;,&lt;br /&gt;
    &#039;  font-weight: 600; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em;&#039;,&lt;br /&gt;
    &#039;  transition: all 0.15s;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: transparent; color: #777;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-core  { background: #1a6b3c; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-mit   { background: #8b1a1a; color: #fff; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-tier-toggle button.active-nonmit{ background: #1a3b8b; color: #fff; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    &#039;.bmc-price-section {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 12px; overflow: hidden;&#039;,&lt;br /&gt;
    &#039;  margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 3px rgba(0,0,0,0.04);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header {&#039;,&lt;br /&gt;
    &#039;  background: #faf9f7;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  padding: 13px 20px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.88em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: #333; cursor: pointer;&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: center;&#039;,&lt;br /&gt;
    &#039;  user-select: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header:hover { background: #f2f0ec; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header .chevron { color: #aaa; font-size: 0.8em; transition: transform 0.2s; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-section-header.collapsed .chevron { transform: rotate(-90deg); }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row {&#039;,&lt;br /&gt;
    &#039;  display: flex; justify-content: space-between; align-items: flex-start;&#039;,&lt;br /&gt;
    &#039;  padding: 11px 20px;&#039;,&lt;br /&gt;
    &#039;  border-bottom: 1px solid #f5f2ee;&#039;,&lt;br /&gt;
    &#039;  transition: background 0.1s; gap: 16px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:last-child { border-bottom: none; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row:hover { background: #faf8f5; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-name {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; color: #222;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-unit {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #aaa;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;; margin-top: 2px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-row-note {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.74em; color: #999;&#039;,&lt;br /&gt;
    &#039;  font-style: italic; margin-top: 3px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount {&#039;,&lt;br /&gt;
    &#039;  font-size: 1em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  font-family: &#039; + TOKENS.fontMono + &#039;;&#039;,&lt;br /&gt;
    &#039;  white-space: nowrap; text-align: right;&#039;,&lt;br /&gt;
    &#039;  min-width: 90px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-core   { color: #1a6b3c; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-mit    { color: #8b1a1a; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-nonmit { color: #1a3b8b; }&#039;,&lt;br /&gt;
    &#039;.bmc-price-amount.tier-na     { color: #ccc; font-style: italic; font-size: 0.82em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* search bar */&lt;br /&gt;
    &#039;#bmc-pricing-search-wrap {&#039;,&lt;br /&gt;
    &#039;  position: relative; margin-bottom: 20px; width: 260px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search {&#039;,&lt;br /&gt;
    &#039;  width: 100%; padding: 9px 14px 9px 36px;&#039;,&lt;br /&gt;
    &#039;  border: 1.5px solid #ddd; border-radius: 8px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.85em; font-family: &#039; + TOKENS.fontBody + &#039;;&#039;,&lt;br /&gt;
    &#039;  background: #fff; outline: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search:focus { border-color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;#bmc-pricing-search-icon {&#039;,&lt;br /&gt;
    &#039;  position: absolute; left: 12px; top: 50%;&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-50%); color: #aaa; pointer-events: none;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* tier indicator pill */&lt;br /&gt;
    &#039;#bmc-tier-pill {&#039;,&lt;br /&gt;
    &#039;  display: inline-flex; align-items: center; gap: 8px;&#039;,&lt;br /&gt;
    &#039;  padding: 5px 12px; border-radius: 6px;&#039;,&lt;br /&gt;
    &#039;  font-size: 0.78em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  letter-spacing: 0.04em; margin-bottom: 20px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* homepage card grid */&lt;br /&gt;
    &#039;.bmc-home-grid {&#039;,&lt;br /&gt;
    &#039;  display: grid;&#039;,&lt;br /&gt;
    &#039;  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));&#039;,&lt;br /&gt;
    &#039;  gap: 16px; margin-top: 24px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.bgCard + &#039;;&#039;,&lt;br /&gt;
    &#039;  border: 1px solid &#039; + TOKENS.border + &#039;;&#039;,&lt;br /&gt;
    &#039;  border-radius: 14px; padding: 22px 24px;&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 1px 4px rgba(0,0,0,0.05);&#039;,&lt;br /&gt;
    &#039;  transition: box-shadow 0.2s, transform 0.2s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card:hover {&#039;,&lt;br /&gt;
    &#039;  box-shadow: 0 4px 16px rgba(0,0,0,0.1);&#039;,&lt;br /&gt;
    &#039;  transform: translateY(-2px);&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-icon {&#039;,&lt;br /&gt;
    &#039;  font-size: 1.6em; margin-bottom: 12px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-title {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.95em; font-weight: 600;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.black + &#039;; margin-bottom: 8px;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links {&#039;,&lt;br /&gt;
    &#039;  list-style: none; padding: 0; margin: 0;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.84em; line-height: 1.8;&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a {&#039;,&lt;br /&gt;
    &#039;  color: &#039; + TOKENS.textMid + &#039;; text-decoration: none;&#039;,&lt;br /&gt;
    &#039;  border-bottom: none;&#039;,&lt;br /&gt;
    &#039;  transition: color 0.15s;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li a:hover { color: &#039; + TOKENS.gold + &#039;; }&#039;,&lt;br /&gt;
    &#039;.bmc-home-card .card-links li::before {&#039;,&lt;br /&gt;
    &#039;  content: &amp;quot;→ &amp;quot;; color: &#039; + TOKENS.gold + &#039;; font-size: 0.85em;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* contact strip */&lt;br /&gt;
    &#039;#bmc-contact-strip {&#039;,&lt;br /&gt;
    &#039;  background: &#039; + TOKENS.darkGray + &#039;;&#039;,&lt;br /&gt;
    &#039;  color: #ccc; border-radius: 12px;&#039;,&lt;br /&gt;
    &#039;  padding: 24px 28px; margin-top: 32px;&#039;,&lt;br /&gt;
    &#039;  display: flex; gap: 32px; flex-wrap: wrap; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-item {&#039;,&lt;br /&gt;
    &#039;  font-size: 0.87em; display: flex; gap: 8px; align-items: center;&#039;,&lt;br /&gt;
    &#039;}&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip a { color: &#039; + TOKENS.gold + &#039;; text-decoration: none; }&#039;,&lt;br /&gt;
    &#039;#bmc-contact-strip .contact-label { color: #666; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; }&#039;,&lt;br /&gt;
&lt;br /&gt;
  ].join(&#039;\n&#039;);&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     3. NAV STRUCTURE&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var NAV_LINKS = [&lt;br /&gt;
    { label: &#039;Home&#039;,         href: &#039;/index.php/BioMicroCenter&#039;,                  match: &#039;BioMicroCenter$&#039; },&lt;br /&gt;
    { label: &#039;Sequencing&#039;,   href: &#039;/index.php/BioMicroCenter:Sequencing&#039;,        match: &#039;Sequencing&#039; },&lt;br /&gt;
    { label: &#039;Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Library_Preparation&#039;, match: &#039;Library&#039; },&lt;br /&gt;
    { label: &#039;Single Cell&#039;,  href: &#039;/index.php/BioMicroCenter:SingleCell&#039;,        match: &#039;SingleCell|SpTx|Visium&#039; },&lt;br /&gt;
    { label: &#039;Long Read&#039;,    href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039;, match: &#039;Nanopore|PacBio&#039; },&lt;br /&gt;
    { label: &#039;Computing&#039;,    href: &#039;/index.php/BioMicroCenter:Computing&#039;,         match: &#039;Computing&#039; },&lt;br /&gt;
    { label: &#039;QC&#039;,           href: &#039;/index.php/BioMicroCenter:QC&#039;,               match: &#039;:QC&#039; },&lt;br /&gt;
    { label: &#039;Pricing&#039;,      href: &#039;/index.php/BioMicroCenter:Pricing&#039;,          match: &#039;Pricing&#039; },&lt;br /&gt;
    { label: &#039;People&#039;,       href: &#039;/index.php/BioMicroCenter:People&#039;,           match: &#039;People&#039; },&lt;br /&gt;
    { label: &#039;FAQ&#039;,          href: &#039;/index.php/BioMicroCenter:FAQ&#039;,              match: &#039;FAQ&#039; },&lt;br /&gt;
  ];&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     4. MAIN BMC OBJECT&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  var BMC = {&lt;br /&gt;
&lt;br /&gt;
    page: mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4a. INIT ---- */&lt;br /&gt;
    init: function () {&lt;br /&gt;
      this.injectCSS();&lt;br /&gt;
      this.injectNav();&lt;br /&gt;
      this.injectBreadcrumb();&lt;br /&gt;
      this.wrapContent();&lt;br /&gt;
&lt;br /&gt;
      // Page-specific transforms&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        this.transformHomepage();&lt;br /&gt;
      } else if ( /Pricing/.test( this.page ) ) {&lt;br /&gt;
        this.transformPricing();&lt;br /&gt;
      } else {&lt;br /&gt;
        this.transformGeneric();&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4b. INJECT GLOBAL CSS ---- */&lt;br /&gt;
    injectCSS: function () {&lt;br /&gt;
      var style = document.createElement( &#039;style&#039; );&lt;br /&gt;
      style.id = &#039;bmc-theme-css&#039;;&lt;br /&gt;
      style.textContent = GLOBAL_CSS;&lt;br /&gt;
      document.head.appendChild( style );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4c. INJECT TOP NAV ---- */&lt;br /&gt;
    injectNav: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      var logoImg = document.querySelector( &#039;#p-logo img, .mw-wiki-logo&#039; );&lt;br /&gt;
      var logoSrc = logoImg ? logoImg.src : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var linksHtml = NAV_LINKS.map( function ( l ) {&lt;br /&gt;
        var active = new RegExp( l.match ).test( page ) ? &#039; bmc-nav-active&#039; : &#039;&#039;;&lt;br /&gt;
        return &#039;&amp;lt;a href=&amp;quot;&#039; + l.href + &#039;&amp;quot; class=&amp;quot;&#039; + active + &#039;&amp;quot;&amp;gt;&#039; + l.label + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      } ).join( &#039;&#039; );&lt;br /&gt;
&lt;br /&gt;
      var nav = document.createElement( &#039;div&#039; );&lt;br /&gt;
      nav.id = &#039;bmc-topnav&#039;;&lt;br /&gt;
      nav.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot; class=&amp;quot;bmc-nav-logo&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          ( logoSrc ? &#039;&amp;lt;img src=&amp;quot;&#039; + logoSrc + &#039;&amp;quot; alt=&amp;quot;BMC&amp;quot;&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
          &#039;BioMicro &amp;lt;span class=&amp;quot;accent&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-links&amp;quot;&amp;gt;&#039; + linksHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div id=&amp;quot;bmc-nav-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;/index.php/Special:Search&amp;quot; class=&amp;quot;bmc-nav-search&amp;quot; title=&amp;quot;Search&amp;quot;&amp;gt;⌕&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039; +&lt;br /&gt;
          &#039; class=&amp;quot;bmc-ilabs-btn&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Submit via iLabs ↗&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Insert before body content&lt;br /&gt;
      var body = document.body;&lt;br /&gt;
      body.insertBefore( nav, body.firstChild );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4d. BREADCRUMB ---- */&lt;br /&gt;
    injectBreadcrumb: function () {&lt;br /&gt;
      var page = this.page;&lt;br /&gt;
      if ( /^BioMicroCenter$/.test( page ) ) return; // no breadcrumb on homepage&lt;br /&gt;
&lt;br /&gt;
      var parts = page.split( &#039;:&#039; );&lt;br /&gt;
      var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
      crumb.id = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
      crumb.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span class=&amp;quot;sep&amp;quot;&amp;gt;›&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;&#039; + ( parts[1] || parts[0] ).replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var nav = document.getElementById( &#039;bmc-topnav&#039; );&lt;br /&gt;
      if ( nav ) nav.after( crumb );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4e. WRAP MAIN CONTENT ---- */&lt;br /&gt;
    wrapContent: function () {&lt;br /&gt;
      var content = document.getElementById( &#039;mw-content-text&#039; )&lt;br /&gt;
        || document.getElementById( &#039;content&#039; )&lt;br /&gt;
        || document.querySelector( &#039;.mw-body-content&#039; );&lt;br /&gt;
      if ( !content ) return;&lt;br /&gt;
&lt;br /&gt;
      // Get the first heading&lt;br /&gt;
      var h1 = document.querySelector( &#039;#firstHeading, h1.firstHeading&#039; );&lt;br /&gt;
      var titleText = h1 ? h1.textContent.replace( /^BioMicroCenter:?/, &#039;&#039; ).trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Build page title block&lt;br /&gt;
      var titleBlock = document.createElement( &#039;div&#039; );&lt;br /&gt;
      titleBlock.id = &#039;bmc-page-title&#039;;&lt;br /&gt;
      if ( titleText &amp;amp;&amp;amp; !/^BioMicroCenter$/.test( this.page ) ) {&lt;br /&gt;
        titleBlock.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;h1&amp;gt;&#039; + titleText + &#039;&amp;lt;/h1&amp;gt;&#039;;&lt;br /&gt;
      }&lt;br /&gt;
      if ( h1 ) h1.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Wrap in page container&lt;br /&gt;
      var wrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      wrap.id = &#039;bmc-page-wrap&#039;;&lt;br /&gt;
      content.parentNode.insertBefore( wrap, content );&lt;br /&gt;
      wrap.appendChild( titleBlock );&lt;br /&gt;
      wrap.appendChild( content );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4f. GENERIC PAGE TRANSFORM ---- */&lt;br /&gt;
    transformGeneric: function () {&lt;br /&gt;
      // Just let the global CSS handle it — tables, headings, prose all look better automatically.&lt;br /&gt;
      // Remove the old banner image if present (it&#039;s usually a 500px wide header)&lt;br /&gt;
      var banner = document.querySelector( &#039;#mw-content-text img[src*=&amp;quot;BMC_Header&amp;quot;]&#039; );&lt;br /&gt;
      if ( banner ) {&lt;br /&gt;
        var bannerParent = banner.closest( &#039;p, div&#039; );&lt;br /&gt;
        if ( bannerParent ) bannerParent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4g. HOMEPAGE TRANSFORM ---- */&lt;br /&gt;
    transformHomepage: function () {&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Hide the old content and replace with hero + cards&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
&lt;br /&gt;
      // Extract links from existing wiki tables to preserve them&lt;br /&gt;
      var allLinks = {};&lt;br /&gt;
      if ( oldContent ) {&lt;br /&gt;
        oldContent.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          allLinks[a.textContent.trim()] = a.href;&lt;br /&gt;
        } );&lt;br /&gt;
        oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // Hero&lt;br /&gt;
      var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
      hero.style.cssText = [&lt;br /&gt;
        &#039;background: &#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
        &#039;border-radius: 16px; padding: 48px 40px;&#039;,&lt;br /&gt;
        &#039;margin-bottom: 32px; position: relative; overflow: hidden;&#039;,&lt;br /&gt;
        &#039;color: #fff;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      hero.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:relative;z-index:1&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;font-size:0.72em;letter-spacing:0.16em;color:#888;text-transform:uppercase;&#039;,&lt;br /&gt;
              &#039;margin-bottom:12px;font-family:&#039; + TOKENS.fontMono + &#039;&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;Koch Institute · MIT Department of Biology · Biological Engineering&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;h1 style=&amp;quot;font-size:2.4em;font-weight:600;letter-spacing:-0.03em;&#039;,&lt;br /&gt;
              &#039;line-height:1;margin:0 0 16px;color:#fff&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;MIT BioMicro&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;color:&#039; + TOKENS.gold + &#039;&amp;quot;&amp;gt;Center&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/h1&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;p style=&amp;quot;max-width:560px;font-size:0.95em;line-height:1.7;color:#aaa;margin:0 0 24px&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
              &#039;An integrated genomics core facility providing expertise and equipment for &#039;,&lt;br /&gt;
              &#039;systems biology — from sample prep through sequencing, single-cell, and bioinformatics.&#039;,&lt;br /&gt;
          &#039;&amp;lt;/p&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;div style=&amp;quot;display:flex;gap:12px;flex-wrap:wrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
               &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:&#039; + TOKENS.black + &#039;;&#039;,&lt;br /&gt;
               &#039;font-weight:600;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none;letter-spacing:0.02em&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;Submit Samples via iLabs ↗&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            &#039;&amp;lt;a href=&amp;quot;/index.php/BioMicroCenter:Pricing&amp;quot;&#039;,&lt;br /&gt;
               &#039; style=&amp;quot;background:#222;color:#ccc;&#039;,&lt;br /&gt;
               &#039;font-weight:500;font-size:0.85em;padding:10px 20px;border-radius:8px;&#039;,&lt;br /&gt;
               &#039;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
               &#039;View Pricing&#039;,&lt;br /&gt;
            &#039;&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
          &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        // subtle grid pattern overlay&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;position:absolute;inset:0;opacity:0.04;pointer-events:none;&#039;,&lt;br /&gt;
            &#039;background-image:repeating-linear-gradient(0deg,#fff 0,#fff 1px,transparent 1px,transparent 40px),&#039;,&lt;br /&gt;
            &#039;repeating-linear-gradient(90deg,#fff 0,#fff 1px,transparent 1px,transparent 40px)&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( hero );&lt;br /&gt;
&lt;br /&gt;
      // Service cards&lt;br /&gt;
      var CARDS = [&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🧬&#039;,&lt;br /&gt;
          title: &#039;Sequencing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;NovaSeq X / NovaSeq 6000&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Element AVITI24&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;Singular G4 / MiSeq&#039;, href: &#039;/index.php/BioMicroCenter:Illumina_Sequencing&#039; },&lt;br /&gt;
            { label: &#039;ONT PromethION&#039;, href: &#039;/index.php/BioMicroCenter:Oxford_Nanopore_Technologies&#039; },&lt;br /&gt;
            { label: &#039;PacBio Revio †&#039;, href: &#039;/index.php/BioMicroCenter:PacBio&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📚&#039;,&lt;br /&gt;
          title: &#039;Library Preparation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Short Read — DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;Short Read — RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_LIB&#039; },&lt;br /&gt;
            { label: &#039;High Throughput DNA&#039;, href: &#039;/index.php/BioMicroCenter:DNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;High Throughput RNA&#039;, href: &#039;/index.php/BioMicroCenter:RNA_HTL&#039; },&lt;br /&gt;
            { label: &#039;Nanopore Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:NanoPore_Library_Prep&#039; },&lt;br /&gt;
            { label: &#039;PacBio Library Prep&#039;, href: &#039;/index.php/BioMicroCenter:PacBio_Library_Preparation&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;⬡&#039;,&lt;br /&gt;
          title: &#039;Single Cell &amp;amp; Spatial&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;10X Chromium (5′/3′ RNA, ATAC)&#039;, href: &#039;/index.php/BioMicroCenter:SingleCell&#039; },&lt;br /&gt;
            { label: &#039;10X Visium (Standard + HD)&#039;, href: &#039;/index.php/BioMicroCenter:SpTx&#039; },&lt;br /&gt;
            { label: &#039;AVITI24 in situ&#039;, href: &#039;/index.php/BioMicroCenter:Element_Sequencing&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🔬&#039;,&lt;br /&gt;
          title: &#039;Sample Services &amp;amp; QC&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Fragment Analyzer / FemtoPulse&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;BioAnalyzer&#039;, href: &#039;/index.php/BioMicroCenter:QC&#039; },&lt;br /&gt;
            { label: &#039;Chemagic360 DNA/RNA Extraction&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Covaris Sonicator&#039;, href: &#039;/index.php/BioMicroCenter:Covaris&#039; },&lt;br /&gt;
            { label: &#039;RT-PCR (Roche LC480)&#039;, href: &#039;/index.php/BioMicroCenter:RTPCR&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;🤖&#039;,&lt;br /&gt;
          title: &#039;Automation&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Tecan EVO 150 Liquid Handler&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;SPT Mosquito HV&#039;, href: &#039;/index.php/BioMicroCenter:Tecan_Freedom_Evo&#039; },&lt;br /&gt;
            { label: &#039;Pippin Prep Electrophoresis&#039;, href: &#039;/index.php/BioMicroCenter:PippinPrep&#039; },&lt;br /&gt;
            { label: &#039;Oligo Synthesis&#039;, href: &#039;/index.php/BioMicroCenter:Oligo_Synthesis&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;💻&#039;,&lt;br /&gt;
          title: &#039;Bioinformatics &amp;amp; Computing&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Bioinformatics Consulting (IGB)&#039;, href: &#039;https://igb.mit.edu/&#039; },&lt;br /&gt;
            { label: &#039;Luria Computing Cluster&#039;, href: &#039;https://igb.mit.edu/computing-resources/luria-cluster&#039; },&lt;br /&gt;
            { label: &#039;Active Data Storage&#039;, href: &#039;https://igb.mit.edu/computing-resources/active-data-storage&#039; },&lt;br /&gt;
            { label: &#039;Data Transfer (Globus)&#039;, href: &#039;https://igb.mit.edu/data-management/globus&#039; },&lt;br /&gt;
            { label: &#039;Training Sessions&#039;, href: &#039;https://igb.mit.edu/mini-courses&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📋&#039;,&lt;br /&gt;
          title: &#039;Get Started&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;Pricing&#039;, href: &#039;/index.php/BioMicroCenter:Pricing&#039; },&lt;br /&gt;
            { label: &#039;New User Signup&#039;, href: &#039;/index.php/BioMicroCenter:Forms#NEW_USERS&#039; },&lt;br /&gt;
            { label: &#039;External Submission Forms&#039;, href: &#039;/index.php/BioMicroCenter:Forms&#039; },&lt;br /&gt;
            { label: &#039;FAQs&#039;, href: &#039;/index.php/BioMicroCenter:FAQ&#039; },&lt;br /&gt;
            { label: &#039;Staff Directory&#039;, href: &#039;/index.php/BioMicroCenter:People&#039; },&lt;br /&gt;
            { label: &#039;News &amp;amp; Updates&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          icon: &#039;📅&#039;,&lt;br /&gt;
          title: &#039;News &amp;amp; Resources&#039;,&lt;br /&gt;
          links: [&lt;br /&gt;
            { label: &#039;News &amp;amp; General Information&#039;, href: &#039;/index.php/BioMicroCenter:News&#039; },&lt;br /&gt;
            { label: &#039;Technology Seminar Series&#039;, href: &#039;/index.php/BioMicroCenter:Technology_Seminar_Series&#039; },&lt;br /&gt;
            { label: &#039;Biostuff Mailing List&#039;, href: &#039;http://mailman.mit.edu:/mailman/listinfo/biostuff&#039; },&lt;br /&gt;
            { label: &#039;FAIR Data Management&#039;, href: &#039;https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/&#039; },&lt;br /&gt;
          ],&lt;br /&gt;
        },&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      var grid = document.createElement( &#039;div&#039; );&lt;br /&gt;
      grid.className = &#039;bmc-home-grid&#039;;&lt;br /&gt;
      CARDS.forEach( function ( card ) {&lt;br /&gt;
        var li = card.links.map( function ( lnk ) {&lt;br /&gt;
          return &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + lnk.href + &#039;&amp;quot;&amp;gt;&#039; + lnk.label + &#039;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039;;&lt;br /&gt;
        } ).join( &#039;&#039; );&lt;br /&gt;
        var el = document.createElement( &#039;div&#039; );&lt;br /&gt;
        el.className = &#039;bmc-home-card&#039;;&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-icon&amp;quot;&amp;gt;&#039; + card.icon + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;card-title&amp;quot;&amp;gt;&#039; + card.title + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;ul class=&amp;quot;card-links&amp;quot;&amp;gt;&#039; + li + &#039;&amp;lt;/ul&amp;gt;&#039;;&lt;br /&gt;
        grid.appendChild( el );&lt;br /&gt;
      } );&lt;br /&gt;
      wrap.appendChild( grid );&lt;br /&gt;
&lt;br /&gt;
      // Contact strip&lt;br /&gt;
      var contact = document.createElement( &#039;div&#039; );&lt;br /&gt;
      contact.id = &#039;bmc-contact-strip&#039;;&lt;br /&gt;
      contact.innerHTML = [&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;Room 68-322, MIT&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Email&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div&amp;gt;&amp;lt;div class=&amp;quot;contact-label&amp;quot;&amp;gt;Phone&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;contact-item&amp;quot;&amp;gt;617-715-4533&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;div style=&amp;quot;margin-left:auto&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://mit-ki.ilabsolutions.com/sc/3381/ki-genomics-core-mit-biomicro-center?tab=about&amp;quot;&#039;,&lt;br /&gt;
           &#039; target=&amp;quot;_blank&amp;quot;&#039;,&lt;br /&gt;
           &#039; style=&amp;quot;background:&#039; + TOKENS.gold + &#039;;color:#000;font-weight:600;&#039;,&lt;br /&gt;
           &#039;font-size:0.82em;padding:9px 18px;border-radius:7px;text-decoration:none&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
           &#039;iLabs — Internal Submission ↗&#039;,&lt;br /&gt;
        &#039;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
      ].join( &#039;&#039; );&lt;br /&gt;
      wrap.appendChild( contact );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4h. PRICING PAGE TRANSFORM ---- */&lt;br /&gt;
    transformPricing: function () {&lt;br /&gt;
      var self = this;&lt;br /&gt;
      var oldContent = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
      if ( !oldContent ) return;&lt;br /&gt;
&lt;br /&gt;
      // Current tier state&lt;br /&gt;
      var tier = &#039;mit&#039;;&lt;br /&gt;
      var tierColors = { core: &#039;#1a6b3c&#039;, mit: &#039;#8b1a1a&#039;, nonmit: &#039;#1a3b8b&#039; };&lt;br /&gt;
      var tierBadges = { core: &#039;CORE&#039;, mit: &#039;MIT&#039;, nonmit: &#039;EXT&#039; };&lt;br /&gt;
      var tierLabels = { core: &#039;Core Lab&#039;, mit: &#039;MIT&#039;, nonmit: &#039;Non-MIT&#039; };&lt;br /&gt;
&lt;br /&gt;
      // Parse all wiki tables from the existing rendered HTML&lt;br /&gt;
      // Each table = one pricing section&lt;br /&gt;
      var sections = self.parsePricingTables( oldContent );&lt;br /&gt;
&lt;br /&gt;
      // Hide original content&lt;br /&gt;
      oldContent.style.display = &#039;none&#039;;&lt;br /&gt;
&lt;br /&gt;
      var wrap = document.getElementById( &#039;bmc-page-wrap&#039; );&lt;br /&gt;
      if ( !wrap ) return;&lt;br /&gt;
&lt;br /&gt;
      // Controls row&lt;br /&gt;
      var controls = document.createElement( &#039;div&#039; );&lt;br /&gt;
      controls.style.cssText = &#039;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:8px;&#039;;&lt;br /&gt;
&lt;br /&gt;
      // Tier toggle&lt;br /&gt;
      var toggle = document.createElement( &#039;div&#039; );&lt;br /&gt;
      toggle.id = &#039;bmc-pricing-tier-toggle&#039;;&lt;br /&gt;
      [ &#039;core&#039;, &#039;mit&#039;, &#039;nonmit&#039; ].forEach( function ( t ) {&lt;br /&gt;
        var btn = document.createElement( &#039;button&#039; );&lt;br /&gt;
        btn.textContent = tierLabels[t];&lt;br /&gt;
        btn.dataset.tier = t;&lt;br /&gt;
        btn.className = t === tier ? &#039;active-&#039; + t : &#039;&#039;;&lt;br /&gt;
        btn.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          tier = t;&lt;br /&gt;
          toggle.querySelectorAll( &#039;button&#039; ).forEach( function ( b ) { b.className = &#039;&#039;; } );&lt;br /&gt;
          btn.className = &#039;active-&#039; + t;&lt;br /&gt;
          pill.style.background = tierColors[t] + &#039;22&#039;;&lt;br /&gt;
          pill.style.color = tierColors[t];&lt;br /&gt;
          pill.style.borderColor = tierColors[t] + &#039;44&#039;;&lt;br /&gt;
          pillBadge.style.background = tierColors[t];&lt;br /&gt;
          pillBadge.textContent = tierBadges[t];&lt;br /&gt;
          pillLabel.textContent = &#039;Showing &#039; + tierLabels[t] + &#039; pricing&#039;;&lt;br /&gt;
          self.updatePricingTier( t );&lt;br /&gt;
        } );&lt;br /&gt;
        toggle.appendChild( btn );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Search&lt;br /&gt;
      var searchWrap = document.createElement( &#039;div&#039; );&lt;br /&gt;
      searchWrap.id = &#039;bmc-pricing-search-wrap&#039;;&lt;br /&gt;
      searchWrap.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;span id=&amp;quot;bmc-pricing-search-icon&amp;quot;&amp;gt;⌕&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;input id=&amp;quot;bmc-pricing-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Search services…&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
      searchWrap.querySelector( &#039;input&#039; ).addEventListener( &#039;input&#039;, function () {&lt;br /&gt;
        self.filterPricingRows( this.value.toLowerCase() );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      controls.appendChild( toggle );&lt;br /&gt;
      controls.appendChild( searchWrap );&lt;br /&gt;
      wrap.appendChild( controls );&lt;br /&gt;
&lt;br /&gt;
      // Tier pill&lt;br /&gt;
      var pill = document.createElement( &#039;div&#039; );&lt;br /&gt;
      pill.id = &#039;bmc-tier-pill&#039;;&lt;br /&gt;
      pill.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;22;color:&#039; + tierColors[tier] + &#039;;border:1.5px solid &#039; + tierColors[tier] + &#039;44;border-radius:6px;&#039;;&lt;br /&gt;
      var pillBadge = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillBadge.style.cssText = &#039;background:&#039; + tierColors[tier] + &#039;;color:#fff;border-radius:3px;padding:1px 6px;font-size:0.82em;letter-spacing:0.08em;&#039;;&lt;br /&gt;
      pillBadge.textContent = tierBadges[tier];&lt;br /&gt;
      var pillLabel = document.createElement( &#039;span&#039; );&lt;br /&gt;
      pillLabel.textContent = &#039;Showing &#039; + tierLabels[tier] + &#039; pricing&#039;;&lt;br /&gt;
      pill.appendChild( pillBadge );&lt;br /&gt;
      pill.appendChild( pillLabel );&lt;br /&gt;
      wrap.appendChild( pill );&lt;br /&gt;
&lt;br /&gt;
      // Render sections&lt;br /&gt;
      var container = document.createElement( &#039;div&#039; );&lt;br /&gt;
      container.id = &#039;bmc-pricing-container&#039;;&lt;br /&gt;
      wrap.appendChild( container );&lt;br /&gt;
&lt;br /&gt;
      sections.forEach( function ( section ) {&lt;br /&gt;
        var card = document.createElement( &#039;div&#039; );&lt;br /&gt;
        card.className = &#039;bmc-price-section&#039;;&lt;br /&gt;
&lt;br /&gt;
        var header = document.createElement( &#039;div&#039; );&lt;br /&gt;
        header.className = &#039;bmc-price-section-header&#039;;&lt;br /&gt;
        header.innerHTML = section.title + &#039;&amp;lt;span class=&amp;quot;chevron&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
        header.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
          var body = card.querySelector( &#039;.bmc-price-body&#039; );&lt;br /&gt;
          var collapsed = header.classList.toggle( &#039;collapsed&#039; );&lt;br /&gt;
          body.style.display = collapsed ? &#039;none&#039; : &#039;&#039;;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var body = document.createElement( &#039;div&#039; );&lt;br /&gt;
        body.className = &#039;bmc-price-body&#039;;&lt;br /&gt;
&lt;br /&gt;
        section.rows.forEach( function ( row ) {&lt;br /&gt;
          var rowEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
          rowEl.className = &#039;bmc-price-row&#039;;&lt;br /&gt;
          rowEl.dataset.rowName = row.name.toLowerCase();&lt;br /&gt;
&lt;br /&gt;
          var amt = row.prices[tier];&lt;br /&gt;
          var amtClass = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;tier-na&#039; : &#039;tier-&#039; + tier;&lt;br /&gt;
          var amtText = ( amt === null || amt === undefined || amt === &#039;&#039; )&lt;br /&gt;
            ? &#039;—&#039; : amt;&lt;br /&gt;
&lt;br /&gt;
          rowEl.innerHTML =&lt;br /&gt;
            &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
              &#039;&amp;lt;div class=&amp;quot;bmc-price-row-name&amp;quot;&amp;gt;&#039; + row.name + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
              ( row.unit ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-unit&amp;quot;&amp;gt;&#039; + row.unit + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
              ( row.notes ? &#039;&amp;lt;div class=&amp;quot;bmc-price-row-note&amp;quot;&amp;gt;&#039; + row.notes + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039; ) +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;bmc-price-amount &#039; + amtClass + &#039;&amp;quot; data-prices=\&#039;&#039; + JSON.stringify( row.prices ) + &#039;\&#039;&amp;gt;&#039; +&lt;br /&gt;
              amtText +&lt;br /&gt;
            &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
          body.appendChild( rowEl );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        card.appendChild( header );&lt;br /&gt;
        card.appendChild( body );&lt;br /&gt;
        container.appendChild( card );&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      // Footer note&lt;br /&gt;
      var note = document.createElement( &#039;div&#039; );&lt;br /&gt;
      note.style.cssText = &#039;margin-top:24px;padding:14px 18px;background:#fff8e8;border-radius:8px;border:1px solid #e8d8a0;font-size:0.78em;color:#7a6a3a;line-height:1.6;&#039;;&lt;br /&gt;
      note.innerHTML = &#039;✦ = Minimal inventory maintained &amp;amp;nbsp;·&amp;amp;nbsp; †† = Through collaboration with nearby academic shared resources &amp;amp;nbsp;·&amp;amp;nbsp; Pricing as of January 2026. Questions? &amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot; style=&amp;quot;color:#8b6914&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
      wrap.appendChild( note );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4i. PARSE PRICING TABLES FROM WIKI HTML ---- */&lt;br /&gt;
    parsePricingTables: function ( container ) {&lt;br /&gt;
      var sections = [];&lt;br /&gt;
      // Walk h2/h3 + table pairs&lt;br /&gt;
      var nodes = container.querySelectorAll( &#039;h2, h3, table&#039; );&lt;br /&gt;
      var currentTitle = &#039;Services&#039;;&lt;br /&gt;
      var currentRows = [];&lt;br /&gt;
&lt;br /&gt;
      var flush = function () {&lt;br /&gt;
        if ( currentRows.length &amp;gt; 0 ) {&lt;br /&gt;
          sections.push( { title: currentTitle, rows: currentRows } );&lt;br /&gt;
          currentRows = [];&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.tagName === &#039;H2&#039; || node.tagName === &#039;H3&#039; ) {&lt;br /&gt;
          flush();&lt;br /&gt;
          // Clean up heading text (remove [edit] spans)&lt;br /&gt;
          var clone = node.cloneNode( true );&lt;br /&gt;
          clone.querySelectorAll( &#039;.mw-editsection&#039; ).forEach( function ( e ) { e.remove(); } );&lt;br /&gt;
          currentTitle = clone.textContent.trim();&lt;br /&gt;
        } else if ( node.tagName === &#039;TABLE&#039; ) {&lt;br /&gt;
          // Find header row to determine column order&lt;br /&gt;
          var headers = [];&lt;br /&gt;
          var headerRow = node.querySelector( &#039;tr&#039; );&lt;br /&gt;
          if ( headerRow ) {&lt;br /&gt;
            headerRow.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
              headers.push( cell.textContent.trim().toLowerCase() );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
&lt;br /&gt;
          // Find price column indices&lt;br /&gt;
          var coreIdx   = -1, mitIdx = -1, nonmitIdx = -1;&lt;br /&gt;
          var nameIdx   = 0;&lt;br /&gt;
          var unitIdx   = -1, notesIdx = -1;&lt;br /&gt;
          headers.forEach( function ( h, i ) {&lt;br /&gt;
            if ( /core/.test( h ) )     coreIdx   = i;&lt;br /&gt;
            if ( /^mit$/.test( h ) )    mitIdx    = i;&lt;br /&gt;
            if ( /non.?mit/.test( h ) ) nonmitIdx = i;&lt;br /&gt;
            if ( /unit/.test( h ) )     unitIdx   = i;&lt;br /&gt;
            if ( /note/.test( h ) )     notesIdx  = i;&lt;br /&gt;
          } );&lt;br /&gt;
&lt;br /&gt;
          // Parse data rows&lt;br /&gt;
          var rows = node.querySelectorAll( &#039;tr&#039; );&lt;br /&gt;
          rows.forEach( function ( row, ri ) {&lt;br /&gt;
            if ( ri === 0 ) return; // skip header&lt;br /&gt;
            var cells = row.querySelectorAll( &#039;td, th&#039; );&lt;br /&gt;
            if ( cells.length &amp;lt; 2 ) return;&lt;br /&gt;
&lt;br /&gt;
            var getText = function ( idx ) {&lt;br /&gt;
              if ( idx &amp;lt; 0 || idx &amp;gt;= cells.length ) return &#039;&#039;;&lt;br /&gt;
              return cells[idx].textContent.trim();&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            var name = getText( nameIdx );&lt;br /&gt;
            if ( !name ) return;&lt;br /&gt;
&lt;br /&gt;
            var formatPrice = function ( idx ) {&lt;br /&gt;
              var raw = getText( idx );&lt;br /&gt;
              if ( !raw || raw === &#039;&#039; || /pricing in/i.test( raw ) ) return null;&lt;br /&gt;
              // Already has $ sign in wiki? Return as-is, else prefix&lt;br /&gt;
              return raw;&lt;br /&gt;
            };&lt;br /&gt;
&lt;br /&gt;
            currentRows.push( {&lt;br /&gt;
              name: name,&lt;br /&gt;
              unit: unitIdx &amp;gt;= 0 ? getText( unitIdx ) : &#039;&#039;,&lt;br /&gt;
              notes: notesIdx &amp;gt;= 0 ? getText( notesIdx ) : &#039;&#039;,&lt;br /&gt;
              prices: {&lt;br /&gt;
                core:   formatPrice( coreIdx ),&lt;br /&gt;
                mit:    formatPrice( mitIdx ),&lt;br /&gt;
                nonmit: formatPrice( nonmitIdx ),&lt;br /&gt;
              }&lt;br /&gt;
            } );&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      flush();&lt;br /&gt;
      return sections;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4j. UPDATE PRICING TIER (live swap) ---- */&lt;br /&gt;
    updatePricingTier: function ( tier ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-amount&#039; ).forEach( function ( el ) {&lt;br /&gt;
        try {&lt;br /&gt;
          var prices = JSON.parse( el.dataset.prices );&lt;br /&gt;
          var amt = prices[tier];&lt;br /&gt;
          var isNA = ( amt === null || amt === undefined || amt === &#039;&#039; );&lt;br /&gt;
          el.textContent = isNA ? &#039;—&#039; : amt;&lt;br /&gt;
          el.className = &#039;bmc-price-amount &#039; + ( isNA ? &#039;tier-na&#039; : &#039;tier-&#039; + tier );&lt;br /&gt;
        } catch ( e ) {}&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    /* ---- 4k. FILTER PRICING ROWS ---- */&lt;br /&gt;
    filterPricingRows: function ( query ) {&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-row&#039; ).forEach( function ( row ) {&lt;br /&gt;
        var name = row.dataset.rowName || &#039;&#039;;&lt;br /&gt;
        row.style.display = name.includes( query ) ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
      // Show/hide empty sections&lt;br /&gt;
      document.querySelectorAll( &#039;.bmc-price-section&#039; ).forEach( function ( section ) {&lt;br /&gt;
        var visible = section.querySelectorAll( &#039;.bmc-price-row:not([style*=&amp;quot;none&amp;quot;])&#039; );&lt;br /&gt;
        section.style.display = visible.length ? &#039;&#039; : &#039;none&#039;;&lt;br /&gt;
      } );&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  }; // end BMC&lt;br /&gt;
&lt;br /&gt;
  /* ============================================================&lt;br /&gt;
     5. KICK OFF&lt;br /&gt;
  ============================================================ */&lt;br /&gt;
  if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, function () { BMC.init(); } );&lt;br /&gt;
  } else {&lt;br /&gt;
    BMC.init();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Illumina_Sequencing&amp;diff=109139</id>
		<title>BioMicroCenter:Illumina Sequencing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Illumina_Sequencing&amp;diff=109139"/>
		<updated>2025-12-05T20:02:34Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* Illumina Massively Parallel Sequencing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
The MIT BioMicro Center has a MiSeq i100 and supports NovaSeqXplus sequencing from Illumina. We support a wide variety of applications, such as ChIP-Seq, miRNA sequencing and RNA-seq. &lt;br /&gt;
&lt;br /&gt;
== Illumina Massively Parallel Sequencing ==&lt;br /&gt;
{|&lt;br /&gt;
 |- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
 |style=&amp;quot;width: 400px;&amp;quot;|&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
  !Service &lt;br /&gt;
  !Illumina Sequencing&lt;br /&gt;
  |-&lt;br /&gt;
  |INPUT || Illumina libraries&lt;br /&gt;
  |-&lt;br /&gt;
  |MIN VOLUME || 40uL Miseq i100 &amp;lt;BR&amp;gt; 12 uL MiSeq &amp;lt;br&amp;gt; 22 uL NovaSeq6k per flow cell &amp;lt;br&amp;gt; 110 uL NovaSeqXplus per lane&lt;br /&gt;
  |-&lt;br /&gt;
  |MIN CONCENTRATION || 2nM* (~0.4ng/uL for a 300bp library)&lt;br /&gt;
  |-&lt;br /&gt;
  |INCLUDED SERVICES &lt;br /&gt;
  | &lt;br /&gt;
* Quality Control:Fragment Analyzer and qPCR&lt;br /&gt;
* Illumina Sequencing &lt;br /&gt;
* Demultiplexing&lt;br /&gt;
  |-&lt;br /&gt;
  |ADDITIONAL SERVICES ||&lt;br /&gt;
* Quality Control&lt;br /&gt;
* Illumina library preparation&lt;br /&gt;
  |-&lt;br /&gt;
  |DATA FORMATS &lt;br /&gt;
  |&lt;br /&gt;
*FASTQ &lt;br /&gt;
*BCL (stored 30d)&lt;br /&gt;
  |-&lt;br /&gt;
  |QUALITY CONTROL &lt;br /&gt;
  |&lt;br /&gt;
* [https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ FASTQC]&lt;br /&gt;
* Basic run metrics (alignment rate, complexity)&lt;br /&gt;
* Basic RNAseq metrics (where applicable)&lt;br /&gt;
* Basic paired end metrics (where applicable)&lt;br /&gt;
* Contamination checks&lt;br /&gt;
  |-&lt;br /&gt;
  |PRICING || [[BioMicroCenter:Pricing#HISEQ2000_SEQUENCING|LINK]]&lt;br /&gt;
  |-&lt;br /&gt;
  |SUBMISSION &lt;br /&gt;
  |&lt;br /&gt;
* MIT - [https://mit.ilabsolutions.com/service_item/new/3381?spt_id=3863 ilabs] &lt;br /&gt;
* External Users - [[BioMicroCenter:Forms|form]]&lt;br /&gt;
  |-&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
Illumina sequencing-by-synthesis is the primary workhorse of the BioMicro Center. These instruments produce millions to billions of reads simultaneously and are used in a very broad spectrum of applications. The Center currently supports a MiSeqi100 walkup sequencer and NovaSeqXplus through collaboration with other local academic core facilities. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Typical Workflow===&lt;br /&gt;
Illumina sequencing at the core begins with library quality control, during which the Center verifies the anchor elements and insert size using [[BioMicroCenter:RTPCR|qPCR]] and the [[BioMicroCenter:QC#AATI_FRAGMENT_ANALYZER|Fragment Analyzer]]. Users may elect to bypass this step if they provide the sample concentration and the concentration they would like to load at. Samples are then entered into the sequencing queue. Typical queues in the BioMicro Center are short, rarely exceeding 1-2 weeks, and samples are frequently run within a couple days. &amp;lt;B&amp;gt;We do guarantee a minimum number of reads per lane provided if: a) BMC performed the QC, b) the samples are high-complexity, especially in the first few nucleotides, and c) the samples are at least 2nM.&amp;lt;/B&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Illumina sequencing through the BioMicro Center is only available in full lanes and not on a per read basis. You are welcome to collaborate with other laboratories in order to pool samples. However, please be sure to minimize any possibility of cross-contamination of indexes as well as [https://www.illumina.com/science/education/minimizing-index-hopping.html index crosstalk.] &lt;br /&gt;
&lt;br /&gt;
When ordering lanes, please be aware that only full flowcells will be sequenced ASAP. More lanes may be purchased to facilitate sequencing. The wait time for individual lanes can vary widely. Full flowcells have priority for sequencing.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Data Handling===&lt;br /&gt;
Following sequencing, data is handled using a custom analytical pipeline. If libraries were made in the Center or an index was provided, samples are split by index and identified by DNA-ID. [https://en.wikipedia.org/wiki/FASTQ_format FASTQ] files and other desired formats will be placed in a delivery folder based on the project name, along with several quality control checks done for the sequencing data. We will provide an initial review of your project where we do try to identify any issues including incorrect indexes, sample contaminants, etc. Please note that our pipelines are built to find problems and are NOT designed to provide an initial analysis of your data. These analyses are built for speed, simplicity, and are not tuned in any way to your samples. We are always happy to discuss these results with you. Data will be available in your lab folder for 90 days post delivery, after which most of the data is deleted. FASTQ file will still be downloadable for two years but is delivered on a case by case basis.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
===Custom Sequencing===&lt;br /&gt;
Users may elect to prep their samples with custom oligos. If this is the case, custom sequencing oligos must be provided along with the samples at the time of submission. At least 15uL of each kind custom sequencing primer at 100 uM should be submitted per lane of most Illumina sequencers. At least 30uL of each kind of custom sequencing primer at 100uM should be provided per NovaSeqXplus flowcell. It is strongly recommended to contact biomicro@mit.edu before planning a custom library preparation. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
Additional services available:&lt;br /&gt;
* [[BioMicroCenter:Illumina_Library_Preparation|Illumina library preparation]]&lt;br /&gt;
* [[BioMicroCenter:BioInformaticsStaff|Bioinformatics Support]]&lt;br /&gt;
* [[BioMicroCenter:Servers|Data storage and Computation]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Illumina Platforms ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=1 &lt;br /&gt;
 !width=100| SPEC&lt;br /&gt;
 !width=250| MiSeq i100+&lt;br /&gt;
 !width=250| NovaSeqX+&lt;br /&gt;
 |-&lt;br /&gt;
 |&#039;&#039;&#039;SEQUENCER&#039;&#039;&#039;&lt;br /&gt;
 |[[Image:BMC_i100.jpg|center|200px]]&lt;br /&gt;
 |[[Image:BMC_NovaXplus.jpg|center|150px]] &lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;READS/LANE&#039;&#039;&#039;&amp;lt;BR&amp;gt; Low number is minimum per lane for standard Illumina libraries.&lt;br /&gt;
 | &lt;br /&gt;
* 5M&lt;br /&gt;
* 25M&lt;br /&gt;
(50m and 100m lanes due in late 2025)&lt;br /&gt;
 |&lt;br /&gt;
*10B (8 lanes)&lt;br /&gt;
*25B (8 lanes or full flowcell)&lt;br /&gt;
 |-&lt;br /&gt;
 |&#039;&#039;&#039;LENGTHS AVAILABLE&#039;&#039;&#039;&lt;br /&gt;
 |&lt;br /&gt;
* 100nt, 300nt, 600nt&lt;br /&gt;
 |&lt;br /&gt;
*100nt(25B full FC only),300nt&lt;br /&gt;
 |-&lt;br /&gt;
 |&#039;&#039;&#039;KEY NOTES&#039;&#039;&#039;&lt;br /&gt;
 |&lt;br /&gt;
* Patterned flowcell / X-amp chemistry: UDIs recommended.&lt;br /&gt;
* 2 color chemistry - G=dark.&lt;br /&gt;
* Walkup available.&lt;br /&gt;
 |&lt;br /&gt;
*Patterned flowcell&lt;br /&gt;
*Struggles with low complexity libraries&lt;br /&gt;
*Lane by Lane&lt;br /&gt;
 |-&lt;br /&gt;
 |&#039;&#039;&#039;DONATED BY&#039;&#039;&#039;&lt;br /&gt;
 |MIT VPR, Drs. Gene Li, Michael Birnbaum, Dept. of Biololgy, Scott Ritterbush &#039;89, SM &#039;92&lt;br /&gt;
 |Collaborations with local academic cores. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- commenting GA out 2/2/17 NK === Genome Analyzer IIx ===&lt;br /&gt;
HiSeq2000s donated by Drs. Penny Chisholm and Chris Burge and HHMI&lt;br /&gt;
&lt;br /&gt;
[[Image:GAIIxcollage.jpg|right|200px]] The Genome Analyzer II (GAII) is the oldest sequencers in the BioMicro Center and remain the most flexible. The newer generations of Illumina sequencers have been designed with increasing focus on clinical applications and have removed some of the &amp;quot;hands on&amp;quot; aspects of the older GAIIs. The GAIIs remain the only sequencers where the actual images of the flowcell can be reprocessed for example. The GAII/IIx can produce 20-40m reads per lane passing filter and typically runs read lengths of 36-150nt per side.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
With the addition of the MiSeq, we have reworked how we are processing GAII flowcells. We have been able to create [[BioMicroCenter:PartialFlowcells|&#039;&#039;&#039;partial flowcells&#039;&#039;&#039;]] on the GAII by altering recipes. This has allowed us to move from a model like the HiSeq where we need a full flowcell before we run to a model where we can run as soon as the samples pass quality control, more like the MiSeq. However, unlike the MiSeq, we can run multiple lanes at once. Some critical caveats: First, these methods are not supported by Illumina so we cannot offer to replace failed runs. Second, unlike the HiSeq, the PhiX lane is *not* included. You must choose to sequence a lane of PhiX if you want to do control normalization. Finally, this service is completely &amp;quot;a la carte&amp;quot; so the pricing schema is quite different. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
{| border=1 align=&amp;quot;right&amp;quot;&lt;br /&gt;
 ! # of Lanes&lt;br /&gt;
 !width=75| cycles per day&lt;br /&gt;
 !width=75| cycles per kit&lt;br /&gt;
 |-align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 8 &lt;br /&gt;
 | 24 &lt;br /&gt;
 | 42&lt;br /&gt;
 |-align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 &lt;br /&gt;
 | 36 &lt;br /&gt;
 | 66/33*&lt;br /&gt;
 |-align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 2 &lt;br /&gt;
 | 48 &lt;br /&gt;
 | 106/54*&lt;br /&gt;
 |-align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 &lt;br /&gt;
 | 72 &lt;br /&gt;
 | 140/81*&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;3&amp;quot; align=center |&amp;amp;#42;&#039;&#039;Second number pertains to reads greater than 40 nt.&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Using fewer lanes on each flowcell has allowed us to decrease the cycle time by not imaging all the lanes. In a typical 8 lane run, 20 minutes is spent doing chemistry followed by 40 minutes of imaging (each lane takes ~5 minutes to image). Therefore, a 2 lane flowcell runs twice as fast as an 8 lane flowcell. Also, since the chemistry is not running in to all of the lanes, each sequencing kit can go to a longer read length. The relationships are summarized in the chart on the left. Pricing is set on the number of lanes you are using, the number of days you are running the GAII, and the number of sequencing kits you are using. For example, if you wanted to run a 75+75 PE flowcell using 2 lanes, the cost would be the initial cost for the 2 lane PE flowcell plus an additional 3 days (one day is included in the original price) plus two additional sequencing kits. The last kit would not be completely used up (you would have an extra 18nt left that would be thrown away).&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The GAII/GAIIx is ideal for:&lt;br /&gt;
* Unusual read lengths&lt;br /&gt;
* Protocol Prototyping&lt;br /&gt;
* Non-standard assays such as HITS-FLIP&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The Genome Analyzer IIs were donated to the BioMicro Center by Drs. Penny Chisholm, Chris Burge, Ernest Fraenkel and the Dept of Biology with contributions from many others &#039;&#039;&lt;br /&gt;
 !width=200| GAII/IIx:  Boris, Natasha, etc 20-40m reads 1 to 8 lanes 24-72 nt/day max read length 80+80 in lane by lane&lt;br /&gt;
THE GA IS DEAD LONG LIVE THE GA Jack Daniels and Samuel Adams are DEAD LONG LIVE the HiSeq2000s Lucille and George are dead LONG LIVE NEXTSEQ 500s MiAmore is dead LONG LIVE THE MISEQ RUO PacBio is dead LONG LIVE THE SEQUEL II PromethION 24 is dead LONG LIVE THE P24 --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106885</id>
		<title>BioMicroCenter:Covaris</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106885"/>
		<updated>2025-11-14T17:01:03Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* R230 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
= SONICATORS =&lt;br /&gt;
{|&lt;br /&gt;
 |-style=vertical-align:top&lt;br /&gt;
 |style=width:49%|&lt;br /&gt;
== E220 Evolution ==&lt;br /&gt;
[[Image:E220.jpg‎|thumb|right|250px| Covaris E220 Evo]]&lt;br /&gt;
&lt;br /&gt;
The [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ Covaris E220 evolution sonicator] is a multitube system that processes single samples at a time.  The E220 evolution is capable of processing a wide range of sample types and volumes and may be programed to process from 1 to 96 samples in a single batch. The E220 is most appropriate &amp;lt; 5µg clean DNA in 130µl (microTUBE-130) or 20-120 mg tissue mass in 1.0 ml (milliTUBE-1). Using adaptive focused acoustic energy, the E220 utilizing a spherical acoustic transducer, and delivers controlled energy precisely and accurately to sample volumes from 25 μl to 10 ml. The most powerful Covaris instrument, the E220 can shear not only DNA and RNA, but also chromatin. Furthermore, it can homogenize tissue for cell lysis and drug delivery and formulation.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=DNA%20Shearing%20Protocols/ DNA] &lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=Chromatin%20Shearing%20Protocols/ Chromatin, FFPE] e&lt;br /&gt;
MANUAL: [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ E220 evolution]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[BioMicroCenter:Covaris_Maintenance| E220 Maintenance Instructions]]&lt;br /&gt;
|style=width:2%|&lt;br /&gt;
 &lt;br /&gt;
|style=width:49%|&lt;br /&gt;
&lt;br /&gt;
== R230 ==&lt;br /&gt;
[[IMAGE:R230pic.jpeg|thumb|right|250px| Covaris R230]]&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a high throughput sonicator fitted for 96 AFA-TUBE® TPX Plates. Both RNA and DNA have been sheared with similar programs to the ones found on the E220 Evolution at maximum input 5 µg 20-50 uL per well in the sonication by column mode. With this column sonication mode, an entire 96 well plate can be sonicated 10x faster in the R230 versus the E220. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a critical component in High-throughput libraries produced using ribosomal depletion methods.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
The Covaris R230 was funded by an NIH grant and R24OD035444 should be included in any publications using the instrument.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106884</id>
		<title>BioMicroCenter:Covaris</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106884"/>
		<updated>2025-11-14T17:00:38Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* R230 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
= SONICATORS =&lt;br /&gt;
{|&lt;br /&gt;
 |-style=vertical-align:top&lt;br /&gt;
 |style=width:49%|&lt;br /&gt;
== E220 Evolution ==&lt;br /&gt;
[[Image:E220.jpg‎|thumb|right|250px| Covaris E220 Evo]]&lt;br /&gt;
&lt;br /&gt;
The [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ Covaris E220 evolution sonicator] is a multitube system that processes single samples at a time.  The E220 evolution is capable of processing a wide range of sample types and volumes and may be programed to process from 1 to 96 samples in a single batch. The E220 is most appropriate &amp;lt; 5µg clean DNA in 130µl (microTUBE-130) or 20-120 mg tissue mass in 1.0 ml (milliTUBE-1). Using adaptive focused acoustic energy, the E220 utilizing a spherical acoustic transducer, and delivers controlled energy precisely and accurately to sample volumes from 25 μl to 10 ml. The most powerful Covaris instrument, the E220 can shear not only DNA and RNA, but also chromatin. Furthermore, it can homogenize tissue for cell lysis and drug delivery and formulation.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=DNA%20Shearing%20Protocols/ DNA] &lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=Chromatin%20Shearing%20Protocols/ Chromatin, FFPE] e&lt;br /&gt;
MANUAL: [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ E220 evolution]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[BioMicroCenter:Covaris_Maintenance| E220 Maintenance Instructions]]&lt;br /&gt;
|style=width:2%|&lt;br /&gt;
 &lt;br /&gt;
|style=width:49%|&lt;br /&gt;
&lt;br /&gt;
== R230 ==&lt;br /&gt;
[[IMAGE:R230pic.jpeg|thumb|right|250px| Covaris R230]]&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a high throughput sonicator fitted for 96 AFA-TUBE® TPX Plates. Both RNA and DNA have been sheared with similar programs to the ones found on the E220 Evolution at maximum input 5 µg 20-50 uL per well in the sonication by column mode. With this column sonication mode, an entire 96 well plate can be sonicated 10x faster in the R230 versus the E220. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a critical component in High-throughput libraries produced using ribosomal depletion methods.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 was funded by an NIH grant and R24OD035444 should be included in any publications using the instrument.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106883</id>
		<title>BioMicroCenter:Covaris</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106883"/>
		<updated>2025-11-14T16:56:57Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* R230 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
= SONICATORS =&lt;br /&gt;
{|&lt;br /&gt;
 |-style=vertical-align:top&lt;br /&gt;
 |style=width:49%|&lt;br /&gt;
== E220 Evolution ==&lt;br /&gt;
[[Image:E220.jpg‎|thumb|right|250px| Covaris E220 Evo]]&lt;br /&gt;
&lt;br /&gt;
The [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ Covaris E220 evolution sonicator] is a multitube system that processes single samples at a time.  The E220 evolution is capable of processing a wide range of sample types and volumes and may be programed to process from 1 to 96 samples in a single batch. The E220 is most appropriate &amp;lt; 5µg clean DNA in 130µl (microTUBE-130) or 20-120 mg tissue mass in 1.0 ml (milliTUBE-1). Using adaptive focused acoustic energy, the E220 utilizing a spherical acoustic transducer, and delivers controlled energy precisely and accurately to sample volumes from 25 μl to 10 ml. The most powerful Covaris instrument, the E220 can shear not only DNA and RNA, but also chromatin. Furthermore, it can homogenize tissue for cell lysis and drug delivery and formulation.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=DNA%20Shearing%20Protocols/ DNA] &lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=Chromatin%20Shearing%20Protocols/ Chromatin, FFPE] e&lt;br /&gt;
MANUAL: [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ E220 evolution]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[BioMicroCenter:Covaris_Maintenance| E220 Maintenance Instructions]]&lt;br /&gt;
|style=width:2%|&lt;br /&gt;
 &lt;br /&gt;
|style=width:49%|&lt;br /&gt;
&lt;br /&gt;
== R230 ==&lt;br /&gt;
[[IMAGE:R230pic.jpeg|right|250px| Covaris R230]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Covaris R230 is a high throughput sonicator fitted for 96 AFA-TUBE® TPX Plates. Both RNA and DNA have been sheared with similar programs to the ones found on the E220 Evolution at maximum input 5 µg 20-50 uL per well in the sonication by column mode. With this column sonication mode, an entire 96 well plate can be sonicated 10x faster in the R230 versus the E220. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a critical component in High-throughput libraries produced using ribosomal depletion methods.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 was funded by an NIH grant and R24OD035444 should be included in any publications using the instrument.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106882</id>
		<title>BioMicroCenter:Covaris</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106882"/>
		<updated>2025-11-14T16:55:32Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* E220 Evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
= SONICATORS =&lt;br /&gt;
{|&lt;br /&gt;
 |-style=vertical-align:top&lt;br /&gt;
 |style=width:49%|&lt;br /&gt;
== E220 Evolution ==&lt;br /&gt;
[[Image:E220.jpg‎|thumb|right|250px| Covaris E220 Evo]]&lt;br /&gt;
&lt;br /&gt;
The [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ Covaris E220 evolution sonicator] is a multitube system that processes single samples at a time.  The E220 evolution is capable of processing a wide range of sample types and volumes and may be programed to process from 1 to 96 samples in a single batch. The E220 is most appropriate &amp;lt; 5µg clean DNA in 130µl (microTUBE-130) or 20-120 mg tissue mass in 1.0 ml (milliTUBE-1). Using adaptive focused acoustic energy, the E220 utilizing a spherical acoustic transducer, and delivers controlled energy precisely and accurately to sample volumes from 25 μl to 10 ml. The most powerful Covaris instrument, the E220 can shear not only DNA and RNA, but also chromatin. Furthermore, it can homogenize tissue for cell lysis and drug delivery and formulation.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=DNA%20Shearing%20Protocols/ DNA] &lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=Chromatin%20Shearing%20Protocols/ Chromatin, FFPE] e&lt;br /&gt;
MANUAL: [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ E220 evolution]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[BioMicroCenter:Covaris_Maintenance| E220 Maintenance Instructions]]&lt;br /&gt;
|style=width:2%|&lt;br /&gt;
 &lt;br /&gt;
|style=width:49%|&lt;br /&gt;
&lt;br /&gt;
== R230 ==&lt;br /&gt;
[[IMAGE:R230pic.jpeg|right|250px| Covaris R230]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Covaris R230 is a high throughput sonicator fitted for 96 AFA-TUBE® TPX Plates. Both RNA and DNA have been sheared with similar programs to the ones found on the E220 Evolution at maximum input 5 ug 20-50 uL per well in the sonication by column mode. With this column sonication mode, an entire 96 well plate can be sonicated 10x faster in the R230 versus the E220. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a critical component in High-throughput libraries produced using ribosomal depletion methods.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 was funded by an NIH grant and R24OD035444 should be included in any publications using the instrument.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106881</id>
		<title>BioMicroCenter:Covaris</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106881"/>
		<updated>2025-11-14T16:54:28Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* E220 Evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
= SONICATORS =&lt;br /&gt;
{|&lt;br /&gt;
 |-style=vertical-align:top&lt;br /&gt;
 |style=width:49%|&lt;br /&gt;
== E220 Evolution ==&lt;br /&gt;
[[Image:E220.jpg‎|thumb|right|250px| Covaris E220 Evo]]&lt;br /&gt;
&lt;br /&gt;
The [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ Covaris E220 evolution sonicator] is a multitube system that processes single samples at a time.  The E220 evolution is capable of processing a wide range of sample types and volumes and may be programed to process from 1 to 96 samples in a single batch. The E220 is most appropriate &amp;lt; 5µg clean DNA in 130µl (microTUBE-130) or 20-120 mg tissue mass in 1.0 ml (milliTUBE-1). Using adaptive focused acoustic energy, the E220 utilizing a spherical acoustic transducer, and delivers controlled energy precisely and accurately to sample volumes from 25 μl to 10 ml. The E220 is the most powerful Covaris instrument allowing not only shearing of DNA and RNA, but it also chromatin. Furthermore, it can homogenize tissue for cell lysis and drug delivery and formulation.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=DNA%20Shearing%20Protocols/ DNA] &lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=Chromatin%20Shearing%20Protocols/ Chromatin, FFPE] e&lt;br /&gt;
MANUAL: [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ E220 evolution]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[BioMicroCenter:Covaris_Maintenance| E220 Maintenance Instructions]]&lt;br /&gt;
|style=width:2%|&lt;br /&gt;
 &lt;br /&gt;
|style=width:49%|&lt;br /&gt;
&lt;br /&gt;
== R230 ==&lt;br /&gt;
[[IMAGE:R230pic.jpeg|right|250px| Covaris R230]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Covaris R230 is a high throughput sonicator fitted for 96 AFA-TUBE® TPX Plates. Both RNA and DNA have been sheared with similar programs to the ones found on the E220 Evolution at maximum input 5 ug 20-50 uL per well in the sonication by column mode. With this column sonication mode, an entire 96 well plate can be sonicated 10x faster in the R230 versus the E220. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a critical component in High-throughput libraries produced using ribosomal depletion methods.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 was funded by an NIH grant and R24OD035444 should be included in any publications using the instrument.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Singular_Sequencing&amp;diff=106880</id>
		<title>BioMicroCenter:Singular Sequencing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Singular_Sequencing&amp;diff=106880"/>
		<updated>2025-11-14T16:46:04Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* INDEXING */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Singular Sequencing ==&lt;br /&gt;
The Center currently hosts a G4 platform by [https://singulargenomics.com/| Singular Genomics].  Singular’s G4 platform is a short-read mid-throughput sequencing platform delivering adequate sequencing data through its proprietary sequencing-by-synthesis chemistry at a significantly competitive price point.  &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
  !width=150| Service &lt;br /&gt;
  !width=300| Singular Sequencing&lt;br /&gt;
  |-&lt;br /&gt;
  |INPUT || Singular libraries &lt;br /&gt;
  |-&lt;br /&gt;
  |MIN VOLUME || 12 uL&lt;br /&gt;
  |-&lt;br /&gt;
  |MIN CONCENTRATION || 4 nM&lt;br /&gt;
  |-&lt;br /&gt;
  |INCLUDED SERVICES &lt;br /&gt;
  | &lt;br /&gt;
* Quality Control:Fragment Analyzer and qPCR&lt;br /&gt;
* Singular Sequencing &lt;br /&gt;
* Demultiplexing&lt;br /&gt;
  |-&lt;br /&gt;
  |ADDITIONAL SERVICES ||&lt;br /&gt;
* Quality Control&lt;br /&gt;
* Singular library preparation&lt;br /&gt;
  |-&lt;br /&gt;
  |DATA FORMATS &lt;br /&gt;
  |&lt;br /&gt;
*FASTQ (stored 1 year)&lt;br /&gt;
  |-&lt;br /&gt;
  |QUALITY CONTROL &lt;br /&gt;
  |&lt;br /&gt;
* [https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ FASTQC]&lt;br /&gt;
* Basic run metrics (alignment rate, complexity)&lt;br /&gt;
* Basic RNAseq metrics (where applicable)&lt;br /&gt;
* Basic paired end metrics (where applicable)&lt;br /&gt;
* Contamination checks&lt;br /&gt;
  |-&lt;br /&gt;
  |PRICING || [[BioMicroCenter:Pricing#SINGULAR_G4|LINK]]&lt;br /&gt;
  |-&lt;br /&gt;
  |SUBMISSION &lt;br /&gt;
  |&lt;br /&gt;
* MIT - [https://mit.ilabsolutions.com/service_item/new/3381?spt_id=3863 ilabs] &lt;br /&gt;
  |-&lt;br /&gt;
 |}&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== ANCHORS ===&lt;br /&gt;
Singular requires S1/S2 anchors in place of Illumina P5/P7 anchors. These can be replaced 1:1 in most oligo designs:&lt;br /&gt;
*s1:ACAAAGGCAGCCACGCACTCCTTCCCTGT&lt;br /&gt;
*s2:CTCCAGCGAGATGACCCTCACCAACCACT&lt;br /&gt;
&lt;br /&gt;
=== INDEXING ===&lt;br /&gt;
Singular indexes are read from the Anchor sequences in all cases and custom primers for indexes are not allowed. &amp;lt;BR&amp;gt;&lt;br /&gt;
Indexes are read from the S1 primer first (index1) followed by S2 (index2) &amp;lt;BR&amp;gt;&lt;br /&gt;
Index reads are the SAME SEQUENCE as ordered in most classical library preps. &amp;lt;BR&amp;gt;&lt;br /&gt;
Indexes are REQUIRED and should be 8 nucleotides in all lane by lane sequencing.&lt;br /&gt;
*Min custom primer submission: 20 µL at 100 µM&lt;br /&gt;
&lt;br /&gt;
===LANE BY LANE===&lt;br /&gt;
*Must be 50 or 150 paired-end dual indexed&lt;br /&gt;
*Pool must be compatible with TruSeq, Nextera, TruSeq, smRNA and Solexa sequencing primers&lt;br /&gt;
&lt;br /&gt;
=== MINIMUM READS ===&lt;br /&gt;
*the BMC has performed quality control.&lt;br /&gt;
* No custom primers.&lt;br /&gt;
*submitted libraries are at least 2 nM.&lt;br /&gt;
&lt;br /&gt;
All other requests, including use of custom sequencing primers require a full flowcell. Illumina libraries which have been converted in the Center will also require a full flowcell.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
== The G4 Platform ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=1 &lt;br /&gt;
 !width=100| SPEC&lt;br /&gt;
 !width=250| G4&lt;br /&gt;
 |-&lt;br /&gt;
 |&#039;&#039;&#039;SEQUENCER&#039;&#039;&#039;||[[Image:2023_Singular_G4.jpg|center|200px]]&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;READS/LANE&#039;&#039;&#039;&amp;lt;BR&amp;gt; Low number is minimum per lane for standard libraries||&lt;br /&gt;
* F3 per Lane: 50-100 M &lt;br /&gt;
 |-&lt;br /&gt;
|&#039;&#039;&#039;RUN TIME&#039;&#039;&#039;||&lt;br /&gt;
* 50 PE 11 hours&lt;br /&gt;
* 150 PE 24 hours&lt;br /&gt;
 |-&lt;br /&gt;
|&#039;&#039;&#039;KITS AVAILABLE&#039;&#039;&#039;||&lt;br /&gt;
* 100nt&lt;br /&gt;
* 300nt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;KEY NOTES&#039;&#039;&#039;||&lt;br /&gt;
* 4-color chemistry&lt;br /&gt;
* Patterned flow cell&lt;br /&gt;
* 4-lanes per flow cell&lt;br /&gt;
* 4-flow cells per run&lt;br /&gt;
* Anchor replacement or anchor expansion of Illumina libraries&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;THANKS TO&#039;&#039;&#039;||&lt;br /&gt;
* Singular Genomics&lt;br /&gt;
|}&lt;br /&gt;
| valign=&#039;top&#039; |&lt;br /&gt;
 {|&lt;br /&gt;
  ! INDEX HOPPING&lt;br /&gt;
  ! ACCURACY&lt;br /&gt;
  |-&lt;br /&gt;
  |&lt;br /&gt;
[[IMAGE:IndexhopF3.jpeg|left|250px|Index hopping for a standard set of Singular libraries]]&lt;br /&gt;
  |&lt;br /&gt;
[[IMAGE:PPPPF3.jpeg|right|200px|Percent Perfect Plot for Singular libraries 150PE]]&lt;br /&gt;
  |-&lt;br /&gt;
  | Index hopping on Singular runs is on par with GAIIx and HiSeq. High levels of index hopping as observed on Illumina X-AMP chemistry is not observed.&lt;br /&gt;
  | Percent perfect plot for phiX on current Singular chemistry ([https://pmc.ncbi.nlm.nih.gov/articles/pmid/27672352/ Manley et al., 2016])&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Singular_Sequencing&amp;diff=106879</id>
		<title>BioMicroCenter:Singular Sequencing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Singular_Sequencing&amp;diff=106879"/>
		<updated>2025-11-14T16:43:55Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Singular Sequencing ==&lt;br /&gt;
The Center currently hosts a G4 platform by [https://singulargenomics.com/| Singular Genomics].  Singular’s G4 platform is a short-read mid-throughput sequencing platform delivering adequate sequencing data through its proprietary sequencing-by-synthesis chemistry at a significantly competitive price point.  &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
  !width=150| Service &lt;br /&gt;
  !width=300| Singular Sequencing&lt;br /&gt;
  |-&lt;br /&gt;
  |INPUT || Singular libraries &lt;br /&gt;
  |-&lt;br /&gt;
  |MIN VOLUME || 12 uL&lt;br /&gt;
  |-&lt;br /&gt;
  |MIN CONCENTRATION || 4 nM&lt;br /&gt;
  |-&lt;br /&gt;
  |INCLUDED SERVICES &lt;br /&gt;
  | &lt;br /&gt;
* Quality Control:Fragment Analyzer and qPCR&lt;br /&gt;
* Singular Sequencing &lt;br /&gt;
* Demultiplexing&lt;br /&gt;
  |-&lt;br /&gt;
  |ADDITIONAL SERVICES ||&lt;br /&gt;
* Quality Control&lt;br /&gt;
* Singular library preparation&lt;br /&gt;
  |-&lt;br /&gt;
  |DATA FORMATS &lt;br /&gt;
  |&lt;br /&gt;
*FASTQ (stored 1 year)&lt;br /&gt;
  |-&lt;br /&gt;
  |QUALITY CONTROL &lt;br /&gt;
  |&lt;br /&gt;
* [https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ FASTQC]&lt;br /&gt;
* Basic run metrics (alignment rate, complexity)&lt;br /&gt;
* Basic RNAseq metrics (where applicable)&lt;br /&gt;
* Basic paired end metrics (where applicable)&lt;br /&gt;
* Contamination checks&lt;br /&gt;
  |-&lt;br /&gt;
  |PRICING || [[BioMicroCenter:Pricing#SINGULAR_G4|LINK]]&lt;br /&gt;
  |-&lt;br /&gt;
  |SUBMISSION &lt;br /&gt;
  |&lt;br /&gt;
* MIT - [https://mit.ilabsolutions.com/service_item/new/3381?spt_id=3863 ilabs] &lt;br /&gt;
  |-&lt;br /&gt;
 |}&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== ANCHORS ===&lt;br /&gt;
Singular requires S1/S2 anchors in place of Illumina P5/P7 anchors. These can be replaced 1:1 in most oligo designs:&lt;br /&gt;
*s1:ACAAAGGCAGCCACGCACTCCTTCCCTGT&lt;br /&gt;
*s2:CTCCAGCGAGATGACCCTCACCAACCACT&lt;br /&gt;
&lt;br /&gt;
=== INDEXING ===&lt;br /&gt;
Singular indexes are read from the Anchor sequences in all cases and custom primers for indexes are not allowed. &amp;lt;BR&amp;gt;&lt;br /&gt;
Indexes are read from the S1 primer first (index1) followed by S2 (index2) &amp;lt;BR&amp;gt;&lt;br /&gt;
Index reads are the SAME SEQUENCE as ordered in most classical library preps. &amp;lt;BR&amp;gt;&lt;br /&gt;
Indexes are REQUIRED and should be 8 nucleotides in all lane by lane sequencing.&lt;br /&gt;
*Min custom primer submission: 20 uL at 100 uM&lt;br /&gt;
&lt;br /&gt;
===LANE BY LANE===&lt;br /&gt;
*Must be 50 or 150 paired-end dual indexed&lt;br /&gt;
*Pool must be compatible with TruSeq, Nextera, TruSeq, smRNA and Solexa sequencing primers&lt;br /&gt;
&lt;br /&gt;
=== MINIMUM READS ===&lt;br /&gt;
*the BMC has performed quality control.&lt;br /&gt;
* No custom primers.&lt;br /&gt;
*submitted libraries are at least 2 nM.&lt;br /&gt;
&lt;br /&gt;
All other requests, including use of custom sequencing primers require a full flowcell. Illumina libraries which have been converted in the Center will also require a full flowcell.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
== The G4 Platform ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=1 &lt;br /&gt;
 !width=100| SPEC&lt;br /&gt;
 !width=250| G4&lt;br /&gt;
 |-&lt;br /&gt;
 |&#039;&#039;&#039;SEQUENCER&#039;&#039;&#039;||[[Image:2023_Singular_G4.jpg|center|200px]]&lt;br /&gt;
 |-&lt;br /&gt;
 | &#039;&#039;&#039;READS/LANE&#039;&#039;&#039;&amp;lt;BR&amp;gt; Low number is minimum per lane for standard libraries||&lt;br /&gt;
* F3 per Lane: 50-100 M &lt;br /&gt;
 |-&lt;br /&gt;
|&#039;&#039;&#039;RUN TIME&#039;&#039;&#039;||&lt;br /&gt;
* 50 PE 11 hours&lt;br /&gt;
* 150 PE 24 hours&lt;br /&gt;
 |-&lt;br /&gt;
|&#039;&#039;&#039;KITS AVAILABLE&#039;&#039;&#039;||&lt;br /&gt;
* 100nt&lt;br /&gt;
* 300nt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;KEY NOTES&#039;&#039;&#039;||&lt;br /&gt;
* 4-color chemistry&lt;br /&gt;
* Patterned flow cell&lt;br /&gt;
* 4-lanes per flow cell&lt;br /&gt;
* 4-flow cells per run&lt;br /&gt;
* Anchor replacement or anchor expansion of Illumina libraries&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;THANKS TO&#039;&#039;&#039;||&lt;br /&gt;
* Singular Genomics&lt;br /&gt;
|}&lt;br /&gt;
| valign=&#039;top&#039; |&lt;br /&gt;
 {|&lt;br /&gt;
  ! INDEX HOPPING&lt;br /&gt;
  ! ACCURACY&lt;br /&gt;
  |-&lt;br /&gt;
  |&lt;br /&gt;
[[IMAGE:IndexhopF3.jpeg|left|250px|Index hopping for a standard set of Singular libraries]]&lt;br /&gt;
  |&lt;br /&gt;
[[IMAGE:PPPPF3.jpeg|right|200px|Percent Perfect Plot for Singular libraries 150PE]]&lt;br /&gt;
  |-&lt;br /&gt;
  | Index hopping on Singular runs is on par with GAIIx and HiSeq. High levels of index hopping as observed on Illumina X-AMP chemistry is not observed.&lt;br /&gt;
  | Percent perfect plot for phiX on current Singular chemistry ([https://pmc.ncbi.nlm.nih.gov/articles/pmid/27672352/ Manley et al., 2016])&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106877</id>
		<title>BioMicroCenter:Covaris</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Covaris&amp;diff=106877"/>
		<updated>2025-11-14T16:05:19Z</updated>

		<summary type="html">&lt;p&gt;Gibcus: /* E220 Evolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&lt;br /&gt;
= SONICATORS =&lt;br /&gt;
{|&lt;br /&gt;
 |-style=vertical-align:top&lt;br /&gt;
 |style=width:49%|&lt;br /&gt;
== E220 Evolution ==&lt;br /&gt;
[[Image:E220.jpg‎|thumb|right|250px| Covaris E220 Evo]]&lt;br /&gt;
&lt;br /&gt;
The [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ Covaris E220 evolution sonicator] is a multitube system that processes single samples at a time.  The E220 evolution is capable of processing a wide range of sample types and volumes and may be programed to process from 1 to 96 samples in a single batch. The E220 is most appropriate &amp;lt;5ug clean DNA in 130ul (microTUBE-130) or 20-120 mg tissue mass in 1.0 ml (milliTUBE-1). Using adaptive focused acoustic energy, the E220 utilizing a spherical acoustic transducer, and delivers controlled energy precisely and accurately to sample volumes from 25 μl to 10 ml. The main applications are shearing of DNA, RNA, and chromatin but it can also perform tissue homogenization for cell lysis and drug delivery and formulation.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=DNA%20Shearing%20Protocols/ DNA] &lt;br /&gt;
PROTOCOLS FOR [https://www.covaris.com/protocols?filter_tag=Chromatin%20Shearing%20Protocols/ Chromatin, FFPE] e&lt;br /&gt;
MANUAL: [https://www.covaris.com/e220evolution-focused-ultrasonicator-500429/ E220 evolution]. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[BioMicroCenter:Covaris_Maintenance| E220 Maintenance Instructions]]&lt;br /&gt;
|style=width:2%|&lt;br /&gt;
 &lt;br /&gt;
|style=width:49%|&lt;br /&gt;
&lt;br /&gt;
== R230 ==&lt;br /&gt;
[[IMAGE:R230pic.jpeg|right|250px| Covaris R230]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Covaris R230 is a high throughput sonicator fitted for 96 AFA-TUBE® TPX Plates. Both RNA and DNA have been sheared with similar programs to the ones found on the E220 Evolution at maximum input 5 ug 20-50 uL per well in the sonication by column mode. With this column sonication mode, an entire 96 well plate can be sonicated 10x faster in the R230 versus the E220. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 is a critical component in High-throughput libraries produced using ribosomal depletion methods.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Covaris R230 was funded by an NIH grant and R24OD035444 should be included in any publications using the instrument.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gibcus</name></author>
	</entry>
</feed>