Design System · Visual Identity Layer
VERSION v1.0 · 2026-06
[00] The TTD visual identity layer

The Travel Tech Digital Design System.

One source of truth for every output: slides, social, web pages, media kits, PDF reports. Pre-built atoms, ready to adapt. Built on the verified brand-book: teal anchor, Open Sans, clarity first.

Single source of truthcolors_and_type.css
Open SansOne-font system
#2691A3Brand anchor
Light + DarkDual mode
[★] Cover composition

Cover composition

Text alignment · pick the default

Three alignment presets for a cover. Clean: amber eyebrow + one hook, nothing else on the art. The background texture is a parameter (swap any from the library below). The hook stays the hero, the overlay keeps it legible. Pick the alignment that should be the default.

Align left
For tourism operators
From scattered to structured.
Align center
For tourism operators
Intelligence,
structured.
Align right
For tourism operators
A world that connects.
Background = parameter · swap any texture, same composition

The composition is the atom. The texture is injected at render time, never forked into a new template. One alignment preset renders any segment, language and texture.

[01] Color system

Color · system of accent

Source color-palette.md · verified 2026-05-28

The brand feels spacious and clean first. Color is punctuation, not decoration: roughly 65% white/neutrals, 25% dark gray, 8% teal, 2% CTA. Teal #2691A3 is the single anchor. Functional and segment colors appear only in thumbnails and badges, never in general UI.

Core brand
CTA hierarchy · semantic by action
Functional colors (8) · thumbnails & badges only
Segment colors (8) · segment assets only
Semantic status
[▦] Backgrounds · DS-A2

Gradients & graphics

4 gradients · 4 graphics

Built on the existing color system. Two sets: directional gradients over the core colours, and on-brand graphics (network, mesh, circuit, waves) for covers and dark sections. Pick one, copy it.

4 directional gradients · over the core colours
4 graphics · on-brand, teal accent
[02] Typography

Typography · one font, clear hierarchy

Font Open Sans · single-font system

Travel Tech Digital uses Open Sans for everything: headings, body, navigation, buttons, captions. Hierarchy comes from weight and size, never from a second face. Weights 300 to 800; avoid 100/200/900. A heading differs from body in at least two of: size, weight, color.

Display clamp(2.5rem → 4.5rem) · 800
Tourism, structured by AI.
Weight 800Line-height 1.1Tracking -0.02em
Heading scale
H1 · The original backpackers (36px / 700)
H2 · From scattered to structured (30px / 700)
H3 · Direct booking optimization (24px / 600)
Eyebrow · operator-first · 12px / 600 / teal
Body
Body 16px / 1.7. Tourism doesn't lack tools. It lacks structure. Too much of the industry still runs on fragmented operations, and that creates waste. Not because people don't care, but because the structure behind the work is weak. We give operators leverage, not another disconnected tool.
Weight 400Line-height 1.7Color #666666
Type scale · web & documents
Expressive type & combinations

One font, used expressively. Identity stays single-font (Open Sans); range comes from weight (300 to 800), italic, underline, caps, colour (teal / amber), size jumps and position. This applies to any medium: a post, a slide, a lesson, a cover. Compose from these treatments, do not improvise a second font.

Weight ladder
300 · lightTourism, structured by AI.
400 · regularTourism, structured by AI.
600 · semiboldTourism, structured by AI.
700 · boldTourism, structured by AI.
800 · blackTourism, structured by AI.
Accent treatments · one per hook
Italic accent
Stop guessing. Start operating.
Teal underline
It lacks structure.
Caps word
The one system for tourism.
Amber accent word
Run on one clear system.
Weight contrast · in one hook
Light + black
Tourism,
structured by AI.
Light + black · on dark
From scattered
to structured.
Approved combinations
weight-contrastTourism, structured.
italic + underlineStop guessing. Start operating.
caps + colourThe one system.
question + amberWhat if it ran on one system?
One accent per hook · do / don't

Do · one accent

It lacks structure.

Don't · competing accents

Stop guessing now.

[02b] Lists & quotes

Lists & quotes

Content atoms · teal marker

The content atoms that carry structure inside a post, slide, article or document. Markers and indices are teal, never a second color. Lists stay short and scannable: one idea per item, no buried clauses. The blockquote uses a teal rule; the pull-quote is the media variant for covers and slides.

Bulleted list teal marker
  • Structure beats more tools.
  • Fragmented work creates waste.
  • One idea per item, scannable.
  • Teal marker, never a second color.
