Style Guide

This page is a living reference for design tokens and component primitives used in the Harri theme. It is noindexed and intended for developer / designer use only. Panels are grouped in the sidebar: Foundations, Primitives, Content blocks, Layout & composition, Section blocks, and Heroes.

Foundations

Design Tokens

Colors

--color-bg-page
--color-bg-surface
--color-text
--color-text-muted
--color-border
--color-link
--color-bg-cta
--color-text-on-cta
--color-accent-a
--color-accent-b
--color-eyebrow

Type Scale

The quick brown fox --font-size-xs
The quick brown fox --font-size-sm
The quick brown fox --font-size-base
The quick brown fox --font-size-md
The quick brown fox --font-size-lg
The quick brown fox --font-size-xl
The quick brown fox --font-size-2xl
The quick brown fox --font-size-3xl
The quick brown fox --font-size-4xl

Font Weights

The quick brown fox --font-weight-regular
The quick brown fox --font-weight-medium
The quick brown fox --font-weight-semibold
The quick brown fox --font-weight-bold
The quick brown fox --font-weight-black

Spacing Scale

--space-1
--space-2
--space-3
--space-4
--space-5
--space-6
--space-8
--space-10
--space-12
--space-16
--space-20
--space-24

Radii

--radius-sm
--radius-md
--radius-lg
--radius-xl
--radius-pill
--radius-round

Shadows

--shadow-sm
--shadow-md
--shadow-lg
--shadow-glow-cta-soft
--shadow-glow-cta
--shadow-glow-cta-peak

Buttons

Rendered as non-navigating <button> elements for demo purposes. Visual variants × size variants matrix.

.btn--sm .btn--md .btn--lg .btn--xl
.btn--coral
.btn--gradient
.btn--teal
.btn--ghost
.btn--solid-dark
.btn--text

Full-width modifier

Icon slot (.btn__icon)

