Standard layout patterns used across WhereTF screens. Follow these when building new screens.
Every page shares a persistent shell:
┌────┬────────────────────────────────────────────────────────┐
│ │ Topbar / breadcrumb │
│ S ├──────────┬────────────────────────┬───────────────────┤
│ I │ │ │ │
│ D │ Left │ Center │ Right │
│ E │ Panel │ Panel │ Panel │
│ B │ ~280px │ flex: 1 │ ~320px │
│ A │ │ │ │
│ R │ │ │ │
│ │ │ │ │
└────┴──────────┴────────────────────────┴───────────────────┘
- Width: 52–56px, fixed
- Background:
#1e293b, border-right:1px solid #334155 - Icons: 32×32px, 6px border-radius, centered
- States: default
#94a3b8, hover/active#ff6600with#334155background - Links: Modules, Items, Templates, Activity (transaction log), Taxonomy (admin)
- Collapse state persists
- Height: ~44px, background:
#1e293b, border-bottom - Contains breadcrumb navigation
- Breadcrumb segments are clickable links; current segment is plain text
The standard content layout. All primary screens use this pattern.
- Width: ~280px, fixed, background:
#1e293b, border-right - Scrollable independently
- Contents, top to bottom:
- Search input — full-width, icon left, clear button right. Accent border on focus.
- Active filter pills — removable chips showing current filters. AND logic. Each pill:
Label: Valuewith × dismiss. - Entity list / category filter — scrollable list of selectable items (categories, entities, tree nodes). Each row: icon/indicator, name, count badge. Click to filter or navigate. Active state: accent highlight.
- Flex: 1, fills remaining width
- Contains a header bar (title, count, actions) pinned at top
- Main content is a data table or grid:
- Sticky header row with sortable columns
- Frozen first column(s) (name + icon)
- Alternating row backgrounds:
#0f172a/#111827 - Hover:
#1a2332 - Selected:
#1a0f00with 3px left accent border - Inline cell editing on double-click
- FAB (floating action button) at bottom-right for primary create action: 48px circle,
#ff6600,+icon
- Width: ~320px, fixed, background:
#1e293b, border-left - Scrollable independently
- Empty state: centered muted text ("Select an item to view details")
- When populated:
- Header — entity name (editable inline, click-to-edit), description (editable)
- Sections — each with uppercase label header, border-bottom, content below
- Tags/chips — for categories, relationships. Removable (×), add button (
+ Addwith dashed border) - Collapsible groups — chevron toggle, completeness badges
- Actions — danger zone at bottom (delete/hide)
| Token | Value | Usage |
|---|---|---|
| Accent | #ff6600 |
Selection, active states, primary actions, FAB |
| Background (deep) | #0f172a |
Body, inputs, table rows |
| Background (surface) | #1e293b |
Panels, cards, headers |
| Background (hover) | #334155 |
Interactive hover states |
| Border | #334155 |
Panel borders, dividers, card borders |
| Text primary | #e2e8f0 |
Body text |
| Text secondary | #94a3b8 |
Labels, descriptions |
| Text muted | #64748b |
Counts, hints, disabled |
| Text placeholder | #475569 |
Input placeholders, empty values |
| Danger | #ef4444 |
Delete actions, remove buttons |
| Success | #22c55e |
Complete indicators |
| Warning | #f59e0b |
Partial indicators |
┌──────────────────────────┐
│ 🔍 Search items... × │
└──────────────────────────┘
- Background:
#0f172a, border:#334155, focus border:#ff6600 - 13px font, 8px padding
┌────────────────────┐
│ Label: Value × │
└────────────────────┘
- Background:
#1a0f00, border:#ff660044, text:#ff6600 - 11px font, 4px 8px padding, 12px border-radius
SECTION TITLE + Action
─────────────────────────────────────────────────
- 10–11px uppercase, letter-spacing 0.05–0.08em, color:
#64748b - Border-bottom:
1px solid #334155
┌────────┐
│ label │
└────────┘
- 10px font, 2px 8px padding, 10px border-radius
- Color-coded by type: blue (receptacle), purple (fixed), green (active), red (disabled)
- Fixed bottom-center,
#1e293bbackground, border, shadow - Message + orange "Undo" button, auto-dismiss after 5 seconds
- Animation: slide up from below
- Absolute positioned,
#1e293bbackground, border, shadow - Items: 6px 12px padding, hover:
#334155 - Max-height with scroll
- Click element → replace with input
- Input: accent border, same font as display element
- Save on blur/Enter, cancel on Escape
For screens that don't need left-panel filtering (e.g., module detail, template detail):
┌────┬──────────────────────┬────────────────────────────────┐
│ │ Entity List / │ Preview / Grid │
│ S │ Configuration │ + Properties sidebar │
│ │ (panel-left) │ (panel-right) │
└────┴──────────────────────┴────────────────────────────────┘
- Left side: entity list or configuration form
- Right side: visual preview (SVG grid) with optional properties panel alongside
Module list, template list — card grid layout before drilling into detail:
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr))- Cards:
#1e293bbackground,#334155border, hover: accent border - 16px gap, 24px padding
These apply everywhere. See ui-paradigms.md for full details.
- No right-click menus — all actions via visible UI
- Undo, not confirm — destructive actions execute immediately with undo toast
- Click to select — click again to deselect, Ctrl+click for multi-select
- Inline editing — click/double-click to edit in place, save on blur
- Filter from value — funnel icon on parameter values adds filter pill