Marker teal dot 8pxGap 12px
Numbered list ordered steps
  1. Map the operation as it runs today.
  2. Find the steps that repeat and waste time.
  3. Give those steps to AI, with a clear instruction.
  4. Keep the human as the quality gate.
Index teal, monoGap 14px
Checklist feature / done-when
  • Reads clearly on a phone, without zoom.
  • One dominant message per piece.
  • Teal is the anchor color.
  • No invented data, no hype.
Glyph teal checkGap 12px
Blockquote teal rule

We give operators leverage, not another disconnected tool.

Rule 3px tealNo author
Pull quote · media & cover variant

Tourism, structured by AI.

Display use · cover, slide, hero · auto-fit headline
Callouts · editorial highlight
Core benefit

Simplicity, clarity, ease and speed in every message and product.

Good practice

One dominant message per piece, legible on a phone first.

Watch out

A busy background that fights the message fails the brand gate.

Note · dark

The dark callout for the premium product world and dark backgrounds.

Callout is the editorial highlight used inside an article, post or document. Four tones: teal (neutral note or core benefit), green (good practice), amber (watch out), and dark (the premium product world). It is distinct from the app Alert in section 19, which is a toast with an icon.

Dividers · section breaks
Keyline simple rule

Labelled section marker
More on this
Dot media / cover use
Summary & FAQ · article atoms
Summary TL;DR at the top
In short
  • Tourism does not lack tools, it lacks structure.
  • AI works best on the steps that repeat.
  • The human stays the quality gate.
FAQ question and answer
Do I need to connect my booking system?
No. The products are standalone. You use them without integrating any external system.
Which languages are supported?
English, Portuguese, Spanish, French, German, Italian and Arabic.
Accordion · interactive FAQ (click to open)

The expand/collapse version of the FAQ. Click a question to open its answer. CSS-only (no build) so it works live in HTML pages, presentations and lessons. For static export (PNG/PDF) it renders in its current open/closed state. The static FAQ above is for when every answer must be visible at once.

QDo I need to connect my booking system?
No. The products are standalone. You use them without integrating any external system.
QWhich languages are supported?
English, Portuguese, Spanish, French, German, Italian and Arabic.
QDo I need a technical team to use this?
No. The products are ready to use off the shelf, or done for you. No setup, no code.
Useful links
Copy box · prompt & snippet

For content the reader copies: a prompt, a snippet, a template. The label says what it is, the button copies the full text to the clipboard with one click. Light for docs and articles, dark for the premium product world.

Prompt
Act as a tourism marketing strategist.
Write five social hooks for a boutique hotel.
Tone: clear and grounded, opportunity not fear.
No hype, no FOMO, no em dashes.
Snippet
PRESET=guide INPUT_MD=content/sample.md \
  OUTPUT=guide.html node build-doc.mjs
Actionable prompt · article CTA

The signature blog block: turn the article into action. A teal-framed box with a title, a one-line setup, the ready-to-use prompt, a Copy Prompt button, and a note that it works with any AI assistant. This is the live-site pattern, now a reusable atom.

Make this actionable

This article is designed to be applied, not just read. Copy the prompt below and paste it into ChatGPT, Claude, or any AI assistant to turn these insights into actions for your business.

You are a tourism business strategist.
Ask me three questions about my operation.
Identify the biggest opportunity you can see.
Suggest three actions I can take this month.
Recommend one simple task I can do this week.
Keep it clear, practical and focused on execution.

Works with ChatGPT, Claude, Gemini, or any AI assistant.

Table of contents · article index

A numbered index that jumps to each section. Distinct from the summary: the summary gives the key points, the contents help the reader navigate a long article. Links open the target section.

Editorial atoms · fact, note, caveat, source
Fact

Story safe-zones run 250px top and bottom on a 1080×1920 canvas, confirmed against platform specs.

Note

This is the author's read, not a measured claim: lead with the hook in the first 1.5 seconds or the scroll wins.

Source: platform creator guidelines, 2026 · internal By-media spec

Numbers that circulate without a primary source are kept as narrative, never stated as fact (Zero Invention).

Concept equation · an idea as A + B = C
claritythey get it fast
+
speedit loads and moves
=
trustthey come back
Case study · a concrete worked example

Case A: a hotel that wants more direct bookings

"We pay 18% to the OTAs. We want guests to book with us next time."

  1. Who is the guest? Repeat leisure traveller who already stayed once. They trust the property, not the channel.
  2. Where is the leak? No reason to book direct: same price, no perk, no follow-up after checkout.
  3. What ships? A post-stay sequence with a direct-only perk, plus a one-screen book direct page. Standalone, no PMS integration.