The .btn__icon wrapper scales to 1em (the button's font-size). The base .btn gap provides icon-to-label spacing automatically.

Pulse modifier (.btn--pulse)

A pure motion modifier — a subtle breathing scale, no fill or glow change. Composes onto any variant. Add it deliberately (currently only the header CTA = .btn--gradient .btn--pulse). Suppressed by prefers-reduced-motion.

Eyebrow

Eyebrow label — .eyebrow

Eyebrow muted — .eyebrow.eyebrow--muted

Headings

Demo samples are rendered on non-heading elements (<p>, <div>) so they do not create stray heading-level nodes in the document outline.

Display heading — .h-display

Section heading — .h-section

With eyebrow pairing

Eyebrow above display

Display with eyebrow

Eyebrow above section

Section with eyebrow

Containers

Visible outlines are added by the .sg-container-demo class in styleguide.css — they are not part of the component.

.container — max-width: var(--container) = 1120px
.container.container--wide — max-width: var(--container-max) = 1240px
.container.container--narrow — max-width: var(--measure) = 40rem

Sections

Each variant is shown as a labelled block so padding and background differences are visible. The .sg-section-demo class adds an identifying outline.

.section — base vertical padding (--space-24)

.section.section--first — reduced padding-block-start (--space-12)

.section.section--tight — tight padding-block (--space-12)

Media

Placeholder image is a self-contained SVG data-URI (no external request). In production the src is supplied by ACF and rendered via wp_get_attachment_image().

Placeholder image

Primitives

Badge

Atomic status/label pill rendered through the real badge.css component. Renders in natural case (unlike the uppercase inline .badge emphasis chips). Tones, an optional leading dot, an optional inline icon, the framed-icon "app chip" variant, alignment and vertical spacing are all shown.

Tones (neutral / success / coral / purple)

Neutral
Available
Most Popular
Requires Engage 360 bundle

Framed-icon chip (badge--chip)

Live
This Week
Team Live

Alignment (left default / center / right) + margin

Centered
Right aligned

Glyph

Atomic decorative visual marker rendered through the real glyph.css component. Two modes: an icon inside a gradient rounded tile with glow, or a single large gradient TEXT letter. Both share a per-accent gradient (teal / coral / blue / purple). The whole marker is aria-hidden (decorative).

Icon mode (teal / coral / blue / purple)

Letter mode (gradient text, no tile)

Checklist

Standalone teal-checkmark list block rendered through the real check-list.css component (the same shared primitive text_content uses). Two layouts: the default vertical stack and the compact horizontal inline variant.

Vertical (default)

  • AI-optimised scheduling against demand
  • Built-in labour-compliance guardrails
  • One-click shift publishing to the team
  • Real-time coverage and cost visibility

Horizontal (inline)

  • No setup fees
  • Cancel anytime
  • US & UK support
  • Free onboarding

Chat

Atomic static conversation transcript rendered through the real chat.css component — a dark rounded panel of alternating bubbles: Salli on the left (in) and the user on the right (out, teal gradient). JS-free; distinct from the interactive salli_chat widget.

In / out bubbles

Hi! I noticed Saturday dinner is short two servers. Want me to fill it?

Yes please — keep it within budget.

Done. I offered the shifts to two available servers and stayed 3% under your labour target.

Perfect, thanks Salli.

Divider

Standalone separator block — a subtle centered teal-gradient hairline dropped between blocks (add where needed / remove to hide). Two widths.

Contained

Full width

Stats

Stats block rendered through the real stats.css component. Two style variants shown. Headline uses <p> (NOT <h2>) to preserve the page's single-h1 outline. Count-up animation runs in the guide (intentional). Gradient on .stat__num comes entirely from the reused .text-accent-gradient utility.

L1. Plain (centered)

By the numbers

Trusted by hospitality teams worldwide

70,000+ locations worldwide
1,000,000+ workers managed
98% customer satisfaction
6 of 10 largest hospitality brands

L2. Cards (bordered)

Platform performance

Numbers that speak for themselves

40% reduction in time-to-hire
30% lower scheduling admin time
2M+ shifts scheduled annually
15+ yrs hospitality expertise

L3. Rail (accent bar)

70,000+ Locations run on Harri
800 Clients worldwide
35M Worker profiles

Content blocks

Text Content

Text Content block (eyebrow + headline + rich body + CTA buttons, no media) rendered through the real text-content.css component. Headline uses <p> (NOT <h2>) to preserve the page's single-h1 outline — .h-section provides the visual treatment.

Scheduling

Build smarter schedules, faster

Harri's AI-powered scheduling engine takes the guesswork out of labour management — optimising shifts against demand forecasts, compliance rules, and team availability in minutes, not hours.

Flip Card

Flip Card block (a single CSS-3D card contrasting "the old way" front face with "the Harri way" back face) rendered through the real flip-card.css component. Hover or tap flips the card; both faces are always in the DOM for screen readers.

Front face (default state, hover to flip)

Manual scheduling

The old way Managers spend hours every week juggling spreadsheets, availability, and last-minute call-outs.

See the Harri way
The Harri way

Salli builds a compliant, demand-matched schedule in seconds — managers just review and publish.

5× faster scheduling

Back face (.flipped, purple accent)

Slow hiring

The old way Great applicants go cold while roles sit in an inbox waiting for a callback.

See the Harri way
The Harri way

Salli screens, ranks, and calls applicants automatically — the best candidates are booked before lunch.

72% faster time-to-hire

Compare Table

Compare Table block (a generic comparison of columns across grouped feature rows) rendered through the real compare-table.css component. Column accents cycle by position; the "popular" column is highlighted by a non-empty badge; the table scrolls horizontally rather than stacking on narrow screens.

Compare Workforce Management plans
Compare plans Everything scales with your operation Base

Everything to get started

Free per location

Choose Base
Most Popular Core

For growing teams

£29 per location / mo

Choose Core
Perform

Advanced automation

£59 per location / mo

Choose Perform
Enterprise

Custom scale

Custom per location

Contact sales
Hiring
Job board posting 50+ boards Included Included Included
AI screening calls Salli calls and screens applicants automatically, then ranks the best fits. Not included Included Not included
Scheduling
Auto-scheduling Not included Included Included
Compliance guardrails Not included Included Included

Image Card

Image Card block (one atomic photo card with a coloured gradient frame, optional overlay bar, title, subtitle, and tag) rendered through the real image-card.css component. The container block grids multiple cards on real pages; here they stack.

Framed (teal, default) — overlay + subtitle + tag

Case study

The Ivy Collection

Cut scheduling time by 80% across 38 sites

Fine dining

Linked whole-card (coral frame)

Read the guide

Whole card is one keyboard / pointer target

Frame colours (blue / purple)

Blue frame

Purple frame

Frameless (--none) — flush overlay, no glow

Webinar

Clean rounded image

Form

Form block (atomic lead capture) rendered through the real form-block.css and hubspot-form.css components. The native field sets render the HubSpot form partial live; submission is inert until HubSpot Settings are configured in wp-admin. The HubSpot-by-reference mode renders only its integration hook.

Short lead (form_fields = homepage)

Book your demo · takes 30 seconds

6 of the 10 largest hospitality brands run on Harri

Demo (form_fields = demo, with careers deflection)

Request a personalised demo

Looking for work? Visit Careers →

HubSpot form by reference (form_fields = hubspot) — inert hook

Editors supply a HubSpot form GUID; the block stores it and renders only the hook element below. The HubSpot renderer attaches on integration — nothing is fetched or rendered until then.

HubSpot form 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d — renders once HubSpot is connected.

Layout & composition

Container

Layout primitive that arranges a curated set of child blocks into a grid; renders through the real container.css component, with hand-placed Text Content child tiles showing three of its column layouts.

CT1. 3 columns (cols-3)

Hire

Source faster

Post, screen, and schedule interviews from one connected pipeline.

Manage

Schedule smarter

Build compliant rotas against demand in minutes, not hours.

Comply

Stay protected

Flag and resolve labour-rule violations before they publish.

CT2. Featured (1 wide + 2-up)

CT3. Spotlight (hero + uneven 2-up)

Add-ons

Extend your bundle

Hero tile spans the full row above the uneven pair below.

Wider column (1.55fr)

Salli for Hiring

The wider spotlight column carries the primary add-on.

Narrower column (1fr)

LMS

The narrower column carries the secondary add-on.

Panel

Two-column composition wrapper; renders through the real panel.css component, showing the split and single grid modes plus the glass, subtle-surface, and accent variants. Text Content children are hand-placed in place of harri_render_panel_blocks().

PN1. Two-column split (glass)

Workforce Management

Everything in one place

Scheduling, time, and compliance under a single roof.

Built for hospitality

Made for the pace

Right column of the 50/50 split composition.

PN2. Single column (glass)

Single column

One full-width bubble

When only one side has content the grid collapses to a single full-width column inside the same glass surface.

PN3. Subtle surface (split)

Subtle

Quiet neutral surface

Hairline border, light frost, no gradient or glow.

Platform pillars

Reads as one system

The same split layout on the calmer surface variant.

PN4. Accent variant (purple, split)

Engage 360

Purple accent tint

The accent recolours the border, background, and eyebrow.

Campaigns

One unlocked bundle

Right column of the accented split composition.

Tabs

WAI-ARIA tab set built by the reusable tabs partial; renders through the real tabs.css component and is live (JS-wired) in the guide, showing the folder, underline, and pills style variants.

TB1. Folder

Talent Acquisition

Hire the right people, faster

Sourcing, screening, and onboarding in one connected pipeline.

TB2. Underline

Talent Acquisition

Hire the right people, faster

Sourcing, screening, and onboarding in one connected pipeline.

TB3. Pills

Talent Acquisition

Hire the right people, faster

Sourcing, screening, and onboarding in one connected pipeline.

Section blocks

Logo Bar

Social-proof marquee block rendered through the real logo-bar.css component. Text-name fallback logos — no images required. The marquee animates in the guide (intentional). Duplicate set is aria-hidden per item; reduced-motion collapses to a static centred row.

Today's leading hospitality businesses run on Harri

Hilton
Marriott
Compass Group
Sodexo
Delaware North
Levy Restaurants
Aramark
Four Seasons

Feature Stack

Feature Stack block rendered through the real feature-stack.css component. Three placeholder cards shown (text-only, dashed-placeholder visuals). The sticky pin/stack needs real scroll length to demonstrate; within this panel the cards render as a stacked list. The rotating accent backgrounds (teal, blue, purple) cycle through the first three nth-child positions.

Platform Features

Everything your team needs, in one place

Harri brings scheduling, hiring, and compliance together in a single platform built for the pace of hospitality.

Feature 01

Intelligent Scheduling

Build optimised schedules against demand forecasts, compliance rules, and team availability — in minutes, not hours.

Scheduling
Visual / product shot

Feature 02

Streamlined Hiring

Post to 100+ job boards, screen applicants automatically, and onboard digitally — without leaving Harri.

Hiring
Visual / product shot

Feature 03

Built-in Compliance

Stay ahead of labour law changes with automated compliance checks, audit trails, and real-time alerts.

Compliance
Visual / product shot

Testimonial

Single centered customer quote block rendered through the real testimonial.css component. Initials-avatar fallback shown (author "Claire Andrew" → "CA"). The <em> accent in the quote exercises .text-accent-gradient on blockquote content. Quote-mark gradient comes from the reused .text-accent-gradient utility — not redefined in testimonial.css.

What our customers say

Real results for real teams

Harri has completely transformed how we manage our front-of-house team. Scheduling used to take hours — now it takes minutes.
Claire Andrew GM · McDonald's US

Case Studies

Case Studies carousel block rendered through the real case-studies.css component. Three hardcoded sample cards shown — illustrative only (no live query; real block pulls hand-picked case_study posts via the ACF items field). Rotating gradient backgrounds cycle through the first three nth-child positions. The prev/next controls are functional (case-studies.js wires them to the scroll track). Section headline uses <p> (NOT <h2>) to preserve the page's single-h1 outline.

Customer Stories

See how hospitality teams thrive with Harri

Agent Explorer

Agent Explorer block (Salli "How she does it") rendered through the real agent-explorer.css component. Header, 3 value-prop columns, and the accessible tabbed explorer -- 5 canned mini "screens" (Sales / Labor / Team / Warnings / Ask) switched by a staggered chip pile. Tab interaction is live -- click a chip or use arrow keys (all 4 directions -- the chip pile is staggered/vertical).

How she does it

More than a chatbot. A teammate.

Insights from live data

Sales snapshots, labor metrics, and schedule health -- surfaced instantly, without leaving Harri.

Actions, not just answers

Salli doesn't just report -- it messages team members, triggers schedule fixes, and runs tasks for you.

Context that follows you

Salli remembers your preferences, adapts to the page you're on, and picks up where you left off.

Sales Snapshot
Today · all locations
Net sales today $48,210
vs. forecast +12%
Labor Snapshot
Live · this shift
26%
Labor %
14
On the clock
0
Overtime risk
Scheduled vs. actual On target
Approaching OT 2 flagged
Team Moments
Latest updates

Maya R. · 4m ago

Picked up the Friday closing shift 🎉

Devin J. · 22m ago

Confirmed availability for next week.

Salli · just now

Sent the updated schedule to all 14 staff.

Schedule Warnings
Saturday draft
Fair Workweek risk

One shift posted inside the 14-day notice window.

Salli's fix

Shift Maya's hours to Devin — 0 violations.

Ask Salli + Guided Learning
Context-aware · Schedule page

You're on the Schedule page. Try one of these:

Balance this week's labor cost Who can cover Saturday night? Show me overtime risk

Every agent working together

Whether you're reviewing sales data and want to message your top performer, or checking schedule warnings and need to update time records -- Salli coordinates its specialized agents internally and returns one clean response.

ROI Calculator

A standalone interactive operator tool (Operator Toolkit): six range inputs drive a live "estimated annual savings" figure with a breakdown and a today-vs-Harri comparison bar. The server renders the initial result so it is meaningful without JS; roi-calculator.js recomputes on input (count-up animation, reduced-motion safe). This catalog entry is the real block markup, so it is fully interactive here. NOTE: the "Average hourly wage" input is displayed for context but does not feed the formula (matching the prototype).

Your numbers

75
$16
100%
$1,200
6
$28

Estimated annual savings with Harri

$20,489

recovered every year across turnover and admin

Turnover you carry today$90,000
Turnover savings (15% fewer exits)$13,500
Manager time reclaimed (80%)$6,989
Hours handed back / year250

Annual people cost: today vs. with Harri

Today
$98,736
With Harri
$78,247
Show my CFO the full breakdown

Compliance Checker

A standalone interactive operator tool (Operator Toolkit): a searchable state combobox drives a panel of labor-rule cards (predictive scheduling, minimum wage, overtime, meal/rest breaks, other) + a "scheduling complexity" meter, built from inc/compliance-data.php. This catalog entry uses a small three-state subset so it is fully interactive here. LEGAL GATE: the block renders a visible amber banner while data_status is "sample" — the dataset is unvetted prototype data and must not go on a public page until Legal signs off.

Sample data — internal preview. Directional prototype data pending legal review; not legal advice.

Choose a state above to see its requirements.

Heroes

Hero

Three Hero block variants: with-media CTA buttons, centered simple CTA buttons, and the email-capture form mode.

H1. With media

Watch how Harri works

Workforce Management

The smarter way to manage hospitality

Harri unifies scheduling, hiring, and compliance in a single platform built for hospitality teams.

H2. Centered simple

Now available in the UK

Hospitality HR, simplified

From hiring to payroll, Harri keeps your team connected and compliant — wherever they work.

H3. Email capture form (inline hero variant)

Rendered when the editor selects "Email capture form" in the Action mode toggle. The JS scroll-and-prefill behaviour is inactive here (no .hs-form target on this page) — the form renders correctly as static HTML.

Workforce Management

The smarter way to manage hospitality

Harri unifies scheduling, hiring, and compliance in a single platform built for hospitality teams.

Hero Cinematic

Hero Cinematic block rendered through the real hero-cinematic.css component, shown in its static final-framed state (no scroll track here -- see the note above). On the live page it scales down toward scale_to and the frame fades in as the visitor scrolls through an extra viewport of scroll track; the video never stops. No video/frame image uploaded yet -- placeholder background + placeholder frame chrome shown.

AGENTIC AI One-Click Schedule

One click. Your whole week, scheduled.

Salli reads demand, availability, and compliance, then builds the optimal schedule in one click. You just approve.

Become a Harri partner

Build with Harri and reach thousands of hospitality operators worldwide. Tell us about your business and our partnerships team will be in touch.