imitation
← all crawls

Future Tools - The Pulse of AI

https://futuretools.io/

Stay ahead on AI. The latest AI news, expert commentary, top tools, and exclusive interviews — curated by Matt Wolfe. Join 250,000+ newsletter readers.

futuretools.io screenshot

Visuals

Colors

Primary
#8b5cf6
Background
#1e1e2e
Surface
#12121e
Text Primary
#f0eef5
Text Secondary
#c4c0d0

Typography

Aa
Display
Syne
72px / w700
Aa
Heading
Syne
30px / w700
Aa
Body
Plus Jakarta Sans
11px / w700
Aa
Label
Plus Jakarta Sans
12px / w500

Spacing

Xs
4px
Sm
6px
Md
8px
Lg
12px
Xl
16px

Radius

Sm
3px
Md
8px
Lg
12px
Pill
9999px

Shadows

Sm
Md

Mode

Dark mode
Background
Sample text on canvas
Bg#1e1e2e
Text#f0eef5
Muted#c4c0d0

Motion

Levelsubtle
Duration150ms
Easingcubic-bezier(0.4, 0, 0.2, 1)

Stack

Frameworktailwind
Iconslucide

Full Palette · 30 tokens

Brand
accent-cyan
#22d3ee
primary
#8b5cf6
primary-active
#6d28d9
primary-hover
#7c3aed
Surface
canvas
#1e1e2e
surface-card
#12121e
surface-elevated
#1a1a2e
surface-header
rgba(30, 30, 46, 0.95)
surface-input
#12121e
surface-soft
#12121e
Text
body
#c4c0d0
ink
#f0eef5
muted
#a8a3b8
muted-faint
rgba(168, 163, 184, 0.4)
muted-soft
rgba(168, 163, 184, 0.7)
muted-subtle
rgba(168, 163, 184, 0.6)
on-dark
#f0eef5
on-primary
#ffffff
Hairlines & Borders
border-focus
#8b5cf6
border-input
#1e1e30
hairline
rgba(240, 238, 245, 0.06)
hairline-strong
rgba(240, 238, 245, 0.1)
Semantic
error
#ef4444
info
#3b82f6
link
#8b5cf6
link-active
#a78bfa
success
#22c55e
warning
#f59e0b
Other
category-tag
#8b5cf6
featured-badge
#8b5cf6

Typography Roles · 11

body-base
Aa
16px / w400
body-md
Aa
11px / w700
body-sm
Aa
14px / w400
button
Aa
12px / w500
button-nav
Aa
14px / w500
caption
Aa
12px / w500
display-lg
Aa
60px / w700
display-xl
Aa
72px / w700
label-uppercase
Aa
11px / w700
title-md
Aa
30px / w700
title-sm
Aa
18px / w600

Components · 34

button-primary
backgroundColor{colors.primary}
height36px
padding0 12px
rounded{rounded.md}
textColor{colors.on-primary}
typography{typography.button}
button-primary-active
backgroundColor{colors.primary-active}
rounded{rounded.md}
textColor{colors.on-primary}
button-primary-hover
backgroundColor{colors.primary-hover}
rounded{rounded.md}
textColor{colors.on-primary}
button-primary-large
backgroundColor{colors.primary}
padding10px 24px
rounded{rounded.md}
textColor{colors.on-primary}
typography{typography.button}
button-primary-large-hover
backgroundColor{colors.primary-hover}
rounded{rounded.md}
textColor{colors.on-primary}
company-logo-badge
backgroundColortransparent
padding6px 12px
rounded{rounded.sm}
textColor{colors.muted}
typography{typography.body-sm}
divider
backgroundColortransparent
textColor{colors.hairline}
email-input
backgroundColor{colors.surface-input}
height44px
padding8px 12px
rounded{rounded.md}
textColor{colors.ink}
typography{typography.body-sm}
email-input-focus
backgroundColor{colors.surface-input}
rounded{rounded.md}
textColor{colors.ink}
featured-badge
backgroundColortransparent
padding4px 10px
rounded{rounded.pill}
textColor{colors.featured-badge}
typography{typography.label-uppercase}
headline-accent
backgroundColortransparent
textColor{colors.primary}
typography{typography.display-lg}
headline-display
backgroundColortransparent
textColor{colors.ink}
typography{typography.display-lg}
hero-band
backgroundColor{colors.canvas}
padding{spacing.section} 0
textColor{colors.ink}
hero-subheadline
backgroundColortransparent
textColor{colors.body}
typography{typography.body-base}
nav-icon-button
backgroundColortransparent
rounded{rounded.md}
size36px
textColor{colors.muted}
nav-icon-button-hover
backgroundColorrgba(255, 255, 255, 0.04)
rounded{rounded.md}
textColor{colors.ink}
nav-link
backgroundColortransparent
padding8px 12px
rounded{rounded.md}
textColor{colors.muted}
typography{typography.button-nav}
nav-link-hover
backgroundColorrgba(255, 255, 255, 0.04)
rounded{rounded.md}
textColor{colors.ink}
news-card
backgroundColor{colors.surface-card}
padding{spacing.lg}
rounded{rounded.lg}
textColor{colors.ink}
news-card-category
backgroundColortransparent
textColor{colors.category-tag}
typography{typography.label-uppercase}
news-card-image
backgroundColor{colors.surface-soft}
rounded{rounded.md}
news-card-meta
backgroundColortransparent
textColor{colors.muted-soft}
typography{typography.caption}
news-card-title
backgroundColortransparent
textColor{colors.ink}
typography{typography.title-sm}
section-description
backgroundColortransparent
textColor{colors.muted}
typography{typography.body-sm}
section-header
backgroundColortransparent
textColor{colors.ink}
typography{typography.title-md}
sidebar-card
backgroundColor{colors.surface-card}
padding{spacing.xl}
rounded{rounded.lg}
textColor{colors.ink}
sidebar-card-description
backgroundColortransparent
textColor{colors.muted}
typography{typography.body-sm}
sidebar-card-title
backgroundColortransparent
textColor{colors.ink}
typography{typography.title-sm}
social-proof-label
backgroundColortransparent
textColor{colors.muted}
typography{typography.label-uppercase}
tab-button
backgroundColor{colors.primary}
padding8px 16px
rounded{rounded.md}
textColor{colors.on-primary}
typography{typography.button}
tab-button-inactive
backgroundColortransparent
padding8px 16px
rounded{rounded.md}
textColor{colors.muted}
typography{typography.button}
tool-list-item
backgroundColor{colors.surface-elevated}
padding12px 16px
rounded{rounded.md}
textColor{colors.ink}
top-nav
backgroundColor{colors.surface-header}
height57px
textColor{colors.ink}
typography{typography.button-nav}
view-all-link
backgroundColortransparent
textColor{colors.primary}
typography{typography.button-nav}