Takeaways · the closing anchors
On focusOne piece teaches one thing. If it teaches two, it is two pieces.
On colourTeal is the accent, not the paint. When in doubt, remove a colour before adding one.
On proofEvery number carries its source, or it stays out of the published work.
Compare · Do / Don't (a reusable contrast atom)

A content-agnostic two-column contrast. Use it for tone, design, process or code: anything that teaches faster as "this, not that". The voice say/don't boxes are one application of this same atom.

Do

Lead with the one idea, then support it.

Show the number with its source next to it.

Let one accent colour carry the focus.

Don't

Open with three ideas and hope one lands.

State a figure with no way to check it.

Paint every element to fight for attention.

[03] Spacing & radii

Spacing & radii

Base unit 4px

Every spacing decision is a multiple of 4px. This keeps vertical rhythm consistent. Reaching for a value off the scale (20px, 45px) is a signal to revisit the layout, not to add a token. Radii are soft (4/8/12): approachable, not brutalist.

Spacing scale
Border radius
[04] Elevation & shadow

Elevation & shadow

3-tier · hairlines first

The system prefers hairline borders and whitespace over heavy shadows. Three elevation levels: a card always gets sm, a floating panel md, a modal lg. In dark mode, shadows give way to elevated borders.

[05] Motion · easing

Motion · intentional, never decorative

3 durations · 4 easings

Animation does one of three things: communicate state change, guide attention, or give feedback. If it does none, it is noise. Three durations only: 150 / 300 / 500ms. Hover for the curve demos. The full motion runtime arrives in Wave 5.

Durations
Easing curves · hover a card
[06] Grid & layout

Grid & layout

12 columns · 1200px max · 24px gutter

Content maxes at 1200px for breathing room on wide screens while keeping reading lines comfortable. Twelve columns, 24px gutter. Common spans: 12 (full), 8+4, 6+6, 4+4+4, 3+9 (sidebar).

12 columns · gutter 24px · max-width 1200px
[07] Buttons & CTAs

Buttons · semantic by action

4 CTA roles · one conversion per page

Pick the button by the type of action, not by look. Default orange is the workhorse (80%+ of buttons). Conversion teal is the high-value commit, exactly one per page. Brand teal is for links and secondary, never transactional. Color never carries meaning alone: every button has descriptive text.

Variants · medium (default size) radius-md · 44px min
Read the guide →
Sizes sm · md · lg
On dark surfaces ghost + conversion
[08] Badges & tags

Badges · category, segment, status

Pills · segment & status systems

Badges communicate segment, function, or state at a glance. Segment badges use the segment color at a tint with full-color text. Status badges show dashboard state. Square badges carry inline metadata.

Segment badges color tint + full-color text
Status & semantic
Active Pending Inactive Verified Failed Info NEW Prompt Pack
[09] Cards

Cards · product, article, feature

Hover lift + shadow upgrade

Three card types. Product cards group a thumbnail, segment badge, title and price. Feature cards are minimal: icon, title, description, no shadow. All cards lift 2px on hover with a shadow upgrade.

HotelsAI EXPERTS
Direct Booking Direct Booking Optimization A GPT expert that audits your booking funnel and writes the fixes, step by step.
from $XX
OperatorsPROMPTS
Proposals Proposal Automation Pack Turn a trip brief into a polished, on-brand proposal in minutes.
from $XX
Evidence-led Every recommendation traces to an observed source. No invented data, ever. How it works →
[10] Forms & fields

Forms · inputs, states, controls

44px targets · teal focus ring

Inputs are 44px tall with a hairline border and a teal focus ring. Labels sit above the field in semibold. Error state turns the border red with a message below. Checkboxes and radios fill teal when active.

As it appears on the booking
We never share this
Enter a valid number
Subscribe to the newsletter Send me product updates Monthly Annual
[11b] Icons

Icon set

Lucide · MIT · teal

One line style: 24px grid, 2px stroke, round caps and joins, drawn with currentColor so an icon inherits teal, amber or white from its context. Scalable SVG for buttons, lists, feature blocks, slides and lessons. Two vocabularies: core (AI and operations) and tourism.

Source: Lucide (MIT, lucide.dev). Real library icons embedded as inline SVG, not redrawn. Pick the Lucide name when you need one not shown here.

