Overview
The irc.now design system uses a green-on-dark palette with a three-font system. Newsreader for display headings, Outfit for body text, and JetBrains Mono for all interface chrome. Themes switch via a data-theme attribute on the root element.
Design Principles
- - Green on dark: monochromatic palette with #5CA882 accent
- - Three fonts: Newsreader (display), Outfit (body), JetBrains Mono (chrome)
- - IRC native: patterns from IRC client conventions
- - Dual theme: dark-first with light via data-theme attribute
- - Texture: SVG grain overlay at 1.5% opacity
Colors
A four-level text hierarchy, four background depths, and five nick accent colors. All tokens resolve to both dark and light theme values.
Brand
Backgrounds
Text
Nick Colors
Typography
Three font families serve distinct roles. Newsreader for editorial display type, Outfit for readable body text at light weights, and JetBrains Mono for all interface chrome.
Type Scale
Font Loading
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400;1,6..72,500&family=Outfit:wght@300;400;500;600&family=JetBrains+Mono:ital,wght@0,400;0,500;1,400&display=swap" rel="stylesheet">
Spacing
Pixel-based spacing scale. The page uses 800px max-width with 24px horizontal padding.
Layout Constants
| Property | Value | Usage |
|---|---|---|
--page-max |
800px | Page container max-width |
--page-px |
24px | Page horizontal padding |
Border Radius
| Token | Value | Usage |
|---|---|---|
--radius-sm |
2px | Code tags |
--radius-base |
3px | Buttons |
--radius-md |
4px | Input fields |
--radius-lg |
5px | Terminal, price table |
--radius-xl |
6px | Client card |
--radius-full |
50% | Dots, brand mark |
Cards
Composite containers for content blocks: IRC client mockup, terminal, and pricing table.
Terminal Block
<div class="terminal">
<div class="terminal-chrome">
<div class="dots"><span></span><span></span><span></span></div>
<span>terminal</span>
</div>
<div class="terminal-body">
<span class="cm"># connect</span><br>
<span class="pr">/server</span> irc.now 6697 -ssl
</div>
</div>
Pricing Table
<div class="price-table">
<div class="pt-row pt-head">
<div class="pt-cell"></div>
<div class="pt-cell">
<span class="plan-name">free</span>
<span class="plan-price">$0</span>
</div>
<div class="pt-cell">
<span class="plan-name">pro</span>
<span class="plan-price">$4 <span>/mo</span></span>
</div>
</div>
<div class="pt-row">
<div class="pt-cell">networks</div>
<div class="pt-cell">1</div>
<div class="pt-cell">unlimited</div>
</div>
<div class="pt-actions">...</div>
</div>
Forms
The IRC client input field with blinking cursor.
IRC Input
<div class="cl-input">
<div class="cl-input-field">
<span>message #lobby</span>
<div class="cl-cursor"></div>
</div>
</div>
Layout
Page container, sticky nav, section pattern, feature grid, and footer.
Page Structure
<html lang="en" data-theme="dark">
<body>
<div class="page">
<nav class="nav">
<a href="/" class="mark">irc<span class="dot"></span>now</a>
<div class="nav-r">
<a href="/docs" class="desk">docs</a>
<button class="theme-btn">◑</button>
<a href="/login" class="nav-cta">log in</a>
</div>
</nav>
<section class="hero reveal">...</section>
<section class="client-section reveal">...</section>
<section class="features reveal">...</section>
<footer class="footer">
<span class="mark">irc<span class="dot"></span>now</span>
<div class="footer-links">...</div>
</footer>
</div>
</body>
Feature Grid
<div class="feat">
<div class="feat-label">bouncer</div>
<div class="feat-body">
<h3>your nick stays in the channel</h3>
<p>description text here</p>
</div>
</div>
IRC Components
IRC-specific patterns: message lines, channel sidebar, and client chrome.
Message Line
<div class="irc-msg">
<span class="time">14:02</span>
<span class="nick" style="color:var(--nb)">reed</span>
<span class="text">has anyone tried the new mesa drivers</span>
</div>
<div class="irc-msg system">
<span class="time">14:01</span>
<span class="nick"></span>
<span class="text">— bouncer uptime 23d 7h</span>
</div>
Channel Sidebar
<div class="cl-sidebar">
<div class="cl-sb-label">channels</div>
<div class="cl-sb-item active">#lobby</div>
<div class="cl-sb-item">#dev</div>
<div class="cl-sb-gap"></div>
<div class="cl-sb-label">networks</div>
<div class="cl-sb-item">libera.chat</div>
</div>