<?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=Asoberan</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=Asoberan"/>
	<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php/Special:Contributions/Asoberan"/>
	<updated>2026-09-18T13:02:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Pricing&amp;diff=131802</id>
		<title>BioMicroCenter:Pricing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Pricing&amp;diff=131802"/>
		<updated>2026-09-11T13:20:09Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Replace openwetware links with links to this wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&#039;&#039;&#039;PRICING UPDATE 7/4/2026&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are looking for MIT pricing, it is [[MIT:Pricing|here]]&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - MID OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://bmcwiki.mit.edu/index.php/BioMicroCenter:ShortRead#AVITI24 ELEMENT AVITI24] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ELEMENT AVITI SEQUENCING !! Lane/Flowcell !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 75 PE || Full flowcell (2 lane, 800m read) || $2,500 || $2,800 || per flowcell || rowspan=&amp;quot;5&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,250 || $1,400 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 150 PE || Full flowcell (2 lane, ~800m read) || $3,437.50 || $3,850 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,719 || $1,925 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| 300 PE || Full flowcell (~200m reads) || $4,375 || $4,900 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - LOW OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://bmcwiki.mit.edu/index.php/BioMicroCenter:ShortRead#G4 SINGULAR G4] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SINGULAR G4 SEQUENCING !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 50 PE: F3 Lane (~100m reads) || $375 || $420 || per lane || rowspan=&amp;quot;3&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| Rapid 300nt: F3 flowcell (~400m reads)* || $2,250 || $2,520 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| 150 PE: F3 Lane (~100m reads) || $562.50 || $630 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* Rapid flowcells are required for adapted Illumina libraries.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MISEQ SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Assisted ====&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $850 || $952 || rowspan=&amp;quot;9&amp;quot; | per flowcell || rowspan=&amp;quot;9&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,175 || $1,316&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $1,037.50 || $1,162&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,712.50 || $1,918&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $2,037.50 || $2,282&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1000nt&#039;&#039;&#039; || $2,687.50 || $3,010&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,687.50 || $1,890&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $2,325 || $2,604&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $2,325 || $2,604&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq classic ====&lt;br /&gt;
