| version | alpha | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| name | Python for Biologists | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| description | Bio-themed dark UI for an interactive programming course for UK life sciences undergraduates. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| colors |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rounded |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| spacing |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| components |
|
Dark-mode biology lab aesthetic meets clean educational UI. The design reads like a modern research tool — dark backgrounds evoke a terminal or microscope interface, while the electric cyan accent (bio-blue) drives all interactive elements.
Every decision serves biology students: code blocks look like real terminals, DNA sequence colours are meaningful (ATG = red, stop codons = teal), and the glassmorphism surfaces create depth without competing with content-heavy lecture slides.
The slide system is the centrepiece — fullscreen, one slide at a time, with a fixed navigation bar at the bottom. Homepage sections stack vertically with glassmorphism cards.
The palette is rooted in deep navy backgrounds with a single electric accent.
- Primary / bio-blue (
#00d4ff): The sole interactive color. Used for links, active states, borders on hover, gradient text headings, and the slide indicator pill. Never use it decoratively for non-interactive elements. - bg-dark (
#1a1a2e) / bg-darker (#16213e): The two-stop page background gradient applied to<body>. All content sits on this. - bg-darkest / code-bg (
#0d1117): GitHub-dark code background. Used only inside code and output blocks. - accent-yellow (
#ffd700): Exercise boxes, video buttons, warning badges. Signals "do this now." - accent-green (
#4CAF50): Success states, bio-notes, available badges. Signals "correct / ready." - accent-purple (
#667eea→#764ba2): Gradient used exclusively for seminar/specialisation sections andtext-gradient-purple. Distinguishes those sections from core lecture content. - dna-start (
#ff6b6b) / dna-stop (#4ecdc4): Semantic colors for DNA visualisations only. Do not repurpose. - text-body (
#d1d5db) / text-muted (#9ca3af): Default prose and secondary labels.
Two font stacks, two roles — never mixed:
- UI font (
Segoe UIstack): All headings, body copy, navigation, badges, labels. System font stack — no web font loading overhead. - Code font (
Monacostack): All code blocks, output blocks, DNA visualisations, inline code. Monospace only.
Heading scale used in slides:
xl:text-6xl md:text-7xl— title slides onlylarge(default):text-5xl md:text-6xl— most slide titles via<SlideTitle>medium:text-4xl md:text-5xl— subsection titlessmall:text-3xl md:text-4xl— secondary slide headings
Gradient text is used for primary headings only. The blue gradient (text-gradient) is for Python/programming content; the purple gradient (text-gradient-purple) is for biology/specialisation content. Do not apply gradients to body copy or labels.
Homepage: Single-page scroll. Fixed navigation (72px tall, glass-dark). Sections with container mx-auto max-w-6xl centered. Hero has top padding of pt-32 to clear the nav.
Lecture pages: Full-screen slide system. One slide visible at a time (min-h-screen). Fixed slide-navigation bar at the bottom (z-50, 48px). No page scroll — scroll is per-slide.
Slide content alignment:
.slide-content—flex flex-col justify-center— for balanced slides.slide-content-top—flex flex-col justify-start pt-24— for content-heavy slides that need top alignment
Grid system: Tailwind grid with semantic column counts: grid-cols-2, grid-cols-3, grid-cols-4 (responsive to md:grid-cols-4). No magic numbers.
Max widths: max-w-6xl for homepage sections; 95% for slide content.
Three elevation layers using glassmorphism:
- Page background:
bg-gradient-to-br from-bio-dark to-bio-darker— the foundation, no blur .glass-dark:bg-black/20 backdrop-blur-md border border-white/10— cards, nav, slide navigation bar. Primary surface..glass:bg-white/10 backdrop-blur-md border border-white/20— elevated interactive elements
Hover lift: cards translate -translate-y-1 with shadow-bio-glow-sm (0 10px 20px rgba(0,212,255,0.2)) on hover. Use sparingly — only on clickable cards, not decorative containers.
- Cards:
rounded-xl(16px) - Concept boxes:
rounded-2xl(20px) - Buttons:
rounded-full— pill shape is a hard rule, never use square buttons - Code blocks:
rounded-xlwithborder border-code-border - Badges:
rounded-fullwithpx-3 py-1 - Slide indicators:
rounded-full, active state widens tow-8(pill) - Left-accent rule:
concept-boxandoutput-blockuseborder-l-4colored accent — left border only, not all four sides
Fixed top bar using .glass-dark. Logo: emoji + text-gradient text. Desktop links use .nav-link. Dropdowns open bg-bio-dark/95 backdrop-blur-md border border-bio-blue/20. Mobile: hamburger toggling a slide-in panel.
Each lecture page renders a SlideManager that shows one .slide at a time. The fixed .slide-navigation bar contains: prev/next arrow buttons, slide indicators (dots, active = blue pill), and a slide counter. Slides scroll internally when content overflows — use .slide-scrollbar for styled scrollbars.
The canonical heading component for all slide titles. Always use it instead of raw <h1>/<h2>. GradientText variants: default (blue), purple, green, yellow.
White-bg-5 glassmorphism box with colored left border based on variant: default (white/10), highlight (bio-blue/50), warning (yellow/50), success (green/50). Icon rendered as large emoji before the title.
Grid of stat boxes using .glass-dark. Supports 2/3/4 columns. Values use accent colors; labels in text-gray-400.
.card with a status badge, lecture number circle (.lecture-number), topic list with ▸ bullets in text-bio-blue, and action buttons. Three button states: Slides (primary), Notebooks (secondary), Video (secondary with yellow accent).
.btn-primary: Solid bio-blue, dark text, pill. Use for the main action..btn-secondary: Outlined bio-blue, pill. Use for secondary actions.- Size override pattern:
!py-1 !px-3 text-xsfor compact card buttons. - Yellow video button: override border and text to
border-bio-yellow text-bio-yellow hover:bg-bio-yellow hover:text-bio-dark.
.code-block for Python source, .output-block for stdout/results. Code blocks use font-mono text-sm with whitespace-pre-wrap. Output blocks have border-l-4 border-l-bio-light-blue. Never put output inside a code block — they are semantically different.
Three variants: .badge-available (green), .badge-coming-soon (orange), .badge-under-construction (yellow). Always placed before the title in a card.
.bio-note— green left border, green-tinted background. For biological context..exercise-box— yellow border + yellow-tinted bg. For student tasks.
Do:
- Use
text-gradientfor primary section headings and<SlideTitle>content - Use
glass-darkfor all floating surfaces (nav, dropdowns, cards) - Apply
rounded-fullto all buttons without exception - Keep the slide navigation bar fixed at
bottom-0— never move it - Use
▸as the list bullet character in topic lists - Use
border-l-4accents on concept and output blocks, not full borders
Don't:
- Don't use
bio-bluefor decorative non-interactive elements — it signals interactivity - Don't mix the code font into UI text or the UI font into code blocks
- Don't apply
text-gradientortext-gradient-purpleto body copy or labels - Don't use the DNA colors (
dna-start,dna-stop) outside DNA visualisation contexts - Don't add
backdrop-blurto elements inside the slide system — performance degrades on older tablets - Don't create new accent colors — extend one of the existing semantic color roles instead
- Don't use square or
rounded-mdbuttons — pill shape is the system rule