auto/docs/style-directions.html
ilia c08a3e482b Launch AutoBank site with Serial Console theme and scroll hourglass logo.
- AutoBank branding, phosphor-green terminal aesthetic
- Five normalized logo frames that advance on scroll
- Logo build scripts and design exploration docs under docs/
2026-05-20 21:05:29 -04:00

2372 lines
67 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Visual style directions</title>
<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=DM+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&family=Inter:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&family=Instrument+Serif:ital@0;1&family=Syne:wght@600;700&family=JetBrains+Mono:wght@400;500&family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&family=Outfit:wght@400;500;600;700&family=Geist+Mono:wght@400;500&display=swap"
rel="stylesheet"
/>
<style>
:root {
--page-bg: #0a0c10;
--page-ink: #eef0f4;
--page-muted: #8a919e;
--page-line: #222830;
--page-accent: #6ee7b7;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: "DM Sans", system-ui, sans-serif;
background: var(--page-bg);
color: var(--page-ink);
line-height: 1.5;
}
.wrap {
max-width: 1280px;
margin: 0 auto;
padding: 48px 24px 80px;
}
.eyebrow {
font-family: "IBM Plex Mono", monospace;
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--page-accent);
margin: 0 0 12px;
}
h1 {
font-size: clamp(28px, 4vw, 40px);
font-weight: 700;
letter-spacing: -0.03em;
margin: 0 0 12px;
}
.lede {
max-width: 65ch;
color: var(--page-muted);
margin: 0 0 24px;
font-size: 17px;
}
.toolbar {
display: flex;
flex-wrap: wrap;
gap: 12px;
align-items: center;
margin-bottom: 28px;
padding-bottom: 20px;
border-bottom: 1px solid var(--page-line);
}
.pick-label {
font-family: "IBM Plex Mono", monospace;
font-size: 13px;
color: var(--page-muted);
}
.pick-value {
color: var(--page-accent);
font-weight: 600;
}
.btn {
font: inherit;
cursor: pointer;
border: 1px solid var(--page-line);
background: #12151c;
color: var(--page-ink);
padding: 8px 14px;
border-radius: 8px;
font-size: 13px;
}
.btn:hover {
border-color: var(--page-accent);
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
gap: 20px;
}
.style-card {
border: 2px solid var(--page-line);
border-radius: 18px;
overflow: hidden;
cursor: pointer;
background: #12151c;
transition: border-color 0.2s, transform 0.15s;
text-align: left;
}
.style-card:hover {
transform: translateY(-2px);
border-color: #3a4254;
}
.style-card.is-picked {
border-color: var(--page-accent);
box-shadow: 0 0 0 1px var(--page-accent);
}
.preview {
min-height: 220px;
padding: 20px;
position: relative;
overflow: hidden;
}
.meta {
padding: 16px 18px 20px;
border-top: 1px solid var(--page-line);
}
.meta-head {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 12px;
margin-bottom: 8px;
}
.meta-head h2 {
font-size: 17px;
margin: 0;
font-weight: 600;
}
.meta-num {
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
color: var(--page-muted);
}
.meta-desc {
font-size: 13px;
color: var(--page-muted);
margin: 0 0 10px;
}
.tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tags span {
font-size: 10px;
font-family: "IBM Plex Mono", monospace;
padding: 3px 7px;
border-radius: 999px;
background: #1a1f28;
border: 1px solid var(--page-line);
color: var(--page-muted);
}
/* Shared preview components */
.mini-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
font-size: 13px;
font-weight: 600;
}
.mini-nav {
display: flex;
gap: 10px;
font-size: 10px;
opacity: 0.7;
}
.mini-hero h3 {
font-size: clamp(16px, 2.5vw, 20px);
line-height: 1.15;
margin: 0 0 8px;
letter-spacing: -0.02em;
}
.mini-hero p {
font-size: 11px;
margin: 0 0 12px;
opacity: 0.75;
max-width: 28ch;
}
.mini-btn {
display: inline-block;
font-size: 10px;
padding: 6px 12px;
border-radius: 6px;
font-weight: 600;
}
.mini-terminal {
margin-top: 14px;
border-radius: 8px;
padding: 8px 10px;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
line-height: 1.5;
}
.mini-flow {
display: flex;
align-items: center;
gap: 0;
margin-top: 12px;
position: relative;
z-index: 1;
}
.mini-flow .node {
width: 28px;
height: 22px;
border-radius: 6px;
border: 1.5px solid currentColor;
opacity: 0.5;
flex-shrink: 0;
}
.mini-flow .node.on {
opacity: 1;
box-shadow: 0 0 12px currentColor;
}
.mini-flow .wire {
flex: 1;
height: 2px;
min-width: 12px;
background: currentColor;
opacity: 0.35;
position: relative;
}
.mini-flow .wire::after {
content: "";
position: absolute;
right: -1px;
top: 50%;
transform: translateY(-50%);
border: 4px solid transparent;
border-left-color: currentColor;
opacity: 0.6;
}
.batch-label {
grid-column: 1 / -1;
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--page-muted);
margin: 8px 0 0;
padding-top: 20px;
border-top: 1px solid var(--page-line);
}
.batch-label:first-of-type {
border-top: none;
padding-top: 0;
margin-top: 0;
}
/* 1 — Current: Terminal Neon */
.s-terminal-neon {
background: #0a0e1a;
color: #eef2ff;
}
.s-terminal-neon .mini-header {
color: #00e5a8;
font-family: "Space Grotesk", sans-serif;
}
.s-terminal-neon .mini-hero h3 {
font-family: "Space Grotesk", sans-serif;
}
.s-terminal-neon .mini-btn {
background: #00e5a8;
color: #0a0e1a;
}
.s-terminal-neon .mini-terminal {
background: #0f1424;
border: 1px solid #28304f;
color: #7e89a8;
}
.s-terminal-neon .mini-terminal .ok {
color: #00e5a8;
}
.s-terminal-neon::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(circle at 80% 20%, rgba(0, 229, 168, 0.12), transparent 50%);
pointer-events: none;
}
/* 2 — Light Editorial */
.s-light-editorial {
background: #faf9f6;
color: #1a1a1a;
}
.s-light-editorial .mini-header {
font-family: "Libre Baskerville", serif;
color: #1a1a1a;
}
.s-light-editorial .mini-hero h3 {
font-family: "Instrument Serif", serif;
font-size: 22px;
font-weight: 400;
}
.s-light-editorial .mini-btn {
background: #1a1a1a;
color: #faf9f6;
border-radius: 2px;
}
.s-light-editorial .mini-terminal {
background: #f0eeea;
border: 1px solid #ddd8d0;
color: #666;
font-family: "IBM Plex Mono", monospace;
}
/* 3 — Swiss Minimal */
.s-swiss {
background: #fff;
color: #000;
}
.s-swiss .mini-header {
font-family: "Inter", sans-serif;
font-weight: 700;
letter-spacing: -0.04em;
text-transform: uppercase;
font-size: 11px;
}
.s-swiss .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 700;
font-size: 18px;
letter-spacing: -0.03em;
}
.s-swiss .mini-btn {
background: #000;
color: #fff;
border-radius: 0;
}
.s-swiss .mini-terminal {
background: #f5f5f5;
border-left: 3px solid #000;
border-radius: 0;
color: #333;
}
/* 4 — Warm Studio */
.s-warm {
background: linear-gradient(160deg, #faf6f1 0%, #f3ebe3 100%);
color: #2c2419;
}
.s-warm .mini-header {
font-family: "Outfit", sans-serif;
color: #c45c3e;
}
.s-warm .mini-hero h3 {
font-family: "Outfit", sans-serif;
font-weight: 600;
}
.s-warm .mini-btn {
background: #c45c3e;
color: #fff;
border-radius: 999px;
}
.s-warm .mini-terminal {
background: rgba(255, 255, 255, 0.6);
border: 1px solid #e8ddd3;
color: #6b5d4f;
}
/* 5 — Blueprint */
.s-blueprint {
background: #0d1b2a;
color: #e0eaff;
background-image: linear-gradient(rgba(100, 149, 237, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(100, 149, 237, 0.08) 1px, transparent 1px);
background-size: 16px 16px;
}
.s-blueprint .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #6495ed;
}
.s-blueprint .mini-hero h3 {
font-family: "IBM Plex Mono", monospace;
font-weight: 500;
}
.s-blueprint .mini-btn {
background: transparent;
color: #6495ed;
border: 1px solid #6495ed;
}
.s-blueprint .mini-terminal {
background: rgba(13, 27, 42, 0.8);
border: 1px dashed #6495ed;
color: #8faadc;
}
/* 6 — Brutalist Mono */
.s-brutalist {
background: #e8e8e8;
color: #111;
}
.s-brutalist .mini-header {
font-family: "JetBrains Mono", monospace;
background: #111;
color: #e8e8e8;
padding: 4px 8px;
display: inline-block;
}
.s-brutalist .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-weight: 700;
text-transform: uppercase;
font-size: 15px;
}
.s-brutalist .mini-btn {
background: #ff3300;
color: #fff;
border-radius: 0;
box-shadow: 4px 4px 0 #111;
}
.s-brutalist .mini-terminal {
background: #111;
color: #0f0;
border: 3px solid #111;
border-radius: 0;
}
/* 7 — Soft SaaS */
.s-soft-saas {
background: linear-gradient(135deg, #1a1033 0%, #2d1b4e 100%);
color: #f0eaff;
}
.s-soft-saas .mini-header {
font-family: "Outfit", sans-serif;
color: #c4b5fd;
}
.s-soft-saas .mini-hero h3 {
font-family: "Outfit", sans-serif;
font-weight: 600;
}
.s-soft-saas .mini-btn {
background: linear-gradient(135deg, #8b5cf6, #ec4899);
color: #fff;
border-radius: 10px;
}
.s-soft-saas .mini-terminal {
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(196, 181, 253, 0.2);
color: #c4b5fd;
backdrop-filter: blur(8px);
}
.s-soft-saas::before {
content: "";
position: absolute;
width: 120px;
height: 120px;
background: radial-gradient(circle, rgba(139, 92, 246, 0.4), transparent 70%);
top: -20px;
right: -20px;
pointer-events: none;
}
/* 8 — Industrial */
.s-industrial {
background: #1c1c1e;
color: #d1d1d6;
}
.s-industrial .mini-header {
font-family: "Syne", sans-serif;
color: #ff9500;
text-transform: uppercase;
letter-spacing: 0.06em;
font-size: 11px;
}
.s-industrial .mini-hero h3 {
font-family: "Syne", sans-serif;
font-weight: 700;
}
.s-industrial .mini-btn {
background: #ff9500;
color: #1c1c1e;
border-radius: 4px;
text-transform: uppercase;
letter-spacing: 0.04em;
font-size: 9px;
}
.s-industrial .mini-terminal {
background: #2c2c2e;
border-left: 4px solid #ff9500;
color: #8e8e93;
}
/* 9 — Paper & Ink */
.s-paper {
background: #f4f1ea;
color: #1e3a5f;
}
.s-paper .mini-header {
font-family: "Libre Baskerville", serif;
color: #1e3a5f;
}
.s-paper .mini-hero h3 {
font-family: "Libre Baskerville", serif;
font-weight: 700;
}
.s-paper .mini-btn {
background: #1e3a5f;
color: #f4f1ea;
border-radius: 4px;
}
.s-paper .mini-terminal {
background: #fff;
border: 1px solid #c9c0b0;
color: #4a6785;
box-shadow: 2px 2px 0 #c9c0b0;
}
/* 10 — Monochrome Luxe */
.s-luxe {
background: #0a0a0a;
color: #f5f5f5;
}
.s-luxe .mini-header {
font-family: "Instrument Serif", serif;
font-style: italic;
color: #c9a962;
font-size: 15px;
}
.s-luxe .mini-hero h3 {
font-family: "Instrument Serif", serif;
font-weight: 400;
font-size: 22px;
}
.s-luxe .mini-btn {
background: transparent;
color: #c9a962;
border: 1px solid #c9a962;
border-radius: 2px;
}
.s-luxe .mini-terminal {
background: transparent;
border: 1px solid #333;
color: #888;
font-family: "IBM Plex Mono", monospace;
}
.s-luxe::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, #c9a962, transparent);
}
/* 11 — n8n Canvas */
.s-n8n {
background: #1a1a24;
color: #e8e8ed;
}
.s-n8n .mini-header {
font-family: "Inter", sans-serif;
color: #ff6d5a;
}
.s-n8n .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
}
.s-n8n .mini-btn {
background: #ff6d5a;
color: #fff;
border-radius: 8px;
}
.s-n8n .mini-terminal {
background: #252530;
border: 1px solid #3a3a48;
color: #9b9bab;
}
.s-n8n .mini-terminal .ok {
color: #ff6d5a;
}
.s-n8n .mini-flow {
color: #ff6d5a;
}
.s-n8n .mini-flow .node {
border-radius: 10px;
background: #252530;
}
.s-n8n::before {
content: "";
position: absolute;
inset: 0;
background-image: radial-gradient(circle at 20% 80%, rgba(255, 109, 90, 0.08), transparent 40%);
pointer-events: none;
}
/* 12 — Relay Handoff */
.s-relay {
background: linear-gradient(180deg, #0f1419 0%, #151b24 100%);
color: #e8ecf4;
}
.s-relay .mini-header {
font-family: "Inter", sans-serif;
font-weight: 600;
color: #60a5fa;
}
.s-relay .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
letter-spacing: -0.03em;
}
.s-relay .mini-btn {
background: #60a5fa;
color: #0f1419;
border-radius: 8px;
}
.s-relay .mini-terminal {
background: rgba(96, 165, 250, 0.06);
border: 1px solid rgba(96, 165, 250, 0.25);
color: #8b9cb8;
}
.s-relay .mini-terminal .ok {
color: #60a5fa;
}
.s-relay .mini-flow {
color: #60a5fa;
}
.s-relay .mini-flow .node {
border-radius: 50%;
width: 22px;
height: 22px;
}
/* 13 — Patchline Signal */
.s-patchline {
background: #0e1014;
color: #e8eaef;
}
.s-patchline .mini-header {
font-family: "JetBrains Mono", monospace;
color: #facc15;
font-size: 12px;
}
.s-patchline .mini-hero h3 {
font-family: "Space Grotesk", sans-serif;
font-weight: 600;
}
.s-patchline .mini-btn {
background: #facc15;
color: #0e1014;
border-radius: 4px;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-patchline .mini-terminal {
background: #161a22;
border: 1px solid #2a3040;
color: #6b7280;
}
.s-patchline .mini-terminal .ok {
color: #facc15;
}
.s-patchline .mini-flow {
color: #facc15;
}
.s-patchline::before {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: 30px;
height: 40px;
opacity: 0.15;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 40'%3E%3Cpath d='M0 28 L30 18 L60 24 L90 10 L120 22 L150 8 L180 20 L200 14' fill='none' stroke='%23facc15' stroke-width='2'/%3E%3C/svg%3E") center / cover no-repeat;
pointer-events: none;
}
/* 14 — Pipeline Stages */
.s-pipeline {
background: #0d1117;
color: #e6edf3;
}
.s-pipeline .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #3fb950;
font-size: 11px;
}
.s-pipeline .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
}
.s-pipeline .mini-btn {
background: #238636;
color: #fff;
border-radius: 6px;
}
.s-pipeline .mini-terminal {
background: #161b22;
border: 1px solid #30363d;
color: #7d8590;
}
.s-pipeline .mini-terminal .ok {
color: #3fb950;
}
.s-pipeline .mini-flow .node {
border-radius: 4px;
width: auto;
min-width: 36px;
height: 18px;
border-color: #3fb950;
background: rgba(63, 185, 80, 0.1);
}
.s-pipeline .mini-flow {
color: #3fb950;
}
/* 15 — Zapier Bright */
.s-zapier {
background: #fffaf5;
color: #1f1f1f;
}
.s-zapier .mini-header {
font-family: "Inter", sans-serif;
color: #ff4a00;
font-weight: 700;
}
.s-zapier .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 700;
color: #1f1f1f;
}
.s-zapier .mini-btn {
background: #ff4a00;
color: #fff;
border-radius: 999px;
}
.s-zapier .mini-terminal {
background: #fff;
border: 2px solid #ffe4d6;
color: #666;
box-shadow: 0 4px 12px rgba(255, 74, 0, 0.08);
}
.s-zapier .mini-terminal .ok {
color: #ff4a00;
}
.s-zapier .mini-flow {
color: #ff4a00;
}
.s-zapier .mini-flow .node {
border-radius: 12px;
background: #fff;
}
/* 16 — Make Connect */
.s-make {
background: linear-gradient(160deg, #1a0a2e 0%, #2d1050 100%);
color: #f0e6ff;
}
.s-make .mini-header {
font-family: "Outfit", sans-serif;
color: #e040fb;
}
.s-make .mini-hero h3 {
font-family: "Outfit", sans-serif;
font-weight: 600;
}
.s-make .mini-btn {
background: linear-gradient(135deg, #e040fb, #7c4dff);
color: #fff;
border-radius: 12px;
}
.s-make .mini-terminal {
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(224, 64, 251, 0.3);
color: #c4a8e0;
}
.s-make .mini-terminal .ok {
color: #e040fb;
}
.s-make .mini-flow {
color: #e040fb;
}
.s-make .mini-flow .node {
border-radius: 14px;
border-width: 2px;
}
/* 17 — Node Graph */
.s-nodegraph {
background: #080c10;
color: #d4e4f7;
}
.s-nodegraph .mini-header {
font-family: "Space Grotesk", sans-serif;
color: #22d3ee;
}
.s-nodegraph .mini-hero h3 {
font-family: "Space Grotesk", sans-serif;
}
.s-nodegraph .mini-btn {
background: #0891b2;
color: #fff;
border-radius: 6px;
}
.s-nodegraph .mini-terminal {
background: #0f1419;
border: 1px solid #1e3a4a;
color: #5a7a8f;
}
.s-nodegraph .mini-terminal .ok {
color: #22d3ee;
}
.s-nodegraph .mini-flow {
color: #22d3ee;
}
.s-nodegraph .mini-flow .node {
border-radius: 50%;
width: 20px;
height: 20px;
background: rgba(34, 211, 238, 0.15);
}
.s-nodegraph::before {
content: "";
position: absolute;
inset: 0;
background-image: radial-gradient(circle at 50% 50%, rgba(34, 211, 238, 0.06) 1px, transparent 1px);
background-size: 20px 20px;
pointer-events: none;
}
/* 18 — CI Greenlight */
.s-ci {
background: #010409;
color: #f0f6fc;
}
.s-ci .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #3fb950;
}
.s-ci .mini-hero h3 {
font-family: "Inter", sans-serif;
font-size: 17px;
}
.s-ci .mini-btn {
background: #21262d;
color: #3fb950;
border: 1px solid #3fb950;
border-radius: 6px;
}
.s-ci .mini-terminal {
background: #0d1117;
border: 1px solid #30363d;
color: #7d8590;
}
.s-ci .mini-terminal .ok {
color: #3fb950;
}
.s-ci .mini-flow {
color: #3fb950;
}
/* 19 — Webhook Pulse */
.s-webhook {
background: #0a1628;
color: #dbeafe;
}
.s-webhook .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #38bdf8;
font-size: 11px;
}
.s-webhook .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
}
.s-webhook .mini-btn {
background: #0284c7;
color: #fff;
border-radius: 6px;
}
.s-webhook .mini-terminal {
background: rgba(56, 189, 248, 0.08);
border: 1px solid rgba(56, 189, 248, 0.25);
color: #64748b;
}
.s-webhook .mini-terminal .ok {
color: #38bdf8;
}
.s-webhook .mini-flow {
color: #38bdf8;
}
.s-webhook .mini-flow .node.on {
border-radius: 50%;
animation: pulse 2s ease infinite;
}
@keyframes pulse {
0%,
100% {
box-shadow: 0 0 0 0 rgba(56, 189, 248, 0.5);
}
50% {
box-shadow: 0 0 0 6px rgba(56, 189, 248, 0);
}
}
/* 20 — Ops Dashboard */
.s-opsdash {
background: #111318;
color: #e4e6eb;
}
.s-opsdash .mini-header {
font-family: "Inter", sans-serif;
color: #a3e635;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.s-opsdash .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
font-size: 17px;
}
.s-opsdash .mini-btn {
background: #65a30d;
color: #fff;
border-radius: 4px;
font-size: 9px;
}
.s-opsdash .mini-terminal {
background: #1a1d24;
border: 1px solid #2d323c;
color: #6b7280;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4px 8px;
}
.s-opsdash .mini-terminal .ok {
color: #a3e635;
}
.s-opsdash .mini-flow {
color: #a3e635;
}
.s-opsdash .mini-flow .node {
border-radius: 4px;
height: 24px;
width: 32px;
position: relative;
}
.s-opsdash .mini-flow .node.on::before {
content: "";
position: absolute;
top: 4px;
left: 50%;
transform: translateX(-50%);
width: 6px;
height: 6px;
border-radius: 50%;
background: #a3e635;
}
.mini-time {
display: flex;
align-items: center;
gap: 12px;
margin-top: 12px;
position: relative;
z-index: 1;
}
.mini-hourglass {
width: 22px;
height: 30px;
flex-shrink: 0;
}
.mini-metric {
font-family: "IBM Plex Mono", monospace;
font-size: 10px;
font-weight: 500;
letter-spacing: -0.02em;
}
.mini-metric strong {
font-weight: 600;
}
/* 21 — Payback Green */
.s-payback {
background: #0a120e;
color: #e8f5ec;
}
.s-payback .mini-header {
font-family: "Inter", sans-serif;
color: #22c55e;
font-weight: 700;
}
.s-payback .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
}
.s-payback .mini-btn {
background: #22c55e;
color: #0a120e;
border-radius: 8px;
}
.s-payback .mini-terminal {
background: #111a14;
border: 1px solid #1e3d28;
color: #6b8f75;
}
.s-payback .mini-terminal .ok {
color: #22c55e;
}
.s-payback .mini-metric {
color: #22c55e;
}
.s-payback .hg-stroke {
stroke: #22c55e;
}
.s-payback .hg-fill {
fill: #22c55e;
}
/* 22 — Gold Sand */
.s-goldsand {
background: #0a0a0a;
color: #f5f0e6;
}
.s-goldsand .mini-header {
font-family: "Instrument Serif", serif;
font-style: italic;
color: #c9a962;
font-size: 14px;
}
.s-goldsand .mini-hero h3 {
font-family: "Instrument Serif", serif;
font-weight: 400;
font-size: 20px;
}
.s-goldsand .mini-btn {
border: 1px solid #c9a962;
color: #c9a962;
background: transparent;
border-radius: 2px;
}
.s-goldsand .mini-terminal {
border: 1px solid #2a2418;
color: #8a7d5c;
background: transparent;
}
.s-goldsand .mini-terminal .ok {
color: #c9a962;
}
.s-goldsand .mini-metric {
color: #c9a962;
}
.s-goldsand .hg-stroke {
stroke: #c9a962;
}
.s-goldsand .hg-fill {
fill: #c9a962;
}
/* 23 — Sand Timer Neon */
.s-sandneon {
background: #0a0e1a;
color: #eef2ff;
}
.s-sandneon .mini-header {
font-family: "Space Grotesk", sans-serif;
color: #fbbf24;
}
.s-sandneon .mini-hero h3 {
font-family: "Space Grotesk", sans-serif;
}
.s-sandneon .mini-btn {
background: #fbbf24;
color: #0a0e1a;
border-radius: 6px;
}
.s-sandneon .mini-terminal {
background: #0f1424;
border: 1px solid #28304f;
color: #7e89a8;
}
.s-sandneon .mini-terminal .ok {
color: #00e5a8;
}
.s-sandneon .mini-metric {
color: #fbbf24;
}
.s-sandneon .hg-stroke {
stroke: #fbbf24;
}
.s-sandneon .hg-fill {
fill: #fbbf24;
}
.s-sandneon .hg-sand {
animation: sand-fall 2.5s ease-in-out infinite;
}
@keyframes sand-fall {
0%,
100% {
opacity: 0.3;
transform: translateY(0);
}
50% {
opacity: 1;
transform: translateY(3px);
}
}
/* 24 — Minute Counter */
.s-minutes {
background: #111318;
color: #e4e6eb;
}
.s-minutes .mini-header {
font-family: "JetBrains Mono", monospace;
color: #94a3b8;
font-size: 11px;
}
.s-minutes .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-size: 15px;
text-transform: uppercase;
letter-spacing: -0.02em;
}
.s-minutes .mini-btn {
background: #334155;
color: #f8fafc;
border-radius: 4px;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-minutes .mini-terminal {
background: #1a1d24;
border: 1px solid #2d323c;
color: #64748b;
}
.s-minutes .mini-terminal .ok {
color: #38bdf8;
}
.s-minutes .mini-metric {
color: #38bdf8;
}
.s-minutes .hg-stroke {
stroke: #94a3b8;
}
.s-minutes .hg-fill {
fill: #38bdf8;
}
/* 25 — Time is Money */
.s-timemoney {
background: linear-gradient(145deg, #1a1408 0%, #0d0d0d 100%);
color: #faf6eb;
}
.s-timemoney .mini-header {
font-family: "Inter", sans-serif;
color: #eab308;
font-weight: 700;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.s-timemoney .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 700;
}
.s-timemoney .mini-btn {
background: linear-gradient(135deg, #eab308, #ca8a04);
color: #1a1408;
border-radius: 6px;
}
.s-timemoney .mini-terminal {
background: rgba(234, 179, 8, 0.06);
border: 1px solid rgba(234, 179, 8, 0.25);
color: #a08c50;
}
.s-timemoney .mini-terminal .ok {
color: #eab308;
}
.s-timemoney .mini-metric {
color: #eab308;
}
.s-timemoney .hg-stroke {
stroke: #eab308;
}
.s-timemoney .hg-fill {
fill: #eab308;
}
.s-timemoney::before {
content: "$";
position: absolute;
right: 16px;
top: 12px;
font-size: 48px;
font-weight: 700;
color: rgba(234, 179, 8, 0.06);
font-family: "Inter", sans-serif;
pointer-events: none;
}
/* 26 — Hourback Relay */
.s-hourrelay {
background: linear-gradient(180deg, #0f1419 0%, #151b24 100%);
color: #e8ecf4;
}
.s-hourrelay .mini-header {
font-family: "Inter", sans-serif;
color: #60a5fa;
}
.s-hourrelay .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
}
.s-hourrelay .mini-btn {
background: #60a5fa;
color: #0f1419;
border-radius: 8px;
}
.s-hourrelay .mini-terminal {
background: rgba(96, 165, 250, 0.06);
border: 1px solid rgba(96, 165, 250, 0.2);
color: #7e8fa8;
}
.s-hourrelay .mini-terminal .ok {
color: #60a5fa;
}
.s-hourrelay .mini-metric {
color: #60a5fa;
}
.s-hourrelay .hg-stroke {
stroke: #60a5fa;
}
.s-hourrelay .hg-fill {
fill: #60a5fa;
}
/* 27 — Urgent Sand */
.s-urgent {
background: #140a08;
color: #fef2f2;
}
.s-urgent .mini-header {
font-family: "Syne", sans-serif;
color: #f97316;
text-transform: uppercase;
font-size: 10px;
letter-spacing: 0.08em;
}
.s-urgent .mini-hero h3 {
font-family: "Syne", sans-serif;
font-weight: 700;
font-size: 17px;
}
.s-urgent .mini-btn {
background: #f97316;
color: #140a08;
border-radius: 4px;
text-transform: uppercase;
font-size: 9px;
letter-spacing: 0.04em;
}
.s-urgent .mini-terminal {
background: #1f1210;
border-left: 3px solid #f97316;
color: #9a6b60;
}
.s-urgent .mini-terminal .ok {
color: #fb923c;
}
.s-urgent .mini-metric {
color: #f97316;
}
.s-urgent .hg-stroke {
stroke: #f97316;
}
.s-urgent .hg-fill {
fill: #f97316;
}
/* 28 — Ledger Payback */
.s-ledger {
background: #f8faf8;
color: #1a2e1a;
}
.s-ledger .mini-header {
font-family: "Libre Baskerville", serif;
color: #166534;
}
.s-ledger .mini-hero h3 {
font-family: "Libre Baskerville", serif;
font-weight: 700;
font-size: 18px;
}
.s-ledger .mini-btn {
background: #166534;
color: #fff;
border-radius: 4px;
}
.s-ledger .mini-terminal {
background: #fff;
border: 1px solid #c6e0c6;
color: #4a6b4a;
font-family: "IBM Plex Mono", monospace;
}
.s-ledger .mini-terminal .ok {
color: #166534;
}
.s-ledger .mini-metric {
color: #166534;
}
.s-ledger .hg-stroke {
stroke: #166534;
}
.s-ledger .hg-fill {
fill: #166534;
}
/* 29 — Compound Time */
.s-compound {
background: linear-gradient(160deg, #1a1033 0%, #0f0a1a 100%);
color: #ede9fe;
}
.s-compound .mini-header {
font-family: "Outfit", sans-serif;
color: #a78bfa;
}
.s-compound .mini-hero h3 {
font-family: "Outfit", sans-serif;
font-weight: 600;
}
.s-compound .mini-btn {
background: #7c3aed;
color: #fff;
border-radius: 10px;
}
.s-compound .mini-terminal {
background: rgba(167, 139, 250, 0.08);
border: 1px solid rgba(167, 139, 250, 0.2);
color: #9b8ec4;
}
.s-compound .mini-terminal .ok {
color: #a78bfa;
}
.s-compound .mini-metric {
color: #a78bfa;
}
.s-compound .hg-stroke {
stroke: #a78bfa;
}
.s-compound .hg-fill {
fill: #a78bfa;
}
/* 30 — Automation Saves */
.s-saves {
background: #0c1018;
color: #e2e8f0;
}
.s-saves .mini-header {
font-family: "Space Grotesk", sans-serif;
color: #00e5a8;
}
.s-saves .mini-hero h3 {
font-family: "Space Grotesk", sans-serif;
}
.s-saves .mini-btn {
background: #00e5a8;
color: #0c1018;
border-radius: 8px;
}
.s-saves .mini-terminal {
background: #141a28;
border: 1px solid #28304f;
color: #7e89a8;
}
.s-saves .mini-terminal .ok {
color: #00e5a8;
}
.s-saves .mini-metric {
color: #00e5a8;
}
.s-saves .hg-stroke {
stroke: #00e5a8;
}
.s-saves .hg-fill {
fill: #00e5a8;
}
.s-saves::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(circle at 70% 30%, rgba(0, 229, 168, 0.1), transparent 55%);
pointer-events: none;
}
.mini-terminal .prompt {
opacity: 0.7;
}
.mini-terminal .err {
color: #f87171;
}
.mini-terminal .dim {
opacity: 0.55;
}
.mini-terminal .hl {
color: inherit;
font-weight: 600;
}
.mini-rack {
display: flex;
gap: 4px;
margin-top: 10px;
}
.mini-rack span {
width: 8px;
height: 8px;
border-radius: 50%;
background: #333;
}
.mini-rack span.on {
box-shadow: 0 0 6px currentColor;
}
.mini-code {
margin-top: 12px;
padding: 8px 10px;
border-radius: 6px;
font-family: "JetBrains Mono", monospace;
font-size: 8px;
line-height: 1.55;
text-align: left;
}
.mini-code .kw {
color: #c678dd;
}
.mini-code .fn {
color: #61afef;
}
.mini-code .str {
color: #98c379;
}
.mini-code .cm {
opacity: 0.45;
}
/* 31 — Matrix Terminal */
.s-matrix {
background: #000;
color: #00ff41;
}
.s-matrix .mini-header {
font-family: "JetBrains Mono", monospace;
color: #00ff41;
text-shadow: 0 0 8px rgba(0, 255, 65, 0.5);
}
.s-matrix .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-size: 14px;
text-transform: uppercase;
}
.s-matrix .mini-btn {
background: #00ff41;
color: #000;
border-radius: 0;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-matrix .mini-terminal {
background: #001a00;
border: 1px solid #00ff4133;
color: #00cc33;
box-shadow: inset 0 0 20px rgba(0, 255, 65, 0.05);
}
.s-matrix .mini-terminal .ok {
color: #00ff41;
}
.s-matrix::before {
content: "";
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg,
transparent,
transparent 2px,
rgba(0, 255, 65, 0.03) 2px,
rgba(0, 255, 65, 0.03) 4px
);
pointer-events: none;
}
/* 32 — SSH Session */
.s-ssh {
background: #1e1e1e;
color: #d4d4d4;
}
.s-ssh .mini-header {
font-family: "JetBrains Mono", monospace;
color: #4ec9b0;
font-size: 11px;
}
.s-ssh .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-size: 14px;
}
.s-ssh .mini-btn {
background: #0e639c;
color: #fff;
border-radius: 4px;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-ssh .mini-terminal {
background: #0c0c0c;
border: 1px solid #333;
color: #9cdcfe;
border-radius: 0;
}
.s-ssh .mini-terminal .ok {
color: #4ec9b0;
}
.s-ssh .mini-terminal .prompt {
color: #dcdcaa;
}
/* 33 — Server Rack */
.s-rack {
background: #0d0d0d;
color: #c8c8c8;
}
.s-rack .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #a3e635;
font-size: 10px;
letter-spacing: 0.05em;
}
.s-rack .mini-hero h3 {
font-family: "IBM Plex Mono", monospace;
font-size: 14px;
}
.s-rack .mini-btn {
background: #262626;
color: #a3e635;
border: 1px solid #a3e635;
border-radius: 2px;
font-size: 9px;
}
.s-rack .mini-terminal {
background: #141414;
border: 1px solid #2a2a2a;
color: #6b6b6b;
font-size: 8px;
}
.s-rack .mini-terminal .ok {
color: #a3e635;
}
.s-rack .mini-rack span.on:nth-child(1) {
background: #a3e635;
color: #a3e635;
}
.s-rack .mini-rack span.on:nth-child(2) {
background: #22c55e;
color: #22c55e;
}
.s-rack .mini-rack span.on:nth-child(3) {
background: #eab308;
color: #eab308;
}
.s-rack .mini-rack span.on:nth-child(4) {
background: #a3e635;
color: #a3e635;
}
/* 34 — Syntax Hacker */
.s-syntax {
background: #282c34;
color: #abb2bf;
}
.s-syntax .mini-header {
font-family: "JetBrains Mono", monospace;
color: #61afef;
}
.s-syntax .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-size: 14px;
}
.s-syntax .mini-btn {
background: #61afef;
color: #282c34;
border-radius: 6px;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-syntax .mini-code {
background: #21252b;
border: 1px solid #181a1f;
color: #abb2bf;
}
.s-syntax .mini-terminal {
background: #21252b;
border: 1px solid #181a1f;
color: #5c6370;
margin-top: 8px;
}
.s-syntax .mini-terminal .ok {
color: #98c379;
}
/* 35 — Datacenter Cold */
.s-datacenter {
background: linear-gradient(180deg, #0a1628 0%, #060d18 100%);
color: #bfdbfe;
}
.s-datacenter .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #38bdf8;
font-size: 10px;
}
.s-datacenter .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
font-size: 16px;
}
.s-datacenter .mini-btn {
background: #0284c7;
color: #fff;
border-radius: 4px;
font-size: 9px;
}
.s-datacenter .mini-terminal {
background: rgba(0, 0, 0, 0.4);
border: 1px solid #1e3a5f;
color: #64748b;
}
.s-datacenter .mini-terminal .ok {
color: #38bdf8;
}
.s-datacenter::after {
content: "DC-01 · rack A14";
position: absolute;
right: 12px;
bottom: 10px;
font-family: "IBM Plex Mono", monospace;
font-size: 7px;
color: #1e3a5f;
letter-spacing: 0.06em;
}
/* 36 — Root Shell */
.s-root {
background: #000;
color: #f5f5f5;
}
.s-root .mini-header {
font-family: "JetBrains Mono", monospace;
color: #ef4444;
font-size: 11px;
}
.s-root .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-size: 14px;
}
.s-root .mini-btn {
background: #ef4444;
color: #000;
border-radius: 0;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
font-weight: 700;
}
.s-root .mini-terminal {
background: #0a0a0a;
border: 2px solid #ef4444;
color: #a3a3a3;
}
.s-root .mini-terminal .prompt {
color: #ef4444;
}
.s-root .mini-terminal .ok {
color: #22c55e;
}
/* 37 — Serial Console */
.s-serial {
background: #0c0c0c;
color: #33ff33;
}
.s-serial .mini-header,
.s-serial .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
color: #33ff33;
font-size: 13px;
}
.s-serial .mini-btn {
background: transparent;
color: #33ff33;
border: 1px solid #33ff33;
border-radius: 0;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-serial .mini-terminal {
background: #000;
border: none;
color: #228822;
font-size: 8px;
}
.s-serial .mini-terminal .ok {
color: #33ff33;
}
.s-serial::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(ellipse at center, transparent 60%, rgba(0, 0, 0, 0.6) 100%);
pointer-events: none;
}
/* 38 — Syslog Tail */
.s-syslog {
background: #111;
color: #ccc;
}
.s-syslog .mini-header {
font-family: "IBM Plex Mono", monospace;
color: #888;
font-size: 10px;
}
.s-syslog .mini-hero h3 {
font-family: "IBM Plex Mono", monospace;
font-size: 13px;
color: #eee;
}
.s-syslog .mini-btn {
background: #333;
color: #fff;
border-radius: 2px;
font-family: "IBM Plex Mono", monospace;
font-size: 9px;
}
.s-syslog .mini-terminal {
background: #0a0a0a;
border-left: 2px solid #555;
color: #666;
font-size: 7px;
line-height: 1.6;
}
.s-syslog .mini-terminal .ok {
color: #7ec8e3;
}
.s-syslog .mini-terminal .warn {
color: #eab308;
}
/* 39 — Docker / K8s */
.s-k8s {
background: #0f1419;
color: #e2e8f0;
}
.s-k8s .mini-header {
font-family: "JetBrains Mono", monospace;
color: #326ce5;
font-size: 11px;
}
.s-k8s .mini-hero h3 {
font-family: "Inter", sans-serif;
font-weight: 600;
font-size: 15px;
}
.s-k8s .mini-btn {
background: #326ce5;
color: #fff;
border-radius: 6px;
font-size: 9px;
}
.s-k8s .mini-terminal {
background: #1a1f26;
border: 1px solid #2d3748;
color: #718096;
}
.s-k8s .mini-terminal .ok {
color: #48bb78;
}
.s-k8s .mini-terminal .hl {
color: #63b3ed;
}
/* 40 — Brutalist Server (your pick + server) */
.s-brutal-srv {
background: #e8e8e8;
color: #111;
}
.s-brutal-srv .mini-header {
font-family: "JetBrains Mono", monospace;
background: #111;
color: #0f0;
padding: 4px 8px;
display: inline-block;
font-size: 10px;
}
.s-brutal-srv .mini-hero h3 {
font-family: "JetBrains Mono", monospace;
font-weight: 700;
text-transform: uppercase;
font-size: 14px;
}
.s-brutal-srv .mini-btn {
background: #ff3300;
color: #fff;
border-radius: 0;
box-shadow: 4px 4px 0 #111;
font-family: "JetBrains Mono", monospace;
font-size: 9px;
}
.s-brutal-srv .mini-terminal {
background: #111;
color: #0f0;
border: 3px solid #111;
border-radius: 0;
}
.s-brutal-srv .mini-terminal .ok {
color: #0f0;
}
.s-brutal-srv .mini-terminal .prompt {
color: #ff3300;
}
</style>
</head>
<body>
<div class="wrap">
<header>
<p class="eyebrow">Visual direction</p>
<h1>40 style ideas for the site</h1>
<p class="lede">
You liked <strong>Brutalist Mono</strong> and <strong>Swiss Minimal</strong> — Round 4 (#3140) goes
further into <strong>hacker code, SSH, and server</strong> aesthetics. Click to pick.
</p>
</header>
<div class="toolbar">
<span class="pick-label">Your pick: <span class="pick-value" id="pick-display">none yet</span></span>
<button class="btn" type="button" id="clear-pick">Clear</button>
<button class="btn" type="button" id="copy-pick">Copy choice</button>
</div>
<div class="grid" id="styles"></div>
</div>
<script>
const styles = [
{
id: 1,
name: "Terminal Neon",
class: "s-terminal-neon",
desc: "What you have now — dark, mint accent, grid glow, dev-tool aesthetic. Credible for engineers, maybe cold for non-technical buyers.",
tags: ["current", "dark", "technical", "mint"],
brand: "Runloop",
},
{
id: 2,
name: "Light Editorial",
class: "s-light-editorial",
desc: "Warm off-white, serif headlines, magazine layout. Feels like a senior consultant, not a hacker. Great if you want trust over flash.",
tags: ["light", "serif", "premium", "calm"],
brand: "Flowcraft",
},
{
id: 3,
name: "Swiss Minimal",
class: "s-swiss",
desc: "Black on white, tight typography, zero decoration. Confident and timeless. Lets your copy do the work.",
tags: ["minimal", "light", "stark", "timeless"],
brand: "Relay",
},
{
id: 4,
name: "Warm Studio",
class: "s-warm",
desc: "Cream, terracotta, rounded buttons. Human and approachable — good for small business owners who find “terminal” intimidating.",
tags: ["warm", "friendly", "consultancy"],
brand: "Quiet Ops",
},
{
id: 5,
name: "Blueprint",
class: "s-blueprint",
desc: "Engineering drawing vibe — grid background, dashed borders, blueprint blue. Technical but structured, not neon-bro.",
tags: ["technical", "dark", "structured"],
brand: "Conduit",
},
{
id: 6,
name: "Brutalist Mono",
class: "s-brutalist",
desc: "Raw monospace, harsh contrast, red accent. Memorable and opinionated. Polarizing — you'll love it or hate it.",
tags: ["bold", "mono", "polarizing"],
brand: "Patchline",
},
{
id: 7,
name: "Soft SaaS",
class: "s-soft-saas",
desc: "Purple gradients, glass cards, rounded UI. Modern startup energy. Risk: looks like every AI landing page in 2024.",
tags: ["gradient", "modern", "startup"],
brand: "Triggerline",
},
{
id: 8,
name: "Industrial",
class: "s-industrial",
desc: "Dark steel + safety orange. Ops/manufacturing feel — “production systems” without the hacker aesthetic.",
tags: ["dark", "ops", "bold accent"],
brand: "Stillrun",
},
{
id: 9,
name: "Paper & Ink",
class: "s-paper",
desc: "Off-white paper, navy ink, subtle shadows. Professional services firm meets craft. Understated and trustworthy.",
tags: ["light", "professional", "classic"],
brand: "Offload",
},
{
id: 10,
name: "Monochrome Luxe",
class: "s-luxe",
desc: "Black, gold accent, italic serif. High-end consultancy positioning. Less “automation nerd,” more “trusted advisor.”",
tags: ["dark", "premium", "serif", "gold"],
brand: "Levkin",
},
{
id: 11,
name: "n8n Canvas",
class: "s-n8n",
desc: "Looks like a workflow builder — dark canvas, rounded node cards, coral accent. Instantly reads as “automation platform.” Closest to n8n / Make energy.",
tags: ["n8n-like", "nodes", "workflow", "dark"],
brand: "Flowcraft",
flow: true,
},
{
id: 12,
name: "Relay Handoff",
class: "s-relay",
desc: "Clean, minimal, electric blue — matches the Relay name vibe. Circular nodes, soft borders, “pass it along” feel. Technical but not intimidating.",
tags: ["relay-like", "minimal", "blue", "handoff"],
brand: "Relay",
flow: true,
},
{
id: 13,
name: "Patchline Signal",
class: "s-patchline",
desc: "Dark + signal-yellow accent, waveform in the background, mono CTAs. Pragmatic integrator energy — “we patch your stack together.” Pairs with Patchline brand.",
tags: ["patchline-like", "yellow", "signal", "mono"],
brand: "Patchline",
flow: true,
},
{
id: 14,
name: "Pipeline Stages",
class: "s-pipeline",
desc: "GitHub Actions / CI green — stage pills, checkmarks, YAML-terminal feel. Says “production pipeline” louder than “no-code toy.”",
tags: ["CI/CD", "github", "pipeline", "green"],
brand: "Mainline",
flow: true,
},
{
id: 15,
name: "Zapier Bright",
class: "s-zapier",
desc: "Light background, Zapier-orange, friendly rounded UI. Reads as accessible automation for business owners — less hacker, more “connect your apps.”",
tags: ["zapier-like", "orange", "light", "friendly"],
brand: "Splice",
flow: true,
},
{
id: 16,
name: "Make Connect",
class: "s-make",
desc: "Purple gradient, magenta nodes, rounded modules. Make.com / Integromat aesthetic — visual, modular, “scenarios” energy.",
tags: ["make-like", "purple", "modules", "gradient"],
brand: "Workloom",
flow: true,
},
{
id: 17,
name: "Node Graph",
class: "s-nodegraph",
desc: "Dot grid background, cyan nodes, graph-paper feel. Generic workflow-builder look — works with any automation brand name.",
tags: ["graph", "nodes", "cyan", "builder"],
brand: "Conduit",
flow: true,
},
{
id: 18,
name: "CI Greenlight",
class: "s-ci",
desc: "GitHub-dark, green status checks, outlined CTA. Pure “ship to production” — best if you want engineering credibility front and center.",
tags: ["github", "checks", "deploy", "engineering"],
brand: "Runloop",
flow: true,
},
{
id: 19,
name: "Webhook Pulse",
class: "s-webhook",
desc: "Event-driven aesthetic — pulsing trigger node, sky-blue on navy. Perfect for webhook/trigger positioning; feels live and reactive.",
tags: ["webhooks", "events", "pulse", "real-time"],
brand: "Triggerline",
flow: true,
},
{
id: 20,
name: "Ops Dashboard",
class: "s-opsdash",
desc: "Monitoring dashboard vibe — status lights on nodes, lime accent, metric-grid terminal. “Automation you can watch” — ops/SRE friendly.",
tags: ["dashboard", "monitoring", "ops", "status"],
brand: "Stillrun",
flow: true,
},
{
id: 21,
name: "Payback Green",
class: "s-payback",
desc: "Hourglass + green ROI metric — literal “payback” energy. Matches Payback / Paidhour brand names. Clean Inter, money-return story.",
tags: ["payback", "hourglass", "green", "ROI"],
brand: "Payback",
time: "8 hrs → 90 sec",
},
{
id: 22,
name: "Gold Sand",
class: "s-goldsand",
desc: "Black + gold hourglass — “time is money” luxury. Serif headlines, gold sand in the logo. Pairs with Goldminute brand.",
tags: ["gold", "hourglass", "premium", "money"],
brand: "Goldminute",
time: "$ saved / week",
},
{
id: 23,
name: "Sand Timer Neon",
class: "s-sandneon",
desc: "Your current site palette + animated falling sand in the hourglass. Urgency (sand running) + automation (mint terminal). Best of both worlds.",
tags: ["hourglass", "neon", "animated", "urgency"],
brand: "Timesand",
time: "14 steps eliminated",
sandAnim: true,
},
{
id: 24,
name: "Minute Counter",
class: "s-minutes",
desc: "Monospace, dashboard counters, blue accent on minutes saved. Feels like a timer app — precise, measurable, engineer-trustworthy.",
tags: ["minutes", "mono", "counter", "precise"],
brand: "Minutebank",
time: "480 min/mo saved",
},
{
id: 25,
name: "Time is Money",
class: "s-timemoney",
desc: "Gold on black, subtle $ watermark, hourglass in hero. Says the value prop without a word of copy. Bold for ROI-focused landing pages.",
tags: ["money", "gold", "hourglass", "bold"],
brand: "Bankable",
time: "time = margin",
},
{
id: 26,
name: "Hourglass Relay",
class: "s-hourrelay",
desc: "Relay-blue minimal + hourglass metric row. If you like Relays cleanliness but want time/payback front and center.",
tags: ["relay-like", "hourglass", "blue", "minimal"],
brand: "Buyback",
time: "hours returned",
},
{
id: 27,
name: "Urgent Sand",
class: "s-urgent",
desc: "Orange hourglass, dark red-black bg — sand running out, automate now. High urgency without being scammy. Good for “stop wasting hours” messaging.",
tags: ["urgency", "orange", "hourglass", "ops"],
brand: "Sandclock",
time: "before sand runs out",
},
{
id: 28,
name: "Ledger Payback",
class: "s-ledger",
desc: "Light green ledger aesthetic — hourglass as accounting line item. CFO-friendly, trustworthy, “savings on the books.”",
tags: ["ledger", "light", "payback", "trust"],
brand: "Paidhour",
time: "ROI on every run",
},
{
id: 29,
name: "Compound Time",
class: "s-compound",
desc: "Purple, stacked savings metaphor — hourglass + compounding returns. Retainer / roadmap story: automations stack over time.",
tags: ["compound", "purple", "hourglass", "growth"],
brand: "Compound",
time: "savings stack",
},
{
id: 30,
name: "Automation Saves",
class: "s-saves",
desc: "Mint terminal + hourglass — automation tool look with time-saved proof. Closest to your live site, but hourglass makes ROI visible.",
tags: ["automation", "mint", "hourglass", "current+"],
brand: "Hourback",
time: "8 hrs → 90 sec",
},
{
id: 31,
name: "Matrix Terminal",
class: "s-matrix",
desc: "Classic hacker green-on-black — phosphor glow, scanlines. Pure “I write code in the dark.” Pairs with Patchline / Runloop names.",
tags: ["hacker", "matrix", "green", "terminal"],
brand: "Patchline",
terminal: "matrix",
},
{
id: 32,
name: "SSH Session",
class: "s-ssh",
desc: "VS Code / real SSH vibes — blue strings, teal success, dark chrome. Feels like you SSHd into prod and fixed it.",
tags: ["ssh", "server", "mono", "dev"],
brand: "Runloop",
terminal: "ssh",
},
{
id: 33,
name: "Server Rack",
class: "s-rack",
desc: "Datacenter rack LEDs + syslog lines. “Production server” not “landing page.” Great for ops/CI positioning.",
tags: ["server", "rack", "ops", "status"],
brand: "Mainline",
terminal: "rack",
},
{
id: 34,
name: "Syntax Hacker",
class: "s-syntax",
desc: "One Dark Pro code editor as the hero — Python/JS colors, then a small terminal below. Best “I actually write scripts” signal.",
tags: ["code", "syntax", "hacker", "editor"],
brand: "Patchline",
terminal: "code",
},
{
id: 35,
name: "Datacenter Cold",
class: "s-datacenter",
desc: "Cold blue server room — rack label watermark, restrained. Enterprise infra without the matrix cliché.",
tags: ["datacenter", "server", "blue", "enterprise"],
brand: "Conduit",
terminal: "datacenter",
},
{
id: 36,
name: "Root Shell",
class: "s-root",
desc: "root@ prod — red prompt, black void, green OK. High stakes, high skill. More intense than Brutalist Mono.",
tags: ["root", "shell", "red", "prod"],
brand: "Stillrun",
terminal: "root",
},
{
id: 37,
name: "Serial Console",
class: "s-serial",
desc: "Bare-metal serial port — chunky green text, no chrome. Like configuring a box over IPMI. Very old-school server.",
tags: ["serial", "bare-metal", "green", "minimal"],
brand: "Relay",
terminal: "serial",
},
{
id: 38,
name: "Syslog Tail",
class: "s-syslog",
desc: "tail -f /var/log — timestamps, INFO/WARN lines, cron firing. Automation as background daemon.",
tags: ["syslog", "logs", "cron", "server"],
brand: "Quiet Ops",
terminal: "syslog",
},
{
id: 39,
name: "K8s / Container",
class: "s-k8s",
desc: "kubectl apply, pods running — modern infra stack. For CI/CD and pipeline buyers who live in YAML.",
tags: ["k8s", "docker", "deploy", "yaml"],
brand: "Runloop",
terminal: "k8s",
},
{
id: 40,
name: "Brutalist Server",
class: "s-brutal-srv",
desc: "Your Brutalist Mono pick — but explicitly server: red prompt, green output, black terminal. Opinionated + technical.",
tags: ["brutalist", "server", "your-pick+", "hacker"],
brand: "Patchline",
terminal: "brutal",
},
];
const grid = document.getElementById("styles");
let picked = localStorage.getItem("style-pick") || "";
function flowHtml() {
return `
<div class="mini-flow" aria-hidden="true">
<span class="node"></span><span class="wire"></span>
<span class="node on"></span><span class="wire"></span>
<span class="node"></span>
</div>`;
}
function hourglassSvg(animated) {
const sand = animated
? `<circle class="hg-sand hg-fill" cx="12" cy="11" r="1"/><circle class="hg-sand hg-fill" cx="12" cy="15" r="1" opacity="0.6"/>`
: `<path class="hg-fill" d="M9 19h6l-3 4-3-4z" opacity="0.45"/>`;
return `<svg class="mini-hourglass" viewBox="0 0 24 32" fill="none" aria-hidden="true">
<path class="hg-stroke" d="M6 4h12l-6 8 6 8H6l6-8-6-8z" stroke-width="1.8" stroke-linejoin="round"/>
${sand}
</svg>`;
}
function timeHtml(metric, animated) {
return `
<div class="mini-time" aria-hidden="true">
${hourglassSvg(animated)}
<span class="mini-metric"><strong>${metric}</strong></span>
</div>`;
}
function terminalBody(mode) {
const m = {
default: `<span class="prompt">$</span> deploy --target acme<br /><span class="ok">✓ 14 manual steps eliminated</span>`,
matrix: `<span class="dim">[sys]</span> initializing workflow mesh...<br /><span class="ok">&gt;&gt; LINK_OK</span> 14 nodes connected<br /><span class="prompt">&gt;</span> _`,
ssh: `<span class="dim">Welcome to Ubuntu 22.04 LTS</span><br /><span class="prompt">root@prod-01:~#</span> systemctl start automation<br /><span class="ok">● automation.service — active (running)</span>`,
rack: `<span class="dim">[cron]</span> job dispatcher started<br /><span class="ok">OK</span> workflow/sync — 200 — 94ms<br /><span class="dim">[health]</span> all nodes nominal`,
datacenter: `<span class="dim">dc-01 / rack A14</span><br /><span class="prompt">$</span> ./deploy.sh --env production<br /><span class="ok">✓ deploy complete — 0 errors</span>`,
root: `<span class="prompt">root@prod:~#</span> ./automate --force<br /><span class="ok">DONE</span> 14 steps replaced · exit 0`,
serial: `<span class="dim">BIOS v2.4 — serial 0x8F2A</span><br /><span class="prompt">&gt;</span> RUN AUTO_PIPELINE<br /><span class="ok">[PASS]</span> HANDOFF COMPLETE`,
syslog: `<span class="dim">Apr 19 02:14:01</span> cron[8821]: started<br /><span class="warn">Apr 19 02:14:02</span> job: lead-intake<br /><span class="ok">Apr 19 02:14:03</span> job: done (90ms)`,
k8s: `<span class="hl">kubectl apply</span> -f pipeline.yaml<br /><span class="ok">pod/automation-7d4f Running</span><br /><span class="dim">replicas: 1/1 ready</span>`,
brutal: `<span class="prompt">root@box#</span> ./patchline run<br /><span class="ok">OK</span> 14 MANUAL_STEPS → 0`,
};
return m[mode] || m.default;
}
function codeHtml() {
return `<div class="mini-code" aria-hidden="true"><span class="kw">async function</span> <span class="fn">automate</span>(client) {<br />&nbsp;&nbsp;<span class="kw">await</span> client.<span class="fn">connect</span>(<span class="str">"crm"</span>);<br />&nbsp;&nbsp;<span class="cm">// 14 steps → 1 pipeline</span><br />}</div>`;
}
function rackHtml() {
return `<div class="mini-rack" aria-hidden="true"><span class="on"></span><span class="on"></span><span class="on"></span><span></span><span class="on"></span><span></span><span class="on"></span><span></span></div>`;
}
function previewHtml(brand, cls, opts = {}) {
return `
<div class="preview ${cls}">
<div class="mini-header">
<span>${brand}</span>
<span class="mini-nav"><span>Services</span><span>Process</span><span>Book</span></span>
</div>
<div class="mini-hero">
<h3>Automate the boring parts of your business.</h3>
<p>Production-ready scripts, workflows, and pipelines that run while you sleep.</p>
<span class="mini-btn">Book a free call</span>
</div>
${opts.flow ? flowHtml() : ""}
${opts.time ? timeHtml(opts.time, opts.sandAnim) : ""}
${opts.terminal === "rack" ? rackHtml() : ""}
${opts.terminal === "code" ? codeHtml() : ""}
<div class="mini-terminal">${terminalBody(opts.terminal || "default")}</div>
</div>`;
}
function render() {
const batch1 = styles.filter((s) => s.id <= 10);
const batch2 = styles.filter((s) => s.id > 10 && s.id <= 20);
const batch3 = styles.filter((s) => s.id > 20 && s.id <= 30);
const batch4 = styles.filter((s) => s.id > 30);
function cards(list) {
return list.map(
(s) => `
<button type="button" class="style-card${picked === s.name ? " is-picked" : ""}" data-name="${s.name}">
${previewHtml(s.brand, s.class, { flow: s.flow, time: s.time, sandAnim: s.sandAnim, terminal: s.terminal })}
<div class="meta">
<div class="meta-head">
<h2>${s.name}</h2>
<span class="meta-num">#${s.id}</span>
</div>
<p class="meta-desc">${s.desc}</p>
<div class="tags">${s.tags.map((t) => `<span>${t}</span>`).join("")}</div>
</div>
</button>`
).join("");
}
grid.innerHTML =
`<p class="batch-label">Round 1 — general</p>` +
cards(batch1) +
`<p class="batch-label">Round 2 — automation & workflow UI</p>` +
cards(batch2) +
`<p class="batch-label">Round 3 — hourglass, time & payback</p>` +
cards(batch3) +
`<p class="batch-label">Round 4 — hacker code & server</p>` +
cards(batch4);
}
function setPick(name) {
picked = name;
localStorage.setItem("style-pick", name);
document.getElementById("pick-display").textContent = name || "none yet";
render();
}
grid.addEventListener("click", (e) => {
const card = e.target.closest(".style-card");
if (!card) return;
const name = card.dataset.name;
setPick(picked === name ? "" : name);
});
document.getElementById("clear-pick").addEventListener("click", () => setPick(""));
document.getElementById("copy-pick").addEventListener("click", () => {
if (!picked) return;
const s = styles.find((x) => x.name === picked);
navigator.clipboard?.writeText(`Style pick: ${picked}\nTags: ${s?.tags?.join(", ") || ""}\nNotes: ${s?.desc || ""}`);
});
document.getElementById("pick-display").textContent = picked || "none yet";
render();
</script>
</body>
</html>