Core · AI & operations
AI · sparkles
Automation · workflow
Branch · git-branch
Structure · layout-grid
Growth · trending-up
Calendar
Message · message-square
Verified · badge-check
Chart · bar-chart-3
Speed · gauge
System · network
Tourism
Hotel
Destination · landmark
Map pin
Globe
Guide · compass
Tour · bus
Booking · ticket
Traveller · luggage
Route
Package
Sizes & colour-in-context
16
24
32
48
Teal on light Teal on dark Amber accent
[12] Voice · say/don't

Voice · opportunity, not fear

Source brand-voice.md

We sell opportunity, not fear. Friendly, clear, grounded, conversational. No hype, no guru talk, no FOMO. Line breaks as pauses. No em dashes: real people do not write with them, and they are the clearest "AI wrote this" tell.

Say

Tourism doesn't lack tools. It lacks structure.

Here is a path forward you can start today.

Every figure traces to a source you can check.

Don't

This game-changer will 10x your revenue overnight.

You're losing money every day you wait.

Unlock the secret the industry doesn't want you to know.

[◇] Diagrams · DS-D

Workflows & diagrams

15 formats · static SVG · zero lib

Fifteen diagram formats for when a post, slide, article or document needs to show a process, a choice or a journey. Sober editorial language: ink line work, the teal accent kept rare for focus, colour only where it carries meaning. Each node can carry a title and a one-line subtitle, each figure an italic gloss and a one-line synthesis. All static on-brand SVG: zero library, zero interactivity, renders crisp to PNG, shown here full width as it appears in real material.

Which one to use
  • A reasoning loop with a return path → LoopAnnotated
  • A linear chain that loops back → LinearFlowReturn
  • A choice or go/no-go → DecisionTree
  • Steps over a time axis → TimelineCards
  • Tracks compared on one clock → TimeLadder
  • One job split into parallel workers → FanOutTree
  • Parallel lenses then a merge → FanConverge
  • One idea, branches for topics → RadialMindMap
  • Two axes, four quadrants → MatrixRich
  • Layers, base to top → TierStack
  • Outer process vs inner decision → Lanes
  • Customer or traveller path → JourneyMap
  • Conversion stages → Funnel
  • A deliberate circular process → CycleLoop
  • Brainstorm and grouping → StickyNoteBoard
[13] Stats & KPI

Stats · big numbers that land

Tabular numerals · teal accent

Big numbers carry the headline metric. One number per card, a short label above, context below. Tabular numerals keep figures aligned. Use the dark accent card to spotlight the single most important number on a page.

Time to value3 minFrom brief to draft proposal
Hours saved / week15Per operator, on average
Catalogue10Segments, each with its own offers
Languages7EN · PT · ES · FR · DE · IT · AR
[14] Charts · donut/bar/line

Charts · SVG, portable everywhere

SVG/CSS · scales in PDF & slides

Charts are SVG and CSS, zero dependencies, vector-crisp in slides, PDF and web. The brand teal leads; the orange CTA color is the contrast pair. Functional/segment colors only when the data is segment-coded.

Donut
Effort vs impact, share of recommendations
Bar
Organic traffic vs a category rival, monthly visits (illustrative sample data)
Us
sample
Category rival
sample
Line
Organic sessions, 12-month trend
[15] Radar · heatmap · gauge

Comparative visualisations

Radar · heatmap · readiness gauge

Radar compares a subject across dimensions. Heatmap shows a matrix at a glance (teal scale = intensity). Gauges read readiness or score, color-coded by threshold.

Radar
Channel coverage vs category, 5 dimensions
TravelTech Category avg
Heatmap
Segment × channel opportunity, teal = higher
Gauge
Audit readiness by area, score out of 100
[15+] Advanced charts

Advanced charts

SVG · data-labels · on-brand

Built on the same zero-dependency SVG approach as the charts above, so every one renders crisp in slides, PDF and PNG. The technique is reconstructed on-brand from Chart.js (data-labels on every series) and TradingView lightweight-charts (candlestick, area). For live, interactive charts in an app, see the charts playground (Chart.js + lightweight-charts, real libraries).

Area · gradient fillSessions over 12 months, value labels
CandlestickWeekly bookings range (open/high/low/close)
Column · with data-labelsRevenue by segment, value on each bar
Stacked barChannel mix by quarter, share labels
Multi-lineTTD vs category, end labels
Bullet chartActual vs target, qualitative bands
Progress ringAdoption to date, center label
Sparkline + KPIInline trend beside the number
42%↗ +14 pts
[16] Tables

Tables · data & comparison

