AI Follow-up Automation Agent: Transforming Recruitment Through Intelligent Outreach

Executive Summary
In competitive recruitment, 40% of initially interested prospects ghost after first contact. The AI Follow-up Automation Agent crafts and executes personalized follow-ups across email, SMS and LinkedIn for non-responsive prospects. This recruitment automation platform boosts response rates from 35% to 52%, generating five extra placements monthly and $55,000 in additional revenue.
The Challenge
Candidate ghosting has become a widespread challenge in recruitment process workflows, directly impacting talent acquisition efficiency:
Overwhelming Workloads: Recruiters manage dozens of openings simultaneously, making consistent follow-up nearly impossible without recruitment automation tools.
Manual Tracking Failures: Reliance on spreadsheets for candidate management leads to missed follow-ups and lost opportunities, highlighting the need for automation of recruitment process.
Communication Breakdown: Without systematic recruitment workflow automation, initially interested candidates who intend to respond "later" simply forget, with nearly half citing impersonal processes as their reason for disappearing.
These issues particularly affect recruitment where professionals are inundated with outreach, and recruiters struggle to provide personalized follow-up without proper AI in recruitment process support.

The Solution: AI-Powered Multi-Channel Engagement
The AI Follow-up Automation Agent acts as an intelligent extension of recruitment teams:
Autonomous Activation: When a prospect enters "Contacted" status in the ATS, this recruitment process automation tool analyzes their profile and automatically creates a tailored follow-up strategy.
Personalized Communication: The agent leverages GPT-4o to generate contextually relevant messages that align with both candidate backgrounds and specific role requirements.
Multi-Channel Orchestration: This recruitment workflow automation tool executes outreach across email (SendGrid), SMS (Twilio), and LinkedIn (Phantombuster), intelligently halting communication upon receiving a response.
Adaptive Learning: Unlike standard recruitment automation platforms, the system continuously refines its approach based on engagement metrics, learning which strategies work best for different candidate personas.
Implementation & Architecture
The AI Follow-up Automation Agent integrates with recruitment tools through a modular architecture:
Data Integration: Takes persona data from the ATS (Greenhouse/Bullhorn), processes it to generate tailored content, and logs interactions back into the system.
Technical Stack: Built on Python/FastAPI backend with LangChain orchestration and React/Next.js frontend, this recruitment automation software uses Postgres for logging and Pinecone for memory.
Easy Deployment: The modular design enables rapid implementation across new ATS systems or channels, making the solution adaptable to various recruitment process automation scenarios.
Results & Impact
With AI in HR recruitment actively managing candidate relationships:
Significant Engagement Recovery: Response rates increase from 35% to 52%, successfully re-engaging candidates who would otherwise disappear from the recruitment pipeline.
Direct Revenue Contribution: The recruitment automation platform generates five additional placements monthly and $55,000 in incremental revenue from previously lost opportunities.
Enhanced Recruiter Productivity: Human recruiters shift from manual follow-up tasks to high-value candidate interactions, while automation handles persistent outreach.
Continuous Improvement: Each interaction cycle improves the agent's effectiveness through machine learning, optimizing message timing, content, and channel selection.

