Good afternoon, Olivia 👋
It's Saturday, July 18. Time now is 5:52 PM
Live sessions
5Profile
Design System
Every reusable pattern in wisb, pulled straight from the live app — not a redesign.
Foundations
Core design tokens defined once in :root / html.dark and reused by every component below. Toggle Dark mode from Profile → Appearance to see them respond live.
Colors
Neutral scale + one semantic color per meaning. Money and status colors are intentionally the only saturated colors in the app.
Note: --accent/--bg/--card are no longer fixed — Pro Mode → Settings → General → Appearance has a 10-theme accent picker (Terracotta, Sage, Ocean, Plum, Gold, Indigo, Brick, Teal, Slate, Rose) that re-tints these three tokens across Easy Mode, Pro Mode, and Checkout at once. Terracotta (shown above) is the default. See Pro Mode extensions ↓.
Spacing scale
8px rhythm used across padding, gaps, and margins.
Border radius
Shadows
Borders do most containment work; shadow is reserved for buttons (tactile inset) and floating surfaces (modals, popovers).
Breakpoints
Icon sizes
Typography
IBM Plex Sans Arabic for UI text, IBM Plex Mono for anything countable (prices, phone numbers, timers, IDs).
Buttons
Two weights of chrome only: solid primary and outlined ghost. Everything else is an icon circle or a plain text link — button chrome is reserved for actions with real weight.
Primary & ghost
Icon buttons
Segmented / filter pills
Full-width button
Form components
Modal forms (Start session, New customer) share one field pattern: label above, 10px-radius input on the page background.
Search input
Text, select & textarea
Toggle switch
Navigation
Easy Mode uses a floating bottom pill; Pro Mode uses a fixed sidebar (documented separately, see note below); detail pages use underline tabs.
Bottom navigation
Underline tabs
List navigation
Pro Mode's fixed sidebar (.sidebar / .nav-item) and the Pro Mode topbar live inside an isolated Shadow DOM stylesheet, so they're intentionally not duplicated here — open Pro Mode from Profile to inspect them directly.
Cards & containers
One shape language throughout: 12px radius, 1px --line border, --card surface, no shadow unless floating.
Session card
The big elapsed-time readout is color-coded by duration, not by status: white under the "full day" threshold, amber between full-day and the maximum, red past the maximum — configurable from Pro Mode → Announcements → Session timer colors (defaults: 24h / 36h). Same rule applies whether the session is active or paused (a paused timer freezes at whatever color it already was).
Paused-too-long badge
The small "Paused · 00:00" badge (next to the status label) turns red once a session has been sitting paused for more than 2 hours, independent of the big timer's own color above.
Customer row
Identity & settings containers
Empty state
Status & feedback
Every status color maps to one meaning app-wide: green = good/active, amber = waiting/paused, red = owed/urgent.
Badges & chips
Attention pill
Auto-shows on the dashboard only when something needs review, cycling one item at a time (with a "+N more" count). Categories: long-running sessions, paused >2h, lockers expiring soon, today's room bookings, active manager announcements — each independently toggleable from Pro Mode → Announcements → Attention pill visibility. Clicking the pill body opens the relevant popup and dismisses that item automatically; the ✕ dismisses without opening anything.
Cafeteria welcome screen
Vertically centered in the viewport (not pinned to the top) on both web and mobile. The workspace name is live from Pro Mode → Settings → Workspace name, not hardcoded — defaults to "Kojo" if unset.
Checkout money states
Debt/change/warning colors inside the Checkout popup (Shadow DOM) — kept saturated on purpose since color is information in a payments UI, but fully theme-aware (each has a light + dark value; a real bug where these were hardcoded to light-mode-only hex values was found and fixed).
Toast
Notification row
Overlays
Every modal in the app shares the same overlay + card shell (16px radius, 22–24px padding, close circle top-end).
Modal
Popover
Notifications
Full-screen surfaces — the Checkout popup and Pro Mode — render inside Shadow DOM (#checkoutHost, #proModeHost) so their styles stay isolated from the rest of the app and aren't reproduced on this page.
Calls to action
Real copy, real hierarchy — exactly as used across the app.
Icons
Inline line-style SVGs, stroke currentColor, 1.7–2px stroke width, rounded caps — no emoji, no filled icon set.
Composite components
Larger real combinations, unchanged from the pages they're pulled from.
Start Session modal (search step)
Start a session
Customer identity + tabs
Assign Plan / Assign Locker are icon-only (tooltip, no visible label) at every screen size, so Start Session always has room to stay on one line. The session-status pill only renders when this customer currently has a live session anywhere in the app; it sits under the name on mobile and floats to the right of the row on wide screens (≥561px).
Pro Mode extensions
Patterns added inside Pro Mode's own Shadow DOM scope (#proModeHost), so they run on a separate token set — --surface/--muted/--warning/--danger instead of this page's --card/--ink-soft/--amber/--debt. Previews below are static snapshots using the current Terracotta values, not live var() references, since Shadow DOM styles don't leak into this page.
Accent theme picker
10 named themes, each pairing an accent color with a hue-matched background/card/surface set (same lightness & saturation as the original, only hue shifts). Lives in Pro Mode → Settings → General → Appearance only — removed from Easy Mode's Profile card so there's one control point. Picking a theme sets --accent/--accent-rgb/--bg/--card as inline styles on three hosts at once: document.documentElement, #proModeHost, #checkoutHost.
Control panel branding upload
Replaces two plain upload rows in Settings → General with live preview + upload + guidance cards. Fully wired: uploading actually updates the real Pro Mode sidebar logo and the browser's <link rel="icon">, not just a settings thumbnail.
In-place guided wizard
One question per screen, vertically centered, slim progress bar instead of a labeled stepper. Lives as a sibling view inside the panel it belongs to (list ⇄ wizard, toggled via hidden) rather than a stacked popup — avoids the .wide-modal-overlay z-index losing to .settings-modal-overlay. First used for Settings → Branches → "+ Add branch".
My Tasks — team kanban board
Team-wide task board under Pro Mode → Team → My Tasks. Three columns (To do / In Progress / In Review), real native drag & drop between them. Each column has two ways to create a task: the header + and a bottom + Add Task row that expands into an inline quick-add (title, then optional assignee/date/priority pickers, Enter or Save to commit). Opening a card (click anywhere on it) or "+New task" opens a full task-detail panel — status, assignees, dates, priority, time estimate, a real start/stop time tracker, tags, description, subtasks, a checklist, file attachments, and an activity feed with comments. Card progress bars are computed live from subtasks+checklist completion, not a manual field. Reuses .priority-badge for High/Medium/Low.
Confirm action
This is a live example of the shared modal shell (.ss-overlay / .ss-card) used by Start Session and New Customer.
Employee Handbook
Everything you need to know to run your shift at Kojo Space.
Cash Register
Count what you received from the shift before you, across every payment method.
Ready to paste into the Kojo - Daily income WhatsApp group, exactly like the shift handover routine in the Handbook.
Help & Support
How to use the wisb app, and who to contact for a technical issue.
Customers
Manage your venue members
Rooms
Lockers
Earnings & Payroll
View your payslips, salary breakdown, and payment details
My Schedule
Your shifts for this month.