Zebra hover · right-aligned numbers

Tables use a tinted header, hairline row separators (no vertical borders), and a teal hover wash. Number and currency columns are right-aligned with tabular figures in Open Sans, the single brand font. Comparison tables spotlight the recommended column with a teal tint.

Data table
SegmentOfferPriceStatus
HotelsDirect Booking Optimizationfrom $XXLive
Tour OperatorsProposal Automation Packfrom $XXLive
DestinationsDMO IntelligencecustomBeta
Tour GuidesItinerary Intelligence$29Live
Comparison table · recommended column spotlighted
CapabilityStarterProEnterprise
Prompt packs
GPT experts
Implementation sprint
Dedicated support
[17] Risk · quality gates

Evidence · risk & quality gates

For audits & reports

Evidence components for audit reports and dashboards. Risk register pairs each risk with likelihood and impact pills. Quality gates show pass/warn/fail verdicts. Low-key by default, color only on the state.

Risk register
Risk R-01Ad code on site differs from the ad code in creative
LikelyHigh
Risk R-02Trustpilot score suppressed, proof not surfaced on-site
PossibleMedium
Risk R-03Organic traffic decline raises reliance on paid
LikelyMedium
Quality gates
Provenance check
Every claim traces to an observed source
Pass
Benchmark coverage
Industry benchmarks not independently verified
Concerns
Internal analytics
No account access, out of scope for this audit
Blocked
[18] Tabs · segmented · toggle

Tabs, segmented & toggle

Teal underline · pill · switch

Tabs switch between views in the same context: a teal underline marks the active one. Segmented controls are a compact choice for 2 to 4 mutually exclusive options. The toggle is a single on-off switch. All work live in HTML (interactive presentations, lessons, dashboards) and render in their current state for static export.

Tabs underline active
TTD is the AI operational system for tourism. Strategy, products and systems that make tourism businesses more organised, intelligent and profitable.
Segmented control
Toggle on / off switch
[19] Alerts & toasts

Alerts & toasts

Semantic color · left rule

Alerts are inline, persistent messages with a semantic left rule. Toasts are transient, float over content on a dark surface, and auto-dismiss. Color comes from the semantic status system, never decorative.

Heads upThis audit is outside-in research, built only from public data.
VerifiedEvery figure traces to an observed source.
Confirm with first-party dataThis figure leans on a common benchmark.
Out of scopeInternal analytics could not be observed in this study.
Toast floats on dark
Report exported to PDF.
[20] Empty & loading

Empty states & loading

Skeleton over spinner

Empty states guide the next action, never leave a blank screen. For loading, prefer skeleton screens that match the real layout (shimmer left-to-right at 1.5s) over spinners. Spinners only where a skeleton would be too complex.

No reports yet

Run your first audit and it will appear here, ready to share.

Submitting…
[21] Modal & command-K

Overlays · modal & command palette

Scrim blur · keyboard-first

Modals interrupt for one focused decision: a scrim with blur, a centered card with soft corners, actions bottom-right (primary last). The command palette is the keyboard-first launcher: fuzzy search, grouped results, teal active row.

Modal
Command palette · ⌘K
ESC
Actions
New audit report
Export current to PDF
Segments
Hotels playbook
[▷] Interactive atoms

Quiz & simulator

Vanilla JS · zero lib · in atoms.css

Two interactive atoms for teaching content: a diagnostic quiz with per-answer feedback that locks once answered and scores at the end, and a process simulator that steps through a scripted loop with real brakes (turn limit, budget ceiling). Both are vanilla JS, theme-bound, and reusable across post, article and course material.

Quiz · diagnostic, per-answer feedback

1. A guest abandons the booking on the payment screen. What is the first fix to test?

2. You have one stat with no verifiable source and a deadline. What do you publish?

Process simulator · step through a loop with brakes
booking-recovery loop · goal: help the guest finish the booking
goal recover the abandoned booking. Criteria: guest completes payment, or stop after 6 turns, or stop at US$ 5.00 spend.
turn 0/6 cost US$ 0,00/US$ 5,00 recovered state idle
[22] Motion patterns · live

Motion runtime · ttd-motion.js

Vanilla · 0 deps · respects reduced-motion

A single script (ttd-motion.js) materialises the motion specs as live behaviour. Attach a pattern with a data-attribute, no config. The scroll-progress bar at the very top of this page is the runtime too. Everything collapses to instant under prefers-reduced-motion. Press replay to re-trigger the scroll reveals.

Reveal · drift

