FORESIO DS.
Foundation
Components
Patterns
Rules
Frontend Handoff Document

Foresio Design System

This document is the single source of truth for Foresio's visual language. Every choice here has a reason. Before you override anything, read the reasoning. If the reasoning is wrong, update it here before you update the code.

The visual thesis

The kitchen ticket is the most universally recognized object in restaurant operations. It is monospace, high-contrast, terse, timestamped, and action-oriented. Foresio's design language doesn't look like a kitchen ticket as a gimmick — it behaves like one. Surfaces that demand action, not contemplation. Every design decision flows from this thesis.

Section 01
Color System
Rule

Five colors. Adding a sixth is wrong. Every color has one job. When a color does more than one job, it stops communicating. When you feel the urge to add a color, ask whether you're solving a problem or avoiding a layout decision.

Ink Black
#0A0A0A

Primary text. Primary surfaces on dark sections. Not pure black — pure black feels digital; this is printed ink.

Ticket White
#F4F1EA

Primary background. The off-white of thermal paper. This single choice differentiates Foresio from every cold-white SaaS product.

Signal Red
#D72638

CTAs only. Alert states. Left-border accents on active cards. Used scarcely — when users see red, something matters.

Margin Green
#1F4D2B

ROI numbers. Success states. Savings figures. Positive indicators. Deep forest, not SaaS "growth green."

Receipt Tan
#E8DFC9

Secondary surfaces. Section backgrounds. Card interiors. The "paper layer" that sits between Ticket White and Ink.

Opacity Variants

Use CSS opacity variants for supporting text and borders. Never create new hex colors for muted states.

/* All opacity variants of Ink Black — use these, never new hex values */ --ink-60: rgba(10, 10, 10, 0.60); /* Secondary text */ --ink-40: rgba(10, 10, 10, 0.40); /* Caption / label text */ --ink-20: rgba(10, 10, 10, 0.20); /* Borders */ --ink-08: rgba(10, 10, 10, 0.08); /* Subtle borders / dividers */ --ink-04: rgba(10, 10, 10, 0.04); /* Zebra row fills */
Section 02
Typography
Reasoning

Three fonts, three jobs. Never mix their jobs. Fraunces for display and headings (editorial, editorial restaurant writing character). Inter for body and UI text (readability on mobile, operator phones). JetBrains Mono for every number, timestamp, price, percentage, and data label on the site — this is the kitchen-ticket move that makes Foresio feel categorically different from every other SaaS product.

Display
Fraunces 700
clamp(52–88px)
line-height 1.02
letter-spacing -0.025em
Your restaurant
runs itself.
H1
Fraunces 700
clamp(36–56px)
line-height 1.08
letter-spacing -0.02em
Three tiers. No per-seat fees.
H2
Fraunces 600
clamp(26–40px)
line-height 1.12
letter-spacing -0.015em
One event triggers four agents at once.
H3
Fraunces 600
22px fixed
line-height 1.2
Food Cost Alert — watches your margin
Body Large
Inter 400
18px
line-height 1.7
20 AI agents watching your costs, scheduling your staff, responding to reviews, and bringing back your regulars — without you logging in.
Body
Inter 400
16px
line-height 1.65
Foresio is 20 AI agents working on your business in the background. They watch the same data your POS already collects, and they take action — flagging margin loss, drafting review replies, building next week's schedule.
Data Number
JetBrains Mono 500
44px
Used for ALL stats
35% $1,247 70%
Label / Tag
JetBrains Mono 500
9–10px
letter-spacing 0.18em
UPPERCASE
Phase 1 · Live MOST POPULAR 07:30 AM
Section 03
Spacing Scale

An 8-point base grid. All spacing is a multiple of 8. Never use arbitrary pixel values — if the design requires it, the spacing scale is wrong.

--sp-1
4px — micro gap
--sp-2
8px — tight gap
--sp-3
16px — inline gap
--sp-4
24px — base unit
--sp-5
32px — component gap
--sp-6
48px — section sub-gap
--sp-7
64px — section gap
--sp-8
96px — major section padding
--sp-9
128px — hero / feature section
Section 05
Buttons
Rule

Buttons use JetBrains Mono, uppercase, letter-spacing 0.12em. Zero border-radius — always. Border-radius on buttons is the single most common tell of generic SaaS design. Square corners are deliberate. They communicate precision and utility. The text content should include an arrow when the button navigates (→), not when it submits.

Primary — Signal Red fill. The one CTA that matters per page.
Start 30-Day Pilot → Start Free Pilot — $0 → Start →
Secondary — Transparent with ink border. Supporting actions.
See All Agents → Full Pricing Breakdown → Learn More
Ink fill — used on tan or paper backgrounds, never on dark.
Start Free Pilot → View Features →
Ghost — text-only with bottom border. Inline links that need button treatment.
See Full Comparison Connect on LinkedIn ↗
Full-width — always on mobile CTAs, used in forms.
Start 30-Day Pilot — $0 →
Section 06
Form Elements
Rule

Form labels use JetBrains Mono, 9–10px, uppercase, letter-spacing 0.16em. Labels are not placeholders. The label lives above the field, always visible. Placeholders show example content only — "First name" not "Enter your first name." No border-radius on any form element. Forms should feel like filling out a ticket, not a consumer app.

Input — default, focus, and filled states
Select — custom chevron, no browser default appearance
Textarea
Section 07
Ticket Component
Structural motif

The ticket is Foresio's most distinctive visual element. All cards derive from it. Key properties: white background on paper/tan surfaces (creates lift without shadow), 1px border in var(--tan) or var(--ink-20), and a 3–4px left-border accent that communicates state. Never use box-shadow. The left-border is the signal, not a drop shadow.