design.md

Future Tools Design System

Overview

Future Tools presents itself as a sophisticated dark-mode intelligence hub for the AI ecosystem — part editorial curatorium, part tool directory, part community signal-aggregator. The visual language leans into a deep-space aesthetic: a near-black navy canvas ({colors.canvas}) anchors every surface, while violet brand voltage ({colors.primary}) pulses selectively through CTAs, active states, accent highlights, and the iconic "ONE" wordmark treatment in the hero headline. This is not a shy palette; it's a confident, developer-adjacent voice that trusts its audience to read dense information hierarchies without hand-holding.

The typography system operates on a deliberate two-family split. Syne — a geometric, slightly eccentric grotesque — carries all display and heading work, deployed at heavy weights (600–700) with tight letter-spacing that gives headlines an architectural, almost brutalist presence. Below that, Plus Jakarta Sans handles everything else: UI labels, body copy, navigation, captions. The body type notably uses an uppercase label style ({typography.body-md}) at 11px with 0.14em tracking for meta-information like category tags and social-proof headers, creating a distinct "data-layer" aesthetic that sits above standard body copy in the hierarchy.

Shape language is consistently soft-rounded — {rounded.md} (8px) serves as the default for buttons, inputs, and most containers, while {rounded.lg} (12px) gives cards gentle corners that feel modern without drifting into playful territory. Pill radii ({rounded.pill}) appear exclusively on badges. The system avoids sharp corners entirely, reinforcing the polished, productized feel of what is essentially a content business.

Sub-systems visible on the landing page include: the Hero/Newsletter acquisition unit (full-width, two-column with neural-network illustration), the News Feed card grid (editorial metadata + thumbnail), and the Sidebar Tools module (ranked list with featured badges). Each sub-system shares the core tokens but applies them at different densities and proportions.