&lt;br /&gt;
* MiSeq is off contract and will be retired upon instrument failure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 70nt || 15M || $1,650 || $1,848 || rowspan=&amp;quot;6&amp;quot; | per lane || rowspan=&amp;quot;6&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 150nt || 25M || $1,787.50 || $2,002&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || 15M || $1,993.75 || $2,233&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 15M || $2,200 || $2,464&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 25M || $2,750 || $3,080&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 1M &amp;amp;nbsp;&#039;&#039;&#039;NANO&#039;&#039;&#039; || $962.50 || $1,078&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OTHER SHORT READ SERVICES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SHORT READ SUPPORTING SERVICES !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Quality Control Only -only one QC is included per sequencing lane. || $43.75 || $49 || per sample || Includes RT-PCR and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Quality Control - Use SYBR for sample quantification for pooling instead of qPCR. Only available for pooling. || $25 || $28 || per sample || Includes Fluorometric quantification and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (short read) || $25 || $28 || per sample || Includes qPCR values from standard QC only&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only - full plate(short read) || $312.50 || $350 || per plate || excludes column 1 (used for controls)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LONG READ SEQUENCING ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PROMETHION SEQUENCING !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 72 hour Flowcell || $1,500 || $1,680 || per Flowcell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LIBRARY GENERATION ==&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - DNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for sample batches. Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | LIGATION BASED NEB UltraII || STD || per sample || $137.50 || $154 || Includes QC, adapter ligation, size selection, barcoding, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 24 || style=&amp;quot;color:blue;&amp;quot; | $1,250 || style=&amp;quot;color:blue;&amp;quot; | $1,400 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes adapter ligation, size selection, barcoding, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | 96 || style=&amp;quot;color:blue;&amp;quot; | $2,500 || style=&amp;quot;color:blue;&amp;quot; | $2,800&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-XT || rowspan=&amp;quot;2&amp;quot; | STD || rowspan=&amp;quot;2&amp;quot; | per Sample || $156.25 || $175 || rowspan=&amp;quot;2&amp;quot; | Includes set-up, tagmentation, indexing, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-FLEX || $118.75 || $133&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | NEXTERA-XT OR FLEX || style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,500 || style=&amp;quot;color:blue;&amp;quot; | $1,680 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes tagmentation, indexing, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,000 || style=&amp;quot;color:blue;&amp;quot; | $3,360&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 16S Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,562.50 || style=&amp;quot;color:blue;&amp;quot; | $2,870 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $875 || style=&amp;quot;color:blue;&amp;quot; | $980&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Other Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,187.50 || style=&amp;quot;color:blue;&amp;quot; | $2,450 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA). &amp;amp;nbsp;&amp;amp;nbsp;Samples *must* be submitted amplified with appropriate linkers.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $787.50 || style=&amp;quot;color:blue;&amp;quot; | $945&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $75 || $84&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $6.25 || $7 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $12.50 || $14 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included. Mixing of multiple projects not recommended.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | polyA based isolation &amp;amp;nbsp;&amp;amp;nbsp;NEB UltraII RNAseq || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $187.50 || $210 || Includes QC, polyA isolation, generation of cDNA, library construction, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,875 || style=&amp;quot;color:blue;&amp;quot; | $2,100 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,750 || style=&amp;quot;color:blue;&amp;quot; | $4,200&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | High Throughput 3&#039; Digital Gene Expression (HT3DGE) || style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,312.50 || style=&amp;quot;color:blue;&amp;quot; | $1,470 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes generation of cDNA, library construction, indexing and library quality control. Does not include sample QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,625 || style=&amp;quot;color:blue;&amp;quot; | $2,940&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Total RNA sequencing &amp;amp;nbsp;&amp;amp;nbsp;NEB RNAseq +Ribodepletion || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $281.25 || $315 || Includes sample QC, ribosomal depletion, generation of cDNA, library construction, indexing and library quality control.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,812.50 || style=&amp;quot;color:blue;&amp;quot; | $3,150 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,625 || style=&amp;quot;color:blue;&amp;quot; | $6,300&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input polyA+ &amp;amp;nbsp;&amp;amp;nbsp;Clontech SMARTseq + NexteraXT or Flex || &#039;&#039;&#039;STD&#039;&#039;&#039; v4 || per sample || $412.50 || $462 || rowspan=&amp;quot;3&amp;quot; | Includes generation of cDNA, amplification, library construction, indexing and quality control (SYBR + FA). Single sample includes initial QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,537.50 || style=&amp;quot;color:blue;&amp;quot; | $2,842&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,075 || style=&amp;quot;color:blue;&amp;quot; | $5,684&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input Mammalian Total &amp;amp;nbsp;&amp;amp;nbsp;Clontech ZapR Kit || STD || per sample || $250 || $280 || Includes generation of cDNA, amplification, library construction, rRNA degradation, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,750 || style=&amp;quot;color:blue;&amp;quot; | $4,200 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $6,250 || style=&amp;quot;color:blue;&amp;quot; | $7,000&lt;br /&gt;
|-&lt;br /&gt;
| Small RNA || STD || per sample || $250 || $280 || Uses NEB, BIOO or QIAGEN small RNA kit&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $75 || $84&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $6.25 || $7 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $12.50 || $14 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== LONG READ LIBRARIES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Oxford Nanopore Sample Preparation !! Nanopore Kit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit&lt;br /&gt;
|-&lt;br /&gt;
| Standard Ligation || LSK || $339.33 || $380.05 || per sample/pool&lt;br /&gt;
|-&lt;br /&gt;
| Native Barcoding &amp;amp;nbsp;&amp;amp;nbsp;(ligation indexing) || - || $65 || $70 || rowspan=&amp;quot;5&amp;quot; | per sample&lt;br /&gt;
|-&lt;br /&gt;
| SMARTseq -&amp;gt; Ligation || Cv4+LSK || $375 || $420&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Prep (tagment - ~10-20kb) || RAD || $218.75 || $245&lt;br /&gt;
|-&lt;br /&gt;
| Long Insert Prep || RAD (modified, target &amp;gt;100kb) || $343.75 || $385&lt;br /&gt;
|-&lt;br /&gt;
| Direct RNA || RNA004 || $339.33 || $380.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SAMPLE EXTRACTION ==&lt;br /&gt;
&lt;br /&gt;
=== CHEMAGIC360 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! TYPE !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit &lt;br /&gt;
|-&lt;br /&gt;
| DNA || 96 || $925 || $1,036&lt;br /&gt;
|-&lt;br /&gt;
| RNA || 96 || $1,062.50 || $1,190&lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 12 samples || $375 || $420&lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 96 samples || $1,250 || $1,400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SINGLE CELL &amp;amp; SPATIAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== 10X CHROMIUM ===&lt;br /&gt;
&lt;br /&gt;
Please email biomicro@mit.edu two weeks prior to desired submission date so we will have reagents ready for you.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 10X USAGE !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Assisted Service&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;DIGITAL GENE EXPRESSION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA || setup || $1,268.75 || $1,421 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $2,188 || $2,450 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA - on chip multiplexing || setup || $1,437.50 || $1,610 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per 4 samples || $2,881 || $3,227 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fixed RNA (Flex v2) &amp;amp;nbsp;&amp;amp;nbsp;probe based. human/mouse only || setup || $3,375 || $3,780 || charge per submission - up to 48 samples&lt;br /&gt;
|-&lt;br /&gt;
| per sample (1-plex) || $337.50 || $378 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Amplicon (CITE-SEQ, TCR, BCR, antibody barcode, etc // per amplicon) || setup || $587.50 || $658 || additional prep beyond DGE&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $56 || $63 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;scATACseq&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ATACseq || setup || $1,100 || $1,232 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $2,094 || $2,345 || Includes QC and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Multiome (ATAC+3&#039;RNA)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | MULTI || setup || $2,250 || $2,520 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $3,875 || $4,340 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;CANCELLATION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| per session ||  || $250 || $280 || &amp;lt;24h notice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ARRAY BASED SPATIAL ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SLIDES !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Illumina StrataMap || 1 slide || $13,463 || $15,070 || Includes library prep and sequencing (25B)&lt;br /&gt;
|-&lt;br /&gt;
| VisiumHD: polyA or FFPE (hs/mm only) || 1 slide / 2 tiles || $9,813 || $10,940 || Includes library generation only.&lt;br /&gt;
|-&lt;br /&gt;
| QC - FFPE Scroll || per scroll || $81.25 || $91 || RNA isolation from FFPE scroll&lt;br /&gt;
|-&lt;br /&gt;
| QC - Fresh Frozen Scroll || per scroll || $56.25 || $63 || RNA isolation from FF scroll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AVITI24 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! AVITI24 SPATIAL !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Slide Only || rowspan=&amp;quot;5&amp;quot; | per slide || $188 || $210 || slide: 1, 12, or 48 well&lt;br /&gt;
|-&lt;br /&gt;
| Optimization Only || $1,000 || $1,120 || used when the run fails&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Teton Defined Panel] || $9,000 || $10,080 || scroll to predefined panels&lt;br /&gt;
|-&lt;br /&gt;
| Atlas Short || $6,875 || $7,700 || for CRISPR screens / short sequencing&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Antibody Add-on] || $450 || $504 || scroll to flexible protein customization&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OTHER GENOMICS SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== [[BioMicroCenter:QC|QUALITY CONTROL]] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! QUALITY CONTROL !! unit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: RNA or DNA || per sample || $18.75 || $21&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: Preloaded row || per row (12) || $100 || $112 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: RNA or DNA || per sample || $43.75 || $49&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: Preloaded Row || per row (12) || $218.75 || $245 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| BioAnalyzer: Walkup Service || per chip || $62.50 || $70&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (Short read quantification test) || per sample || $25 || $28 || 4 point serial dilution&lt;br /&gt;
|-&lt;br /&gt;
| Full plate qPCR (short read quantification test) || per plate || $312.50 || $350 || full plate only (exclude column 1 for standards) - must be to BMC specifications.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Sample QC services:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Fresh Frozen Curl || per curl || $56.25 || $63 ||&lt;br /&gt;
|-&lt;br /&gt;
| FFPE Curl || per curl || $81.25 || $91 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OLIGO SYNTHESIS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Platform !! Service !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | DNAscript Syntax || Setup (per run) || $1,250 || $1,400 || Per run cost&lt;br /&gt;
|-&lt;br /&gt;
| 2000 nucleotide synthesis || $625 || $700 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| 8000 nucleotide synthesis || $1,875 || $2,100 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| add Biotin (max48) || $144 || $161 || max 48 per run and 2 per oligo. Couple to T only.&lt;br /&gt;
|-&lt;br /&gt;
| add Fluor || $375 || $420 ||&lt;br /&gt;
|-&lt;br /&gt;
| add quench || $125 || $140 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== COMPUTATIONAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! COMPUTATIONAL SERVICES !! unit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External For-Profit]] !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Support || per hour || $180 || $205 || Very limited support for non-MIT users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Hilo1/common.css&amp;diff=131767</id>
		<title>User:Hilo1/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Hilo1/common.css&amp;diff=131767"/>
		<updated>2026-08-05T17:09:47Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th a { color: #fff !important; }&lt;br /&gt;
.wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable th a { color: #fff !important; }&lt;br /&gt;
.bmc-pricing .wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Toniappa/common.css&amp;diff=131766</id>
		<title>User:Toniappa/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Toniappa/common.css&amp;diff=131766"/>
		<updated>2026-08-05T17:09:38Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th a { color: #fff !important; }&lt;br /&gt;
.wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable th a { color: #fff !important; }&lt;br /&gt;
.bmc-pricing .wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Challee/common.css&amp;diff=131765</id>
		<title>User:Challee/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Challee/common.css&amp;diff=131765"/>
		<updated>2026-08-05T17:09:26Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th a { color: #fff !important; }&lt;br /&gt;
.wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable th a { color: #fff !important; }&lt;br /&gt;
.bmc-pricing .wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Cdemu/common.css&amp;diff=131764</id>
		<title>User:Cdemu/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Cdemu/common.css&amp;diff=131764"/>
		<updated>2026-08-05T17:09:04Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th a { color: #fff !important; }&lt;br /&gt;
.wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable th a { color: #fff !important; }&lt;br /&gt;
.bmc-pricing .wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Shebert/common.css&amp;diff=131763</id>
		<title>User:Shebert/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Shebert/common.css&amp;diff=131763"/>
		<updated>2026-08-05T17:08:40Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th a { color: #fff !important; }&lt;br /&gt;
.wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable th a { color: #fff !important; }&lt;br /&gt;
.bmc-pricing .wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131762</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131762"/>
		<updated>2026-08-05T17:07:10Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th a { color: #fff !important; }&lt;br /&gt;
.wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable th a { color: #fff !important; }&lt;br /&gt;
.bmc-pricing .wikitable th a:hover { color: #fff !important; text-decoration: underline !important; }&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Cdemu/common.js&amp;diff=131754</id>
		<title>User:Cdemu/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Cdemu/common.js&amp;diff=131754"/>
		<updated>2026-07-14T17:48:46Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/**  * BioMicro Center Wiki Wrapper — Full DOM Replacement  *  * Strategy:  * 1. Extract wiki article content from MediaWiki&amp;#039;s DOM  * 2. Inject the complete shell structure  * 3. Place article content inside the shell  * MediaWiki still runs underneath for editing, search, login, etc.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ── Extract nav from MediaWiki&amp;#039;s sidebar DOM ─────────────── */   function extractNavFromDom() {     var SKIP_I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Cdemu/common.css&amp;diff=131753</id>
		<title>User:Cdemu/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Cdemu/common.css&amp;diff=131753"/>
		<updated>2026-07-14T17:48:35Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/* ============================================================    BioMicro Center Wiki Wrapper — CSS-only    For: MediaWiki Vector (legacy) skin    ============================================================ */  /* ── Base &amp;amp; Reset ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; }  /* Universal sans-serif — covers every elem...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Hilo1/common.js&amp;diff=131752</id>
		<title>User:Hilo1/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Hilo1/common.js&amp;diff=131752"/>
		<updated>2026-07-14T14:33:23Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/**  * BioMicro Center Wiki Wrapper — Full DOM Replacement  *  * Strategy:  * 1. Extract wiki article content from MediaWiki&amp;#039;s DOM  * 2. Inject the complete shell structure  * 3. Place article content inside the shell  * MediaWiki still runs underneath for editing, search, login, etc.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ── Extract nav from MediaWiki&amp;#039;s sidebar DOM ─────────────── */   function extractNavFromDom() {     var SKIP_I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Hilo1/common.css&amp;diff=131751</id>
		<title>User:Hilo1/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Hilo1/common.css&amp;diff=131751"/>
		<updated>2026-07-14T14:33:13Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/* ============================================================    BioMicro Center Wiki Wrapper — CSS-only    For: MediaWiki Vector (legacy) skin    ============================================================ */  /* ── Base &amp;amp; Reset ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; }  /* Universal sans-serif — covers every elem...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Challee/common.css&amp;diff=131750</id>
		<title>User:Challee/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Challee/common.css&amp;diff=131750"/>
		<updated>2026-07-14T14:32:50Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/* ============================================================    BioMicro Center Wiki Wrapper — CSS-only    For: MediaWiki Vector (legacy) skin    ============================================================ */  /* ── Base &amp;amp; Reset ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; }  /* Universal sans-serif — covers every elem...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Challee/common.js&amp;diff=131749</id>
		<title>User:Challee/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Challee/common.js&amp;diff=131749"/>
		<updated>2026-07-14T14:32:40Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/**  * BioMicro Center Wiki Wrapper — Full DOM Replacement  *  * Strategy:  * 1. Extract wiki article content from MediaWiki&amp;#039;s DOM  * 2. Inject the complete shell structure  * 3. Place article content inside the shell  * MediaWiki still runs underneath for editing, search, login, etc.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ── Extract nav from MediaWiki&amp;#039;s sidebar DOM ─────────────── */   function extractNavFromDom() {     var SKIP_I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Toniappa/common.js&amp;diff=131748</id>
		<title>User:Toniappa/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Toniappa/common.js&amp;diff=131748"/>
		<updated>2026-07-14T14:31:44Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/**  * BioMicro Center Wiki Wrapper — Full DOM Replacement  *  * Strategy:  * 1. Extract wiki article content from MediaWiki&amp;#039;s DOM  * 2. Inject the complete shell structure  * 3. Place article content inside the shell  * MediaWiki still runs underneath for editing, search, login, etc.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ── Extract nav from MediaWiki&amp;#039;s sidebar DOM ─────────────── */   function extractNavFromDom() {     var SKIP_I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Toniappa/common.css&amp;diff=131747</id>
		<title>User:Toniappa/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Toniappa/common.css&amp;diff=131747"/>
		<updated>2026-07-14T14:31:31Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/* ============================================================    BioMicro Center Wiki Wrapper — CSS-only    For: MediaWiki Vector (legacy) skin    ============================================================ */  /* ── Base &amp;amp; Reset ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; }  /* Universal sans-serif — covers every elem...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Shebert/common.js&amp;diff=131746</id>
		<title>User:Shebert/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Shebert/common.js&amp;diff=131746"/>
		<updated>2026-07-14T14:01:41Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/**  * BioMicro Center Wiki Wrapper — Full DOM Replacement  *  * Strategy:  * 1. Extract wiki article content from MediaWiki&amp;#039;s DOM  * 2. Inject the complete shell structure  * 3. Place article content inside the shell  * MediaWiki still runs underneath for editing, search, login, etc.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ── Extract nav from MediaWiki&amp;#039;s sidebar DOM ─────────────── */   function extractNavFromDom() {     var SKIP_I...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Shebert/common.css&amp;diff=131745</id>
		<title>User:Shebert/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Shebert/common.css&amp;diff=131745"/>
		<updated>2026-07-14T14:01:15Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/* ============================================================    BioMicro Center Wiki Wrapper — CSS-only    For: MediaWiki Vector (legacy) skin    ============================================================ */  /* ── Base &amp;amp; Reset ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; }  /* Universal sans-serif — covers every elem...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131744</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131744"/>
		<updated>2026-07-13T18:54:33Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131743</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131743"/>
		<updated>2026-07-13T18:52:53Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131742</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131742"/>
		<updated>2026-07-13T18:50:51Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Bioinformatics/Informatics Services&amp;quot; spanning its own&lt;br /&gt;
   row further down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own&lt;br /&gt;
   colspan, so they align exactly with the columns beneath them.&lt;br /&gt;
&lt;br /&gt;
   Color is assigned by category (matched from the cell&#039;s own text in JS),&lt;br /&gt;
   not by column position, so each service type keeps its color no matter&lt;br /&gt;
   how the columns get reordered:&lt;br /&gt;
   - Walkup       → maroon (existing site brand color, unchanged)&lt;br /&gt;
   - Assisted     → slate blue&lt;br /&gt;
   - Bioinformatics → forest green&lt;br /&gt;
   - Anything else (fallback) → neutral gray */&lt;br /&gt;
.bmc-home-table .bmc-home-header-row td.bmc-home-header-cell {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted {&lt;br /&gt;
  background: #2c5f7c !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics {&lt;br /&gt;
  background: #3f6b4f !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big b,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics big strong {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-walkup a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-assisted a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-bioinformatics a:hover,&lt;br /&gt;
.bmc-home-table td.bmc-home-header-cell.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131741</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131741"/>
		<updated>2026-07-13T18:50:29Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( titleText ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = titleText;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics/Bioinformatics Services&amp;quot;) — style it&lt;br /&gt;
               as a colored bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get&lt;br /&gt;
               normal styling. Because this uses the table&#039;s own&lt;br /&gt;
               &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar aligns exactly with the columns&lt;br /&gt;
               below it — no guesswork.&lt;br /&gt;
&lt;br /&gt;
               Color is chosen by matching the cell&#039;s own label text rather&lt;br /&gt;
               than its position, so &amp;quot;Walkup&amp;quot; / &amp;quot;Assisted&amp;quot; / &amp;quot;Bioinformatics&amp;quot;&lt;br /&gt;
               each get their own distinct color regardless of column order.&lt;br /&gt;
               Any header text that doesn&#039;t match one of these falls back to&lt;br /&gt;
               the neutral wide style, so new/renamed categories don&#039;t break. */&lt;br /&gt;
        function headerColorClass( label ) {&lt;br /&gt;
          var t = label.toLowerCase();&lt;br /&gt;
          if ( t.indexOf( &#039;walkup&#039; ) !== -1 || t.indexOf( &#039;walk-up&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-walkup&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;bioinformatics&#039; ) !== -1 || t.indexOf( &#039;informatics&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-bioinformatics&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          if ( t.indexOf( &#039;assisted&#039; ) !== -1 ) {&lt;br /&gt;
            return &#039;bmc-home-header-assisted&#039;;&lt;br /&gt;
          }&lt;br /&gt;
          return &#039;bmc-home-header-wide&#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add( headerColorClass( td.textContent || &#039;&#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131736</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131736"/>
		<updated>2026-07-13T16:36:03Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link:not(:last-child) {&lt;br /&gt;
  border-right: 1px solid white;&lt;br /&gt;
  height: 22%;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link {&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  padding: 8px 16px !important;&lt;br /&gt;
  font-size: 0.75rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  margin: auto 0;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131735</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131735"/>
		<updated>2026-07-13T16:06:26Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 50dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131734</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131734"/>
		<updated>2026-07-13T16:03:36Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 4%; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; height: 100%; overflow-y: scroll; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131733</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131733"/>
		<updated>2026-07-13T15:58:51Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131732</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131732"/>
		<updated>2026-07-13T15:54:30Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 100dvh; height: calc(100vh - 100px); box-sizing: border-box; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131731</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131731"/>
		<updated>2026-07-13T15:52:42Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; max-height: 100dvh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131730</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131730"/>
		<updated>2026-07-13T15:50:15Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; height: 100vh; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131729</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131729"/>
		<updated>2026-07-13T15:25:54Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics Services&amp;quot;) — style it as a colored&lt;br /&gt;
               bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get normal styling.&lt;br /&gt;
               Because this uses the table&#039;s own &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar&lt;br /&gt;
               aligns exactly with the columns below it — no guesswork. */&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td, idx ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add(&lt;br /&gt;
                ( cells.length &amp;gt; 1 &amp;amp;&amp;amp; idx &amp;gt; 0 ) ? &#039;bmc-home-header-accent&#039; : &#039;bmc-home-header-wide&#039;&lt;br /&gt;
              );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131728</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131728"/>
		<updated>2026-07-13T15:23:45Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    //contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
    //  var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
    //  if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
    //    var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
    //    if ( container ) {&lt;br /&gt;
    //      container.style.display = &#039;none&#039;;&lt;br /&gt;
    //    } else {&lt;br /&gt;
    //      img.style.display = &#039;none&#039;;&lt;br /&gt;
    //    }&lt;br /&gt;
    //  }&lt;br /&gt;
    //} );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics Services&amp;quot;) — style it as a colored&lt;br /&gt;
               bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get normal styling.&lt;br /&gt;
               Because this uses the table&#039;s own &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar&lt;br /&gt;
               aligns exactly with the columns below it — no guesswork. */&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td, idx ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add(&lt;br /&gt;
                ( cells.length &amp;gt; 1 &amp;amp;&amp;amp; idx &amp;gt; 0 ) ? &#039;bmc-home-header-accent&#039; : &#039;bmc-home-header-wide&#039;&lt;br /&gt;
              );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131727</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131727"/>
		<updated>2026-07-13T15:22:38Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    document.getElementsByTagName(&amp;quot;title&amp;quot;)[0].textContent = newTitle + &amp;quot; - BioMicro Center&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved.&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } ); */&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics Services&amp;quot;) — style it as a colored&lt;br /&gt;
               bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get normal styling.&lt;br /&gt;
               Because this uses the table&#039;s own &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar&lt;br /&gt;
               aligns exactly with the columns below it — no guesswork. */&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td, idx ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add(&lt;br /&gt;
                ( cells.length &amp;gt; 1 &amp;amp;&amp;amp; idx &amp;gt; 0 ) ? &#039;bmc-home-header-accent&#039; : &#039;bmc-home-header-wide&#039;&lt;br /&gt;
              );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131726</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131726"/>
		<updated>2026-07-13T15:17:19Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( newTitle ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved.&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } ); */&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics Services&amp;quot;) — style it as a colored&lt;br /&gt;
               bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get normal styling.&lt;br /&gt;
               Because this uses the table&#039;s own &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar&lt;br /&gt;
               aligns exactly with the columns below it — no guesswork. */&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td, idx ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add(&lt;br /&gt;
                ( cells.length &amp;gt; 1 &amp;amp;&amp;amp; idx &amp;gt; 0 ) ? &#039;bmc-home-header-accent&#039; : &#039;bmc-home-header-wide&#039;&lt;br /&gt;
              );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131725</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131725"/>
		<updated>2026-07-13T15:04:41Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var newTitle = titleText.replace(/^BioMicroCenter:/, &amp;quot;&amp;quot;);&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( titleText ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = newTitle;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics Services&amp;quot;) — style it as a colored&lt;br /&gt;
               bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get normal styling.&lt;br /&gt;
               Because this uses the table&#039;s own &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar&lt;br /&gt;
               aligns exactly with the columns below it — no guesswork. */&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td, idx ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add(&lt;br /&gt;
                ( cells.length &amp;gt; 1 &amp;amp;&amp;amp; idx &amp;gt; 0 ) ? &#039;bmc-home-header-accent&#039; : &#039;bmc-home-header-wide&#039;&lt;br /&gt;
              );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131724</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131724"/>
		<updated>2026-07-07T16:49:29Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
   BioMicro Center Wiki Wrapper — CSS-only&lt;br /&gt;
   For: MediaWiki Vector (legacy) skin&lt;br /&gt;
   ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* ── Base &amp;amp; Reset ───────────────────────────────────────────── */&lt;br /&gt;
*, *::before, *::after { box-sizing: border-box; }&lt;br /&gt;
&lt;br /&gt;
/* Universal sans-serif — covers every element MW might leave in a serif/system font */&lt;br /&gt;
body.bmc-active, body.bmc-active * { font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important; }&lt;br /&gt;
body.bmc-active code, body.bmc-active pre, body.bmc-active kbd,&lt;br /&gt;
body.bmc-active tt, body.bmc-active samp { font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important; }&lt;br /&gt;
&lt;br /&gt;
body, html {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a { color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
a:hover { text-decoration: underline !important; color: #5c0010 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Contact topbar (CSS pseudo-element, decorative) ─────────── */&lt;br /&gt;
/* Shows contact info as a red strip above the header */&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  height: 32px !important;&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  top: 0 !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 200 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base::after {&lt;br /&gt;
  content: &amp;quot;biomicro@mit.edu  ·  617-715-4533  ·  Building 68-322&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  color: rgba(255,255,255,0.9);&lt;br /&gt;
  font-size: 0.72rem;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  padding: 7px 28px;&lt;br /&gt;
  letter-spacing: 0.02em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Header (#mw-head) ──────────────────────────────────────── */&lt;br /&gt;
#mw-head {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07) !important;&lt;br /&gt;
  height: 60px !important;&lt;br /&gt;
  top: 32px !important; /* sit below the red topbar */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  right: 0 !important;&lt;br /&gt;
  z-index: 150 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
  height: 92px !important; /* 32px topbar + 60px header */&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page tabs (Read / Edit / History) */&lt;br /&gt;
#left-navigation {&lt;br /&gt;
  margin-left: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li a,&lt;br /&gt;
#right-navigation li a {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 6px 12px !important;&lt;br /&gt;
  transition: background 0.15s, color 0.15s !important;&lt;br /&gt;
}&lt;br /&gt;
#left-navigation li.selected a,&lt;br /&gt;
#left-navigation li a:hover,&lt;br /&gt;
#right-navigation li a:hover {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box in header */&lt;br /&gt;
#p-search {&lt;br /&gt;
  margin-top: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput {&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  outline: none !important;&lt;br /&gt;
  transition: border-color 0.15s !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus { border-color: #750014 !important; }&lt;br /&gt;
#searchButton, #mw-searchButton {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-size: 0.83rem !important;&lt;br /&gt;
  padding: 5px 10px !important;&lt;br /&gt;
  cursor: pointer !important;&lt;br /&gt;
  margin-left: 4px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Personal tools (login/logout) */&lt;br /&gt;
#p-personal li a {&lt;br /&gt;
  font-size: 0.8rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li a:hover { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Logo &amp;amp; Sidebar container (#mw-navigation) ──────────────── */&lt;br /&gt;
#mw-navigation {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border-right: 1px solid #e8e8e8 !important;&lt;br /&gt;
  top: 92px !important; /* below topbar + header */&lt;br /&gt;
  position: fixed !important;&lt;br /&gt;
  left: 0 !important;&lt;br /&gt;
  bottom: 0 !important;&lt;br /&gt;
  width: 180px !important;&lt;br /&gt;
  overflow-y: auto !important;&lt;br /&gt;
  z-index: 100 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Logo area */&lt;br /&gt;
#p-logo {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 20px 16px 16px !important;&lt;br /&gt;
  border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the actual logo image; replace with CSS text badge */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
  background-image: none !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  gap: 10px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::before {&lt;br /&gt;
  content: &amp;quot;BMC&amp;quot;;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  flex-shrink: 0;&lt;br /&gt;
  width: 38px;&lt;br /&gt;
  height: 38px;&lt;br /&gt;
  background: #750014;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 0.9rem;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  letter-spacing: -0.5px;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a::after {&lt;br /&gt;
  content: &amp;quot;MIT BioMicro Center&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.82rem;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  letter-spacing: -0.1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Sidebar navigation portlets (#mw-panel) ─────────────────── */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
  position: static !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  padding: 12px 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portlet,&lt;br /&gt;
.mw-portlet {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 0 8px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet headings */&lt;br /&gt;
.portlet h3,&lt;br /&gt;
.mw-portlet-heading,&lt;br /&gt;
div.portlet h3 {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.68rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  padding: 10px 16px 4px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Portlet links */&lt;br /&gt;
.portlet li,&lt;br /&gt;
.mw-portlet-body li {&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a,&lt;br /&gt;
.mw-portlet-body li a {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  padding: 5px 16px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  margin: 0 6px !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.portlet li a:hover,&lt;br /&gt;
.mw-portlet-body li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Main content area (#content) ───────────────────────────── */&lt;br /&gt;
#content,&lt;br /&gt;
#mw-content-wrapper {&lt;br /&gt;
  margin-left: 180px !important; /* match sidebar width */&lt;br /&gt;
  margin-top: 92px !important;   /* topbar 32 + header 60 */&lt;br /&gt;
  margin-right: 0 !important;&lt;br /&gt;
  margin-bottom: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  min-height: calc(100vh - 92px) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide MediaWiki &amp;quot;From bmcwiki...&amp;quot; subtitle */&lt;br /&gt;
#siteSub,&lt;br /&gt;
#contentSub { display: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Page Hero: style #firstHeading as the about.html hero ───── */&lt;br /&gt;
#firstHeading,&lt;br /&gt;
.mw-first-heading {&lt;br /&gt;
  background: linear-gradient(135deg, #750014 0%, #5c0010 100%) !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 1.9rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  letter-spacing: -0.5px !important;&lt;br /&gt;
  padding: 36px 40px 32px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Breadcrumb &amp;quot;Home ›&amp;quot; before the title */&lt;br /&gt;
#firstHeading::before {&lt;br /&gt;
  content: &amp;quot;Home  ›&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 0.78rem;&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  color: rgba(255,255,255,0.75);&lt;br /&gt;
  margin-bottom: 8px;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Body content area ──────────────────────────────────────── */&lt;br /&gt;
#bodyContent {&lt;br /&gt;
  padding: 36px 40px 60px !important;&lt;br /&gt;
  max-width: 860px !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Typography ─────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
  font-size: 0.9rem !important;&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h2 {&lt;br /&gt;
  font-size: 1.35rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid #750014 !important;&lt;br /&gt;
  border-left: none !important;&lt;br /&gt;
  border-top: none !important;&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  border-radius: 0 !important;&lt;br /&gt;
  margin: 40px 0 16px !important;&lt;br /&gt;
  letter-spacing: -0.2px !important;&lt;br /&gt;
  scroll-margin-top: 100px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h3 {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 24px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output h4 {&lt;br /&gt;
  font-size: 0.88rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  margin: 16px 0 6px !important;&lt;br /&gt;
  letter-spacing: -0.1px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output p {&lt;br /&gt;
  margin-bottom: 14px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-parser-output ul,&lt;br /&gt;
.mw-parser-output ol {&lt;br /&gt;
  margin: 0 0 14px 22px !important;&lt;br /&gt;
  color: #333 !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output li { margin-bottom: 4px !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── TOC (Table of Contents) ────────────────────────────────── */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
  background: #f9f9f9 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  display: inline-block !important;&lt;br /&gt;
  min-width: 200px !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 0 28px !important;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2,&lt;br /&gt;
#toc .toctitle h2 {&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  text-transform: uppercase !important;&lt;br /&gt;
  letter-spacing: 0.08em !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul, .toc ul {&lt;br /&gt;
  list-style: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li, .toc ul li { margin: 0 0 2px !important; }&lt;br /&gt;
#toc ul li a, .toc ul li a {&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 3px 8px !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
  transition: background 0.12s, color 0.12s !important;&lt;br /&gt;
}&lt;br /&gt;
#toc ul li a:hover, .toc ul li a:hover {&lt;br /&gt;
  background: #f0e8ea !important;&lt;br /&gt;
  color: #750014 !important;&lt;br /&gt;
  text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Sub-items */&lt;br /&gt;
#toc ul ul li a, .toc ul ul li a {&lt;br /&gt;
  padding-left: 18px !important;&lt;br /&gt;
  font-size: 0.78rem !important;&lt;br /&gt;
  color: #666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Edit section links ──────────────────────────────────────── */&lt;br /&gt;
.mw-editsection { display: inline !important; }&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
  font-size: 0.72rem !important;&lt;br /&gt;
  color: #999 !important;&lt;br /&gt;
  margin-left: 8px !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover { color: #750014 !important; }&lt;br /&gt;
.mw-editsection-bracket { color: #ddd !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Tables ─────────────────────────────────────────────────── */&lt;br /&gt;
/* Scoped to .wikitable only — layout tables (no class) handled separately below */&lt;br /&gt;
&lt;br /&gt;
.wikitable {&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Helvetica, Arial, sans-serif !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  border-spacing: 0 !important;  &lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  padding: 13px 18px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td {&lt;br /&gt;
  padding: 12px 18px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator — excluded from rowspan cells so lines don&#039;t cut through them */&lt;br /&gt;
.wikitable td:not([rowspan]) {&lt;br /&gt;
  border-bottom: 1px solid #e0e0e0 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Row separator */&lt;br /&gt;
.wikitable tr:last-child td { border-bottom: none !important; }&lt;br /&gt;
/* Section-description rows (colspan td used as sub-headers in Pricing tables) */&lt;br /&gt;
.wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Links inside table cells */&lt;br /&gt;
.wikitable td a { color: #750014 !important; }&lt;br /&gt;
.wikitable td a:hover { color: #750014 !important; text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Images inside table cells */&lt;br /&gt;
.wikitable td img {&lt;br /&gt;
  max-width: 160px !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin: 6px 0 8px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Paragraphs inside table cells */&lt;br /&gt;
.wikitable td p {&lt;br /&gt;
  margin: 0 0 6px !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
.wikitable td p:last-child { margin-bottom: 0 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Code ───────────────────────────────────────────────────── */&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output pre,&lt;br /&gt;
.mw-parser-output tt {&lt;br /&gt;
  font-family: &amp;quot;SFMono-Regular&amp;quot;, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, monospace !important;&lt;br /&gt;
  background: #f4f4f4 !important;&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 4px !important;&lt;br /&gt;
  font-size: 0.85rem !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output code,&lt;br /&gt;
.mw-parser-output tt { padding: 1px 5px !important; }&lt;br /&gt;
.mw-parser-output pre { padding: 12px 16px !important; overflow-x: auto !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Component classes (wiki editors add these to markup) ────── */&lt;br /&gt;
&lt;br /&gt;
.service-grid {&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  margin: 20px 0 28px;&lt;br /&gt;
}&lt;br /&gt;
.service-card {&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  border: 1px solid #e8e8e8;&lt;br /&gt;
  border-radius: 8px;&lt;br /&gt;
  padding: 20px 22px;&lt;br /&gt;
  transition: border-color 0.15s, box-shadow 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.service-card:hover { border-color: #c8a0a8; box-shadow: 0 2px 10px rgba(117,0,20,0.07); }&lt;br /&gt;
.service-card h4 { font-size: 0.88rem !important; font-weight: 700 !important; color: #1a1a1a !important; margin-bottom: 6px !important; }&lt;br /&gt;
.service-card p { font-size: 0.82rem !important; color: #555 !important; margin: 0 !important; line-height: 1.5 !important; }&lt;br /&gt;
&lt;br /&gt;
.staff-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }&lt;br /&gt;
.staff-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.staff-card .staff-name { font-size: 0.88rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.staff-card .staff-role { font-size: 0.78rem; color: #666; margin-top: 3px; line-height: 1.4; display: block; }&lt;br /&gt;
.staff-card.director { grid-column: 1 / -1; background: #fdf5f6; border-color: #d4a0a8; display: flex; align-items: center; gap: 18px; }&lt;br /&gt;
.director-badge { width: 44px; height: 44px; background: #750014; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-size: 1rem; flex-shrink: 0; }&lt;br /&gt;
.staff-card.director .staff-name { font-size: 1rem !important; }&lt;br /&gt;
.staff-card.director .staff-role { font-size: 0.82rem !important; color: #444 !important; font-weight: 500; }&lt;br /&gt;
&lt;br /&gt;
.pub-list { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.pub-list li { padding: 14px 0 !important; border-bottom: 1px solid #f0f0f0 !important; font-size: 0.85rem !important; }&lt;br /&gt;
.pub-list li:last-child { border-bottom: none !important; }&lt;br /&gt;
.pub-list .pub-lab { font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.pub-list .pub-desc { color: #444; margin-top: 3px; line-height: 1.5; display: block; }&lt;br /&gt;
.pub-list .pub-cite { display: inline-block; margin-top: 5px; font-size: 0.75rem; background: #f0f0f0; color: #555; padding: 2px 8px; border-radius: 10px; }&lt;br /&gt;
&lt;br /&gt;
.affil-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 24px; }&lt;br /&gt;
.affil-card { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 16px 18px; }&lt;br /&gt;
.affil-card .affil-name { font-size: 0.85rem; font-weight: 700; color: #1a1a1a; display: block; }&lt;br /&gt;
.affil-card .affil-rep { font-size: 0.78rem; color: #666; margin-top: 4px; display: block; }&lt;br /&gt;
&lt;br /&gt;
.note { background: #fdf6f0; border-left: 3px solid #e07b39; padding: 10px 14px; border-radius: 0 6px 6px 0; font-size: 0.82rem; color: #555; margin: 12px 0 18px; }&lt;br /&gt;
.note strong { color: #1a1a1a; }&lt;br /&gt;
.note.note-info { background: #f0f6ff; border-left-color: #3b7dd8; }&lt;br /&gt;
&lt;br /&gt;
.contact-block { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 22px 24px; display: flex; gap: 40px; flex-wrap: wrap; font-size: 0.85rem; }&lt;br /&gt;
.contact-item { display: flex; flex-direction: column; gap: 3px; }&lt;br /&gt;
.contact-item .label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em; color: #999; }&lt;br /&gt;
.contact-item .value { color: #1a1a1a; font-weight: 500; }&lt;br /&gt;
.contact-item a { color: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Footer ─────────────────────────────────────────────────── */&lt;br /&gt;
#footer {&lt;br /&gt;
  background: #1a1a1a !important;&lt;br /&gt;
  color: #aaa !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  gap: 32px !important;&lt;br /&gt;
  padding: 40px 24px 0 !important;&lt;br /&gt;
  margin-top: 48px !important;&lt;br /&gt;
  border-top: 3px solid #750014 !important;&lt;br /&gt;
}&lt;br /&gt;
#footer .bmc-footer-col { flex: 1 1 0; min-width: 0; }&lt;br /&gt;
#footer h4 { font-size: 0.75rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #fff !important; margin: 0 0 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
#footer ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
#footer ul li { margin-bottom: 6px !important; padding: 0 !important; }&lt;br /&gt;
#footer a { color: #aaa !important; text-decoration: none !important; }&lt;br /&gt;
#footer a:hover { color: #fff !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Responsive ─────────────────────────────────────────────── */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  #mw-navigation {&lt;br /&gt;
    position: static !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    border-right: none !important;&lt;br /&gt;
    border-bottom: 1px solid #e8e8e8 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #content, #mw-content-wrapper {&lt;br /&gt;
    margin-left: 0 !important;&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
  }&lt;br /&gt;
  #footer { margin-left: 0 !important; }&lt;br /&gt;
  .service-grid, .staff-grid, .affil-grid { grid-template-columns: 1fr !important; }&lt;br /&gt;
  .contact-block { flex-direction: column !important; gap: 16px !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Hide original MW chrome once the BMC wrapper is injected ── */&lt;br /&gt;
/* common.js adds .bmc-active to &amp;lt;body&amp;gt; after injecting #bmc-wrapper,&lt;br /&gt;
   so this only fires on view pages, leaving edit/special pages intact.&lt;br /&gt;
   The child selector hides ALL original MW elements regardless of skin&lt;br /&gt;
   version (Vector legacy, Vector 2022, etc.) without needing to list&lt;br /&gt;
   every possible ID.                                                    */&lt;br /&gt;
body.bmc-active &amp;gt; *:not(#bmc-wrapper):not(script):not(style) {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── BMC Shell (injected by common.js) ─────────────────────── */&lt;br /&gt;
&lt;br /&gt;
#bmc-wrapper {&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif;&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Topbar */&lt;br /&gt;
.bmc-topbar { background: #750014; color: rgba(255,255,255,0.9); font-size: 0.75rem; padding: 6px 0; text-align: right; }&lt;br /&gt;
.bmc-topbar .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-topbar a { color: rgba(255,255,255,0.85) !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar a:hover { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-topbar span { margin: 0 6px; opacity: 0.5; }&lt;br /&gt;
&lt;br /&gt;
/* Header */&lt;br /&gt;
.bmc-header { background: #fff; border-bottom: 1px solid #e0e0e0; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 4px rgba(0,0,0,0.07); }&lt;br /&gt;
.bmc-header-inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; height: 68px; }&lt;br /&gt;
.bmc-header-right { display: flex; align-items: center; gap: 16px; }&lt;br /&gt;
&lt;br /&gt;
/* Logo */&lt;br /&gt;
.bmc-logo { display: flex !important; align-items: center !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-logo-img { height: 56px !important; width: auto !important; display: block !important; }&lt;br /&gt;
&lt;br /&gt;
/* Nav */&lt;br /&gt;
.bmc-nav { display: flex; align-items: center; }&lt;br /&gt;
.bmc-nav &amp;gt; ul { list-style: none !important; display: flex !important; gap: 2px; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li { position: relative; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a { display: block !important; padding: 8px 14px !important; font-size: 0.85rem !important; font-weight: 500 !important; color: #333 !important; border-radius: 4px !important; white-space: nowrap; transition: background 0.15s, color 0.15s; text-decoration: none !important; background: transparent !important; border: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li &amp;gt; a:hover { background: #f5f5f5 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a { background: transparent !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-nav &amp;gt; ul &amp;gt; li.bmc-active &amp;gt; a:hover { background: #f5f5f5 !important; }&lt;br /&gt;
&lt;br /&gt;
/* Dropdown */&lt;br /&gt;
.bmc-dropdown { position: relative; }&lt;br /&gt;
.bmc-dropdown &amp;gt; a::after { content: &#039; ▾&#039;; font-size: 0.65rem; opacity: 0.6; }&lt;br /&gt;
.bmc-dropdown-menu { display: none; position: absolute; top: calc(100% + 4px); left: 0; background: #fff; border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 6px 20px rgba(0,0,0,0.10); min-width: 200px; padding: 6px 0; z-index: 200; }&lt;br /&gt;
.bmc-dropdown-menu::before { content: &#039;&#039;; position: absolute; top: -8px; left: 0; right: 0; height: 8px; background: transparent; }&lt;br /&gt;
.bmc-dropdown:hover .bmc-dropdown-menu { display: block; }&lt;br /&gt;
.bmc-dropdown-menu a { display: block !important; padding: 8px 18px !important; font-size: 0.83rem !important; color: #333 !important; white-space: nowrap; text-decoration: none !important; background: transparent !important; transition: background 0.12s; }&lt;br /&gt;
.bmc-dropdown-menu a:hover { background: #faf0f0 !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-divider { border-top: 1px solid #eee; margin: 4px 0; }&lt;br /&gt;
.bmc-group-label { padding: 6px 18px 2px; font-size: 0.7rem; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.05em; }&lt;br /&gt;
&lt;br /&gt;
/* Logged-in username display */&lt;br /&gt;
.bmc-user-info {&lt;br /&gt;
  font-size: 0.8rem;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  border-left: 1px solid #e0e0e0;&lt;br /&gt;
  margin-left: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search form */&lt;br /&gt;
.bmc-search-form { display: flex; align-items: center; gap: 4px; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 5px 10px; font-size: 0.83rem; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; color: #333; width: 180px; outline: none; background: #fff; }&lt;br /&gt;
.bmc-search-form input[type=&amp;quot;search&amp;quot;]:focus { border-color: #750014; }&lt;br /&gt;
.bmc-search-form button { background: #750014; border: none; border-radius: 4px; color: #fff; font-size: 0.85rem; padding: 5px 10px; cursor: pointer; }&lt;br /&gt;
.bmc-search-form button:hover { background: #5c0010; }&lt;br /&gt;
&lt;br /&gt;
/* Page hero */&lt;br /&gt;
.bmc-page-hero { background: linear-gradient(135deg, #750014 0%, #5c0010 100%); color: #fff; padding: 40px 0 36px; }&lt;br /&gt;
.bmc-home .bmc-page-hero { padding: 14px 0; }&lt;br /&gt;
.bmc-page-hero .inner { max-width: 1140px; margin: 0 auto; padding: 0 24px; }&lt;br /&gt;
.bmc-breadcrumb { font-size: 0.78rem; margin-bottom: 10px; opacity: 0.75; }&lt;br /&gt;
.bmc-breadcrumb a { color: #fff !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-breadcrumb .sep { margin: 0 6px; }&lt;br /&gt;
.bmc-page-hero h1 { font-size: 2rem !important; font-weight: 700 !important; letter-spacing: -0.5px !important; color: #fff !important; margin: 0 !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-hero-links {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-wrap: nowrap !important;&lt;br /&gt;
  gap: 6px !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  overflow-x: auto !important;&lt;br /&gt;
  scrollbar-width: thin !important;&lt;br /&gt;
  scrollbar-color: rgba(255,255,255,0.35) transparent !important;&lt;br /&gt;
  padding-bottom: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar { height: 4px !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-track { background: transparent !important; }&lt;br /&gt;
.bmc-hero-links::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.35) !important; border-radius: 2px !important; }&lt;br /&gt;
.bmc-hero-link { color: #fff !important; background: rgba(255,255,255,0.15) !important; border: 1px solid rgba(255,255,255,0.38) !important; border-radius: 16px !important; padding: 5px 12px !important; font-size: 0.72rem !important; font-weight: 500 !important; text-decoration: none !important; transition: background 0.18s ease, border-color 0.18s ease !important; white-space: nowrap !important; flex: 0 0 auto !important; }&lt;br /&gt;
.bmc-hero-link:hover { background: rgba(255,255,255,0.28) !important; border-color: rgba(255,255,255,0.65) !important; text-decoration: none !important; }&lt;br /&gt;
&lt;br /&gt;
/* Page layout */&lt;br /&gt;
.bmc-page-layout { max-width: 1140px; margin: 0 auto; padding: 40px 24px 80px; display: grid; grid-template-columns: 220px 1fr; gap: 40px; }&lt;br /&gt;
.bmc-home .bmc-page-layout { padding-top: 20px !important; }&lt;br /&gt;
&lt;br /&gt;
/* Sidebar */&lt;br /&gt;
.bmc-sidebar { position: sticky; top: 84px; align-self: start; }&lt;br /&gt;
.bmc-toc { background: #f9f9f9; border: 1px solid #e8e8e8; border-radius: 8px; padding: 20px; }&lt;br /&gt;
.bmc-toc h3 { font-size: 0.78rem !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.08em !important; color: #999 !important; margin-bottom: 12px !important; border: none !important; background: none !important; padding: 0 !important; box-shadow: none !important; }&lt;br /&gt;
.bmc-toc ul { list-style: none !important; margin: 0 !important; padding: 0 !important; }&lt;br /&gt;
.bmc-toc ul li { margin-bottom: 2px !important; }&lt;br /&gt;
.bmc-toc ul li a { font-size: 0.82rem !important; color: #444 !important; padding: 4px 8px !important; display: block !important; border-radius: 4px !important; text-decoration: none !important; transition: background 0.12s, color 0.12s; }&lt;br /&gt;
.bmc-toc ul li a:hover { background: #f0e8ea !important; color: #750014 !important; text-decoration: none !important; }&lt;br /&gt;
.bmc-toc ul li.bmc-sub a { padding-left: 20px !important; color: #666 !important; font-size: 0.78rem !important; }&lt;br /&gt;
&lt;br /&gt;
/* Content */&lt;br /&gt;
.bmc-content { min-width: 0; font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif; font-size: 0.9rem; line-height: 1.6; color: #333; }&lt;br /&gt;
.bmc-content h2 { font-size: 1.35rem !important; font-weight: 700 !important; color: #1a1a1a !important; padding-bottom: 10px !important; border-bottom: 2px solid #750014 !important; border-left: none !important; border-top: none !important; border-right: none !important; background: none !important; box-shadow: none !important; border-radius: 0 !important; margin: 48px 0 18px !important; letter-spacing: -0.2px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content h2:first-child { margin-top: 0 !important; }&lt;br /&gt;
.bmc-content h3 { font-size: 1rem !important; font-weight: 600 !important; color: #1a1a1a !important; margin: 28px 0 10px !important; scroll-margin-top: 88px !important; }&lt;br /&gt;
.bmc-content p { margin-bottom: 14px; font-size: 0.9rem; color: #333; }&lt;br /&gt;
.bmc-content p:last-child { margin-bottom: 0; }&lt;br /&gt;
.bmc-content ul, .bmc-content ol { margin: 0 0 14px 22px; color: #333; }&lt;br /&gt;
.bmc-content li { margin-bottom: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* Edit bar — shown to logged-in users at top of content area */&lt;br /&gt;
.bmc-edit-bar { display: flex !important; gap: 12px !important; align-items: center !important; }&lt;br /&gt;
.bmc-edit-bar a { font-size: 0.78rem !important; color: #750014 !important; text-decoration: none !important; font-weight: 500 !important; }&lt;br /&gt;
.bmc-edit-bar a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* Responsive (bmc shell) */&lt;br /&gt;
@media (max-width: 860px) {&lt;br /&gt;
  .bmc-page-layout { grid-template-columns: 1fr; }&lt;br /&gt;
  .bmc-sidebar { position: static; }&lt;br /&gt;
  #footer { flex-wrap: wrap; }&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 45%; }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 580px) {&lt;br /&gt;
  #footer .bmc-footer-col { flex: 1 1 100%; }&lt;br /&gt;
  .bmc-nav &amp;gt; ul { display: none !important; }&lt;br /&gt;
  .bmc-page-hero h1 { font-size: 1.5rem !important; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Content overrides: clean up main-page legacy styling ─── */&lt;br /&gt;
&lt;br /&gt;
/* Hide the BMC header/logo sticker images (JS handles this by src; CSS is a fallback) */&lt;br /&gt;
img[src*=&amp;quot;BMC_Header&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;bmc_logo_square&amp;quot;],&lt;br /&gt;
img[src*=&amp;quot;Bmc_logo&amp;quot;] {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keep header background even if inline style is present */&lt;br /&gt;
.wikitable th[style*=&amp;quot;background&amp;quot;] { background: #750014 !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Layout tables (non-wikitable): clean up legacy styling ──── */&lt;br /&gt;
/* The wiki uses plain tables (no .wikitable) for service grids and&lt;br /&gt;
   column layouts. Keep them as standard HTML tables — do NOT flex —&lt;br /&gt;
   but replace the legacy black borders with subtle card styling.      */&lt;br /&gt;
&lt;br /&gt;
/* Outer layout table: remove legacy table-level border/background */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable):not(.navbox):not(.infobox) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 6px !important;&lt;br /&gt;
  margin-bottom: 24px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout cells with inline border (service grid cards) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  border: 1px solid #e8e8e8 !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 18px 20px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: #ffffff !important;&lt;br /&gt;
  transition: background 0.18s ease !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Section-header cells (Assisted Services / Walkup / Informatics) — colspan rows */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td[colspan][style*=&amp;quot;border&amp;quot;] {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-radius: 6px !important;&lt;br /&gt;
  padding: 10px 16px !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inner nested tables inside service cards — strip borders (non-wikitable only) */&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border-spacing: 0 !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-content .mw-parser-output td &amp;gt; table:not(.wikitable) td {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Service card headings: wiki uses &amp;lt;big&amp;gt;&amp;lt;b&amp;gt;title&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; */&lt;br /&gt;
.bmc-content .mw-parser-output big b,&lt;br /&gt;
.bmc-content .mw-parser-output big strong {&lt;br /&gt;
  font-size: 1.1rem !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
  margin-bottom: 6px !important;&lt;br /&gt;
  font-family: &#039;Helvetica Neue&#039;, Arial, sans-serif !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists inside service cards */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) ul,&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) li {&lt;br /&gt;
  font-size: 1rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  margin-bottom: 3px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Plain layout cells without border (e.g. News page columns) */&lt;br /&gt;
.bmc-content .mw-parser-output &amp;gt; table:not(.wikitable) td:not([style*=&amp;quot;border&amp;quot;]) {&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  padding: 6px 8px !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ── Home page: overview/service table ───────────────────────────&lt;br /&gt;
   Plain table (class added by JS: &#039;wikitable bmc-home-table&#039;), styled&lt;br /&gt;
   with the same look as the site&#039;s other data tables. Cells that act&lt;br /&gt;
   as category headers (bold text, no &amp;lt;ul&amp;gt; of items) get a maroon&lt;br /&gt;
   header treatment; cells containing a &amp;lt;ul&amp;gt; stay as plain list cells. */&lt;br /&gt;
.bmc-home-table {&lt;br /&gt;
  margin: 0.4em 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td {&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  padding: 8px 12px !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul {&lt;br /&gt;
  margin: 3px 0 0 !important;&lt;br /&gt;
  padding-left: 14px !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-table td ul li {&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
  padding: 1px 0 !important;&lt;br /&gt;
  line-height: 1.35 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Group-header rows (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup Services&amp;quot; over the&lt;br /&gt;
   first table row, &amp;quot;Informatics Services&amp;quot; spanning its own row further&lt;br /&gt;
   down). These are real &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt; cells with the table&#039;s own colspan,&lt;br /&gt;
   so they align exactly with the columns beneath them. */&lt;br /&gt;
.bmc-home-header-row td {&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell {&lt;br /&gt;
  padding: 10px 12px !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  line-height: 1.3 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-cell big,&lt;br /&gt;
.bmc-home-header-cell big b,&lt;br /&gt;
.bmc-home-header-cell big strong {&lt;br /&gt;
  font-size: inherit !important;&lt;br /&gt;
  font-weight: inherit !important;&lt;br /&gt;
  color: inherit !important;&lt;br /&gt;
  display: inline !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #444 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-wide a { color: #444 !important; }&lt;br /&gt;
.bmc-home-header-accent {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-home-header-accent a { color: #fff !important; }&lt;br /&gt;
.bmc-home-header-accent a:hover,&lt;br /&gt;
.bmc-home-header-wide a:hover { text-decoration: underline !important; }&lt;br /&gt;
&lt;br /&gt;
/* ── Pricing page: proper table layout (preserves colspan/rowspan) ──&lt;br /&gt;
   Use border-separate so each cell owns its borders independently.&lt;br /&gt;
   This prevents adjacent-row borders from drawing lines through&lt;br /&gt;
   rowspan cells.                                                   */&lt;br /&gt;
.bmc-pricing .wikitable {&lt;br /&gt;
  display: table !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: separate !important;&lt;br /&gt;
  border-spacing: 1px 1px !important;&lt;br /&gt;
  border-radius: 8px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  margin: 1em 0 !important;&lt;br /&gt;
  overflow: hidden !important;&lt;br /&gt;
  table-layout: auto !important;&lt;br /&gt;
  background: #b0b0b0 !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable thead,&lt;br /&gt;
.bmc-pricing .wikitable tbody,&lt;br /&gt;
.bmc-pricing .wikitable tfoot {&lt;br /&gt;
  display: table-row-group !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tr {&lt;br /&gt;
  display: table-row !important;&lt;br /&gt;
}&lt;br /&gt;
/* Vertical dividers only — no horizontal row lines at all.&lt;br /&gt;
   This is the only reliable way to avoid borders cutting through rowspan cells.&lt;br /&gt;
   Row separation is handled by alternating background tints instead. */&lt;br /&gt;
.bmc-pricing .wikitable th,&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  display: table-cell !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
  padding: 10px 14px !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  white-space: normal !important;&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-break: normal !important;&lt;br /&gt;
  vertical-align: top !important;&lt;br /&gt;
  font-size: 0.875rem !important;&lt;br /&gt;
  line-height: 1.5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* No right border on last column */&lt;br /&gt;
.bmc-pricing .wikitable th:last-child,&lt;br /&gt;
.bmc-pricing .wikitable td:last-child {&lt;br /&gt;
  border-right: none !important;&lt;br /&gt;
}&lt;br /&gt;
/* Header row */&lt;br /&gt;
.bmc-pricing .wikitable th {&lt;br /&gt;
  background: #750014 !important;&lt;br /&gt;
  color: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  border-bottom-color: #5c0010 !important;&lt;br /&gt;
  border-right-color: rgba(255,255,255,0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
/* Data cells */&lt;br /&gt;
.bmc-pricing .wikitable td {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  color: #222 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Alternating row tint — stronger contrast since there are no row borders */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(odd) td:not([rowspan]) {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:nth-child(even) td:not([rowspan]) {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
}&lt;br /&gt;
/* Hover */&lt;br /&gt;
.bmc-pricing .wikitable tbody tr:hover td:not([rowspan]) {&lt;br /&gt;
  background: #f5eaec !important;&lt;br /&gt;
}&lt;br /&gt;
/* colspan description rows — grey tint */&lt;br /&gt;
.bmc-pricing .wikitable td[colspan] {&lt;br /&gt;
  background: #f5f5f5 !important;&lt;br /&gt;
  color: #555 !important;&lt;br /&gt;
  font-size: 0.82rem !important;&lt;br /&gt;
  font-style: italic !important;&lt;br /&gt;
}&lt;br /&gt;
/* rowspan cells — neutral white, vertically centered, stronger right border&lt;br /&gt;
   to visually separate the group label from the data columns.&lt;br /&gt;
   Critically: NO border-bottom, so no lines cut through the spanned area. */&lt;br /&gt;
.bmc-pricing .wikitable td[rowspan] {&lt;br /&gt;
  background: #fff !important;&lt;br /&gt;
  font-weight: 600 !important;&lt;br /&gt;
  border-bottom: none !important;&lt;br /&gt;
  border-right: 1px solid #d8d8d8 !important;&lt;br /&gt;
  vertical-align: middle !important;&lt;br /&gt;
  color: #1a1a1a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Row separators are now provided purely by the table&#039;s gray background&lt;br /&gt;
   showing through the 1px border-spacing gap between rows (set above).&lt;br /&gt;
   No explicit border-bottom needed — this keeps line thickness uniform&lt;br /&gt;
   between regular row gaps and rowspan group-boundary gaps. */&lt;br /&gt;
&lt;br /&gt;
/* Group boundary marker — JS adds this class to the last row of every&lt;br /&gt;
   rowspan group. No additional border needed; the gap-background line&lt;br /&gt;
   already appears automatically since this row is followed by a new row. */&lt;br /&gt;
&lt;br /&gt;
/* ── Card-grid tables (e.g. Alumni/Staff bio grids) ───────────────────&lt;br /&gt;
   Old-school tables where each row is N profile cells + narrow gap cells,&lt;br /&gt;
   sized with a bare width=&amp;quot;n&amp;quot; HTML attribute per &amp;lt;td&amp;gt;. Under automatic&lt;br /&gt;
   table layout those widths are only a hint, so columns with denser&lt;br /&gt;
   content end up wider than columns with sparse content.&lt;br /&gt;
&lt;br /&gt;
   Fix: force fixed table layout, and let the gap cells keep their exact&lt;br /&gt;
   declared pixel width (untouched — fixed layout honors that as-is),&lt;br /&gt;
   while the content cells (flagged by JS as .bmc-card-grid-content-cell)&lt;br /&gt;
   get width:auto. Per the CSS fixed-table-layout algorithm, any&lt;br /&gt;
   remaining space after the fixed-width columns are subtracted is&lt;br /&gt;
   divided EQUALLY among the columns left at &amp;quot;auto&amp;quot; — so the gap stays&lt;br /&gt;
   pixel-exact and the profile columns render genuinely equal-width,&lt;br /&gt;
   regardless of how much text is in any one of them. */&lt;br /&gt;
.bmc-card-grid-table {&lt;br /&gt;
  table-layout: fixed !important;&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  border-collapse: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-table td {&lt;br /&gt;
  overflow-wrap: break-word !important;&lt;br /&gt;
  word-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
.bmc-card-grid-content-cell {&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131723</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131723"/>
		<updated>2026-07-07T16:47:27Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki Wrapper — Full DOM Replacement&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /* Scope to the sidebar container to exclude Vector 2022 header user-menu portlets&lt;br /&gt;
       (p-vector-user-menu-userpage, p-user-menu-logout, p-personal-sticky-header, etc.) */&lt;br /&gt;
    var navContainer = document.getElementById( &#039;vector-main-menu&#039; ) ||&lt;br /&gt;
                       document.getElementById( &#039;mw-panel&#039; )         ||&lt;br /&gt;
                       document.getElementById( &#039;mw-navigation&#039; )    ||&lt;br /&gt;
                       document.body;&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      navContainer.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* User info — shown only when logged in */&lt;br /&gt;
    var userName = mw.config.get( &#039;wgUserName&#039; );&lt;br /&gt;
    var userEl = null;&lt;br /&gt;
    if ( userName ) {&lt;br /&gt;
      userEl = document.createElement( &#039;span&#039; );&lt;br /&gt;
      userEl.className = &#039;bmc-user-info&#039;;&lt;br /&gt;
      userEl.textContent = userName;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { right.appendChild( editBar ); }&lt;br /&gt;
    if ( userEl ) { right.appendChild( userEl ); }&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( titleText ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = titleText;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Add a separator line at the END of each rowspan group, on every&lt;br /&gt;
       cell whose own span also ends at that row. This marks the boundary&lt;br /&gt;
       between e.g. &amp;quot;5M&amp;quot; and &amp;quot;25M&amp;quot; without ever drawing a line through&lt;br /&gt;
       the inside of a single rowspan cell.                              */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      /* Build a grid: for each row index, find which row index each&lt;br /&gt;
         rowspan group ENDS at, per starting cell. Then for every row&lt;br /&gt;
         that is the last row of at least one rowspan group, draw a&lt;br /&gt;
         border-bottom on every td/th that is present in that row&lt;br /&gt;
         (cells whose own rowspan continues past this row are skipped,&lt;br /&gt;
         since the line would cut through them — instead they get their&lt;br /&gt;
         own end-of-group border drawn at their own last row). */&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
          var endRowIdx = rowIdx + span - 1;&lt;br /&gt;
          var endRow = rows[ endRowIdx ];&lt;br /&gt;
          if ( !endRow ) return;&lt;br /&gt;
&lt;br /&gt;
          /* Draw the boundary on every cell present in the END row,&lt;br /&gt;
             except cells whose OWN rowspan extends beyond this row&lt;br /&gt;
             (those get their boundary drawn at their own end row). */&lt;br /&gt;
          endRow.querySelectorAll( &#039;td, th&#039; ).forEach( function ( endCell ) {&lt;br /&gt;
            var ownSpan = parseInt( endCell.getAttribute( &#039;rowspan&#039; ), 10 ) || 1;&lt;br /&gt;
            if ( ownSpan &amp;gt; 1 ) return; /* this cell&#039;s own group hasn&#039;t ended yet */&lt;br /&gt;
            endCell.classList.add( &#039;bmc-rowspan-boundary&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  /* ── Split &amp;lt;br&amp;gt;-separated items inside a &amp;lt;ul&amp;gt; into separate &amp;lt;li&amp;gt;s ── */&lt;br /&gt;
  function splitBrBullets( ul ) {&lt;br /&gt;
    Array.prototype.slice.call( ul.querySelectorAll( &#039;li&#039; ) ).forEach( function ( li ) {&lt;br /&gt;
      if ( !li.querySelector( &#039;br&#039; ) ) return;&lt;br /&gt;
      var nodes = Array.prototype.slice.call( li.childNodes );&lt;br /&gt;
      var segments = [[]];&lt;br /&gt;
      nodes.forEach( function ( node ) {&lt;br /&gt;
        if ( node.nodeName === &#039;BR&#039; ) {&lt;br /&gt;
          segments.push( [] );&lt;br /&gt;
        } else {&lt;br /&gt;
          segments[ segments.length - 1 ].push( node );&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      /* Drop empty segments (only whitespace text nodes) */&lt;br /&gt;
      segments = segments.filter( function ( seg ) {&lt;br /&gt;
        return seg.some( function ( n ) {&lt;br /&gt;
          return n.nodeType === 1 ||&lt;br /&gt;
            ( n.nodeType === 3 &amp;amp;&amp;amp; n.textContent.trim() !== &#039;&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
      if ( segments.length &amp;lt;= 1 ) return;&lt;br /&gt;
      var parent = li.parentNode;&lt;br /&gt;
      var ref    = li.nextSibling;&lt;br /&gt;
      segments.forEach( function ( seg ) {&lt;br /&gt;
        var newLi = document.createElement( &#039;li&#039; );&lt;br /&gt;
        seg.forEach( function ( n ) { newLi.appendChild( n ); } );&lt;br /&gt;
        parent.insertBefore( newLi, ref );&lt;br /&gt;
      } );&lt;br /&gt;
      parent.removeChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
&lt;br /&gt;
    var templateFooter = contentClone.querySelector( &#039;#footer&#039; );&lt;br /&gt;
    if ( templateFooter ) {&lt;br /&gt;
      templateFooter.remove();&lt;br /&gt;
      wrapper.appendChild( templateFooter );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
    if ( isHome ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-home&#039; );&lt;br /&gt;
&lt;br /&gt;
      /* Remove page title from hero — logo already identifies the site */&lt;br /&gt;
      var heroH1 = hero.querySelector( &#039;h1&#039; );&lt;br /&gt;
      if ( heroH1 ) { heroH1.remove(); }&lt;br /&gt;
      var heroCrumb = hero.querySelector( &#039;.bmc-breadcrumb&#039; );&lt;br /&gt;
      if ( heroCrumb ) { heroCrumb.remove(); }&lt;br /&gt;
&lt;br /&gt;
      var parserOutput = contentClone.querySelector( &#039;.mw-parser-output&#039; ) || contentClone;&lt;br /&gt;
&lt;br /&gt;
      /* 7a. Remove the &amp;quot;Welcome to the MIT BioMicro Center!&amp;quot; tagline */&lt;br /&gt;
      var welcomeEl = null;&lt;br /&gt;
      Array.prototype.forEach.call( parserOutput.children, function ( el ) {&lt;br /&gt;
        if ( !welcomeEl &amp;amp;&amp;amp; /Welcome to the MIT BioMicro Center/i.test( el.textContent ) ) {&lt;br /&gt;
          welcomeEl = el;&lt;br /&gt;
        }&lt;br /&gt;
      } );&lt;br /&gt;
      if ( welcomeEl ) { welcomeEl.parentNode.removeChild( welcomeEl ); }&lt;br /&gt;
&lt;br /&gt;
      /* 7b. The first table on the page is the quick-links list (News,&lt;br /&gt;
             Pricing, Sample Submission, etc.) — pull its links up into&lt;br /&gt;
             the hero bar as pills so they don&#039;t eat vertical space, and&lt;br /&gt;
             remove the now-empty table. */&lt;br /&gt;
      var navLinksTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( navLinksTable ) {&lt;br /&gt;
        var heroLinksBar = document.createElement( &#039;div&#039; );&lt;br /&gt;
        heroLinksBar.className = &#039;bmc-hero-links&#039;;&lt;br /&gt;
        var seenHref = {};&lt;br /&gt;
        navLinksTable.querySelectorAll( &#039;a&#039; ).forEach( function ( a ) {&lt;br /&gt;
          var label = a.textContent.trim();&lt;br /&gt;
          var href  = a.getAttribute( &#039;href&#039; );&lt;br /&gt;
          if ( !label || !href || seenHref[ href ] ) return;&lt;br /&gt;
          seenHref[ href ] = true;&lt;br /&gt;
          var pill = document.createElement( &#039;a&#039; );&lt;br /&gt;
          pill.className = &#039;bmc-hero-link&#039;;&lt;br /&gt;
          pill.setAttribute( &#039;href&#039;, href );&lt;br /&gt;
          pill.textContent = label;&lt;br /&gt;
          heroLinksBar.appendChild( pill );&lt;br /&gt;
        } );&lt;br /&gt;
        if ( heroLinksBar.children.length ) {&lt;br /&gt;
          hero.querySelector( &#039;.inner&#039; ).appendChild( heroLinksBar );&lt;br /&gt;
        }&lt;br /&gt;
        navLinksTable.parentNode.removeChild( navLinksTable );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* 7c. The remaining table is one single &amp;quot;services&amp;quot; mega-table (5 rows,&lt;br /&gt;
             3 columns) where every cell — including the &amp;quot;Assisted Services&amp;quot; /&lt;br /&gt;
             &amp;quot;Walkup Services&amp;quot; / &amp;quot;Informatics Services&amp;quot; headers — wraps its&lt;br /&gt;
             content in its own nested one-cell table, purely for old-school&lt;br /&gt;
             formatting. Left as-is, our .wikitable styling was being applied&lt;br /&gt;
             to those nested tables too, double-boxing every cell. Unwrap them&lt;br /&gt;
             first, then style the table as a whole. */&lt;br /&gt;
      var servicesTable = parserOutput.querySelector( &#039;table&#039; );&lt;br /&gt;
      if ( servicesTable ) {&lt;br /&gt;
        Array.prototype.slice.call( servicesTable.querySelectorAll( &#039;table&#039; ) ).forEach(&lt;br /&gt;
          function ( inner ) {&lt;br /&gt;
            var frag = document.createDocumentFragment();&lt;br /&gt;
            Array.prototype.forEach.call( inner.querySelectorAll( &#039;td&#039; ), function ( td ) {&lt;br /&gt;
              while ( td.firstChild ) { frag.appendChild( td.firstChild ); }&lt;br /&gt;
            } );&lt;br /&gt;
            inner.parentNode.replaceChild( frag, inner );&lt;br /&gt;
          }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        servicesTable.classList.add( &#039;wikitable&#039;, &#039;bmc-home-table&#039; );&lt;br /&gt;
&lt;br /&gt;
        /* 7d. A row whose cells are ALL just a heading with no &amp;lt;ul&amp;gt; of&lt;br /&gt;
               items is a group-header row (&amp;quot;Assisted Services&amp;quot; / &amp;quot;Walkup&lt;br /&gt;
               Services&amp;quot;, &amp;quot;Informatics Services&amp;quot;) — style it as a colored&lt;br /&gt;
               bar. Real content rows (heading + &amp;lt;ul&amp;gt;) get normal styling.&lt;br /&gt;
               Because this uses the table&#039;s own &amp;lt;tr&amp;gt;/&amp;lt;td&amp;gt;/colspan, the bar&lt;br /&gt;
               aligns exactly with the columns below it — no guesswork. */&lt;br /&gt;
        Array.prototype.forEach.call( servicesTable.querySelectorAll( &#039;tr&#039; ), function ( tr ) {&lt;br /&gt;
          var cells = Array.prototype.slice.call( tr.children ).filter( function ( c ) {&lt;br /&gt;
            return c.tagName === &#039;TD&#039; || c.tagName === &#039;TH&#039;;&lt;br /&gt;
          } );&lt;br /&gt;
          if ( !cells.length ) return;&lt;br /&gt;
          var isHeaderRow = cells.every( function ( td ) { return !td.querySelector( &#039;ul&#039; ); } );&lt;br /&gt;
          if ( isHeaderRow ) {&lt;br /&gt;
            tr.classList.add( &#039;bmc-home-header-row&#039; );&lt;br /&gt;
            cells.forEach( function ( td, idx ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-home-header-cell&#039; );&lt;br /&gt;
              td.classList.add(&lt;br /&gt;
                ( cells.length &amp;gt; 1 &amp;amp;&amp;amp; idx &amp;gt; 0 ) ? &#039;bmc-home-header-accent&#039; : &#039;bmc-home-header-wide&#039;&lt;br /&gt;
              );&lt;br /&gt;
            } );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style only genuine data tables — not layout/service-grid tables.&lt;br /&gt;
          Real data tables have &amp;lt;th&amp;gt; header cells; layout tables use &amp;lt;td&amp;gt; only. */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      var firstRow = t.querySelector( &#039;tr&#039; );&lt;br /&gt;
      if ( firstRow &amp;amp;&amp;amp; firstRow.querySelector( &#039;th&#039; ) ) {&lt;br /&gt;
        t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 9b. Old-school &amp;quot;card grid&amp;quot; tables (e.g. Alumni/Staff bio grids) lay out&lt;br /&gt;
           N profile cells per row using a bare width=&amp;quot;350&amp;quot; HTML attribute on&lt;br /&gt;
           each &amp;lt;td&amp;gt;, with narrow width=&amp;quot;25&amp;quot; gap cells in between. Browsers&lt;br /&gt;
           only treat that width as a hint under automatic table layout, so&lt;br /&gt;
           columns end up sized by content instead of rendering equally.&lt;br /&gt;
           Force fixed layout via our own stylesheet (not user-editable&lt;br /&gt;
           wikitext, so nothing here is at risk of sanitizer stripping).&lt;br /&gt;
&lt;br /&gt;
           Only tag tables with this exact, unambiguous shape: every&lt;br /&gt;
           width-bearing cell in the table uses one of exactly two values —&lt;br /&gt;
           a &amp;quot;content&amp;quot; width and a much narrower &amp;quot;gap&amp;quot; width — with no other&lt;br /&gt;
           width values mixed in. Rows are allowed to have a trailing/short&lt;br /&gt;
           row with fewer cells (e.g. 2 people instead of 3), so this checks&lt;br /&gt;
           values used, not a fixed count per row. This keeps the rule from&lt;br /&gt;
           ever reaching colspan header-row tables, rowspan/pricing tables,&lt;br /&gt;
           or nested single-cell formatting tables — none of those share&lt;br /&gt;
           this bare width=&amp;quot;n&amp;quot; alternating content/gap pattern. */&lt;br /&gt;
    main.querySelectorAll( &#039;table:not(.wikitable):not(.infobox):not(.navbox)&#039; ).forEach(&lt;br /&gt;
      function ( t ) {&lt;br /&gt;
        var widthCells = t.querySelectorAll( &#039;td[width]&#039; );&lt;br /&gt;
        if ( widthCells.length &amp;lt; 3 ) { return; }&lt;br /&gt;
        var values = {};&lt;br /&gt;
        Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
          var v = parseInt( td.getAttribute( &#039;width&#039; ), 10 );&lt;br /&gt;
          if ( !isNaN( v ) ) { values[ v ] = ( values[ v ] || 0 ) + 1; }&lt;br /&gt;
        } );&lt;br /&gt;
        var distinct = Object.keys( values ).map( Number ).sort( function ( a, b ) { return a - b; } );&lt;br /&gt;
        if ( distinct.length === 2 &amp;amp;&amp;amp; distinct[ 0 ] * 3 &amp;lt;= distinct[ 1 ] ) {&lt;br /&gt;
          t.classList.add( &#039;bmc-card-grid-table&#039; );&lt;br /&gt;
          var contentWidth = distinct[ 1 ];&lt;br /&gt;
          Array.prototype.forEach.call( widthCells, function ( td ) {&lt;br /&gt;
            if ( parseInt( td.getAttribute( &#039;width&#039; ), 10 ) === contentWidth ) {&lt;br /&gt;
              td.classList.add( &#039;bmc-card-grid-content-cell&#039; );&lt;br /&gt;
            }&lt;br /&gt;
          } );&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 11. Pricing page — convert wikitables to flex layout so column&lt;br /&gt;
           borders and content stay perfectly aligned even with colspan rows.&lt;br /&gt;
           colspan cells get flex-grow = span so they span proportionally. */&lt;br /&gt;
    if ( currentPage.indexOf( &#039;Pricing&#039; ) !== -1 ) {&lt;br /&gt;
      document.body.classList.add( &#039;bmc-pricing&#039; );&lt;br /&gt;
      main.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
        table.querySelectorAll( &#039;tr&#039; ).forEach( function ( row ) {&lt;br /&gt;
          row.querySelectorAll( &#039;th, td&#039; ).forEach( function ( cell ) {&lt;br /&gt;
            var span = parseInt( cell.getAttribute( &#039;colspan&#039; ) || &#039;1&#039;, 10 );&lt;br /&gt;
            cell.style.setProperty( &#039;flex&#039;, span + &#039; 1 0%&#039;, &#039;important&#039; );&lt;br /&gt;
            cell.style.setProperty( &#039;min-width&#039;, &#039;0&#039;, &#039;important&#039; );&lt;br /&gt;
          } );&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=MIT:Pricing&amp;diff=131660</id>
		<title>MIT:Pricing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=MIT:Pricing&amp;diff=131660"/>
		<updated>2026-06-30T14:35:57Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: FY27 pricing: add Full DNA prep-SPRI, plain Nextera, and Mosquito HTL 24/96 rates per pricing sheet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;PRICING UPDATE 7/4/2026&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - HIGH OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
Please note that samples submitted from [[BioMicroCenter:CoreDeps|&#039;&#039;&#039;CORE LAB&#039;&#039;&#039;s]] will be given priority on all equipment. The BioMicro Center reserves the right to reject samples for any reason.&lt;br /&gt;
&lt;br /&gt;
=== NOVASEQX / NOVASEQ6000 SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! NOVASEQ SEQUENCING !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 10B 150PE Lane^^ || $1,900 || $2,090 || rowspan=&amp;quot;2&amp;quot; | Per Lane || rowspan=&amp;quot;5&amp;quot; | Through collaboration with nearby academic shared resources&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 25B 150PE Lane^^ || $2,300 || $2,530&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 10B 300nt^^ || $12,210 || $13,431 || rowspan=&amp;quot;3&amp;quot; | Per Flowcell&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 25B 300nt^^ || $16,250 || $17,875&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 25B 100nt^^ || $5,800 || $6,380&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
^^ - through collaboration with nearby academic shared resources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - MID OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Element_Sequencing ELEMENT AVITI24] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ELEMENT AVITI SEQUENCING !! Lane/Flowcell !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 75 PE || Full flowcell (2 lane, 800m read) || $2,000 || $2,200 || per flowcell || rowspan=&amp;quot;5&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,000 || $1,100 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 150 PE || Full flowcell (2 lane, ~800m read) || $2,750 || $3,025 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,375 || $1,513 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| 300 PE || Full flowcell (~200m reads) || $3,500 || $3,850 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - LOW OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Singular_Sequencing#Requirements%2FThings_to_Consider SINGULAR G4] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SINGULAR G4 SEQUENCING !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 50 PE: F3 Lane (~100m reads) || $300 || $330 || per lane || rowspan=&amp;quot;3&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| Rapid 300nt: F3 flowcell (~400m reads)* || $1,800 || $1,980 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| 150 PE: F3 Lane (~100m reads) || $450 || $495 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* Rapid flowcells are required for adapted Illumina libraries.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MISEQ SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Assisted ====&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $680 || $748 || rowspan=&amp;quot;9&amp;quot; | per kit || rowspan=&amp;quot;9&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $940 || $1,034&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $830 || $913&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,370 || $1,507&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,630 || $1,793&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1000nt&#039;&#039;&#039; || $2,150 || $2,365&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,350 || $1,485&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,860 || $2,046&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $1,860 || $2,046&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Walkup ====&lt;br /&gt;
Training and lab storage on BMC servers required. Run must be scheduled in the [https://mit.ilabsolutions.com/schedules/555535#/schedule/ iLabs calendar.]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! RunTime !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Machine usage || — || $125 || $137.50 || per run || — || training and lab storage on BMC servers required.&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $420 || $462 || rowspan=&amp;quot;9&amp;quot; | per kit || 8h || rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $650 || $715 || 16h&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $550 || $605 || 5h&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,025 || $1,127.50 || 8h&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,250 || $1,375 || 16h&lt;br /&gt;
|-&lt;br /&gt;
| 1000nt || $1,700 || $1,870 || 24h&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,000 || $1,100 || 5h&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,450 || $1,595 || 8h&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $1,450 || $1,595 || 16h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq classic ====&lt;br /&gt;
&lt;br /&gt;
* MiSeq is off contract and will be retired upon instrument failure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 70nt || 15M || $1,320 || $1,452 || rowspan=&amp;quot;6&amp;quot; | per kit || rowspan=&amp;quot;6&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 150nt || 25M || $1,430 || $1,573&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || 15M || $1,595 || $1,754.50&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 15M || $1,760 || $1,936&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 25M || $2,200 || $2,420&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 1M &amp;amp;nbsp;&#039;&#039;&#039;NANO&#039;&#039;&#039; || $770 || $847&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OTHER SHORT READ SERVICES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SHORT READ SUPPORTING SERVICES !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Quality Control Only -only one QC is included per sequencing lane. || $35 || $38.50 || per sample || Includes RT-PCR and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Quality Control - Use SYBR for sample quantification for pooling instead of qPCR. Only available for pooling. || $20 || $22 || per sample || Includes Fluorometric quantification and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (short read) || $20 || $22 || per sample || Includes qPCR values from standard QC only&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only - full plate(short read) || $250 || $275 || per plate || excludes column 1 (used for controls)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LONG READ SEQUENCING ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PROMETHION SEQUENCING !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 72 hour Flowcell || $1,200 || $1,320 || per Flowcell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PACBIO REVIO SEQUENCING^^ !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| SMRT Cell || $2,250 || $2,475 || per SMRT Cell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
^^ - through collaboration with nearby academic shared resources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LIBRARY GENERATION ==&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - DNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for sample batches. Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | LIGATION BASED NEB UltraII || STD || per sample || $110 || $121 || Includes QC, adapter ligation, size selection, barcoding, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 24 || style=&amp;quot;color:blue;&amp;quot; | $1,000 || style=&amp;quot;color:blue;&amp;quot; | $1,100 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes adapter ligation, size selection, barcoding, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 96 || style=&amp;quot;color:blue;&amp;quot; | $2,000 || style=&amp;quot;color:blue;&amp;quot; | $2,200&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-XT || rowspan=&amp;quot;2&amp;quot; | STD || rowspan=&amp;quot;2&amp;quot; | per Sample || $125 || $137.50 || rowspan=&amp;quot;2&amp;quot; | Includes set-up, tagmentation, indexing, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-FLEX || $95 || $104.50&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | NEXTERA-XT OR FLEX || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,200 || style=&amp;quot;color:blue;&amp;quot; | $1,320 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes tagmentation, indexing, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,400 || style=&amp;quot;color:blue;&amp;quot; | $2,640&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 16S Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,050 || style=&amp;quot;color:blue;&amp;quot; | $2,255 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $700 || style=&amp;quot;color:blue;&amp;quot; | $770&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Other Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $1,750 || style=&amp;quot;color:blue;&amp;quot; | $1,925 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA). &amp;amp;nbsp;&amp;amp;nbsp;Samples *must* be submitted amplified with appropriate linkers.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $630 || style=&amp;quot;color:blue;&amp;quot; | $693&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $60 || $66 ||&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $5 || $5.50 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $10 || $11 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - RNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included. Mixing of multiple projects not recommended.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | polyA based isolation &amp;amp;nbsp;&amp;amp;nbsp;NEB UltraII RNAseq || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $150 || $165 || Includes QC, polyA isolation, generation of cDNA, library construction, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,500 || style=&amp;quot;color:blue;&amp;quot; | $1,650 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,000 || style=&amp;quot;color:blue;&amp;quot; | $3,300&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | High Throughput 3&#039; Digital Gene Expression (HT3DGE) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,050 || style=&amp;quot;color:blue;&amp;quot; | $1,155 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes generation of cDNA, library construction, indexing and library quality control. Does not include sample QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,100 || style=&amp;quot;color:blue;&amp;quot; | $2,310&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Total RNA sequencing &amp;amp;nbsp;&amp;amp;nbsp;NEB RNAseq +Ribodepletion || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $225 || $247.50 || Includes sample QC, ribosomal depletion, generation of cDNA, library construction, indexing and library quality control.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,250 || style=&amp;quot;color:blue;&amp;quot; | $2,475 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $4,500 || style=&amp;quot;color:blue;&amp;quot; | $4,950&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input polyA+ &amp;amp;nbsp;&amp;amp;nbsp;Clontech SMARTseq + NexteraXT or Flex || &#039;&#039;&#039;STD&#039;&#039;&#039; v4 || per sample || $330 || $363 || rowspan=&amp;quot;3&amp;quot; | Includes generation of cDNA, amplification, library construction, indexing and quality control (SYBR + FA). Single sample includes initial QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,030 || style=&amp;quot;color:blue;&amp;quot; | $2,233&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $4,060 || style=&amp;quot;color:blue;&amp;quot; | $4,466&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input Mammalian Total &amp;amp;nbsp;&amp;amp;nbsp;Clontech ZapR Kit || STD || per sample || $200 || $220 || Includes generation of cDNA, amplification, library construction, rRNA degradation, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,000 || style=&amp;quot;color:blue;&amp;quot; | $3,300 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,000 || style=&amp;quot;color:blue;&amp;quot; | $5,500&lt;br /&gt;
|-&lt;br /&gt;
| Small RNA || STD || per sample || $200 || $220 || Uses NEB, BIOO or QIAGEN small RNA kit&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $60 || $66 ||&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $5 || $5.50 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $10 || $11 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
=== LONG READ LIBRARIES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Oxford Nanopore Sample Preparation !! Nanopore Kit !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit&lt;br /&gt;
|-&lt;br /&gt;
| Standard Ligation || LSK || $271.47 || $298.61 || per sample/pool&lt;br /&gt;
|-&lt;br /&gt;
| Native Barcoding &amp;amp;nbsp;&amp;amp;nbsp;(ligation indexing) || - || $50 || $55 || rowspan=&amp;quot;5&amp;quot; | per sample&lt;br /&gt;
|-&lt;br /&gt;
| SMARTseq -&amp;gt; Ligation || Cv4+LSK || $300 || $330&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Prep (tagment - ~10-20kb) || RAD || $218.75 || $245&lt;br /&gt;
|-&lt;br /&gt;
| Long Insert Prep || RAD (modified, target &amp;gt;100kb) || $343.75 || $385&lt;br /&gt;
|-&lt;br /&gt;
| Direct RNA || RNA004 || $271.47 || $298.61&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PacBio Sample Preparation !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Basic Library || $340 || $374 || Per Library&lt;br /&gt;
|-&lt;br /&gt;
| $170 || $187 || Per add&#039;l Sample&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Genomic Library || $500 || $550 || Per Library&lt;br /&gt;
|-&lt;br /&gt;
| $250 || $275 || Per add&#039;l Sample&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAMPLE EXTRACTION ==&lt;br /&gt;
&lt;br /&gt;
=== CHEMAGIC360 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! TYPE !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT &lt;br /&gt;
|-&lt;br /&gt;
| DNA || 96 || $740 || $814 &lt;br /&gt;
|-&lt;br /&gt;
| RNA || 96 || $850 || $935 &lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 12 samples || $300 || $330 &lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 96 samples || $1,000 || $1,100 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SINGLE CELL &amp;amp; SPATIAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== 10X CHROMIUM ===&lt;br /&gt;
&lt;br /&gt;
Please email biomicro@mit.edu two weeks prior to desired submission date so we will have reagents ready for you.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 10X USAGE !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Assisted Service&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;DIGITAL GENE EXPRESSION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA || setup || $1,015 || $1,116.50 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $1,750 || $1,925 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA - on chip multiplexing || setup || $1,150 || $1,265 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per 4 samples || $2,305 || $2,535 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fixed RNA (Flex v2) &amp;amp;nbsp;&amp;amp;nbsp;probe based. human/mouse only || setup || $2,700 || $2,970 || charge per submission - up to 48 samples&lt;br /&gt;
|-&lt;br /&gt;
| per sample (1-plex) || $270 || $297 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Amplicon (CITE-SEQ, TCR, BCR, antibody barcode, etc // per amplicon) || setup || $470 || $517 || additional prep beyond DGE&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $45 || $50 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;scATACseq&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ATACseq || setup || $880 || $968 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $1,675 || $1,843 || Includes QC and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Multiome (ATAC+3&#039;RNA)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | MULTI || setup || $1,800 || $1,980 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $3,100 || $3,410 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;CANCELLATION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| per session ||  || $200 || $220 || &amp;lt; 24h notice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VISIUM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SLIDES !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| HD: polyA or FFPE (human/mouse only) || 1 slide / 2 tiles || $7,850 || $8,596 || Includes library generation only.&lt;br /&gt;
|-&lt;br /&gt;
| QC - FFPE Scroll || per scroll || $65 || $71.50 || RNA isolation from FFPE scroll&lt;br /&gt;
|-&lt;br /&gt;
| QC - Fresh Frozen Scroll || per scroll || $45 || $49.50 || RNA isolation from FF scroll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AVITI24 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! AVITI24 SPATIAL !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Slide Only || rowspan=&amp;quot;5&amp;quot; | per slide || $150 || $165 || slide: 1, 12, or 48 well&lt;br /&gt;
|-&lt;br /&gt;
| Optimization Only || $800 || $880 || used when the run fails&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Teton Defined Panel] || $7,200 || $7,920 || scroll to predefined panels&lt;br /&gt;
|-&lt;br /&gt;
| Atlas Short || $5,500 || $6,050 || for CRISPR screens / short sequencing&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Antibody Add-on] || $360 || $396 || scroll to flexible protein customization&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OTHER GENOMICS SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== [[BioMicroCenter:QC|QUALITY CONTROL]] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! QUALITY CONTROL !! unit !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: RNA or DNA || per sample || $15 || $16.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: Preloaded row || per row (12) || $80 || $88 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: RNA or DNA || per sample || $35 || $38.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: Preloaded Row || per row (12) || $175 || $192.50 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| BioAnalyzer: Walkup Service || per chip || $50 || $55 ||&lt;br /&gt;
|-&lt;br /&gt;
| LC480: Walkup Service || per run || $25 || $27.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (Short read quantification test) || per sample || $20 || $22 || 4 point serial dilution&lt;br /&gt;
|-&lt;br /&gt;
| Full plate qPCR (short read quantification test) || per plate || $250 || $275 || full plate only (exclude column 1 for standards) - must be to BMC specifications.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Sample QC services:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Fresh Frozen Curl || per curl || $45 || $49.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| FFPE Curl || per curl || $65 || $71.50 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OLIGO SYNTHESIS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Platform !! Service !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | DNAscript Syntax || Setup (per run) || $1,000 || $1,100 || Per run cost&lt;br /&gt;
|-&lt;br /&gt;
| 2000 nucleotide synthesis || $500 || $550 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| 8000 nucleotide synthesis || $1,500 || $1,650 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| add Biotin (max48) || $115 || $126 || max 48 per run and 2 per oligo. Couple to T only.&lt;br /&gt;
|-&lt;br /&gt;
| add Fluor || $300 || $330 ||&lt;br /&gt;
|-&lt;br /&gt;
| add quench || $100 || $110 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[BioMicroCenter:RTPCR|REAL TIME PCR]] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OTHER LAB SERVICES !! [[BioMicroCenter:CoreDeps|CORE LAB / MIT]] !! unit !! SIGN UP !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Roche LightCycler 480 || $15 || per plate || [https://mit.ilabsolutions.com/schedules/261680#/schedule/ CALENDAR] *available for CORE only || Email biomicro@mit.edu for training&lt;br /&gt;
|-&lt;br /&gt;
| SYBR Green (KAPA/Roche) || $45 || per ml ||  || Available for MIT only&lt;br /&gt;
|-&lt;br /&gt;
| 96-well PLATES || $10 || per plate ||  || Available for MIT only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
== OTHER LAB SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OTHER LAB SERVICES !! [[BioMicroCenter:CoreDeps|CORE LAB / MIT]] !! unit !! SIGN UP !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;COVARIS SONICATOR&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| COVARIS E220 || $20 || per hour || [https://mit.ilabsolutions.com/equipment/261752/?tab=schedule ilab calendar] || tubes available for purchase.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;PIPPIN PREP&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Gel Isolation || $75 || per gel (5 lanes) || TBA ||&lt;br /&gt;
|-&lt;br /&gt;
| Training || $25 || per session || TBA || Email biomicro@mit.edu for training.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;PLATE READER&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Varioskan || $18 || per hour || [https://mit.ilabsolutions.com/schedules/262715#/schedule/ CALENDAR] || Email biomicro@mit.edu for training&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;ROBOTICS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Tecan EVO 150 || $75 || per 1h block - based on scheduled time. || [https://mit.ilabsolutions.com/schedules/262347#/schedule/ CALENDAR] ||&lt;br /&gt;
|-&lt;br /&gt;
| non-filter tips || $8 || per box ||  || ** Please let us know if there is additional plasticware you would like us to stock.&lt;br /&gt;
|-&lt;br /&gt;
| Filter tips || $12.00 || per box ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Training || $65 || per hour || Email biomicro@mit.edu ||&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;NANODROP&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Nanodrop || -- ||  || Walk up service || * no charge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== COMPUTATIONAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! COMPUTATIONAL SERVICES !! unit !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! Other MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Support || per hour || $90 || $125 || Very limited support for non-MIT users&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Share || per 0.1FTE || $1,250 || N/A || MIT only. Priority access to informatics.&lt;br /&gt;
|-&lt;br /&gt;
| Ingenuity Pathway Analysis || per dataset || $100 || $110 || Recovery of licence cost.&lt;br /&gt;
|-&lt;br /&gt;
| Active Data storage || per TB per year || $100 || $300 ||&lt;br /&gt;
|-&lt;br /&gt;
| Tape Archive / Recovery || per tape || $60 || $70 ||&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Training Classes || per session || $50 || $100 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
OLD&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2025 | FY2025 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2023b | FY2023-Feb Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2023 | FY2023 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2022 | FY2022 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2021 | FY2021 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2019 | FY2019 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2017 | FY2017 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2016 | FY2016 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2015 | FY2015 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2014 | FY2014 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2013 | FY2013 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2012 | FY2012 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2011 | FY2011 Pricing]]&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Pricing&amp;diff=131659</id>
		<title>BioMicroCenter:Pricing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Pricing&amp;diff=131659"/>
		<updated>2026-06-30T14:35:57Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: FY27 pricing: add Full DNA prep-SPRI, plain Nextera, and Mosquito HTL 24/96 rates per pricing sheet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&#039;&#039;&#039;PRICING UPDATE 7/4/2026&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are looking for MIT pricing, it is [[MIT:Pricing|here]]&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - MID OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Element_Sequencing ELEMENT AVITI24] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ELEMENT AVITI SEQUENCING !! Lane/Flowcell !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 75 PE || Full flowcell (2 lane, 800m read) || $2,500 || $2,800 || per flowcell || rowspan=&amp;quot;5&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,250 || $1,400 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 150 PE || Full flowcell (2 lane, ~800m read) || $3,437.50 || $3,850 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,719 || $1,925 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| 300 PE || Full flowcell (~200m reads) || $4,375 || $4,900 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - LOW OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Singular_Sequencing#Requirements%2FThings_to_Consider SINGULAR G4] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SINGULAR G4 SEQUENCING !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 50 PE: F3 Lane (~100m reads) || $375 || $420 || per lane || rowspan=&amp;quot;3&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| Rapid 300nt: F3 flowcell (~400m reads)* || $2,250 || $2,520 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| 150 PE: F3 Lane (~100m reads) || $562.50 || $630 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* Rapid flowcells are required for adapted Illumina libraries.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MISEQ SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Assisted ====&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $850 || $952 || rowspan=&amp;quot;9&amp;quot; | per flowcell || rowspan=&amp;quot;9&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,175 || $1,316&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $1,037.50 || $1,162&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,712.50 || $1,918&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $2,037.50 || $2,282&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1000nt&#039;&#039;&#039; || $2,687.50 || $3,010&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,687.50 || $1,890&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $2,325 || $2,604&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $2,325 || $2,604&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq classic ====&lt;br /&gt;
&lt;br /&gt;
* MiSeq is off contract and will be retired upon instrument failure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 70nt || 15M || $1,650 || $1,848 || rowspan=&amp;quot;6&amp;quot; | per lane || rowspan=&amp;quot;6&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 150nt || 25M || $1,787.50 || $2,002&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || 15M || $1,993.75 || $2,233&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 15M || $2,200 || $2,464&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 25M || $2,750 || $3,080&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 1M &amp;amp;nbsp;&#039;&#039;&#039;NANO&#039;&#039;&#039; || $962.50 || $1,078&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OTHER SHORT READ SERVICES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SHORT READ SUPPORTING SERVICES !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Quality Control Only -only one QC is included per sequencing lane. || $43.75 || $49 || per sample || Includes RT-PCR and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Quality Control - Use SYBR for sample quantification for pooling instead of qPCR. Only available for pooling. || $25 || $28 || per sample || Includes Fluorometric quantification and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (short read) || $25 || $28 || per sample || Includes qPCR values from standard QC only&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only - full plate(short read) || $312.50 || $350 || per plate || excludes column 1 (used for controls)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LONG READ SEQUENCING ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PROMETHION SEQUENCING !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 72 hour Flowcell || $1,500 || $1,680 || per Flowcell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LIBRARY GENERATION ==&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - DNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for sample batches. Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | LIGATION BASED NEB UltraII || STD || per sample || $137.50 || $154 || Includes QC, adapter ligation, size selection, barcoding, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 24 || style=&amp;quot;color:blue;&amp;quot; | $1,250 || style=&amp;quot;color:blue;&amp;quot; | $1,400 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes adapter ligation, size selection, barcoding, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | 96 || style=&amp;quot;color:blue;&amp;quot; | $2,500 || style=&amp;quot;color:blue;&amp;quot; | $2,800&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-XT || rowspan=&amp;quot;2&amp;quot; | STD || rowspan=&amp;quot;2&amp;quot; | per Sample || $156.25 || $175 || rowspan=&amp;quot;2&amp;quot; | Includes set-up, tagmentation, indexing, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-FLEX || $118.75 || $133&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | NEXTERA-XT OR FLEX || style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,500 || style=&amp;quot;color:blue;&amp;quot; | $1,680 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes tagmentation, indexing, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,000 || style=&amp;quot;color:blue;&amp;quot; | $3,360&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 16S Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,562.50 || style=&amp;quot;color:blue;&amp;quot; | $2,870 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $875 || style=&amp;quot;color:blue;&amp;quot; | $980&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Other Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,187.50 || style=&amp;quot;color:blue;&amp;quot; | $2,450 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA). &amp;amp;nbsp;&amp;amp;nbsp;Samples *must* be submitted amplified with appropriate linkers.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $787.50 || style=&amp;quot;color:blue;&amp;quot; | $945&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $75 || $84&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $6.25 || $7 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $12.50 || $14 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included. Mixing of multiple projects not recommended.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | polyA based isolation &amp;amp;nbsp;&amp;amp;nbsp;NEB UltraII RNAseq || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $187.50 || $210 || Includes QC, polyA isolation, generation of cDNA, library construction, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,875 || style=&amp;quot;color:blue;&amp;quot; | $2,100 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,750 || style=&amp;quot;color:blue;&amp;quot; | $4,200&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | High Throughput 3&#039; Digital Gene Expression (HT3DGE) || style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,312.50 || style=&amp;quot;color:blue;&amp;quot; | $1,470 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes generation of cDNA, library construction, indexing and library quality control. Does not include sample QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,625 || style=&amp;quot;color:blue;&amp;quot; | $2,940&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Total RNA sequencing &amp;amp;nbsp;&amp;amp;nbsp;NEB RNAseq +Ribodepletion || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $281.25 || $315 || Includes sample QC, ribosomal depletion, generation of cDNA, library construction, indexing and library quality control.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,812.50 || style=&amp;quot;color:blue;&amp;quot; | $3,150 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,625 || style=&amp;quot;color:blue;&amp;quot; | $6,300&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input polyA+ &amp;amp;nbsp;&amp;amp;nbsp;Clontech SMARTseq + NexteraXT or Flex || &#039;&#039;&#039;STD&#039;&#039;&#039; v4 || per sample || $412.50 || $462 || rowspan=&amp;quot;3&amp;quot; | Includes generation of cDNA, amplification, library construction, indexing and quality control (SYBR + FA). Single sample includes initial QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,537.50 || style=&amp;quot;color:blue;&amp;quot; | $2,842&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,075 || style=&amp;quot;color:blue;&amp;quot; | $5,684&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input Mammalian Total &amp;amp;nbsp;&amp;amp;nbsp;Clontech ZapR Kit || STD || per sample || $250 || $280 || Includes generation of cDNA, amplification, library construction, rRNA degradation, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,750 || style=&amp;quot;color:blue;&amp;quot; | $4,200 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $6,250 || style=&amp;quot;color:blue;&amp;quot; | $7,000&lt;br /&gt;
|-&lt;br /&gt;
| Small RNA || STD || per sample || $250 || $280 || Uses NEB, BIOO or QIAGEN small RNA kit&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $75 || $84&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $6.25 || $7 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $12.50 || $14 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== LONG READ LIBRARIES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Oxford Nanopore Sample Preparation !! Nanopore Kit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit&lt;br /&gt;
|-&lt;br /&gt;
| Standard Ligation || LSK || $339.33 || $380.05 || per sample/pool&lt;br /&gt;
|-&lt;br /&gt;
| Native Barcoding &amp;amp;nbsp;&amp;amp;nbsp;(ligation indexing) || - || $65 || $70 || rowspan=&amp;quot;5&amp;quot; | per sample&lt;br /&gt;
|-&lt;br /&gt;
| SMARTseq -&amp;gt; Ligation || Cv4+LSK || $375 || $420&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Prep (tagment - ~10-20kb) || RAD || $218.75 || $245&lt;br /&gt;
|-&lt;br /&gt;
| Long Insert Prep || RAD (modified, target &amp;gt;100kb) || $343.75 || $385&lt;br /&gt;
|-&lt;br /&gt;
| Direct RNA || RNA004 || $339.33 || $380.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SAMPLE EXTRACTION ==&lt;br /&gt;
&lt;br /&gt;
=== CHEMAGIC360 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! TYPE !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit &lt;br /&gt;
|-&lt;br /&gt;
| DNA || 96 || $925 || $1,036&lt;br /&gt;
|-&lt;br /&gt;
| RNA || 96 || $1,062.50 || $1,190&lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 12 samples || $375 || $420&lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 96 samples || $1,250 || $1,400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SINGLE CELL &amp;amp; SPATIAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== 10X CHROMIUM ===&lt;br /&gt;
&lt;br /&gt;
Please email biomicro@mit.edu two weeks prior to desired submission date so we will have reagents ready for you.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 10X USAGE !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Assisted Service&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;DIGITAL GENE EXPRESSION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA || setup || $1,268.75 || $1,421 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $2,188 || $2,450 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA - on chip multiplexing || setup || $1,437.50 || $1,610 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per 4 samples || $2,881 || $3,227 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fixed RNA (Flex v2) &amp;amp;nbsp;&amp;amp;nbsp;probe based. human/mouse only || setup || $3,375 || $3,780 || charge per submission - up to 48 samples&lt;br /&gt;
|-&lt;br /&gt;
| per sample (1-plex) || $337.50 || $378 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Amplicon (CITE-SEQ, TCR, BCR, antibody barcode, etc // per amplicon) || setup || $587.50 || $658 || additional prep beyond DGE&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $56 || $63 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;scATACseq&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ATACseq || setup || $1,100 || $1,232 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $2,094 || $2,345 || Includes QC and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Multiome (ATAC+3&#039;RNA)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | MULTI || setup || $2,250 || $2,520 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $3,875 || $4,340 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;CANCELLATION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| per session ||  || $250 || $280 || &amp;lt;24h notice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VISIUM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SLIDES !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| HD: polyA or FFPE (hs/mm only) || 1 slide / 2 tiles || $9,813 || $10,940 || Includes library generation only.&lt;br /&gt;
|-&lt;br /&gt;
| QC - FFPE Scroll || per scroll || $81.25 || $91 || RNA isolation from FFPE scroll&lt;br /&gt;
|-&lt;br /&gt;
| QC - Fresh Frozen Scroll || per scroll || $56.25 || $63 || RNA isolation from FF scroll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AVITI24 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! AVITI24 SPATIAL !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Slide Only || rowspan=&amp;quot;5&amp;quot; | per slide || $188 || $210 || slide: 1, 12, or 48 well&lt;br /&gt;
|-&lt;br /&gt;
| Optimization Only || $1,000 || $1,120 || used when the run fails&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Teton Defined Panel] || $9,000 || $10,080 || scroll to predefined panels&lt;br /&gt;
|-&lt;br /&gt;
| Atlas Short || $6,875 || $7,700 || for CRISPR screens / short sequencing&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Antibody Add-on] || $450 || $504 || scroll to flexible protein customization&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OTHER GENOMICS SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== [[BioMicroCenter:QC|QUALITY CONTROL]] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! QUALITY CONTROL !! unit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: RNA or DNA || per sample || $18.75 || $21&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: Preloaded row || per row (12) || $100 || $112 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: RNA or DNA || per sample || $43.75 || $49&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: Preloaded Row || per row (12) || $218.75 || $245 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| BioAnalyzer: Walkup Service || per chip || $62.50 || $70&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (Short read quantification test) || per sample || $25 || $28 || 4 point serial dilution&lt;br /&gt;
|-&lt;br /&gt;
| Full plate qPCR (short read quantification test) || per plate || $312.50 || $350 || full plate only (exclude column 1 for standards) - must be to BMC specifications.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Sample QC services:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Fresh Frozen Curl || per curl || $56.25 || $63 ||&lt;br /&gt;
|-&lt;br /&gt;
| FFPE Curl || per curl || $81.25 || $91 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OLIGO SYNTHESIS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Platform !! Service !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | DNAscript Syntax || Setup (per run) || $1,250 || $1,400 || Per run cost&lt;br /&gt;
|-&lt;br /&gt;
| 2000 nucleotide synthesis || $625 || $700 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| 8000 nucleotide synthesis || $1,875 || $2,100 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| add Biotin (max48) || $144 || $161 || max 48 per run and 2 per oligo. Couple to T only.&lt;br /&gt;
|-&lt;br /&gt;
| add Fluor || $375 || $420 ||&lt;br /&gt;
|-&lt;br /&gt;
| add quench || $125 || $140 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== COMPUTATIONAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! COMPUTATIONAL SERVICES !! unit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External For-Profit]] !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Support || per hour || $180 || $205 || Very limited support for non-MIT users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=MIT:Pricing&amp;diff=131657</id>
		<title>MIT:Pricing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=MIT:Pricing&amp;diff=131657"/>
		<updated>2026-06-30T12:47:42Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: FY27 pricing update (eff. 7/4/2026): updated rates across sequencing, library prep, extraction, QC, and spatial tables per FY27 pricing sheet; restored SHORT READ LIBRARY - DNA section (BMC page) lost in rev 131609&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;PRICING UPDATE 7/4/2026&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - HIGH OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
Please note that samples submitted from [[BioMicroCenter:CoreDeps|&#039;&#039;&#039;CORE LAB&#039;&#039;&#039;s]] will be given priority on all equipment. The BioMicro Center reserves the right to reject samples for any reason.&lt;br /&gt;
&lt;br /&gt;
=== NOVASEQX / NOVASEQ6000 SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! NOVASEQ SEQUENCING !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 10B 150PE Lane^^ || $1,900 || $2,090 || rowspan=&amp;quot;2&amp;quot; | Per Lane || rowspan=&amp;quot;5&amp;quot; | Through collaboration with nearby academic shared resources&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 25B 150PE Lane^^ || $2,300 || $2,530&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 10B 300nt^^ || $12,210 || $13,431 || rowspan=&amp;quot;3&amp;quot; | Per Flowcell&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 25B 300nt^^ || $16,250 || $17,875&lt;br /&gt;
|-&lt;br /&gt;
| NovaSeqX 25B 100nt^^ || $5,800 || $6,380&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
^^ - through collaboration with nearby academic shared resources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - MID OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Element_Sequencing ELEMENT AVITI24] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ELEMENT AVITI SEQUENCING !! Lane/Flowcell !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 75 PE || Full flowcell (2 lane, 800m read) || $2,000 || $2,200 || per flowcell || rowspan=&amp;quot;5&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,000 || $1,100 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 150 PE || Full flowcell (2 lane, ~800m read) || $2,750 || $3,025 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,375 || $1,513 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| 300 PE || Full flowcell (~200m reads) || $3,500 || $3,850 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - LOW OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Singular_Sequencing#Requirements%2FThings_to_Consider SINGULAR G4] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SINGULAR G4 SEQUENCING !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 50 PE: F3 Lane (~100m reads) || $300 || $330 || per lane || rowspan=&amp;quot;3&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| Rapid 300nt: F3 flowcell (~400m reads)* || $1,800 || $1,980 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| 150 PE: F3 Lane (~100m reads) || $450 || $495 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* Rapid flowcells are required for adapted Illumina libraries.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MISEQ SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Assisted ====&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $680 || $748 || rowspan=&amp;quot;9&amp;quot; | per kit || rowspan=&amp;quot;9&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $940 || $1,034&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $830 || $913&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,370 || $1,507&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,630 || $1,793&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1000nt&#039;&#039;&#039; || $2,150 || $2,365&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,350 || $1,485&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,860 || $2,046&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $1,860 || $2,046&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Walkup ====&lt;br /&gt;
Training and lab storage on BMC servers required. Run must be scheduled in the [https://mit.ilabsolutions.com/schedules/555535#/schedule/ iLabs calendar.]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! RunTime !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Machine usage || — || $125 || $137.50 || per run || — || training and lab storage on BMC servers required.&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $420 || $462 || rowspan=&amp;quot;9&amp;quot; | per kit || 8h || rowspan=&amp;quot;9&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $650 || $715 || 16h&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $550 || $605 || 5h&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,025 || $1,127.50 || 8h&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,250 || $1,375 || 16h&lt;br /&gt;
|-&lt;br /&gt;
| 1000nt || $1,700 || $1,870 || 24h&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,000 || $1,100 || 5h&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,450 || $1,595 || 8h&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $1,450 || $1,595 || 16h&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq classic ====&lt;br /&gt;
&lt;br /&gt;
* MiSeq is off contract and will be retired upon instrument failure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 70nt || 15M || $1,320 || $1,452 || rowspan=&amp;quot;6&amp;quot; | per kit || rowspan=&amp;quot;6&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 150nt || 25M || $1,430 || $1,573&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || 15M || $1,595 || $1,754.50&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 15M || $1,760 || $1,936&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 25M || $2,200 || $2,420&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 1M &amp;amp;nbsp;&#039;&#039;&#039;NANO&#039;&#039;&#039; || $770 || $847&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OTHER SHORT READ SERVICES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SHORT READ SUPPORTING SERVICES !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Quality Control Only -only one QC is included per sequencing lane. || $35 || $38.50 || per sample || Includes RT-PCR and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Quality Control - Use SYBR for sample quantification for pooling instead of qPCR. Only available for pooling. || $20 || $22 || per sample || Includes Fluorometric quantification and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (short read) || $20 || $22 || per sample || Includes qPCR values from standard QC only&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only - full plate(short read) || $250 || $275 || per plate || excludes column 1 (used for controls)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LONG READ SEQUENCING ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PROMETHION SEQUENCING !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 72 hour Flowcell || $1,200 || $1,320 || per Flowcell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PACBIO REVIO SEQUENCING^^ !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| SMRT Cell || $2,250 || $2,475 || per SMRT Cell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
^^ - through collaboration with nearby academic shared resources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LIBRARY GENERATION ==&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - DNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for sample batches. Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | LIGATION BASED NEB UltraII || STD || per sample || $105 || $115 || Includes QC, adapter ligation, size selection, barcoding, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 24 || style=&amp;quot;color:blue;&amp;quot; | $1,000 || style=&amp;quot;color:blue;&amp;quot; | $1,100 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes adapter ligation, size selection, barcoding, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 96 || style=&amp;quot;color:blue;&amp;quot; | $2,000 || style=&amp;quot;color:blue;&amp;quot; | $2,200&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-XT || rowspan=&amp;quot;2&amp;quot; | STD || rowspan=&amp;quot;2&amp;quot; | per Sample || $125 || $137.50 || rowspan=&amp;quot;2&amp;quot; | Includes set-up, tagmentation, indexing, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-FLEX || $157 || $173&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | NEXTERA-XT OR FLEX || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $900 || style=&amp;quot;color:blue;&amp;quot; | $990 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes tagmentation, indexing, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,800 || style=&amp;quot;color:blue;&amp;quot; | $1,980&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 16S Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,050 || style=&amp;quot;color:blue;&amp;quot; | $2,255 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $700 || style=&amp;quot;color:blue;&amp;quot; | $770&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Other Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $1,750 || style=&amp;quot;color:blue;&amp;quot; | $1,925 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA). &amp;amp;nbsp;&amp;amp;nbsp;Samples *must* be submitted amplified with appropriate linkers.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $630 || style=&amp;quot;color:blue;&amp;quot; | $693&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $60 || $66 ||&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $5 || $5.50 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $10 || $11 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - RNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included. Mixing of multiple projects not recommended.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | polyA based isolation &amp;amp;nbsp;&amp;amp;nbsp;NEB UltraII RNAseq || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $150 || $165 || Includes QC, polyA isolation, generation of cDNA, library construction, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,500 || style=&amp;quot;color:blue;&amp;quot; | $1,650 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,000 || style=&amp;quot;color:blue;&amp;quot; | $3,300&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | High Throughput 3&#039; Digital Gene Expression (HT3DGE) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,050 || style=&amp;quot;color:blue;&amp;quot; | $1,155 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes generation of cDNA, library construction, indexing and library quality control. Does not include sample QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,100 || style=&amp;quot;color:blue;&amp;quot; | $2,310&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Total RNA sequencing &amp;amp;nbsp;&amp;amp;nbsp;NEB RNAseq +Ribodepletion || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $225 || $247.50 || Includes sample QC, ribosomal depletion, generation of cDNA, library construction, indexing and library quality control.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,250 || style=&amp;quot;color:blue;&amp;quot; | $2,475 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $4,500 || style=&amp;quot;color:blue;&amp;quot; | $4,950&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input polyA+ &amp;amp;nbsp;&amp;amp;nbsp;Clontech SMARTseq + NexteraXT or Flex || &#039;&#039;&#039;STD&#039;&#039;&#039; v4 || per sample || $330 || $363 || rowspan=&amp;quot;3&amp;quot; | Includes generation of cDNA, amplification, library construction, indexing and quality control (SYBR + FA). Single sample includes initial QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,030 || style=&amp;quot;color:blue;&amp;quot; | $2,233&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $4,060 || style=&amp;quot;color:blue;&amp;quot; | $4,466&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input Mammalian Total &amp;amp;nbsp;&amp;amp;nbsp;Clontech ZapR Kit || STD || per sample || $200 || $220 || Includes generation of cDNA, amplification, library construction, rRNA degradation, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,000 || style=&amp;quot;color:blue;&amp;quot; | $3,300 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,000 || style=&amp;quot;color:blue;&amp;quot; | $5,500&lt;br /&gt;
|-&lt;br /&gt;
| Small RNA || STD || per sample || $200 || $220 || Uses NEB, BIOO or QIAGEN small RNA kit&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $60 || $66 ||&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $5 || $5.50 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $10 || $11 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
=== LONG READ LIBRARIES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Oxford Nanopore Sample Preparation !! Nanopore Kit !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit&lt;br /&gt;
|-&lt;br /&gt;
| Standard Ligation || LSK || $271.47 || $298.61 || per sample/pool&lt;br /&gt;
|-&lt;br /&gt;
| Native Barcoding &amp;amp;nbsp;&amp;amp;nbsp;(ligation indexing) || - || $50 || $55 || rowspan=&amp;quot;5&amp;quot; | per sample&lt;br /&gt;
|-&lt;br /&gt;
| SMARTseq -&amp;gt; Ligation || Cv4+LSK || $300 || $330&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Prep (tagment - ~10-20kb) || RAD || $218.75 || $245&lt;br /&gt;
|-&lt;br /&gt;
| Long Insert Prep || RAD (modified, target &amp;gt;100kb) || $343.75 || $385&lt;br /&gt;
|-&lt;br /&gt;
| Direct RNA || RNA004 || $271.47 || $298.61&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PacBio Sample Preparation !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! unit&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Basic Library || $340 || $374 || Per Library&lt;br /&gt;
|-&lt;br /&gt;
| $170 || $187 || Per add&#039;l Sample&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Genomic Library || $500 || $550 || Per Library&lt;br /&gt;
|-&lt;br /&gt;
| $250 || $275 || Per add&#039;l Sample&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SAMPLE EXTRACTION ==&lt;br /&gt;
&lt;br /&gt;
=== CHEMAGIC360 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! TYPE !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT &lt;br /&gt;
|-&lt;br /&gt;
| DNA || 96 || $740 || $814 &lt;br /&gt;
|-&lt;br /&gt;
| RNA || 96 || $850 || $935 &lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 12 samples || $300 || $330 &lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 96 samples || $1,000 || $1,100 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SINGLE CELL &amp;amp; SPATIAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== 10X CHROMIUM ===&lt;br /&gt;
&lt;br /&gt;
Please email biomicro@mit.edu two weeks prior to desired submission date so we will have reagents ready for you.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 10X USAGE !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Assisted Service&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;DIGITAL GENE EXPRESSION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA || setup || $1,015 || $1,116.50 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $1,750 || $1,925 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA - on chip multiplexing || setup || $1,150 || $1,265 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per 4 samples || $2,305 || $2,535 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fixed RNA (Flex v2) &amp;amp;nbsp;&amp;amp;nbsp;probe based. human/mouse only || setup || $2,700 || $2,970 || charge per submission - up to 48 samples&lt;br /&gt;
|-&lt;br /&gt;
| per sample (1-plex) || $270 || $297 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Amplicon (CITE-SEQ, TCR, BCR, antibody barcode, etc // per amplicon) || setup || $470 || $517 || additional prep beyond DGE&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $45 || $50 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;scATACseq&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ATACseq || setup || $880 || $968 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $1,675 || $1,843 || Includes QC and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Multiome (ATAC+3&#039;RNA)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | MULTI || setup || $1,800 || $1,980 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $3,100 || $3,410 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;CANCELLATION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| per session ||  || $200 || $220 || &amp;lt; 24h notice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VISIUM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SLIDES !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| HD: polyA or FFPE (human/mouse only) || 1 slide / 2 tiles || $7,850 || $8,596 || Includes library generation only.&lt;br /&gt;
|-&lt;br /&gt;
| QC - FFPE Scroll || per scroll || $65 || $71.50 || RNA isolation from FFPE scroll&lt;br /&gt;
|-&lt;br /&gt;
| QC - Fresh Frozen Scroll || per scroll || $45 || $49.50 || RNA isolation from FF scroll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AVITI24 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! AVITI24 SPATIAL !! Batch Size !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Slide Only || rowspan=&amp;quot;5&amp;quot; | per slide || $150 || $165 || slide: 1, 12, or 48 well&lt;br /&gt;
|-&lt;br /&gt;
| Optimization Only || $800 || $880 || used when the run fails&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Teton Defined Panel] || $7,200 || $7,920 || scroll to predefined panels&lt;br /&gt;
|-&lt;br /&gt;
| Atlas Short || $5,500 || $6,050 || for CRISPR screens / short sequencing&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Antibody Add-on] || $360 || $396 || scroll to flexible protein customization&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OTHER GENOMICS SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== [[BioMicroCenter:QC|QUALITY CONTROL]] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! QUALITY CONTROL !! unit !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: RNA or DNA || per sample || $15 || $16.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: Preloaded row || per row (12) || $80 || $88 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: RNA or DNA || per sample || $35 || $38.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: Preloaded Row || per row (12) || $175 || $192.50 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| BioAnalyzer: Walkup Service || per chip || $50 || $55 ||&lt;br /&gt;
|-&lt;br /&gt;
| LC480: Walkup Service || per run || $25 || $27.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (Short read quantification test) || per sample || $20 || $22 || 4 point serial dilution&lt;br /&gt;
|-&lt;br /&gt;
| Full plate qPCR (short read quantification test) || per plate || $250 || $275 || full plate only (exclude column 1 for standards) - must be to BMC specifications.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Sample QC services:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Fresh Frozen Curl || per curl || $45 || $49.50 ||&lt;br /&gt;
|-&lt;br /&gt;
| FFPE Curl || per curl || $65 || $71.50 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OLIGO SYNTHESIS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Platform !! Service !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | DNAscript Syntax || Setup (per run) || $1,000 || $1,100 || Per run cost&lt;br /&gt;
|-&lt;br /&gt;
| 2000 nucleotide synthesis || $500 || $550 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| 8000 nucleotide synthesis || $1,500 || $1,650 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| add Biotin (max48) || $115 || $126 || max 48 per run and 2 per oligo. Couple to T only.&lt;br /&gt;
|-&lt;br /&gt;
| add Fluor || $300 || $330 ||&lt;br /&gt;
|-&lt;br /&gt;
| add quench || $100 || $110 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[BioMicroCenter:RTPCR|REAL TIME PCR]] ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OTHER LAB SERVICES !! [[BioMicroCenter:CoreDeps|CORE LAB / MIT]] !! unit !! SIGN UP !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Roche LightCycler 480 || $15 || per plate || [https://mit.ilabsolutions.com/schedules/261680#/schedule/ CALENDAR] *available for CORE only || Email biomicro@mit.edu for training&lt;br /&gt;
|-&lt;br /&gt;
| SYBR Green (KAPA/Roche) || $45 || per ml ||  || Available for MIT only&lt;br /&gt;
|-&lt;br /&gt;
| 96-well PLATES || $10 || per plate ||  || Available for MIT only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
== OTHER LAB SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OTHER LAB SERVICES !! [[BioMicroCenter:CoreDeps|CORE LAB / MIT]] !! unit !! SIGN UP !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;COVARIS SONICATOR&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| COVARIS E220 || $20 || per hour || [https://mit.ilabsolutions.com/equipment/261752/?tab=schedule ilab calendar] || tubes available for purchase.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;PIPPIN PREP&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Gel Isolation || $75 || per gel (5 lanes) || TBA ||&lt;br /&gt;
|-&lt;br /&gt;
| Training || $25 || per session || TBA || Email biomicro@mit.edu for training.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;PLATE READER&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Varioskan || $18 || per hour || [https://mit.ilabsolutions.com/schedules/262715#/schedule/ CALENDAR] || Email biomicro@mit.edu for training&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;ROBOTICS&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Tecan EVO 150 || $75 || per 1h block - based on scheduled time. || [https://mit.ilabsolutions.com/schedules/262347#/schedule/ CALENDAR] ||&lt;br /&gt;
|-&lt;br /&gt;
| non-filter tips || $8 || per box ||  || ** Please let us know if there is additional plasticware you would like us to stock.&lt;br /&gt;
|-&lt;br /&gt;
| Filter tips || $12.00 || per box ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Training || $65 || per hour || Email biomicro@mit.edu ||&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;NANODROP&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Nanodrop || -- ||  || Walk up service || * no charge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== COMPUTATIONAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! COMPUTATIONAL SERVICES !! unit !! [[BioMicroCenter:CoreDeps|CORE LAB]] !! Other MIT !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Support || per hour || $90 || $125 || Very limited support for non-MIT users&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Share || per 0.1FTE || $1,250 || N/A || MIT only. Priority access to informatics.&lt;br /&gt;
|-&lt;br /&gt;
| Ingenuity Pathway Analysis || per dataset || $100 || $110 || Recovery of licence cost.&lt;br /&gt;
|-&lt;br /&gt;
| Active Data storage || per TB per year || $100 || $300 ||&lt;br /&gt;
|-&lt;br /&gt;
| Tape Archive / Recovery || per tape || $60 || $70 ||&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Training Classes || per session || $50 || $100 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
OLD&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2025 | FY2025 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2023b | FY2023-Feb Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2023 | FY2023 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2022 | FY2022 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2021 | FY2021 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2019 | FY2019 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2017 | FY2017 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2016 | FY2016 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2015 | FY2015 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2014 | FY2014 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2013 | FY2013 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2012 | FY2012 Pricing]]&amp;lt;BR&amp;gt;&lt;br /&gt;
[[BioMicroCenter:PricingFY2011 | FY2011 Pricing]]&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Pricing&amp;diff=131656</id>
		<title>BioMicroCenter:Pricing</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter:Pricing&amp;diff=131656"/>
		<updated>2026-06-30T12:47:41Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: FY27 pricing update (eff. 7/4/2026): updated rates across sequencing, library prep, extraction, QC, and spatial tables per FY27 pricing sheet; restored SHORT READ LIBRARY - DNA section (BMC page) lost in rev 131609&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{BioMicroCenter}}&lt;br /&gt;
&#039;&#039;&#039;PRICING UPDATE 7/4/2026&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are looking for MIT pricing, it is [[MIT:Pricing|here]]&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - MID OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Element_Sequencing ELEMENT AVITI24] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ELEMENT AVITI SEQUENCING !! Lane/Flowcell !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 75 PE || Full flowcell (2 lane, 800m read) || $2,500 || $2,800 || per flowcell || rowspan=&amp;quot;5&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,250 || $1,400 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 150 PE || Full flowcell (2 lane, ~800m read) || $3,437.50 || $3,850 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| One lane (~400m read) || $1,719 || $1,925 || per lane&lt;br /&gt;
|-&lt;br /&gt;
| 300 PE || Full flowcell (~200m reads) || $4,375 || $4,900 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEQUENCING - LOW OUTPUT ==&lt;br /&gt;
&lt;br /&gt;
=== [https://openwetware.org/wiki/BioMicroCenter:Singular_Sequencing#Requirements%2FThings_to_Consider SINGULAR G4] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SINGULAR G4 SEQUENCING !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 50 PE: F3 Lane (~100m reads) || $375 || $420 || per lane || rowspan=&amp;quot;3&amp;quot; | Includes final pool quality control (RT-PCR and FA), sequencing, and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| Rapid 300nt: F3 flowcell (~400m reads)* || $2,250 || $2,520 || per flowcell&lt;br /&gt;
|-&lt;br /&gt;
| 150 PE: F3 Lane (~100m reads) || $562.50 || $630 || per lane&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* Rapid flowcells are required for adapted Illumina libraries.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MISEQ SEQUENCING ===&lt;br /&gt;
&lt;br /&gt;
==== MiSeq i100 Assisted ====&lt;br /&gt;
Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || rowspan=&amp;quot;2&amp;quot; | 5M || $850 || $952 || rowspan=&amp;quot;9&amp;quot; | per flowcell || rowspan=&amp;quot;9&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $1,175 || $1,316&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;4&amp;quot; | 25M || $1,037.50 || $1,162&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $1,712.50 || $1,918&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || $2,037.50 || $2,282&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1000nt&#039;&#039;&#039; || $2,687.50 || $3,010&lt;br /&gt;
|-&lt;br /&gt;
| 100nt || rowspan=&amp;quot;2&amp;quot; | 100M || $1,687.50 || $1,890&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || $2,325 || $2,604&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 50M || $2,325 || $2,604&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MiSeq classic ====&lt;br /&gt;
&lt;br /&gt;
* MiSeq is off contract and will be retired upon instrument failure&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length !! Reads !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 70nt || 15M || $1,650 || $1,848 || rowspan=&amp;quot;6&amp;quot; | per lane || rowspan=&amp;quot;6&amp;quot; | Includes final pool quality control (RT-PCR and BioAnalyzer), sequencing, genome alignment and data storage of FASTQ files for 1 year&lt;br /&gt;
|-&lt;br /&gt;
| 150nt || 25M || $1,787.50 || $2,002&lt;br /&gt;
|-&lt;br /&gt;
| 300nt || 15M || $1,993.75 || $2,233&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 15M || $2,200 || $2,464&lt;br /&gt;
|-&lt;br /&gt;
| 600nt || 25M || $2,750 || $3,080&lt;br /&gt;
|-&lt;br /&gt;
| 500nt || 1M &amp;amp;nbsp;&#039;&#039;&#039;NANO&#039;&#039;&#039; || $962.50 || $1,078&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OTHER SHORT READ SERVICES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SHORT READ SUPPORTING SERVICES !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Quality Control Only -only one QC is included per sequencing lane. || $43.75 || $49 || per sample || Includes RT-PCR and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Quality Control - Use SYBR for sample quantification for pooling instead of qPCR. Only available for pooling. || $25 || $28 || per sample || Includes Fluorometric quantification and Frag.Analyzer&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (short read) || $25 || $28 || per sample || Includes qPCR values from standard QC only&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only - full plate(short read) || $312.50 || $350 || per plate || excludes column 1 (used for controls)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LONG READ SEQUENCING ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! PROMETHION SEQUENCING !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 72 hour Flowcell || $1,500 || $1,680 || per Flowcell || Fastq stored for 1y. Trace data stored only 30d.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LIBRARY GENERATION ==&lt;br /&gt;
&lt;br /&gt;
=== SHORT READ LIBRARY - DNA ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT DNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for sample batches. Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | LIGATION BASED NEB UltraII || STD || per sample || $136.50 || $157 || Includes QC, adapter ligation, size selection, barcoding, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 24 || style=&amp;quot;color:blue;&amp;quot; | $1,250 || style=&amp;quot;color:blue;&amp;quot; | $1,400 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes adapter ligation, size selection, barcoding, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | 96 || style=&amp;quot;color:blue;&amp;quot; | $2,500 || style=&amp;quot;color:blue;&amp;quot; | $2,800&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-XT || rowspan=&amp;quot;2&amp;quot; | STD || rowspan=&amp;quot;2&amp;quot; | per Sample || $156.25 || $175 || rowspan=&amp;quot;2&amp;quot; | Includes set-up, tagmentation, indexing, enrichment, and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| Tagmentation &amp;amp;nbsp;&amp;amp;nbsp;NEXTERA-FLEX || $204 || $235&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | NEXTERA-XT OR FLEX || style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,125 || style=&amp;quot;color:blue;&amp;quot; | $1,260 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes tagmentation, indexing, enrichment, and quality control spotcheck (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,250 || style=&amp;quot;color:blue;&amp;quot; | $2,520&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 16S Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,562.50 || style=&amp;quot;color:blue;&amp;quot; | $2,870 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $875 || style=&amp;quot;color:blue;&amp;quot; | $980&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Other Amplicon || style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | 48 || style=&amp;quot;color:blue;&amp;quot; | $2,187.50 || style=&amp;quot;color:blue;&amp;quot; | $2,450 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes normalization, enrichment, pooling and quality control (SYBR and FA). &amp;amp;nbsp;&amp;amp;nbsp;Samples *must* be submitted amplified with appropriate linkers.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | HTL || style=&amp;quot;color:blue;&amp;quot; | add&#039;l 48 || style=&amp;quot;color:blue;&amp;quot; | $787.50 || style=&amp;quot;color:blue;&amp;quot; | $945&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $75 || $84&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $6.25 || $7 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $12.50 || $14 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | ILLUMINA Sample Preparation !! colspan=&amp;quot;3&amp;quot; style=&amp;quot;color:blue;&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;STANDARD RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Prices for individual samples. Repreps will typically be attempted on failed samples without charge. || colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-weight:bold; text-align:center; color:blue;&amp;quot; | &#039;&#039;&#039;HIGH THROUGHPUT RNA&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Repreps will NOT be attempted on failed samples without charge. Low volume (&amp;lt;=5ul) submission must be coordinated with BMC staff. Initial QC not included. Mixing of multiple projects not recommended.&lt;br /&gt;
|-&lt;br /&gt;
! ILLUMINA Sample Preparation !! Type !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | polyA based isolation &amp;amp;nbsp;&amp;amp;nbsp;NEB UltraII RNAseq || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $187.50 || $210 || Includes QC, polyA isolation, generation of cDNA, library construction, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,875 || style=&amp;quot;color:blue;&amp;quot; | $2,100 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,750 || style=&amp;quot;color:blue;&amp;quot; | $4,200&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | High Throughput 3&#039; Digital Gene Expression (HT3DGE) || style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $1,312.50 || style=&amp;quot;color:blue;&amp;quot; | $1,470 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes generation of cDNA, library construction, indexing and library quality control. Does not include sample QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,625 || style=&amp;quot;color:blue;&amp;quot; | $2,940&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Total RNA sequencing &amp;amp;nbsp;&amp;amp;nbsp;NEB RNAseq +Ribodepletion || &#039;&#039;&#039;STD&#039;&#039;&#039; || per sample || $281.25 || $315 || Includes sample QC, ribosomal depletion, generation of cDNA, library construction, indexing and library quality control.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (NEB only, covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,812.50 || style=&amp;quot;color:blue;&amp;quot; | $3,150 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,625 || style=&amp;quot;color:blue;&amp;quot; | $6,300&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input polyA+ &amp;amp;nbsp;&amp;amp;nbsp;Clontech SMARTseq + NexteraXT or Flex || &#039;&#039;&#039;STD&#039;&#039;&#039; v4 || per sample || $412.50 || $462 || rowspan=&amp;quot;3&amp;quot; | Includes generation of cDNA, amplification, library construction, indexing and quality control (SYBR + FA). Single sample includes initial QC.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; v2 || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $2,537.50 || style=&amp;quot;color:blue;&amp;quot; | $2,842&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $5,075 || style=&amp;quot;color:blue;&amp;quot; | $5,684&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Low Input Mammalian Total &amp;amp;nbsp;&amp;amp;nbsp;Clontech ZapR Kit || STD || per sample || $250 || $280 || Includes generation of cDNA, amplification, library construction, rRNA degradation, indexing and quality control (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;HTL&#039;&#039;&#039; (covaris RNA fragmentation) || style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;24&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $3,750 || style=&amp;quot;color:blue;&amp;quot; | $4,200 || rowspan=&amp;quot;2&amp;quot; style=&amp;quot;color:blue;&amp;quot; | Includes polyA isolation, generation of cDNA, library construction, indexing and spot QC (SYBR + FA).&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:blue;&amp;quot; | &#039;&#039;96&#039;&#039; || style=&amp;quot;color:blue;&amp;quot; | $6,250 || style=&amp;quot;color:blue;&amp;quot; | $7,000&lt;br /&gt;
|-&lt;br /&gt;
| Small RNA || STD || per sample || $250 || $280 || Uses NEB, BIOO or QIAGEN small RNA kit&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; style=&amp;quot;font-weight:bold; text-align:center;&amp;quot; | &#039;&#039;&#039;ADDITIONAL FEES&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp;Samples not in proper input format will be subject to these additional charges.&lt;br /&gt;
|-&lt;br /&gt;
| High Throughput Setup || || 48 samples || $75 || $84&lt;br /&gt;
|-&lt;br /&gt;
| Sample Cleanup || || per sample || $6.25 || $7 || SPRI cleanup of samples to remove impurities.&lt;br /&gt;
|-&lt;br /&gt;
| Quantification || || per sample || $12.50 || $14 || Quantification of samples (FA) prior to arraying.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== LONG READ LIBRARIES ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Oxford Nanopore Sample Preparation !! Nanopore Kit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! unit&lt;br /&gt;
|-&lt;br /&gt;
| Standard Ligation || LSK || $339.33 || $380.05 || per sample/pool&lt;br /&gt;
|-&lt;br /&gt;
| Native Barcoding &amp;amp;nbsp;&amp;amp;nbsp;(ligation indexing) || - || $65 || $70 || rowspan=&amp;quot;5&amp;quot; | per sample&lt;br /&gt;
|-&lt;br /&gt;
| SMARTseq -&amp;gt; Ligation || Cv4+LSK || $375 || $420&lt;br /&gt;
|-&lt;br /&gt;
| Rapid Prep (tagment - ~10-20kb) || RAD || $218.75 || $245&lt;br /&gt;
|-&lt;br /&gt;
| Long Insert Prep || RAD (modified, target &amp;gt;100kb) || $343.75 || $385&lt;br /&gt;
|-&lt;br /&gt;
| Direct RNA || RNA004 || $339.33 || $380.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SAMPLE EXTRACTION ==&lt;br /&gt;
&lt;br /&gt;
=== CHEMAGIC360 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! TYPE !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit &lt;br /&gt;
|-&lt;br /&gt;
| DNA || 96 || $925 || $1,036&lt;br /&gt;
|-&lt;br /&gt;
| RNA || 96 || $1,062.50 || $1,190&lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 12 samples || $375 || $420&lt;br /&gt;
|-&lt;br /&gt;
| RNA/DNA Isolation - Assisted || 96 samples || $1,250 || $1,400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SINGLE CELL &amp;amp; SPATIAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== 10X CHROMIUM ===&lt;br /&gt;
&lt;br /&gt;
Please email biomicro@mit.edu two weeks prior to desired submission date so we will have reagents ready for you.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 10X USAGE !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Assisted Service&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;DIGITAL GENE EXPRESSION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA || setup || $1,268.75 || $1,421 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $2,188 || $2,450 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 5&#039; RNA &amp;amp;nbsp;&amp;amp;nbsp;3&#039; RNA - on chip multiplexing || setup || $1,437.50 || $1,610 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per 4 samples || $2,881 || $3,227 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Fixed RNA (Flex v2) &amp;amp;nbsp;&amp;amp;nbsp;probe based. human/mouse only || setup || $3,375 || $3,780 || charge per submission - up to 48 samples&lt;br /&gt;
|-&lt;br /&gt;
| per sample (1-plex) || $337.50 || $378 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Amplicon (CITE-SEQ, TCR, BCR, antibody barcode, etc // per amplicon) || setup || $587.50 || $658 || additional prep beyond DGE&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $56 || $63 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;scATACseq&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ATACseq || setup || $1,100 || $1,232 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $2,094 || $2,345 || Includes QC and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Multiome (ATAC+3&#039;RNA)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | MULTI || setup || $2,250 || $2,520 || charge per submission&lt;br /&gt;
|-&lt;br /&gt;
| per sample || $3,875 || $4,340 || Includes QC of cDNA and creation of Short Read Library&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;CANCELLATION&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| per session ||  || $250 || $280 || &amp;lt;24h notice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== VISIUM ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SLIDES !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| HD: polyA or FFPE (hs/mm only) || 1 slide / 2 tiles || $9,813 || $10,940 || Includes library generation only.&lt;br /&gt;
|-&lt;br /&gt;
| QC - FFPE Scroll || per scroll || $81.25 || $91 || RNA isolation from FFPE scroll&lt;br /&gt;
|-&lt;br /&gt;
| QC - Fresh Frozen Scroll || per scroll || $56.25 || $63 || RNA isolation from FF scroll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AVITI24 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! AVITI24 SPATIAL !! Batch Size !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Slide Only || rowspan=&amp;quot;5&amp;quot; | per slide || $188 || $210 || slide: 1, 12, or 48 well&lt;br /&gt;
|-&lt;br /&gt;
| Optimization Only || $1,000 || $1,120 || used when the run fails&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Teton Defined Panel] || $9,000 || $10,080 || scroll to predefined panels&lt;br /&gt;
|-&lt;br /&gt;
| Atlas Short || $6,875 || $7,700 || for CRISPR screens / short sequencing&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elementbiosciences.com/products/aviti24/cytoprofiling Antibody Add-on] || $450 || $504 || scroll to flexible protein customization&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OTHER GENOMICS SERVICES ==&lt;br /&gt;
&lt;br /&gt;
=== [[BioMicroCenter:QC|QUALITY CONTROL]] ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! QUALITY CONTROL !! unit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: RNA or DNA || per sample || $18.75 || $21&lt;br /&gt;
|-&lt;br /&gt;
| Fragment Analyzer: Preloaded row || per row (12) || $100 || $112 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: RNA or DNA || per sample || $43.75 || $49&lt;br /&gt;
|-&lt;br /&gt;
| FemtoPulse: Preloaded Row || per row (12) || $218.75 || $245 || 2ul per sample in each well using plates from BMC&lt;br /&gt;
|-&lt;br /&gt;
| BioAnalyzer: Walkup Service || per chip || $62.50 || $70&lt;br /&gt;
|-&lt;br /&gt;
| qPCR only (Short read quantification test) || per sample || $25 || $28 || 4 point serial dilution&lt;br /&gt;
|-&lt;br /&gt;
| Full plate qPCR (short read quantification test) || per plate || $312.50 || $350 || full plate only (exclude column 1 for standards) - must be to BMC specifications.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;Sample QC services:&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Fresh Frozen Curl || per curl || $56.25 || $63 ||&lt;br /&gt;
|-&lt;br /&gt;
| FFPE Curl || per curl || $81.25 || $91 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OLIGO SYNTHESIS ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Platform !! Service !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! External For-Profit !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | DNAscript Syntax || Setup (per run) || $1,250 || $1,400 || Per run cost&lt;br /&gt;
|-&lt;br /&gt;
| 2000 nucleotide synthesis || $625 || $700 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| 8000 nucleotide synthesis || $1,875 || $2,100 || Up to 96 samples&lt;br /&gt;
|-&lt;br /&gt;
| add Biotin (max48) || $144 || $161 || max 48 per run and 2 per oligo. Couple to T only.&lt;br /&gt;
|-&lt;br /&gt;
| add Fluor || $375 || $420 ||&lt;br /&gt;
|-&lt;br /&gt;
| add quench || $125 || $140 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== COMPUTATIONAL SERVICES ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! COMPUTATIONAL SERVICES !! unit !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External Academic]] !! [[BioMicroCenter:FAQ#NON_MIT_USERS|External For-Profit]] !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Informatics Support || per hour || $180 || $205 || Very limited support for non-MIT users.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BMC_Training&amp;diff=131564</id>
		<title>BMC Training</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BMC_Training&amp;diff=131564"/>
		<updated>2026-06-01T17:59:19Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;STUB&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STUB&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=BioMicroCenter&amp;diff=131563</id>
		<title>BioMicroCenter</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=BioMicroCenter&amp;diff=131563"/>
		<updated>2026-06-01T17:50:05Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2 align=&amp;quot;center&amp;quot;&amp;gt; Welcome to the MIT BioMicro Center! &amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; &lt;br /&gt;
 |- &lt;br /&gt;
 |valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
[[File:logo.png|left]]&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BioMicroCenter:News|&#039;&#039;&#039;News &amp;amp; General Information&#039;&#039;&#039;]]&lt;br /&gt;
* [[BioMicroCenter:Pricing|Pricing]] / [[MIT:Pricing|MIT Pricing]]&lt;br /&gt;
* [[BioMicroCenter:Submission|Sample Submission]]&lt;br /&gt;
* [[BioMicroCenter:Consumables|Consumables]]&lt;br /&gt;
* [[BioMicroCenter:Consulting|Experimental Design]]&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;|&lt;br /&gt;
* [[BioMicroCenter:AboutBMC|About the BioMicro Center]]&lt;br /&gt;
* [[BioMicroCenter:People| Staff]] &lt;br /&gt;
* [[BioMicroCenter:Consulting| Getting Started]]&lt;br /&gt;
&amp;lt;!-- [[BioMicroCenter:Jobs|Positions Available]] --&amp;gt;&lt;br /&gt;
* [[BioMicroCenter:FAQ|FAQs]]&lt;br /&gt;
|}&lt;br /&gt;
The &#039;&#039;&#039;MIT BioMicro Center&#039;&#039;&#039; is an integrated genomics core facility that provides both expertise and equipment for systems biology. The core has significant resources in sample preparation, next generation sequencing and in high throughput screening as well as bioinformatics and BioIT. The Center is a joint endeavor between the [http://biology.mit.edu Department of Biology], the [http://ki.mit.edu Koch Institute for Integrative Cancer Research] (Integrated Genome Technologies Core (IGT) and Data Science &amp;amp; Multimodal Integration Core (DSMI)), and the [http://web.mit.edu/be Department of Biological Engineering].&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
 |- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |colspan=2 align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:yellow; border:1px solid purple&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;[[BioMicroCenter:Assisted_Services|Assisted Services]] &amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:aqua; border:1px solid black&amp;quot;|&lt;br /&gt;
 {|&lt;br /&gt;
  |&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt; Walkup Services &amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;Sample Isolation&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* Sonication ([[BioMicroCenter:Covaris|Covaris E220/R230]])&lt;br /&gt;
* DNA/RNA purification ([[BioMicroCenter:Tecan_Freedom_Evo#Revvity_Chemagic_360|Chemagic360]])&lt;br /&gt;
* Quality Control&amp;lt;BR&amp;gt;([[BioMicroCenter:QC|AATI Fragment Analyzer/FemtoPulse]])&lt;br /&gt;
 |}&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;Library Preparation&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* [[BioMicroCenter:Illumina_Library_Preparation|Short Read Sample Preparation]]&amp;lt;small&amp;gt;&lt;br /&gt;
** Standard Methods for [[BioMicroCenter:DNA_LIB| *DNA* ]] [[BioMicroCenter:RNA_LIB| *RNA* ]]&lt;br /&gt;
** [[BioMicroCenter:FAQ#STANDARD_versus_HIGH_THROUGHPUT_LIBRARY_PREPARATION|High Throughput Methods]] for [[BioMicroCenter:DNA_HTL| *DNA* ]]  [[BioMicroCenter:RNA_HTL| *RNA* ]]&amp;lt;/small&amp;gt;&lt;br /&gt;
* Long Read Sample Preparation&amp;lt;BR&amp;gt;([[BioMicroCenter:NanoPore_Library_Prep|Nanopore]] and [[BioMicroCenter:PacBio_Library_Preparation|PacBio]])&lt;br /&gt;
 |}&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;[[BioMicroCenter:Walkup Services|Walk-up Instrumentation]]&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Includes: qPCR (LC480), Plate Readers (Varioskan/Synergy H1)&amp;lt;BR&amp;gt; BioAnalyzer, NanoDrop, Covaris, Pippin Prep&amp;lt;BR&amp;gt; Tecan/Chemagic automation&amp;lt;BR&amp;gt; MiSeq i100, 10x Chromium X&amp;lt;/small&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt; &lt;br /&gt;
[[BioMicroCenter:SingleCell|Single Cell]] and [[BioMicroCenter:SpTx|Spatial]]&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* 10X CHROMIUM &amp;lt;BR&amp;gt; &amp;lt;small&amp;gt; (5&#039;RNA, 3&#039;RNA, ATAC, multiome) &amp;lt;/small&amp;gt;&lt;br /&gt;
* 10X VISIUM &amp;lt;BR&amp;gt; &amp;lt;small&amp;gt; (Standard, High Density) &amp;lt;/small&amp;gt;&lt;br /&gt;
* ELEMENT AVITI24 (&amp;lt;i&amp;gt;in situ&amp;lt;/i&amp;gt; prep/sequencing)&lt;br /&gt;
 |}&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt; [[BioMicroCenter:Sequencing|Sequencing Technologies]] &amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* [[BioMicroCenter:ShortRead|Short Read]]&lt;br /&gt;
** High Yield (&amp;gt;1b reads): Illumina NovaSeqX (25b,10b)†&lt;br /&gt;
** Mid Yield (250m-1b reads): Element AVITI24&lt;br /&gt;
** Low Yield (1m-150m reads): SingularG4, Illumina MiSeq i100&lt;br /&gt;
* Long Read (1kb+) &amp;lt;small&amp;gt;&lt;br /&gt;
**[[BioMicroCenter:Oxford Nanopore Technologies|ONT PromethION]] &lt;br /&gt;
**[[BioMicroCenter:PacBio|PacBio Revio]]†&amp;lt;/small&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;Automation / Library Prep&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* [[BioMicroCenter:Tecan Freedom Evo|Liquid Handlers]] ([[BioMicroCenter:Tecan_Freedom_Evo#JOHNNY_5|Tecan EVO]]&lt;br /&gt;
* [[BioMicroCenter:Tecan_Freedom_Evo#SPT_LABTECH_MOSQUITO_HV|SPT Mosquito]])&lt;br /&gt;
* [[BioMicroCenter:Covaris|Covaris E220 and R230 Focused-ultrasonicators]]&lt;br /&gt;
* [[BioMicroCenter:PippinPrep|Pippin Prep automated electrophoresis system]]&lt;br /&gt;
* [[BioMicroCenter:Oligo_Synthesis| Oligo Synthesis]]&lt;br /&gt;
 |}&lt;br /&gt;
 |- &lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; colspan=3 align=&amp;quot;center&amp;quot; style=&amp;quot;background-color: lightsalmon; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;Informatics Services&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
 |-&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;[[BioMicroCenter:Analysis|Data Analysis]]&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* [https://igb.mit.edu/ Bioinformatic Consulting]&lt;br /&gt;
* [[BioMicroCenter:People#INFORMATICS_LAB|Informatics Staff]]&lt;br /&gt;
 |}&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;BioIT/Research Computing&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* [https://koch-institute-mit.gitbook.io/mit-data-management-analysis-core/ FAIR Data Management]&lt;br /&gt;
* [https://igb.mit.edu/computing-resources/active-data-storage Data Storage]&lt;br /&gt;
* [https://igb.mit.edu/computing-resources/luria-cluster Computing on Luria]&lt;br /&gt;
* [https://igb.mit.edu/data-management/globus Data Transfer (Globus)]&lt;br /&gt;
 |}&lt;br /&gt;
 |valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background-color:transparent; border:1px solid black&amp;quot;| &lt;br /&gt;
 {|&lt;br /&gt;
  |width=&amp;quot;10%&amp;quot; align=&amp;quot;left&amp;quot;|&amp;lt;BIG&amp;gt;&amp;lt;B&amp;gt;Education/Training/Seminars&amp;lt;/B&amp;gt;&amp;lt;/BIG&amp;gt;&lt;br /&gt;
* [https://igb.mit.edu/mini-courses Informatics/Computing Training Sessions]&lt;br /&gt;
* [[BioMicroCenter:Technology_Seminar_Series|Technology Seminar Series]]&lt;br /&gt;
* [http://mailman.mit.edu:/mailman/listinfo/biostuff Biostuff mailing list]&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
† - service will be performed in a sister core facility (Harvard, DFCI, or Broad)&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://wikis.mit.edu/confluence/display/bmc &#039;&#039;BMC Internal wiki&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
{{Footer}}&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131562</id>
		<title>Template:Footer</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131562"/>
		<updated>2026-06-01T17:49:42Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;footer&amp;quot; style=&amp;quot;display: flex; flex-direction: row; justify-content: space-evenly;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&lt;br /&gt;
* Building [https://whereis.mit.edu/?go=68 68-322]&lt;br /&gt;
* Cambridge, MA 02139&lt;br /&gt;
* [mailto:biomicro@mit.edu biomicro@mit.edu]&lt;br /&gt;
* 617-715-4533&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
==== Services ====&lt;br /&gt;
* [[BioMicroCenter:Sequencing | Bulk Sequencing]]&lt;br /&gt;
* [[BioMicroCenter:SingleCell | Single Cell]]&lt;br /&gt;
* [[BioMicroCenter:SpTx | Spatial Genomics]]&lt;br /&gt;
* [https://igb.mit.edu Informatics]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
==== Resources ====&lt;br /&gt;
* [[BioMicroCenter:FAQ | FAQs]]&lt;br /&gt;
* [[BioMicroCenter:Consulting | Consulting]]&lt;br /&gt;
* [[BioMicroCenter:Pricing | Grant Support]]&lt;br /&gt;
* [[BioMicroCenter:Acknowledgement | Acknowledgement]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131561</id>
		<title>Template:Footer</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131561"/>
		<updated>2026-06-01T17:45:48Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&lt;br /&gt;
* Building [https://whereis.mit.edu/?go=68 68-322]&lt;br /&gt;
* Cambridge, MA 02139&lt;br /&gt;
* [mailto:biomicro@mit.edu biomicro@mit.edu]&lt;br /&gt;
* 617-715-4533&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
==== Services ====&lt;br /&gt;
* [[BioMicroCenter:Sequencing | Bulk Sequencing]]&lt;br /&gt;
* [[BioMicroCenter:SingleCell | Single Cell]]&lt;br /&gt;
* [[BioMicroCenter:SpTx | Spatial Genomics]]&lt;br /&gt;
* [https://igb.mit.edu Informatics]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
==== Resources ====&lt;br /&gt;
* [[BioMicroCenter:FAQ | FAQs]]&lt;br /&gt;
* [[BioMicroCenter:Consulting | Consulting]]&lt;br /&gt;
* [[BioMicroCenter:Pricing | Grant Support]]&lt;br /&gt;
* [[BioMicroCenter:Acknowledgement | Acknowledgement]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131560</id>
		<title>Template:Footer</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131560"/>
		<updated>2026-06-01T17:40:02Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&lt;br /&gt;
* Building 68-322&lt;br /&gt;
* Cambridge, MA 02139&lt;br /&gt;
* [mailto:biomicro@mit.edu biomicro@mit.edu]&lt;br /&gt;
* 617-715-4533&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
==== Services ====&lt;br /&gt;
* [[BioMicroCenter:Sequencing | Bulk Sequencing]]&lt;br /&gt;
* [[BioMicroCenter:SingleCell | Single Cell]]&lt;br /&gt;
* [[BioMicroCenter:SpTx | Spatial Genomics]]&lt;br /&gt;
* [https://igb.mit.edu Informatics]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;bmc-footer-col&amp;quot;&amp;gt;&lt;br /&gt;
==== Resources ====&lt;br /&gt;
* [[BioMicroCenter:FAQ | FAQs]]&lt;br /&gt;
* [[BioMicroCenter:Consulting | Consulting]]&lt;br /&gt;
* [[BioMicroCenter:Pricing | Grant Support]]&lt;br /&gt;
* [[BioMicroCenter:Acknowledgement | Acknowledgement]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131556</id>
		<title>Template:Footer</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131556"/>
		<updated>2026-06-01T16:23:33Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Building 68-322&lt;br /&gt;
* Cambridge, MA 02139&lt;br /&gt;
* [mailto:biomicro@mit.edu biomicro@mit.edu]&lt;br /&gt;
* 617-715-4533&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
* [[BioMicroCenter:Sequencing | Bulk Sequencing]]&lt;br /&gt;
* [[BioMicroCenter:SingleCell | Single Cell]]&lt;br /&gt;
* [[BioMicroCenter:SpTx | Spatial Genomics]]&lt;br /&gt;
* [https://igb.mit.edu Informatics]&lt;br /&gt;
&lt;br /&gt;
==== Resources ====&lt;br /&gt;
* [[BioMicroCenter:FAQ | FAQs]]&lt;br /&gt;
* [[BioMicroCenter:Consulting | Consulting]]&lt;br /&gt;
* [[BioMicroCenter:Pricing | Grant Support]]&lt;br /&gt;
* [[BioMicroCenter:Acknowledgement | Acknowledgement]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131555</id>
		<title>Template:Footer</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131555"/>
		<updated>2026-06-01T16:23:24Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Building 68-322&lt;br /&gt;
* Cambridge, MA 02139&lt;br /&gt;
* [mailto:biomicro@mit.edu biomicro@mit.edu]&lt;br /&gt;
* 617-715-4533&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
* [[BioMicroCenter:Sequencing | Bulk Sequencing]]&lt;br /&gt;
* [[BioMicroCenter:SingleCell | Single Cell]]&lt;br /&gt;
* [[BioMicroCenter:SpTx | Spatial Genomics]]&lt;br /&gt;
* [https://igb.mit.edu | Informatics]&lt;br /&gt;
&lt;br /&gt;
==== Resources ====&lt;br /&gt;
* [[BioMicroCenter:FAQ | FAQs]]&lt;br /&gt;
* [[BioMicroCenter:Consulting | Consulting]]&lt;br /&gt;
* [[BioMicroCenter:Pricing | Grant Support]]&lt;br /&gt;
* [[BioMicroCenter:Acknowledgement | Acknowledgement]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131554</id>
		<title>Template:Footer</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=Template:Footer&amp;diff=131554"/>
		<updated>2026-06-01T16:10:56Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt; &amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;  * Building 68-322 * Cambridge, MA 02139 * [mailto:biomicro@mit.edu biomicro@mit.edu] * 617-715-4533  ==== Services ==== *  Bulk Sequencing *  Consulting *  Grant Support *  Acknowledgement &amp;lt;/div&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h4 id=&amp;quot;footer-title&amp;quot;&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Building 68-322&lt;br /&gt;
* Cambridge, MA 02139&lt;br /&gt;
* [mailto:biomicro@mit.edu biomicro@mit.edu]&lt;br /&gt;
* 617-715-4533&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
* [[BioMicroCenter:Sequencing | Bulk Sequencing]]&lt;br /&gt;
* [[BioMicroCenter:Consulting | Consulting]]&lt;br /&gt;
* [[BioMicroCenter:Pricing | Grant Support]]&lt;br /&gt;
* [[BioMicroCenter:Acknowledgement | Acknowledgement]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131553</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131553"/>
		<updated>2026-06-01T16:00:44Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131552</id>
		<title>User:Asoberan/common.css</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.css&amp;diff=131552"/>
		<updated>2026-06-01T16:00:29Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
	<entry>
		<id>http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131551</id>
		<title>User:Asoberan/common.js</title>
		<link rel="alternate" type="text/html" href="http://bmcwiki.mit.edu/index.php?title=User:Asoberan/common.js&amp;diff=131551"/>
		<updated>2026-06-01T15:54:24Z</updated>

		<summary type="html">&lt;p&gt;Asoberan: Created page with &amp;quot;/**  * BioMicro Center Wiki — Full DOM Replacement  * Paste into: User:USERNAME/common.js  *  * Strategy:  * 1. Extract wiki article content from MediaWiki&amp;#039;s DOM  * 2. Inject the complete shell structure  * 3. Place article content inside the shell  * MediaWiki still runs underneath for editing, search, login, etc.  */  ( function () {   &amp;#039;use strict&amp;#039;;    /* ── Extract nav from MediaWiki&amp;#039;s sidebar DOM ─────────────── */   function extra...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * BioMicro Center Wiki — Full DOM Replacement&lt;br /&gt;
 * Paste into: User:USERNAME/common.js&lt;br /&gt;
 *&lt;br /&gt;
 * Strategy:&lt;br /&gt;
 * 1. Extract wiki article content from MediaWiki&#039;s DOM&lt;br /&gt;
 * 2. Inject the complete shell structure&lt;br /&gt;
 * 3. Place article content inside the shell&lt;br /&gt;
 * MediaWiki still runs underneath for editing, search, login, etc.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ── Extract nav from MediaWiki&#039;s sidebar DOM ─────────────── */&lt;br /&gt;
  function extractNavFromDom() {&lt;br /&gt;
    var SKIP_IDS = {&lt;br /&gt;
      &#039;p-tb&#039;: 1, &#039;p-personal&#039;: 1, &#039;p-search&#039;: 1,&lt;br /&gt;
      &#039;p-logo&#039;: 1, &#039;p-cactions&#039;: 1, &#039;p-views&#039;: 1,&lt;br /&gt;
      &#039;p-lang&#039;: 1, &#039;p-namespaces&#039;: 1&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var portlets = Array.prototype.slice.call(&lt;br /&gt;
      document.querySelectorAll( &#039;[id^=&amp;quot;p-&amp;quot;]&#039; )&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    var nav = [];&lt;br /&gt;
    var currentUrl = window.location.href.split( &#039;?&#039; )[0];&lt;br /&gt;
&lt;br /&gt;
    portlets.forEach( function ( portlet ) {&lt;br /&gt;
      if ( SKIP_IDS[ portlet.id ] ) return;&lt;br /&gt;
&lt;br /&gt;
      var links = Array.prototype.slice.call(&lt;br /&gt;
        portlet.querySelectorAll( &#039;li a&#039; )&lt;br /&gt;
      ).map( function ( a ) {&lt;br /&gt;
        return { label: a.textContent.trim(), href: a.href };&lt;br /&gt;
      } ).filter( function ( item ) { return item.label &amp;amp;&amp;amp; item.href; } );&lt;br /&gt;
&lt;br /&gt;
      if ( !links.length ) return;&lt;br /&gt;
&lt;br /&gt;
      var headingEl = portlet.querySelector( &#039;[id$=&amp;quot;-label&amp;quot;], h3, h2&#039; );&lt;br /&gt;
      var sectionLabel = headingEl ? headingEl.textContent.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
      var isActive = links.some( function ( link ) {&lt;br /&gt;
        return link.href.split( &#039;?&#039; )[0] === currentUrl;&lt;br /&gt;
      } );&lt;br /&gt;
&lt;br /&gt;
      if ( links.length === 1 ) {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          isActive: links[0].href.split( &#039;?&#039; )[0] === currentUrl&lt;br /&gt;
        } );&lt;br /&gt;
      } else {&lt;br /&gt;
        nav.push( {&lt;br /&gt;
          label:    sectionLabel || links[0].label,&lt;br /&gt;
          href:     links[0].href,&lt;br /&gt;
          items:    links,&lt;br /&gt;
          isActive: isActive&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    return nav;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build topbar HTML ─────────────────────────────────────── */&lt;br /&gt;
  function buildTopbar() {&lt;br /&gt;
    var d = document.createElement( &#039;div&#039; );&lt;br /&gt;
    d.className = &#039;bmc-topbar&#039;;&lt;br /&gt;
    d.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;inner&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;mailto:biomicro@mit.edu&amp;quot;&amp;gt;biomicro@mit.edu&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;617-715-4533&#039; +&lt;br /&gt;
        &#039;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
        &#039;Building 68-322&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    return d;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build nav dropdown item ───────────────────────────────── */&lt;br /&gt;
  function buildDropdownMenu( items ) {&lt;br /&gt;
    var menu = document.createElement( &#039;div&#039; );&lt;br /&gt;
    menu.className = &#039;bmc-dropdown-menu&#039;;&lt;br /&gt;
    items.forEach( function ( item ) {&lt;br /&gt;
      if ( item.divider ) {&lt;br /&gt;
        var div = document.createElement( &#039;div&#039; );&lt;br /&gt;
        div.className = &#039;bmc-divider&#039;;&lt;br /&gt;
        menu.appendChild( div );&lt;br /&gt;
      } else if ( item.groupLabel ) {&lt;br /&gt;
        var gl = document.createElement( &#039;div&#039; );&lt;br /&gt;
        gl.className = &#039;bmc-group-label&#039;;&lt;br /&gt;
        gl.textContent = item.groupLabel;&lt;br /&gt;
        menu.appendChild( gl );&lt;br /&gt;
      } else {&lt;br /&gt;
        var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
        a.href = item.page ? mw.util.getUrl( item.page ) : item.href;&lt;br /&gt;
        a.textContent = item.label;&lt;br /&gt;
        if ( item.ext ) a.target = &#039;_blank&#039;;&lt;br /&gt;
        menu.appendChild( a );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
    return menu;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build full header ─────────────────────────────────────── */&lt;br /&gt;
  function buildHeader( currentPage, nav ) {&lt;br /&gt;
    /* Logo */&lt;br /&gt;
    var logo = document.createElement( &#039;a&#039; );&lt;br /&gt;
    logo.href = mw.util.getUrl( &#039;BioMicroCenter&#039; );&lt;br /&gt;
    logo.className = &#039;bmc-logo&#039;;&lt;br /&gt;
    logo.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;img class=&amp;quot;bmc-logo-img&amp;quot; src=&amp;quot;https://bmcwiki.mit.edu/images/c/c9/Logo.png&amp;quot; alt=&amp;quot;MIT BioMicro Center&amp;quot; /&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Nav */&lt;br /&gt;
    var ul = document.createElement( &#039;ul&#039; );&lt;br /&gt;
    nav.forEach( function ( item ) {&lt;br /&gt;
      var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
      if ( item.isActive ) li.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
      if ( item.items ) li.classList.add( &#039;bmc-dropdown&#039; );&lt;br /&gt;
&lt;br /&gt;
      var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
      a.href = item.page ? mw.util.getUrl( item.page ) : ( item.href || &#039;#&#039; );&lt;br /&gt;
      a.textContent = item.label;&lt;br /&gt;
      li.appendChild( a );&lt;br /&gt;
&lt;br /&gt;
      if ( item.items ) {&lt;br /&gt;
        li.appendChild( buildDropdownMenu( item.items ) );&lt;br /&gt;
      }&lt;br /&gt;
      ul.appendChild( li );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    var navEl = document.createElement( &#039;nav&#039; );&lt;br /&gt;
    navEl.className = &#039;bmc-nav&#039;;&lt;br /&gt;
    navEl.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
    /* Search */&lt;br /&gt;
    var searchForm = document.createElement( &#039;form&#039; );&lt;br /&gt;
    searchForm.className = &#039;bmc-search-form&#039;;&lt;br /&gt;
    searchForm.method = &#039;get&#039;;&lt;br /&gt;
    searchForm.action = &#039;/index.php&#039;;&lt;br /&gt;
    searchForm.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;Special:Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;input type=&amp;quot;search&amp;quot; name=&amp;quot;search&amp;quot; placeholder=&amp;quot;Search wiki…&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;button type=&amp;quot;submit&amp;quot; aria-label=&amp;quot;Search&amp;quot;&amp;gt;&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;14&amp;quot; height=&amp;quot;14&amp;quot; viewBox=&amp;quot;0 0 24 24&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;currentColor&amp;quot; stroke-width=&amp;quot;2.5&amp;quot; stroke-linecap=&amp;quot;round&amp;quot; stroke-linejoin=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;11&amp;quot; cy=&amp;quot;11&amp;quot; r=&amp;quot;8&amp;quot;/&amp;gt;&amp;lt;line x1=&amp;quot;21&amp;quot; y1=&amp;quot;21&amp;quot; x2=&amp;quot;16.65&amp;quot; y2=&amp;quot;16.65&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var right = document.createElement( &#039;div&#039; );&lt;br /&gt;
    right.className = &#039;bmc-header-right&#039;;&lt;br /&gt;
    right.appendChild( navEl );&lt;br /&gt;
    right.appendChild( searchForm );&lt;br /&gt;
&lt;br /&gt;
    /* Inner wrapper */&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-header-inner&#039;;&lt;br /&gt;
    inner.appendChild( logo );&lt;br /&gt;
    inner.appendChild( right );&lt;br /&gt;
&lt;br /&gt;
    var header = document.createElement( &#039;header&#039; );&lt;br /&gt;
    header.className = &#039;bmc-header&#039;;&lt;br /&gt;
    header.appendChild( inner );&lt;br /&gt;
    return header;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build page hero ───────────────────────────────────────── */&lt;br /&gt;
  function buildHero( titleText ) {&lt;br /&gt;
    var crumb = document.createElement( &#039;div&#039; );&lt;br /&gt;
    crumb.className = &#039;bmc-breadcrumb&#039;;&lt;br /&gt;
    crumb.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl( &#039;BioMicroCenter&#039; ) + &#039;&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;
      document.createTextNode( titleText ).textContent; // plain text, no XSS&lt;br /&gt;
&lt;br /&gt;
    var h1 = document.createElement( &#039;h1&#039; );&lt;br /&gt;
    h1.textContent = titleText;&lt;br /&gt;
&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;inner&#039;;&lt;br /&gt;
    inner.appendChild( crumb );&lt;br /&gt;
    inner.appendChild( h1 );&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement( &#039;div&#039; );&lt;br /&gt;
    hero.className = &#039;bmc-page-hero&#039;;&lt;br /&gt;
    hero.appendChild( inner );&lt;br /&gt;
    return hero;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build sidebar TOC from MediaWiki #toc or heading scan ─── */&lt;br /&gt;
  function buildSidebarToc( mwToc, contentEl ) {&lt;br /&gt;
    var toc = document.createElement( &#039;div&#039; );&lt;br /&gt;
    toc.className = &#039;bmc-toc&#039;;&lt;br /&gt;
&lt;br /&gt;
    var h3 = document.createElement( &#039;h3&#039; );&lt;br /&gt;
    h3.textContent = &#039;On this page&#039;;&lt;br /&gt;
    toc.appendChild( h3 );&lt;br /&gt;
&lt;br /&gt;
    var list;&lt;br /&gt;
&lt;br /&gt;
    if ( mwToc ) {&lt;br /&gt;
      /* Clone only the list from the MediaWiki TOC */&lt;br /&gt;
      var mwList = mwToc.querySelector( &#039;ul&#039; );&lt;br /&gt;
      if ( mwList ) {&lt;br /&gt;
        list = mwList.cloneNode( true );&lt;br /&gt;
        /* Mark sub-items */&lt;br /&gt;
        list.querySelectorAll( &#039;li li&#039; ).forEach( function ( li ) {&lt;br /&gt;
          li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    } else if ( contentEl ) {&lt;br /&gt;
      /* Fall back to scanning h2/h3 headings directly */&lt;br /&gt;
      var headings = Array.prototype.slice.call(&lt;br /&gt;
        contentEl.querySelectorAll( &#039;h2, h3&#039; )&lt;br /&gt;
      );&lt;br /&gt;
      if ( headings.length &amp;gt; 0 ) {&lt;br /&gt;
        list = document.createElement( &#039;ul&#039; );&lt;br /&gt;
        headings.forEach( function ( heading ) {&lt;br /&gt;
          var anchor = heading.querySelector( &#039;.mw-headline&#039; );&lt;br /&gt;
          if ( !anchor || !anchor.id ) return;&lt;br /&gt;
          var li = document.createElement( &#039;li&#039; );&lt;br /&gt;
          if ( heading.tagName === &#039;H3&#039; ) li.classList.add( &#039;bmc-sub&#039; );&lt;br /&gt;
          var a = document.createElement( &#039;a&#039; );&lt;br /&gt;
          a.href = &#039;#&#039; + anchor.id;&lt;br /&gt;
          a.textContent = anchor.textContent.trim();&lt;br /&gt;
          li.appendChild( a );&lt;br /&gt;
          list.appendChild( li );&lt;br /&gt;
        } );&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( !list || list.childNodes.length === 0 ) return null;&lt;br /&gt;
&lt;br /&gt;
    toc.appendChild( list );&lt;br /&gt;
&lt;br /&gt;
    var aside = document.createElement( &#039;aside&#039; );&lt;br /&gt;
    aside.className = &#039;bmc-sidebar&#039;;&lt;br /&gt;
    aside.appendChild( toc );&lt;br /&gt;
    return aside;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Build footer ──────────────────────────────────────────── */&lt;br /&gt;
  function buildFooter() {&lt;br /&gt;
    var u = mw.util.getUrl;&lt;br /&gt;
    var inner = document.createElement( &#039;div&#039; );&lt;br /&gt;
    inner.className = &#039;bmc-footer-inner&#039;;&lt;br /&gt;
    inner.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;h4&amp;gt;MIT BioMicro Center&amp;lt;/h4&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;ul&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;Building 68-322&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;Cambridge, MA 02139&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&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;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;617-715-4533&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/ul&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;
        &#039;&amp;lt;h4&amp;gt;Services&amp;lt;/h4&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;ul&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:Sequencing&#039; ) + &#039;&amp;quot;&amp;gt;Bulk Sequencing&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:SingleCell&#039; ) + &#039;&amp;quot;&amp;gt;Single Cell&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:SpTx&#039; ) + &#039;&amp;quot;&amp;gt;Spatial Genomics&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;https://igb.mit.edu/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Informatics&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/ul&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;
        &#039;&amp;lt;h4&amp;gt;Resources&amp;lt;/h4&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;ul&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:FAQ&#039; ) + &#039;&amp;quot;&amp;gt;FAQs&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:Consulting&#039; ) + &#039;&amp;quot;&amp;gt;Consulting&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:Pricing&#039; ) + &#039;&amp;quot;&amp;gt;Grant Support &amp;amp;amp; Pricing&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&#039; + u( &#039;BioMicroCenter:Acknowledgement&#039; ) + &#039;&amp;quot;&amp;gt;Acknowledgements&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;/ul&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var bottom = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bottom.className = &#039;bmc-footer-bottom&#039;;&lt;br /&gt;
    bottom.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;span&amp;gt;&amp;amp;copy; &#039; + new Date().getFullYear() + &#039; MIT BioMicro Center&amp;lt;/span&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;span&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;&#039; + u( &#039;Special:UserLogin&#039; ) + &#039;&amp;quot;&amp;gt;Log in&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
        &#039; &amp;amp;nbsp;|&amp;amp;nbsp; &#039; +&lt;br /&gt;
        &#039;&amp;lt;a href=&amp;quot;https://accessibility.mit.edu&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Accessibility&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    var footer = document.createElement( &#039;footer&#039; );&lt;br /&gt;
    footer.className = &#039;bmc-footer&#039;;&lt;br /&gt;
    footer.appendChild( inner );&lt;br /&gt;
    footer.appendChild( bottom );&lt;br /&gt;
    return footer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Smooth scroll for anchor links ───────────────────────── */&lt;br /&gt;
  function initSmoothScroll( container ) {&lt;br /&gt;
    container.addEventListener( &#039;click&#039;, function ( e ) {&lt;br /&gt;
      var a = e.target.closest( &#039;a[href^=&amp;quot;#&amp;quot;]&#039; );&lt;br /&gt;
      if ( !a ) return;&lt;br /&gt;
      var id = decodeURIComponent( a.getAttribute( &#039;href&#039; ).slice( 1 ) );&lt;br /&gt;
      var target = document.getElementById( id );&lt;br /&gt;
      if ( target ) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
        target.scrollIntoView( { behavior: &#039;smooth&#039;, block: &#039;start&#039; } );&lt;br /&gt;
        history.pushState( null, &#039;&#039;, &#039;#&#039; + id );&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Fix row separators on tables with rowspan cells ──────── */&lt;br /&gt;
  function fixRowspanSeparators( container ) {&lt;br /&gt;
    container.querySelectorAll( &#039;.wikitable&#039; ).forEach( function ( table ) {&lt;br /&gt;
      var tbody = table.querySelector( &#039;tbody&#039; ) || table;&lt;br /&gt;
      var rows = Array.from( tbody.querySelectorAll( &#039;tr&#039; ) );&lt;br /&gt;
      if ( !rows.length ) return;&lt;br /&gt;
&lt;br /&gt;
      rows.forEach( function ( row, rowIdx ) {&lt;br /&gt;
        row.querySelectorAll( &#039;td[rowspan], th[rowspan]&#039; ).forEach( function ( cell ) {&lt;br /&gt;
          var span = parseInt( cell.getAttribute( &#039;rowspan&#039; ), 10 );&lt;br /&gt;
          if ( !span || span &amp;lt;= 1 ) return;&lt;br /&gt;
&lt;br /&gt;
          cell.style.position = &#039;relative&#039;;&lt;br /&gt;
&lt;br /&gt;
          for ( var i = 1; i &amp;lt; span; i++ ) {&lt;br /&gt;
            var targetRow = rows[ rowIdx + i ];&lt;br /&gt;
            if ( !targetRow ) break;&lt;br /&gt;
&lt;br /&gt;
            var cellRect  = cell.getBoundingClientRect();&lt;br /&gt;
            var rowRect   = targetRow.getBoundingClientRect();&lt;br /&gt;
            var offsetTop = rowRect.top - cellRect.top;&lt;br /&gt;
&lt;br /&gt;
            var sep = document.createElement( &#039;div&#039; );&lt;br /&gt;
            sep.style.cssText =&lt;br /&gt;
              &#039;position:absolute;left:0;right:0;&#039; +&lt;br /&gt;
              &#039;top:&#039; + offsetTop + &#039;px;&#039; +&lt;br /&gt;
              &#039;height:1px;background:#e0e0e0;&#039; +&lt;br /&gt;
              &#039;pointer-events:none;z-index:1;&#039;;&lt;br /&gt;
            cell.appendChild( sep );&lt;br /&gt;
          }&lt;br /&gt;
        } );&lt;br /&gt;
      } );&lt;br /&gt;
    } );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Edit bar for logged-in users ─────────────────────────── */&lt;br /&gt;
  function buildEditBar( currentPage ) {&lt;br /&gt;
    if ( !mw.config.get( &#039;wgUserId&#039; ) ) return null;&lt;br /&gt;
    var bar = document.createElement( &#039;div&#039; );&lt;br /&gt;
    bar.className = &#039;bmc-edit-bar&#039;;&lt;br /&gt;
    var editHref = mw.util.getUrl( currentPage, { action: &#039;edit&#039; } );&lt;br /&gt;
    var histHref = mw.util.getUrl( currentPage, { action: &#039;history&#039; } );&lt;br /&gt;
    var talkHref = mw.util.getUrl( &#039;Talk:&#039; + currentPage );&lt;br /&gt;
    bar.innerHTML =&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + editHref + &#039;&amp;quot;&amp;gt;Edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + histHref + &#039;&amp;quot;&amp;gt;History&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + talkHref + &#039;&amp;quot;&amp;gt;Talk&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    return bar;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Main: build and inject the shell ─────────────────────── */&lt;br /&gt;
  function buildShell( nav ) {&lt;br /&gt;
    var currentPage = mw.config.get( &#039;wgPageName&#039; ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* 1. Extract wiki content BEFORE any DOM manipulation */&lt;br /&gt;
    var mwContentText = document.getElementById( &#039;mw-content-text&#039; );&lt;br /&gt;
    if ( !mwContentText ) return; /* not a content page, bail */&lt;br /&gt;
&lt;br /&gt;
    var contentClone = mwContentText.cloneNode( true );&lt;br /&gt;
&lt;br /&gt;
    /* 2. Extract page title */&lt;br /&gt;
    var titleEl = document.getElementById( &#039;firstHeading&#039; ) ||&lt;br /&gt;
      document.querySelector( &#039;.mw-first-heading&#039; );&lt;br /&gt;
    var titleText = titleEl&lt;br /&gt;
      ? titleEl.textContent.trim()&lt;br /&gt;
      : ( mw.config.get( &#039;wgTitle&#039; ) || &#039;BioMicro Center&#039; );&lt;br /&gt;
&lt;br /&gt;
    /* 3. Extract MediaWiki TOC from the cloned content */&lt;br /&gt;
    var mwToc = contentClone.querySelector( &#039;#toc, .toc&#039; );&lt;br /&gt;
    if ( mwToc ) mwToc.parentNode.removeChild( mwToc ); /* remove from content body */&lt;br /&gt;
&lt;br /&gt;
    /* 3b. Hide the BMC logo/header sticker by exact image filename.&lt;br /&gt;
           The sticker is BMC_Header_2020_3.png (from the {{BioMicroCenter}} template)&lt;br /&gt;
           and bmc_logo_square.png. Target the nearest meaningful container so the&lt;br /&gt;
           surrounding content (nav links, table structure) is preserved. */&lt;br /&gt;
    contentClone.querySelectorAll( &#039;img&#039; ).forEach( function ( img ) {&lt;br /&gt;
      var src = img.getAttribute( &#039;src&#039; ) || &#039;&#039;;&lt;br /&gt;
      if ( /BMC_Header|bmc_logo_square|Bmc_logo|\/Logo\.png/i.test( src ) ) {&lt;br /&gt;
        var container = img.closest( &#039;.thumb&#039; ) || img.closest( &#039;figure&#039; ) || img.closest( &#039;td&#039; );&lt;br /&gt;
        if ( container ) {&lt;br /&gt;
          container.style.display = &#039;none&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
          img.style.display = &#039;none&#039;;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 4. Build shell elements */&lt;br /&gt;
    var topbar = buildTopbar();&lt;br /&gt;
    var header = buildHeader( currentPage, nav );&lt;br /&gt;
    var hero   = buildHero( titleText );&lt;br /&gt;
&lt;br /&gt;
    /* Page layout grid */&lt;br /&gt;
    var layout = document.createElement( &#039;div&#039; );&lt;br /&gt;
    layout.className = &#039;bmc-page-layout&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* Sidebar — skip on the home page */&lt;br /&gt;
    var isHome = ( currentPage === &#039;BioMicroCenter&#039; ||&lt;br /&gt;
                   currentPage === &#039;Main_Page&#039; );&lt;br /&gt;
    var sidebar = isHome ? null : buildSidebarToc( mwToc, contentClone );&lt;br /&gt;
    if ( sidebar ) {&lt;br /&gt;
      layout.appendChild( sidebar );&lt;br /&gt;
    } else {&lt;br /&gt;
      /* No TOC — collapse to single-column via inline style */&lt;br /&gt;
      layout.style.gridTemplateColumns = &#039;1fr&#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Main content area */&lt;br /&gt;
    var main = document.createElement( &#039;main&#039; );&lt;br /&gt;
    main.className = &#039;bmc-content&#039;;&lt;br /&gt;
    var editBar = buildEditBar( currentPage );&lt;br /&gt;
    if ( editBar ) { main.appendChild( editBar ); }&lt;br /&gt;
    main.appendChild( contentClone );&lt;br /&gt;
    layout.appendChild( main );&lt;br /&gt;
&lt;br /&gt;
    var footer = buildFooter();&lt;br /&gt;
&lt;br /&gt;
    /* 5. Build wrapper */&lt;br /&gt;
    var wrapper = document.createElement( &#039;div&#039; );&lt;br /&gt;
    wrapper.id = &#039;bmc-wrapper&#039;;&lt;br /&gt;
    wrapper.appendChild( topbar );&lt;br /&gt;
    wrapper.appendChild( header );&lt;br /&gt;
    wrapper.appendChild( hero );&lt;br /&gt;
    wrapper.appendChild( layout );&lt;br /&gt;
    wrapper.appendChild( footer );&lt;br /&gt;
&lt;br /&gt;
    /* 6. Inject into body (prepend so it appears first) */&lt;br /&gt;
    document.body.insertBefore( wrapper, document.body.firstChild );&lt;br /&gt;
&lt;br /&gt;
    /* 7. Add class immediately so the CSS rule kicks in and hides&lt;br /&gt;
          all original MW elements (works for any skin version) */&lt;br /&gt;
    document.body.classList.add( &#039;bmc-active&#039; );&lt;br /&gt;
&lt;br /&gt;
    /* 8. Smooth scroll */&lt;br /&gt;
    initSmoothScroll( main );&lt;br /&gt;
    initSmoothScroll( sidebar || main );&lt;br /&gt;
&lt;br /&gt;
    /* 9. Auto-style plain tables in content */&lt;br /&gt;
    main.querySelectorAll(&lt;br /&gt;
      &#039;.mw-parser-output table:not(.wikitable):not(.infobox):not(.navbox)&#039;&lt;br /&gt;
    ).forEach( function ( t ) {&lt;br /&gt;
      t.classList.add( &#039;wikitable&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* 10. Fix row separators on rowspan tables */&lt;br /&gt;
    requestAnimationFrame( function () {&lt;br /&gt;
      fixRowspanSeparators( main );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ── Entry point ───────────────────────────────────────────── */&lt;br /&gt;
  mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    /* Skip special pages (edit forms, history, etc.) to not break them */&lt;br /&gt;
    var ns     = mw.config.get( &#039;wgNamespaceNumber&#039; );&lt;br /&gt;
    var action = mw.config.get( &#039;wgAction&#039; );&lt;br /&gt;
    if ( action !== &#039;view&#039; ) return;&lt;br /&gt;
    if ( ns &amp;lt; 0 ) return; /* Special: pages */&lt;br /&gt;
&lt;br /&gt;
    var nav = extractNavFromDom();&lt;br /&gt;
    buildShell( nav );&lt;br /&gt;
  } );&lt;br /&gt;
&lt;br /&gt;
} )();&lt;/div&gt;</summary>
		<author><name>Asoberan</name></author>
	</entry>
</feed>