Files
resolutionflow/docs/resolutionflow-landing-page-mockup.html
Michael Chihlas cfe112ac43 docs: add landing page assets and polish landing CSS
Add landing page .docx export, HTML mockup, docx generator script,
and refine landing page CSS formatting/spacing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 17:28:49 -04:00

1639 lines
50 KiB
HTML
Raw 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.0">
<title>ResolutionFlow — From Issue to Resolution, Documented</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=Bricolage+Grotesque:opsz,wght@12..96,300;12..96,400;12..96,600;12..96,700;12..96,800&family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
/* ============================================
RESOLUTIONFLOW LANDING PAGE — DESIGN MOCKUP
Brand: Cyan #06b6d4 → #22d3ee
Background: hsl(228, 12%, 7%)
Fonts: IBM Plex Sans / Bricolage Grotesque / JetBrains Mono
============================================ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--cyan-500: #06b6d4;
--cyan-400: #22d3ee;
--cyan-300: #67e8f9;
--cyan-600: #0891b2;
--cyan-900: #164e63;
--bg-base: hsl(228, 12%, 7%);
--bg-card: hsl(228, 10%, 10%);
--bg-card-hover: hsl(228, 10%, 13%);
--bg-surface: hsl(228, 10%, 12%);
--text-primary: #f0f0f5;
--text-secondary: #a0a0b0;
--text-muted: #5a5a6e;
--border-subtle: hsl(228, 8%, 16%);
--border-glow: rgba(6, 182, 212, 0.15);
--font-heading: 'Bricolage Grotesque', sans-serif;
--font-body: 'IBM Plex Sans', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
--gradient-brand: linear-gradient(135deg, #06b6d4, #22d3ee);
--gradient-brand-text: linear-gradient(135deg, #22d3ee, #67e8f9);
--glass-bg: rgba(255, 255, 255, 0.03);
--glass-border: rgba(255, 255, 255, 0.06);
--glass-bg-hover: rgba(255, 255, 255, 0.06);
}
html { scroll-behavior: smooth; }
body {
font-family: var(--font-body);
background: var(--bg-base);
color: var(--text-primary);
line-height: 1.6;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
}
/* ---- AMBIENT BACKGROUND ---- */
.ambient-glow {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 0;
overflow: hidden;
}
.ambient-glow::before {
content: '';
position: absolute;
top: -30%;
left: 50%;
transform: translateX(-50%);
width: 900px;
height: 900px;
background: radial-gradient(circle, rgba(6,182,212,0.06) 0%, transparent 70%);
animation: ambientPulse 12s ease-in-out infinite;
}
.ambient-glow::after {
content: '';
position: absolute;
bottom: -20%;
right: -10%;
width: 600px;
height: 600px;
background: radial-gradient(circle, rgba(34,211,238,0.04) 0%, transparent 70%);
animation: ambientPulse 16s ease-in-out infinite reverse;
}
@keyframes ambientPulse {
0%, 100% { opacity: 0.6; transform: translateX(-50%) scale(1); }
50% { opacity: 1; transform: translateX(-50%) scale(1.15); }
}
/* ---- GRID PATTERN ---- */
.grid-pattern {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 0;
background-image:
linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);
background-size: 64px 64px;
mask-image: radial-gradient(ellipse at 50% 30%, black 20%, transparent 70%);
}
.page-content { position: relative; z-index: 1; }
/* ---- NAVIGATION ---- */
nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
padding: 0 2rem;
transition: all 0.3s ease;
}
nav.scrolled {
background: rgba(14, 15, 24, 0.85);
backdrop-filter: blur(20px) saturate(1.2);
border-bottom: 1px solid var(--glass-border);
}
.nav-inner {
max-width: 1200px;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
height: 72px;
}
.nav-logo {
display: flex;
align-items: center;
gap: 10px;
text-decoration: none;
}
.nav-logo-icon {
width: 36px;
height: 36px;
background: var(--gradient-brand);
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 20px rgba(6,182,212,0.2);
}
.nav-logo-icon svg { width: 20px; height: 20px; }
.nav-wordmark {
font-family: var(--font-heading);
font-size: 1.25rem;
font-weight: 700;
color: var(--text-primary);
letter-spacing: -0.02em;
}
.nav-wordmark span {
background: var(--gradient-brand-text);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.nav-links {
display: flex;
align-items: center;
gap: 2rem;
list-style: none;
}
.nav-links a {
font-family: var(--font-body);
font-size: 0.875rem;
font-weight: 500;
color: var(--text-secondary);
text-decoration: none;
transition: color 0.2s;
letter-spacing: 0.01em;
}
.nav-links a:hover { color: var(--text-primary); }
.nav-cta {
display: flex;
align-items: center;
gap: 1rem;
}
.btn-ghost {
font-family: var(--font-body);
font-size: 0.875rem;
font-weight: 500;
color: var(--text-secondary);
text-decoration: none;
padding: 0.5rem 1rem;
border-radius: 8px;
transition: all 0.2s;
}
.btn-ghost:hover { color: var(--text-primary); background: var(--glass-bg-hover); }
.btn-primary {
font-family: var(--font-body);
font-size: 0.875rem;
font-weight: 600;
color: #000;
text-decoration: none;
padding: 0.55rem 1.25rem;
border-radius: 8px;
background: var(--gradient-brand);
box-shadow: 0 0 20px rgba(6,182,212,0.15), inset 0 1px 0 rgba(255,255,255,0.15);
transition: all 0.25s;
letter-spacing: -0.01em;
}
.btn-primary:hover {
box-shadow: 0 0 30px rgba(6,182,212,0.3), inset 0 1px 0 rgba(255,255,255,0.2);
transform: translateY(-1px);
}
/* ---- HERO SECTION ---- */
.hero {
padding: 10rem 2rem 6rem;
text-align: center;
max-width: 900px;
margin: 0 auto;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 6px 16px;
border-radius: 100px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 500;
color: var(--cyan-400);
margin-bottom: 2rem;
letter-spacing: 0.03em;
animation: fadeInDown 0.8s ease-out;
}
.hero-badge::before {
content: '';
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--cyan-400);
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 0.5; }
50% { opacity: 1; box-shadow: 0 0 8px var(--cyan-400); }
}
.hero h1 {
font-family: var(--font-heading);
font-size: clamp(2.75rem, 6vw, 4.25rem);
font-weight: 800;
line-height: 1.08;
letter-spacing: -0.035em;
margin-bottom: 1.5rem;
animation: fadeInUp 0.8s ease-out 0.15s both;
}
.hero h1 .gradient-text {
background: var(--gradient-brand-text);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-sub {
font-size: 1.2rem;
font-weight: 400;
color: var(--text-secondary);
line-height: 1.7;
max-width: 600px;
margin: 0 auto 2.5rem;
animation: fadeInUp 0.8s ease-out 0.3s both;
}
.hero-actions {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
animation: fadeInUp 0.8s ease-out 0.45s both;
}
.btn-hero-primary {
font-family: var(--font-body);
font-size: 1rem;
font-weight: 600;
color: #000;
text-decoration: none;
padding: 0.85rem 2rem;
border-radius: 10px;
background: var(--gradient-brand);
box-shadow: 0 4px 30px rgba(6,182,212,0.2), inset 0 1px 0 rgba(255,255,255,0.15);
transition: all 0.3s;
letter-spacing: -0.01em;
}
.btn-hero-primary:hover {
box-shadow: 0 4px 40px rgba(6,182,212,0.35), inset 0 1px 0 rgba(255,255,255,0.2);
transform: translateY(-2px);
}
.btn-hero-secondary {
font-family: var(--font-body);
font-size: 1rem;
font-weight: 500;
color: var(--text-secondary);
text-decoration: none;
padding: 0.85rem 2rem;
border-radius: 10px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
transition: all 0.3s;
}
.btn-hero-secondary:hover {
background: var(--glass-bg-hover);
border-color: rgba(255,255,255,0.1);
color: var(--text-primary);
}
/* ---- SOCIAL PROOF BAR ---- */
.social-proof-bar {
text-align: center;
padding: 3rem 2rem 1rem;
animation: fadeInUp 0.8s ease-out 0.6s both;
}
.social-proof-bar p {
font-family: var(--font-mono);
font-size: 0.75rem;
color: var(--text-muted);
letter-spacing: 0.08em;
text-transform: uppercase;
margin-bottom: 1.5rem;
}
.proof-stats {
display: flex;
justify-content: center;
gap: 3rem;
flex-wrap: wrap;
}
.proof-stat {
text-align: center;
}
.proof-stat .number {
font-family: var(--font-heading);
font-size: 1.75rem;
font-weight: 700;
background: var(--gradient-brand-text);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.proof-stat .label {
font-size: 0.8rem;
color: var(--text-muted);
margin-top: 0.25rem;
}
/* ---- APP PREVIEW ---- */
.app-preview {
max-width: 1000px;
margin: 3rem auto 0;
padding: 0 2rem;
animation: fadeInUp 1s ease-out 0.75s both;
}
.preview-window {
border-radius: 12px;
border: 1px solid var(--border-subtle);
background: var(--bg-card);
overflow: hidden;
box-shadow: 0 20px 80px rgba(0,0,0,0.4), 0 0 60px rgba(6,182,212,0.05);
}
.preview-titlebar {
display: flex;
align-items: center;
padding: 0 0 0 14px;
height: 40px;
background: rgba(255,255,255,0.02);
border-bottom: 1px solid var(--glass-border);
}
.preview-tab {
display: flex;
align-items: center;
gap: 8px;
padding: 0 14px;
height: 100%;
font-family: var(--font-mono);
font-size: 0.7rem;
color: var(--text-secondary);
border-right: 1px solid var(--glass-border);
background: rgba(255,255,255,0.02);
position: relative;
}
.preview-tab::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2px;
background: var(--gradient-brand);
}
.preview-tab .tab-icon {
width: 14px;
height: 14px;
border-radius: 3px;
background: var(--gradient-brand);
flex-shrink: 0;
}
.preview-tab .tab-close {
font-size: 0.65rem;
color: var(--text-muted);
margin-left: 4px;
cursor: default;
}
.preview-url-bar {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.preview-url {
display: flex;
align-items: center;
gap: 6px;
padding: 4px 12px;
border-radius: 6px;
background: rgba(255,255,255,0.03);
border: 1px solid var(--glass-border);
font-family: var(--font-mono);
font-size: 0.65rem;
color: var(--text-muted);
}
.preview-url .lock-icon {
color: #22c55e;
font-size: 0.6rem;
}
.preview-window-controls {
display: flex;
align-items: center;
margin-left: auto;
height: 100%;
}
.win-btn {
width: 46px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: var(--text-muted);
font-size: 0.7rem;
transition: background 0.15s;
}
.win-btn:hover { background: rgba(255,255,255,0.06); }
.win-btn.close:hover { background: #c42b1c; color: white; }
.win-btn svg { width: 12px; height: 12px; stroke: currentColor; fill: none; stroke-width: 1.5; }
.preview-body {
padding: 2rem;
min-height: 340px;
display: flex;
gap: 1.5rem;
}
.preview-sidebar {
width: 200px;
flex-shrink: 0;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.preview-sidebar-item {
padding: 8px 12px;
border-radius: 8px;
font-size: 0.8rem;
color: var(--text-secondary);
display: flex;
align-items: center;
gap: 8px;
}
.preview-sidebar-item.active {
background: rgba(6,182,212,0.08);
color: var(--cyan-400);
border-left: 3px solid var(--cyan-400);
}
.preview-sidebar-item .dot {
width: 8px;
height: 8px;
border-radius: 50%;
}
.preview-canvas {
flex: 1;
background: rgba(255,255,255,0.01);
border-radius: 12px;
border: 1px dashed rgba(255,255,255,0.06);
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
}
/* Mini decision tree visualization */
.mini-tree {
display: flex;
flex-direction: column;
align-items: center;
gap: 0;
}
.tree-node {
padding: 10px 20px;
border-radius: 10px;
font-size: 0.75rem;
font-weight: 600;
white-space: nowrap;
position: relative;
}
.tree-node.root {
background: var(--gradient-brand);
color: #000;
box-shadow: 0 0 20px rgba(6,182,212,0.2);
}
.tree-node.decision {
background: var(--bg-card);
border: 1px solid var(--border-subtle);
color: var(--text-primary);
font-size: 0.7rem;
}
.tree-connector {
width: 2px;
height: 24px;
background: rgba(6,182,212,0.2);
position: relative;
}
.tree-branch {
display: flex;
gap: 2rem;
position: relative;
}
.tree-branch::before {
content: '';
position: absolute;
top: 0;
left: 50%;
width: calc(100% - 100px);
transform: translateX(-50%);
height: 2px;
background: rgba(6,182,212,0.15);
}
.tree-branch-arm {
display: flex;
flex-direction: column;
align-items: center;
}
.tree-branch-arm .tree-connector { height: 18px; }
.tree-label {
font-family: var(--font-mono);
font-size: 0.6rem;
color: var(--cyan-400);
margin-bottom: 4px;
opacity: 0.7;
}
/* ---- SECTION LAYOUT ---- */
section { padding: 6rem 2rem; }
.section-inner { max-width: 1100px; margin: 0 auto; }
.section-label {
font-family: var(--font-mono);
font-size: 0.7rem;
font-weight: 600;
color: var(--cyan-400);
letter-spacing: 0.12em;
text-transform: uppercase;
margin-bottom: 1rem;
}
.section-title {
font-family: var(--font-heading);
font-size: clamp(2rem, 4vw, 2.75rem);
font-weight: 700;
letter-spacing: -0.03em;
line-height: 1.15;
margin-bottom: 1rem;
}
.section-desc {
font-size: 1.1rem;
color: var(--text-secondary);
line-height: 1.7;
max-width: 580px;
}
/* ---- PROBLEM SECTION ---- */
.problem-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
margin-top: 3.5rem;
align-items: start;
}
.problem-card {
padding: 2rem;
border-radius: 16px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
transition: all 0.3s;
}
.problem-card:hover {
background: var(--glass-bg-hover);
border-color: rgba(255,255,255,0.08);
transform: translateY(-2px);
}
.problem-icon {
width: 44px;
height: 44px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1.25rem;
font-size: 1.25rem;
}
.problem-icon.red { background: rgba(239,68,68,0.1); color: #ef4444; }
.problem-icon.amber { background: rgba(245,158,11,0.1); color: #f59e0b; }
.problem-icon.slate { background: rgba(148,163,184,0.1); color: #94a3b8; }
.problem-icon.violet { background: rgba(139,92,246,0.1); color: #8b5cf6; }
.problem-card h3 {
font-family: var(--font-heading);
font-size: 1.15rem;
font-weight: 700;
margin-bottom: 0.6rem;
letter-spacing: -0.01em;
}
.problem-card p {
font-size: 0.9rem;
color: var(--text-secondary);
line-height: 1.65;
}
/* ---- SOLUTION / BRAND EQUATION ---- */
.equation-section {
text-align: center;
padding: 5rem 2rem;
position: relative;
}
.equation-section::before {
content: '';
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 500px;
height: 100%;
background: radial-gradient(ellipse, rgba(6,182,212,0.04) 0%, transparent 70%);
pointer-events: none;
}
.brand-equation {
display: flex;
align-items: center;
justify-content: center;
gap: 1rem;
flex-wrap: wrap;
font-family: var(--font-heading);
font-size: clamp(1.5rem, 3.5vw, 2.5rem);
font-weight: 700;
letter-spacing: -0.02em;
margin-bottom: 1.5rem;
}
.eq-item {
padding: 0.5rem 1.25rem;
border-radius: 12px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
}
.eq-operator {
color: var(--cyan-400);
font-size: 2rem;
}
.eq-result {
background: var(--gradient-brand);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
padding: 0;
}
/* ---- HOW IT WORKS ---- */
.steps-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
margin-top: 3.5rem;
counter-reset: step;
}
.step-card {
padding: 2rem;
border-radius: 16px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
position: relative;
counter-increment: step;
transition: all 0.3s;
}
.step-card:hover {
background: var(--glass-bg-hover);
border-color: var(--border-glow);
}
.step-card::before {
content: counter(step, decimal-leading-zero);
font-family: var(--font-mono);
font-size: 0.7rem;
font-weight: 600;
color: var(--cyan-400);
opacity: 0.6;
letter-spacing: 0.05em;
}
.step-card h3 {
font-family: var(--font-heading);
font-size: 1.25rem;
font-weight: 700;
margin: 1rem 0 0.75rem;
letter-spacing: -0.01em;
}
.step-card p {
font-size: 0.9rem;
color: var(--text-secondary);
line-height: 1.65;
}
.step-visual {
width: 100%;
height: 120px;
border-radius: 10px;
margin-top: 1.25rem;
background: var(--bg-card);
border: 1px solid var(--border-subtle);
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
/* Visual: Flow Editor mock */
.mock-editor {
display: flex;
gap: 0.5rem;
padding: 0.75rem;
width: 100%;
}
.mock-node {
padding: 6px 10px;
border-radius: 6px;
font-size: 0.6rem;
font-family: var(--font-mono);
white-space: nowrap;
}
.mock-node.start { background: rgba(6,182,212,0.15); color: var(--cyan-400); border: 1px solid rgba(6,182,212,0.2); }
.mock-node.step { background: var(--glass-bg); color: var(--text-secondary); border: 1px solid var(--glass-border); }
.mock-connector { width: 20px; display: flex; align-items: center; justify-content: center; color: var(--text-muted); font-size: 0.7rem; }
/* Visual: Session mock */
.mock-session {
width: 100%;
padding: 0.75rem;
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.mock-chat-line {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.6rem;
font-family: var(--font-mono);
}
.mock-chat-line .label {
color: var(--cyan-400);
font-weight: 600;
min-width: 55px;
}
.mock-chat-line .text { color: var(--text-secondary); }
.mock-chat-line.doc .label { color: #22c55e; }
/* Visual: Ticket mock */
.mock-ticket {
width: 100%;
padding: 0.75rem;
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.mock-ticket-header {
font-family: var(--font-mono);
font-size: 0.6rem;
color: var(--cyan-400);
font-weight: 600;
padding-bottom: 0.35rem;
border-bottom: 1px solid var(--glass-border);
margin-bottom: 0.15rem;
}
.mock-ticket-line {
font-size: 0.55rem;
font-family: var(--font-mono);
color: var(--text-secondary);
display: flex;
gap: 6px;
}
.mock-ticket-line .time { color: var(--text-muted); min-width: 35px; }
.mock-ticket-line .check { color: #22c55e; }
/* ---- FEATURES GRID ---- */
.features-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
margin-top: 3.5rem;
}
.feature-card {
padding: 2rem;
border-radius: 16px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
transition: all 0.3s ease;
}
.feature-card:hover {
background: var(--glass-bg-hover);
border-color: var(--border-glow);
transform: translateY(-3px);
}
.feature-icon {
width: 40px;
height: 40px;
border-radius: 10px;
background: rgba(6,182,212,0.08);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1.25rem;
color: var(--cyan-400);
}
.feature-card h3 {
font-family: var(--font-heading);
font-size: 1.05rem;
font-weight: 700;
margin-bottom: 0.6rem;
letter-spacing: -0.01em;
}
.feature-card p {
font-size: 0.875rem;
color: var(--text-secondary);
line-height: 1.6;
}
.feature-card.highlight {
border-color: rgba(6,182,212,0.15);
background: rgba(6,182,212,0.03);
grid-column: span 2;
}
/* ---- PRICING ---- */
.pricing-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
margin-top: 3.5rem;
align-items: start;
}
.pricing-card {
padding: 2.5rem 2rem;
border-radius: 16px;
background: var(--glass-bg);
border: 1px solid var(--glass-border);
transition: all 0.3s;
}
.pricing-card:hover {
border-color: rgba(255,255,255,0.08);
}
.pricing-card.featured {
border-color: rgba(6,182,212,0.2);
background: rgba(6,182,212,0.03);
position: relative;
box-shadow: 0 0 40px rgba(6,182,212,0.06);
}
.pricing-card.featured::before {
content: 'Most Popular';
position: absolute;
top: -12px;
left: 50%;
transform: translateX(-50%);
padding: 4px 14px;
border-radius: 100px;
background: var(--gradient-brand);
font-family: var(--font-mono);
font-size: 0.65rem;
font-weight: 600;
color: #000;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.pricing-plan-name {
font-family: var(--font-heading);
font-size: 1.15rem;
font-weight: 700;
margin-bottom: 0.5rem;
letter-spacing: -0.01em;
}
.pricing-target {
font-size: 0.8rem;
color: var(--text-muted);
margin-bottom: 1.5rem;
}
.pricing-price {
display: flex;
align-items: baseline;
gap: 0.25rem;
margin-bottom: 0.25rem;
}
.pricing-price .amount {
font-family: var(--font-heading);
font-size: 2.75rem;
font-weight: 800;
letter-spacing: -0.04em;
}
.pricing-card.featured .pricing-price .amount {
background: var(--gradient-brand-text);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.pricing-price .period {
font-size: 0.85rem;
color: var(--text-muted);
}
.pricing-note {
font-size: 0.8rem;
color: var(--text-muted);
margin-bottom: 2rem;
}
.pricing-features {
list-style: none;
display: flex;
flex-direction: column;
gap: 0.75rem;
margin-bottom: 2rem;
}
.pricing-features li {
font-size: 0.875rem;
color: var(--text-secondary);
display: flex;
align-items: flex-start;
gap: 0.6rem;
}
.pricing-features li::before {
content: '✓';
color: var(--cyan-400);
font-weight: 700;
font-size: 0.8rem;
margin-top: 2px;
flex-shrink: 0;
}
.pricing-btn {
display: block;
text-align: center;
padding: 0.75rem 1.5rem;
border-radius: 10px;
font-family: var(--font-body);
font-size: 0.9rem;
font-weight: 600;
text-decoration: none;
transition: all 0.3s;
width: 100%;
}
.pricing-btn.outline {
color: var(--text-primary);
border: 1px solid var(--border-subtle);
background: transparent;
}
.pricing-btn.outline:hover {
background: var(--glass-bg-hover);
border-color: rgba(255,255,255,0.12);
}
.pricing-btn.filled {
color: #000;
background: var(--gradient-brand);
box-shadow: 0 0 20px rgba(6,182,212,0.15);
border: none;
}
.pricing-btn.filled:hover {
box-shadow: 0 0 30px rgba(6,182,212,0.3);
transform: translateY(-1px);
}
/* ---- TESTIMONIAL / QUOTE ---- */
.testimonial-section {
text-align: center;
max-width: 700px;
margin: 0 auto;
padding: 5rem 2rem;
}
.testimonial-quote {
font-family: var(--font-heading);
font-size: 1.5rem;
font-weight: 600;
line-height: 1.5;
letter-spacing: -0.01em;
color: var(--text-primary);
font-style: italic;
margin-bottom: 1.5rem;
position: relative;
}
.testimonial-quote::before {
content: '"';
font-size: 4rem;
color: var(--cyan-400);
opacity: 0.3;
position: absolute;
top: -1rem;
left: -0.5rem;
font-family: var(--font-heading);
line-height: 1;
}
.testimonial-author {
font-size: 0.9rem;
color: var(--text-muted);
}
.testimonial-author strong { color: var(--text-secondary); font-weight: 600; }
/* ---- CTA SECTION ---- */
.cta-section {
text-align: center;
padding: 6rem 2rem;
position: relative;
}
.cta-section::before {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 700px;
height: 400px;
background: radial-gradient(ellipse, rgba(6,182,212,0.05) 0%, transparent 70%);
pointer-events: none;
}
.cta-section h2 {
font-family: var(--font-heading);
font-size: clamp(2rem, 4vw, 2.75rem);
font-weight: 700;
letter-spacing: -0.03em;
margin-bottom: 1rem;
}
.cta-section p {
font-size: 1.1rem;
color: var(--text-secondary);
max-width: 500px;
margin: 0 auto 2rem;
line-height: 1.7;
}
.cta-email-form {
display: flex;
gap: 0.75rem;
max-width: 440px;
margin: 0 auto;
}
.cta-email-input {
flex: 1;
padding: 0.85rem 1.25rem;
border-radius: 10px;
border: 1px solid var(--border-subtle);
background: var(--bg-card);
color: var(--text-primary);
font-family: var(--font-body);
font-size: 0.9rem;
outline: none;
transition: border-color 0.3s;
}
.cta-email-input::placeholder { color: var(--text-muted); }
.cta-email-input:focus {
border-color: var(--cyan-500);
box-shadow: 0 0 0 3px rgba(6,182,212,0.1);
}
/* ---- FOOTER ---- */
footer {
border-top: 1px solid var(--glass-border);
padding: 3rem 2rem;
}
.footer-inner {
max-width: 1100px;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 1rem;
}
.footer-left {
display: flex;
align-items: center;
gap: 0.75rem;
}
.footer-left .nav-logo-icon { width: 28px; height: 28px; border-radius: 8px; }
.footer-left .nav-logo-icon svg { width: 16px; height: 16px; }
.footer-copy {
font-size: 0.8rem;
color: var(--text-muted);
}
.footer-links {
display: flex;
gap: 1.5rem;
list-style: none;
}
.footer-links a {
font-size: 0.8rem;
color: var(--text-muted);
text-decoration: none;
transition: color 0.2s;
}
.footer-links a:hover { color: var(--text-secondary); }
/* ---- DIVIDER ---- */
.section-divider {
max-width: 1100px;
margin: 0 auto;
height: 1px;
background: var(--glass-border);
}
/* ---- ANIMATIONS ---- */
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInDown {
from { opacity: 0; transform: translateY(-12px); }
to { opacity: 1; transform: translateY(0); }
}
/* ---- RESPONSIVE ---- */
@media (max-width: 900px) {
.problem-grid, .steps-container, .features-grid, .pricing-grid {
grid-template-columns: 1fr;
}
.feature-card.highlight { grid-column: span 1; }
.nav-links { display: none; }
.preview-sidebar { display: none; }
.tree-branch { gap: 1rem; }
.hero { padding: 8rem 1.5rem 4rem; }
.brand-equation { font-size: 1.25rem; gap: 0.5rem; }
.eq-item { padding: 0.35rem 0.75rem; }
.cta-email-form { flex-direction: column; }
}
/* ---- SCROLL REVEAL (simple) ---- */
.reveal {
opacity: 0;
transform: translateY(24px);
transition: opacity 0.7s ease, transform 0.7s ease;
}
.reveal.visible {
opacity: 1;
transform: translateY(0);
}
</style>
</head>
<body>
<div class="ambient-glow"></div>
<div class="grid-pattern"></div>
<div class="page-content">
<!-- ====== NAVIGATION ====== -->
<nav id="mainNav">
<div class="nav-inner">
<a href="#" class="nav-logo">
<div class="nav-logo-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="5" r="2"/>
<line x1="12" y1="7" x2="12" y2="11"/>
<circle cx="6" cy="15" r="2"/>
<circle cx="18" cy="15" r="2"/>
<line x1="12" y1="11" x2="6" y2="13"/>
<line x1="12" y1="11" x2="18" y2="13"/>
</svg>
</div>
<div class="nav-wordmark">Resolution<span>Flow</span></div>
</a>
<ul class="nav-links">
<li><a href="#features">Features</a></li>
<li><a href="#how-it-works">How It Works</a></li>
<li><a href="#pricing">Pricing</a></li>
</ul>
<div class="nav-cta">
<a href="/login" class="btn-ghost">Sign In</a>
<a href="/register" class="btn-primary">Get Started Free</a>
</div>
</div>
</nav>
<!-- ====== HERO ====== -->
<section class="hero">
<div class="hero-badge">Now in Beta — Join early access</div>
<h1>
Stop writing ticket notes.<br>
<span class="gradient-text">Start generating them.</span>
</h1>
<p class="hero-sub">
AI-guided decision trees that walk your engineers through troubleshooting — and automatically document every step, ready for your PSA ticket.
</p>
<div class="hero-actions">
<a href="/register" class="btn-hero-primary">Start Free</a>
<a href="#how-it-works" class="btn-hero-secondary">See How It Works</a>
</div>
</section>
<!-- ====== SOCIAL PROOF BAR ====== -->
<div class="social-proof-bar">
<p>Built by MSP engineers, for MSP engineers</p>
<div class="proof-stats">
<div class="proof-stat">
<div class="number">15+</div>
<div class="label">Years MSP Experience</div>
</div>
<div class="proof-stat">
<div class="number">70%</div>
<div class="label">Less Time on Documentation</div>
</div>
<div class="proof-stat">
<div class="number">0</div>
<div class="label">Ticket Notes Written by Hand</div>
</div>
</div>
</div>
<!-- ====== APP PREVIEW ====== -->
<div class="app-preview">
<div class="preview-window">
<div class="preview-titlebar">
<div class="preview-tab">
<div class="tab-icon"></div>
ResolutionFlow
<span class="tab-close"></span>
</div>
<div class="preview-url-bar">
<div class="preview-url">
<span class="lock-icon">🔒</span>
app.resolutionflow.com/editor
</div>
</div>
<div class="preview-window-controls">
<div class="win-btn">
<svg viewBox="0 0 12 12"><line x1="2" y1="6" x2="10" y2="6"/></svg>
</div>
<div class="win-btn">
<svg viewBox="0 0 12 12"><rect x="2" y="2" width="8" height="8" rx="0.5"/></svg>
</div>
<div class="win-btn close">
<svg viewBox="0 0 12 12"><line x1="2" y1="2" x2="10" y2="10"/><line x1="10" y1="2" x2="2" y2="10"/></svg>
</div>
</div>
</div>
<div class="preview-body">
<div class="preview-sidebar">
<div class="preview-sidebar-item active">
<div class="dot" style="background: var(--cyan-400);"></div>
Flow Editor
</div>
<div class="preview-sidebar-item">
<div class="dot" style="background: #3b82f6;"></div>
Session Runner
</div>
<div class="preview-sidebar-item">
<div class="dot" style="background: #22c55e;"></div>
Tree Library
</div>
<div class="preview-sidebar-item">
<div class="dot" style="background: #f59e0b;"></div>
Session History
</div>
<div class="preview-sidebar-item">
<div class="dot" style="background: #8b5cf6;"></div>
Team Analytics
</div>
</div>
<div class="preview-canvas">
<div class="mini-tree">
<div class="tree-node root">Outlook Not Syncing</div>
<div class="tree-connector"></div>
<div class="tree-branch">
<div class="tree-branch-arm">
<div class="tree-label">Yes</div>
<div class="tree-connector"></div>
<div class="tree-node decision">Check profile config</div>
</div>
<div class="tree-branch-arm">
<div class="tree-label">No</div>
<div class="tree-connector"></div>
<div class="tree-node decision">Verify credentials</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="height: 5rem;"></div>
<div class="section-divider"></div>
<!-- ====== PROBLEM SECTION ====== -->
<section id="problem" class="reveal">
<div class="section-inner">
<div class="section-label">The Problem</div>
<div class="section-title">Documentation is broken.<br>Everyone knows it.</div>
<div class="section-desc">
Engineers don't want to write it. Managers hate chasing it. Clients never see it. The same issues get solved from scratch every time.
</div>
<div class="problem-grid">
<div class="problem-card">
<div class="problem-icon red"></div>
<h3>1525 min lost per ticket</h3>
<p>Engineers spend more time documenting what they did than actually doing it. After a complex issue, writing notes is the last thing anyone wants to do.</p>
</div>
<div class="problem-card">
<div class="problem-icon amber">📋</div>
<h3>Vague, useless notes</h3>
<p>"Fixed Outlook" tells you nothing. Documentation written under pressure tends toward generalities that help nobody the second time around.</p>
</div>
<div class="problem-card">
<div class="problem-icon slate">🔄</div>
<h3>Knowledge walks out the door</h3>
<p>When a senior engineer leaves, years of tribal knowledge disappear overnight. New hires spend months building up what was never captured.</p>
</div>
<div class="problem-card">
<div class="problem-icon violet">🧠</div>
<h3>Context switching kills speed</h3>
<p>Jumping between the issue, documentation tools, PSA tickets, and knowledge bases fragments focus and slows resolution.</p>
</div>
</div>
</div>
</section>
<div class="section-divider"></div>
<!-- ====== BRAND EQUATION ====== -->
<div class="equation-section reveal">
<div class="section-label">The Answer</div>
<div class="brand-equation">
<span class="eq-item">Resolution</span>
<span class="eq-operator">+</span>
<span class="eq-item">Documentation</span>
<span class="eq-operator"></span>
<span class="eq-item">Time</span>
<span class="eq-operator">=</span>
<span class="eq-result">ResolutionFlow</span>
</div>
<p style="font-size: 1.1rem; color: var(--text-secondary); max-width: 550px; margin: 0 auto; line-height: 1.7;">
What if documentation was a <em>byproduct</em> of solving the issue — not a separate task? What if your engineers never had to write another ticket note?
</p>
</div>
<div class="section-divider"></div>
<!-- ====== HOW IT WORKS ====== -->
<section id="how-it-works" class="reveal">
<div class="section-inner">
<div class="section-label">How It Works</div>
<div class="section-title">Three steps. Zero note-writing.</div>
<div class="section-desc">
Build once, run forever. Every session generates documentation automatically.
</div>
<div class="steps-container">
<div class="step-card">
<h3>Build a Flow</h3>
<p>Use the visual Flow Editor to create branching decision trees for any troubleshooting scenario. Drag, connect, and enrich steps with commands, notes, and AI suggestions.</p>
<div class="step-visual">
<div class="mock-editor">
<div class="mock-node start">▶ Start</div>
<div class="mock-connector"></div>
<div class="mock-node step">Check DNS</div>
<div class="mock-connector"></div>
<div class="mock-node step">Yes / No?</div>
<div class="mock-connector"></div>
<div class="mock-node start">✓ Resolved</div>
</div>
</div>
</div>
<div class="step-card">
<h3>Run a Session</h3>
<p>An engineer launches the flow on a live ticket. FlowPilot — your AI copilot — acts as a virtual senior engineer, guiding decisions and capturing every action in real time.</p>
<div class="step-visual">
<div class="mock-session">
<div class="mock-chat-line">
<span class="label">FlowPilot:</span>
<span class="text">Is the user on VPN?</span>
</div>
<div class="mock-chat-line">
<span class="label" style="color: var(--text-secondary);">Engineer:</span>
<span class="text">Yes, Cisco AnyConnect</span>
</div>
<div class="mock-chat-line">
<span class="label">FlowPilot:</span>
<span class="text">Check split tunnel config →</span>
</div>
<div class="mock-chat-line doc">
<span class="label">Auto-doc:</span>
<span class="text">Step captured ✓</span>
</div>
</div>
</div>
</div>
<div class="step-card">
<h3>Export to Ticket</h3>
<p>When the session ends, full documentation is generated — formatted for your PSA. Paste it directly into ConnectWise, Atera, or Syncro. Done.</p>
<div class="step-visual">
<div class="mock-ticket">
<div class="mock-ticket-header">ConnectWise Ticket #48291</div>
<div class="mock-ticket-line">
<span class="time">10:04</span>
<span class="check"></span>
<span>Verified VPN connection active</span>
</div>
<div class="mock-ticket-line">
<span class="time">10:06</span>
<span class="check"></span>
<span>Split tunnel misconfigured — fixed</span>
</div>
<div class="mock-ticket-line">
<span class="time">10:08</span>
<span class="check"></span>
<span>Confirmed Outlook sync restored</span>
</div>
<div class="mock-ticket-line">
<span class="time">10:09</span>
<span class="check"></span>
<span>Resolution: VPN split tunnel updated</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="section-divider"></div>
<!-- ====== FEATURES ====== -->
<section id="features" class="reveal">
<div class="section-inner">
<div class="section-label">Features</div>
<div class="section-title">Everything your team needs to<br>resolve faster and document better.</div>
<div class="features-grid">
<div class="feature-card highlight">
<div class="feature-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
</div>
<h3>FlowPilot — Your AI Copilot</h3>
<p>Like having a senior engineer on every call. FlowPilot suggests next steps, provides context-aware guidance, and automatically captures documentation as a byproduct of the troubleshooting session. It doesn't replace your team — it makes every engineer your best engineer.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><line x1="9" y1="3" x2="9" y2="21"/></svg>
</div>
<h3>Visual Flow Editor</h3>
<p>Build branching decision trees with a drag-and-drop canvas. Add steps, conditions, commands, and notes — no code required.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
</div>
<h3>Auto-Documentation</h3>
<p>Every session generates timestamped, detailed notes — formatted for your PSA. Engineers never write another ticket note.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
</div>
<h3>Team Knowledge Sharing</h3>
<p>Share flows across your team. When one engineer solves a new problem, the whole team benefits from that path — instantly.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
</div>
<h3>Session History & Analytics</h3>
<p>Track which flows are used most, identify bottlenecks, and see how your team resolves issues over time.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
</div>
<h3>PSA Integration</h3>
<p>Connect directly to ConnectWise, Atera, and Syncro. Export session docs straight to tickets — no copy-paste needed.</p>
</div>
</div>
</div>
</section>
<div class="section-divider"></div>
<!-- ====== PRICING ====== -->
<section id="pricing" class="reveal">
<div class="section-inner">
<div class="section-label">Pricing</div>
<div class="section-title">Simple pricing. No surprises.</div>
<div class="section-desc">Start free. Upgrade when your team is ready.</div>
<div class="pricing-grid">
<div class="pricing-card">
<div class="pricing-plan-name">Free</div>
<div class="pricing-target">For individual techs evaluating</div>
<div class="pricing-price">
<span class="amount">$0</span>
</div>
<div class="pricing-note">Free forever</div>
<ul class="pricing-features">
<li>3 decision trees</li>
<li>20 sessions per month</li>
<li>Auto-documentation export</li>
<li>Session history (30 days)</li>
<li>Community support</li>
</ul>
<a href="/register" class="pricing-btn outline">Get Started</a>
</div>
<div class="pricing-card featured">
<div class="pricing-plan-name">Pro</div>
<div class="pricing-target">For small MSPs with 15 techs</div>
<div class="pricing-price">
<span class="amount">$15</span>
<span class="period">/user/mo</span>
</div>
<div class="pricing-note">Billed monthly or annually</div>
<ul class="pricing-features">
<li>Unlimited decision trees</li>
<li>Unlimited sessions</li>
<li>FlowPilot AI copilot</li>
<li>Auto-documentation export</li>
<li>Full session history</li>
<li>Tree templates library</li>
<li>Priority support</li>
</ul>
<a href="/register" class="pricing-btn filled">Start Free Trial</a>
</div>
<div class="pricing-card">
<div class="pricing-plan-name">Team</div>
<div class="pricing-target">For growing MSPs with 525 techs</div>
<div class="pricing-price">
<span class="amount">$25</span>
<span class="period">/user/mo</span>
</div>
<div class="pricing-note">Billed monthly or annually</div>
<ul class="pricing-features">
<li>Everything in Pro</li>
<li>PSA integration (ConnectWise, Atera, Syncro)</li>
<li>Team analytics dashboard</li>
<li>Session sharing & collaboration</li>
<li>Client context system</li>
<li>Role-based permissions</li>
<li>Dedicated support</li>
</ul>
<a href="/register" class="pricing-btn outline">Start Free Trial</a>
</div>
</div>
<p style="text-align: center; margin-top: 2rem; font-size: 0.85rem; color: var(--text-muted);">
Need Enterprise (25+ techs, SSO, custom branding)? <a href="/cdn-cgi/l/email-protection#4a222f2626250a382f3925263f3e2325242c26253d64292527" style="color: var(--cyan-400); text-decoration: none;">Contact us</a>
</p>
</div>
</section>
<div class="section-divider"></div>
<!-- ====== TESTIMONIAL ====== -->
<div class="testimonial-section reveal">
<div class="testimonial-quote">
We used to spend more time writing ticket notes than solving the actual issue. Now it just… happens. The documentation writes itself while we work.
</div>
<div class="testimonial-author">
<strong>Beta Tester</strong> — MSP Engineer, Southeast US
</div>
</div>
<div class="section-divider"></div>
<!-- ====== FINAL CTA ====== -->
<section class="cta-section reveal">
<h2>Ready to stop writing ticket notes?</h2>
<p>Join the beta and see what happens when documentation becomes automatic.</p>
<div class="cta-email-form">
<input type="email" class="cta-email-input" placeholder="you@yourmsp.com">
<a href="/register" class="btn-hero-primary" style="white-space: nowrap;">Join Beta</a>
</div>
<p style="font-size: 0.75rem; color: var(--text-muted); margin-top: 1rem;">Free to start. No credit card required.</p>
</section>
<!-- ====== FOOTER ====== -->
<footer>
<div class="footer-inner">
<div class="footer-left">
<div class="nav-logo-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="5" r="2"/>
<line x1="12" y1="7" x2="12" y2="11"/>
<circle cx="6" cy="15" r="2"/>
<circle cx="18" cy="15" r="2"/>
<line x1="12" y1="11" x2="6" y2="13"/>
<line x1="12" y1="11" x2="18" y2="13"/>
</svg>
</div>
<span class="footer-copy">© 2026 ResolutionFlow. All rights reserved.</span>
</div>
<ul class="footer-links">
<li><a href="#">Privacy</a></li>
<li><a href="#">Terms</a></li>
<li><a href="mailto:hello@resolutionflow.com">Contact</a></li>
</ul>
</div>
</footer>
</div>
<script>
// Nav scroll effect
const nav = document.getElementById('mainNav');
window.addEventListener('scroll', () => {
nav.classList.toggle('scrolled', window.scrollY > 40);
});
// Scroll reveal
const revealElements = document.querySelectorAll('.reveal');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, { threshold: 0.15 });
revealElements.forEach(el => observer.observe(el));
</script>
</body>
</html>