Fade + 16px up

Content fades in with a slight upward drift when 15% enters the viewport. The default scroll reveal. data-ttd-reveal
Count-up

19400

Numbers count from zero to value when scrolled into view. Tabular numerals keep it steady. data-ttd-countup="19400"
Parallax

Subtle depth

Backdrops translate slightly against scroll for depth. Reserved for hero layers, never body text. data-ttd-parallax="0.2"
Split-text

Tourism, structured by intelligence.

Headlines split into words that rise in sequence. Capped stagger so it never feels like loading. data-ttd-split
Stagger group

Children in sequence

A container reveals its direct children with an 80ms stagger, capped at five (longer reads as a loading bug). data-ttd-reveal-stagger
Marquee · continuous
Travel AgenciesTour OperatorsHotelsDestinationsTour GuidesResortsAttractionsAssociations
data-ttd-marquee="40"  ·  px/second
[23] RTL & multilingual

Built for seven languages

EN · PT · ES · FR · IT · DE · AR

The product ships in seven languages. Six are left-to-right; Arabic is right-to-left and the most demanding case, so preparing for AR covers every switch. Use the language switch in the header to flip the whole page: watch the layout mirror, the font become Noto Sans Arabic, and the accents move to the inline-start side. The rule: never hardcode left/right, use logical properties (margin-inline, text-align:start). This applies across the storybook, the shadcn product components, the slides, and Remotion video.

Latin · LTR Open Sans
AI Operational Systems

Tourism, structured by intelligence.

From scattered operations to one clear system. Ready-made tools and done-for-you systems.

Core benefit

Simplicity, clarity, ease and speed in every message and product.

Arabic · RTL Noto Sans Arabic
أنظمة الذكاء الاصطناعي التشغيلية

السياحة، منظَّمة بالذكاء.

من عمليات مبعثرة إلى نظام واحد واضح. أدوات جاهزة وأنظمة منجزة لك.

الفائدة الأساسية

البساطة والوضوح والسهولة والسرعة في كل رسالة وكل منتج.

How the switch worksSet dir="rtl" lang="ar" on the page or any block. Fonts, alignment and inline accents flip automatically. Direction-aware icons get .ttd-bidi-flip. No duplicate stylesheets.
[24] Motion stack

Motion · three tiers, one timing

Cheapest step that delivers

Animation scales in three tiers; always reach for the cheapest that delivers. All of them read the same timing tokens (tokens.motion.js): the same durations and easings power web, decks and Remotion video, so the brand moves the same everywhere.

Tier 1 · ttd-motion.js

CSS / Web Animations

Zero dependencies. Reveal, parallax, marquee, count-up, scroll-progress. Covers ~90% of cases: web, decks, reports. in this library · default
Tier 2 · Motion One / Framer

Springs & layout

Physics springs, layout animations, gestures. Already in the portal (framer-motion 12). For product UI that needs life. portal · react
Tier 3 · GSAP

Scroll-telling

Long timelines, scroll-triggered sequences, morphing. The heavy-duty option. Already available (gsap 3.15). portal · heavy
Video is a separate discipline, same brandRemotion (tools/remotion, squads/ai-reels) renders .mp4 video. It imports tokens.motion.js and the brand colours, so video stays on-brand without living inside this library.
[25] Templates & examples

Template library

3 families · one token base

Every piece type, built on the same tokens. Three families: slides (present or explore), documents (proposal to media kit, markdown → PDF), and social (fixed-canvas → PNG). Click any card to open the live example. All are multilingual and RTL-ready, with the brand guardrails baked in (em-dash sanitizer, amber eyebrows, logo per context).

Slides & decks
Social · fixed-canvas → PNG
Social templates Quote 1080×1080, carousel cover 1080×1350, story 1080×1920. Auto-fit headlines for every language. Open ↗
Auto-fit · multilingual Headlines scale to fit any of the 7 languages (EN to AR), never truncated. Render to PNG with render-png.mjs.
On-brand guardrails Em-dash sanitizer, amber eyebrows, teal accent, logo per context. Built into every engine.
Documents · markdown → PDF

One engine (documents/build-doc.mjs), five presets. Outputs are generated on demand (not committed). Build any preset from the terminal:

Generate a document terminal
# proposal · report · guide · sop · media-kit
PRESET=guide INPUT_MD=content/sample-guide.md \
  OUTPUT=guide.html node build-doc.mjs
node render-pdf.mjs guide.html guide.pdf
Proposal
Report
Guide / ebook
SOP
Media kit