Key Characteristics:

  • Deep navy-dark canvas ({colors.canvas} — #1e1e2e) with elevated surfaces at {colors.surface-soft} for layered depth
  • Violet primary ({colors.primary} — #8b5cf6) reserved for conversion actions and semantic highlights; never used as body text
  • Syne display type at 60–72px weight 700 with negative letter-spacing for all major headlines
  • Plus Jakarta Sans for all UI elements, featuring an 11px uppercase label style ({typography.label-uppercase}) with 0.14em tracking for metadata
  • Default corner radius of {rounded.md} (8px) across buttons, inputs, and cards; {rounded.pill} for badges only
  • Subtle backdrop-blur header with {colors.surface-header} at 95% opacity
  • Glowing shadow treatment ({extensions.shadows.glow-purple}) on focused or featured elements combining violet border and cyan outer glow
  • Spacing scale anchored at {spacing.lg} (12px) for component-internal padding, scaling up to {spacing.section} (80px) for vertical band rhythm

Colors

Brand & Accent

  • Primary ({colors.primary} — #8b5cf6): The signature violet used on all conversion CTAs ({component.button-primary}, {component.button-primary-large}), the "ONE" accent word in the hero headline, active tab states, category tags, and link text. This is the single brand-voltage color in the system.
  • Primary Hover ({colors.primary-hover} — #7c3aed): Slightly deepened violet for hover states on primary buttons and interactive elements.
  • Primary Active ({colors.primary-active} — #6d28d9): Pressed/depressed state for primary buttons, providing tactile feedback.
  • Accent Cyan ({colors.accent-cyan} — #22d3ee): Secondary brand accent appearing in the neural network illustration's glow effect and as the outer-glow component of the {extensions.shadows.glow-purple} shadow token. Used sparingly as a color-block; mostly atmospheric.

Surface

  • Canvas ({colors.canvas} — #1e1e2e): The foundational background color for the entire page, hero band, and main content areas. A deeply saturated blue-black that reads as "dark navy" rather than pure black.
  • Surface Soft ({colors.surface-soft} — #12121e): One step darker than canvas, used for inset surfaces like the email input field ({component.email-input}), news card backgrounds ({component.news-card}), sidebar cards ({component.sidebar-card}), and the company logo badge row background.
  • Surface Elevated ({colors.surface-elevated} — #1a1a2e): Slightly lighter than canvas, used for list item backgrounds within cards such as {component.tool-list-item} to create subtle striping.
  • Surface Input ({colors.surface-input} — #12121e): Alias for surface-soft in input contexts; the email subscription field uses this as its fill.
  • Surface Card ({colors.surface-card} — #12121e): Alias for surface-soft; the shared background for both news cards and sidebar containers.
  • Surface Header ({colors.surface-header}): The sticky navigation bar background — canvas color at 95% opacity with backdrop-blur-md, creating a frosted-glass effect over scrolling content.

Text

  • Ink ({colors.ink} — #f0eef5): The lightest text color, near-white with a cool lavender tint. Used for headlines ({component.headline-display}, {component.section-header}, {component.news-card-title}), hero subheadline, and primary button text.
  • Body ({colors.body} — #c4c0d0): Secondary text color for paragraph-level content like {component.hero-subheadline} and {component.sidebar-card-description}. Softer than ink but fully legible.
  • Muted ({colors.muted} — #a8a3b8): Tertiary text for navigation links ({component.nav-link}), company logo names ({component.company-logo-badge}), and sidebar descriptions. Clearly subordinate to body text.
  • Muted Soft ({colors.muted-soft}): Muted at 70% opacity — used for news card metadata timestamps and secondary annotations where visibility matters but emphasis does not.
  • Muted Subtle ({colors.muted-subtle}): Muted at 60% opacity — placeholder text in inputs, very lightweight annotations.
  • Muted Faint ({colors.muted-faint}): Muted at 40% opacity — the faintest readable text, used for decorative or extremely secondary information.
  • On Primary ({colors.on-primary} — #ffffff): Pure white, used exclusively on {colors.primary} backgrounds to ensure maximum contrast on CTAs.
  • On Dark ({colors.on-dark} — #f0eef5): Alias for ink; text that sits directly on dark surfaces without a container.

Hairlines & Borders

  • Hairline ({colors.hairline}): Dividers at 6% white opacity — used for the header bottom border and mobile menu separator. Nearly invisible but structurally present.
  • Hairline Strong ({colors.hairline-strong}): Dividers at 10% white opacity — slightly more visible separation lines where stronger delineation is needed.
  • Border Input ({colors.border-input} — #1e1e30): The default border color for form fields like {component.email-input}, a subtly lighter shade than the input background.
  • Border Focus ({colors.border-focus} — #8b5cf6): Violet focus ring color that appears on interactive elements when they receive keyboard or click focus.

Semantic

  • Error ({colors.error} — #ef4444): Red for validation errors and destructive actions (not observed in screenshot but included for system completeness).
  • Success ({colors.success} — #22c55e): Green for confirmation states (not observed but standard).
  • Warning ({colors.warning} — #f59e0b): Amber for cautionary states (not observed but standard).
  • Info ({colors.info} — #3b82f6): Blue for informational messages (not observed but standard).
  • Link ({colors.link} — #8b5cf6): Alias for primary — all clickable text links use the brand violet, including {component.view-all-link}.
  • Link Active ({colors.link-active} — #a78bfa): Lighter violet for visited or active link states.
  • Featured Badge ({colors.featured-badge} — #8b5cf6): Violet text/color for the "FEATURED" pill badge on tool listings.
  • Category Tag ({colors.category-tag} — #8b5cf6): Violet text for the "TOOLS & PRODUCTS" category label on news cards.

Typography

Font Family

The system employs a two-typeface strategy with clear role division. Syne — a geometric sans-serif designed by Bonjour Monde — handles all display and heading work. It has a distinctive character: slightly squared-off curves, open apertures, and a confident presence at large sizes. The font is loaded via self-hosted WOFF2 files with a fallback to Arial (with metric overrides). Plus Jakarta Sans — a humanist-influenced grotesque by Toko Laris Djaya — manages all UI, body, and metadata text. It reads cleanly at small sizes (down to 11px), supports a wide weight range (200–800), and provides excellent legibility for the dense information layouts that dominate the page.

Both fonts use font-display: swap for performance, and each includes a metric-matched fallback face ("Syne Fallback" and "Plus Jakarta Sans Fallback") using local Arial with ascent-override, descent-override, and size-adjust to prevent layout shift during loading.

Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use | |---|---|---|---|---|---| | {typography.display-xl} | 72px | 700 | 1.05 | -0.03em | Super-headlines (potential, not observed) | | {typography.display-lg} | 60px | 700 | 1.05 | -0.025em | Hero headline ("Stay ahead on AI...") | | {typography.title-md} | 30px | 700 | 1.2 | -0.025em | Section headers ("AI News", "Top 20 AI Tools") | | {typography.title-sm} | 18px | 600 | 1.375 | -0.025em | Card titles, news headlines, sidebar headings | | {typography.body-md} | 11px | 700 | 1.5 | 0.14em | Uppercase labels, category tags, social-proof header | | {typography.body-sm} | 14px | 400 | 1.5 | 0 | Body copy, descriptions, navigation items | | {typography.body-base} | 16px | 400 | 1.6 | 0 | Hero subheadline paragraph | | {typography.button} | 12px | 500 | 1.25 | 0 | Primary CTA button text | | {typography.button-nav} | 14px | 500 | 1.25 | 0 | Navigation links, secondary button text | | {typography.caption} | 12px | 500 | 1.4 | 0.02em | Timestamps, meta annotations | | {typography.label-uppercase} | 11px | 700 | 1.5 | 0.14em | Alias for body-md — uppercase metadata labels |

Principles

The typography system's most distinctive move is its confidence in size and weight over color variation for establishing hierarchy. Headlines don't need to be a different color from body text — they're simply 60px and weight 700 versus 14px/400. Color enters the typographic layer only for semantic purposes: the violet "ONE" in the headline, violet category tags, and violet links. This restraint keeps the palette focused.

The uppercase label layer ({typography.body-md}/{typography.label-uppercase}) at 11px/700 with 0.14em letter-spacing creates a recurring "data annotation" texture throughout the page. It appears above the company logo grid ("JOIN 250,000+ READERS FROM COMPANIES LIKE"), on news card categories ("TOOLS & PRODUCTS • 9H AGO"), and likely on any timestamped or categorized content. This micro-typographic pattern signals "this is metadata" without needing enclosing boxes or background tints.

Letter-spacing is universally negative or neutral for display type (tightening the geometric Syne to prevent it from feeling airy) and positive for the tiny uppercase labels (giving the 11px caps room to breathe). Body text sits at zero letter-spacing for natural readability.

Note on Font Substitutes

Syne is available on Google Fonts under the same name. For implementations that cannot self-host, substitute font-family: 'Syne', sans-serif from Google Fonts. The closest Google Fonts equivalent if Syne is unavailable would be Space Grotesk (similar geometric character, good weight range) or Outfit (cleaner, more neutral).

Plus Jakarta Sans is also available on Google Fonts. Use font-family: 'Plus Jakarta Sans', sans-serif directly. If unavailable, Inter serves as a strong substitute (similar humanist proportions, excellent small-size rendering) or DM Sans (slightly more geometric, matches the Syne pairing well).

Define CSS variables as:

--font-display: 'Syne', ui-sans-serif, system-ui, sans-serif;
--font-body: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;

Layout

Spacing System

  • Base unit: 4px (implicit from the spacing scale's smallest meaningful increment).

  • Tokens:

    • {spacing.xxs} (2px) — micro-adjustments, internal gaps in tight clusters
    • {spacing.xs} (4px) — icon-to-text gaps, badge internal padding
    • {spacing.sm} (6px) — compact vertical rhythm between related elements
    • {spacing.md} (8px) — small component gaps, input padding vertical
    • {spacing.base} (10px) — button padding vertical
    • {spacing.lg} (12px) — the workhorse: card internal padding, nav item padding, gap between sibling elements
    • {spacing.xl} (16px) — medium component gaps, form horizontal padding
    • {spacing.2xl} (20px) — larger internal gaps, section-internal spacing
    • {spacing.3xl} (32px) — major element separation
    • {spacing.4xl} (48px) — sub-section breaks
    • {spacing.section} (80px) — vertical band padding: hero top/bottom, section-to-section spacing
    • {spacing.section-xl} (128px) — major section breaks (potential, inferred)
  • Section padding (vertical): {spacing.section} (80px) — used on the hero band and likely on the AI News section below.

  • Card internal padding: {spacing.lg} (12px) for {component.news-card} and {spacing.xl} (16px) for {component.sidebar-card}.

  • Gutters: The main container maxes at 1440px width with 32px horizontal padding on desktop (lg:px-8), collapsing to 16px on mobile.

Grid & Container

  • Max content width: 1440px for main page wrapper; nav constrains further to 1280px (max-w-7xl).
  • Density choice: Editorial-dense. The landing page packs a hero unit, email capture, social proof grid, news feed (2-column visible), and tools sidebar into a single viewport-height-adjacent space. This is not an "airy luxury" layout — it's an information-dense dashboard-meets-publication.
  • Desktop grid behavior: The hero uses a ~2-column split (text left, neural network illustration right, roughly 45/55). The content area below appears to use a 12-column grid with the news feed taking ~8 columns and the sidebar taking ~4.
  • Hero column splits: Left column holds the headline stack (display text → subheadline → email form → social proof). Right column holds the decorative neural network node-graph illustration with glowing particles.

Whitespace Philosophy

Future Tools practices compressed whitespace with strategic release. The canvas is dark, which visually recedes and allows tighter spacing without feeling cramped. Vertical bands get generous {spacing.section} breathing room, but within those bands, elements sit close together — the email input and subscribe button share a row with minimal gap; company logos tile tightly; news cards pack their metadata into compact label+title stacks. This creates a "control panel" density that feels appropriate for an AI-tools audience.

Header Architecture

┌─────────────────────────────────────────────────────────────────┐
│ [Logo]     AINews   Tools ▾   Editorial ▾   More ▾    [☀] [Sub] │
│             ←              navigation center              →      │
└─────────────────────────────────────────────────────────────────┘
                              ↑
                        max-width: 1280px
                        height: 57px (sticky)
                        bg: surface-header (95% opaque + blur)

The header is sticky (sticky top-0 z-50) with a frosted-glass background effect. The logo sits flush left; navigation items center with dropdown carets; utilities (theme toggle icon, Subscribe CTA) flush right. A 1px hairline border runs along the bottom edge at {colors.hairline} opacity.

Hero Section

┌──────────────────────────────────────────────────────────────────┐
│                                                                  │
│  Stay ahead on AI.           ┌──────────────────────┐           │
│  All in ONE place.           │   Neural Network     │           │
│                              │   (node graph        │           │
│  The latest AI news...       │    illustration)     │           │
│                              │                      │           │
│  [Enter your email] [Subscribe]                     │           │
│                                                              │   │
│  JOIN 250,000+ READERS...                             │           │
│  [Google] [Apple] [Microsoft] [Meta] [NVIDIA] ...     │           │
│  [Anthropic] [OpenAI] [Amazon] [Adobe] [AMD] ...      │           │
│  [Qualcomm] [Cisco] [a16z] [Sequoia Capital]         │           │
│                              └──────────────────────┘           │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘
  ↑ text column (~45%)         ↑ illustration column (~55%)
  padding: {spacing.section} vertical

The hero follows a classic conversion-landing structure: attention-grabbing headline with inline color accent → value proposition paragraph → lead capture form (input + button inline) → social proof (company logo cloud) → decorative brand imagery. The "ONE" in the headline renders in {colors.primary} violet.

Content Sections (AI News + Sidebar)

┌──────────────────────────────────────┬──────────────────────────┐
│  AI News                             │  ↗ Top 20 AI Tools       │
│  The biggest AI headlines...         │  Ourmost recommended...  │
│                           [View all →]│                          │
│                                      │  ┌────────────────────┐  │
│  ┌────────────────────────────────┐  │  │ ◆ Hyperagent      │  │
│  │ [img]  TOOLS & PRODUCTS • 9H  │  │  │   Get $200 free!   │  │
│  │        OpenAI GPT-6 Boosts... │  │  │              [FEAT] │  │
│  └────────────────────────────────┘  │  └────────────────────┘  │
│                                      │                          │
│                                      │  [Comm.Picks][Matt's]    │
└──────────────────────────────────────┴──────────────────────────┘
   ↑ News Feed (~8 cols)              ↑ Sidebar (~4 cols)

The news feed uses card-based entries with thumbnail images, uppercase category+time metadata, and headline text. The sidebar features a ranked tool listing with featured badges and tabbed filtering (Community Picks / Matt's Picks).

Elevation & Depth

| Level | Treatment | Use | |---|---|---| | 0 (Flat) | No shadow, {colors.canvas} background | Base page surface, hero band | | 1 (Inset) | {colors.surface-soft} background, no shadow | Input fields, card containers | | 2 (Raised) | {extensions.shadows.sm} | Buttons, floating elements | | 3 (Elevated) | {extensions.shadows.md} | Dropdowns, modals (inferred) | | 4 (Glow) | {extensions.shadows.glow-purple} | Featured/focused elements, special callouts |

The system favors color-block elevation over shadow elevation for its primary depth cue. Cards don't cast shadows to lift off the canvas — they simply adopt a darker background color ({colors.surface-soft} vs. {colors.canvas}). This flat-layered approach is characteristic of dark-mode design systems where shadows are less visible. When shadows do appear, they're subtle and neutral-toned (the sm and md tokens use only black opacity). The exception is the glow treatment (glow-purple), which combines a violet border with a cyan-tinted outer glow — this is reserved for focus rings and "featured" states, giving them a neon sign quality that pops against the dark canvas.

Decorative Depth

The neural network illustration in the hero represents the system's primary decorative depth technique: luminescent particle graphics on dark ground. The node graph uses cyan and violet glowing dots connected by thin luminous lines, creating a sense of digital/AI atmosphere without photographic imagery. This is vector/CGI illustration rather than photography, and it establishes the brand's visual vocabulary: technological, networked, luminous.

Shapes

Border Radius Scale

| Token | Value | Use | |---|---|---| | {rounded.sm} | 3px | Company logo badges, subtle inner elements | | {rounded.DEFAULT} | 6px | Default fallback (less common than md) | | {rounded.md} | 8px | Primary radius: buttons, inputs, nav items, list items, icon buttons | | {rounded.lg} | 12px | Cards (news cards, sidebar cards), image containers | | {rounded.xl} | 16px | Larger panels (rare) | | {rounded.pill} | 9999px | Badges ("FEATURED"), tags, pills |

The shape vocabulary is intentionally limited. Eighty percent of rounded elements use either {rounded.md} (interactive elements) or {rounded.lg} (containers). There are no sharp-cornered rectangles in the interface — even the email input and buttons have softened edges. The pill radius appears only on inline badges, where full rounding creates a "tag" visual language.

Photography Geometry

News card thumbnails use a square or slightly-vertical rectangle aspect ratio with {rounded.md} (8px) corner rounding. The observable card shows what appears to be a gradient or abstract image (green-to-orange gradient on the "Better prompt caching" card), suggesting that article thumbnails may use gradient placeholders, generated imagery, or branded graphics rather than photography. The neural network hero illustration is a free-form organic shape (roughly circular/node-cluster) with no corner treatment since it's an illustration, not a contained image.

Components

No hover states documented. Hover behavior is unreliable to extract from a single screenshot. State variants live as separate entries in the components: frontmatter (e.g. {component.button-primary-hover}, {component.email-input-focus}); add hover styling at implementation time per your stack's conventions.

Buttons

{component.button-primary} — The standard primary action button. Background {colors.primary}, text {colors.on-primary} in {typography.button} (12px/500), rounded {rounded.md}, padding 0 12px, height 36px. Carries {extensions.shadows.sm} for subtle lift. Observed in the header's "Subscribe" button. State variant: {component.button-primary-hover} (background shifts to {colors.primary-hover}), {component.button-primary-active} (background shifts to {colors.primary-active}).

{component.button-primary-large} — The hero-scale CTA variant. Same color tokens and typography as {component.button-primary} but with expanded padding (10px 24px) and taller hit area. Used for the "Subscribe to Newsletter" button in the hero form. State variant: {component.button-primary-large-hover}.

{component.nav-link} — Ghost/navigation button. Transparent background, text {colors.muted} in {typography.button-nav} (14px/500), rounded {rounded.md}, padding 8px 12px. Used for "AI News", "Tools", "Editorial", "More" in the top nav. On hover, background becomes rgba(255, 255, 255, 0.04) and text shifts to {colors.ink} (see {component.nav-link-hover}). Includes a dropdown caret indicator (chevron-down icon) on items with sub-menus.

{component.nav-icon-button} — Square icon-only button for utility actions. Transparent background, text {colors.muted}, size 36×36px ({rounded.md}). Used for the theme toggle (sun icon) in the header. Hover state mirrors {component.nav-link-hover} behavior.

Cards & Containers

{component.news-card} — The primary content card for news/feed items. Background {colors.surface-card}, rounded {rounded.lg}, padding {spacing.lg} (12px). Contains a thumbnail image ({component.news-card-image}), category/time metadata line, and headline text. No visible border or shadow — elevation comes purely from the background color contrast against {colors.canvas}.

{component.news-card-image} — Thumbnail container inside news cards. Background {colors.surface-soft}, rounded {rounded.md}. Holds article preview imagery (gradient or illustrated).

{component.sidebar-card} — Right-rail container for the "Top 20 AI Tools" module. Background {colors.surface-card}, rounded {rounded.lg}, padding {spacing.xl} (16px) — slightly more generous than news cards. Contains a titled header, description text, and a scrollable/ranked list of tool items.

{component.tool-list-item} — Individual tool entry within the sidebar card. Background {colors.surface-elevated} (one step lighter than card), text {colors.ink}, rounded {rounded.md}, padding 12px 16px. Contains tool name, description snippet, and optional {component.featured-badge}. Items appear stacked vertically with small gaps.

{component.company-logo-badge} — Social proof badge showing partner/company names. Transparent background, text {colors.muted} in {typography.body-sm}, rounded {rounded.sm} (3px), padding 6px 12px. Arranged in a wrapping flex/grid layout in the hero's lower portion. Includes a small icon (SVG) preceding each company name.

Inputs & Forms

{component.email-input} — The newsletter email capture field. Background {colors.surface-input}, text {colors.ink} in {typography.body-sm} (14px), border 1px solid {colors.border-input}, rounded {rounded.md}, padding 8px 12px, height 44px. Placeholder text renders in {colors.muted-subtle}. Sits inline adjacent to {component.button-primary-large} in the hero form. Focus state ({component.email-input-focus}) should introduce a {colors.border-focus} ring, potentially with the {extensions.shadows.glow-purple} treatment based on the extracted focus-shadow CSS.

Navigation

{component.top-nav} — The sticky global header. Background {colors.surface-header} (canvas at 95% opacity with backdrop-blur-md), height 57px, text {colors.ink}. Contains the Future Tools logo (left), navigation links (center), and utility actions (right). A {colors.hairline} bottom-border provides subtle separation from content. Uses z-50 to stay above all scrolling content.

{component.view-all-link} — Text-only link for section-level navigation ("View all news →"). Transparent background, text {colors.primary} in {typography.button-nav}, includes a right-arrow icon. No padding beyond inherent text spacing.

Signature Components

{component.headline-display} — The hero headline. Text {colors.ink} in {typography.display-lg} (60px/700/Syne, -0.025em tracking). Multi-line, with the word "ONE" rendered in {colors.headline-accent} (violet color) while remaining words stay in ink. This inline color switch is a signature branding moment — it should be implemented as a <span> with explicit color class, not as a CSS pseudo-element.

{component.social-proof-label} — The uppercase label above the company logo grid. Text {colors.muted} in {typography.label-uppercase} (11px/700, 0.14em tracking). Reads "JOIN 250,000+ READERS FROM COMPANIES LIKE". Sets up the logo cloud as credibility signaling.

{component.featured-badge} — Inline "FEATURED" pill badge on tool listings. Transparent background, text {colors.featured-badge} (violet) in {typography.label-uppercase}, rounded {rounded.pill}, padding 4px 10px. Likely has a thin violet border (inferred from typical badge patterns, though exact border token not extracted).

{component.tab-button} / {component.tab-button-inactive} — Tab switching controls (observed in sidebar: "Community Picks" / "Matt's Picks"). Active tab ({component.tab-button}) has {colors.primary} background with {colors.on-primary} text. Inactive tab ({component.tab-button-inactive}) is transparent with {colors.muted} text. Both use {typography.button}, {rounded.md}, and 8px 16px padding.

{component.section-header} — Section title (e.g., "AI News"). Text {colors.ink} in {typography.title-md} (30px/700/Syne). Paired with {component.section-description} (muted body-sm text) and optionally a {component.view-all-link} aligned to the right.

Do's and Don'ts

Do

  • Do use {colors.primary} exclusively for conversion actions, accent highlights, and links — never as body text or heading color (except the intentional "ONE" headline accent).
  • Do apply {typography.label-uppercase} (11px/700/0.14em-tracking) for all metadata layers: category tags, timestamps, social-proof headers, and badge labels. This creates the system's signature "data annotation" texture.
  • Do use {colors.surface-soft} (#12121e) as the universal card/input/container background, creating depth through color-step alone without shadows.
  • Do keep the sticky header at {colors.surface-header} with backdrop-blur-md — the frosted-glass effect is essential for maintaining context during scroll.
  • Do reserve {extensions.shadows.glow-purple} (violet border + cyan glow) for focus states and "featured" elements only — it loses impact if overused.
  • Do use {rounded.md} (8px) as the default radius for all interactive elements (buttons, inputs, nav items); reserve {rounded.lg} (12px) for cards and {rounded.pill} for badges.
  • Do maintain the two-font-family split: Syne for all {typography.display-*}, {typography.title-*} roles; Plus Jakarta Sans for everything else.
  • Do implement the company logo grid with {component.company-logo-badge} styling — small rounded containers with muted text and preceding icons, arranged in a flexible wrap layout.
  • Do give the hero section {spacing.section} (80px) vertical padding to let the headline and illustration breathe despite the overall dense layout.
  • Do use {colors.muted-soft} (70% opacity) for timestamps and secondary metadata to create a clear three-tier text hierarchy (ink → body → muted → muted-soft).

Don't

  • Don't use {colors.ink} (#f0eef5) on {colors.primary} — always use {colors.on-primary} (#ffffff) for primary-background text to maintain AAA contrast.
  • Don't apply shadows to cards or containers for elevation — the system uses color-step depth ({colors.canvas}{colors.surface-soft}) exclusively for layer separation.
  • Don't use font weights below 400 for any visible text — the system's lightest weight is 400 (body copy), with most elements at 500+.
  • Don't expand the radius vocabulary beyond the six defined tokens ({rounded.sm} through {rounded.pill}) — consistency in corner treatment is a key cohesive element.
  • Don't use the {typography.display-lg} (60px Syne) role for anything other than the hero headline or equivalent page-level titles — it's a singular, high-impact size.
  • Don't place {component.button-primary} elements on {colors.surface-soft} backgrounds without verifying contrast — the violet-on-dark-surface combination needs the button's intrinsic shadow to separate.
  • Don't omit the letter-spacing on {typography.label-uppercase} — the 0.14em tracking is essential for the uppercase label aesthetic and legibility at 11px.
  • Don't mix Syne into body copy or UI elements — the font's geometric character is too dominant for small-size reading; keep it strictly in display/headline roles.
  • Don't use pure black (#000000) as a background anywhere — the system's canvas is always tinted ({colors.canvas} = #1e1e2e), which is noticeably warmer and more refined than pure black.
  • Don't make the email input and subscribe button different heights — they must share the same 44px (input) / matched (button) height to align properly in the inline form.

Motion & Animation

Transition Tokens

/* Core UI transitions — fast, snappy, unified easing */
--transition-colors: color 0.15s cubic-bezier(0.4, 0, 0.2, 1), 
                      background-color 0.15s cubic-bezier(0.4, 0, 0.2, 1), 
                      border-color 0.15s cubic-bezier(0.4, 0, 0.2, 1), 
                      outline-color 0.15s cubic-bezier(0.4, 0, 0.2, 1);
--transition-transform: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1), 
                         translate 0.15s cubic-bezier(0.4, 0, 0.2, 1);
--transition-transform-slow: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), 
                              translate 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--transition-transform-slower: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), 
                               translate 0.5s cubic-bezier(0.4, 0, 0.2, 1);
--transition-base: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
--transition-slow: 0.2s cubic-bezier(0.4, 0, 0.2, 1);

Keyframe Animations

  • fade-in-up — Elements entering from below with opacity transition (likely used for scroll-triggered card reveals).
  • fade-in — Simple opacity 0→1 transition (general purpose).
  • slide-in-right — Elements entering from the right edge (sidebar or drawer reveal).
  • glow-pulse — Pulsing glow intensity effect (potentially for the neural network nodes or featured badges).
  • shimmer — Horizontal highlight sweep (likely for skeleton loading states or premium badges).
  • ticker — Continuous horizontal scroll/marquee (possibly for the company logo row or news ticker).
  • spin — Full rotation (loading indicators).
  • pulse — Scale pulse (attention-drawing or loading state).

Interaction Patterns

  • Hover lifts: Buttons and nav items use {--transition-transform} (150ms) for subtle Y-axis translation on hover (inferred from Tailwind hover: classes).
  • Scroll-triggered reveals: News cards and sidebar content likely animate in using fade-in-up when entering the viewport (IntersectionObserver pattern).
  • Focus rings: Interactive elements gain a {colors.border-focus} violet outline with {extensions.shadows.glow-purple} on keyboard focus, transitioning via {--transition-colors}.
  • Backdrop blur transition: The sticky header's frosted-glass effect engages smoothly as user scrolls past the initial viewport position.
  • Tab switching: The Community Picks / Matt's Picks tabs swap content with a fade or slide transition using {--transition-transform-slow} (300ms).
  • Neural network animation: The hero illustration likely features continuously animated node connections or particle drift using CSS @keyframes or Canvas/WebGL — this is ambient/atmospheric, not interaction-triggered.
  • Dropdown menus: Nav items with carets ("Tools ▾", "Editorial ▾", "More ▾") reveal sub-menus on hover/click with slide-in-right or fade-in animation at 150–200ms.

Imagery Style

  • Primary visual vocabulary: Vector/CGI illustration over photography. The hero features a neural network node-graph — glowing particles (cyan and violet) connected by thin luminous lines against the dark canvas, suggesting AI connectivity and intelligence.
  • Color treatment in imagery: Illustrations use the brand's own palette (violet, cyan, deep navy) creating seamless integration with the UI. No jarring photographic realism interrupts the digital-atmosphere aesthetic.
  • News card thumbnails: Appear to use gradient backgrounds or abstract generated imagery rather than photographs. The visible card shows a green-to-orange gradient, suggesting a "gradient placeholder" or "branded abstract" approach to article imagery.
  • Imagery role: Supportive, not dominant. The hero illustration occupies roughly 55% of the hero width but sits at lower visual weight than the headline text. Imagery reinforces the brand's technological identity rather than conveying specific literal content.
  • No photography detected: The entire above-fold experience is typographic + illustrative. If photography exists elsewhere (author headshots, tool screenshots), it was not visible in the extracted screenshot.
  • Icon style: Line icons (Lucide) with consistent 1.5–2px stroke weight, rendered in currentColor (inheriting from parent text color). Clean, minimal, technical aesthetic.
  • Logo treatment: Company logos in the social-proof section appear as monochrome (muted color) icons + text, not full-color brand marks, maintaining the subdued palette.

Icon System

  • Library: Lucide (detected from framework analysis: iconLibs: ["lucide"]).
  • Specific icons observed:
    • ChevronDown — Navigation dropdown indicators (Tools ▾, Editorial ▾, More ▾)
    • Sun — Theme toggle button (top-right of header)
    • ArrowRight — "View all news →" link suffix
    • ArrowUpRight — "Top 20 AI Tools" external link indicator
    • Google, Apple (brand icons) — Preceding company names in social proof grid
    • Grid2x2 or similar — Hyperagent tool icon (four-dot grid pattern)
    • Various brand logos (Microsoft, Meta, NVIDIA, Anthropic, OpenAI, Amazon, Adobe, AMD, Qualcomm, Cisco, a16z, Sequoia) — Rendered as SVGs or icon fonts in the company badge row
  • Treatment: Stroke-based (not filled), currentColor inheritance, consistent sizing (16px for inline/nav icons, 20–24px for standalone decorative use).
  • Alignment: Icons sit on the same baseline as adjacent text with items-center flex alignment, typically with a small gap (4–8px) between icon and label.

Recommended Frontend Stack

- Framework:      Next.js (App Router) — evident from __next_f script chunks and RSC patterns
- Styling:        Tailwind CSS v3.4+ — tailwindLikely:true, utility classes throughout, arbitrary values for custom tokens
- Fonts:          Self-hosted WOFF2 (Syne + Plus Jakarta Sans) via @font-face with fallback metrics; Google Fonts CDN as backup
- Animation:      Tailwind-built-in transitions + CSS @keyframes for named animations (fade-in-up, shimmer, etc.)
- Icons:          Lucide React (lucide-react package)
- Component lib:  Custom components (no shadcn/ui detection — though class naming suggests possible Radix-inspired patterns)
- State:          React Server Components + client interactivity for tabs/theme toggle

Responsive Behavior

Breakpoints

| Name | Width | Key Changes | |---|---|---| | Mobile | < 640px | Single-column layout, hamburger menu, stacked hero (text above illustration), collapsed form (input full-width, button below) | | Tablet (sm) | ≥ 640px | Two-column hero begins, sidebar moves beside news feed | | Desktop (md/lg) | ≥ 768px / 1024px | Full nav visible (no hamburger), 12-column grid active, sidebar fixed/sticky possible | | Wide (xl) | ≥ 1280px | Max container width reached (1440px), padding increases to 32px horizontal |

Touch Targets

  • {component.button-primary}: 36px height × ~80+px width — meets WCAG AA (44px minimum) on height, adequate on width.
  • {component.button-primary-large}: ~44px height (inferred from input adjacency) × ~150px width — comfortably exceeds 44×44 minimum.
  • {component.email-input}: 44px height — exactly meets WCAG AAA touch target minimum.
  • {component.nav-link}: ~40px height (8px padding × 2 + ~24px content) — slightly under 44px; may need padding increase to py-2.5 (10px) for mobile touch compliance.
  • {component.nav-icon-button}: 36×36px — under 44px minimum; should enlarge to 44×44px on touch devices or accept as desktop-only control.

Collapsing Strategy

  • Navigation: Collapses to hamburger menu (< lg breakpoint) with a max-h-[calc(100vh-57px)] overflow-y-auto drawer that slides in or drops down. The hidden class (lg:hidden) confirms this behavior.
  • Hero columns: Stacks vertically on mobile — headline/subheadline/form/social-proof occupy full width above the neural network illustration (which may hide, shrink, or move below fold).
  • Email form: Transforms from inline (input + button side-by-side) to stacked (input full-width, button full-width below) on narrow viewports.
  • Company logo grid: Wraps naturally from multi-column to 2–3 column grid on mobile, potentially with horizontal scroll if overflow is constrained.
  • News feed + sidebar: Sidebar drops below news feed on < lg breakpoints, becoming a full-width section. News feed expands to single column or remains 2-column depending on screen real estate.
  • Header padding: Compresses from px-8 (32px) on desktop to px-4 (16px) on mobile (sm:px-6 at sm breakpoint).

Image Behavior

  • Hero neural network illustration: Likely scales down significantly on mobile (50–60% of desktop size) or moves below the fold to prioritize the headline and email capture in the critical upper viewport. May become partially hidden on very small screens.
  • News card thumbnails: Maintain square/consistent aspect ratio but reduce in absolute pixel dimensions (e.g., 120px → 80px wide on mobile). Rounded corners ({rounded.md}) preserved at all sizes.
  • Company logo icons: Reduce in size but remain visible; grid collapses to fewer columns. Icons may drop to 16px from 20px.

Iteration Guide

  1. Initialize with Next.js + Tailwind CSS. Set up the project with App Router, configure tailwind.config.js to accept the custom color/spacing/radius tokens from this spec's YAML frontmatter as design tokens. Use CSS variables for any values that might theme-toggle later.

  2. Map every frontmatter token to Tailwind config. Add colors.* to theme.colors.extend, typography.* to theme.fontSize/theme.fontWeight/theme.letterSpacing/theme.lineHeight, rounded.* to theme.borderRadius.extend, spacing.* to theme.spacing.extend. Reference them in JSX/TSX as bg-primary, text-ink, rounded-md, p-lg, etc.

  3. Build the header first. Implement {component.top-nav} as a sticky position: sticky; top: 0; z-index: 50 element with bg-background/95 backdrop-blur-md. Include the logo (left), nav links with chevron icons (center), and Subscribe CTA + theme toggle (right). Ensure the hairline bottom-border renders at {colors.hairline}.

  4. Implement the hero band next. Create the two-column layout (flex or grid) with {spacing.section} vertical padding. Left column: {typography.display-lg} headline (use a <span> with text-primary class for "ONE"), {typography.body-base} subheadline, inline form (email input + primary-large button), social-proof label, company logo grid. Right column: neural network placeholder (use a gradient or SVG placeholder matching the node-graph aesthetic).

  5. Build components in dependency order. Start with primitives (button-primary, email-input, nav-link), then compose into molecules (news-card, tool-list-item, company-logo-badge), then organisms (sidebar-card, hero-band, top-nav). Every component in the frontmatter must have a corresponding React component or HTML template.

  6. Add state variants as separate component entries or variant classes. For each component with -hover, -active, -focus, -disabled suffixes in the frontmatter, implement those as hover:, active:, focus:, disabled: Tailwind variants or as CSS :hover/:active/:focus/:disabled pseudo-classes. Never nest variants inside the base component definition.

  7. Implement the content sections (AI News + Sidebar). Use a 12-column grid (or lg:grid-cols-3 with col-span-2 / col-span-1) to lay out the news feed (left/center) and tools sidebar (right). Populate with realistic content matching the screenshot's information density.

  8. Add motion last. Apply the transition tokens from the Motion & Animation section. Implement fade-in-up for scroll-triggered card reveals (use Intersection Observer or a library like framer-motion's whileInView). Add the tab-switching animation for the sidebar's "Community Picks / Matt's Picks" toggle.

  9. Test at every breakpoint. Verify the mobile experience specifically: hamburger menu functionality, stacked hero, touch-target sizes (ensure ≥44px), and readable font sizes (11px labels may need to scale up slightly on mobile or remain as-is given the dark-mode contrast advantage).

  10. Run accessibility audits. Check contrast ratios: {colors.ink} on {colors.canvas} (should pass AAA for large text), {colors.on-primary} on {colors.primary} (must pass AA for normal text), {colors.muted} on {colors.canvas} (should pass AA for normal text). Verify focus indicators render the {extensions.shadows.glow-purple} treatment on all interactive elements.

Font Setup:

For development/self-hosted environments matching the production setup:

@font-face {
  font-family: 'Syne';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/fonts/syne-variable.woff2') format('woff2');
}

@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: '/fonts/plus-jakarta-sans-variable.woff2') format('woff2');
}

:root {
  --font-display: 'Syne', ui-sans-serif, system-ui, sans-serif;
  --font-body: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;
}

If using Google Fonts (simpler for prototyping):

<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=Plus+Jakarta+Sans:wght@200;400;500;600;700;800&family=Syne:wght@400;600;700;800&display=swap" rel="stylesheet">

Known Gaps

  • Hover state styling: Per the no-hover policy, all -hover variants in the frontmatter are inferred from adjacent CSS classes (hover:bg-accent hover:text-foreground) rather than directly observed. Implementers should verify hover colors against the brand's interaction model.
  • Loading/skeleton states: While a shimmer keyframe was detected, the exact skeleton component structure (placeholder rectangles with gradient sweep) was not visible in the static screenshot.
  • Dropdown menu contents: The navigation items "Tools ▾", "Editorial ▾", and "More ▾" clearly indicate dropdown sub-menus, but their contents, dimensions, and behaviors are not extractable from the landing page screenshot.
  • Footer: The page footer (copyright, links, legal) was not visible in the provided screenshot and is absent from the component inventory.
  • Dark/light theme toggle behavior: The sun icon in the header implies a theme toggle, but the light-mode color palette (inverse of all extracted tokens) was not available for documentation.
  • Authenticated/user-specific surfaces: Dashboard views, saved tools, user preferences, or personalized content areas were not visible in the public landing page.
  • Exact neural network illustration specs: The hero graphic's animation parameters (particle count, connection logic, color stops, animation speed) are runtime-rendered and not extractable from static CSS. A placeholder or simplified SVG recreation will be needed for reimplementation.
  • Newsletter success/error states: The email capture form's validation feedback, success confirmation, and error messaging visuals are not documented here.
  • Search functionality: An AI-tools directory likely includes search/filter UI, but no search bar or filter controls were visible in the above-fold screenshot.
  • Mobile navigation drawer details: While the CSS references a max-h-[calc(100vh-57px)] overflow-y-auto hidden drawer, its internal structure (link list, close button, backdrop overlay) is inferred rather than observed.