diff --git a/website/globals.css b/website/globals.css
new file mode 100644
index 000000000..9cb875d28
--- /dev/null
+++ b/website/globals.css
@@ -0,0 +1,116 @@
+/* Minimal reset (meyer-reset v2 inlined to eliminate extra request) */
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after, q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+:root {
+ color-scheme: dark;
+ --color-bg-page: #11131b;
+ --color-bg-dark: #0c0e16;
+ --color-bg-card: #282a3280;
+ --color-bg-section: #191b2380;
+ --color-bg-terminal-head: #32343d;
+ --color-bg-overlay: #b4c5ff1a;
+ --color-bg-btn: #2563eb;
+ --color-bg-btn-hover: #1d4ed8;
+ --color-text-primary: #e1e2ed;
+ --color-text-secondary: #c3c6d7;
+ --color-text-accent: #b4c5ff;
+ --color-text-btn: #eeefff;
+ --color-text-terminal-blue: #0267b8;
+ --color-border: #434655;
+ --color-border-nav: #4346554c;
+ --color-border-footer: #43465533;
+ --color-dot-red: #ffb4ab;
+ --color-dot-orange: #ffb596;
+ --color-dot-blue: #a4c9ff;
+ --color-gradient-start: rgba(180,197,255,1);
+ --color-gradient-end: rgba(255,181,150,1);
+ --font-body: "Geist", Helvetica;
+ --font-heading: "Space Grotesk", Helvetica;
+ --font-mono: "JetBrains Mono", Helvetica;
+ --font-label: "42dot Sans", Helvetica;
+ --radius-btn: 12px;
+ --radius-card: 16px;
+ --radius-full: 9999px;
+ --content-max: 1280px;
+ --content-narrow: 896px;
+ --transition-fast: 160ms ease;
+}
+
+* {
+ -webkit-font-smoothing: antialiased;
+ box-sizing: border-box;
+}
+
+html {
+ scroll-behavior: smooth;
+}
+
+html, body {
+ margin: 0px;
+ height: 100%;
+}
+
+button:focus-visible {
+ outline: 2px solid #4a90e2;
+ outline-offset: 2px;
+}
+
+a {
+ text-decoration: none;
+}
+
+.skip-link {
+ position: absolute;
+ top: -100%;
+ left: 0;
+ z-index: 100;
+ padding: 8px 16px;
+ background: var(--color-bg-btn);
+ color: var(--color-text-btn);
+ font-family: var(--font-body);
+ font-size: 14px;
+ text-decoration: none;
+ transition: top 160ms ease;
+}
+.skip-link:focus {
+ top: 0;
+}
diff --git a/website/main.html b/website/main.html
new file mode 100644
index 000000000..f6a3b90ca
--- /dev/null
+++ b/website/main.html
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+OpenHCS
+
+
+
+
+
+
+
+
+
+
+
+Skip to main content
+
+
+
+
+
+
+
OpenHCS
+
+
+
The open-standard framework for high-content screening. Transform raw multi-well plate data from ImageXpress and Opera Phenix into actionable biological insights.
+
+
+
+
+
+
+
Complete Analysis Toolkit In One App
+
+
+
+
+
+
High-Resolution Image Viewer
+
+
+
Handle multi-terabyte datasets with multi-level tiling and real-time panning.
+
+
+
+
+
+
+
+
Real-time Pipelines
+
+
+
Visualize every step of your image transformation pipeline as it happens.
+
+
+
+
+
+
+
+
+
+
+
Analysis History Slider
+
+
+
Compare results across different pipeline versions and time points for fast iteration and troubleshooting.
+
+
+
+
+
+
+
+
+
+
+
Installation
+
+
+
Get started in seconds with pip
+
+
+
+
+
+
+
+
# Basic installation with GUI, visualizers and GPU support
+
+
+
+
+
pip install openhcs[gui,viz,gpu]
+
+
+
+
+
+
+
+
+
+
+
+
Requirements
+
+
+
Python 3.8 or higher Optional: CUDA-compatible GPU for acceleration Supported OS: Windows, macOS, Linux
+
+
+
+
+
Quick Start
+
+
+
Install OpenHCS using pip (above) Launch the GUI: openhcs Load your microscopy images and start building pipelines
+
+
+
+
+
+
+
Get in Touch
+
+
+
For technical inquiries, academic licensing, or collaboration requests, please use the channels below.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/styles.css b/website/styles.css
new file mode 100644
index 000000000..0b0377a87
--- /dev/null
+++ b/website/styles.css
@@ -0,0 +1,1387 @@
+/* ── Layout & Navigation ── */
+
+.html-body {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ position: relative;
+ width: 100%;
+ min-height: 100vh;
+ overflow-x: hidden;
+ background-color: var(--color-bg-page);
+}
+
+.html-body .main {
+ display: flex;
+ flex-direction: column;
+ align-self: stretch;
+ width: 100%;
+ height: auto;
+ gap: 0;
+ padding-top: 72px;
+}
+
+.html-body .top-navigation-bar {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: center;
+ width: 100%;
+ height: 72px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 10;
+ background-color: var(--color-bg-card);
+ border-bottom: 1px solid var(--color-border-nav);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+}
+
+.html-body .container-20 {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex: 1;
+ margin: 0 auto;
+ padding: 0;
+ width: min(calc(100% - 64px), var(--content-max));
+}
+
+.html-body .container-21 {
+ display: inline-flex;
+ align-items: center;
+ flex: 0 0 auto;
+ gap: 32px;
+}
+
+.html-body .div-2,
+.html-body .link-margin {
+ display: inline-flex;
+ flex-direction: column;
+ align-items: flex-start;
+ flex: 0 0 auto;
+}
+
+.html-body .nav-links {
+ display: flex;
+ align-items: center;
+ gap: 32px;
+}
+
+.html-body .nav-toggle {
+ position: absolute;
+ opacity: 0;
+ pointer-events: none;
+ width: 0;
+ height: 0;
+}
+
+.html-body .hamburger {
+ display: none;
+ flex-direction: column;
+ justify-content: center;
+ gap: 5px;
+ cursor: pointer;
+ padding: 8px;
+ z-index: 20;
+}
+
+.html-body .hamburger span {
+ display: block;
+ width: 24px;
+ height: 2px;
+ background-color: var(--color-text-accent);
+ border-radius: 2px;
+ transition: transform var(--transition-fast), opacity var(--transition-fast);
+}
+
+.html-body .nav-toggle:checked + .hamburger span:nth-child(1) {
+ transform: rotate(45deg) translate(5px, 5px);
+}
+
+.html-body .nav-toggle:checked + .hamburger span:nth-child(2) {
+ opacity: 0;
+}
+
+.html-body .nav-toggle:checked + .hamburger span:nth-child(3) {
+ transform: rotate(-45deg) translate(5px, -5px);
+}
+
+.html-body .text-5 {
+ display: flex;
+ align-items: center;
+ font-family: var(--font-heading);
+ font-weight: 700;
+ color: var(--color-text-accent);
+ font-size: 24px;
+ letter-spacing: -0.6px;
+ line-height: 33.6px;
+ white-space: nowrap;
+ width: fit-content;
+ text-decoration: none;
+}
+
+.html-body .text-6 {
+ display: flex;
+ align-items: center;
+ font-family: var(--font-body);
+ font-weight: 600;
+ color: var(--color-text-accent);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+ white-space: nowrap;
+ width: fit-content;
+ text-decoration: none;
+}
+
+/* ── Hero Section ── */
+
+.html-body .hero-section {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 16px;
+ width: 100%;
+ height: 504px;
+ padding: 120px 32px 46px;
+ position: relative;
+ margin: 0 auto;
+}
+
+.html-body .overlay-blur {
+ position: absolute;
+ top: -96px;
+ left: calc(50% - 300px);
+ width: 600px;
+ height: 600px;
+ background-color: var(--color-bg-overlay);
+ border-radius: var(--radius-full);
+ filter: blur(60px);
+}
+
+.html-body .div {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ max-width: 672px;
+ width: min(100%, 672px);
+ flex: 0 0 auto;
+}
+
+.html-body .container-2 {
+ display: flex;
+ align-items: flex-start;
+ justify-content: center;
+ gap: 16.01px;
+ padding: 16px 0 0;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .button {
+ all: unset;
+ box-sizing: border-box;
+ display: inline-flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 16px 32px 17.39px;
+ flex: 0 0 auto;
+ background-color: var(--color-bg-btn);
+ border-radius: var(--radius-btn);
+ cursor: pointer;
+}
+
+.html-body .text-wrapper {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-family: var(--font-body);
+ font-weight: 600;
+ color: var(--color-text-btn);
+ font-size: 18px;
+ text-align: center;
+ letter-spacing: 0;
+ line-height: 32.4px;
+ white-space: nowrap;
+ width: fit-content;
+}
+
+.html-body .div-wrapper {
+ all: unset;
+ box-sizing: border-box;
+ display: inline-flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 15px 32px 16.39px;
+ flex: 0 0 auto;
+ border-radius: var(--radius-btn);
+ border: 1px solid var(--color-border);
+ cursor: pointer;
+}
+
+.html-body .text-2 {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-family: var(--font-body);
+ font-weight: 600;
+ color: var(--color-text-primary);
+ font-size: 18px;
+ text-align: center;
+ letter-spacing: 0;
+ line-height: 32.4px;
+ white-space: nowrap;
+ width: fit-content;
+}
+
+/* ── Capabilities Section ── */
+
+.html-body .section-capabilities {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ width: 100%;
+ height: auto;
+ padding: 120px 32px 112px;
+ background-color: var(--color-bg-section);
+}
+
+.html-body .container-3 {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ grid-template-rows: 401.19px;
+ align-items: stretch;
+ gap: 32px;
+ margin: 0 auto;
+ width: min(calc(100% - 64px), var(--content-max));
+}
+
+.html-body .container-4 {
+ grid-row: 1 / 2;
+ grid-column: 1 / 2;
+ align-self: center;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 32px;
+ width: 100%;
+ height: fit-content;
+ min-width: 0;
+}
+
+.html-body .div-wrapper-2 {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .unified-bioimaging {
+ align-self: stretch;
+ font-family: var(--font-heading);
+ font-weight: 300;
+ color: var(--color-text-primary);
+ font-size: 48px;
+ letter-spacing: 0;
+ line-height: 57.6px;
+ margin: 0;
+}
+
+.html-body .p {
+ display: flex;
+ align-items: center;
+ align-self: stretch;
+ font-family: var(--font-body);
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 26px;
+}
+
+.html-body .container-5 {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 16px;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .container-6 {
+ display: flex;
+ align-items: flex-start;
+ gap: 16px;
+ flex-wrap: wrap;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .text-3 {
+ display: flex;
+ align-items: center;
+ width: fit-content;
+ font-family: var(--font-heading);
+ font-weight: 400;
+ color: var(--color-text-primary);
+ font-size: 18px;
+ letter-spacing: 0;
+ line-height: 28px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+ margin: 0;
+}
+
+.html-body .container-7 {
+ grid-row: 1 / 2;
+ grid-column: 2 / 3;
+ align-self: center;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ width: 100%;
+ height: fit-content;
+ min-width: 0;
+ position: relative;
+}
+
+.html-body .gradient-blur {
+ position: absolute;
+ width: calc(100% + 8px);
+ height: calc(100% + 8px);
+ top: -4px;
+ left: -4px;
+ border-radius: var(--radius-card);
+ filter: blur(4px);
+ background: linear-gradient(90deg, var(--color-gradient-start) 0%, var(--color-gradient-end) 100%);
+ opacity: 0.25;
+}
+
+.html-body .background-border {
+ display: block;
+ align-self: stretch;
+ width: 100%;
+ height: 333px;
+ object-fit: cover;
+ border-radius: var(--radius-card);
+ border: 1px solid var(--color-border);
+}
+
+/* ── Features Section ── */
+
+.html-body .section-feature-demo {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 36px;
+ width: 100%;
+ height: auto;
+ padding: 59px 32px 112px;
+}
+
+.html-body .text-wrapper-3 {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: fit-content;
+ font-family: var(--font-heading);
+ font-weight: 300;
+ color: var(--color-text-primary);
+ font-size: 48px;
+ text-align: center;
+ letter-spacing: 0;
+ line-height: 57.6px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+ word-break: normal;
+ max-width: 100%;
+ margin: 0;
+}
+
+.html-body .container-8 {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ grid-template-rows: auto auto;
+ align-items: stretch;
+ gap: 32px;
+ margin: 0 auto;
+ width: min(calc(100% - 64px), var(--content-max));
+}
+
+.html-body .image-viewer,
+.html-body .real-time,
+.html-body .history-slider {
+ border-radius: var(--radius-card);
+ overflow: hidden;
+ background-color: var(--color-bg-card);
+ border: 1px solid var(--color-border);
+ backdrop-filter: blur(6px);
+ -webkit-backdrop-filter: blur(6px);
+ width: 100%;
+ height: auto;
+}
+
+.html-body .image-viewer {
+ grid-row: 1 / 2;
+ grid-column: 1 / 3;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-self: stretch;
+ min-width: 0;
+ min-height: 490px;
+}
+
+.html-body .horizontal-border {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 8px;
+ padding: 24px;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+ border-bottom: 1px solid var(--color-border);
+}
+
+.html-body .text-wrapper-4 {
+ display: flex;
+ align-items: center;
+ align-self: stretch;
+ font-family: var(--font-heading);
+ font-weight: 400;
+ color: var(--color-text-primary);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+ max-width: 100%;
+ margin: 0;
+}
+
+.html-body .background {
+ display: block;
+ align-self: stretch;
+ width: 100%;
+ height: 428.88px;
+ object-fit: cover;
+ border-bottom: 1px solid var(--color-border);
+ flex: 1 1 auto;
+ min-height: 360px;
+}
+
+.html-body .real-time {
+ grid-row: 1 / 2;
+ grid-column: 3 / 5;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-self: stretch;
+ min-width: 0;
+ min-height: 490px;
+}
+
+.html-body .container-wrapper {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: center;
+ align-self: stretch;
+ width: 100%;
+ height: auto;
+ min-height: 360px;
+ padding: 32px 24px;
+ background-color: var(--color-bg-dark);
+ flex: 1 1 auto;
+}
+
+.html-body .container-9 {
+ display: block;
+ width: 100%;
+ height: 360px;
+ object-fit: cover;
+}
+
+.html-body .history-slider {
+ grid-row: 2 / 3;
+ grid-column: 1 / 5;
+ justify-self: start;
+ align-self: start;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 32px;
+ padding: 24px;
+}
+
+.html-body .text-4 {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ font-family: var(--font-heading);
+ font-weight: 400;
+ color: var(--color-text-primary);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+ max-width: 100%;
+ margin: 0;
+}
+
+.html-body .container-10 {
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+ gap: 16px;
+ flex-wrap: wrap;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .background-2 {
+ display: block;
+ align-self: stretch;
+ width: 100%;
+ height: 403px;
+ object-fit: cover;
+ border-bottom: 1px solid var(--color-border);
+ flex: 1 1 auto;
+ min-height: 360px;
+}
+
+/* ── Installation & Terminal ── */
+
+.html-body .professional {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 28px;
+ width: min(calc(100% - 64px), var(--content-narrow));
+ height: auto;
+ margin: 0 auto;
+}
+
+.html-body .container-11 {
+ display: flex;
+ flex-direction: column;
+ align-items: stretch;
+ gap: 0;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .overlay-shadow {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+ background-color: #ffffff01;
+ border-radius: var(--radius-card);
+ overflow: hidden;
+ box-shadow: 0 25px 50px -12px #00000040;
+}
+
+.html-body .terminal-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 12px 16px 7px;
+ background-color: var(--color-bg-terminal-head);
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .container-12 {
+ display: inline-flex;
+ align-items: flex-start;
+ gap: 8px;
+ flex: 0 0 auto;
+}
+
+.html-body .terminal-dot {
+ width: 12px;
+ height: 12px;
+ border-radius: var(--radius-full);
+}
+
+.html-body .terminal-dot:nth-child(1) {
+ background-color: var(--color-dot-red);
+}
+
+.html-body .terminal-dot:nth-child(2) {
+ background-color: var(--color-dot-orange);
+}
+
+.html-body .terminal-dot:nth-child(3) {
+ background-color: var(--color-dot-blue);
+}
+
+.html-body .text-wrapper-7 {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 136.83px;
+ font-family: var(--font-label);
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ font-size: 12px;
+ text-align: center;
+ letter-spacing: 0;
+ line-height: 16px;
+}
+
+.html-body .terminal-body {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 24px;
+ background-color: var(--color-bg-dark);
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .container-13 {
+ display: inline-flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-self: stretch;
+ flex: 0 0 auto;
+ opacity: 0.3;
+ min-width: 0;
+}
+
+.html-body .text-wrapper-8 {
+ display: flex;
+ align-items: center;
+ font-family: var(--font-mono);
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ font-size: 14px;
+ letter-spacing: 0;
+ line-height: 21px;
+ white-space: nowrap;
+ width: fit-content;
+}
+
+.html-body .container-14 {
+ display: inline-flex;
+ flex-direction: column;
+ align-items: flex-start;
+ align-self: stretch;
+ flex: 0 0 auto;
+ min-width: 0;
+ flex: 1 1 0;
+}
+
+.html-body .text-wrapper-9 {
+ display: flex;
+ align-items: center;
+ width: fit-content;
+ font-family: var(--font-mono);
+ font-weight: 400;
+ font-size: 14px;
+ letter-spacing: 0;
+ line-height: 21px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+}
+
+.html-body .text-wrapper-11 {
+ display: flex;
+ align-items: center;
+ width: fit-content;
+ font-family: var(--font-mono);
+ font-weight: 400;
+ font-size: 14px;
+ letter-spacing: 0;
+ line-height: 21px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+}
+
+.html-body .text-wrapper-9 {
+ color: var(--color-text-primary);
+}
+
+.html-body .text-wrapper-11 {
+ color: var(--color-text-terminal-blue);
+}
+
+.html-body .pip-install-openhcs {
+ display: inline;
+ font-family: var(--font-mono);
+ font-weight: 400;
+ color: transparent;
+ font-size: 14px;
+ letter-spacing: 0;
+ line-height: 21px;
+ white-space: nowrap;
+}
+
+.html-body .span {
+ color: var(--color-text-accent);
+}
+
+.html-body .text-wrapper-10 {
+ color: var(--color-text-terminal-blue);
+}
+
+.html-body .container-15 {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 34px;
+ align-self: stretch;
+ margin: 0 auto;
+ width: min(calc(100% - 64px), var(--content-max));
+}
+
+.html-body .requirements,
+.html-body .requirements-2 {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ width: 100%;
+ min-height: 0;
+ height: auto;
+ background-color: var(--color-bg-card);
+ border: 1px solid var(--color-border);
+ backdrop-filter: blur(6px);
+ -webkit-backdrop-filter: blur(6px);
+ border-radius: var(--radius-card);
+}
+
+.html-body .requirements {
+ gap: 30px;
+ padding: 24px 24px 16px;
+}
+
+.html-body .requirements-2 {
+ gap: 26px;
+ padding: 24px;
+ margin-bottom: 0;
+}
+
+.html-body .heading {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .text-wrapper-12 {
+ display: flex;
+ align-items: center;
+ width: fit-content;
+ font-family: var(--font-heading);
+ font-weight: 400;
+ color: var(--color-text-accent);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+ max-width: 100%;
+ margin: 0;
+}
+
+.html-body .python-or-higher-wrapper {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ align-self: stretch;
+ width: 100%;
+ height: auto;
+}
+
+.html-body .text-wrapper-13 {
+ width: 100%;
+ height: auto;
+ font-family: var(--font-heading);
+ font-weight: 400;
+ color: var(--color-text-primary);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+ overflow-wrap: anywhere;
+ max-width: 100%;
+ white-space: normal;
+}
+
+.html-body .install-openhcs-wrapper {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ align-self: stretch;
+ width: 100%;
+ height: auto;
+}
+
+/* ── Contact & Footer ── */
+
+.html-body .get-in-touch-section {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 16px;
+ width: 100%;
+ height: auto;
+ padding: 70px 32px 47px;
+ margin: 0 auto;
+}
+
+.html-body .container-16 {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 0 0 16px;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+.html-body .overlay-border {
+ display: flex;
+ align-items: center;
+ gap: 16px 24px;
+ padding: 24px 28px;
+ width: fit-content;
+ max-width: 100%;
+ align-self: center;
+ border-radius: var(--radius-btn);
+ border: 1px solid var(--color-border);
+ background-color: var(--color-bg-card);
+ backdrop-filter: blur(6px);
+ -webkit-backdrop-filter: blur(6px);
+ font-style: normal;
+ justify-content: center;
+}
+
+.html-body .link-wrapper {
+ display: inline-flex;
+ align-items: center;
+ gap: 11.99px;
+ flex: 0 0 auto;
+ justify-content: center;
+}
+
+.html-body .link {
+ display: inline-flex;
+ flex-direction: column;
+ align-items: center;
+ flex: 0 0 auto;
+ text-decoration: none;
+}
+
+.html-body .vertical-divider {
+ width: 1px;
+ height: 24px;
+ background-color: var(--color-border);
+ flex: 0 0 auto;
+}
+
+.html-body .footer {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 2px 0 32px;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+ background-color: var(--color-bg-dark);
+ border-top: 1px solid var(--color-border-footer);
+}
+
+.html-body .container-17 {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ grid-template-rows: 128px;
+ gap: 32px;
+ padding: 0 32px;
+ margin: 0 auto;
+ width: min(calc(100% - 64px), var(--content-max));
+}
+
+.html-body .container-18 {
+ grid-row: 1 / 2;
+ grid-column: 1 / 2;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 15.25px;
+ padding: 0 0 10.16px;
+ width: 100%;
+ height: fit-content;
+}
+
+.html-body .text-wrapper-15 {
+ display: flex;
+ align-items: center;
+ align-self: stretch;
+ font-family: var(--font-heading);
+ font-weight: 700;
+ color: var(--color-text-primary);
+ font-size: 24px;
+ letter-spacing: 0;
+ line-height: 33.6px;
+}
+
+.html-body .container-19 {
+ grid-row: 1 / 2;
+ grid-column: 4 / 5;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 16px;
+ width: 100%;
+ height: fit-content;
+}
+
+.html-body .text-wrapper-17 {
+ display: flex;
+ align-items: center;
+ align-self: stretch;
+ font-family: var(--font-body);
+ font-weight: 600;
+ color: var(--color-text-accent);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+}
+
+.html-body .list {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 8px;
+ align-self: stretch;
+ width: 100%;
+ flex: 0 0 auto;
+}
+
+/* ── Shared Text & Utility Overrides ── */
+
+.html-body .text,
+.html-body .text-wrapper-2,
+.html-body .all-the-industry,
+.html-body .text-wrapper-5,
+.html-body .visualize-every-step,
+.html-body .text-wrapper-6,
+.html-body .text-wrapper-14,
+.html-body .text-wrapper-16 {
+ font-family: var(--font-body);
+ font-weight: 400;
+ color: var(--color-text-secondary);
+ font-size: 16px;
+ letter-spacing: 0;
+ line-height: 24px;
+ white-space: normal;
+ overflow-wrap: anywhere;
+}
+
+.html-body .text {
+ text-align: center;
+ width: fit-content;
+}
+
+.html-body .text-wrapper-2 {
+ display: flex;
+ align-items: center;
+ width: fit-content;
+ text-decoration: none;
+}
+
+.html-body .all-the-industry {
+ width: 100%;
+ overflow-wrap: anywhere;
+}
+
+.html-body .text-wrapper-5 {
+ display: flex;
+ align-items: center;
+ align-self: stretch;
+ text-decoration: none;
+}
+
+.html-body .visualize-every-step {
+ align-self: stretch;
+}
+
+.html-body .text-wrapper-6 {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: fit-content;
+ text-align: center;
+ max-width: 100%;
+}
+
+.html-body .text-wrapper-14 {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: fit-content;
+ text-align: center;
+ white-space: nowrap;
+ text-decoration: none;
+}
+
+.html-body .text-wrapper-16 {
+ display: flex;
+ align-items: center;
+ align-self: stretch;
+ font-size: 14px;
+ line-height: 22.8px;
+}
+
+.html-body .container-3,
+.html-body .container-8,
+.html-body .container-15,
+.html-body .container-17,
+.html-body .container-20 {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* ── Interactions ── */
+
+@media (prefers-reduced-motion: no-preference) {
+ .html-body .button,
+ .html-body .div-wrapper,
+ .html-body .text-5,
+ .html-body .text-6,
+ .html-body .text-wrapper-2,
+ .html-body .text-wrapper-5,
+ .html-body .link,
+ .html-body .hamburger {
+ transition: transform var(--transition-fast), background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), opacity var(--transition-fast);
+ }
+
+ .html-body .button:hover,
+ .html-body .div-wrapper:hover {
+ transform: translateY(-1px);
+ }
+
+ .html-body .button:hover {
+ background-color: var(--color-bg-btn-hover);
+ }
+
+ .html-body .div-wrapper:hover {
+ border-color: #5b6072;
+ }
+
+ .html-body .text-5:hover,
+ .html-body .text-6:hover,
+ .html-body .text-wrapper-2:hover,
+ .html-body .text-wrapper-5:hover,
+ .html-body .link:hover,
+ .html-body .hamburger:hover {
+ opacity: 0.82;
+ }
+}
+
+.html-body .button:focus-visible,
+.html-body .div-wrapper:focus-visible,
+.html-body .text-5:focus-visible,
+.html-body .text-6:focus-visible,
+.html-body .text-wrapper-2:focus-visible,
+.html-body .text-wrapper-5:focus-visible,
+.html-body .link:focus-visible,
+.html-body .hamburger:focus-visible {
+ outline: 2px solid #4a90e2;
+ outline-offset: 2px;
+}
+
+/* ── Responsive ── */
+
+@media (max-width: 1280px) {
+ .html-body .hero-section,
+ .html-body .section-capabilities,
+ .html-body .section-feature-demo,
+ .html-body .professional,
+ .html-body .get-in-touch-section,
+ .html-body .container-17,
+ .html-body .container-20 {
+ width: min(calc(100% - 48px), var(--content-max));
+ }
+
+ .html-body .top-navigation-bar {
+ width: 100%;
+ }
+
+ .html-body .professional,
+ .html-body .get-in-touch-section {
+ width: min(calc(100% - 64px), var(--content-narrow));
+ }
+
+ .html-body .requirements,
+ .html-body .requirements-2 {
+ width: 100%;
+ }
+}
+
+@media (max-width: 960px) {
+ .html-body .hero-section,
+ .html-body .section-capabilities,
+ .html-body .section-feature-demo,
+ .html-body .professional,
+ .html-body .get-in-touch-section,
+ .html-body .container-3,
+ .html-body .container-8,
+ .html-body .container-15,
+ .html-body .container-17,
+ .html-body .container-20 {
+ width: min(calc(100% - 32px), 100%);
+ }
+
+ .html-body .container-3,
+ .html-body .container-8,
+ .html-body .container-17 {
+ grid-template-columns: 1fr;
+ }
+
+ .html-body .container-3 {
+ grid-template-rows: auto;
+ }
+
+ .html-body .container-4,
+ .html-body .container-7,
+ .html-body .image-viewer,
+ .html-body .real-time,
+ .html-body .history-slider,
+ .html-body .container-18,
+ .html-body .container-19 {
+ grid-column: 1 / -1;
+ grid-row: auto;
+ width: 100%;
+ }
+
+ .html-body .container-3,
+ .html-body .container-8 {
+ gap: 24px;
+ }
+
+ .html-body .text-wrapper-3,
+ .html-body .text-wrapper-6,
+ .html-body .text-wrapper-12 {
+ white-space: normal;
+ text-wrap: balance;
+ }
+
+ .html-body .overlay-border {
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .html-body .vertical-divider {
+ width: 1px;
+ height: 24px;
+ }
+}
+
+@media (max-width: 768px) {
+ .html-body .hamburger {
+ display: flex;
+ }
+
+ .html-body .nav-links {
+ display: none;
+ position: fixed;
+ top: 72px;
+ left: 0;
+ right: 0;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 0;
+ padding: 16px 32px;
+ background-color: var(--color-bg-card);
+ border-bottom: 1px solid var(--color-border-nav);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+ }
+
+ .html-body .nav-toggle:checked ~ .nav-links {
+ display: flex;
+ }
+
+ .html-body .text-wrapper-3,
+ .html-body .unified-bioimaging {
+ font-size: 36px;
+ line-height: 43.2px;
+ }
+
+ .html-body .hero-section {
+ height: auto;
+ min-height: auto;
+ padding: 80px 24px 40px;
+ }
+
+ .html-body .section-capabilities {
+ padding: 80px 24px;
+ }
+
+ .html-body .section-feature-demo {
+ padding: 48px 24px 80px;
+ }
+
+ .html-body .get-in-touch-section {
+ padding: 48px 24px;
+ }
+
+ .html-body .container-21 {
+ gap: 0;
+ }
+
+ .html-body .background-border {
+ height: auto;
+ aspect-ratio: 600 / 400;
+ }
+
+ .html-body .background {
+ height: auto;
+ aspect-ratio: 800 / 429;
+ }
+
+ .html-body .background-2 {
+ height: auto;
+ aspect-ratio: 1200 / 403;
+ }
+
+ .html-body .container-9 {
+ height: auto;
+ aspect-ratio: 800 / 360;
+ }
+}
+
+@media (max-width: 480px) {
+ .html-body .text-wrapper-3,
+ .html-body .unified-bioimaging {
+ font-size: 28px;
+ line-height: 33.6px;
+ }
+
+ .html-body .hero-section {
+ padding: 60px 16px 32px;
+ }
+
+ .html-body .section-capabilities {
+ padding: 48px 16px;
+ }
+
+ .html-body .section-feature-demo {
+ padding: 32px 16px 64px;
+ }
+
+ .html-body .get-in-touch-section {
+ padding: 32px 16px;
+ }
+
+ .html-body .container-2 {
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .html-body .button,
+ .html-body .div-wrapper {
+ width: 100%;
+ max-width: 320px;
+ }
+
+ .html-body .overlay-border {
+ flex-direction: column;
+ gap: 16px;
+ width: 100%;
+ padding: 16px;
+ }
+
+ .html-body .vertical-divider {
+ width: 80%;
+ height: 1px;
+ }
+
+ .html-body .container-3,
+ .html-body .container-8 {
+ gap: 16px;
+ }
+
+ .html-body .terminal-body {
+ padding: 16px;
+ overflow: hidden;
+ }
+
+ .html-body .pip-install-openhcs {
+ white-space: normal;
+ }
+
+ .html-body .container-21 {
+ gap: 0;
+ }
+
+ .html-body .image-viewer,
+ .html-body .real-time {
+ min-height: auto;
+ }
+
+ .html-body .background,
+ .html-body .background-2,
+ .html-body .container-9 {
+ min-height: auto;
+ }
+
+ .html-body .container-wrapper {
+ padding: 24px 16px;
+ min-height: auto;
+ }
+
+ .html-body .overlay-blur {
+ width: 300px;
+ height: 300px;
+ left: calc(50% - 150px);
+ top: -48px;
+ }
+
+ .html-body .hero-section {
+ height: auto;
+ }
+
+ .html-body .container-6 .div-2,
+ .html-body .container-10 .div-2 {
+ width: 100%;
+ }
+
+ .html-body .container-6 .text-wrapper-2,
+ .html-body .container-10 .text-wrapper-2 {
+ width: 100%;
+ }
+}