{% extends "base.html" %} {% load common_extras %} {% comment %} The design system's living style guide, and the smoke view the L1-B acceptance criteria ask for: toast + ui_select + platform icons, all exercised on one page that is not the page they were built for. Note what is NOT here: a per-page toast include. Studio's toast host is a partial each template has to remember to pull in; this page fires toasts with nothing but a form posting to a toast_response view. {% endcomment %} {% block title %}Design system · DemandTrail Messaging{% endblock %} {% block page_header %}
The tokens, components and helpers every later UI issue renders into.
{% endblock %} {% block content %}
Orange is the primary action and the focus ring, nothing else. Selected and current are ink;
state is one of five tones, always a dot and a word. test_colour_roles.py holds the line.
.tabs at the top of a page (links, aria-current), .tabs-inline
inside a pane (a tablist, aria-selected). Active is ink.
| Sequence | Steps | Active | Completion | Status |
|---|---|---|---|---|
| New subscriber welcome | 4 steps | 182 | 64% complete |
{% include "components/status_pill.html" with tone="success" label="Active" %} |
| October product update | — | 2,140 | 1,490 of 2,140 |
{% include "components/status_pill.html" with tone="info" label="Sending" %} |
Real radios, visually hidden: arrow keys move between cards. Selected is a 2px ink border.
Fired by toast_response(...) over HX-Trigger. The host lives in
base.html, so this works on every page with no include.
{% templatetag openblock %} ui_select {% templatetag closeblock %}: single and multi,
with a panel that escapes the toolbar's overflow.
One partial, six platforms, currentColor. The last tile is an unknown key,
proving the fallback glyph.
.pi-chip-hero at size="lg" is the channel connect pages' mark. The
radius has to be a class: .pi-chip sets border-radius unlayered,
so a rounded-* utility beside it loses silently.
Label, control, hint, error: the shape every settings page repeats. Spacing between
fields is .field's own margin; the control's width stays a call-site
decision, which is why none of these classes sets one.
What your team sees in the workspace switcher.
Colours must be a 6-digit hex value like #3B82F6.
The channel connect pages' two pieces. Tailwind's preflight zeroes ol and
nothing restored it, so these steps are the first numbered list in the product.
@BotFather in Telegram and send /newbot.bot.
--fs-*, not --text-*: that prefix already holds the text
colours, and it is Tailwind v4's @theme namespace.
.card sets background, border and radius and nothing else: no padding, no
display. This file is unlayered, so any property it set would be one no utility at the
call site could ever override.
The white surface everything sits on.
Sunken, for pickers and options.
The one they picked.
Every create form lives in one: the button names the thing, the dialog asks for its name.
{% templatetag openblock %} modal "id" title="…" close_on="event" {% templatetag closeblock %}, opened with $modal('id').
The dot carries the colour and the text carries the meaning. Bean green is
~2.8:1 on white, so it is a fill and never a label. --success-700 is the
readable weight.
One, where every list used to hand-roll its own.
No flows here yet
A flow replies for you when something happens: a comment, a keyword, a reply to your story.
Bean green, the product's "good" colour since the redesign. 500 is a fill, 700 is text.