{% extends "base.html" %} {% block title %}Style guide — Bento{% endblock %} {% block content %}

Colors

Surfaces

{% set surfaces = [ ('--bg', '#FDF9FA', 'workspace background'), ('--bg-sidebar', '#FEF5F6', 'sidebar background'), ('--bg-card', '#FFFFFF', 'cards / lists'), ('--bg-card-hover', '#FBF5F6', 'hover state'), ('--bg-subtle', '#FAF2F3', 'pill backgrounds / code blocks'), ('--border', '#F1E4E6', 'soft dividers'), ('--border-strong', '#E8D4D7', 'separators on emphasis'), ] %} {% for token, value, note in surfaces %}
{{ token }} {{ value }} — {{ note }}
{% endfor %}

Text

{% set texts = [ ('--text', '#1F1614', 'primary text'), ('--muted', '#8E7A72', 'secondary text'), ] %} {% for token, value, note in texts %}
{{ token }} {{ value }} — {{ note }}
{% endfor %}

Brand & status

{% set status = [ ('--accent', '#E84564', 'coral — brand'), ('--accent-soft', '#FCD9DD', 'soft coral fill'), ('--success', '#2F9B5A', 'success / done'), ('--success-soft', '#DCF1E2', 'success fill'), ('--warn', '#D17A1E', 'warning / pending'), ('--warn-soft', '#FBE4CC', 'warning fill'), ('--error', '#D43F3F', 'error / failed'), ('--error-soft', '#F8D7D5', 'error fill'), ('--purple', '#6E60C9', 'in-progress / model'), ('--purple-soft', '#E1DDF5', 'purple fill'), ('--info', '#3B8BC8', 'live work indicator'), ('--info-soft', '#DDECF7', 'info fill'), ] %} {% for token, value, note in status %}
{{ token }} {{ value }} — {{ note }}
{% endfor %}

Typography

Page title — Varela Round

.page-title · 32px · weight 400

Session title — Varela Round

.session-title · 24px · weight 400

Body text — system sans (-apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto). 14px / 1.5.

Muted small (.muted .small) — 12px, color: var(--muted)

body · 14px · weight 400
monospace — ui-monospace, "JetBrains Mono", Menlo
inline code · 13px

Badges & status pills

done working processing processed unprocessed failed error cancelled running claude-sonnet-4-6 claimed
.badge.{done,working,processing,processed,unprocessed,failed,error,cancelled,running,model,claimed}

Working badge (animated)

working conic-gradient pastel rainbow with lavender glow — 2.4s cycle

Agent status pills

Healthy Online Working Offline
.status-pill.state-{good,online,working,offline}

Event type pills (Debug timeline)

SESSION DONE ASSISTANT THINKING TOOL RESULT RESULT TOKENS SYSTEM CUSTOM
.event-pill.type-{session,done,assistant,thinking,tool,result(.is-error),tokens,system,custom}

Buttons & controls

.btn-secondary · .btn-danger · .filter-button(.active)

Filter pills (Inbox)

.filter-tab(.active) · .filter-count

Toggles (filter popovers)

.toggle / .toggle-track / .toggle-thumb

Cards & surfaces

Stat card

Agents
3
0 online
Total cost
$0.0042
all time

Empty state

No items here yet. Run bento serve agent.py to start.

Mini-list row

.mini-list / .mini-row / .mini-icon.kind-{cron,inbox,webhook} / .mini-aside

Avatars

WS TP CT SE QA
.avatar (24) · .avatar-mini (18) · .avatar-md (32) · .avatar-lg (40) · .avatar-xl (56)

Palette

{% for c in ['#F8B5B0','#FFD4A8','#FFC8DD','#D4B5E8','#B5E0CC','#FCE38A','#FFB6A3','#C9DCEF','#E5C9B3','#F2A6C7'] %} · {% endfor %}
md5(agent_name) % palette — 10 warm pastels

JSON syntax (detail-pane)

"agent": "webhook-summarizer",
"input_tokens": 2186,
"is_error": false,
"output": null
.detail-pre with .json-{key,str,num,bool,null}
{% endblock %}