Conclusion
The AI Follow-up Automation Agent represents a fundamental shift in recruitment communication—from sporadic human follow-up attempts to consistent, intelligent engagement managed by an AI entity focused on maintaining candidate connections.
Organizations implementing this automation in recruitment process gain more than improved metrics; they transform their entire candidate engagement model to ensure no promising prospect slips away due to communication gaps, creating significant competitive advantage in today's challenging talent market.
/* ============================================================
WEBFLOW CMS ARTICLE PAGE — ENHANCED STYLESHEET
Mobile-first | Medium/HubSpot-inspired | SaaS-grade
============================================================ */
/* ─── DESIGN TOKENS ─────────────────────────────────────── */
:root {
/* Typography */
--font-display: 'Lora', 'Georgia', serif;
--font-body: 'Source Serif 4', 'Georgia', serif;
--font-ui: 'DM Sans', 'Helvetica Neue', sans-serif;
/* Scale (mobile-first) */
--text-xs: 0.75rem; /* 12px */
--text-sm: 0.875rem; /* 14px */
--text-base: 1.0625rem; /* 17px — optimal reading size */
--text-lg: 1.1875rem; /* 19px */
--text-xl: 1.375rem; /* 22px */
--text-2xl: 1.625rem; /* 26px */
--text-3xl: 2rem; /* 32px */
--text-4xl: 2.5rem; /* 40px */
--text-5xl: 3.25rem; /* 52px */
/* Line heights */
--leading-tight: 1.2;
--leading-snug: 1.4;
--leading-normal: 1.65;
--leading-relaxed: 1.8;
/* Colors */
--color-ink: #1a1a2e;
--color-ink-2: #2d2d44;
--color-ink-3: #4a4a6a;
--color-muted: #6b6b8a;
--color-subtle: #9898b2;
--color-border: #e4e4f0;
--color-border-2: #d0d0e8;
--color-surface: #fafafa;
--color-bg: #ffffff;
/* Brand accent */
--color-accent: #2563eb;
--color-accent-2: #1d4ed8;
--color-accent-3: #dbeafe;
--color-accent-4: #eff6ff;
/* Highlight */
--color-highlight: #f59e0b;
--color-highlight-2: #fef3c7;
/* Layout */
--content-width: 740px;
--wide-width: 900px;
--full-width: 1200px;
/* Spacing */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-5: 1.25rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-10: 2.5rem;
--space-12: 3rem;
--space-16: 4rem;
--space-20: 5rem;
--space-24: 6rem;
/* Radii */
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-xl: 16px;
--radius-2xl: 24px;
/* Shadows */
--shadow-sm: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
--shadow-md: 0 4px 16px rgba(0,0,0,.07), 0 1px 4px rgba(0,0,0,.04);
--shadow-lg: 0 8px 32px rgba(0,0,0,.10), 0 2px 8px rgba(0,0,0,.05);
--shadow-xl: 0 20px 60px rgba(0,0,0,.12), 0 4px 16px rgba(0,0,0,.06);
/* Transitions */
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in: cubic-bezier(0.7, 0, 0.84, 0);
--duration: 200ms;
}
/* ─── RESET & BASE ───────────────────────────────────────── */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
-webkit-text-size-adjust: 100%;
scroll-behavior: smooth;
}
body {
font-family: var(--font-body);
font-size: var(--text-base);
line-height: var(--leading-normal);
color: var(--color-ink);
background: var(--color-bg);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
}
img, video, svg {
max-width: 100%;
height: auto;
display: block;
}
/* ─── LAYOUT CONTAINER ───────────────────────────────────── */
/* Webflow CMS wrapper — add .article-wrapper or target your top-level div */
.article-wrapper,
.w-container,
[class*="post-container"],
[class*="article-container"],
[class*="blog-container"] {
max-width: 100%;
padding-left: var(--space-5);
padding-right: var(--space-5);
}
/* Core article content column */
.article-content,
.post-body,
.blog-post-content,
.rich-text-block,
.w-richtext {
width: 100%;
max-width: var(--content-width);
margin-left: auto;
margin-right: auto;
}
/* ─── ARTICLE HEADER ─────────────────────────────────────── */
.article-header,
.post-header,
[class*="blog-header"],
[class*="post-header"] {
max-width: var(--content-width);
margin: 0 auto var(--space-8);
padding-top: var(--space-10);
}
/* Category / Tag pill */
.article-category,
.post-category,
.blog-category,
[class*="category-label"],
[class*="post-tag"] {
display: inline-flex;
align-items: center;
font-family: var(--font-ui);
font-size: var(--text-xs);
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-accent);
background: var(--color-accent-4);
border: 1px solid var(--color-accent-3);
padding: var(--space-1) var(--space-3);
border-radius: 100px;
margin-bottom: var(--space-5);
text-decoration: none;
transition: background var(--duration) var(--ease-out),
color var(--duration) var(--ease-out);
}
.article-category:hover,
.post-category:hover {
background: var(--color-accent);
color: #fff;
}
/* Article main headline */
.article-title,
.post-title,
[class*="blog-title"],
[class*="post-heading-main"] {
font-family: var(--font-display);
font-size: var(--text-3xl);
font-weight: 700;
line-height: var(--leading-snug);
color: var(--color-ink);
letter-spacing: -0.02em;
margin-bottom: var(--space-5);
}
/* Article subtitle / excerpt */
.article-subtitle,
.post-subtitle,
[class*="post-excerpt"],
[class*="article-description"] {
font-family: var(--font-body);
font-size: var(--text-lg);
line-height: var(--leading-relaxed);
color: var(--color-muted);
margin-bottom: var(--space-6);
font-style: italic;
}
/* ─── AUTHOR / META BAR ──────────────────────────────────── */
.article-meta,
.post-meta,
[class*="author-meta"],
[class*="post-info"] {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-3);
padding: var(--space-4) 0;
border-top: 1px solid var(--color-border);
border-bottom: 1px solid var(--color-border);
margin-bottom: var(--space-8);
font-family: var(--font-ui);
}
.author-avatar,
[class*="author-image"],
[class*="author-photo"] {
width: 40px;
height: 40px;
border-radius: 50%;
object-fit: cover;
flex-shrink: 0;
border: 2px solid var(--color-border);
}
.author-name,
[class*="author-name"] {
font-size: var(--text-sm);
font-weight: 600;
color: var(--color-ink-2);
}
.post-date,
.article-date,
[class*="post-date"],
[class*="publish-date"] {
font-size: var(--text-sm);
color: var(--color-muted);
}
.read-time,
[class*="read-time"],
[class*="reading-time"] {
font-size: var(--text-sm);
color: var(--color-subtle);
}
/* Dot separator */
.meta-dot {
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--color-border-2);
flex-shrink: 0;
}
/* ─── FEATURED IMAGE ─────────────────────────────────────── */
.article-featured-image,
.post-featured-image,
[class*="featured-image"],
[class*="hero-image"],
[class*="post-thumbnail"] {
width: 100%;
max-width: var(--wide-width);
margin: 0 auto var(--space-10);
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow-lg);
aspect-ratio: 16 / 9;
}
.article-featured-image img,
.post-featured-image img,
[class*="featured-image"] img,
[class*="hero-image"] img,
[class*="post-thumbnail"] img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
display: block;
transition: transform 0.6s var(--ease-out);
}
.article-featured-image:hover img,
.post-featured-image:hover img {
transform: scale(1.02);
}
/* ─── RICH TEXT / BODY CONTENT ───────────────────────────── */
.w-richtext,
.rich-text-block,
.article-body,
.post-body-content,
[class*="article-body"],
[class*="post-content"] {
/* Global text defaults */
font-family: var(--font-body);
font-size: var(--text-base);
line-height: var(--leading-relaxed);
color: var(--color-ink-2);
}
/* --- Headings --- */
.w-richtext h1,
.w-richtext h2,
.w-richtext h3,
.w-richtext h4,
.w-richtext h5,
.w-richtext h6,
[class*="article-body"] h1,
[class*="article-body"] h2,
[class*="article-body"] h3,
[class*="article-body"] h4,
[class*="article-body"] h5,
[class*="article-body"] h6 {
font-family: var(--font-display);
font-weight: 700;
line-height: var(--leading-tight);
color: var(--color-ink);
letter-spacing: -0.015em;
margin-top: var(--space-12);
margin-bottom: var(--space-4);
}
.w-richtext h1 { font-size: var(--text-3xl); }
.w-richtext h2 { font-size: var(--text-2xl); }
.w-richtext h3 { font-size: var(--text-xl); }
.w-richtext h4 { font-size: var(--text-lg); font-weight: 600; }
.w-richtext h5 { font-size: var(--text-base); font-weight: 600; }
.w-richtext h6 { font-size: var(--text-sm); font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--color-muted); }
/* First heading after intro — less top space */
.w-richtext > h2:first-child,
.w-richtext > h3:first-child {
margin-top: 0;
}
/* --- Paragraphs --- */
.w-richtext p,
[class*="article-body"] p {
margin-bottom: var(--space-6);
font-size: var(--text-base);
line-height: var(--leading-relaxed);
color: var(--color-ink-2);
}
.w-richtext p:last-child { margin-bottom: 0; }
/* Lead paragraph */
.w-richtext p.lead,
.w-richtext > p:first-of-type {
font-size: var(--text-lg);
color: var(--color-ink-3);
line-height: 1.75;
}
/* --- Links --- */
.w-richtext a,
[class*="article-body"] a {
color: var(--color-accent);
text-decoration: underline;
text-decoration-color: var(--color-accent-3);
text-underline-offset: 3px;
transition: color var(--duration), text-decoration-color var(--duration);
}
.w-richtext a:hover {
color: var(--color-accent-2);
text-decoration-color: var(--color-accent-2);
}
/* --- Strong / Em --- */
.w-richtext strong { font-weight: 700; color: var(--color-ink); }
.w-richtext em { font-style: italic; color: var(--color-ink-3); }
/* --- Ordered & Unordered Lists --- */
.w-richtext ul,
.w-richtext ol,
[class*="article-body"] ul,
[class*="article-body"] ol {
margin: var(--space-2) 0 var(--space-6) var(--space-6);
padding: 0;
}
.w-richtext li,
[class*="article-body"] li {
margin-bottom: var(--space-2);
line-height: var(--leading-relaxed);
color: var(--color-ink-2);
padding-left: var(--space-2);
}
.w-richtext ul { list-style: none; }
.w-richtext ul li::before {
content: '';
display: inline-block;
width: 6px;
height: 6px;
background: var(--color-accent);
border-radius: 50%;
margin-right: var(--space-3);
margin-left: calc(-1 * var(--space-5));
vertical-align: middle;
flex-shrink: 0;
}
.w-richtext ol { list-style: decimal; }
.w-richtext ol li::marker {
color: var(--color-accent);
font-weight: 700;
font-family: var(--font-ui);
}
/* Nested lists */
.w-richtext ul ul,
.w-richtext ol ol,
.w-richtext ul ol,
.w-richtext ol ul {
margin-top: var(--space-2);
margin-bottom: 0;
}
/* --- Blockquote --- */
.w-richtext blockquote,
[class*="article-body"] blockquote {
position: relative;
margin: var(--space-10) 0;
padding: var(--space-6) var(--space-8);
background: var(--color-accent-4);
border-left: 4px solid var(--color-accent);
border-radius: 0 var(--radius-md) var(--radius-md) 0;
font-size: var(--text-xl);
font-style: italic;
line-height: var(--leading-snug);
color: var(--color-ink-2);
}
.w-richtext blockquote::before {
content: '\201C';
position: absolute;
top: -0.1em;
left: var(--space-4);
font-size: 4rem;
color: var(--color-accent-3);
font-family: var(--font-display);
line-height: 1;
}
.w-richtext blockquote p {
margin-bottom: 0;
font-size: inherit;
}
.w-richtext blockquote cite,
.w-richtext blockquote footer {
display: block;
margin-top: var(--space-4);
font-size: var(--text-sm);
font-style: normal;
font-family: var(--font-ui);
color: var(--color-muted);
font-weight: 600;
}
/* --- Inline Code --- */
.w-richtext code,
[class*="article-body"] code {
font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
font-size: 0.875em;
background: var(--color-surface);
border: 1px solid var(--color-border);
color: #d6336c;
padding: 0.1em 0.4em;
border-radius: var(--radius-sm);
white-space: nowrap;
}
/* --- Code Block --- */
.w-richtext pre,
[class*="article-body"] pre {
margin: var(--space-8) 0;
padding: var(--space-6);
background: #1a1a2e;
border-radius: var(--radius-lg);
overflow-x: auto;
box-shadow: var(--shadow-md);
position: relative;
}
.w-richtext pre code {
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: var(--text-sm);
line-height: 1.7;
color: #e2e8f0;
background: none;
border: none;
padding: 0;
white-space: pre;
}
/* --- Horizontal Rule --- */
.w-richtext hr,
[class*="article-body"] hr {
border: none;
height: 1px;
background: linear-gradient(
to right,
transparent,
var(--color-border-2) 20%,
var(--color-border-2) 80%,
transparent
);
margin: var(--space-12) auto;
max-width: 200px;
}
/* --- Inline Images in Body --- */
.w-richtext figure,
[class*="article-body"] figure {
margin: var(--space-10) 0;
}
.w-richtext figure img,
[class*="article-body"] figure img {
width: 100%;
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
}
.w-richtext figure figcaption,
[class*="article-body"] figure figcaption {
margin-top: var(--space-3);
text-align: center;
font-family: var(--font-ui);
font-size: var(--text-sm);
color: var(--color-subtle);
font-style: italic;
}
/* Standalone images (no figure wrapper) */
.w-richtext img,
[class*="article-body"] img {
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
margin: var(--space-8) auto;
}
/* --- Table --- */
.w-richtext table,
[class*="article-body"] table {
width: 100%;
margin: var(--space-8) 0;
border-collapse: collapse;
font-family: var(--font-ui);
font-size: var(--text-sm);
overflow: hidden;
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.w-richtext th {
background: var(--color-ink);
color: #fff;
font-weight: 600;
padding: var(--space-3) var(--space-4);
text-align: left;
letter-spacing: 0.03em;
}
.w-richtext td {
padding: var(--space-3) var(--space-4);
border-bottom: 1px solid var(--color-border);
color: var(--color-ink-2);
}
.w-richtext tr:last-child td { border-bottom: none; }
.w-richtext tr:nth-child(even) td { background: var(--color-surface); }
.w-richtext tr:hover td { background: var(--color-accent-4); }
/* ─── PULL QUOTE / CALLOUT ───────────────────────────────── */
.callout,
.info-box,
.tip-box,
[class*="callout"],
[class*="tip-box"],
[class*="info-block"] {
display: flex;
gap: var(--space-4);
margin: var(--space-8) 0;
padding: var(--space-5) var(--space-6);
background: var(--color-highlight-2);
border: 1px solid #fcd34d;
border-left: 4px solid var(--color-highlight);
border-radius: var(--radius-lg);
font-family: var(--font-ui);
font-size: var(--text-sm);
line-height: var(--leading-normal);
color: #78350f;
}
/* ─── CTA BUTTON ─────────────────────────────────────────── */
.w-button,
.cta-button,
.btn,
[class*="btn-primary"],
[class*="cta-btn"],
[class*="article-cta"] {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
font-family: var(--font-ui);
font-size: var(--text-sm);
font-weight: 600;
line-height: 1;
letter-spacing: 0.02em;
padding: 0.8125rem 1.625rem;
background: var(--color-accent);
color: #fff;
border: 2px solid transparent;
border-radius: var(--radius-md);
cursor: pointer;
text-decoration: none;
transition:
background var(--duration) var(--ease-out),
transform var(--duration) var(--ease-out),
box-shadow var(--duration) var(--ease-out);
white-space: nowrap;
-webkit-user-select: none;
user-select: none;
}
.w-button:hover,
.cta-button:hover,
.btn:hover {
background: var(--color-accent-2);
transform: translateY(-1px);
box-shadow: 0 8px 24px rgba(37, 99, 235, 0.3);
color: #fff;
}
.w-button:active,
.cta-button:active {
transform: translateY(0);
box-shadow: none;
}
/* Secondary / Ghost variant */
.btn-secondary,
[class*="btn-secondary"],
[class*="btn-outline"] {
background: transparent;
color: var(--color-accent);
border-color: var(--color-accent);
}
.btn-secondary:hover {
background: var(--color-accent-4);
transform: translateY(-1px);
box-shadow: none;
}
/* Full-width CTA block */
.cta-block,
[class*="cta-block"],
[class*="article-cta-section"] {
margin: var(--space-12) 0;
padding: var(--space-10) var(--space-8);
background: linear-gradient(135deg, var(--color-ink) 0%, var(--color-ink-2) 100%);
border-radius: var(--radius-xl);
text-align: center;
box-shadow: var(--shadow-xl);
}
.cta-block h2,
.cta-block h3 {
font-family: var(--font-display);
color: #fff;
font-size: var(--text-2xl);
margin-bottom: var(--space-4);
}
.cta-block p {
color: rgba(255,255,255,.7);
font-size: var(--text-base);
margin-bottom: var(--space-6);
font-family: var(--font-ui);
}
/* ─── TAGS / TOPICS ROW ──────────────────────────────────── */
.article-tags,
.post-tags,
[class*="tag-list"],
[class*="article-topics"] {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
margin-top: var(--space-10);
padding-top: var(--space-6);
border-top: 1px solid var(--color-border);
}
.tag,
[class*="tag-item"],
[class*="topic-pill"] {
font-family: var(--font-ui);
font-size: var(--text-xs);
font-weight: 500;
color: var(--color-ink-3);
background: var(--color-surface);
border: 1px solid var(--color-border);
padding: var(--space-1) var(--space-3);
border-radius: 100px;
text-decoration: none;
transition:
background var(--duration),
border-color var(--duration),
color var(--duration);
}
.tag:hover {
background: var(--color-accent-4);
border-color: var(--color-accent-3);
color: var(--color-accent);
}
/* ─── SHARE BAR ──────────────────────────────────────────── */
.share-bar,
[class*="share-bar"],
[class*="social-share"] {
display: flex;
align-items: center;
gap: var(--space-3);
flex-wrap: wrap;
margin-top: var(--space-8);
padding: var(--space-5) var(--space-6);
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
font-family: var(--font-ui);
}
.share-label {
font-size: var(--text-sm);
font-weight: 600;
color: var(--color-muted);
margin-right: var(--space-2);
}
.share-btn,
[class*="share-btn"] {
display: inline-flex;
align-items: center;
gap: var(--space-2);
font-size: var(--text-sm);
font-weight: 500;
padding: var(--space-2) var(--space-4);
border-radius: var(--radius-md);
text-decoration: none;
transition: background var(--duration), transform var(--duration);
}
.share-btn:hover { transform: translateY(-1px); }
/* ─── AUTHOR BIO CARD ────────────────────────────────────── */
.author-bio,
[class*="author-bio"],
[class*="author-card"],
[class*="writer-bio"] {
display: flex;
gap: var(--space-5);
align-items: flex-start;
margin-top: var(--space-12);
padding: var(--space-6);
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-sm);
}
.author-bio-avatar,
[class*="author-bio"] img,
[class*="author-card"] img:first-child {
width: 64px;
height: 64px;
border-radius: 50%;
object-fit: cover;
flex-shrink: 0;
border: 3px solid var(--color-border);
}
.author-bio-name {
font-family: var(--font-ui);
font-size: var(--text-base);
font-weight: 700;
color: var(--color-ink);
margin-bottom: var(--space-1);
}
.author-bio-role {
font-family: var(--font-ui);
font-size: var(--text-sm);
color: var(--color-accent);
font-weight: 500;
margin-bottom: var(--space-3);
}
.author-bio-text {
font-size: var(--text-sm);
line-height: var(--leading-normal);
color: var(--color-ink-3);
}
/* ─── RELATED POSTS GRID ─────────────────────────────────── */
.related-posts,
[class*="related-posts"],
[class*="more-articles"],
[class*="related-articles"] {
margin-top: var(--space-16);
padding-top: var(--space-10);
border-top: 1px solid var(--color-border);
}
.related-posts-title,
[class*="related-heading"] {
font-family: var(--font-display);
font-size: var(--text-2xl);
font-weight: 700;
color: var(--color-ink);
margin-bottom: var(--space-8);
}
.related-posts-grid,
[class*="related-grid"] {
display: grid;
grid-template-columns: 1fr;
gap: var(--space-6);
}
.related-post-card,
[class*="related-card"],
[class*="article-card"] {
background: var(--color-bg);
border: 1px solid var(--color-border);
border-radius: var(--radius-xl);
overflow: hidden;
text-decoration: none;
transition:
transform var(--duration) var(--ease-out),
box-shadow var(--duration) var(--ease-out);
display: block;
}
.related-post-card:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-lg);
}
.related-post-image img {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
display: block;
transition: transform 0.4s var(--ease-out);
}
.related-post-card:hover .related-post-image img {
transform: scale(1.04);
}
.related-post-body {
padding: var(--space-5);
}
.related-post-category {
font-family: var(--font-ui);
font-size: var(--text-xs);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.07em;
color: var(--color-accent);
margin-bottom: var(--space-2);
}
.related-post-title {
font-family: var(--font-display);
font-size: var(--text-lg);
font-weight: 700;
color: var(--color-ink);
line-height: var(--leading-snug);
margin-bottom: var(--space-2);
}
.related-post-excerpt {
font-size: var(--text-sm);
color: var(--color-muted);
line-height: var(--leading-normal);
}
/* ─── PROGRESS BAR ───────────────────────────────────────── */
.reading-progress,
[class*="reading-progress"],
[class*="progress-bar"] {
position: fixed;
top: 0;
left: 0;
height: 3px;
background: linear-gradient(90deg, var(--color-accent), #818cf8);
border-radius: 0 100px 100px 0;
z-index: 9999;
transition: width 0.1s linear;
}
/* ─── TABLE OF CONTENTS ──────────────────────────────────── */
.toc,
[class*="table-of-contents"],
[class*="toc-block"] {
margin: var(--space-8) 0;
padding: var(--space-6);
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-xl);
}
.toc-title {
font-family: var(--font-ui);
font-size: var(--text-sm);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--color-muted);
margin-bottom: var(--space-4);
}
.toc ol,
.toc ul {
margin: 0;
padding-left: var(--space-5);
}
.toc li { margin-bottom: var(--space-2); }
.toc a {
font-family: var(--font-ui);
font-size: var(--text-sm);
color: var(--color-accent);
text-decoration: none;
transition: color var(--duration);
}
.toc a:hover { color: var(--color-accent-2); text-decoration: underline; }
/* ─── STICKY SIDEBAR (optional) ─────────────────────────── */
.article-sidebar,
[class*="article-sidebar"],
[class*="post-sidebar"] {
display: none; /* Hidden on mobile, shown on large screens */
}
/* ─── BREADCRUMBS ────────────────────────────────────────── */
.breadcrumbs,
[class*="breadcrumbs"],
[class*="breadcrumb"] {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-2);
font-family: var(--font-ui);
font-size: var(--text-sm);
color: var(--color-muted);
margin-bottom: var(--space-5);
}
.breadcrumbs a {
color: var(--color-muted);
text-decoration: none;
transition: color var(--duration);
}
.breadcrumbs a:hover { color: var(--color-accent); }
.breadcrumbs-sep { color: var(--color-border-2); }
/* ─── NEWSLETTER / SUBSCRIBE BLOCK ──────────────────────── */
.newsletter-block,
[class*="newsletter"],
[class*="subscribe-block"] {
margin: var(--space-12) 0;
padding: var(--space-8) var(--space-6);
background: linear-gradient(145deg, var(--color-accent-4) 0%, #f0f9ff 100%);
border: 1px solid var(--color-accent-3);
border-radius: var(--radius-2xl);
text-align: center;
}
.newsletter-block h3 {
font-family: var(--font-display);
font-size: var(--text-xl);
color: var(--color-ink);
margin-bottom: var(--space-2);
}
.newsletter-block p {
font-size: var(--text-sm);
color: var(--color-muted);
font-family: var(--font-ui);
margin-bottom: var(--space-5);
}
.newsletter-form,
[class*="subscribe-form"] {
display: flex;
gap: var(--space-2);
max-width: 420px;
margin: 0 auto;
flex-wrap: wrap;
}
.newsletter-form input[type="email"],
[class*="email-input"] {
flex: 1;
min-width: 0;
font-family: var(--font-ui);
font-size: var(--text-sm);
padding: 0.75rem 1rem;
background: #fff;
border: 1.5px solid var(--color-border);
border-radius: var(--radius-md);
color: var(--color-ink);
outline: none;
transition: border-color var(--duration);
}
.newsletter-form input[type="email"]:focus {
border-color: var(--color-accent);
box-shadow: 0 0 0 3px rgba(37,99,235,.12);
}
/* ─── WEBFLOW SPECIFIC OVERRIDES ─────────────────────────── */
/* Reset Webflow's aggressive defaults */
.w-richtext figure.w-richtext-align-center {
margin-left: auto;
margin-right: auto;
}
.w-richtext figure.w-richtext-align-fullwidth {
max-width: 100%;
margin-left: calc(-1 * var(--space-5));
margin-right: calc(-1 * var(--space-5));
border-radius: 0;
}
.w-richtext figure.w-richtext-align-fullwidth img {
border-radius: 0;
}
/* Webflow collection list */
.w-dyn-list { width: 100%; }
.w-dyn-item { display: block; }
/* Fix Webflow default link underlines in rich text */
.w-richtext a { text-decoration: underline; }
/* ============================================================
RESPONSIVE — TABLET (≥ 640px)
============================================================ */
@media (min-width: 640px) {
:root {
--text-base: 1.125rem; /* 18px */
--text-lg: 1.25rem; /* 20px */
--text-xl: 1.5rem; /* 24px */
--text-2xl: 1.875rem; /* 30px */
--text-3xl: 2.25rem; /* 36px */
}
.article-wrapper,
.w-container {
padding-left: var(--space-8);
padding-right: var(--space-8);
}
.article-title,
.post-title {
font-size: var(--text-4xl);
}
.related-posts-grid,
[class*="related-grid"] {
grid-template-columns: repeat(2, 1fr);
}
.newsletter-form {
flex-wrap: nowrap;
}
}
/* ============================================================
RESPONSIVE — DESKTOP (≥ 768px)
============================================================ */
@media (min-width: 768px) {
.article-wrapper,
.w-container {
padding-left: var(--space-10);
padding-right: var(--space-10);
}
.article-header,
.post-header {
padding-top: var(--space-16);
margin-bottom: var(--space-10);
}
.article-featured-image,
.post-featured-image {
border-radius: var(--radius-xl);
}
.author-bio {
padding: var(--space-8);
}
}
/* ============================================================
RESPONSIVE — LARGE DESKTOP (≥ 1024px)
============================================================ */
@media (min-width: 1024px) {
:root {
--text-base: 1.125rem;
--text-3xl: 2.5rem;
--text-4xl: 3rem;
--text-5xl: 3.75rem;
}
.article-wrapper,
.w-container {
max-width: var(--full-width);
margin-left: auto;
margin-right: auto;
padding-left: var(--space-12);
padding-right: var(--space-12);
}
/* Two-column layout with sidebar */
.article-layout,
[class*="article-layout"],
[class*="post-layout"] {
display: grid;
grid-template-columns: var(--content-width) 1fr;
gap: var(--space-16);
align-items: start;
}
.article-sidebar,
[class*="article-sidebar"] {
display: block;
position: sticky;
top: var(--space-8);
}
.article-title,
.post-title {
font-size: var(--text-5xl);
}
.related-posts-grid {
grid-template-columns: repeat(3, 1fr);
}
.w-richtext h2 { font-size: var(--text-3xl); }
.w-richtext h3 { font-size: var(--text-2xl); }
.w-richtext h4 { font-size: var(--text-xl); }
}
/* ============================================================
RESPONSIVE — XL DESKTOP (≥ 1280px)
============================================================ */
@media (min-width: 1280px) {
.article-wrapper,
.w-container {
padding-left: var(--space-16);
padding-right: var(--space-16);
}
}
/* ─── NO HORIZONTAL SCROLL GUARD ────────────────────────── */
html, body {
max-width: 100%;
overflow-x: hidden;
}
/* Prevent wide tables / code from breaking layout */
.w-richtext *,
[class*="article-body"] * {
max-width: 100%;
}
.w-richtext pre {
white-space: pre;
overflow-x: auto;
}
/* ─── FOCUS / ACCESSIBILITY ──────────────────────────────── */
:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 3px;
border-radius: var(--radius-sm);
}
/* ─── PRINT ──────────────────────────────────────────────── */
@media print {
.share-bar,
.reading-progress,
.newsletter-block,
.article-sidebar,
.related-posts { display: none !important; }
body {
font-size: 12pt;
color: #000;
}
.w-richtext {
max-width: 100%;
}
.w-richtext a::after {
content: " (" attr(href) ")";
font-size: 0.8em;
color: #666;
}
}
/* ─── REDUCED MOTION ─────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
/* ─── DARK MODE ──────────────────────────────────────────── */
@media (prefers-color-scheme: dark) {
:root {
--color-ink: #f0f0f8;
--color-ink-2: #d8d8ec;
--color-ink-3: #b0b0cc;
--color-muted: #8888a8;
--color-subtle: #6666a0;
--color-border: #2a2a40;
--color-border-2: #363650;
--color-surface: #131320;
--color-bg: #0d0d1a;
--color-accent: #60a5fa;
--color-accent-2: #93c5fd;
--color-accent-3: #1e3a6e;
--color-accent-4: #0f1e38;
--shadow-sm: 0 1px 3px rgba(0,0,0,.4);
--shadow-md: 0 4px 16px rgba(0,0,0,.5);
--shadow-lg: 0 8px 32px rgba(0,0,0,.6);
--shadow-xl: 0 20px 60px rgba(0,0,0,.7);
}
.w-richtext code { color: #f472b6; }
.w-richtext pre { background: #0a0a18; }
.newsletter-block {
background: linear-gradient(145deg, var(--color-accent-4), #0a1628);
}
.cta-block {
background: linear-gradient(135deg, #1e1e3a, #2a2a50);
}
.newsletter-form input[type="email"] {
background: var(--color-surface);
color: var(--color-ink);
border-color: var(--color-border);
}
}