Style guide. Every token and block in one place.
The colors, type, buttons, forms and components every Tessel page is built from. Change a token here and it changes everywhere.
Ink on paper. Cobalt for what is live.
Every color is a variable on the root element. The isometric drawings read the same variables, so a change here repaints them too.
Base
Paper
--paper
#FFFFFF
Paper 2
--paper-2
#F5F5F3
Ink
--ink
#0B0B0D
Ink 2
--ink-2
#47474E
Muted
--muted
#8D8D95
Line
--line
rgba(11,11,13,.085)
Line 2
--line-2
rgba(11,11,13,.22)
Accent
Accent
--accent
#2337FF
Accent top
--accent-top
#5767FF
Accent side
--accent-side
#1322C4
Accent wash
--accent-wash
rgba(35,55,255,.08)
Isometric faces
Face top
--face-top
#FFFFFF
Face left
--face-l
#F0F0EE
Face right
--face-r
#DFDFDB
Night
Night
--night
#0B0B0D
Night 2
--night-2
#151518
Night line
--night-line
rgba(255,255,255,.1)
Night text
--night-text
#F3F3F1
Night muted
--night-muted
#8E8E96
Night top
--night-top
#2A2A2F
Night left
--night-l
#18181C
Night right
--night-r
#101013
Three typefaces. Each with one job.
Fraunces for headings and numbers, Inter Tight for reading, Martian Mono for labels. Display sizes scale with the viewport.
Build block by block.
Every run, traced.
Approvals happen in Chatline.
Finance lead approval
Every block is typed, tested and traced before it touches production.
Tessel turns workflows, data and AI agents into blocks your team can stack, test and ship.
Each agent gets a budget, a list of tools and a named approver. It cannot exceed any of the three, and every decision it makes is logged with its reasoning.
p95 184 ms per block · 12 regions
2,100,000,000
One size. Keys that press into their own depth.
Hover a button and it sinks toward the page. The side faces are pseudo-elements, so each button is a single link in the markup.
Square fields. Labels you can always read.
Plain form elements with form_ classes on each wrapper. Focus turns the border cobalt.
The shared blocks. Reuse them before adding new ones.
Every inner page is assembled from these. Each label shows the class to look for in the markup.
Slab and card · .card.slab · .slab.is-featured
Slab
Hover it. The card extrudes into a block with grey sides.
Slab, featured
Permanently raised with a cobalt edge. Use one per row.
Card
Padding, gap and an optional icon, title and text.
Chips and tags · .chip · .chip.is-accent · .tag-type · .tag-type.is-agent
Filter · .filters · .filter.is-active
Cells grid · .cells.is-4 · .cell
Facts · .facts · .facts_item
Flow diagram · .flow · .flow_node · .flow_node.is-agent · .flow_link
FAQ item · .faq_list · .faq_item · .faq_q · .faq_a
One trigger firing one workflow from start to finish is one run, however many blocks it passes through.
Yes. Logic blocks compile to TypeScript and sync to your Git repository.
Drawn by one attribute. No hand-made polygons.
Add an empty SVG with one of these attributes and the shared script draws it on a true 30° grid. Change the value to change the drawing.
Cube
data-iso="cube"
Stack
data-iso="stack"
Tower
data-iso="tower"
Plinth
data-iso="plinth"
Pair
data-iso="pair"
Tiles
data-iso="tiles"
Teams
data-iso="teams"
Runs
data-iso="runs"
Connectors
data-iso="connectors"
Regions
data-iso="regions"
Glyph, typed
data-glyph="typed"
Glyph, traced
data-glyph="traced"
Glyph, approved
data-glyph="approved"
Connector chip
data-chip="PG"
Chip, accent
data-chip="SL" data-accent
Block city
data-city="23"
One container. Three breakpoints.
Every section sits inside the same container, between two blueprint rails. Content keeps a fixed distance from the rails at every width.