Ticket states — default / active (red) / success (green) / ink
TICKET #0001Default

Salmon margin
alert pending

Waiting
TICKET #0002Active

Salmon margin
22% — below floor

Action required
TICKET #0003Done

Reorder halted.
Promo approved.

Complete
TICKET #0004Priority

Pilot registration
confirmed

Confirmed
/* Ticket base structure */ <div class="ticket ticket--red"> <div class="ticket-head"> <span>TICKET #0001</span> <span>07:14 AM</span> </div> <div class="ticket-body"> <!-- content --> </div> <div class="ticket-foot">Approve</div> </div>
Section 08
Section Labels & Timestamps
The structural motif

Every section on the site uses a .section-label above the headline. This label uses JetBrains Mono, 10px, uppercase, with a 18px Signal Red rule to its left. It functions like a section heading on a kitchen ticket — contextualizes what you're about to read. The timestamp pattern (07:30 ↦, 10:14 ↦) pulls directly from the "A Day on Foresio" walkthrough in the pitch deck. Used consistently, it teaches the visitor how Foresio thinks about time — as a shift, not an interface.

Section label — always before the main headline

One event triggers four agents at once.

Your restaurant runs itself.

Section label on dark background

On a $1.5M restaurant,
Foresio adds $30K–$80K a year.

Section 09
Number Treatment
The mono rule — non-negotiable

Every number that represents data wears JetBrains Mono. No exceptions. Prices, percentages, counts, ROI figures, timestamps, step indicators, ticket numbers, agent counts. If you can measure it, it uses the mono font. This is the single rule that makes Foresio's design feel operationally serious. Violating it makes the site feel like a consumer app. Operator-grade tools use tabular figures because operators read numbers fast.

Stat block — the four numbers treatment from homepage
35% Food cost

Above pre-pandemic levels.

6.3% Labor increase

QSR alone in 2024.

30% Delivery cut

Gone to DoorDash/Uber.

70% Turnover

Annual full-service staff.

Section 11
Dos & Don'ts
Element DO DON'T
Colors Use exactly these five colors + their ink opacity variants Add a sixth color for any reason, including "just a tint"
Gradients Flat, solid fills only — always Use any CSS gradient anywhere on any element, ever
Border radius 0px on all buttons, cards, inputs, and containers Add border-radius to make something "feel friendlier"
Box shadows Use border changes and left-border accents for card elevation Use box-shadow for any hover or card state
Numbers JetBrains Mono for every data number, price, %, timestamp Display numbers in Inter or Fraunces — ever
Icons Minimal geometric icons (arrows →, checkmarks ✓) in mono AI sparkle icons, neural-network patterns, robot illustrations
Photography Documentary restaurant interior shots, tight and sparse Stock photos of smiling chefs, food styled for Instagram
CTA copy "Start 30-Day Pilot — $0 →" (specific, honest, actionable) "Get Started" / "Sign Up Free" / "Learn More" (vague)
Section flow section-label → headline → subhead → content → CTA Start a section with a large decorative image or animation
Testimonials Founder section with real quote until pilot operators provide them Fabricate operator testimonials or use anonymized fake quotes
Animation Opacity + translateY(6px) on entry; 200ms ease on hovers Auto-playing animations, parallax scrolling, particle systems
Section 12
Dividers
Standard divider — 1px ink-08

Use between major subsections within the same section. Never decorative.

Perforation divider — used between major page sections

The kitchen ticket perforated edge. Used as a major section break. Never within a section.

Section 13
Motion
Motion philosophy

Foresio's motion is purposeful and terse — like the platform itself. No decorative animations. Motion communicates state change (agent firing, form step progression, cascade sequence). The transition speeds are fast: 120ms for hover states, 200ms for state changes, 350ms for the cascade agent sequence. Anything slower feels indulgent.

/* Transition tokens — always use these, never custom durations */ --t-fast: 0.12s ease; /* Hover states — buttons, links, borders */ --t-base: 0.20s ease; /* State changes — card active/done, form focus */ /* Entry animation — for elements that appear on scroll/step */ @keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } } /* Cascade agent sequence — staggered at 950ms per agent */ /* Firing state: 700ms, then transitions to Done state */
Section 14
Mobile
Mobile is not a breakpoint — it's the product's primary interface

Foresio's entire product promise is built around SMS — operators check their phone at 7:30am, approve actions with one tap. The website must be as native on mobile as the product is. Design mobile-first, then scale up. Every page must be tested at 390px (iPhone 14 Pro) before it ships.

Breakpoint Width Key changes
Desktop 1200px max-w Full navigation, two-column layouts, cascade demo full width
Tablet ≤ 900px Nav links hidden (hamburger TBD), grid-2 → 1col, cascade stacks
Mobile ≤ 600px grid-4 → 1col, stat grid → 1col, font sizes clamp to minimum
Section 15
File Index

All files in this handoff package. Open each in a browser to see the layout in full.

foresio.css
Shared design system — all tokens, components, and utilities
Foundation
Homepage — hero form, cascade demo, ROI calculator, founder section
Primary
All 20 agents — grouped by function, Phase 1 + 2, comparison table
Primary
3 tiers, interactive ROI calculator, comparison table, FAQ
Primary
5-step onboarding form — "X of 15 minutes" progress, all states designed
Primary
Contact page — reason selector, ticket form, direct lines, FAQ
Supporting
Events calendar — real May 2026 grid, 5 upcoming events, recurring schedule
Supporting
8 free operator templates — recipe costing, inventory, scheduling, menu engineering
Supporting
styleguide.html (this file)
Design system documentation — colors, type, spacing, components, rules
You are here